Dessinner un graph dans un pannel [Résolu]

ben500fr 6 Messages postés jeudi 18 mai 2006Date d'inscription 1 décembre 2010 Dernière intervention - 8 nov. 2010 à 17:10 - Dernière réponse : ben500fr 6 Messages postés jeudi 18 mai 2006Date d'inscription 1 décembre 2010 Dernière intervention
- 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.
Afficher la suite 

5 réponses

Répondre au sujet
ben500fr 6 Messages postés jeudi 18 mai 2006Date d'inscription 1 décembre 2010 Dernière intervention - 17 nov. 2010 à 16:21
+3
Utile
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();
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ben500fr
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 9 nov. 2010 à 16:50
0
Utile
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.
Commenter la réponse de Shaolyne
ben500fr 6 Messages postés jeudi 18 mai 2006Date d'inscription 1 décembre 2010 Dernière intervention - 10 nov. 2010 à 14:24
0
Utile
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.
Commenter la réponse de ben500fr
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 10 nov. 2010 à 15:03
0
Utile
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.
Commenter la réponse de Shaolyne
ben500fr 6 Messages postés jeudi 18 mai 2006Date d'inscription 1 décembre 2010 Dernière intervention - 17 nov. 2010 à 16:25
0
Utile
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.
Commenter la réponse de ben500fr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.