明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7267|回复: 14

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

  [复制链接]
发表于 2011-4-28 16:23:51 | 显示全部楼层 |阅读模式
本帖最后由 pizg 于 2011-4-28 17:45 编辑

在不使用ATTEDIT指令的情況下,請問如何用LISP修改圖塊屬性的值?
发表于 2023-5-31 07:39:18 | 显示全部楼层
不錯不錯,學習了
发表于 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

点评

可以改为批量选择吗????谢谢  发表于 2011-4-28 19:27

评分

参与人数 1金钱 +10 收起 理由
pizg + 10 正是我要的, 感謝

查看全部评分

发表于 2011-4-28 17:16:00 | 显示全部楼层
漏了 rinc)
)
 楼主| 发表于 2011-4-28 17:44:02 | 显示全部楼层
感謝 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)
)

点评

我都没有选择就开始搞了....可不可以改为可以选择模式.....谢谢  发表于 2011-4-30 14:36
发表于 2011-5-1 14:16:15 | 显示全部楼层
那要看你想选择成什么?
发表于 2011-5-1 15:03:00 | 显示全部楼层
回复 alwtyp 的帖子

谢谢楼主,这个程序真好,我一直想找这个,终于看到了
发表于 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)
)

点评

都还是不行,,,大哥,麻烦你试下  发表于 2011-5-2 17:33
发表于 2012-1-9 23:23:04 | 显示全部楼层
学习了!谢谢!!!!
发表于 2012-1-9 23:51:22 | 显示全部楼层
很不错。我写的这个更长
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 21:28 , Processed in 0.154853 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表