メインコンテンツまでスキップ

シェイプの位置を変更する

シェイプの位置を変更するには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);
}
}