6

左に流れる重複や接続なしで、ノードツリーを自動的にきれいに配置する Blender 用のプラグインを作成しようとしています。ノードのリスト、それらの位置、それらの寸法、および接続/リンクのリストにアクセスできます。グラフは左から右に実行され、複数の開始ノードと終了ノードを作成できます。ノードの出力は、その前のノードの入力、またはそれ自体の入力に接続できません (循環依存関係はありません)。

これを変えることができる何かをコーディングすることに焦点を当てた論文や記事を知っている人はいますか? 乱雑なノード

これに? きちんとしたノード

私が最初に思いついた方法は、次のとおりでした。入力接続がないすべてのノードについて、それらを左側に並べます。これらの開始ノードに接続されているすべてのノードについて、それらを接続開始ノードの右側に配置します。これをノードごとに最後まで繰り返します。1 つのノードが別のノードと重なっている場合は、それを移動すると、ノードのチェーンが右、下になります。

これは、孤立したチェーンごとにうまく機能しましたが、あるチェーンのノードが別のチェーンのノードに接続されている場合 (たとえば、トランクに戻って接続するブランチ)、しばしば逆方向の接続が発生します。 後方接続

私が思いついたこの方法は、かなり... 粗野なようです。私はSpring Force-Directedレイアウトについて少し読んだことがありますが、それらはあらゆる/すべての方向に流れるグラフに向いているようです。 m はコア数学のみを使用し、他の外部ライブラリは使用しないように制限されています。

これは必ずしも一般的な問題ではありませんが、私が最初にそれを理解しようとしたわけではありません。コード例を正確に求めているわけではなく、まともなアルゴリズムを理解するのに役立つ何かを調べているだけです。

4

3 に答える 3

1

これには GraphViz を利用します: http://www.graphviz.org/

  1. Blender グラフをメモリに読み込む
  2. GraphViz グラフ ファイル形式で同じグラフを書き出す
  3. GraphViz 実行可能ファイルの 1 つを実行します (ドット(リンク)をお勧めします) 。
  4. 同等のグラフを読み取りますが、GraphViz によって作成されたノード位置を使用します
  5. GraphViz の結果に基づいて位置を変更して、Blender グラフを作成します。

学術的な理由でやりたくない場合を除き、車輪を再発明しないでください。このアプローチは簡単に実行でき、複雑なグラフ レイアウト アルゴリズムを設計する必要はありません。

于 2013-06-15T20:58:01.900 に答える