Скопируйте и вставьте объекты Stateflow

Доступ к объекту буфера обмена

Объект Clipboard (только один существует) обеспечивает интерфейс к буферу обмена, используемому в копировании объектов Stateflow®. Вы не можете непосредственно создать или уничтожить объект Clipboard, когда вы делаете другие объекты API Stateflow. Однако можно присоединить указатель на него, чтобы использовать его свойства и методы, чтобы скопировать объекты Stateflow.

Вы создаете указатель на объект Clipboard при помощи sfclipboard функция можно следующим образом:

cb = sfclipboard;

Объекты буфера обмена имеют два метода, copy и pasteTo, это вместе обеспечивает функциональность, чтобы скопировать объекты от одного объекта до другого. copy метод копирует заданные объекты в объект Clipboard и pasteTo метод вставляет содержимое буфера обмена к новому контейнеру.

copy Ограничения метода

copy метод подвергается этим ограничениям для всех объектов:

  • Объекты, которые вы копируете, должны быть все графическими (состояния, поля, функции, переходы, соединения) или все неграфические (данные, события, сообщения).

    Вы не можете скопировать смесь графических и неграфических объектов к буферу обмена в той же операции копии.

  • Чтобы обеспечить связи перехода и отношения включения между скопированными объектами, необходимо скопировать целый массив связанных объектов.

    Все связанные объекты должны быть частью массива объектов, скопированных в буфер обмена. Например, при попытке скопировать два состояния, соединенные переходом к другому контейнеру, можно только выполнить это путем копирования и состояний и перехода одновременно. Таким образом, необходимо сделать одну копию единого массива, содержащего и состояния и переход, который соединяет их.

    Если вы копируете сгруппированное состояние в буфер обмена, вы копируете все объекты, содержавшиеся в состоянии, а также все отношения среди объектов в сгруппированном состоянии. См. Копию путем Группировки.

Скопируйте графические объекты

copy метод подвергается этим ограничениям для всех графических объектов:

  • Графические объекты копирования также копируют Данные, Событие и Объекты сообщения, которые содержат графические объекты.

  • Если все скопированные объекты являются графическими, они должны все отобразиться в том же подсредстве просмотра.

    Другими словами, все графические объекты, скопированные в одной команде копии, должны находиться в том же графике или подграфике.

Копия путем группировки

Копирование сгруппированного состояния в диаграмме Stateflow копирует не только состояние, но и все его содержимое. Путем группировки состояния, прежде чем вы скопируете его, можно скопировать его и все его содержащие в нем объекты на всех уровнях включения с API Stateflow. Этот метод является самым простым способом скопировать объекты. Используйте его, когда это возможно.

Вы используете булев IsGrouped свойство для состояния, чтобы сгруппировать то состояние. Если вы устанавливаете IsGrouped свойство для состояния к значению true (=1), это сгруппировано. Если вы устанавливаете IsGrouped к значению лжи (=0), не сгруппировано состояние.

Эта процедура в качестве примера копии утверждает к графику X посредством группировки. В этом примере примите, что у вас уже есть указатель, чтобы утвердить A и строить диаграмму X через переменные sA MATLAB® и chX, соответственно:

  1. Если состояние, чтобы скопировать уже не сгруппировано, сгруппируйте его наряду с его содержимым путем установки IsGrouped свойство для того состояния к true (=1).

    prevGrouping = sA.IsGrouped;
    if (prevGrouping == 0)
    	sA.IsGrouped = 1;
    end
  2. Получите указатель на объект Clipboard.

    cb = sfclipboard;
  3. Скопируйте сгруппированное состояние в буфер обмена с помощью объекта Clipboard.

    cb.copy(sA);
  4. Вставьте сгруппированный объект к его новому контейнеру.

    cb.pasteTo(chX);
  5. Установите скопированное состояние и его исходное состояние к его предыдущему IsGrouped значение свойства.

    sA.IsGrouped=prevGrouping;
    sNew=chX.find('-isa','Stateflow.State','Name',sA.Name);
    sNew.IsGrouped=prevGrouping;

Скопируйте объекты индивидуально

Можно скопировать конкретные объекты от одного объекта до другого. Однако для того, чтобы сохранить связи перехода и отношения включения между объектами, необходимо скопировать все подключенные объекты целиком. Чтобы выполнить это, используйте общий метод добавления объектов от последовательных находок в рабочем пространстве MATLAB к растущему массиву объектов прежде, чем скопировать законченный объектный массив в буфер обмена.

Для примера, в следующем графике, можно скопировать, утверждает A1 и A2, наряду с переходом между ними, к новому состоянию.

Предположим тот ch указатель на график.

  1. Найдите, что указатель утверждает A.

    sA = ch.find('-isa','Stateflow.State','Name','A');

  2. Добавьте новый B состояния.

    sB = Stateflow.State(ch);
    sB.Name = 'B';

  3. Создайте массив sourceObjs содержа указатели на состояния и переходы в A состояния.

    objArrayS = sA.find('-isa','Stateflow.State','-depth',1);
    objArrayT = sA.find('-isa','Stateflow.Transition','-depth',1);
    sourceObjs = [objArrayS ; objArrayT];

  4. Создайте указатель на объект буфера обмена.

    cb = sfclipboard;

  5. Скопируйте объекты в sourceObjs и вставьте их в B состояния.

    cb.copy(sourceObjs);
    cb.pasteTo(sB);

Можно также скопировать неграфические данные, событие и объекты сообщения индивидуально. Однако с тех пор нет никакого пути к этим объектам найти их новых владельцев, необходимо гарантировать, что вы копируете каждый из этих объектов отдельно к его соответствующему объекту владельца.

Примечание

Копирование объектов индивидуально более трудно, чем копирование сгруппированных объектов. См. Копию путем Группировки.

Похожие темы