块中的属性文字,想改变它的层时,用重定义块方式竟不起作用,怎么办?
用命令-attedit,你可以编辑属性的图层,颜色,样式等等。但一次只能编辑一个属性。
我知道这个命令,问题是块对象有上百个,有没有一次性全部改正的方法吗?
Autocad本身好象没有这个命令,如果要一次性更改,只有写个程序了。
(defun change_att(blkname tag value layname / ss ent n ctrl)(setvar "cmdecho" 0)
(setq ss (ssget (list '(-4 . "<and") '(0 . "INSERT") (cons 2 blkname) '(66 . 1) '(-4 . "and>")))
n 0
ctrl T)
(if ss
(while (setq ent (ssname ss n))
(while ctrl
(setq ent (entnext ent))
(if (= (cdr(assoc 2 (entget ent))) tag)
(progn
(command "-attedit" "" blkname tag value ent "l" layname "")
(setq ctrl nil)
)
(setq ent (entnext ent))
)
)
(setq n (1+ n) ctrl T)
)
)
(setvar "cmdecho" 1)
(princ)
)
这个程序很简陋,你可以自己加以改进,应该可以帮你解决问题。
谢谢!阁下真是热心人,在下表示十分感谢!
修改图块内所有属性性质
;;By 龙龙仔;;修改图块内所有属性性质
;;USAGE: (CHANGE_ATT "LAYER" "DIM")
;;USAGE: (CHANGE_ATT "COLOR" "1")
(defun CHANGE_ATT (PROPERTY LNAME / BLK BLKREF BNAME BLKDEF ENT)
(vl-load-com)
(while
(or (not (setq BLK (car (entsel "\n选取带属性图块: "))))
(progn
(setq BLKREF (vlax-ename->vla-object BLK))
(not (= (vla-get-objectname BLKREF) "AcDbBlockReference"))
)
)
)
(setq BNAME(vla-get-name BLKREF)
BLKDEF (vla-item (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
BNAME
)
)
(vlax-for ENT BLKDEF
(if (= (vla-get-objectname ENT) "AcDbAttributeDefinition")
((eval (read (strcat "vla-put-" PROPERTY))) ENT LNAME)
)
)
(command "_.attsync" "n" BNAME)
(princ)
)
页:
[1]