Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Debalance

Pages: 1 2 3 [4] 5
46
В данном посте рассматривается решение задачи обнаружения и построения контуров всех замкнутых областей сложного (насыщенного) чертежа с использованием плагина SuperBoundary. Я хотел бы сразу оговориться, что это решение не более чем тест, так сказать проверка на прочность возможностей программы SuperBoundary. Поэтому я бы попросил все Пытливые Умы относиться к подобному тесту и его целесообразности с долей снисхождения.

На самом деле вопрос о "сложности" чертежа в некоторой степени риторичен, а в некоторой требует определённого уточнения. КТО-НИБУДЬ из сторонников абсолютных цифр считает, что "навороченный" чертёж может содержать десятки тысяч объектов, а ,например, НЕКТО мыслит категориями большего масштаба - разумно полагая, что такой чертёж должен вмещать ни как не меньше сотни тысяч примитивов.
Я же являюсь приверженцем относительной шкалы ценностей. На мой взгляд сложность чертежа должна определяться в первую очередь "железом" т.е. рабочим местом, на котором с ним производят те или иные манипуляции. Ведь давно известно, что несколько миллионов примитивов открытых в среде AutoCAD легко "убивает" комп с 64 гигами памяти. Поэтому здесь (размышляя о степени сложности чертежа) я буду отталкиваться от конфигурации своей тестовой машины.
А конфигурация её такова:
- процессор Core i5, 3,3 ГГц;
- оперативная память 32 Гб;
- операционная система Windows 8.1;
- графическая среда AutoCAD 2016.

