VetCAD

решение задачи BOUNDARY

   5 оценок

размещено: 16 Февраля 2017
обновлено: 28 Февраля 2017

Одно из часто требуемых при черчении действий - поиск и создание замкнутых контуров из имеющихся линий. Это действие производит в AutoCAD каждый, кто создает штриховки, кому нужны контуры площадных объектов для подсчета площадей, для формирования площадных объектов, для передачи данных в другое ПО и т.п.

Для решения этой задачи в AutoCAD предназначена команда _BOUNDARY (КОНТУР) или _BPOLY (КПОЛИ). Появилась команда BOUNDARY примерно в 1999 году (плз, знатоки, поправьте), т.е. примерно 17 лет назад.

Команда _BOUNDARY решает свою задачу в двух основных вариантах:

1. Pick Points (Указание точек) - по указанным точкам ищет ближайшие замкнутые контуры из окружающих графических элементов,

2. Boundary set (Набор объектов контура) - ищет замкнутые контуры, образуемые указанными графическими элементами, и создает из них нужные контуры после указания внутри них точек.

Но с _BOUNDARY в варианте запуска Pick Points (Указание точек) есть проблемы с момента ее появления и до сих пор, все эти 17 лет. В варианте запуска Pick Points (Указание точек) - создаются неточные или неполные контуры, часто очень медленно - минуты и десятки минут, и не всегда вообще создаются даже при нормальной возможности:

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

Причина этого заложена, вероятно, в алгоритме команды - поиске с использованием экранных координат графических элементов, т.е. зависящих от степени увеличения и детализации элементов. Кроме того, возможно, используется метод Flood ("затопление"), что тоже приводит к неточностям и/или затруднениям.

Проблема эта, очевидно, проявлялась с самого начала, но в корректном, быстром и надежном варианте команда BOUNDARY до сих пор в AutoCAD не появилась.

Судя по мнениям некоторых программистов и общим соображениям, данная задача только кажется несложной, а в действительности требует непростых и нетривиальных решений. И даже может казаться для общего случая нерешаемой. Например, для общего случая можно предположить, что решение задачи для построения уже одного контура требует анализа всех элементов модели. Которая может содержать десятки и сотни тысяч графических элементов. Тем не менее есть пример ряда "клонов" AutoCAD, в которых задача BOUNDARY в варианте указания точек решена корректно и полно. И существуют качественные решения сторонних программистов под AutoCAD.

 

Я начал искать решения этой задачи под AutoCAD примерно в 2007-2008 годах, т.е. уже 9-10 лет назад.

В тот период я нашел три готовых альтернативных решения задачи BOUNDARY, причем одно из них от самого Autodesk и для AutoCAD!

Первое решение от индийской компании DeliCAD - FlashPolygon, платное. Это не решение для варианта указания точек, но быстрое, полное и точное построение всех возможных замкнутых контуров из всех указанных графических элементов. Не зависит от видимости всех элементов, увеличения и т.п.

Второе решение от знакомого программиста - BNDR, но оно, увы, практически недоступно. Работает в варианте указания точек, и тоже быстрое, полное и точное. Не зависит от видимости всех элементов, увеличения и т.п.

Третье решение от Autodesk и для AutoCAD Map 3D - создание площадных топологических моделей с возможностью выгрузки контуров всех площадей. Это тоже не решение для варианта указания точек, но тоже быстрое, полное и точное. Хотя и требующее специфической тщательной подготовки исходных графических элементов - запрет на дублирование, на непримыкания, разбивание на пересечениях и т.п. Не зависит от видимости всех элементов, увеличения и т.п.

Решения от DeliCAD и в Map 3D не позволяют указывать нужную площадь точкой, но они могут быть основой алгоритма для варианта с указанием точек.

Решение от DeliCAD, вероятно, самое давнее, приблизительно с 2002-2004 г. или ровесник AutoCAD Map 3D.

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

Но мне уже в 2009 г. стало понятно, что задача BOUNDARY для AutoCAD вполне практически решаема.

Примерно в 2009 г. я начал искать программистов, способных и готовых создать альтернативу команде BOUNDARY.  Я писал сообщения о проблемах BOUNDARY на разных форумах, создавал соответствующие темы, в том числе на англоязычном форуме Autodesk, связывался со многими программистами. Но до недавнего времени по разным причинам ничего не получалось. Среди прочих я получал от программистов и такие писсимистические ответы: "Для создания контура вокруг точки таких алгоритмов нет (да и быть не может)." или "... Раз Autodesk не смог решить эту задачу больше чем за десять лет.". (Цитаты вырваны из контекста).

В конце 2014 г., увидев программу TotalBoundary, я связался с ее автором и в т.ч. мы обсуждали и вопрос о создании альтернативы BOUNDARY, но в основном в гипотетическом плане.

И вот, совсем недавно и неожиданно, в конце 2016 г. от автора TotalBoundary, Totalpurge и т.п. появилось новое решение - SuperBoundary (оно же на dwg.ru), которое по целому ряду параметров лучше других решений:

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

Для решения задачи автор SuperBoundary использует собственный "мощный движок", который позволяет быстро (чаще всего за секунды) анализировать и обрабатывать большие модели (десятки и сотни тысяч элементов). Это дает возможность быстро, точно и полно анализировать всю модель для поиска и создания минимальных контуров вокруг указанных точек, создавать сразу все возможные минимальные контуры из указанных графических элементов, заполнять такие площади штриховками.

