Я создал конструктор стиля рабочего процесса/блок-схемы для чего-то. В настоящий момент он использует относительно простые линии кривой Безье для подключения различных конечных точек «блоков» в рабочем процессе.Библиотека .NET для рисования маршрутизированных линий, избегающих препятствий
Однако я хотел бы что-то более интуитивно понятное для пользователя. Я хочу, чтобы линии избегали препятствий, таких как другие блоки (прямоугольники) и, возможно, другие линии.
Я предпочитаю сплайны безье, а не полилинии, потому что они красивее и, похоже, лучше подходят дизайнеру в целом. Но я готов пойти на компромисс, если их намного сложнее выполнить.
Я знаю, что за этим стоит вся наука. Я рассмотрел такие вещи, как Graphviz, Microsoft GLEE и их коммерческую библиотеку AGL (автоматическая компоновка графа).
GLEE, похоже, едва ли достойно производства. И их коммерческая альтернатива, ну, коммерческая альтернатива ... это довольно дорого.
В любом случае, Graphviz портирован на .NET.
Я видел реализацию полилинии, используемую Windows Workflow Foundation для своего «конструктора свободной формы». И это работает, просто, но это действительно не внешний вид производства.
Я удивлен, что нет какой-либо plug'n'play библиотеки .NET для этого типа вещей? Что-то вроде:
Пункт [] RoutePolyline (Point begin, Point end, Rectangle [] rectObstacles, Point [] lineObstacles);
Это почти звучит NP-complete ... :) http://xkcd.com/287/ – Rob 2008-11-26 09:42:04
@Rob Я считаю, что это на самом деле изоморфно проблеме коммивояжера. Я бы предположил, что бумага, которую представляет xkcd-символ, представляет собой симулированный отжиг, который, возможно, стоит рассмотреть, если у вас есть * серия * линий для работы. Я считаю, что именно так работает программное обеспечение для маршрутизации печатных плат, что по сути является одной и той же проблемой. – Jules 2016-04-17 19:50:23