2017-01-26 1 views
0

Je suis en train de dessiner un diagramme d'arbre dans Unity3D en utilisant C#, j'ai une liste de données qui contient les variables suivantes:C# Générez Arbre Schéma Coordonnées Noeud

public class ObjectData 
{ 
    public string ID; 
    public string hierarchyParent; 
    public int hierarchyLevel; 
} 

La variable mère contient l'identifiant du parent objet et la variable de niveau contient un numéro croissant de la ligne ie Ligne supérieure = 1, Ligne inférieure = 2 etc. J'ai besoin d'obtenir les coordonnées dans un espace 2D de chaque nœud de cet arbre pour un nombre inconnu d'éléments. Si j'essaie de créer ceci en définissant les lignes et en ajoutant une valeur x constante, les lignes de connexion se croisent souvent et ne sont pas centrées. J'ai regardé d'autres exemples mais n'ai pas été capable de trouver un tutoriel pour mes données d'entrée. Merci!

+1

Ce n'est pas un problème très simple. Cela pourrait bien fonctionner si vos arbres sont relativement petits. Votre question est plus celle d'un algorithme. Jetez un coup d'oeil [cette question] (http://stackoverflow.com/questions/13128750/what-are-the-step-to-the-reingold-tilford-algorithm-and-how-might-i-program-it) pour Reingold-Tilford qui résout supposément votre exigence "lignes souvent croisées et sont décentrées" pour quelques cas, (je suppose que vous voulez root hiérarchique) ou si ce n'est pas essayer pour "SpaceTree" algorithme, theres beaucoup d'autres algo en fonction de la façon vous voulez que votre arbre apparaisse – Tewr

+0

Nous vous recommandons également de jeter un coup d'œil à la [méthode de dessin graphique dirigée par la force] (https://en.wikipedia.org/wiki/Force-directed_graph_drawing) si vous ne l'avez pas déjà fait. Il est généralement assez facile à mettre en œuvre et peut produire de bons résultats. – Jephron

Répondre