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.


Topics - Debalance

Pages: [1]
3
В данном посте рассматривается решение задачи обнаружения и построения контуров всех замкнутых областей сложного (насыщенного) чертежа с использованием плагина 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 МБ.

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

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

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


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


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


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

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



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

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



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

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

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

7
Разместил новую версию программы SuperBoundary v.1.0.1.31. Была добавлена опциональная возможность включения/выключения оптимизации (прополки) вершин результирующих контуров полилиний:



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

P.S.
Не тестировал на платформе x86, в связи с отсутствием таковой возможности. У кого таковая возможность есть просьба, опять же по-возможности, отписаться о результатах теста.

8
Добавил новое видео демонстрирующее производительность программы в плане обнаружения и построения замкнутых областей на достаточно "насыщенном чертеже":



В качестве чертежа использовал один из моих любимых паровозиков скачанного из свободного источника. Сам чертёж состоит из более чем 16000 примитивов, а в результате генерации программа строит более 9000 замкнутых областей за менее чем 5 секунд.
В качестве рабочей платформы использовал AutoCAD 2017, процессор Core i5.

9
General Discussion / New version of SuperBoundary v.1.0.1.30
« on: January 18, 2017, 09:38:20 PM »
I have released new version of SuperBoundary v.1.0.1.30. The following work has been done:

- A critical error has been fixed. This error occured when using the program with a large value of the tolerance factor.

- The program has been carefully tested in CIVIL 3D environment. The detected errors were fixed.

- The program settings have been extended. In particular, the ability of selecting layer has been added. The option of selecting current layer and current color was added too.


- The list of supported objects has been extended. The following objects were added:
   Multilines;
   Multipolygons;
   Regions;
   Tables;
   
- Added support for the following entities specific to CIVIL 3D:
   Parcel Segment;
   Featured Line;
   Alignment;
   Tin Surface;

10
Разместил новую версию программы SuperBoundary v.1.0.1.30. Было устранено и добавлено:
- Устранена критическая ошибка при работе с большим значением коэффициента допуска.

- Тщательно протестирована работа программы в CIVIL 3D, выявлено и устранено некоторое количество ошибок при работе в этой среде.

- Расширены настройки программы. В частности добавлена возможность выбора слоя, в котором будут создаваться полилинии. Добавлена опция выбора текущего слоя и текущего цвета.



- Расширен список поддерживаемых программой примитивов. Добавлены следующие примитивы:
   Мультилинии (MLINE);
   Мультиполигоны (MPOLYGON);
   Регионы (REGION);
   Таблицы (TABLE);

- Добавлена поддержка следующих примитивов, характерных для CIVIL 3D:
   Parcel Segment;
   Featured Line;
   Alignment;
   Tin Surface;

Pages: [1]