- 积分
- 8571
- 明经币
- 个
- 注册时间
- 2008-4-2
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2015-5-30 15:27:14
|
显示全部楼层
(defun c:tt( / tag value ent entg obj name MustAddAtt attrs attr attrs )
(setq tag "no")
(setq value "1")
;;; (if (and (setq ent(entsel "\n选择块:"))
;;; (setq entg(entget(car ent)))
;;; (= "INSERT" (cdr(assoc 0 entg)))
;;; )
(prompt "选择对象:")
(while (setq ss(ssget (list (cons 0 "INSERT"))))
(progn
(repeat (setq n(sslength ss))
(setq ent(ssname (setq n(1- n)) ss))
(setq entg(entget(car ent)))
(setq obj(vlax-ename->vla-object ent))
;首先判断是否属性块-------------------
(setq name(cdr(assoc 2 entg)))
(if (zerop (vlax-get obj 'HasAttributes))
(setq MustAddAtt t);没有属性,直接添加NO属性------
(progn;有属性,继续判断是否存在NO属性-
(setq MustAddAtt t)
(setq attrs(vlax-invoke obj 'getattributes))
(foreach attr attrs
(if (= (strcase tag) (strcase(vlax-get attr 'tagstring)));都转化为大写,避免大小写的问题---
(setq MustAddAtt nil)
)
)
)
)
;上面判断是否需要增加属性-------------------------
(if MustAddAtt
(progn;下面进行属性的增加-----------------------
(setq blkdef (vla-item(vla-get-blocks(vla-get-activedocument (vlax-get-acad-object))) name))
(vla-addattribute blkdef 250 acAttributeModeInvisible ""
(vlax-3d-point (list 0 0 0))
tag
"1"
)
(command "_.attsync" "n" name)
)
)
;下面进行属性修改--------------------------------
(foreach attr attrs
(if (= tag (vlax-get attr 'tagstring))
(vlax-put attr 'textstring value)
)
)
)
)
)
(princ)
)
;第二个问题应该是因为属性的大小写的问题,已处理
;第三个问题是我的错误,已改正
;第四个...我用的是隐藏属性,你可以自己看着调整吧 |
|