2008-11-26 2 views
4

Я создал конструктор стиля рабочего процесса/блок-схемы для чего-то. В настоящий момент он использует относительно простые линии кривой Безье для подключения различных конечных точек «блоков» в рабочем процессе.Библиотека .NET для рисования маршрутизированных линий, избегающих препятствий

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

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

Я знаю, что за этим стоит вся наука. Я рассмотрел такие вещи, как Graphviz, Microsoft GLEE и их коммерческую библиотеку AGL (автоматическая компоновка графа).

GLEE, похоже, едва ли достойно производства. И их коммерческая альтернатива, ну, коммерческая альтернатива ... это довольно дорого.

В любом случае, Graphviz портирован на .NET.

Я видел реализацию полилинии, используемую Windows Workflow Foundation для своего «конструктора свободной формы». И это работает, просто, но это действительно не внешний вид производства.

Я удивлен, что нет какой-либо plug'n'play библиотеки .NET для этого типа вещей? Что-то вроде:

Пункт [] RoutePolyline (Point begin, Point end, Rectangle [] rectObstacles, Point [] lineObstacles);

+0

Это почти звучит NP-complete ... :) http://xkcd.com/287/ – Rob 2008-11-26 09:42:04

+0

@Rob Я считаю, что это на самом деле изоморфно проблеме коммивояжера. Я бы предположил, что бумага, которую представляет xkcd-символ, представляет собой симулированный отжиг, который, возможно, стоит рассмотреть, если у вас есть * серия * линий для работы. Я считаю, что именно так работает программное обеспечение для маршрутизации печатных плат, что по сути является одной и той же проблемой. – Jules 2016-04-17 19:50:23

ответ

1

Я не пробовал (хотя я счастливый клиент своего Gantt продукта), но у ILOG есть аналогичный инструмент here.

Для quote:

ILOG Схема алгоритмов .NET доля общие цели, такие как:

  • Минимизация количества перекрывающихся узлам
  • Минимизация количества ссылок пересечения
  • Сведение к минимуму общей площади рисунок
  • сведение к минимуму числа изгибов (в ортогональных чертежах)
  • Максимизация наименьший угол, образованный путем последовательного инцидента связывает
  • Максимизация отображение симметрии
  • Поддержка инкрементного макет, частичная планировка, подграфы, Intergraph ссылки и вложенные макеты

Возможно, стоит посмотреть, по крайней мере.

+0

Кажется, теперь на Github (https://github.com/dalssoft/diagramnet) – 2016-06-18 18:31:56

1

Diagram.NET - бесплатная библиотека с открытым исходным кодом на C#. Он не был обновлен в течение довольно длительного времени, но это, безусловно, стоит посмотреть - там что-то есть, что вы можете повторно использовать.

http://www.dalssoft.com/diagram/

1

Вы ограничены только управляемый код?

У меня не было этого ограничения, а прошлое и эффективно интегрировано GraphViz с .Net. То, что мы сделали, это вызвать внешний процесс, содержащий изначально скомпилированную «точку» и проанализировать результат в объектной модели .Net. Он работал отлично и был достаточно быстрым для наших нужд.

Я уверен, что сегодня с C++/CLI вы могли бы сделать все лучше и проще.

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