(defun c:SZGL (/ SS VAL N EN OBJ DATA PT TEXT HAND)
(princ "\n选择文字:")
(setq ss (ssget '((0 . "text"))))
(if ss
(progn
(setq val 0)
(repeat (setq n (sslength ss))
(setq en (ssname ss (setq n (1- n)))
obj (vlax-ename->vla-object en)
data (cons (dxf en 5) data)
val (+ val (atof (dxf en 1)))
)
)
(setq pt (getpoint "\n文字位置:"))
(entmake (list '(0 . "text")
(cons 10 pt)
(cons 1 (rtos val 2))
(cons 40 (dxf en 40))))
(setq text (entlast))
(setq hand (dxf text 5))
(repeat (setq n (sslength ss))
(setq en (ssname ss (setq n (1- n))))
(vlr-pers ;_ 设置永久反应器
(VLR-Object-Reactor
(list (vlax-ename->vla-object en))
data ;_ 关联的对象索引
'((:VLR-modified . text-change) ;_ 回调函数
)
)
)
(VLAX-LDATA-PUT
(vlax-ename->vla-object En)
"data"
(entget text)
) ;_ 将关联文字数据保存在词典里
)
)
)
)
(defun dxf (e i)
(cdr (assoc i (entget e)))
)
;;回调函数
(defun text-change (Object Reactor-Object Parameter-list
/ hand ent val
data dxfs)
(setq data (vlr-data Reactor-Object))
(setq
hand (cdr (assoc 5 (setq dxfs (VLAX-LDATA-get Object "data")))))
(if (and
hand
(setq ent (handent hand))
(setq el (entget ent))
)
(progn
(setq val
(apply '+
(mapcar
'(lambda (x / e)
(if
(and
(setq e (handent x))
(entget e)
)
(atof (dxf e 1))
0
)
)
data
)
)
)
(entmod (subst (cons 1 (rtos val 2)) (assoc 1 el) el))
)
(progn
(setq val
(apply '+
(mapcar
'(lambda (x / e)
(if
(and
(setq e (handent x))
(entget e)
)
(atof (dxf e 1))
0
)
)
data
)
)
)
(entmake (subst (cons 1 (rtos val 2)) (assoc 1 dxfs) dxfs)) ;_ 恢复关联文字
(setq text (entget (entlast)))
(foreach h data
(if (and
(setq en (handent h))
(entget en)
)
(VLAX-LDATA-PUT (vlax-ename->vla-object En) "data" text) ;_ 重置数据
)
)
)
)
(princ)
)
拿去,不谢