Считаю, что появление SuperBoundary - событие. Решена, хоть и не впервые, задача, которой уже 17 лет, задача по мнению программистов сложная или очень сложная, ее решение позволяет выстраивать работу с применением надежного и точного решения. Я, безусловно, пристрастен, т.к. вижу большую пользу от такого инструмента для процесса формирования, описания площадных объектов, штрихования и заполнения контуров, которые необходимы для нашей продукции. Но на мой взгляд это событие сравнимо с решением гипотезы Пуанкаре или теоремы Ферма. В автокадовском, конечно, масштабе.

Предположу, что и "мощный движок" тоже есть достижение, и он применим для многих других задач, требующих обработки больших моделей. Что автор уже делает, выпуская соответствующие другие программы. Возможно, что и этот "движок" не совершенен, но с ним обработку данных можно производить быстрее, и, вероятно, и его можно улучшать.

Кому-то может не нравиться автор SuperBoundary, кому-то способ установки этой программы, окно программы, отсутствие командного режима и т.п., но сейчас автор программы открыт для доработок и улучшений, и многое можно изменить. И, повторюсь, я точно предвзят, т.к. заинтересован, но появление SuperBoundary, по-моему, и событие, и достижение.

 

И мне совсем непонятно, почему Autodesk за столько лет не предпринял для исправления пороков BOUNDARY соответствующих усилий. Вплоть до приобретения готовых решений у сторонних программистов - у DeliCAD, сейчас SuperBoundary и т.п. Или перенести решения из вертикального приложения в базовый AutoCAD. По-моему, лучшее и всех устроившее бы решение - качественное решение от самого Autodesk.

Комментарии

Комментарии могут оставлять только зарегистрированные участники
Авторизоваться
Комментарии 1-7 из 7
АлексЮстасу , 24 февраля 2017 в 17:56
#7
Цитата:
Сообщение #6 от Jоhnny
За современными тенденциями этой команды сейчас конечно не слежу, но помню что были у меня к ней претензии.
Пусть меня поправят: вроде бы минимум лет десять уже никаких изменений в команду BOUNDARY не вносилось.
Не знаю, когда появилась маркировка разрывов? Но с порочным алгоритмом никаких изменений не наблюдается.
Jоhnny , 23 февраля 2017 в 21:55
#6
Цитата:
Сообщение #1 от gnomm
что это такое?! кому это может быть интересно???

Я например пользовался часто этой командой при 3D моделировании, когда сложный профиль, например профиль фрезы, можно конечно применить и pline с опцией join, но если в контуре есть spline тогда это может быть и посложнее будет, а boundary решало эту задачу. За современными тенденциями этой команды сейчас конечно не слежу, но помню что были у меня к ней претензии.
Debalance , 22 февраля 2017 в 19:41
#5
Кстати на счёт FlashPoligons и её разработчиках. На самом дели она вовсе не сделана индийскими "партнёрами". Её автором является некто Филипп Серанж, проживающий во Франции в городке Исуар (об этом говорится на сайте DeliCAD). И о том, что программа европейского происхождения косвенно говорит валюта (а именно евро) заявленная в ценнике программы и двуязычный англо-французский интерфейс сайта.
Сама же FlashPoligons в плане построения контуров мне не кажется "полной и точной". Особенно это становится заметно при работе с большим количеством примитивов >1000. Кроме того список поддерживаемых примитивов "неказист" (мне кажется она даже не поддерживает сплайны). Из минусов также стоит отметить "вялые" настройки и отсутствие установки величины допуска. Инсталлятору тоже, пожалуй, поставлю минус - есть некоторые специфические моменты в установке. Ну и, наконец, цена на данный инструментарий (с учетом всех минусов) несколько неадекватна.
К плюсу этой программы я бы отнёс лишь лёгкую портируемость на различные версии AutoCAD и платформы (BricsCAD и т.п.) - видимо движок написан на лиспе, от того и всё. Но в целом (на мой взгляд) этот плюс не перевешивает минусов.

Итог: FlashPoligons надо дорабатывать, тем более она, судя по всему, давно не обновлялась.
АлексЮстасу , 20 февраля 2017 в 21:53
#4
Цитата:
Сообщение #3 от Debalance
AutoCAD R13 (он вышел в свет в далеком 1994 году) - там данная команда уже присутствовала. Рискну предположить, что и в R12 тоже (1992 год).
Я где-то читал, что BOUNDARY сделали сначала в составе команды, создающей Hatch, а потом выделили в отдельную.
Debalance , 20 февраля 2017 в 21:26
#3
Уточнение по-поводу появления _BOUNDARY: я начинал деятельность с AutoCAD R13 (он вышел в свет в далеком 1994 году) - там данная команда уже присутствовала. Рискну предположить, что и в R12 тоже (1992 год).
АлексЮстасу , 19 февраля 2017 в 17:17
#2
Цитата:
Сообщение #1 от gnomm
что это такое?! кому это может быть интересно???
И действительно! Разве может быть на сайте dwg.ru хоть кому-то интересно что-то связанное с Автокадом?!
gnomm , 19 февраля 2017 в 12:02
#1
что это такое?! кому это может быть интересно???