Согласен - не густо, но что имеем тем и дорожим. Поэтому (отталкиваясь от опыта общения с AutoCAD'ом) приходим к выводу, что комфортная работа на такой конфигурации должна быть с чертежом, занимаемый объём которого в оперативной памяти не будет превышать 25 Гб. Именно такой чертёж в данном контексте мы и будем называть "сложным". Причем важно учитывать следующее условие: в обозначенные 25 ГБ памяти должны "влезать" созданные нами многочисленные контуры. Т.е. реальный исходный чертёж должен быть, примерно, в 2,5 раза более компактным.
Такой чертёж мне удалось раздобыть, точнее сказать он мне был любезно предоставлен одним из "Активнейших Членов" геодезического сообщества, за что выражаю Ему благодарность.
Итак предоставленный в моё полное распоряжение тестовый чертёж содержит порядка 245 000 объектов. Здесь стоит отметить - этот чертёж несёт в себе весьма объёмное количество полилиний с достаточно большим содержание вершин. Поэтому реальный вес таких объектов в памяти существенен по сравнению с элементарными примитивами типа ОТРЕЗОК или ДУГА.
Для желающих повторить описанные ниже тестовые манипуляции предоставляю ссылку на исходный чертёж. Размер чертежа - чуть больше 60 МБ.

Переходим, собственно, к тесту. Будем действовать по-порядку:
1. Откываем чертёж:


2. Запускаем SuperBoundary и выделяем все объекты:


Как видно из данного рисунка количество объектов попавших в рассмотрение программы составляет порядка 160 000 примитивов.

3. Лезем в настройки и устанавливаем следующие параметры:


Здесь для меня важными опциями с точки зрения визуализации будут:
- генерация заливок (Generate solid filled shape);
- цвет примитивов - произвольный (Use random color).
Для усложнения задачи активируем "Решение островков" (Island detection).

4. Запускаем процесс, нажав кнопку "START". Собственно сам процесс выявления контуров занял у нас примерно 34 минуты, что видно по часам таймера на следующем скриншоте:


Как видно из этого скриншота в результате работы программы было обнаружено чуть больше 218 000 контуров.
Также на этом этапе я хотел бы отметить максимальный расход памяти зафиксированный при генерации контуров. Он составил в районе 16 ГБ, о чём свидетельствует ниже скриншот диспетчера задач:


5. Преобразуем все выявленные контуры в конкретные примитивы среды AutoCAD и добавляем их в базу чертежа. Для этого жмём появившуюся кнопку "BUILD ALL" (СТРОИТЬ ВСЁ). Итоговый скриншот диалогового окошка SuperBoundary привожу ниже:


Из рисунка видно что на данную процедуру мы потратили всего лишь треть секунды времени.

6. Ну и наконец закрываем окно программы и наслаждаемся полученными результатами:


Или вот, некий приближённый фрагмент чертежа:


Как видите качество созданных созданных контуров "на высоте".

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


Цифра в 20,5 Гб хоть и большая но вполне комфортная для данной конфигурации системы. Размер обновлённого чертежа после сохранения составил чуть более 207 МБ.

47
... Они создаются дважды - и в составе группы с общим их контуром, и еще и для каждого отверстия.
Если вы говорите про режим BUILD ALL - то это естественно: ведь программа условно "тыкает" в область каждого контура. И если у Вас островок является простым отверстием - то такой "эффект" неизбежен. Если же и островок у вас "комплексный" т.е. состоящий из подостровков или разделённый на несколько частей - то программа в таком режиме пробежится по каждому из них, предварително создав внешний контур "комплексного" островка.
В случае если у Вас в чертеже много подобных простых островков - просто отключайте опцию "Решение островков".

48
Разместил новую версию программы SuperBoundary v.1.0.1.40.
Перечень обновлений:
1. Исправлена некорректность работы программы при генерации контуров с внутренними островками, образованными двумя и более совпадающими окружностями.

2. Добавлена поддержка работы с внешними ссылками (XREF).

3. В настройках программы добавлен параметр Combine polylines into groups (Объединять полилинии в группы):


Данная опция становится доступной после активации функции Island detection (Решение островков). Таким образом все обнаруженные островки-полилинии будут объединяться в группу вместе с содержажей их родительской полилинией. На рисунке ниже показан пример такой группы, в котором родительская полилиния объединена с двумя окружностями-островками:


4. Добавлен вывод информации о генерируемых контурах в текстовое окно AutoCAD в режиме указания точки:


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

49
Мне кажется подобной задачей должна заниматься отдельная программа (тем более Вы утверждаете, что она уже есть). Я так понимаю, что отсутствие контура у штиховки - это в какой-то степени форс-мажор (контур либо утратился под воздействием "внешних факторов", либо намеренно был удалён пользователем).

Теперь представьте себе ситуацию, когда в чертеже имеется масса штриховок где лишь у некоторых отсутствую контуры. Достраивание контуров ко всем штриховкам отразится (может и не столь существенно) на работе программы. Ведь контуры будут достроены и к штриховкам, у которых с контурами всё в порядке. Т.е. программе надо будет потратить дополнительное машинное время на построение и удаление дубликатов (т.е. взаимно перекрываемых примитивов) образующих контуры. А оно нам надо? По-моему нет...

50
... т.е. их границы как части возможных контуров.
Погодите... не совсем догоняю. Где есть штриховка - там уже есть контур, не так ли? Возможно ли создать штриховку без ограничивающего контура?

51
Может быть добавить к типам элементов еще и штриховки?
Вы хотите их взрывать и строить контуры из их же компонентов? Такая опция может быть актуальной?

52
Именно поэтому - когда не создан контур, то это никак не видно...
Ок. Принимается.

53
Из общего еще не хватает сообщений в окне сообщений в режиме указания точек, что создан/не создан контур.
Я тоже думал над этим. Но для чего нужно такое сообщение? Ведь если контур создан - его видно (повторно контур на этом месте не создаётся), если же нет - то нет, т.е. имеется разрыв либо же ткнули мы в область, которая не присутствует среди выбранных примитивов...

54
Я в принципе за однозначность - ни блоки...
Ну а как же BPOLY? Ведь она же успешно работает с блоками. Мы же позиционируем SuperBoundary как наследника BPOLY, поэтому всякое урезание наследуемых возможностей выглядит как добровольная кастрация...
Что касается текстов-мтекстов, то конечно, использовать эту опцию при создании контуров-полилиний нелогично. Данную возможность надо привязывать к режиму заливки.
Я кстати тут побаловался с заливкой и мтекстом и нашёл в Акаде такой косячок:

Поясню: я нарисовал прямоугольник, наложил на него мтекст, причем наложил умышленно с перекрытием, и произвел заливку без ассоциативности (верхний рисунок).
Далее я удалил текст и выделили, собственно, заливку (нижний рисунок). И получилась такая вот квази-штриховочка с торчащим кусочком рамочки. В принципе подобные вещи при реализации в SuperBoundary можно устранить.

Честно говоря вопрос слияния BPOLY с BHATCH на движке SuperBoundary меня давно интересовал. Ведь суть у них примерно одинаковая - площадные объекты (как Вы выражаетесь).
Кстати я тут заметил, что команда штриховочки (BHATCH) на последних версиях AutoCAD работает веселее не в пример BPOLY... Может вся эта затея с реализацией идеальной BPOLY не стоит "ломаного яйца"? Может ребята из AutoDesk подтянут BPOLY к достойному уровню производительности в версиях AutoCAD 2019-2020? И вся наша возня напрасна?

55
Разместил видео, которое демонстрирует возможности SuperBoundary при построении контуров среди объектов расположенных на чертеже с большими зазорами друг по отношению к другу:



Как видно из видео, самое главное при построении подобных контуров это - правильное указание величины допуска. При этом необходимо помнить, что все примитивы, размер которых меньше заданной величины допуска будут пренебрегаться программой и приравниваться к точечным объектам. Таким образом произойдёт "загрубление" чертежа.
Поэтому желательно стремиться к умеренной минимизации значения допуска во избежание утраты малых элементов, учитываемых при построении контура.

56
Может быть расположить опцию в одной строке с Заливать контуры? Вроде бы по смыслу.
Полагаю такой вариант не подходит. Нужна однозначность - или мы работаем с блоками в обоих режимах (заливка/обводка) или игнорируем полностью. В противном случае может возникнуть путаница. В этом случае просматривается единственный вариант - создание подраздела типа "Работа с Блоками" или лучше "Прочие Настройки" ("Miscellaneous"), куда и впихнуть эту опцию... как-то так...

Кстати - реплика - если обводить блоки, то и тексты-мтексты тоже бы?
Думал над этим. Ну тогда в этот подраздел и добавить опцию "тексты-мтексты"...
В общем в данном случае без ещё одного подраздела похоже не обойтись.

57
Опциональность обводки блоков не обсуждается?
Ну почему же? Очень даже обсуждается.

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

58
Имел в виду: один контур + все островки в нем = одна группа.
Ясно. Ну, в общем, идея с группированием мне нравится. Пожалуй добавлю эту опцию в следующий релиз.

Включение-отключение отображения групп - Alt H.
Видимо у меня есть пробелы в знании AutoCAD - мало работал в своё время с группами  :)

59
Разместил новое видео, которое демонстрирует возможности создания внешнего контура чертежа средствами SuperBoundary:



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

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

Резюмируя вышесказанное хочется процитировать одного моего западноевропейского приятеля, который вволю "накувыркавшись" с BPOLY заявил: BLOODY COMMAND! Как говориться добавить нечего... :)

60
Насчет островков - хорошо бы обнаруженные островки сразу со своим общим внешним контуром объединять в группу. Чтобы появилась и была и зрительно видна их логическая связь.
Имеется ввиду объединение в группу всех островков принадлежащих одному владельцу? Не приведёт ли это к некоторому неудобству при дальнейшем редактировании островков? Ведь потребуется "разгруппирование"...

Pages: 1 2 3 [4] 5