シェイプの表示順序を編集する
シェイプを最前面に表示する
シェイプを最前面に表示する場合、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}");
}