明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 674|回复: 4

[提问] 如何更改全图指定颜色号为新的颜色号

[复制链接]
发表于 2021-3-14 23:28 | 显示全部楼层 |阅读模式
1明经币
经常有的图里设有(255号索引色),或者(255,255,255号色的真彩色),打印的时候就不能把这些白色打出来,这些颜色有的是在嵌套块里或外部参照里,如何快速查找出这两个颜色并换成指定色,例如7号笔。谢谢

最佳答案

查看完整内容

;;; 将图形中所有颜色为 255 或 255,255,255 的对象改为指定ACI颜色 (defun C:TT (/ COL TC CM) (setq *AX:ACAD* (vlax-get-acad-object) *AX:DOC* (vla-get-ActiveDocument *AX:ACAD*) ) (if (setq COL (acad_colordlg 7)) (vlax-for BLK (vla-get-Blocks *AX:DOC*) (vlax-for OBJ BLK (setq TC (vlax-get OBJ 'TrueColor) CM (vlax-get TC 'ColorMethod) ) ...
发表于 2021-3-14 23:28 | 显示全部楼层
本帖最后由 caoyin 于 2021-3-15 02:17 编辑

;;; 将图形中所有颜色为 255 或 255,255,255 的对象改为指定ACI颜色
(defun C:TT (/ COL TC CM)
  (setq *AX:ACAD* (vlax-get-acad-object)
        *AX:DOC*  (vla-get-ActiveDocument *AX:ACAD*)
  )
  (if (setq COL (acad_colordlg 7))
    (vlax-for BLK (vla-get-Blocks *AX:DOC*)
      (vlax-for OBJ BLK
        (setq TC (vlax-get OBJ 'TrueColor)
              CM (vlax-get TC 'ColorMethod)
        )
        (if (or (and (= CM 195)
                     (= (vlax-get TC 'ColorIndex) 255)
                )
                (and (= CM 194)
                     (= (vlax-get TC 'BookName) "")
                     (= (vla-get-red TC)
                        (vla-get-green TC)
                        (vla-get-blue TC)
                        255
                     )
                )
            )
          (vlax-put OBJ 'Color COL)
        )
      )
    )
  )
  (princ)
)

评分

参与人数 1明经币 +1 收起 理由
panliang9 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-3-14 23:46 | 显示全部楼层
需要更改到单行或多行文字、标注,天正对象等
回复

使用道具 举报

 楼主| 发表于 2021-3-18 00:33 | 显示全部楼层
试了下暂时没发现问题,非常感谢,还有点小问题,看能否补充下:
1、如果对象是随层,图层的颜色如果设置成了255或真彩色255,255,255的话,程序是否也会改图层的颜色呢?如果不能,可否加上改图层。
2、程序能否先判断文件是否存在图层或对象有255色,没有就不用改,如果有则进行改成指定颜色。因为程序运行时图大的话还是有点慢的。
麻烦版主了哈
回复

使用道具 举报

发表于 2021-3-18 01:40 | 显示全部楼层
本帖最后由 caoyin 于 2021-3-18 02:13 编辑
sctw 发表于 2021-3-18 00:33
试了下暂时没发现问题,非常感谢,还有点小问题,看能否补充下:
1、如果对象是随层,图层的颜色如果设置 ...

二楼的程序是遍历所有图元(包括块的子图元),对于图形对象数量多的图形,速度肯定会慢
把代码功能分开:
TT------二楼的代码,遍历所有对象
TT1-----只修改套嵌对象
TT2-----只修改一级层面的对象
;;;--------------------------------------------------------------------------------------------
;;; 检索图块中套嵌对象(不检索一级层面的对象),将颜色为 255 或 255,255,255 的对象改为指定颜色,
(defun C:TT1 (/ COL TC CM)
  (setq *AX:ACAD* (vlax-get-acad-object)
        *AX:DOC*  (vla-get-ActiveDocument *AX:ACAD*)
  )
  (if (setq COL (acad_colordlg 7))
    (vlax-for BLK (vla-get-Blocks *AX:DOC*)
      (vlax-for OBJ BLK
        (if (= (vlax-get BLK 'IsLayout) 0)
          (progn
            (setq TC (vlax-get OBJ 'TrueColor)
                CM (vlax-get TC 'ColorMethod)
            )
            (if (or (and (= CM 195)
                         (= (vlax-get TC 'ColorIndex) 255)
                    )
                    (and (= CM 194)
                         (= (vlax-get TC 'BookName) "")
                         (= (vla-get-red TC)
                            (vla-get-green TC)
                            (vla-get-blue TC)
                            255
                         )
                    )
                )
              (vlax-put OBJ 'Color COL)
            )
          )
        )
      )
    )
  )
  (princ)
)
;;; ---------------------------------------------------------------------------------------------
;;; 下面的程序只选择一级层面的对象(不包含套嵌对象),速度会很快。
;;; 将图形中所有颜色为 255 或 255,255,255 的对象 (不包含图块子图元) 改为颜色 7
(defun C:TT2 (/ X LAY X1)
  (while (setq X (tblnext "LAYER" (not X)))
    (setq LAY (cdr (assoc 2 X))
          X   (entget (tblobjname "LAYER" LAY))
    )
    (if (= (cdr (assoc 420 X)) 16777215)
      (setq X1 (vl-remove '(420 . 16777215) X))
      (if (= (cdr (assoc 62 X)) 255)
        (setq X1 (subst '(62 . 7) '(62 . 255) X))
      )
    )
    (if X1
      (progn
        (princ (strcat "\n图层“" LAY "”的颜色被更改为 7。"))
        (entmod X1)
        (setq X1 nil)
      )
    )
  )
  (if (setq SS (ssget "_X" '((-4 . "<OR") (62 . 255) (420 . 16777215) (-4 . "OR>"))))
    (progn
      (setq X1 (sslength SS))
      (princ (strcat "\n" (itoa X1) " 个对象颜色被修改为 7。"))
      (repeat X1
        (setq X1 (1- X1)
              X  (entget (ssname SS X1))
              X  (vl-remove '(420 . 16777215) X)
              X  (subst '(62 . 7) '(62 . 255) X)
        )
        (entmod X)
      )
    )
    (princ "未找到颜色为 255 或 255,255,255 的对象。")
  )
  (princ)
)




回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 07:10 , Processed in 0.150139 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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