Здравствуйте,
есть блок с разными атрибутами, в одном из которых “поле”, например, имя текущего файла, либо в содержимом атрибута может быть “какой-то текст + поле”.
Подскажите пожалуйста как кодом lisp скопировать содержимое такого атрибута в другой атрибут, сохранив поле (*id объекта должно поменяться на новый целевой блок)?
Код ниже позволяет скопировать содержимое всех атрибутов с одного блока в другой с полем, но проблема в том, что ObjectId передается с исходного блока, а нужно чтобы это был id целевого блока (*в который копируем).
(defun C:MTB2 (/ ename enam data ss)
(while (not
(progn
(prompt "\
Select Source Block:")
(setq ename (ssget "_:S:E" '((0 . "INSERT") (66 . 1))))
)
)
(princ "\
Invalid or null selection")
)
(cond
((and
(setq enam (ssname ename 0))
(setq data (
(defun _FieldsVal (blk mode lst / m f)
(setq f (if mode
(lambda (e)
(strcat "%<\\AcObjProp Object(%<\\_ObjId "
(itoa (vla-get-ObjectId e))
">%).TextString>%")
)
(lambda (e) (vla-get-textstring e))
)
)
(mapcar '(lambda (at)
(if lst
(if (setq m (assoc (vla-get-tagstring at) lst))
(vla-put-textstring at (cadr m))
)
(list (vla-get-tagstring at) (f at))
)
)
(vlax-invoke (vlax-ename->vla-object blk) 'Getattributes)
)
)
;;; End of _FieldsVal ;;;
(vl-load-com)