> Ivspec
Тогда покажи, как ты их создаешь. Чтоб хоть понимать, про что базар. А то выяснится, что ты говоришь про x-records, а я про extended data. Сознавая всю спорность кода, рискну его показать:
;|=============================================================================
* Функция формирования списка для добавления в качестве расширенных данных
* примитива.
* Параметры вызова:
* extdata-list список элементов, которые надо присоединить. Может быть
* любым из возможных для расширенных данных. Список вида
* '(("str" . "Строка для записи")
* ("scale" . <Масштаб элемента. Требуется, если вставка выполнена
* в модели>)
* ("layer" . <Имя слоя>) ; пока не использую
* )
* Примеры вызова:
(_kpblc-ent-xdata-create '(("str" . "Строка") ("layer" . "0")))
=============================================================================|;
(defun _kpblc-ent-xdata-create (extdata-list / item res)
(if (assoc "str" extdata-list)
(setq res (append res (list (cons 1000 (cdr (assoc "str" extdata-list))))))
) ;_ end of if
(if (assoc "layer" extdata-list)
(setq
res (append res (list (cons 1003 (cdr (assoc "layer" extdata-list)))))
) ;_ end of setq
) ;_ end of if
(if (assoc "scale" extdata-list)
(setq
res (append res (list (cons 1042 (cdr (assoc "scale" extdata-list)))))
) ;_ end of setq
) ;_ end of if
(setq res (list (cons -3 (list (cons *kpblc-appname* res)))))
res
) ;_ end of defun
;|=============================================================================
* Функция чтения расширенных данных из указанного примитива. Возвращается
* список точечных пар по DXF Reference
* Параметры вызова:
* ent указатель на объект (ename или vla)
* xdat какие значения получать:
* "scale" - получить масштаб
* "layer" - получить слой
* "str" - получить строку
* nil - получить полный список
* Примеры вызова:
(_kpblc-ent-xdata-get (entlast nil)
=============================================================================|;
(defun _kpblc-ent-xdata-get (ent xdat / res)
(if (setq res (entget (_kpblc-ent-to-ename ent) (list *kpblc-appname*)))
(progn
(setq res
(cdar
(cdr
(assoc -3 (entget (_kpblc-ent-to-ename ent) (list *kpblc-appname*)))
) ;_ end of cdr
) ;_ end of cdar
) ;_ end of setq
) ;_ end of progn
) ;_ end of if
(if (and xdat
(setq xdat (strcase xdat t))
) ;_ end of and
(cond
((= xdat "scale")
(setq res (cdr (assoc 1042 res)))
)
((= xdat "layer")
(setq res (cdr (assoc 1003 res)))
)
((= xdat "str")
(setq res (cdr (assoc 1000 res)))
)
) ;_ end of cond
) ;_ end of if
res
) ;_ end of defun
;|=============================================================================
* Функция записи расширенных данных в указанный примитив
* Параметры вызова:
* ent примитив, над которым выполняется действие.
* extdata-list список элементов, которые надо присоединить. Может быть
* любым из возможных для расширенных данных. Список вида
* '(("str" . "Строка для записи")
* ("scale" . <Масштаб элемента. Требуется, если вставка выполнена
* в модели>)
* ("layer" . <Имя слоя>) ; пока не использую
* )
* Примеры вызова:
(_kpblc-ent-xdata-set (entlast) '(("str" . "Строка") ("layer" . "0") (cons "scale" (kpblc-get-scale))))
=============================================================================|;
(defun _kpblc-ent-xdata-set (ent extdata-list / xdat)
(setq xdat (_kpblc-ent-xdata-create extdata-list)
ent (append (entget (_kpblc-ent-to-ename ent)) xdat)
) ;_ end of setq
(entmod ent)
) ;_ end of defun
---
Оффтоп: некисло тема вильнула...