Как визуализировать сложный граф в .Net?

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

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

Ответ 1

Вы можете посмотреть Graph #, но я не уверен, насколько хорошо он будет обрабатывать составные узлы. Это может быть хорошей отправной точкой.

Ответ 2

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

EDIT: Интересно, что, кажется, есть библиотека, сделанная Microsoft Research.

Ответ 3

Я не знаю, насколько это будет полезно в этом конкретном случае, но вы можете взглянуть на http://quickgraph.codeplex.com/

Ответ 4

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

Ответ 5

Я не могу найти этот компонент, и я решил написать собственный контроль, строку и голову, и использовать их для визуализации моего графика Если это необходимо, я могу дать ему компонент и программу, чтобы продемонстрировать его/ Я записываю компонент и программу на Visual Studio 2008 язык С#

Ответ 6

Хорошо выглядящий инструмент Диаграмма из Nevron. Но это не бесплатно!

В настоящее время я использую диаграммы и пользовательские интерфейсы, и они работают неплохо.

Ответ 7

Graphviz4Net предоставляет компонент WPF для визуализации графиков. Это зависит от GraphViz (инструмент визуализации графического интерфейса командной строки с открытым исходным кодом).

Ответ 8

Успешно использовали этот коммерческий продукт: GoDiagram

Он поддерживает несколько портов на узлах, как вы показали.