copy

Скопируйте массив объектов в буфер обмена

Синтаксис

Описание

пример

copy(clipboard,objArray) копирует объекты в массиве objArray в буфер обмена. Чтобы вставить скопированные объекты, используйте pasteTo функция.

Примеры

свернуть все

Состояние группы A и скопируйте его содержимое в диаграмму ch. При группировке состояния, прямоугольника или графической функции можно скопировать и вставить все объекты, содержащиеся в сгруппированном объекте, а также все связи между этими объектами. Этот метод является самым простым способом программного копирования и вставки объектов. Если состояние не сгруппировано, копирование состояния не копирует ни одно из его содержимого.

Stateflow chart with a hierarchy of states. The outer state is called A. It contains two inner states called A1 and A2.

  1. Найдите Stateflow.State объект с именем A на графике ch.

    sA = find(ch,'-isa','Stateflow.State','Name','A');
  2. Состояние группы A и его содержимое путем установки IsGrouped свойство для sA на true. Сохраните предыдущий параметр этого свойства, чтобы вы могли вернуться к нему позже.

    prevGrouping = sA.IsGrouped;
    sA.IsGrouped = true;
  3. Измените имя состояния на 'Copy_of_A'. Сохраните предыдущее имя, чтобы вернуться к нему позже.

    prevName = sA.Name;
    newName = ['Copy_of_' prevName];
    sA.Name = newName;
  4. Доступ к объекту буфера обмена.

    cb = sfclipboard;
  5. Скопируйте сгруппированное состояние в буфер обмена.

    copy(cb,sA);
  6. Восстановите исходные параметры свойств состояний.

    sA.IsGrouped = prevGrouping;
    sA.Name = prevName;
  7. Вставьте копию объектов из буфера обмена в график.

    pasteTo(cb,ch);
  8. Настройте свойства состояний нового состояния.

    sNew = find(ch,'-isa','Stateflow.State','Name',newName);
    sNew.Position = sA.Position + [400 0 0 0];
    sNew.IsGrouped = prevGrouping;

    Chart showing result of pasting a copy of state A and its contents.

Копировать состояния A1 и A2, наряду с переходом между ними в новое состояние на графике ch. Чтобы сохранить переходные соединения и связи удержания между объектами, скопируйте все связанные объекты сразу.

Stateflow chart with a hierarchy of states. The outer state is called A. It contains two inner states called A1 and A2.

  1. Найдите Stateflow.State объект с именем A на графике ch.

    sA = find(ch,'-isa','Stateflow.State','Name','A');
  2. Добавьте новое состояние с именем B. Чтобы включить вставку других объектов внутри Bпреобразуйте новое состояние в субдиаграмму.

    sB = Stateflow.State(ch);
    sB.Name = 'B';
    sB.Position = sA.Position + [400 0 0 0];
    sB.IsSubchart = true;
  3. Создайте массив с именем objArray который содержит состояния и переходы в состоянии A. Используйте функцию setdiff для удаления A состояния из массива копируемых объектов.

    objArrayS = find(sA,'-isa','Stateflow.State');
    objArrayS = setdiff(objArrayS,sA);
    objArrayT = find(sA,'-isa','Stateflow.Transition');
    objArray = [objArrayS objArrayT];
  4. Доступ к объекту буфера обмена.

    cb = sfclipboard;
  5. Скопируйте объекты в objArray и вставить их в субдиаграмму B.

    copy(cb,objArray);
    pasteTo(cb,sB);
  6. Возврат B в состояние.

    sB.IsSubchart = false;
    sB.IsGrouped = false;
  7. Измените положение состояний и переходов в B.

    newStates = find(sB,'-isa','Stateflow.State');
    newStates = setdiff(newStates,sB);
    newTransitions = find(sB,'-isa','Stateflow.Transition');
    newOClocks = get(newTransitions,{'SourceOClock','DestinationOClock'});
    for i = 1:numel(newStates)
    newStates(i).Position = newStates(i).Position + [25 35 0 0];
    end
    set(newTransitions,{'SourceOClock','DestinationOClock'},newOClocks);

    Chart showing result of copying contents of state A and pasting them into state B.

Входные параметры

свернуть все

Буфер обмена, заданный как Stateflow.Clipboard объект.

Копируемые объекты, заданные как массив объектов Stateflow API. Массив должен содержать только графические объекты или только неграфические объекты.

Графические объекты включают:

Неграфические объекты включают:

Копирование графических объектов также копирует Stateflow.Data, Stateflow.Event, и Stateflow.Message объекты, содержащиеся в графических объектах. При копировании нескольких графических объектов значение их Subviewer свойство должно быть тем же самым.

Совет

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

  • Скопируйте сгруппированный объект в буфер обмена. При группировке состояния, прямоугольника или графической функции можно скопировать и вставить все объекты, содержащиеся в сгруппированном объекте, а также все связи между этими объектами. Для получения дополнительной информации см. раздел «Копирование и вставка по группировкам».

  • Скопируйте все связанные объекты. Например, чтобы скопировать два состояния, связанных переходом с другим контейнером, создайте массив, который содержит и состояния, и переход. Затем можно скопировать массив в буфер обмена. Для получения дополнительной информации см. раздел «Копирование и вставка массива объектов».

См. также

Функции

Объекты

Представлено до R2006a