 |
Следующие функции позволяют вам восстановить и модифицировать
данные определенных примитивов. Имена примитивов применяются для того,
чтобы определить примитивы, с которыми надо работать.
5. 4. 1. (entdel )
Удаляет примитив , обозначенный , в текущем чертеже,
или восстанавливает примитив,если он был предварительно удален в этом
сеансе редактирования. Удаляемые примитивы вычищаются из чертежа, покидая
редактор чертежей , итак, функция ENTDEL может восстанавливать их только
в течение сеанса редактирования , когда они были удалены. Функция ENTDEL
работает только в главных примитивах,аттрибуты и вершины полилиний не
могут быть удалены , независимо от их родительских примитивов (вы можете
использовать функцию COMMAND , чтобы работать функцией ATTEDIT, или ко-
манду PEDIT, чтобы выполнить это).
5. 4. 2. (entget )
Примитив , который называется восстанавливается из базы
данных и возвращается как список, содержащий эти определяемые данные. Ре-
зультирующий список кодируется , как структурированный список LISP,
элементы которого могут быть легко восстановлены функцией ASSOC. Объекты
в результирующем списке кодируются в кодах DXF системы AutoCAD для каж-
дой части входных данных. Для примера рассмотрим вычерчивание и затем
восстановление LINE следующей последовательностью команд:
- 70 -
Руководство пользователя по АВТОЛИСПу
Command: LINE
-----
From point: 1 , 2
------
To point: 6 , 6
------
To point: RETURN
--------
Command: (setq a (entget (entlast)))
---------------------------
установит А, равное списку ( делает останов для прочтения ):
( ( -1 . )
(0 . "LINE")
(8 . "0")
(10 1.000000 2.000000)
(11 6.000000 6.000000)
)
Пункт -1 в начале списка содержит имя примитива , которым этот
список представлен. Функция ENTMOD, описанная ниже , использует это ,
чтобы идентифицировать примитив , который модифицирован.
Отдельные точечные пары , представляют переменные , которые могут
быть легко восстановлены с помощью функции ASSOC, функция CDR обычно вы-
водит их значения. Коды для компонентов примитива те же самые, что испо-
льзует DXF , и приводятся в приложении С Руководства AutoCAD. Так же ,
как в DXF , заголовок элемента примитива ( цвет и тип линии, сложный
примитив флага (функция ATFLAG), экструзия толщины и выключение на-
бора Z) выводится , если переменная не по умолчанию. В функциях, не
таких как DXF, не обязательно выводить точность поля примитива, равную
ли их значениям по умолчанию или нет. Намерение сделать это является
упрощенным вариантом программ, которые всегда могут принимать эти поля
присутствующими для основных алгоритмов , по котором они работают.
Запомните, что подсписки для точек- это не точечные пары, подобные
остальным. Соглашением является то, что функция CDR подсписка -это
групповая переменная. Так как точка- это список двух действительных чисел,
это составляет всю совокупность трех элементов списка. Функция CDR группы
является списком , изображающим точку, соглашением является также,то
что функция CDR всегда возвращает переменную сохраненной.
Когда описываемые функции обрабатывают эти списки, обязательно
сделайте им аккуратные подсписки. Польза для функции ASSOC от этого га-
рантирована. Группа -1 ,содержащая имя примитивов, позволяет произвести
некоторые действия, чтобы просто принять список примитива , и избежать
необходимости сохранять имя примитива в параллельной структуре. Примитив
SEQEND в конце Poliline или набор аттрибутов содержит -2группу , чьи CDR
являются заголовком в этом примитиве. Это позволит найти заголовок
в подпримитивах,двигаясь вперед к SEQEND , затем используя функцию CDR
-2 группы , как имя примитива, восстановить структурированный главный
примитив. Следующий пример хорошо иллюстрирует комплексные примитивы,
представленные как список.
Command: ELEV
-----
New current elevation <0.0000>: 3.5
----
New current thickness <0.0000>: 0
- 71 -
Руководство пользователя по АВТОЛИСПу
---
Command: LINETYPE
----------
?/Create /Load/Set: SET
----
New entity linetype : DASHED
-------
Command:COLOR
------
New entity color : BLUE
-----
Command: LAYER
-------
?/Make/Set/New/On/Off/Color/Ltype/Freeze/Thaw: MAKE
-----
New current layer <0>: ANNOTATION
-------------
?/Make/Set/New/On/Off/Color/Ltype/Freeze/Thaw: RETURN
--------
Command: TEXT
------
Start point or Align/Center/Fit/Middle/Right/Style: 2 ,2
-------
Height <0.2000>: .3
----
Rotation angle <0>: 30
-----
Text: So long , and thanks for all the fish!
---------------------------------------
Command: (setq e (entget (entlast)))
-----------------------------
В этом случае Е будет устанавливать в списке то, следует ниже.
Рассмотрение приложения С Руководства к AutoCADу придаст смысл этому
ясному списку.
( (-1 . )
(0 . "TEXT")
(8 . "ANNOTATION")
(6 . "DASHED"
(62. 5)
(38 . 3.500000)
(10 2.000000 2.000000)
(40 . 0.300000)
(1 . "So long , and thanks for all the fish!")
(50 . 0.523598)
(41 . 1.000000)
(51 . 0.000000)
(7 . "STANDARD")
(71 . 0)
(72 . 0)
(11 0.000000 0.000000)
)
- 72 -
Руководство пользователя по АВТОЛИСПу
5. 4. 3. (entmod )
Список проходит функцию ENTMOD, в формате возвращающей
его функции ENTGET, и обновляет информационную базу данных примитива,
имя которого определено совокупностью -1 в . Однако, главный меха-
низм , с помощью которого LISP обновляет базу данных , это восстановление
примитивов функцией ENTGET, модификация списка , определяющего примитив
( запомните , что для этого очень полезна функция SUBST AutoLISPа) и об-
новляющего примитив в базе данных с помощью функции ENTMOD.
Функция ENTMOD имеет некоторые ограничения по изменениям , которые
она делает. Во - первых , нельзя изменять типы примитивов . (Если вы хо-
тите сделать это , примените только функцию ENTDEL и сделайте новый при-
митив командой COMMAND ). AutoCAD должен знать все объекты, которые упо-
минаются в списке примитивов, до того как выполнена функция ENTMOD. Так,
стиль текста , тип линии , форма и имена блоков должны быть предвари-
тельно определены в чертеже, до того, как функция ENTMOD может их испо-
льзовать в списке примитивов. Исключением в этом случае является имя
уровня , __ENTMOD освободит новый уровень по умолчанию, используя
команду "LAYER NEW" , если в этом списке указывается предварительно
не определенный уровень.
Функция ENTMOD выполняет некоторую последовательность действий,
как команда DXFIN, проверяя список,содержит ли он , даннные из файла
DXF. Если обнаружена серьезная ошибка , такая серьезная ,что база дан-
ных не обновляется, возвращается "nil". В противном случае, функция
ENTMOD возвращает список в качестве аргумента. Функция ENTMOD не изме-
нит внутренние поля , такие как имя примитива в совокупности -2 функ-
ции SEQEND, попытки изменить такие поля просто игнорируются.
Когда обновляется главный примитив , функция ENTMOD будет моди-
фицировать примитив и обновит изображение на экране ( включая под-
примитивы ) . Когда функция ENTMOD обычно обновляет подпримитив ( вершины
полилиний , аттрибуты блоков ), подпримитив будет обновлен в базе данных ,
но изображение на экране не обновляется. После всех модификаций, которые
 |
|