Это буквально предварительная подготовка к выбору магистерской программы Университета Хельсинки. Пожалуйста, не отвечайте на это в его нынешнем виде.
График № также является другим вариантом. Я не использовал это лично, но я хотел обойти это.
Я играл на GLEE / MSAGL, и фактический макет сам по себе достаточно хорош для того, что мне нужно, однако я бы хотел иметь больше контроля над тем, что на самом деле внутри узлов а не просто одно значение, как сейчас.
Например, я бы хотел, чтобы «детали» были скрыты до тех пор, пока я не нажму на расширитель в узле, или дважды не щелкну мышью на узле или наведите курсор мыши.
Предполагая, что GLEE не может этого сделать, существуют ли сейчас какие-либо чистые решения .NET, которые могли бы это сделать?
То, когда я сделал некоторую работу, включающую графики прошлым летом, я нашел наилучший вариант, который не был чрезмерно дорогим, должно было вручную сделать это в SVG, т.е. выписать файл SVG от набора строк и рендеринг что к использованию изображения Inkscape.
Это не быстрое и легкое решение, но оно действительно допускает почти бесконечное удовлетворение требованиям заказчика, таким образом, могло бы быть хорошо, если необходимо организовать графики или сделать пространственную организацию на основе соединений и т.д.
Не.NET, но инструментарий, на который часто ссылаются, для рендеринга графиков является AT& T Graphviz. Я только использовал автономные приложения сам, но исходный код доступен под чем-то напоминающим лицензию Open Source.
Graphviz используется популярным инструментом документации кода doxygen для автоматического рисования различных схем для его сгенерированной документации.
Используйте QuickGraph для вывода файлов Dot для GraphViz . Я сделал это в недавнем проекте, и это, кажется, работает довольно хорошо. Посмотрите здесь пример кода для анализа файлов .plain или используйте мой проект здесь в качестве справочного материала для простого вывода изображений .png.
Graphviz является все еще сегодня, по-моему, одной из лучшей библиотеки графика существует. Однако интеграция его к .NET является болью.
возможно назвать инструмент командной строки для генерации вывода формы на основе входа графика, тогда Вы читаете вывод и кладете элементы на пользовательском элементе управления, который отображается, любые формы graphviz вычислил. Это очень hacky, но это - лучший способ, которым наши команды нашли интеграции graphviz с .NET несколько лет назад.
А лучшее решение могло бы существовать сегодня; в то время ЛИКОВАНИЕ было все еще очень эмбриональным, и я не видел прогресса, который Microsoft сделала с этого времени.
Microsoft Research обеспечивает инструмент под названием MSAGL (Автоматическое Расположение Графика, ранее названное ЛИКОВАНИЕ) для.NET.
MSAGL доступен здесь: http://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx
Правовая оговорка: Я не использовал инструмент, таким образом, я не знаю, подходит ли это для Вас (и, и при этом я не знаю об условиях лицензирования, кажется, что это только для некоммерческих приложений). Но по крайней мере это выглядит интересным.
Мальчики в Mindscape имеет такой инструмент
С образным именем Блок-схемы WPF
кроме того, проверяет Головокружение семья. Покажите демонстрационный проект, он имеет простую форму этого
Northwoods offers a pure .NET solution in their GoLayout product. They offer tree, force directed, and layered digraph (which is not quite a Sujiyama effect, but not too far off for many if not most data sets). At $1790/seat it's expensive. There are also some limitations: most importantly, their implementations are designed for "human readable" graphs. I've given it data sets of over 5,000 nodes and had no issue, but I can also generate data sets of less than 500 nodes that cause it to have a stack overflow (recursing too deep). Depending upon your domain, it may (or may not) be a good fit. If you need a general layout package that handles any data set, I'd suggest GraphViz over Northwoods.
I have yet to use any of their WPF capabilities, but I know they have them. I've been using their stuff in WinForms land for a while.
Я использовал MsAgl, и он довольно хорош. Он также имеет средства просмотра как для WinForms, так и для WPF, которые могут быть важны или не важны для вас. Необязательно использовать средства просмотра, поскольку они довольно слабо связаны с механизмом компоновки графов.
Он не поддерживает все, что делает Graphviz (особенно с точки зрения некоторых типов фигур). Также документация могла бы быть лучше, но она довольно солидная, если не самый совершенный продукт MS за всю историю.
В ней отмечены все элементы, которые вы упоминаете как требования, хотя реорганизация "при просмотре" просто поддерживает перетаскивание узлов , изменение маршрута кромок и изменение положения этикеток. График не реагирует на движения этих элементов перемещением других элементов.
Я работаю в команде NDepend и подтверждаю: мы перешли с GraphViz на MsAgl в сентябре 2008 года, а также лицензия MsAgl позволяет действительно коммерческое использование. Вот несколько примеров изображений графиков MsAgl, интегрированных в NDepend (все интерактивно, узлы можно перемещать / выбирать / удалять / щелкать, края можно редактировать / выбирать / снимать / щелкать, макет можно масштабировать, а также , хотя он мог бы быть чище, API MsAgl достаточно чист для работы):
I have used NodeXL, http://www.codeplex.com/NodeXL, which is a .Net 3.5 library (but also an Excel add-on). NodeXl is developed by Microsoft Research and pretty neat: it has visualization algorithms and some metrics but it is still in its early stages of development. If you have are a seasoned .Net developer then I would definitely take a look at it.
However, if you know Python then I would definitely recommend Networkx and its cousin pygraphviz which is an interface to Graphviz. I have used both and my productivity with Python / Networkx is way higher then when I was using NodeXL.
GLEE is Microsoft's closed source library that you only can use for free in non-commercial software while NodeXL is Microsoft's way of open source but you can use it freely in a product you develop.