Системы автоматизированного конструирования. Толстоба Н.Д. - 32 стр.

UptoLike

Составители: 

31
Извлекает из сложногосписка элемент списка по ключу элементсписка. Если
элементсписка не найден, ASSOC возвращает nil. Например:
Исходный список: goods ((1 "car" "volvo")(2 "price" 80000))
Тогда (assoc 2 goods) возвращает список (2 "price" 80000).
(subst новыйэлемент старыйэлемент список) - замена элемента
Возвращает копию исходного списка с заменой всех найденных подсписков,
идентичных старомуэлементу, на новыйэлемент. Если вхождений не обнаружено, SUBST
возвращает копию старого списка (не nil!):
(subst '(2 "price" 100000) '(2 "price" 80000) goods)
возвращает: ((1 "car" "volvo")(2 "price" 100000))
Используя эту технику, попробуем извлечь из списка EDATA имя примитива:
Команда: (assoc 0 EDATA)
Автолисп возвращает: (0 . "LINE")
В приведенном выше примере мы фактически сказали Автолиспу: "Возврати мне
подсписок с DXF-кодом 0”. Автолисп просмотрел DXF-список примитива, нашел подсписок
с кодом 0 и возвратил его. Полученный по коду подсписок все еще содержит DXF-код,
который необходимо убрать: он больше не понадобится. Для этой цели лучше всего
использовать функцию CDR:
Команда: (cdr (assoc О EDATA))
Автолисп возвращает: "line"
Извлекая из DXF-списков нужную информацию, можно программно обрабатывать ее и
затем, внеся изменения в DXF-список примитива при помощи функции SUBST,
модифицировать ГБД при помощи функции ENTMOD:
(entmod список)
Эта функция преобразует список в формат, возвращаемый функцией ENTGET, и
обновляет информацию в ГБД. Следует иметь в виду, что функция ENTMOD не всесильна.
Во-первых, нельзя изменить тип примитива (если вы хотите сделать это, вам остаётся только
удалить его с помощью функции ENTDEL и создать новый примитив с помощью функции
COMMAND). Во-вторых, все объекты, на которые ссылается список данных, должны быть
известны Автокаду к тому моменту, когда вызывается функция ENTMOD (гарнитура
шрифта, типы линий, имена форм и блоков и пр.). Исключением из этого правила является
слой - если определённого в списке слоя нет, будет создан новый. Целые значения
автоматически преобразуются в значения с плавающей точкой
Когда обновляется не основной примитив, а "подпримитив" (вершина полилинии или
атрибут блока), изображение на экране не обновляется (это невыгодно) - для обновления
изображения следует использовать функцию ENTUPD:
(entupd список);; Обновляет изображение примитива на экране