Существует ли библиотека или компонент для визуализации диаграммы связей или графа под C#?

Возникла необходимость визуализировать схему потоков данных между системами.
Самый простой способ - рисовать вручную в чем-то типа Visio, но это неудобно, т.к. схема может часто меняться, плюс может меняться описание отдельных узлов, плюс нужна возможность "раскрывать узлы" по щелчку для получения подробной информации, то есть простое изображение не годится.
Всё сводится к тому, что есть список узлов и список связей между узлами (с указанием направления для каждой связи - туда, сюда или туда-сюда). Нужно разместить узлы и связи на схеме, причем следующим образом:
1) первичное размещение узла или связи происходит по принципу best fit (разместить на усмотрение программы самым простым образом. Возможно, с обходом узлов, пересечением других связей и т.п.).
2) пользователь может переместить узел или изменить конфигурацию связи (сделать обход узлов, повороты и т.п.), после чего узел/связь "запоминает" данную конфигурацию.
3) при отрисовывании диаграммы узлы и связи, для которых есть запомненная конфигурация, отрисовываются с её учетом, в других случаях применяется best fit.
4) по щелчку на узел или связь можно отловить событие и отобразить какие-то дополнительные контролы с подробным описанием.

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

И всё через C#. Можно WPf, можно winforms.
  • Вопрос задан
  • 1960 просмотров
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
https://www.graphviz.org/ это классика

https://habr.com/ru/post/337078/
linuxshare.ru/docs/misc/graphviz.html
правда не думаю что ее переписали на .net - на большинстве остальных я-ков что то имеется
https://github.com/search?q=graphviz
Languages
420 Python
228 JavaScript
144 Ruby
142 Java
100 C++
94 Perl
89 Shell
77 Go
69 C
63 PHP
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы