Выбрать главу

(ssget pt1) создает набор из всех примитивов, проходящих через точку pt1.

(ssget “W” pt1 pt2) создает набор из примитивов, находящихся внутри окна с диагональными углами в точках pt1 и pt2.

(ssget “С” pt1 pt2) - то же, но определяющей является секущая рамка.

(ssget “X”) создает набор из всех примитивов, сохраненных в графической базе чертежа.

(ssget “X” список__фильтров) создает набор из всех объектов чертежа, удовлетворяющих списку фильтров.

(ssget список_фильтров) предлагает пользователю свободный выбор, но в набор включает лишь те объекты, которые удовлетворяют списку фильтров.

Организацию списка фильтров можно проследить на следующем примере:

(ssget “X” ‘((0 . “CIRCLE”) (-4 . “>=”) (40 . 2.0)))

Функция создает набор из всех окружностей, имеющихся в чертеже, радиус которых равен или превышает 2.0.

В последнем примере использован оператор соответствия (relational operator), обладающий кодом DXF, равным -4, и выделяющий из общей массы объектов лишь те, которые удовлетворяют заданному условию. Он может иметь силу, если параметр выбора является численной величиной (целым или вещественным числом, точкой или вектором). В таблице 5 приведен список некоторых операторов соответствия.

Таблица 5. Операторы соответствия для фильтров наборов

Оператор Значение
“*” Нет ограничений
“=” Равно
“<>”, “!=” или “/=” Не равно
“<” Меньше чем
“>” Больше чем
“<=” Меньше или равно
“>=” Больше или равно

Список фильтров может быть создан и с использованием логических операторов: “<AND ... AND>”, “<OR ... OR>”, “<XOR ... XOR>”, “<NOT ... NOT>”. Каждому логическому оператору присущи открывающий и закрывающий элементы. Поэтому они всегда употребляются в паре. Первые два оператора могут содержать любое количество операндов, третий - обязательно два, четвертый - только один операнд. Возможность использования логических операторов рассмотрим на следующем примере.

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

(command “layer” “new” “b1”

    “new” “b2”

    “I” “continuous” “b1”

    “|” “Acad_ISO04w100” “b2”

    “с” “white” “b1”

    “c” “red” “b2”

    “s” “b1” “”)

(command “pline” p1 “w” “0.8” “” p2 p3 p4

    “pline” p6 p7 p8 p9 “c”

    “line” p10 p11

    “line” p12 p14

    “line” p13 p15)

(command “layer” “s” “b2” “”)

(command “line” p16 p17)

(setq ss (ssget “x” ‘((-4 . “<OR”)

        (8 . “b1”)

        (8 . “b2”)

        (-4 . “OR>”))

    )

)

Теперь в операциях поворота и перемещения болта можно использовать один набор ss, включающий в себя все примитивы, принадлежащие изображению болта.

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

6.5. Функции обработки наборов

(ssadd [имя_пр [набор]]). Функция добавляет примитив, определенный его именем, в существующий набор. Вызванная без аргументов, она создает пустой набор. Если указано только имя примитива, создается новый набор из одного примитива. Если примитив уже существует в наборе, функция игнорирует операцию и не воспринимает такой ввод за ошибку.

(setq e1 (entnext)) присваивает имя e1 первому примитиву в чертеже,

(setq ss (ssadd)) создает пустой набор ss,

(ssadde1 ss) включает в набор ss примитив e1,

(setq e2 (entnext е1)) присваивает имя e2 примитиву, следующему за e1,

(ssadd e2 ss) добавляет примитив e2 в набор ss.

(ssdel имя_пр набор). Функция удаляет примитив из набора и возвращает имя набора. Если названный, примитив в наборе отсутствует, возвращается nil. Например, если примитив e1 существует в наборе ss1, a примитив e2 нет, то