明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4010|回复: 38

[源码] 一键改变底图颜色,同时不改变图层颜色。处理条件图...

[复制链接]
发表于 2023-5-4 12:26 | 显示全部楼层 |阅读模式
本帖最后由 yjccwf 于 2023-5-9 14:16 编辑


;; ;; 一键改变所有图层为8号色。
(defun c:yjbs (/ ss BLKS  I)  ;
  (vl-load-com)
  (setvar "cmdecho" 0)
  (command "layer" "u" "*" "s" "0" "") ;解锁所有图层
  (setq ss (ssget "x" '((0 . "INSERT"))))
  (setq BLKS (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
  (defun ChColor (OBJ / oName BlkName BNLst)  ;oName BlkName
    (setq oName (vla-get-ObjectName OBJ))
    (cond
      ((wcmatch oName "*Dimension,AcDbLeader,AcDbFcf")
       (vla-put-DimensionLineColor OBJ 8)
       (if (wcmatch oName "*Dimension")
         (progn
           (vla-put-ExtensionLineColor OBJ 8)
           (if (setq BlkName (assoc 2 (entget (vlax-vla-object->ename OBJ))))
             (vlax-for OBJ (vla-item Blks (cdr BlkName))
               (vla-put-color OBJ 8)
             )
           )
         )
       )
       (if (wcmatch oName "*Dimension,AcDbFcf")
         (vla-put-TextColor OBJ 8)
       )
      )
      ((= oName "AcDbBlockReference")
       (setq BlkName (vla-get-name OBJ))
       (if (not (member BlkName BNLst))
         (progn
           (setq BNLst (cons BlkName BNLst))
           (vlax-for X (vla-item Blks BlkName)
             (ChColor X)
           )
         )
       )
       (if (= (vla-get-HasAttributes OBJ) :vlax-true)
         (foreach X (vlax-invoke OBJ 'getattributes)
           (vla-put-color X 8)
         )
       )
      )
    )
    (vla-put-color obj 8)
  )
  (repeat (setq I (sslength SS))
    (setq OBJ (vlax-ename->vla-object (ssname SS (setq I (1- I)))))
    (ChColor OBJ)
  )
  (command "change" (ssget "x") "" "p" "c" 8 "")
  (princ)
)




之前的版本 在变色的同时改变了块的图层;目前版本完全不改变任何图层的颜色,把图元和块一次性全部改为8号色;借助了网上一些大佬的代码,但确实不知道是谁的!先谢谢了!现在再次免费分享给大家!



本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
菜鸟初来乍到 + 1

查看全部评分

发表于 2023-5-4 15:29 | 显示全部楼层
本帖最后由 llsheng_73 于 2023-5-15 22:04 编辑
yjccwf 发表于 2023-5-4 12:31
处理条件图好用,变色除了块外 都不会改变原有图层颜色,这样不会导致制图的时候 自己画的东西也变为8号色 ...

  1. (defun c:TT(/ *blocks *layers *Model lys atts co)
  2.   (vl-load-com)
  3.   (if(setq *doc(vlax-get-property (vlax-get-acad-object)'ActiveDocument)
  4.            *Model(vlax-get-property *doc'ModelSpace)*blocks(vlax-get-property *doc 'blocks)
  5.            *layers(vlax-get-property *doc 'layers)
  6.            co(acad_colordlg 1 nil))
  7.     (progn
  8.       (vlax-for blk *blocks(or(vl-position(vlax-get-property blk 'name)'("*MODEL_SPACE""*PAPER_SPACE"))(vlax-for x blk(vlax-put-property x'color 0))))
  9.       (vlax-for x *layers
  10.         (setq lys(cons(entget(vlax-vla-object->ename x))lys))
  11.         (vlax-put-property x 'lock 0))
  12.       (vlax-for x *Model
  13.         (VL-CATCH-ALL-APPLY'vlax-put-property(list x'color co))
  14.         (or(VL-CATCH-ALL-ERROR-P(setq n 0 atts(VL-CATCH-ALL-APPLY 'vlax-invoke-method(list x'GetAttributes))))
  15.            (VL-CATCH-ALL-ERROR-P(setq atts(VL-CATCH-ALL-APPLY 'vlax-safearray->list(list(vlax-variant-value atts)))))
  16.            (foreach x atts(vlax-put-property x'color co))))
  17.       (vl-every'entmod lys))))

;;更改所有图元颜色为指定颜色,临时解锁(图层雾化不影响)所有图层,完事恢复所有图层
回复 支持 3 反对 1

使用道具 举报

发表于 2023-5-4 14:16 | 显示全部楼层
我们公司要求建筑底图放在单一的图层里,颜色要为8号色。
我整理底图的思路是,把所选的图层改成0(主要是把块里的图层改为0),把所选的颜色改成0(主要是把块里的颜色改为0),然后把底图放在专门的8号色图层,再把底图选用,颜色改为随层。
以前是用插件,现在公司改用中望后,中望自带的扩展有改块颜色、块图层的功能。
 楼主| 发表于 2023-5-4 12:31 | 显示全部楼层
处理条件图好用,变色除了块外 都不会改变原有图层颜色,这样不会导致制图的时候 自己画的东西也变为8号色;天正有这个功能,但天正的就是 全部改变了图层颜色,然后自己绘制的东西 都为8号色;非常不好用!现在免费分享给大家

本帖子中包含更多资源

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

x
发表于 2023-5-4 12:37 | 显示全部楼层
如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好
发表于 2023-5-4 13:11 | 显示全部楼层
感谢分享实用软件。
 楼主| 发表于 2023-5-4 13:48 | 显示全部楼层
start4444 发表于 2023-5-4 12:37
如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好

好提议 我找时间优化下
发表于 2023-5-4 15:01 | 显示全部楼层
感谢楼主的分享,这个改色插件非常好用。
发表于 2023-5-4 21:31 | 显示全部楼层
本帖最后由 小毛草 于 2023-5-4 21:38 编辑

楼上这个程序,大一点的图速度就慢得死机,有什么办法解决一下?另外,有些图用不了,不知为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 18:35 , Processed in 0.153567 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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