Dessinner un graph dans un pannel

Résolu
ben500fr Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 décembre 2010 - 8 nov. 2010 à 17:10
ben500fr Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 décembre 2010 - 17 nov. 2010 à 16:25
Bonjour a tous,

Tout d’abord, désolé si je ne suis pas dans la bonne rubrique, 'algorithme/math' me semble le plus proche de ce que je cherche.

1- ce que je fais:
En C#, je suis en train de faire un outils de calcul automatique de voltage drop et derating de circuits électriques => pas de pb.
Pour visualiser mon graph de manière plus humaine qu'un simple tableau datagridview, je dessine mes Edges (arcs) et noeuds (nodes) dans un panel, dont voici le résultat:



Je peux déplacer mes sommets avec la souris, c'est déjà pas mal.

2- ce que j'ai vu sur le web:
Il existe des librairie telles que quickgraph ou GraphSharp qui affiche le graph dans une image sans que les noeuds soit superposés => c'est très joli, mais je souhaite garder une interactivité avec mes noeud

3- ce que je recherche:
C'est pouvoir utiliser une librairie comme quickgraph ou GraphSharp, mais au lieu de récupérer en sortie une image, juste la liste des position (x et y) de tous les noeuds du graph.

Si quelqu’un a une idée, a déjà réalisé ce genre de programme, je suis a l’écoute!

J’espère avoir été clair, n’hésitez pas a me demander plus d'informations.

5 réponses

ben500fr Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 décembre 2010
17 nov. 2010 à 16:21
En fait, je cherchais a transformer mon fichier .dot en un fichier 'plain' (ou jpg, bmp....).

De ce que j'ai vu, quickGraph ne le fait pas, donc j'ai tout simplement mis le fichier dot.exe (de graphviz) dans mon projet, pour je le lance en lui donnant le .dot en argument, et ça marche très bien.


string theDotEngineUsed = "sfdp";
Dictionary<string, string> allDotEngine = new Dictionary<string, string>();
this.allDotEngine.Add("sfdp", Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"sfdp.exe"));
this.allDotEngine.Add("dot", Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"dot.exe"));
this.allDotEngine.Add("neato", Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"neato.exe"));
 this.allDotEngine.Add("twopi", Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"twopi.exe"));
string pathDotGraph      = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"OUTPUTS\graph.dot");
string pathDotGraphPlain = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath).ToString(), @"OUTPUTS\graph.plain");


Process henryToolProcess = new Process();
henryToolProcess.StartInfo.FileName = this.allDotEngine[this.theDotEngineUsed];
henryToolProcess.StartInfo.Arguments = "-Tplain -o"" + MainForm.pathDotGraphPlain + "" -K" + this.theDotEngineUsed + " " + MainForm.pathDotGraph;
henryToolProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
henryToolProcess.Start();
henryToolProcess.WaitForExit();
3
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
9 nov. 2010 à 16:50
Salut ben,

Après quelques recherches, je suis tombé sur la discussion suivante: http://graphsharp.codeplex.com/Thread/View.aspx?ThreadId=72119. Cet article permet de placer des labels sur chaque noeud. Or, pour un label, on peut récupérer sa position relative.

Shao.
0
ben500fr Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 décembre 2010
10 nov. 2010 à 14:24
Tout d'abord, merci Shaolyne de ta réponse.

J’avoue ne pas connaitre les controle WPF, donc j'ai un peut de mal a suivre quand ils parlent d'un langage xml...
Je vais voir si j'arrive a faire tourner leur code.

Sinon, j'ai fait des essais de mon coté: avec quickgraph, j'arrive a générer un fichier .dot représentatif de mon arbre.
Par contre, je ne sais pas comment demander quickgraph d'utiliser ce fichier (je souhaite éviter de devoir lancer Graphviz.exe a coté. Graphviz peut sortir: jpeg, svg, pdf.... et de text!!!! ('plain' : Tapez le texte de l'url ici.).
C'est exactement ce que je recherche!!!!

Si quelqu’un sait comment lancer graphviz depuis la librairie, je suis sauvé!

Salutations.
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
10 nov. 2010 à 15:03
Ben,

Avec plaisir.
Maintenant, je préfère éclaircir ton problème actuel avant d'investiguer d'avantage.

Sinon, j'ai fait des essais de mon coté: avec quickgraph, j'arrive a générer un fichier .dot représentatif de mon arbre.

Donc, tu arrives à sauvegarder ton arbre sous un format dot, correct? Ce qui était ton objectif initial, non?

Par contre, je ne sais pas comment demander quickgraph d'utiliser ce fichier (je souhaite éviter de devoir lancer Graphviz.exe a coté. Graphviz peut sortir: jpeg, svg, pdf.... et de text!!!! ('plain' : Tapez le texte de l'url ici.).

Ici, d'après ce que je comprend, tu aimerais sortir le graph sous un format... différent du .dot? Tu désires réutiliser ton fichier exporté pour recharger ton graphe? Si c'est le cas, tu peux utiliser la sérialisation (celle basée sur les services .NET de sérialisation semble suffisante) comme descrit ici Documentation sérialisation

Shao.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ben500fr Messages postés 6 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 1 décembre 2010
17 nov. 2010 à 16:25
Comme ça je lance l'algo dot/sfdp/neato/twopi que je veux.

La solution n'est pas forcement la plus 'classe' mais le résultat est la!

Merci Shaolyne de t’être penché sur mon problème.
0
Rejoignez-nous