Удаление, восстановление и обновление примитивов
С помощью функции (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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!