Для чего-то я создал дизайнер стилей потока операций / блок-схемы. В настоящее время он использует относительно простые линии кривой Безье для соединения различных конечных точек «блоков» в рабочем процессе.
Однако я бы хотел что-то более интуитивное для пользователя. Я хочу, чтобы линии избегали таких препятствий, как другие блоки (прямоугольники) и, возможно, другие линии.
Я предпочитаю сплайны Безье, а не полилинии, потому что они красивее и, кажется, лучше вписываются в дизайнера в целом. Но я готов пойти на компромисс, если их гораздо труднее достичь.
Я знаю, что за этим стоит целый груз науки. Я изучал такие вещи, как Graphviz, Microsoft GLEE и их коммерческая библиотека AGL (автоматическая разметка графиков).
GLEE, кажется, едва ли достоин производства. И их коммерческая альтернатива, ну, коммерческая альтернатива ... это довольно дорого.
Graphviz, похоже, никак не был портирован на .NET.
Я видел реализацию ломаной линии, используемую Windows Workflow Foundation для ее «конструктора свободной формы». И это работает, просто, но на самом деле это не внешний вид производственного класса.
Я удивлен, что нет библиотеки plug-n-play .NET для такого типа вещей? Что-то вроде:
Point [] RoutePolyline (Начало точки, Конец точки, Прямоугольник [] rectObstacles, Point [] lineObstacles);