31 votes

Quelles sont les options disponibles pour la mise en page des graphes dirigés ou non dirigés dans .NET ?

Par graphique Je veux dire ici quelque chose qui ressemble à ces images :

La solution idéale serait :

  • n'utiliser que du code géré
  • permet la sortie vers une image bitmap
  • permettre la sortie vers les éléments WPF
  • inclure une sorte de surface interactive pour l'affichage du graphique qui permette le zoom, le panoramique et la réorganisation des nœuds

Je suis également intéressé par les projets qui pourraient éventuellement servir de point de départ à ce type de travail. Si cela nécessite un certain développement pour atteindre ce que je veux, alors je suis prêt à m'y attaquer. La partie la plus complexe de cet objectif semble être d'obtenir la disposition du graphique dans un délai raisonnable.

12voto

Jamie Penney Points 2821

Graph# est également une autre option. Je ne l'ai pas utilisée personnellement, mais j'ai l'intention d'y jeter un coup d'œil.

8voto

0xA3 Points 73439

Microsoft Research fournit un outil appelé MSAGL (Automatic Graph Layout, précédemment appelé GLEE) pour .NET.

MSAGL est disponible ici : http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx

Avis de non-responsabilité : je n'ai pas utilisé cet outil et je ne sais donc pas s'il vous convient (et je ne connais pas non plus les conditions de licence, il semble qu'il soit réservé aux applications non commerciales). Mais au moins, il semble intéressant.

8voto

Je travaille dans l'équipe NDepend et je confirme : nous sommes passés de GraphViz à MsAgl en septembre 2008 et la licence MsAgl permet en effet une utilisation commerciale. Voici quelques exemples de photos de Graphiques MsAgl intégrés dans NDepend (tout est interactif, les nœuds sont déplaçables/sélectionnables/amovibles/cliquables, les bords sont éditables/sélectionnables/amovibles/cliquables, la mise en page est zoomable, et aussi, bien qu'elle puisse être plus propre, l'API de MsAgl est assez propre pour travailler avec) :

enter image description hereenter image description hereenter image description here

3voto

Coincoin Points 12823

Graphviz est encore aujourd'hui, à mon avis, l'une des meilleures bibliothèques de graphes qui existent. Cependant, son intégration à .Net est un véritable calvaire.

Il est possible d'appeler l'outil de ligne de commande pour générer une sortie de forme basée sur votre entrée graphique, puis vous lisez la sortie et disposez les éléments sur un contrôle personnalisé qui affiche les formes que graphviz a calculées. C'est très compliqué, mais c'est le meilleur moyen que notre équipe a trouvé pour intégrer graphviz à .Net il y a quelques années.

Une meilleure solution existe peut-être aujourd'hui ; à l'époque, GLEE était encore très embryonnaire et je n'ai pas vu les progrès réalisés par Microsoft depuis cette époque.

2voto

DrDee Points 1857

J'ai utilisé NodeXL, http://www.codeplex.com/NodeXL NodeXl, qui est une bibliothèque .Net 3.5 (mais aussi un add-on Excel). NodeXl est développé par Microsoft Research et est assez intéressant : il dispose d'algorithmes de visualisation et de certaines métriques, mais il n'en est qu'à ses débuts. Si vous êtes un développeur .Net expérimenté, je vous conseille vivement d'y jeter un œil.

Cependant, si vous connaissez Python, je vous recommande vivement Networkx et son cousin pygraphviz qui est une interface pour Graphviz. J'ai utilisé les deux et ma productivité avec Python / Networkx est bien plus élevée que lorsque j'utilisais NodeXL.

GLEE est la bibliothèque à code source fermé de Microsoft que vous ne pouvez utiliser gratuitement que dans des logiciels non commerciaux, tandis que NodeXL est la façon dont Microsoft utilise le code source ouvert, mais vous pouvez l'utiliser librement dans un produit que vous développez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X