左に流れる重複や接続なしで、ノードツリーを自動的にきれいに配置する Blender 用のプラグインを作成しようとしています。ノードのリスト、それらの位置、それらの寸法、および接続/リンクのリストにアクセスできます。グラフは左から右に実行され、複数の開始ノードと終了ノードを作成できます。ノードの出力は、その前のノードの入力、またはそれ自体の入力に接続できません (循環依存関係はありません)。
これを変えることができる何かをコーディングすることに焦点を当てた論文や記事を知っている人はいますか?
これに?
私が最初に思いついた方法は、次のとおりでした。入力接続がないすべてのノードについて、それらを左側に並べます。これらの開始ノードに接続されているすべてのノードについて、それらを接続開始ノードの右側に配置します。これをノードごとに最後まで繰り返します。1 つのノードが別のノードと重なっている場合は、それを移動すると、ノードのチェーンが右、下になります。
これは、孤立したチェーンごとにうまく機能しましたが、あるチェーンのノードが別のチェーンのノードに接続されている場合 (たとえば、トランクに戻って接続するブランチ)、しばしば逆方向の接続が発生します。
私が思いついたこの方法は、かなり... 粗野なようです。私はSpring Force-Directedレイアウトについて少し読んだことがありますが、それらはあらゆる/すべての方向に流れるグラフに向いているようです。 m はコア数学のみを使用し、他の外部ライブラリは使用しないように制限されています。
これは必ずしも一般的な問題ではありませんが、私が最初にそれを理解しようとしたわけではありません。コード例を正確に求めているわけではなく、まともなアルゴリズムを理解するのに役立つ何かを調べているだけです。