将AutoCAD 索引颜色(ACI)转成十六进制格式颜色代码
本帖最后由 zark 于 2012-8-26 08:02 编辑发贴之前也搜索了相关的颜色转换,有明总的ACI->RGB,也有高飞鸟的ACI<-->HSL格式等,都没看到之前我所需要的ACI->HEX
现在跟大家一起分享一下
;部分函数参考明总帖子
(defun $ACI->HEX (i /
ColorIndex-to-TrueColor
TrueColor-red-value TrueColor-green-value
TrueColor-blue-value
$RGB->HEX BLUE
COLOR GREEN
RED
)
(defun ColorIndex-to-TrueColor
(ci / TrueColor-make colorObj TrueColor)
(defun TrueColor-make (r g b /)
(+ (lsh (fix r) 16) (lsh (fix g) 8) (fix b))
)
(vl-load-com)
(and (setq colorObj (vla-getinterfaceobject
(vlax-get-acad-object)
"AutoCAD.AcCmColor.16"
);此处不同版本的CAD后面需要做下修改
)
(>= ci 1)
(<= ci 255)
(not
(vl-catch-all-error-p
(vl-catch-all-apply 'vla-put-ColorIndex (list colorObj ci))
)
)
(setq TrueColor (TrueColor-make
(vla-get-red colorObj)
(vla-get-green colorObj)
(vla-get-blue colorObj)
)
)
)
TrueColor
)
(defun $RGB->HEX (I / A B)
(defun $ItoH (I /)
(if (<= i 9)
(itoa i)
(chr (+ i 55))
)
)
(setq a (/ i 16)
b (rem i 16)
)
(strcat ($ItoH a) ($ItoH b))
)
(defun TrueColor-red-value (c /)
(lsh (fix c) -16)
)
(defun TrueColor-green-value (c / r)
(lsh (lsh (fix c) 16) -24)
)
(defun TrueColor-blue-value (c /)
(lsh (lsh (fix c) 24) -24)
)
(setq Color (ColorIndex-to-TrueColor i)
Red (TrueColor-red-value color)
green (TrueColor-green-value color)
blue(TrueColor-blue-value color)
)
(mapcar '$RGB->HEX (List Red green blue))
)
(defun $ACI->SHEX (I / L)
(setq L ($ACI->HEX I))
(strcat "#" (car L) (cadr L) (caddr L))
)
;;;测试($ACI->SHEX 1)#FF0000
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 zark的微博 好程序,学习了!!!
页:
[1]