Удаление, восстановление и обновление примитивов



С помощью функции (ENTDEL < примитив >) примитив может быть удален из чертежа. Субпримитивы таким способом не удаляются. Функция ENTDEL позволяет удалять неудаленные основные примитивы и восстанавливать примитивы, ранее удаленные в данном сеансе редактирования. Функция возвращает имя удаляемого (восстанавливаемого) примитива. При операции сохранения рисунка все примитивы, помеченные как удаленные , из рисунка стираются и не могут быть восстановлены. Прведем пример удаления и восстановления примитива с помощью функции ENTDEL. [5]

Пример:

; Строим отрезок для манипуляций

( COMMAND “ LINE ” ‘(16.0 66.1) ‘(250.3 145.9) “”)

( SETQ K 1 ( ENTDEL ( ENTLAST )))

; Только что нарисованный отрезок удален

(ENTDEL K 1)

; Удаленный примитив восстановлен

Пока не кончился сеанс работы с данным чертежом, удаленный примитив может быть восстановлен с помощью той же функции (ENTDEL < примитив >).

Функция (REDRAW < примитив >) возобновляет изображение примитива после очистки экрана функцией GRCLEAR. Таким образом, функция REDRAW может также управлять изображением примитива:

(REDRAW <примитив> <режим>).

Действие REDRAW зависит от значения аргумента < режим >: 1 ‒ примитив перерисовывается; 2 ‒ примитив стирается; 3 ‒ примитив подсвечивается; 4 ‒ подсветка примитива отменяется. [1, 2, 5, 6]

Работа с данными для примитивов и модификация примитивов

Каждый примитив с точки зрения системы AutoCAD представляет собой достаточно сложную совокупность данных. Представление об этих данных дают правила расположения данных в DXF-файле, который является текстовым описанием чертежа.

Программа на AutoLISP может сформировать сложный список, в котором будут содержаться все данные о примитиве. После этого средствами обработки списков можно выделять, анализировать и модифицировать отдельные данные. За модификацией данных примитива может следовать отображение модифицированного примитива на чертеже.

Таким образом, программа на AutoLISP может анализировать и видоизменять чертеж, построенный, например, в режиме диалога с редактором ACAD.

Рассмотрим процесс формирования списка данных для некоторого примитива.

Функция (ENTGET < примитив >) формирует и возвращает список, содержащий данные о примитиве.

Структура списка напоминает перечень данных о примитиве в DXF-файле и зависит от типа примитива и от того, насколько характеристики примитива соответствуют умолчанию.

Сформулируем правила построения списка:

каждый элемент списка является списком (будем называть его субсписком);

большинство субсписков имеют вид точечных пар (кроме субсписков, описывающих точки);

первый элемент каждого субсписка ‒ это код данных, второй элемент (и последующие) ‒ значение (значения), соответствующие коду;

первый субсписок имеет вид (-1. имя-примитива);

второй: (0. тип-примитива);

третий: (8. имя-слоя);

далее следуют некоторые атрибуты примитива в том случае, если их значения отличаются от значений по умолчанию, набор этих атрибутов зависит от версии ACAD, примером может служить (62. код-цвета);

далее следуют характеристики примитива, состав которых зависит от типа примитива.

Например, для отрезка прямой (тип = “LINE”):

(10 координаты-начальной-точки)

(11 координаты-конечной-точки).

Для окружности (тип = “CIRCLE”):

(10 координаты-центра)

(40. радиус)

Для дуги (тип = “ARC”):

(10 координаты-центра)

(40. радиус)

(50 . начальный-угол)

(51. конечный-угол)/

Приведем пример списка, возвращаемого функцией ENTGET для окружности, находящейся на слое "О", синего цвета (номер цвета ‒ 5) с центром в точке (2 2 0) и с радиусом 1.5, изображенной пунктирной линией ("DASHED"):

((-1. <внутрипрограммное-имя-примитива>)

(0 . “CIRCLE”)

(8. “0”)

(6 . “DASHED”)

(62.5)

(10 2.0 2.0 0.0) (40. 1.5)

).

Рассмотрим процесс модификации примитива.

С помощью функции (ENTMODE < примитив >) можно изменить изображение примитива на экране. Предполагается, что до обращения к ENTMOD E происходила модификация данных в списке, полученном с помощью ENTGET.

Пример:

(SETQ PR (ENTNEXT))

; Выделяется первый примитив в базе данных,

; имя которого возвращается в PR

(SETQ SPR (ENTGET PR))

;Формируется список из данных, описывающих примитив PR, этот список ;возвращается в SPR

; Здесь следуют операции над списком SPR

; по изменению каких-либо данных в этом списке

(ENTMODE SPR)

После выполнения последней функции на экране вместо примитива PR, ранее выбранного пользователем, появится «обновленный» примитив, отличающийся какими-либо характеристиками. Для программы это по-прежнему будет примитив PR, и с ним можно продолжать работу.

На применение функции ENTMODE накладываются некоторые ограничения:

не может быть изменен тип примитива;

такие атрибуты как «тип линии» (и некоторые другие), могут принимать только те значения, которые к данному моменту определены в сеансе работы с ACAD;

однако слой может быть задан и новый, отсутствовавший к данному моменту.

Функция ENTMODE может выполняться над примитивом или субпримитивом. Если ENTMODE выполняется над субпримитивом, то видимого изменения на экране не происходит.

С помощью функции (ENTUPD < примитив >) можно изменить изображение примитива после того, как изменены субприпримитивы этого примитива с помощью ENTMODE.

Однократное изменение сложного примитива происходит гораздо быстрее, чем его многократная перерисовка после изменения каждого субпримитива. [1, 2, 5, 6]


Дата добавления: 2019-09-13; просмотров: 224; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!