Библиотека .NET для рисования проложенных линий, избегая препятствий

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

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

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

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

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

Похоже, что Graphviz никоим образом не был перенесен на .NET.

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

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

Point [] RoutePolyline (начало точки, конец точки, прямоугольник [] rectObstacles, точка [] lineObstacles);

Звучит почти как NP-полная ... :) xkcd.com/287

Rob 26.11.2008 12:42

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

Jules 17.04.2016 22:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
2 939
3

Ответы 3

Я не пробовал (хотя я счастливый покупатель их продукта Гантт), но у 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 16.08.2016 11:51

@Prokurors Я очень уверен, что они совсем другие; к сожалению, похоже, что ILOG проглотили; обидно, мне очень понравился их инструмент Ганта.

Marc Gravell 16.08.2016 12:31

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

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

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

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

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

Другие вопросы по теме