2009-02-26 10 views
31

По графике здесь я имею в виду нечто похожее на эти изображения:Какие параметры доступны для макета направленных или неориентированных графиков в .NET?

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

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

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

+0

Как записка для себя, здесь есть красивая библиотека Clojure http://lisperati.com/vijual/ –

ответ

8

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

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

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

+0

Я использовал GLEE v1 раньше. Это было бесплатно, но довольно грубо. Последняя версия (1.2) стоит 150 фунтов стерлингов (220 долларов США). Я бы хотел в идеале услышать о бесплатных решениях. –

+0

BTW домашняя страница проекта находится здесь: http://research.microsoft.com/en-us/projects/msagl/default.aspx –

+0

NDepend ее использовать, поэтому я считаю, что лицензия разрешает коммерческое использование. http://codebetter.com/blogs/patricksmacchia/archive/2008/09/09/interactive-code-dependencies-graph.aspx –

0

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

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

+0

Я использовал Graphviz в анализаторе зависимостей .NET сборки, который я написал несколько лет назад. Это довольно просто, но только выводит растровые изображения или SVG и требует установки на клиенте, а затем COM-взаимодействия. Это неплохо, но не совсем то, на что я надеюсь! –

+0

Если кому-то интересно узнать какой-то грубый код, который использует WinGraphViz через COM, см. Http://www.drewnoakes.com/code/dependancyanalyser/ ... код для VS2003, и немного неловко признавать, что код мой, но это имеет смысл. –

+0

Я подозреваю, что заменить кишки точки, поместив ее в управляемый C++, было бы возможно, но не легко. Я использую инструменты командной строки для быстрого создания состояний машин и т.п. Точка также выведет PostScript, что соответствует моим потребностям. – RBerteig

1

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

С творческим именем WPF Flow Diagrams

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

+0

Схема потоков WPF стоит 500 долларов США и не выполняет автоматическую компоновку графика. Кажется, у него хорошая интеграция WPF. –

+0

Приложение Family.Show отображает семейные деревья, которые (обычно!) Являются простым подмножеством всех возможных графиков. Они, например, ацикличны. Мне интересно видеть алгоритмы, которые могут выкладывать широкий спектр графиков, таких как подход Sugiyama. –

+0

На самом деле у их продукта Star Diagrams есть своего рода автоматическая компоновка. $ 149/место и предлагает дерево и силу. Я не использовал его и понятия не имею, как он справляется с общим случаем, но это больше похоже на то, что вы ищете, чем на продукт Flow Diagrams. –

0

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

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

3

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

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

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

+0

GraphViz можно вызывать через COM с помощью WinGraphViz, хотя вывод должен быть записан в файл, а затем читать с диска, который является неудачным. Это также требует, чтобы дополнительная DLL была зарегистрирована в COM (afaik), чтобы заставить ее работать. Синтаксис DOT прост и удобен в работе. –

+0

Я не знал о WinGraphViz, хорошо. Это в основном то, что мы сделали, мы сгенерировали точку, скомпилировали ее и проанализировали вывод в нашей графической модели. – Coincoin

+0

Последняя версия WinGraphViz была в 2004 году. К сожалению, это только COM-интерфейс. Возможно, кто-то может решить, как маршалировать данные изображения через com, чтобы избежать файловой системы. Интересно, может ли вывод SVG быть проанализирован для позиционной информации, а затем преобразован в объекты и рендеринг WPF ... –

0

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

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

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

1

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

12

Graph# - еще один вариант. Я не использовал его лично, но я имел смысл обойти его.

+0

После краткого просмотра Graph # выглядит довольно интересным. Спасибо за ссылку. –

+0

Я еще не пробовал, но, к сожалению, они утверждают, что макет Sugiyama ошибочен. Это самый полезный макет в моем опыте, поэтому, надеюсь, он будет исправлен в какой-то момент. –

+0

С моего предыдущего комментария, похоже, что этот проект действительно появился (включая макет Sugiyama). Еще не пробовал, но в следующий раз мне нужно что-то вроде этого, это будет первая библиотека, которую я пытаюсь. –

0

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

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

1

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

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

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

8

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

enter image description here enter image description here enter image description here

2

Я использовал 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 с открытым исходным кодом, но вы можете свободно использовать его в разрабатываемом вами продукте.

+0

Большое спасибо за это. Я обязательно проверю это. –

2

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

+0

Выглядит неплохо, хотя, к сожалению, не полностью управляется. Поддержка WPF выглядит великолепно. –

+0

@DrewNoakes Почему вы ищете 100% управляемый код: в чем преимущество? – ChrisW

 Смежные вопросы

  • Нет связанных вопросов^_^