pizg 发表于 2011-4-28 16:23:51

[已解決] 請問如何用LISP修改圖塊屬性的值?

本帖最后由 pizg 于 2011-4-28 17:45 编辑

在不使用ATTEDIT指令的情況下,請問如何用LISP修改圖塊屬性的值?

白色微風1991 发表于 2023-5-31 07:39:18

不錯不錯,學習了

alwtyp 发表于 2011-4-28 17:15:11

請參考,修改屬性標籤為"REV“的值
;修改圖框檔版次
(defun c:ay-REVIS()
(setvar "cmdecho" 0)
   (Setq Rev (Strcase (Getstring "\n 請輸入版次:")))
   (SETQ ENT (ENTGET (CAR (ENTSEL)))
         ENT1 ENT)
   (setq SS (Cdr (Assoc -1 ent1)))
    (IF (/= "SEQEND" (cdr (assoc 0 ENT)))
          (WHILE (= (CDR (ASSOC 0 (SETQ ENT1 (ENTGET (ENTNEXT (CDR (ASSOC -1 ENT1))))))) "ATTRIB")
          (cond
              ((= (CDR (ASSOC 2 ENT1)) "REV")
             (SETQ ENT1 (SUBST (CONS 1 REV) (ASSOC 1 ENT1) ENT1))
                  (ENTMOD ENT1))
              )
          )
          )
(entdel SS)
(entdel SS)
(setvar "cmdecho" 1)
(p

alwtyp 发表于 2011-4-28 17:16:00

漏了 rinc)
)

pizg 发表于 2011-4-28 17:44:02

感謝 alwtyp 解答.

alwtyp 发表于 2011-4-29 09:51:14

批量修改
(defun c:ay-REVIS()
(setvar "cmdecho" 0)
   (Setq Rev (Strcase (Getstring "\n 請輸入版次:")))
   (Setq Block (Ssget "_X" '((0 . "Insert"))))
   (Setq N 0)
(Repeat (Sslength Block)
    (Setq Ent (Entget (Ssname Block N)))
    (Setq Ent1 Ent)
    (setq SS (Cdr (Assoc -1 ent1)))
    (IF (/= "SEQEND" (cdr (assoc 0 ENT)))
          (WHILE (= (CDR (ASSOC 0 (SETQ ENT1 (ENTGET (ENTNEXT (CDR (ASSOC -1 ENT1))))))) "ATTRIB")
          (cond
              ((= (CDR (ASSOC 2 ENT1)) "REV")
             (SETQ ENT1 (SUBST (CONS 1 REV) (ASSOC 1 ENT1) ENT1))
                  (ENTMOD ENT1))
              )
          )
          )
(entdel SS)
(entdel SS)
(setq n (1+ n))
)
(setvar "cmdecho" 1)
(princ)
)

alwtyp 发表于 2011-5-1 14:16:15

那要看你想选择成什么?

yxl88168 发表于 2011-5-1 15:03:00

回复 alwtyp 的帖子

谢谢楼主,这个程序真好,我一直想找这个,终于看到了

yxl88168 发表于 2011-5-1 16:13:53

楼主要的是这个吧,你试试(用alwtyp 的改了一点点)
(defun c:yy3()
(setvar "cmdecho" 0)
   (Setq Rev (Strcase (Getstring "\n 請輸入版次:")))
   (Setq Block (Ssget '((0 . "Insert"))))
   (Setq N 0)
(Repeat (Sslength Block)
    (Setq Ent (Entget (Ssname Block N)))
    (Setq Ent1 Ent)
    (setq SS (Cdr (Assoc -1 ent1)))
    (IF (/= "SEQEND" (cdr (assoc 0 ENT)))
          (WHILE (= (CDR (ASSOC 0 (SETQ ENT1 (ENTGET (ENTNEXT (CDR (ASSOC -1 ENT1))))))) "ATTRIB")
            (cond
            ((= (CDR (ASSOC 2 ENT1)) "版本")
               (SETQ ENT1 (SUBST (CONS 1 REV) (ASSOC 1 ENT1) ENT1))
                  (ENTMOD ENT1))
            )
            )
          )
(entdel SS)
(entdel SS)
(setq n (1+ n))
)
(setvar "cmdecho" 1)
(princ)
)

dyb771128 发表于 2012-1-9 23:23:04

学习了!谢谢!!!!

xing979020 发表于 2012-1-9 23:51:22

很不错。我写的这个更长
页: [1] 2
查看完整版本: [已解決] 請問如何用LISP修改圖塊屬性的值?