飞龙在天 发表于 2003-3-19 06:55:00

块中的属性文字,想改变它的层时,用重定义块方式竟不起作用,怎么办?

chg 发表于 2003-3-19 09:55:00

用命令-attedit,你可以编辑属性的图层,颜色,样式等等。但一次只能编辑一个属性。

飞龙在天 发表于 2003-3-19 21:49:00

我知道这个命令,问题是块对象有上百个,有没有一次性全部改正的方法吗?

chg 发表于 2003-3-20 12:12:00

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)
)

这个程序很简陋,你可以自己加以改进,应该可以帮你解决问题。

飞龙在天 发表于 2003-3-20 21:42:00

谢谢!阁下真是热心人,在下表示十分感谢!

龙龙仔 发表于 2003-3-24 12:26:00

修改图块内所有属性性质

;;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]
查看完整版本: 块中的属性文字,想改变它的层时,用重定义块方式竟不起作用,怎么办?