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