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

ポートの位置を変更する

ポートの位置を変更する

ポートの位置を変更するにはIPortオブジェクトのSetLocationRatioメソッドを用います。ポートの位置は0~1の間のdouble値の割合で設定します。

public void SetLocationRatio(ICommandContext c, ICommandParams p)
{
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null) return;

// 選択されているノードを取得します
var nodes = diagram.GetSelectedShapes().OfType<INode>();

// ノードごとに処理をします
foreach (INode node in nodes)
{
IPortCollection ports = node.Ports;
int count = 0;
int max = ports.Count();

// ノードの持つポートごとに処理をします
foreach (IPort port in ports)
{
double ratio = (double)count / (double)max;
port.SetLocationRatio(ratio);
c.App.Output.WriteLine("sample", $"ポート位置の割合 : {port.LocationRatio}");
count++;
}
}
}

ポートを整列する

ポートを整列するにはINodeオブジェクトのRelocatePortsを用います。PortOrientation列挙型で整列対象の辺を指定できます。指定できる列挙値は以下です。

列挙値整列対象
Top上辺
Left左辺
Bottom下辺
Right右辺
All4辺すべて
public void RelocatePorts(ICommandContext c, ICommandParams p)
{
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null) return;

var nodes = diagram.GetSelectedShapes().OfType<INode>();

foreach (INode node in nodes)
{
// ノードのポートを整列します
node.RelocatePorts(PortOrientation.All);
}
}