yjccwf 发表于 2023-5-4 12:26:25

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

本帖最后由 yjccwf 于 2023-5-9 14:16 编辑


;; ;; 一键改变所有图层为8号色。
(defun c:yjbs (/ ss BLKSI);
(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号色;借助了网上一些大佬的代码,但确实不知道是谁的!先谢谢了!现在再次免费分享给大家!



llsheng_73 发表于 2023-5-4 15:29:45

本帖最后由 llsheng_73 于 2023-5-15 22:04 编辑

yjccwf 发表于 2023-5-4 12:31
处理条件图好用,变色除了块外 都不会改变原有图层颜色,这样不会导致制图的时候 自己画的东西也变为8号色 ...
(defun c:TT(/ *blocks *layers *Model lys atts co)
(vl-load-com)
(if(setq *doc(vlax-get-property (vlax-get-acad-object)'ActiveDocument)
           *Model(vlax-get-property *doc'ModelSpace)*blocks(vlax-get-property *doc 'blocks)
           *layers(vlax-get-property *doc 'layers)
           co(acad_colordlg 1 nil))
    (progn
      (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))))
      (vlax-for x *layers
        (setq lys(cons(entget(vlax-vla-object->ename x))lys))
        (vlax-put-property x 'lock 0))
      (vlax-for x *Model
        (VL-CATCH-ALL-APPLY'vlax-put-property(list x'color co))
        (or(VL-CATCH-ALL-ERROR-P(setq n 0 atts(VL-CATCH-ALL-APPLY 'vlax-invoke-method(list x'GetAttributes))))
           (VL-CATCH-ALL-ERROR-P(setq atts(VL-CATCH-ALL-APPLY 'vlax-safearray->list(list(vlax-variant-value atts)))))
           (foreach x atts(vlax-put-property x'color co))))
      (vl-every'entmod lys))))
;;更改所有图元颜色为指定颜色,临时解锁(图层雾化不影响)所有图层,完事恢复所有图层

yjccwf 发表于 2023-5-4 12:31:22

处理条件图好用,变色除了块外 都不会改变原有图层颜色,这样不会导致制图的时候 自己画的东西也变为8号色;天正有这个功能,但天正的就是 全部改变了图层颜色,然后自己绘制的东西 都为8号色;非常不好用!现在免费分享给大家

start4444 发表于 2023-5-4 12:37:54

如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好

hzyhzjjzh 发表于 2023-5-4 13:11:04

感谢分享实用软件。{:1_1:}

yjccwf 发表于 2023-5-4 13:48:11

start4444 发表于 2023-5-4 12:37
如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好

好提议 我找时间优化下:handshake

gxh94 发表于 2023-5-4 14:16:18

我们公司要求建筑底图放在单一的图层里,颜色要为8号色。
我整理底图的思路是,把所选的图层改成0(主要是把块里的图层改为0),把所选的颜色改成0(主要是把块里的颜色改为0),然后把底图放在专门的8号色图层,再把底图选用,颜色改为随层。
以前是用插件,现在公司改用中望后,中望自带的扩展有改块颜色、块图层的功能。

czb203 发表于 2023-5-4 15:01:55

感谢楼主的分享,这个改色插件非常好用。

轻尘 发表于 2023-5-4 18:03:05

支持下....

小毛草 发表于 2023-5-4 21:31:53

本帖最后由 小毛草 于 2023-5-4 21:38 编辑

楼上这个程序,大一点的图速度就慢得死机,有什么办法解决一下?另外,有些图用不了,不知为什么?
页: [1] 2 3 4 5
查看完整版本: 一键改变底图颜色,同时不改变图层颜色。处理条件图...