fengche1915@ 发表于 前天 09:13

请教:一个文字根据另一个文字的后两位自动更换内容




    有上下两行文字,下行文字的后两位是数字,可能是01至15,现在我想实现上面的文字根据下面文字后两位自动更新

比如说:下面文字后两位是 04,时候,上面文字内容为:甲方;
             下面文字后两位是 05,时候,上面文字内容为:乙方;
             下面文字后两位是 05,时候,上面文字内容为:今天上班;
            ........
如何实现这种情况;好像有说可以使用lisp,但是需要每次点击一个更新一次;

夏生生 发表于 前天 10:34

最好的办法是反应器,给你个笨办法,按自己的需求去改吧
(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))

tranque 发表于 前天 11:52

属性块,然后块表?

fengche1915@ 发表于 前天 15:38

夏生生 发表于 2025-4-28 10:34
最好的办法是反应器,给你个笨办法,按自己的需求去改吧

CAD反应器还没用过,是不是2014的都还没有反应器啊;

fengche1915@ 发表于 前天 16:13

这种方法是不是如果我改变了-04为 -05,是不是又要重新运行下;

tryhi 发表于 昨天 11:36

本帖最后由 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]
查看完整版本: 请教:一个文字根据另一个文字的后两位自动更换内容