Próbuję napisać wtyczkę do Blendera, która automatycznie porządkuje drzewo węzłów, bez nakładania się i połączeń, które przepływają w lewo. Mam dostęp do listy węzłów, ich pozycji, ich wymiarów oraz listy połączeń/łączy. Wykres przebiega od lewej do prawej i może zawierać wiele początkowych i końcowych węzłów. Wyjście węzła nie można podłączyć do wejścia węzła przed nim, czy to własnych wejściowychJak ustawić wykres liniowo bez nakładania się?
Czy ktoś wie, z papieru lub artykuł, który skupia się na kodowanie coś, co może odwrócić ten (brak zależności cykliczne.):
W to?
Metoda, którą pierwotnie wymyśliłem to: Dla wszystkich węzłów, które nie mają połączeń wejściowych, ustaw je po lewej stronie. Dla wszystkich węzłów, które są podłączone do tych węzłów początkowych, umieść je po prawej stronie łączącego węzła początkowego. Powtórz to dla każdego węzła do końca. Jeśli jeden węzeł nakłada się na inny, przenieś go, a łańcuch węzłów po jego prawej stronie, w dół.
To było wspaniałe dla każdego izolowanym sieci, ale gdy węzeł jednego łańcucha podłączony do węzła innego (oddział, który łączy z powrotem do bagażnika na przykład), to często mają wsteczną połączenie:
Ta metoda, którą wymyśliłem, wydaje się całkiem ... prymitywna. Czytałem trochę o układach kierowanych przez Spring Force, ale wydaje się, że są bardziej dla wykresów, które płyną w dowolnych/wszystkich kierunkach, i nie jestem do końca pewny, jak ręcznie to zaimplementowałem tutaj, ponieważ " m ograniczone do korzystania z samej matematyki rdzeniowej bez innych zewnętrznych bibliotek.
To nie jest zwykły problem, ale nie jestem pierwszym, który spróbuje to rozgryźć. Nie proszę o dokładne przykłady kodu, tylko o coś, na co mam zwrócić uwagę, aby pomóc mi opracować przyzwoity algorytm.
Ponieważ będzie używany przez inne osoby, nie mogę polegać na żadnym zewnętrznym oprogramowaniu lub bibliotekach. Spojrzałem na teorię z teorii GraphViz, która trochę mnie zainspirowała, chociaż nigdy jej nie użyłem. –