0

MSAGL を使用して既存のレイアウトのエッジのみをルーティングする方法はありますか?

を使用して生成されたレイアウトを持つGeometryGraphオブジェクトがLayeredLayoutあり、レイアウト アルゴリズムを再度実行せずにエッジを削除/追加したい (この操作はノードの位置を大幅に変更し、エンド ユーザーを混乱させます)。

すべてのノード位置を修正して、レイアウトを再度実行することはできますか?

4

2 に答える 2

0

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);

         }
     }
}
于 2015-11-02T08:52:29.570 に答える