Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

sfclipboard

クリップボード オブジェクト

説明

clipboard = sfclipboard は、Stateflow.Clipboard オブジェクトを返します。Clipboard オブジェクトを使用して、同じチャート内、同じ Simulink® モデル内のチャート間、または異なるモデル内のチャート間で、オブジェクトをコピーし、貼り付けます。

すべて折りたたむ

ステートをグループ化し、その内容をチャートにコピーします。ステート、ボックス、またはグラフィカル関数をグループ化すると、グループ化したそのオブジェクトに含まれるすべてのオブジェクトと、これらのオブジェクト間のすべての関係をコピーして貼り付けることができます。これは、プログラムによってオブジェクトのコピーと貼り付けを行う最も簡単な方法です。ステートがグループ化されていない場合、ステートをコピーしてもその内容はコピーされません。

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

モデルを開き、チャートの Stateflow.Chart オブジェクトにアクセスします。

open_system("sfHierarchyAPIExample")
ch = find(sfroot,"-isa","Stateflow.Chart");

A という名前の Stateflow.State オブジェクトを検索します。

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

sAIsGrouped プロパティを true に設定し、ステート A とその内容をグループ化します。後で戻せるように、このプロパティの前の設定を保存します。

prevGrouping = sA.IsGrouped;
sA.IsGrouped = true;

ステートの名前を Copy_of_A に変更します。後で戻せるように、前の名前を保存します。

prevName = sA.Name;
newName = "Copy_of_"+prevName;
sA.Name = newName;

クリップボード オブジェクトにアクセスします。

cb = sfclipboard;

グループ化されたステートをクリップボードにコピーします。

copy(cb,sA);

ステートのプロパティを元の設定に戻します。

sA.IsGrouped = prevGrouping;
sA.Name = prevName;

クリップボードから、オブジェクトのコピーをチャートに貼り付けます。

pasteTo(cb,ch);

新しいステートのプロパティを調整します。

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 を、それらの間の遷移とともにチャートの新しいステートにコピーします。オブジェクト間の遷移接続および含有関係を保持するには、接続されているすべてのオブジェクトを一度にコピーします。

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

モデルを開き、チャートの Stateflow.Chart オブジェクトにアクセスします。

open_system("sfHierarchyAPIExample")
ch = find(sfroot,"-isa","Stateflow.Chart");

A という名前の Stateflow.State オブジェクトを検索します。

sA = find(ch,"-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;

ステート A 内のステートと遷移を含む objArray という配列を作成します。関数setdiffを使用して、コピーするオブジェクトの配列からステート A を削除します。

objArrayS = find(sA,"-isa","Stateflow.State");
objArrayS = setdiff(objArrayS,sA);
objArrayT = find(sA,"-isa","Stateflow.Transition");
objArray = [objArrayS objArrayT];

クリップボード オブジェクトにアクセスします。

cb = sfclipboard;

objArray のオブジェクトをコピーし、サブチャート B に貼り付けます。

copy(cb,objArray);
pasteTo(cb,sB);

B をステートに戻します。

sB.IsSubchart = false;
sB.IsGrouped = false;

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.

バージョン履歴

R2006a より前に導入

参考

関数

オブジェクト