TotalPurge - это приложение для комплексной оптимизации чертежей в AutoCAD

  Описание:

  Оптимизация:

Понятие оптимизации.

Обзор базовых примитивов AutoCAD
Любой примитив в среде AutoCAD, как известно, является элементарной параметрической моделью. Т.е. геометрия такого объекта задается при помощи параметров, изменение значений которых влияет на внешний вид самого объекта, визуально наблюдаемого на экране монитора. Рассмотрим параметры некоторых базовых объектов (примитивов):

Линия.
Тип LINE (class name AcDbLine) Рис. 1.
Рис. 1
Объект обладает двумя параметрами: начальной точкой (start point) и конечной точкой (end point). Положение точек на чертеже задается тремя координатами X,Y,Z. Для двухмерных чертежей координатой Z обычно принебрегают. Изменение расположения точек на плоскости относительно друг друга приведет к изменению протяженности линии.

Окружность.
Тип CIRCLE. (class name AcDbCircle) Рис. 2.
Рис. 2
Геометрия объекта задается двумя параметрами: центральной точкой (center point) и диаметром окружности (diameter D). Положение центральной точки на чертеже задается тремя координатами X,Y,Z.

Дуга.
Тип ARC (class name AcDbArc) Рис. 3.
Рис. 3
Геометрия объекта задается четырьмя параметрами: центральной точкой (center point), радиусом дуги (radius R), начальным (start angle) и конечным (end angle) углами. Положение центральной точки на чертеже задается тремя координатами X,Y,Z. Значение углов указывается в радианах.

Полилиния.
Тип LWPOLYLINE (class name AcDbPolyline) Рис. 4.
Рис. 4
Полилиния является комплексным объектом и состоит из вершин (vertex) объединенных сегментами. Положение вершин полилиний на чертеже задается двумя координатами X,Y.
Особым свойством полилинии (в отличии от рассмотренных выше объектов) является возможность назначения толщины ее сегментам (plyline width). Толщина может иметь как переменные значения (изменяющиеся от вершины к вершины), так и постоянные. В подавляющем большинстве случаев обычно используют постоянное значение толщины на всем протяжении полилинии.
Сегменты полилиний могут быть линейными и дугообразными, в зависимости от коэффициента bulge характеризующего степень выпуклости сегмента. При значении bulge = 0 сегмент имеет прямолинейный вид.
Как видно из рисунка, между вершина №3 и №4 расположен дугообразный сегмент со значением bulge не равным 0. Во всех остальных сегментах значение коэффициента bulge = 0.
Еще одним свойством характерным для полилинии является ее возможность создавть замкнутый контур. В этом случае визуально добавляется еще один сегмент объединяющий первую и последнюю вершины.

Понятие оптимизированного чертежа
Любой 2-D чертеж созданный в среде AutoCAD в основе своей состоит из элементарных объектов, описанных выше, а именно линий, окружностей и дуг. От того, на сколько эффективно пользователь располагает объекты на чертеже зависит его профессиональное мастерство. Опытный пользователь всегда стремится свести к минимуму число объектов задействованных для построения чертежа. Таким образом мы приходим к понятию оптимизированного чертежа:

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


Оптимизация в действии
Из сопряжения различных примитивов между собой соткана картина чертежа. Объекты на чертеже могут сопрягаться друг с другом по разному: линия с линией, линия с дугой, дуга с дугой и т.д. Рассмотрим некоторые простейшие типы сопряжения двух и более объектов, а также возможность их оптимизации.

Сопряжение линии с линией.
На рис. 4а показано сопряжение двух линий (line1 и line2), расположенных под углом друг к другу.
Рис. 4а Рис. 4б
Соединяясь в некоторой точке между собой объекты образуют узел сопряжения (node).
На рис. 4б показаны две линии также сопрягающиеся друг с другом и образующие узел сопряжения, но линии (в отличие от предыдущего примера) располагаются колинеарно на одной прямой.
Если проанализировать оба примера на предмет возможной оптимизации данных объектов, то совершенно очевидно, что две линии изображенные на рис. 4а невозможно заменить одним объектом (возможность замены на полилинию LWPOLYLINE здесь не рассматривается).
Этого нельзя сказать о линиях изображенных на рис. 4б. Данную совокупность объектов, в результате оптимизации, можно заменить одним объектом (линией). Т.е. имеем следующее (см. Рис 5 ):
Рис. 5
После оптимизации вместо двух линий line1 и line2 мы получили один новый объект "new line".
Рассмотрим сопряжение большего числа линий между собой.
На рис. 6 изображена фигура образованная из восьми объектов типа “линия” (line).
Рис. 6
Все эти объекты сопрягаются в одной точке, образуя узел сопряжения (node) в центральной части фигуры. Линии относительно узла сопряжения расположены равномерно по кругу с угловым шагом 45 градусов.
Проанализируем эти объекты на предмет возможной оптимизации.
Учитывая количество объектов, равномерность их расположения по окружности и как следствие их попарную сонаправленность, становится очевидно, что данную совокупность объектов можно представить иначе, потратив на ее отображение существенно меньшее количество однотипных примитивов. Т.е. имеем следующее (см рис. 7):
Рис. 7
Таким образом, для отображения исходного чертежа, изображенного на рис. 6, вовсе необязательно применять 8 объектов типа “линия”, достаточно ограничится четырьмя.

