马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Lispboy 于 2016-11-26 19:55 编辑
最近不少关于颜色方面的帖子,整理下自己的想法
关于实体的:
实体的颜色不能只靠LISP读取62组码来判断,因为现在ACAD支持真彩色了,如果实体是赋予了真彩色,那么组码62就不能用了,要读组码420的值。
((-1 . <图元名: -8a9150>) (0 . "LINE") (330 . <图元名: -8f8308>) (5 . "BAE") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 12) (420 . 13107200)
(100 . "AcDbLine") (10 8337.29 1629.11 0.0) (11 8537.48 1892.74 0.0) (210 0.0
0.0 1.0))
所以获得颜色的代码要考虑真彩色
AUTOLISP代码:
(defun getcolor (ent / b clr ed g r)
(if (setq ed (entget ent))
(progn
(cond
((setq clr (cdr (assoc 420 ed)))
(setq r (lsh clr -16)
g (lsh (- clr (lsh r 16)) -8)
b (- clr (lsh r 16)(lsh g 8))
)
(list r g b)
)
(t
(cdr (assoc 62 ed))
)
)
)
)
)
VLISP 代码:
(defun getcolor (ent / clr m o)
(if (and
(setq o (vlax-ename->vla-object ent))
(setq clr (vla-get-truecolor o))
(setq m (vla-get-colormethod clr))
)
(progn
(cond
((= 194 m)
(list (vla-get-red clr) (vla-get-green clr) (vla-get-blue clr))
)
(t
(vla-get-colorindex clr)
)
)
)
)
)
XDRX API 就一行代码
(xdrx_getpropertyvalue ent "color")
|