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





Я не пробовал (хотя я счастливый покупатель их продукта Гантт), но у ILOG есть похожий инструмент здесь.
Кому Цитировать:
The ILOG Diagram for .NET algorithms share generic goals such as:
- Minimizing the number of overlapping nodes
- Minimizing the number of link crossing
- Minimizing the total area of the drawing
- Minimizing the number of bends (in orthogonal drawings)
- Maximizing the smallest angle formed by consecutive incident links
- Maximizing the display of symmetries
- Supporting incremental layout, partial layout, subgraphs, intergraph links and nested layouts
Возможно, стоит хотя бы взглянуть.
@ThomasWeller Как вы думаете, почему Diagram.NET - это та же диаграмма ILOG для .NET?
@Prokurors Я очень уверен, что они совсем другие; к сожалению, похоже, что ILOG проглотили; обидно, мне очень понравился их инструмент Ганта.
Diagram.NET - это бесплатная библиотека для построения диаграмм на C# с открытым исходным кодом. Он не обновлялся довольно долгое время, но на него, безусловно, стоит взглянуть - там может быть что-то, что вы можете использовать повторно.
Вы ограничены только управляемым кодом?
У меня не было этого ограничения и прошлого, и я эффективно интегрировал GraphViz с .Net. Мы вызвали внешний процесс, содержащий скомпилированную в собственном коде точку, и проанализировали результат в объектной модели .Net. Он работал отлично и был достаточно быстрым для наших нужд.
Я уверен, что сегодня вы могли бы работать лучше и проще с C++ / CLI.
Звучит почти как NP-полная ... :) xkcd.com/287