zark 发表于 2012-8-26 08:01:38

将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的微博

vlisp2012 发表于 2012-8-26 08:24:52

好程序,学习了!!!
页: [1]
查看完整版本: 将AutoCAD 索引颜色(ACI)转成十六进制格式颜色代码