找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1003|回复: 5

[求助] [求助]:如何用VLISP遍历块中的各个属性

[复制链接]
发表于 2003-6-3 11:47:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-6-3 12:25:14 | 显示全部楼层

  1. ;;By (LUCAS)龙龙仔
  2. ;;修改BLOCK REF所有属性性质
  3. ;;USAGE: (CHANGE_ATTT "LAYER" "DIM")
  4. ;;USAGE: (CHANGE_ATTT <性质> <值>)
  5. (defun CHANGE_ATTT (PROPERTY VALUE / BLK BLKREF ENT)
  6.   (vl-load-com)
  7.   (while
  8.     (or        (not (setq BLK (car (entsel "\n选取带属性图块: "))))
  9.         (progn
  10.           (setq BLKREF (vlax-ename->vla-object BLK))
  11.           (not (= (vla-get-objectname BLKREF) "AcDbBlockReference"))
  12.         )
  13.     )
  14.   )
  15.   (foreach ENT (vlax-safearray->list
  16.                  (vlax-variant-value (vla-getattributes BLKREF))
  17.                )
  18.     ((eval (read (strcat "vla-put-" PROPERTY))) ENT LNAME)
  19.   )
  20.   (princ)
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-3 12:47:10 | 显示全部楼层

Re: [求助]:如何用VLISP遍历块中的各个属性

最初由 hqd9639 发布
[B]如题 [/B]

(setq bl (tblnext "block" t))
(setq a nil)
(while
(setq b (tblnext "block"))
(setq a (cons b a))
)
(cons bl a)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-3 13:35:50 | 显示全部楼层

Re: Re: [求助]:如何用VLISP遍历块中的各个属性

最初由 snsj 发布
[B]
(setq bl (tblnext "block" t))
(setq a nil)
(while
(setq b (tblnext "block"))
(setq a (cons b a))
)
(cons bl a) [/B]


斑主,如直接用LISP,应该是这样:

  (while (= (setq e (car (entsel "\nSelect an attributed block: "))) nil))
  (setq e-inf (entget e))
  (if (= (cdr (assoc 0 e-inf)) "INSERT")
    (progn
      (while (/= (setq e (entnext e)) nil)
        (setq e-inf (entget e))
        (if (= (cdr (assoc 0 e-inf)) "ATTRIB")
          (progn
            (setq
              e-value (cdr (assoc 1 e-inf))
              e-prompt (cdr (assoc 2 e-inf))
              e-v-type (type e-value)
            )
            (cond ((= e-v-type 'REAL) (setq e-value (rtos e-value (getvar "lunits") (getvar "luprec"))))
                  ((= e-v-type 'INT) (setq e-value (itoa e-value)))
            )
            (princ (strcat "\n" e-prompt ": " e-value))
          )
        )
      )
    )
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-6-3 14:57:32 | 显示全部楼层
最初由 LUCAS 发布
[B][CODE]
;;By (LUCAS)龙龙仔
;;修改BLOCK REF所有属性性质
;;USAGE: (CHANGE_ATTT "LAYER" "DIM")
;;USAGE: (CHANGE_ATTT <性质> <值>)
(defun CHANGE_ATTT (PROPERTY VALUE / BLK BLKREF ENT)
  (vl-load-co... [/B]



谢谢你的指点。
   只是美中不足的是程序会把块中每个属性都改为同一个值,这种情况是比较少见的,要修改的属性改为象这样提示会更好点:[Value/Height/Width/Angle/Font/Layer/Color/Exit]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-6-3 18:14:05 | 显示全部楼层
我有高招
实际上还是别人的高招:
到明经cad里找函数ax:GetAttributes
能够返回形如:(("产品图号" "MDW02" <图元名:4007ffa8>)("名称" "低温箱" <图元名:xxxxxx>) .....)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 09:51 , Processed in 0.272136 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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