Clipboard объект является интерфейсом к буферу обмена, используемому для копирования и вставки объектов Stateflow®. В отличие от других объектов API Stateflow, существует только один Clipboard объект. Можно использовать Clipboard копируемый объект и вставка графические и неграфические объекты в рамках того же графика, между графиками в той же модели Simulink®, или между графиками в различных моделях Simulink.
Создайте указатель на Clipboard объект путем вызова sfclipboard функция.
cb = sfclipboard;
Clipboard объект имеет два метода, используемые, чтобы скопировать и вставить объекты от одного местоположения до другого.
copy метод копирует заданные объекты в Clipboard объект.
cb.copy(objects);
Вы не можете скопировать смесь графических и неграфических объектов к буферу обмена в той же операции. Вместо этого объекты, которые вы копируете, должны быть все графическими (состояния, поля, функции, переходы, соединения и аннотации) или все неграфические (данные, события и сообщения).
Графические объекты копирования также копируют данные, событие и объекты сообщения, которые содержат графические объекты.
Все графические объекты, скопированные в одной операции копии, должны отобразиться в том же подсредстве просмотра. Другими словами, чтобы скопировать графические объекты в одной операции, они должны находиться в том же графике или субдиаграмме.
Чтобы обеспечить связи перехода и отношения включения между скопированными объектами, вы должны:
Скопируйте сгруппированное состояние в буфер обмена. Путем копирования сгруппированного состояния вы копируете все объекты, содержавшиеся в состоянии, а также все отношения среди этих объектов при помощи одной операции.
Скопируйте массив связанных объектов. Например, чтобы скопировать два состояния, соединенные переходом к другому контейнеру, сначала создайте массив, который содержит и состояния и переход. Затем можно скопировать массив в буфер обмена.
pasteTo метод вставляет содержимое буфера обмена к новому контейнеру.
cb.pasteTo(container)
Если буфер обмена содержит графические объекты (состояния, поля, функции, переходы, соединения и аннотации), контейнер должен быть графиком или субдиаграммой. Чтобы преобразовать состояние, поле или графическая функция к субдиаграмме, установило свой IsSubchart свойство к true. После вставки можно преобразовать контейнер назад путем установки его IsSubchart свойство к false.
Когда вы копируете и вставляете сгруппированное состояние, вы копируете не только состояние, но и все его содержимое. Этот метод является самым простым способом скопировать объекты при помощи API Stateflow.
Для примера предположите тот ch указатель на этот график.

Можно сделать копию A состояния и его содержимое путем устанавливания значения свойства IsGrouped к true прежде, чем скопировать и вставить состояние.
Найдите, что указатель утверждает A.
sA = ch.find('-isa','Stateflow.State','Name','A');
Сгруппируйте состояние и его содержимое путем установки IsGrouped свойство для состояния к true. Сохраните предыдущую настройку этого свойства, таким образом, можно вернуться к нему позже.
prevGrouping = sA.IsGrouped; sA.IsGrouped = true;
Поменяйте имя состояния к 'Copy_of_A'. Сохраните предыдущее имя, таким образом, можно вернуться к нему позже.
prevName = sA.Name;
newName = ['Copy_of_' prevName];
sA.Name = newName;Создайте указатель на объект буфера обмена.
cb = sfclipboard;
Скопируйте сгруппированное состояние в буфер обмена.
cb.copy(sA);
Восстановите государственную собственность к их исходным настройкам.
sA.IsGrouped = prevGrouping; sA.Name = prevName;
Вставьте копию объектов от буфера обмена до графика.
cb.pasteTo(ch);
Настройте государственную собственность нового состояния.
sNew = ch.find('-isa','Stateflow.State','Name',newName); sNew.Position = sA.Position + [400 0 0 0]; sNew.IsGrouped = prevGrouping;

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

Можно скопировать, утверждает A1 и A2, наряду с переходом между ними, к новому состоянию.
Найдите, что указатель утверждает A.
sA = ch.find('-isa','Stateflow.State','Name','A');
Добавьте новое состояние под названием B. Позволять вставить другие объекты в B, преобразуйте новое состояние в субдиаграмму.
sB = Stateflow.State(ch);
sB.Name = 'B';
sB.Position = sA.Position + [400 0 0 0];
sB.IsSubchart = true;Создайте массив под названием sourceObjs это содержит указатели на состояния и переходы в A состояния. Используйте функцию setdiff удалить A состояния от массива копируемых объектов.
objArrayS = sA.find('-isa','Stateflow.State'); objArrayS = setdiff(objArrayS,sA); objArrayT = sA.find('-isa','Stateflow.Transition'); sourceObjs = [objArrayS ; objArrayT];
Создайте указатель на объект буфера обмена.
cb = sfclipboard;
Скопируйте объекты в sourceObjs и вставьте их в B.
cb.copy(sourceObjs); cb.pasteTo(sB);
Преобразуйте B назад к состоянию.
sB.IsSubchart = false; sB.IsGrouped = false;
Измените местоположение состояний и переходов в B.
newStates = sB.find('-isa','Stateflow.State'); newStates = setdiff(newStates,sB); newTransitions = sB.find('-isa','Stateflow.Transition'); newOClocks = get(newTransitions,{'SourceOClock','DestinationOclock'}); newPositions = get(newStates,'Position'); for i = 1:numel(newPositions) set(newStates(i),'Position',newPositions{i} + [25 35 0 0]); end set(newTransitions,{'SourceOClock','DestinationOclock'},newOClocks);

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