Подтвердить что ты не робот

Какие параметры доступны для макета направленных или неориентированных графиков в .NET?

В графе здесь я имею в виду нечто похожее на эти изображения:

298px-Directed_graph_with_back_edge.svg.png200px-Directed_cycle.svg.png250px-UnitedStatesGraphViz.svg.png

Идеальное решение:

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

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

4b9b3361

Ответ 1

График # также является еще одним вариантом. Я не использовал его лично, но я имел в виду, чтобы обойти его.

Ответ 2

Microsoft Research предоставляет инструмент под названием MSAGL (автоматический график графа, ранее называемый GLEE) для .NET.

MSAGL доступен здесь: http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx

Отказ от ответственности: я не использовал этот инструмент, поэтому не знаю, подходит ли он для вас (и я не знаю о условиях лицензирования, похоже, это относится только к некоммерческим приложениям). Но, по крайней мере, это выглядит интересно.

Ответ 3

Я работаю в команде NDepend, и я подтверждаю: мы перешли с GraphViz на MsAgl в сентябре 2008 года, а также лицензия MsAgl позволяет действительно коммерческое использование. Вот несколько примеров снимков Графики MsAgl, интегрированные в NDepend (все интерактивно, узлы являются подвижными/выбираемыми/съемными/кликабельными, ребра доступны для редактирования /selectable/removeable/clickable, макет можно масштабировать, а также, хотя он может быть более чистым, API MsAgl достаточно чист для работы):

enter image description hereenter image description hereenter image description here

Ответ 4

Graphviz по-прежнему сегодня, на мой взгляд, одна из лучших графических библиотек. Однако, интеграция его в .Net - это боль.

Можно вызвать инструмент командной строки для генерации вывода формы на основе вашего ввода графа, затем вы прочитаете вывод и заложите элементы в настраиваемом элементе управления, который отображает все значения, которые вычисляет граф. Это очень хаки, но это лучший способ, который наш коллектив нашел в интеграции Graphviz с .Net несколько лет назад.

Сегодня может существовать лучшее решение; в то время GLEE все еще была очень эмбриональной, и я не видел прогресса, достигнутого Microsoft с того времени.

Ответ 5

Я использовал NodeXL, http://www.codeplex.com/NodeXL, который является библиотекой .Net 3.5 (но также и надстройкой Excel). NodeXl разработан Microsoft Research и довольно опрятен: он имеет алгоритмы визуализации и некоторые показатели, но все еще находится на ранней стадии разработки. Если у вас есть опытный разработчик .Net, я бы определенно посмотрел на него.

Однако, если вы знаете Python, я бы определенно рекомендовал Networkx и его двоюродный брат pygraphviz, который является интерфейсом к Graphviz. Я использовал оба, и моя производительность с Python/Networkx намного выше, чем когда я использовал NodeXL.

GLEE - это библиотека с закрытым исходным кодом Microsoft, которую вы можете использовать бесплатно только в некоммерческом программном обеспечении, в то время как NodeXL - это способ Microsoft с открытым исходным кодом, но вы можете свободно использовать его в разрабатываемом вами продукте.

Ответ 6

Просто, чтобы сделать список вариантов завершенным: Graphviz4Net - это реализация с открытым исходным кодом того, что предложил Коинкойн в своем ответе.

Ответ 7

У мальчиков в Mindscape есть такой инструмент

С образным именем WPF Flow Diagrams

Кроме того, просмотрите демонстрационный проект Vertigo Family.Show, он имеет простую форму этого

Ответ 8

Используйте QuickGraph для вывода точечных файлов для GraphViz. Я сделал это в недавнем проекте, и, похоже, он работает неплохо. Посмотрите здесь для примера кода для парсинга .plain файлов или используйте мой проект здесь в качестве ссылки для простого вывода изображений .png.

Ответ 9

Я использовал MsAgl, и это очень хорошо. В нем также есть зрители для WinForms и WPF, которые могут или не могут быть важны для вас. Не нужно использовать зрителей, поскольку они довольно слабо связаны с механизмом компоновки графиков.

Он не поддерживает все, что делает Graphviz (особенно с точки зрения некоторых типов фигур). Кроме того, документация может быть лучше, но она довольно прочная, если не самый отполированный продукт MS.

Он галочит все элементы, которые вы упоминаете как требования, хотя реорганизация "on viewer" просто поддерживает перетаскивающие узлы, перенаправляет границы и переставляет метки. График не реагирует на перемещения этих элементов, перемещая любые другие элементы.

Ответ 11

Его не .NET, но часто используемый инструментарий для графиков рендеринга - AT & T Graphviz. Я сам использовал только самостоятельные приложения, но исходный код доступен под чем-то похожим на лицензию с открытым исходным кодом.

Graphviz используется в популярном инструменте документации документации doxygen, чтобы автоматически рисовать различные диаграммы для его сгенерированной документации.

Ответ 12

Когда я проделал некоторую работу с графиками прошлым летом, я нашел, что лучший вариант, который не был слишком дорогим, заключался в том, чтобы вручную сделать это в SVG, то есть выписать SVG файл из группы строк и отобразить это на изображении используя Inkscape.

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

Ответ 13

Я играю на GLEE/MSAGL, и фактический макет сам по себе достаточно хорош для того, что мне нужно, но я бы хотел иметь больше возможностей управления тем, что на самом деле находится внутри узлов, а не только одним значением, например Теперь.

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

Предполагая, что GLEE не может этого сделать, есть ли теперь доступные чистые .NET-решения, которые могли бы это сделать?

Ответ 14

Northwoods предлагает чистое .NET-решение в GoLayout. Они предлагают дерево, силовую направленность и многоуровневый орграф (что не совсем эффект Суджияма, но не слишком далеко для многих, если не для большинства наборов данных). В $1790/место это дорого. Существуют также некоторые ограничения: самое главное, их реализации предназначены для "удобочитаемых человеческих" графиков. Я дал ему наборы данных более 5000 узлов и не имел никаких проблем, но я также могу создавать наборы данных из менее 500 узлов, которые заставляют его иметь переполнение стека (слишком глубокое рекурсирование). В зависимости от вашего домена, он может (или не может) быть хорошим. Если вам нужен общий макет, который обрабатывает любой набор данных, я бы предложил GraphViz над Northwoods.

Мне еще нужно использовать любые возможности WPF, но я знаю, что они у них есть. Я использовал их материал в WinForms на некоторое время.