一键改变底图颜色,同时不改变图层颜色。处理条件图...
本帖最后由 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-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))))
;;更改所有图元颜色为指定颜色,临时解锁(图层雾化不影响)所有图层,完事恢复所有图层 处理条件图好用,变色除了块外 都不会改变原有图层颜色,这样不会导致制图的时候 自己画的东西也变为8号色;天正有这个功能,但天正的就是 全部改变了图层颜色,然后自己绘制的东西 都为8号色;非常不好用!现在免费分享给大家 如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好 感谢分享实用软件。{:1_1:} start4444 发表于 2023-5-4 12:37
如果块不是随层色就不行了,论坛很多块颜色处理代码,结合一下就好
好提议 我找时间优化下:handshake 我们公司要求建筑底图放在单一的图层里,颜色要为8号色。
我整理底图的思路是,把所选的图层改成0(主要是把块里的图层改为0),把所选的颜色改成0(主要是把块里的颜色改为0),然后把底图放在专门的8号色图层,再把底图选用,颜色改为随层。
以前是用插件,现在公司改用中望后,中望自带的扩展有改块颜色、块图层的功能。 感谢楼主的分享,这个改色插件非常好用。 支持下.... 本帖最后由 小毛草 于 2023-5-4 21:38 编辑
楼上这个程序,大一点的图速度就慢得死机,有什么办法解决一下?另外,有些图用不了,不知为什么?