Main Content

Stateflow.Clipboard

Stateflow オブジェクトのコピーと貼り付けを行うためのクリップボード

    説明

    Stateflow.Clipboard オブジェクトを使用して、同じチャート内、同じ Simulink® モデル内のチャート間、または異なるモデル内のチャート間で、グラフィカル オブジェクトや非グラフィカル オブジェクトをコピーし、貼り付けます。

    作成

    Stateflow.Clipboard オブジェクトは 1 つだけです。このオブジェクトは Stateflow® の起動時に自動作成されます。このオブジェクトにアクセスするには、関数 sfclipboard を呼び出します。

    clipboard = sfclipboard;

    オブジェクト関数

    copyオブジェクトの配列をクリップボードにコピー
    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. チャート ch 内の A という名前の Stateflow.State オブジェクトを見つけます。

      sA = find(ch,"-isa","Stateflow.State",Name="A");
    2. sAIsGrouped プロパティを true に設定し、ステート A とその内容をグループ化します。後で戻せるように、このプロパティの前の設定を保存します。

      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. チャート ch 内の A という名前の Stateflow.State オブジェクトを見つけます。

      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. ステート A 内のステートと遷移を含む objArray という配列を作成します。関数 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.

    バージョン履歴

    R2006a より前に導入