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

Обращение к примитиву обычно осуществляется через его идентификатор. В дальнейшем изложении обозначение имя_пр имеет тот смысл, что соответствует конкретному примитиву, однозначно определенному любым доступным способом. Поддержку обработки примитивов обеспечивают описываемые ниже функции.

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

(entnext [имя_пр]). Если функция используется без аргумента имя_пр, она возвращает имя первого неудаленного примитива в базе данных. Если имя_пр указано, возвращается имя следующего за ним примитива. Например:

(setq e1 entnext) присваивает идентификатор e1 первому примитиву графической базы данных,

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

(entdel имя_пр). Если примитив имя_пр присутствует в чертеже, он удаляется. Если этот примитив был ранее удален в текущем сеансе, он восстанавливается. Например, если с помощью функции entnext были выполнены операции, указанные в предыдущем примере, использование функции entdel приводит к следующим результатам:

(entdel e1) удаляет из чертежа примитив e1,

(entdel e1) восстанавливает удаленный примитив e1.

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

(entget имя_пр). Функция возвращает ассоциированный список, содержащий характеристики примитива. Пусть последним созданным примитивом был отрезок прямой в слое CONTUR, цвет примитива - красный, начальная точка примитива - (3.1 4.8), конечная - (5.6 8.7). Тогда функция

(entget (entlast))

возвратит список, подобный приведенному в разделе 6.1.

(entmake список). Функция создает в чертеже новый примитив. Аргумент список должен содержать перечень всех необходимых характеристик примитива в формате, создаваемом функцией entget. Если введенных характеристик достаточно для однозначного описания примитива, он создается в чертеже, а функция возвращает список характеристик. В противном случае функция возвращает nil.

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

Дополнительные сведения об этих и других функциях обработки примитивов можно почерпнуть в [5, 6].

6.4. Наборы примитивов

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

(ssget [режим] [точка1 [точка2]] [список] [фильтры]),

которая формирует набор примитивов, определяемый аргументами. Будучи введенной без аргументов, функция предлагает оператору осуществить выбор примитивов вручную. Аргумент режим - это строка, определяющая метод выбора объектов. Допустимыми являются “W”, “WP”, “С”, “CP”, “L”, “P”, “I” и “F”. Возможен еще режим “Х”, осуществляющий выбор всех примитивов, созданных в чертеже. Аргументы точка1 и точка2 - отдельные точки или их список, присущие данному выбору. Аргумент фильтры - это ассоциированный список, определяющий свойства примитивов. Приводимые далее примеры заимствованы из [5].

(ssget) предлагает пользователю свободный выбор объектов и включает их в набор.

(ssget "P") организует набор из всех примитивов, принадлежащих предыдущему выбору.

(ssget “L”) создает набор, включающий в себя последний созданный объект, видимый на чертеже.