明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2318|回复: 4

求一个解决批量修改属性图层的功能

[复制链接]
发表于 2019-1-30 14:14:32 | 显示全部楼层 |阅读模式
20明经币
之前用过一个修改属性颜色的插件,最近因为工作原因,需要一个批量修改属性所在图层的功能。具体是cad的增强属性编辑器里可以一个个修改属性所在的图层,现由于图块种数过多,需要一个批量修改的功能,求大神帮助。

发表于 2019-6-7 07:18:50 | 显示全部楼层
本帖最后由 KO你 于 2019-6-7 07:20 编辑

在论坛有把同名块内对象改图层,颜色,线型的

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2019-6-7 17:20:32 | 显示全部楼层
KO你 发表于 2019-6-7 07:18
在论坛有把同名块内对象改图层,颜色,线型的

这个好是好,但没有主次之分,还要去设置内线,比较麻烦
回复

使用道具 举报

发表于 2019-6-7 17:41:12 | 显示全部楼层
本帖最后由 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 be  element of the block)")
(princ))
回复

使用道具 举报

发表于 2019-6-7 23:33:01 | 显示全部楼层
KO你 发表于 2019-6-7 17:41
这个论坛里有,配合这个用,已经很完善了,只有不足的地方是改块选中对象颜色没有框选
快捷键  bb`   改 ...

谢谢,期待大神完善
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:40 , Processed in 0.165040 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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