Скопируйте и вставьте объекты 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 и chX MATLAB®, соответственно:

  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 к растущему массиву объектов прежде, чем скопировать законченный объектный массив в буфер обмена.

Используя пример диаграммы Stateflow в конце Создают Новые Объекты в Графике, можно скопировать состояния A1, A2 и переход, соединяющий их с другим состоянием, B, с этими командами API, где sA и sB являются указателями на объект к состояниям A и B, соответственно.

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

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

Примечание

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

Похожие темы