请教:一个文字根据另一个文字的后两位自动更换内容
有上下两行文字,下行文字的后两位是数字,可能是01至15,现在我想实现上面的文字根据下面文字后两位自动更新
比如说:下面文字后两位是 04,时候,上面文字内容为:甲方;
下面文字后两位是 05,时候,上面文字内容为:乙方;
下面文字后两位是 05,时候,上面文字内容为:今天上班;
........
如何实现这种情况;好像有说可以使用lisp,但是需要每次点击一个更新一次;
最好的办法是反应器,给你个笨办法,按自己的需求去改吧
(defun c:tt(/ en en1 ent lst n pt1 pt2 ss ss1)
(setq lst '(("2-D0101-04" . "甲方")
("2-D0101-05" . "乙方")
("2-D0101-06" . "今天上班"))
ss(ssget '((0 . "text") (1 . "*-*-*"))))
(repeat (setq n (sslength ss))
(setq en (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
(vla-getboundingbox en 'pt1 'pt2)
(setqpt1 (mapcar '+ '(0 600 0) (vlax-safearray->list pt1))
pt2 (mapcar '+ '(0 600 0) (vlax-safearray->list pt2)))
(setq ss1 (ssget "c" pt1 pt2 '((0 . "text"))))
(if ss1
(progn (setqen1 (ssname ss1 0)
ent (entget en1))
(entmod
(subst (cons 1 (cdr (assoc (vla-get-textstring en) lst)))
(assoc 1 ent)
ent)))
(progn (vla-move (setq en1 (vla-copy en))
(vlax-3d-point '(0 0 0))
(vlax-3d-point '(0 600 0)))
(vla-put-textstring en1
(cdr (assoc (vla-get-textstring en) lst)))))
)
(princ))
属性块,然后块表? 夏生生 发表于 2025-4-28 10:34
最好的办法是反应器,给你个笨办法,按自己的需求去改吧
CAD反应器还没用过,是不是2014的都还没有反应器啊; 这种方法是不是如果我改变了-04为 -05,是不是又要重新运行下; 本帖最后由 tryhi 于 2025-4-29 11:48 编辑
(defun c:tt ()
(Defun Rtest (obj1 obj2 a)
(setq en2 (HandEnt (VLR-Data obj2)))
(setq new1 (cdr (assoc 1 (entget (vlax-vla-object->ename obj1) ))))
(setq new
(cond ((wcmatch new1 "*04")"甲方")
((wcmatch new1 "*05")"乙方")
((wcmatch new1 "*06")"今天上班")
(t"下班了")
)
)
(setq ent (entget en2))
(entmod (subst (cons 1 new) (assoc 1 ent) ent))
)
(setq s1(car (entsel "\n请选择文本1: "))
obj (vlax-ename->vla-object s1)
s2(car (entsel "\n请选择文本2: "))
)
(vlr-object-reactor
(list obj);触发对象
(cdr (assoc 5 (entget s2 )));被修改图元句柄
'((:vlr-modified . rtest)));触发函数
(princ)
)
(princ"\n文字关联反应器")(princ)
页:
[1]