Теперь рассмотрим случаи, когда линии сопрягаясь между собой не образуют узла сопряжения (node). С точки зрения оптимизации интерес представляют два случая изображенных на рис. 8а и 8б:
Рис. 8а Рис. 8б
На рисунке 8а показаны две колинеарные линии, расположенные на одной прямой, причем линия №2 (line2) меньше линии №1 (line1) и полностью находится внутри неё (как частный случай данного примера: обе линии могут в точности совпадать друг с другом). Понятно, что линия №2 (line2) с точки зрения оптимизации является лишним объектом, не несущем в себе какой-либо информативности. Следовательно в процессе оптимизации данный объект должен быть удален, т.е. получим следующее:
Рис. 9
На рисунке 8б показан случай, когда две колинеарные линии, не образуя узла сопряжения, расположены с некоторым нахлестом друг на друге. Понятно, что данную совокупность объектов можно также оптимизировать, заменив ее одним примитивом (см. Рис 10):
Рис. 10

Сопряжение дуги с дугой.
Подобно линиям дуги также могут образовывать связанные цепочки. На рис. 11 показан такой пример комплексной дуги состоящей из двух дуг arc1 и arc2.
Рис. 11
Для оптимизации сопряженных дуг необходимо выполнение двух условий - совпадение центральных точек и равенство радиусов дуг. При выполнении указанных условий наш комплексный объект легко преобразуется в один примитив (new arc), см. рис 12.
Рис. 12
Рассмотрим случай когда дуги образуют замкнутый объект, см. рис.13:
Рис. 13
На рисунке видно, что замкнутый объект состоит из трех дуг. Все они сопрягаются между собой, образуя три узла сопряжения: node1, node2, node3 и имеют общую центральную точку, а также одинаковые радиусы скруглений.
Когда замкнутый объект состоящий из нескольких дуг представляет собой окружность, то оптимизация такого комплексного объекта сводится к удалению всех его составных элементов и построению на его месте нового примитива типа CIRCLE. Результат преобразований показан на рис. 14:
Рис. 14
Также как и в случае с линиями (см. Рис. 8 а,б) две или более дуг с одинаковым радиусом и общей центральной точкой могут сопрягаться друг с другом не образуя узла сопряжения. Таким образом возможны следующие 2 случая (см рис. 15а,б), для которых применима оптимизация:
Рис. 15а Рис. 15б
Оба этих случая как и в примере показанном на рис. 12 могут быть преобразованы в один объект типа ARC.

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

Сопряжение окружности с дугой.
Сопряжение окружности и дуги, при которых оптимизация имеет смысл показано на рис. 16:
Рис. 16
Такое сопряжение является частным случаем совпадения двух окружностей рассмотренным выше и, соответственно, условия, при которых возможно выполнение оптимизации, аналогичны условиям описанным в этом разделе. Т.е. дуга arc1 имеет центральную точку, совпадающую с центральной точкой окружности circle1, а радиус скругления дуги равен радиусу окружности. Таким образом, оптимизация в данном случае сводится к выявлению и удалению всех дуг расположенных на окружности.

Оптимизация полилиний.
Оптимизация полилиний в конечном счете сводится к поиску и удалению лишних вершин. В связи с этим интерес представляют два возможных случая. В первом случае полилиния имеет 3 или более вершин, образующих несколько сонаправленных сегментов (Рис. 17) и оптимизация в этом случае осуществляется в рамках одного объекта.
Рис. 17
Как видно из рисунка вершины 1,2,3,4 располагаются на одной прямой и образуют таким образом 3 коллинеарных сегмента. Совершенно очевидно, что две из четырех вершин содержат избыточную информацию, поэтому с точки зрения оптимизации 3 сегмента легко преобразуются в один, путем удаления двух средних вершин (см. рис 18).
Рис. 18
Во втором случае в процессе оптимизации осуществляется поиск частичного либо полного наложения сегментов принадлежащих двум и более полилиниям. На рис. 19 показан фрагмент чертежа, на котором изображены две замкнутые полилинии. Полилиния 1 состоит из вершин 1,2,3,4,5. Полилиния 2 состоит из вершин 6,7,8,9,10.
Рис. 19
Обе полилинии соприкасаются друг с другом посредством двух ломаных сегментов, причем, как видно из рисунка, на лицо совпадение двух вершин 2 и 10. Соприкасающиеся сегменты 1-2 и 6-10, также как 2-3 и 9-10 перекравают друг друга. Оптимизация полилиний в этом случае сводится к выявлению подобных перекрытий и удалению сегментов и соответствующих вершин расположенных в области таких перекрытий. Поэтому в нашем случае после оптимизации мы получим (см. рис. 20):
Рис. 20
Как видно из рисунка, после оптимизации полилиния 2 потеряла вершину 10 и два сегмента 6-10 и 9-10 и таким образом став разомкнутой. Полилиния 1 сохранила свой первоначальный вид.
Copyright © 2022 DEBALANCE