Как легко рисовать графики в WPF?

Мне нужно рисовать графики, представляющие конечные автоматы. Я пытался использовать Graph #. Это круто, но не хватает некоторых вещей. Нет документации, которая делает его очень сложным в использовании, я не могу рисовать циклы (ребра от вершины до себя), используя его собственный элемент управления WPF, и разметка ребер также не реализована. Есть ли какая-либо другая библиотека или рекомендуемый способ рисования графиков в WPF?

Функциональность мне нужна:

  • маркировка края
  • петлевые (циклические) ребра
  • маркировка вершин
  • рисование одинарных/двойных кругов вокруг вершин - вершины должны быть представлены в виде круга (или двойного круга) с меткой внутри

Есть идеи?


РЕДАКТИРОВАТЬ:

Я получил несколько предложений, за которые я благодарен. Тем не менее, я думаю, что я не прояснил свою мысль. Мне нужен этот вид графика:

http://static.max99x.com/school/automata-editor1.png.

Все предложенные инструменты не подходят для этого или, может быть, я не знаю, как применять их в этой ситуации.

Ответы

Ответ 2

Вариант 1: Автоматическая компоновка графиков Microsoft

Free

http://research.microsoft.com/en-us/projects/msagl/

GitHub

https://github.com/Microsoft/automatic-graph-layout.git

Winforms → WPF

Это WinForms, но его можно импортировать в WPF с несколькими строками кода.

Визуализация узлов и краев с автоматической компоновкой графиков Microsoft

http://www.codeguru.com/csharp/.net/net_wpf/article.php/c16963/Visualizing-Nodes-and-Edges-with-Microsoft-Automatic-Graph-Layout.htm

Примеры

http://research.microsoft.com/en-us/projects/msagl/#Layouts

FAQ

http://research.microsoft.com/en-us/projects/msagl/faq.aspx

Вариант 2: QuickGraph - библиотека графиков на 100% С# с поддержкой Graphviz

Free

http://quickgraph.codeplex.com/

Эта библиотека 100% С#. Не вводите в заблуждение строку "Поддержка Graphviz", это означает, что она использует код С# для импорта вывода из Graphviz. Отсутствует код С++.

http://www.codeproject.com/Articles/5603/QuickGraph-A-C-graph-library-with-Graphviz-Sup

Имеет пакет NuGet.

В разработке с 2003 по 2011 год (8 лет!).

Вариант 3: GraphSharp

Free

