Переписываю функцию, есть вопрос:
Есть множество динамических блоков разной длины, с пустым атрибутом.
Есть .*TEXT с полями для одного из этих блоков (заготовка)
Подскажите, как распространить эту заготовку по атрибутам блока 'EffectiveName, и связать по ObjectID
Приблизительный процесс:
-Берётся текст с заготовкой
-Берётся один из блоков.
=Заготовка с полями распространяется по атрибутам аналогичных 'EffectiveName блоков и привязывается по ObjId
=_regenall
=Profit!
Статичный вариант, с зашитой заготовкой:
(defun c:FVV ( / LM:GetObjectID acdoc acspc e eb i ii o p val elist) (vl-load-com)
;;;http://www.cadtutor.net/forum/archive/index.php/t-57782.html?s=5868f10b6c04f0c55def20c8e85e764e
;;;1d_Inciner mod of С:AMF
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
; modelspace control
acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace))
)
;;;анализ разрядности системы
(defun LM:GetObjectID ( doc obj )
;; © Lee Mac 2011
(if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
(vlax-invoke-method (vla-get-Utility doc) 'GetObjectIdString obj :vlax-false)
(itoa (vla-get-Objectid obj)))
)
;выбор разных блоков :-С
(setq vs (ssget))
(setq ii 0)
(repeat (sslength vs)
(setq eb (ssname vs ii))
(setq elist (entget eb))
(if (and (= (cdr (assoc 0 elist)) "INSERT") (= (cdr (assoc 66 elist)) 1))
(progn
(setq e (cadar (acet-insert-attrib-get (list eb 4))))
(setq i (LM:GetObjectID acdoc (vlax-ename->vla-object eb)))
;фиксированный атрибут :-С
(setq o
(strcat
"(" (vlax-get-property (vlax-ename->vla-object eb) 'EffectiveName) ") "
"%<\\AcObjProp Object(%<\\_ObjId " i ">%).Parameter(9).UpdatedDistance \\f \"%lu2%pr0\">%"
))
;простановка имени блока+ фиксированное поле в атрибут
(setq val (vlax-ename->vla-object e))
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-TextString(list val o)))
(progn
(princ "\nError. Can't pase text. ")
(setq errFlag T)
); end progn
); end if
))
(setq ii (1+ ii))
);repeat
)