Загрузка...

Формирование и анализ наборов графических примитивов


Набор примитивов – это совокупность графических примитивов, объединенных по логическому или физическому принципу.
Операции с наборами:
1) Создание набора примитивов
(SSGET [<режим>] [<точка1>] [<точка2>] [<список точек>]
[<фильтр-список>])
Функция возвращает определение (внутрипрограммное имя) выбранного примитива или набора примитивов.
<режим> – это параметр, определяющий способ формирования набора. Они бывают следующие:
– “W” – выбор примитивов рамкой (окном), которые определяются точкой 1 и 2.
– “C” – выбор примитивов, пересекаемых окном
– “L” – выбор последнего созданного на чертеже примитива
– “P” – выбор текущего набора
– “F” – выбор примитивов разомкнутой ломанной линией
– “CP” – выбор примитивов секущим многоугольником
– “WP” – выбор примитивов, заданных текущим фильтром-списком
<точка1>и <точка2> – задают диагональ рамки.
При их отсутствии точки указываются курсором.
Пример:
(SSGET) ; обычный способ формирования наборов
(SSGET “P”) ; выбор текущего набора
(SSGET “L”) ; выбор последнего набора
(SSGET ‘(10 20)) ; выбор примитивов, проходящих через точку (10 20)
(SSGET “W” ‘(5 10), ‘(20 30)) ; выбор примитивов, попавших в пределы рамки, но не пересекаемых ею
<список точек> – список точек, определяющий вершины ломаной.
<фильтр-список> – средство точного управления выбором по заданному условию. Условие – это список, элементами которого являются подсписки в виде точечных пар
Точечная пара содержит код, значение.
В качестве кодов могут быть:
0 – примитивы одного типа;
2 – примитивы, входящие во вставки блоков;
6 – примитивы, имеющие меньше одного типа;
7 – примитивы, характеризующиеся единой гарнитурой шрифта;
8 – примитивы одного слоя;
62 – примитивы, имеющие одинаковый номер цвета.
Если в качестве значения указывается 0, то выбираются все примитивы, принадлежащие одному блоку. Если 256 – все примитивы, принадлежащие одному слою.
(SSGET “X” (LIST (CONS 0 “CIRCLE”))) – создание набора из всех окружностей данного чертежа
(SSGET “X” ‘((8.”LEVEL2”) (0.”LINE”))) – создание набора из всех линий, принадлежащих слою LEVEL2
(SETQ SDEL (SSGET “X” ‘(6. “CENTER”)))
(COMMAND “ERASE” SDEL)

По умолчанию принимается равенство для кодов и их значений, но если имеется числовое значение (целое, действительное), то можно указывать и другие условия, включив в фильтр-список специальные списки с кодом –4 и значением, представляющим строковую константу (содержащую оператор сравнения), которая будет применяться к следующему подсписку фильтра списка
Константы:
“*”, “=”, “!=”или “|=” или “<>”, “<”, “>”, “>=”, “<=”, “&”, “&=”
(SSGET “x”((0 “CIRCLE”)(-4 “>=”)(40_5.0))) созд. Набора из окружностей, у которых радиус ?5.
Для точек сравнения координаты X,Y могут быть сцеплены в одну строку символов, где операторы перечисляются через запятую.
Если оператор в строке пропущен и нет сравнения для координаты Z, то по умолчанию принимают * (т.е. все значения).
Векторы направления (имеющие координату 210)могут сравниваться только с помощью операторов: * , =, !=.
Использовать операторы сравнения со строковыми значениями нельзя, т.к. необходимо пользоваться символами глобальной замены.
Вышеописанные операторы сравнения являются двоичными операторами, однако можно создавать логические выражения для тестирования нескольких списков (подсписков) для создания групповых операторов.
(-4.”<AND”) <один или несколько операндов> (-4 “AND>”) объединение нескольких условий <и> заданного значения. (-4 “OR>”) <один или несколько операндов > (-4 “OR>”) Выбирают или тот участок или другой.
(-4 “XOR>”) <два операнда>(-4 “XOR>”)
(-4 “NOT>”)<один операнд>(-4 “NOT>”) – кроме указанной точки (операнд) выбир. Все есте-е значения.
??-?:
(SSGET “X”((-4. “<OR”)
(-4. “<AND”)
(0. “CIRCLE”)
(40. 5.0)
(-4. “AND>”)
(-4. “<AND”)
(0. “LINE”)
(8. “FASAD”)
(-4. “AND>”)
(-4. “OR>”))
), end ssget.

Поместить в набор все окружности радиусом 5 и все отрезки, принадлежащие слою FASAD.
Для фильтрации по расширенным данным примитивов подсписки должны иметь код – 3.
(SSGET “X”(0. “CIRCLE”)
(-3. “APPNAME>”))
), end ssget.
Формирование набора из окружностей, содержащихся в приложении APPNAME.
В пользовательских программных приложениях используются расширенные данные примитива, которое записывается после обычных данных описания примитива. Об их начале сообщает код – 3, который находится непосредственно перед первой группой расширенных данных. Расширенные данные состоят из 1-ой или более групп, описываются кодом 1001, каждый из которых начинается с имени уникального приложения.
Код Описание
(-1, -2 имя примитива
0 –239 поле обычных данных описания примитива
(-3 сигнал расширения данных
(1001 имя зарегистрированного приложения
(1000, 1002-1071 поля расширенных данных
. . . . . . . . . . . .
)
Если значение подсписка с кодом – 3 содержит более одного приложения, то подразумевается логическое “и” (т.е. расширенные данные должны присутствовать для всех примитивов выбора во всех приложениях).
??-?:
(SSGET “X”(0.“CIRCLE”)(-3 (“APP1)(“APP2”)))
; формировать набор из всех окружностей путем их выбора из приложений APP1, и APP2 с одинаковыми расш-ми данными.

Символы и имена задаваемые фильтром списков:
Тип примитива 0
Имя блока 2
Размерн. Стиль 3
Тип линий 6
Гарнитура шрифта 7
Имя слоя 8
(SSGET “X”((6. “*DOT”)))
;формирование набора из всех линий точечного типа.

Загрузка...