MSAGL を使用して既存のレイアウトのエッジのみをルーティングする方法はありますか?
を使用して生成されたレイアウトを持つGeometryGraph
オブジェクトがLayeredLayout
あり、レイアウト アルゴリズムを再度実行せずにエッジを削除/追加したい (この操作はノードの位置を大幅に変更し、エンド ユーザーを混乱させます)。
すべてのノード位置を修正して、レイアウトを再度実行することはできますか?
MSAGL を使用して既存のレイアウトのエッジのみをルーティングする方法はありますか?
を使用して生成されたレイアウトを持つGeometryGraph
オブジェクトがLayeredLayout
あり、レイアウト アルゴリズムを再度実行せずにエッジを削除/追加したい (この操作はノードの位置を大幅に変更し、エンド ユーザーを混乱させます)。
すべてのノード位置を修正して、レイアウトを再度実行することはできますか?
InteractiveEdgeRouter
グラフと同期する必要があります。
edgeRouter_ = new InteractiveEdgeRouter(Graph.Nodes.Select(n => n.BoundaryCurve), 3, 0.65 * 3, 0);
グラフ レイアウトを再計算するたびedgeRouter_.Run()
に、障害の変更との同期を維持するためにも呼び出す必要があります (新しいノードも追加する必要があります)。
新しいエッジを追加した後、レイアウトを再計算する代わりに、ルーターを使用して手動でエッジ カーブを設定します。
private void RouteMissingEdges()
{
foreach (var edge in Graph.Edges)
{
if (edge.Curve == null)
{
SmoothedPolyline ignore;
edge.Curve = edgeRouter_.RouteSplineFromPortToPortWhenTheWholeGraphIsReady(
new FloatingPort(edge.Source.BoundaryCurve, edge.Source.Center),
new FloatingPort(edge.Target.BoundaryCurve, edge.Target.Center),
true, out ignore);
Arrowheads.TrimSplineAndCalculateArrowheads(edge.EdgeGeometry,
edge.Source.BoundaryCurve,
edge.Target.BoundaryCurve,
edge.Curve, true,
false);
}
}
}