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

シェイプの表示順序を編集する

シェイプを最前面に表示する

シェイプを最前面に表示する場合、IShape オブジェクトの BringToFront メソッドを用います。

public void BringToFront(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します。
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
return;
}

// ダイアグラム上で選択しているノードシェイプを取得します
INode node = diagram.GetSelectedShapes().OfType<INode>().FirstOrDefault();
if (node == null)
{
// ノードシェイプを選択していない場合は処理を終了します
return;
}

// シェイプを最前面に表示します
node.BringToFront();
}
備考

シェイプを現在の表示より1つ前面に表示したい場合、IShape オブジェクトの BringForward メソッドを用います。

シェイプを最背面に表示する

シェイプを最背面に表示する場合、IShape オブジェクトの SendToBack メソッドを用います。

public void SendToBack(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
return;
}

// ダイアグラム上で選択しているノードシェイプを取得します。
INode node = diagram.GetSelectedShapes().OfType<INode>().FirstOrDefault();
if (node == null)
{
// ノードシェイプを選択していない場合は処理を終了します
return;
}

// シェイプを最背面に表示します
node.SendToBack();
}
備考

シェイプを現在の表示より1つ背面に表示したい場合、IShape オブジェクトの SendBackward メソッドを用います。

シェイプの表示順序(Zオーダー)を直接設定する

IShape オブジェクトの SetZOrder メソッドを用いれば、表示順序(Zオーダー)を数値で直接設定できます。 外部ツールからダイアグラムの情報を取り込む際に利用できます。

public void SetZOrder(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムから条件を指定してノードシェイプを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
return;
}
List<INode> nodes = diagram.Nodes.ToList();

// 外部ツールからダイアグラム情報を取り込み、その結果からノードシェイプを並べ替えます
nodes.Sort(...);

int zOrder = 0;
foreach(INode node in nodes)
{
// ノードシェイプの表示順序(Zオーダー)を数値で直接設定します
node.SetZOrder(zOrder);
zOrder++;
}
}
備考
  • シェイプの表示順序は他シェイプと同じZオーダーを設定してもエラーとはなりません
  • 同じZオーダーを持つ複数のシェイプがある場合、それらのシェイプの表示の前後関係は不定です

シェイプの表示順序(Zオーダー)を取得する

シェイプの表示順序(Zオーダー)を取得するには IShape オブジェクトの ZOrder プロパティを用います。

public void GetZOrder(ICommandContext c, ICommandParams p)
{
// 現在表示しているダイアグラムを取得します
IDiagram diagram = c.App.Workspace.CurrentEditor as IDiagram;
if (diagram == null)
{
// ダイアグラムを表示していない場合は処理を終了します
return;
}

// ダイアグラム上で選択しているノードシェイプを取得します。
INode node = diagram.GetSelectedShapes().OfType<INode>().FirstOrDefault();
if (node == null)
{
// ノードシェイプを選択していない場合は処理を終了します
return;
}

// ノードシェイプの表示順序(Zオーダー)を取得します
c.App.Output.WriteLine("sample", $"シェイプの表示順序(Zオーダー): {node.ZOrder}");
}