求一个解决批量修改属性图层的功能
之前用过一个修改属性颜色的插件,最近因为工作原因,需要一个批量修改属性所在图层的功能。具体是cad的增强属性编辑器里可以一个个修改属性所在的图层,现由于图块种数过多,需要一个批量修改的功能,求大神帮助。本帖最后由 KO你 于 2019-6-7 07:20 编辑
在论坛有把同名块内对象改图层,颜色,线型的 KO你 发表于 2019-6-7 07:18
在论坛有把同名块内对象改图层,颜色,线型的
这个好是好,但没有主次之分,还要去设置内线,比较麻烦 本帖最后由 KO你 于 2019-6-7 17:43 编辑
圣天诺杰 发表于 2019-6-7 17:20
这个好是好,但没有主次之分,还要去设置内线,比较麻烦
这个论坛里有,配合这个用,已经很完善了,只有不足的地方是改块选中对象颜色没有框选
快捷键bb` 改块选中对象颜色
快捷键bb``改块全部对象颜色
;修改实体和图块内的颜色
(defun c:bb`` () (pl:block-color) (princ))
(defun c:bb` () (pl:block-ent-color) (princ))
(vl-load-com)
(defun pl:block-ent-color (/ adoc blocks color ent lays)
(setq adoc(vla-get-activedocument (vlax-get-acad-object))
lays(vla-get-layers adoc)
color (acad_colordlg 256)
)
(if color
(progn (setvar "errno" 0)
(vla-startundomark adoc)
(while (and (not (vl-catch-all-error-p
(setq ent (vl-catch-all-apply
(function nentsel)
'("\nSelect entity <Exit>:")
)
)
)
)
(/= 52 (getvar "errno"))
)
(if ent
(progn (setq ent (vlax-ename->vla-object (car ent))
lay (vla-item lays (vla-get-layer ent))
)
(if (= (vla-get-lock lay) :vlax-true)
(progn (setq layloc (cons lay layloc))
(vla-put-lock lay :vlax-false)
)
)
(vl-catch-all-apply (function vla-put-color) (list ent color))
(vla-regen adoc acallviewports)
)
(princ "\nNothing selection! Try again.")
)
)
(foreach i layloc (vla-put-lock i :vlax-true))
(vla-endundomark adoc)
)
)
(princ)
)
(defun pl:block-color (/ adoc blocks color ins lays)
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
blocks (vla-get-blocks adoc)
lays (vla-get-layers adoc)
color(acad_colordlg 256)
)
(if color
(progn (setvar "errno" 0)
(vla-startundomark adoc)
(while (and (not (vl-catch-all-error-p
(setq ins (vl-catch-all-apply
(function entsel)
'("\nSelect block <Exit>:")
)
)
)
)
(/= 52 (getvar "errno"))
)
(if ins
(progn (setq ins (vlax-ename->vla-object (car ins)))
(if (= (vla-get-objectname ins) "AcDbBlockReference")
(if (vlax-property-available-p ins 'path)
(princ "\nThis is external reference! Try pick other.")
(progn (_pl:block-color blocks ins color lays)
(vla-regen adoc acallviewports)
)
)
(princ "\nThis isn't block! Try pick other.")
)
)
(princ "\nNothing selection! Try again.")
)
)
(vla-endundomark adoc)
)
)
(princ)
)
(defun _pl:block-color (blocks ins color lays / lay layfrz layloc)
(vlax-for e (vla-item blocks (vla-get-name ins))
(setq lay (vla-item lays (vla-get-layer e)))
(if (= (vla-get-freeze lay) :vlax-true)
(progn (setq layfrz (cons lay layfrz)) (vla-put-freeze lay :vlax-false))
)
(if (= (vla-get-lock lay) :vlax-true)
(progn (setq layloc (cons lay layloc)) (vla-put-lock lay :vlax-false))
)
(vl-catch-all-apply (function vla-put-color) (list e color))
(if (and (= (vla-get-objectname e) "AcDbBlockReference")
(not (vlax-property-available-p e 'path))
)
(_pl:block-color blocks e color lays)
)
(foreach i layfrz (vla-put-freeze i :vlax-true))
(foreach i layloc (vla-put-lock i :vlax-true))
)
)
(progn
(princ "\BLCC - Changes color of the chosen blocks")
(princ "\nENCC - Changes color of the chosen objects (may beelement of the block)")
(princ)) KO你 发表于 2019-6-7 17:41
这个论坛里有,配合这个用,已经很完善了,只有不足的地方是改块选中对象颜色没有框选
快捷键bb` 改 ...
谢谢,期待大神完善
页:
[1]