明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1324|回复: 5

[提问] 如何点选获取任何对象当前显示的颜色值

[复制链接]
发表于 2021-9-30 22:29:48 | 显示全部楼层 |阅读模式
5明经币
对象包括:单个对象,块内对象,多行文字,属性块以及外部参照块内对象等。
结果:点选对象,就能弹出此对象当前显示的颜色,是索引色就显示1-255色值,是真彩色就显示RGB的色值。(不是显示颜色为随层、随块或与看到的不一样的颜色值)

 楼主| 发表于 2021-9-30 22:36:48 | 显示全部楼层
1、由于CAD对象分随层、随块和指定对象颜色,如果对象建成块后,块又可设置成随层、随块或指定颜色,导致最终我们看到的对象颜色不能快速查看到;
2、CAD中的多行文字或标注文字又是在文字属性中设置颜色,提取颜色值方式与线条组码不同;
所以在查询对象颜色时很费事,导致在打印样式表里不能方便按该颜色设置线条粗细或淡显等,请高手写个lisp程序解决下,
回复

使用道具 举报

发表于 2021-9-30 23:14:16 | 显示全部楼层
;;;扩展的List
(defun c:TT5 (/ i se et en col lc colorname oldcmd olderr newerr)
  (defun newerr        (s)
    (if        s
      (progn
        (setq *error* olderr)
        (setvar "cmdecho" oldcmd)
        (princ "Error: ")
        (princ s)
      )
    )
  )
  (setq        oldcmd        (getvar "cmdecho")
        olderr        *error*
        *error*        newerr
  )
  (setvar "cmdecho" 0)
  (command "_.undo" "_be")
  (setq se (ssget))
  (if se
    (progn
      (defun colorname (cn)
        (cond
          ((= cn 1) "(1 red)")
          ((= cn 2) "(2 yellow)")
          ((= cn 3) "(3 green)")
          ((= cn 4) "(4 cyan)")
          ((= cn 5) "(5 blue)")
          ((= cn 6) "(6 magenta)")
          ((= cn 7) "(7 white)")
          (T (strcat "(" (itoa cn) ")"))
        )
      )
      (princ "\n")
      (setq i -1)
      (repeat (sslength se)
        (setq i          (1+ i)
              et  (ssname se i)
              en  (entget et)
              col (assoc 62 en)
        )
        (if (not col)
          (setq col 256)
          (setq col (cdr col))
        )
        (if (= col 256)
          (progn
            (setq lc
                   (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 en)))))
            )
            (princ (strcat "\n                   颜色: Bylayer"
                           (colorname lc)
                   )
            )
          )
        )
        (command "list" et "")
        (if (< i (- (sslength se) 1))
          (progn
            (princ "\nPress ENTER to continue:")
            (while (/= (car (grread)) 2))
            (princ "\n")
          )
        )
      )
    )
  )
  (command "_.undo" "_e")
  (setvar "cmdecho" oldcmd)
  (setq *error* olderr)
  (princ)
)
(princ)

之前收藏的一个程序,可以试试
回复

使用道具 举报

 楼主| 发表于 2021-10-1 01:56:35 | 显示全部楼层
本帖最后由 sctw 于 2021-10-1 02:02 编辑

完全不能查到真实显示的颜色哟,块内对象都不行的
回复

使用道具 举报

发表于 2021-10-4 08:58:11 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-10-4 21:58:10 | 显示全部楼层
@菜卷鱼,谢谢你的回复,但你这个只是显示对象定义了颜色的,对于随层、随块以及多行文字也不能显示出正确的值来
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 15:38 , Processed in 0.176053 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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