Sto tentando di scrivere un plugin per Blender che dispone automaticamente un albero dei nodi ordinatamente, senza sovrapposizioni o connessioni che scorrono a sinistra. Ho accesso all'elenco dei nodi, le loro posizioni, le loro dimensioni e un elenco di connessioni/collegamenti. Il grafico viene eseguito da sinistra a destra e può più nodi di inizio e fine. L'uscita di un nodo non riesce a connettersi con l'ingresso di un nodo prima di esso, o è proprio ingressoCome disporre un grafico linearmente senza sovrapposizioni?
Qualcuno sa di un documento o un articolo che si concentra su di codifica qualcosa che può trasformare questo (senza dipendenze cicliche.):
In questo?
Il metodo che in origine si avvicinò con era: Per tutti i nodi che non hanno connessioni di ingresso, allinearli a sinistra. Per tutti i nodi connessi a questi nodi iniziali, posizionarli a destra del nodo di inizio connessione. Ripeti l'operazione per ciascun nodo fino alla fine. Se un nodo si sovrappone a un altro, spostarlo e la catena di nodi a destra, in basso.
Questo funzionava bene per ogni catena isolato, ma quando un nodo di una catena collegata ad un nodo di un altro (un ramo che collega indietro al tronco per esempio), sarebbe spesso avere un collegamento a ritroso:
Questo metodo che ho trovato sembra essere piuttosto ... grezzo. Ho letto un po 'sui layout di Spring Force-Directed, ma sembrano essere più per i grafici che fluiscono in tutte/tutte le direzioni, e non sono del tutto sicuro di come lo avrei implementato manualmente qui comunque, dal momento che m limitato all'utilizzo della matematica di base da solo senza altre librerie esterne.
Non è esattamente un problema comune, ma sono lontano dal primo tentativo di capirlo. Non sto chiedendo esempi di codice esattamente, solo qualcosa da guardare per aiutarmi a elaborare un algoritmo decente.
Dal momento che verrà utilizzato da altre persone, non posso fare affidamento su alcun software o librerie esterne. Ho dato un'occhiata alla teoria di GraphViz, che mi ha ispirato un po ', anche se in realtà non ne ho mai usato nessuno. –