コネクタ接続する
モデルを関連付けることでコネクタを作成するサンプルです。 サンプルを使用してダイアグラム上でコネクタ接続を行う場合、
- 選択する2つのノードのモデル間に参照関連クラスが存在
- ダイアグラムにて上記の関連をモデルとするコネクタシェイプが定義済み
であることが必要です。
public void CreateConnectors(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示 していない場合は処理を終了します
c.App.Output.WriteLine("sample", "ダイアグラムを表示していません。");
return;
}
// ダイアグラム上で選択されているノードを取得します
IEnumerable<INode> nodes = diagram.GetSelectedShapes().OfType<INode>();
if (nodes.Count() != 2)
{
c.App.Output.WriteLine("sample", "ノードを二つのみ選択して下さい。");
return;
}
// 選択されているノード間で関連付け可能なすべての参照フィールドに対し関連付けを行います
INode node = nodes.ElementAt(0);
INode other = nodes.ElementAt(1);
node.Model.RelateAll(other.Model);
}
コネクタ接続を削除するには、シェイプに対応しているモデル間の関連を削除します。 関連の追加、削除について、詳しくはモデルを関連付けるを参照して下さい。
public void CreateConnectors(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
c.App.Output.WriteLine("sample", "ダイアグラムを表示していません");
return;
}
// ダイアグラム上で選択されているコネクタを取 得します
IEnumerable<IConnector> connectors = diagram.GetSelectedShapes().OfType<IConnector>().ToList();
if (!connectors.Any())
{
c.App.Output.WriteLine("sample", "コネクタが選択されていません");
return;
}
// 取得したコネクタに対応する関連にて関連付け解除を行います
foreach(IConnector connector in connectors)
{
IRelationship relationship = connector.Model as IRelationship;
c.App.Output.WriteLine("sample", $"UnRelate Relation: {relationship.Metaclass.Name}");
c.App.Output.WriteLine("sample", $" Connector SourceField: {relationship.SourceField.Name}");
c.App.Output.WriteLine("sample", $" Connector TargetField: {relationship.TargetField.Name}");
relationship.UnRelate();
}
}