http://graphsharp.codeplex.com/

  • Зависит от QuickGraph (это 100% С#).
  • Поддержка async/wait (nice!).

Demo

https://sachabarbs.wordpress.com/2010/08/31/pretty-cool-graphs-in-wpf/

Примечания

Это хорошо работает, он работает и работает через пару часов. Он также поддерживает DataTemplates, поэтому каждый node может иметь любой внешний вид, который вы хотите.

Вариант 4: Graphviz4net

Free

http://graphviz4net.codeplex.com/

Вариант 5: GoDiagram

$$$

http://www.nwoods.com/products/godiagram/index.html

Вариант 6: Управление графическим деревом для WPF

Free

http://www.codeproject.com/Articles/29518/A-Graph-Tree-Drawing-Control-for-WPF

Не подходит. Это дерево.

Вариант 7: Использование WPF для визуализации графика с круговыми зависимостями

Free

http://www.codeproject.com/Articles/43776/Using-WPF-to-Visualize-a-Graph-with-Circular-Depen

Вариант 8: GraphViz

Free

http://www.graphviz.org/Download..php

Это не С# и использует не управляемый код. Однако для этого существуют обертки С#.

Опираясь на AT & T, см. "Исследователи AT & T - изобретать науку за службой" и "Портфолио исследования" > программные средства ": http://www.research.att.com/software_tools?fbid=NEk8_gxLLEc

Источник

http://www.graphviz.org/Download_source.php

Они также открывают исходный Rserve!

Вариант 9: Shields.GraphViz

Free

Обертка для GraphViz.

https://github.com/timothy-shields/graphviz

Вариант 10: NetworkView: пользовательский элемент управления WPF для визуализации и редактирования сетей, графиков и блок-схем

Free

http://www.codeproject.com/Articles/182683/NetworkView-A-WPF-custom-control-for-visualizing-a

Эта библиотека позволяет пользователю создавать соединения между узлами, что, вероятно, является немного избыточным.

Пример

https://channel9.msdn.com/coding4fun/blog/Noodling-Network-Nodes-Diagraming-with-the-NetworkView-custom-WPF-control

Все это MVVM.

Вариант 11: Gephi - платформа Open Graph Viz

Free

См. http://gephi.github.io/

Не графическая библиотека WPF, но дает отличные примеры того, как могут выглядеть действительно красивые графики. Учебное пособие отлично.

Вариант 12: Telerik

$$$

http://www.telerik.com/products/wpf/diagrams.aspx

Вариант 13: Инфраструктура

$$$

http://www.infragistics.com/samples/wpf/network-node/overview http://www.infragistics.com/samples/wpf/network-node/relationship-between-nodes http://www.infragistics.com/samples/wpf/network-node/custom-node-style

Вариант 14: конструктор диаграмм WPF

Free

Не так много графического инструмента, но он показывает вам, как перемещать, изменять размер и вращать объекты любого типа на холсте.

http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1

Вариант 15: Конструктор диаграмм MVVM

Free

И кто-то переопределил это в MVVM: Не так много графического инструмента, но он показывает вам, как перемещать, изменять размер и вращать объекты любого типа на холсте.

http://www.codeproject.com/Articles/484616/MVVM-Diagram-Designer

Вариант 16: yWorks - компания Diagramming

$$$

https://www.yworks.com/en/products_yfiles_practicalinfo_gallery.html https://www.yworks.com/en/products_yfileswpf_about.html

Вариант 17: MindFusion

$$$

http://www.mindfusion.eu/features-wpfdiagram.html http://www.mindfusion.eu/

Вариант 18: Dot2WPF

Free

Элемент управления WPF для просмотра графиков DOT.

http://www.codeproject.com/Articles/18870/Dot-WPF-a-WPF-control-for-viewing-Dot-graphs

Вариант 19: SyncFusion

$$$

https://www.syncfusion.com/products/wpf/diagram

Вариант 20: AddFlow

$$$

https://www.componentsource.com/product/addflow-wpf-standard

Вариант 21: Lassalle

$$$

http://www.lassalle.com/

Вариант 22: Динамический дисплей данных

http://dynamicdatadisplay.codeplex.com/

Вариант 23: Nevron

$$$

https://www.nevron.com/

Только для WinForms, но может быть импортирован в WPF. Тем не менее, каждый отдельный элемент не может быть шаблоном, что является большим преимуществом решений WPF.

Условия поиска Google

  • "графическое представление рабочего процесса wpf"
  • "библиотека графического wpf"
  • "wpf state machine library"

Ответ 3

Я думаю, вы можете легко реализовать все свои требования с помощью библиотеки GraphX ​​для WPF. Он основан на графике # и содержит подробные документы. http://panthernet.ru/en/projects-en/graphx-en

Он поддерживает краевые лабиринты и самозатухающие ребра вместе с шаблонами ребер и вершин. Если у вас есть какие-либо вопросы, которые вы можете задать в разделе "Обсуждения" на сайте.

Ответ 4

В аналогичном вопросе о двудольных графах, которые вы можете прочитать здесь Я получил рекомендацию NetworkView

Он имеет петли, маркировку вершин, пользовательскую визуализацию вершин, которую вы можете легко редактировать, чтобы быть кругами. Думаю, у него нет маркировки границ. Просто попробуйте.

По крайней мере, это очень хорошее начало, если вы решите сделать это самостоятельно.

Вероятно, вы хотите посмотреть статью Codeproject "Визуализировать график с круговыми зависимостями"

Ответ 5

Если это в коммерческом сценарии, вы также должны взглянуть на yWorks 'yFiles.

В нем есть все функции, которые вы ищете, и самая выдающаяся функция - возможность автоматического упорядочивания диаграмм. Если у вас есть больший конечный автомат или даже создается машина состояния в коде, это поможет вам четко организовать даже большие диаграммы автоматически. Также для этикеток существуют автоматические алгоритмы размещения меток, которые находят места размещения для этикеток, чтобы они не перекрывались друг с другом или с другими несвязанными элементами.

Вы можете увидеть, что библиотека находится в действии в этом Youtube Video, но вы также можете играть сразу с "Живые демоверсии Silverlight онлайн" или просто оцените библиотеку и проиграйте с образцами.

Отказ от ответственности: я работаю для yWorks, но на SO я не представляю своего работодателя.

Ответ 6

Вот несколько вариантов:

Надеюсь, вы найдете то, что вам нужно. Те, кто стоит денег, также имеют свободный доступ. Вы можете получить неплохие результаты с помощью telerik или visifire!