Программы на AutoLISPе могут работать с графическими объектами. К таким объектам относятся:
- примитивы ACAD, имеющиеся на экране в процессе работы программы;
- совокупности примитивов, называемые в AutoLISPе наборами.
Возможно обозначение графических объектов с помощью имен переменных. Это дает возможность оперировать с этими объектами, обращаясь к ним по именам. В том числе можно анализировать и изменять характеристики объектов, что приводит к изменению изображения на экране. При выделении каким-либо способом примитива или набора из базы данных AutoLISP формирует ссылку на объект. Необходимо записать это имя в переменную для дальнейшего использования.
В языке AutoLISP существуют следующие функции для формирования и анализа наборов примитивов.
(SSGET [<режим>] [<точка1> [<точка2>]]) – функция возвращает внутрипрограммное имя выбранного примитива или совокупности примитивов, которое может быть записано в переменную AutoLISPа с помощью SETQ. Если аргумент <режим> отсутствует, то создается набор, выбранный средствами графического редактора (указание на объекты, захват в рамку и т.п.). Возможны следующие значения режима: «Р» – выбирается текущий набор; «L» – выбирается последний сформированный на чертеже примитив; «W» < точка1 > <точка2> – выбираются примитивы, попавшие в рамку с углами в < точке1 > и <точке2>; «С» <точка1> <точка2> – выбираются примитивы, пересекаемые рамкой.
(SSGET <точка>) – выбираются примитивы, проходящие через <точку>.
(SSGET "х" <фильтр>). Здесь<фильтр> – это список, элементами которого являются одна или несколько точечных пар. Каждая точечная пара строится по следующей форме: (< код >.< значение >). Здесь <код> – одно из принятых в AutoLISPе чисел, показывающих, по какому признаку выбираются примитивы:
- 0 – примитивы одного типа;
- 2 – примитивы, входящие в один блок (INSERT);
- 6 – по типу линии;
- 7 – по гарнитуре шрифта;
- 8 – по имени слоя;
- 62 – по цвету и др.
Например, (SSGET "X" '((8. "SL1")))вернет набор, включающий все примитивы, находящиеся на слое, именованном как "SL1";
Выполнение последовательности функций:
(SETQ sdel (SSGET "X" '((6. "CENTER"))))
(COMMAND "ERASE" sdel)
приведет к стиранию всех примитивов, изображенных осевыми линиями.
(SSLENGTH <набор>) – функция возвращает целую величину, представляющую число примитивов в наборе.
(SSNAME <набор> <номер>) – функция возвращает внутрипрог-раммное имя примитива, идущего под соответствующим номером в <наборе>. Первый по порядку примитив имеет номер 0.
(SSMEMB <примитив> <набор>) – функция проверяет, входит ли <примитив> в <набор>. Если <примитив> входит в <набор>, то возвращается имя примитива, если не входит, то результат равен NIL.
(SSADD [<примитив> [<набор>]]) – функция без аргументов создает новый пустой набор. SSADD с аргументом <примитив> создает новый набор, содержащий только указанный примитив. Если указаны оба аргумента, то функция добавляет указанный примитив в набор. Если этот примитив в наборе уже имеется, то ничего не изменится. Функция возвращает имя набора.
(SSDEL <примитив> <набор>) – функция удаляет <примитив> из <набора>, если он там присутствовал. В противном случае ничего не меняется. Возвращается имя набора.
(ENTNEXT [<примитив>]) – функция возвращает внутрипрограммное имя примитива или субпримитива. Если <примитив> не указан, то возвращается первый из примитивов чертежа. Если указан простой примитив, то ENTNEXT возвращает примитив, следующий за указанным. Если указан составной примитив, то ENTNEXT возвращает первый субпримитив указанного примитива.
(ENTLAST) – функция возвращает внутрипрограммное имя последнего примитива на чертеже. Субпримитив с помощью ENLAST не выделяется.
(ENTSEL [<подсказка>]) – функция создает паузу и может вывести текст <подсказки>. Пользователь в ответ должен указать примитив на экране. Функция возвращает результат в виде списка из двух элементов: внутрипрограммное имя примитива и точку, в которой было проведено указание. Точка возвращается в виде списка координат.
(ENTDEL <примитив>) – функции удаляет примитив из чертежа. Субпримитивы таким способом не удаляются.
(REDRAW <примитив>) – функция возобновляет изображение примитива после очистки экрана функцией GRCLEAR.
(ENTGET <примитив>) – позволяет выбирать <примитив> из базы данных. Функция возвращает список, который состоит из параметров, определяющих этот примитив. Такой список состоит из двух частей. Первая часть включает в себя код DXF (флаг), а вторая − данные. Конкретные данные о примитиве могут быть извлечены из этого списка с помощью функции ASSOC. При необходимости эти данные могут быть изменены.