シェイプの位置を変更する
シェイプの位置を変更するにはINode
オブジェクトのSetLocationAt
メソッドを用います。
public void SetLocationAt(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
c.App.Output.WriteLine("sample", "ダイアグラムを表示していません。");
return;
}
// ダイアグラム上に表示されているノードを取得します
INode node = diagram.Nodes.FirstOrDefault();
if (node == null)
{
// ノードを表示していない場合は処理を終了します
c.App.Output.WriteLine("sample", "ノードが表示されていま せん。");
return;
}
// ノードに対し、座標を指定し、ノードの位置を変更します
node.SetLocationAt(100, 100);
}
また、System.Drawing.Point
で座標を指定することもできます。
その場合はINode
オブジェクトのSetLocation
メソッドを用います。
public void SetLocation(ICommandContext c, ICommandParams p)
{
// 中略
// ノードに対し、座標を指定し、ノードの位置を変更します
System.Drawing.Point point = new System.Drawing.Point(100, 100);
node.SetLocation(point);
}
現在表示されているシェイプを左揃えに整列させるサンプルです。
public void SetLocation(ICommandContext c, ICommandParams p)
{
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
INodeCollection nodes = diagram.Nodes;
// エディタ上で一番左に存在するノードのX座標を取得します
double leftmostX = nodes.Select(n => n.LocationX).Min();
// エディタ上のノードの左座標を設定します
foreach(INode node in nodes)
{
node.SetLocationAt(leftmostX, node.LocationY);
}
}