天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 71|回复: 0

【AutoLISP Visual LISP›】普通图元索引色修改为真彩色

[复制链接]
  • TA的每日心情
    开心
    2024-8-31 15:58
  • 签到天数: 89 天

    [LV.6]常住居民II

    488

    主题

    207

    回帖

    3366

    积分

    管理员

    积分
    3366
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    lsp文件里面小程序包含2个简单的功能:

      C:ZCS  统一变成真彩色    【索引色所对应的真彩色】
      C:ZCM 各自变成真彩色    【索引色所对应的真彩色】



    ;;========================================================================================
    ;;统一变色
    (defun C:ZCS( / ss ss_lst RGB RGB_str)
            (princ "\n 索引色改为真彩色--统一变色")
            (if (and
                                    (setq ss (ssget))
                                    (setq *cor_index* (ureal 1 "" "\n\t索引色号" *cor_index*))
                            )
                    (progn
                            (UNDO_S)
                            (setq *error* *error*_E)
                            ;;=============================================================                       
                            (setq RGB (reverse (bb-COLORINDEX->TRUECOLOR *cor_index*)))
                            (setq RGB_str (strcat
                                                                                            (rtos (car RGB) 2 0)
                                                                                            ","
                                                                                            (rtos (cadr RGB) 2 0)
                                                                                            ","
                                                                                            (rtos (caddr RGB) 2 0)
                                                                                    )
                            )
                            ;;=============================================================
                            (setvar "CMDECHO" 0)
                            (command "CHPROP" ss "" "C" "T" RGB_str "")       
                            (setvar "CMDECHO" 1)
                            (princ "\n 索引色改为真彩色--统一变色完成")
                            ;;=============================================================
                            (UNDO_E)                       
                            (princ)
                    )
            )
    )
    ;;========================================================================================
    ;;各自变色
    (defun C:ZCM( / ss ss_lst ename elist cor tc RGB RGB_str CMDECHO_old)
            (princ "\n 索引色改为真彩色--各自变色")
            (if (setq ss (ssget))
                    (progn
                            (defun *error* (msg)
                                    (if (= 8 (logand (getvar "undoctl") 8))
                                            (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
                                    )       
                                    (if CMDECHO_old  (setvar "CMDECHO" CMDECHO_old))
                            )
                            (UNDO_S)
                            (setq CMDECHO_old (getvar "CMDECHO"))
                            (setvar "CMDECHO" 0)
                            ;;=============================================================
                            (setq ss_lst (ss-enlst ss))
                            (foreach ename ss_lst
                                    ;;=============================================================
                                    (setq elist(entget ename))
                                    (if (setq cor (assoc 62 elist));线型如果随层,按图层线型
                                            (princ)
                                            (progn
                                                    (setq tc (cdr (assoc 8 elist)));随层,获取图层线型
                                                    (setq tc (tblsearch "layer" tc));;图层信息
                                                    (setq cor (assoc 62 tc));;查询图层线型
                                            )
                                    )
                                    ;;=============================================================
                                    (setq RGB (reverse (bb-COLORINDEX->TRUECOLOR (cdr cor))))
                                    (setq RGB_str (strcat
                                                                                                    (rtos (car RGB) 2 0)
                                                                                                    ","
                                                                                                    (rtos (cadr RGB) 2 0)
                                                                                                    ","
                                                                                                    (rtos (caddr RGB) 2 0)
                                                                                            )
                                    )
                                    ;;=============================================================
                                    (command "CHPROP" (ssadd ename) "" "C" "T" RGB_str "")       
                                    ;;=============================================================                                       
                            )
                            (princ "\n 索引色改为真彩色--各自变色--修改完成")
                            (setvar "CMDECHO" CMDECHO_old)
                            (UNDO_E)               
                            (princ)
                    )
            )
    )
    ;;========================================================================================
    ;;索引色转真彩色
    (defun bb-ColorIndex->Truecolor        (col / Truecolor color)
            (setq TrueColor(vla-get-TrueColor(vlax-ename->vla-object(tblobjname "layer""0"))))
            (setq colorIndex (vla-get-colorIndex Truecolor))
            (vla-put-ColorIndex Truecolor col)
            (setq color
                    (mapcar
                            '(lambda(x)(vlax-get TrueColor x))
                            '(Blue Green Red)
                    )
            )
            (vla-put-colorIndex Truecolor colorIndex)
            color
    )
    ;;========================================================================================
    ;选择集与对象名表互转
    (defun ss-enlst        (ss / enlst)
            (cond
                    ((= (type ss) 'PICKSET)
                            (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
                    )
                    ((= (type ss) 'LIST)
                            (setq enlst (ssadd))
                            (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
                    )
            )
    )
    ;;========================================================================================               
    ;;编组出错处理
    (defun *error*_E(MSG)
            (if (= 8 (logand (getvar "undoctl") 8))
                    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
            )               
    )
    ;;========================================================================================               
    ;;undo结束
    (defun UNDO_E()
            (if (= 8 (logand (getvar "undoctl") 8))
                    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
            )               
    )
    ;;========================================================================================                       
    ;;undo开始
    (defun UNDO_S()
            (undo_e)       
            (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
    )
    ;;========================================================================================               
    (defun ureal (bit kwd msg def / inp)
            (if def
                    (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
                            bit (* 2 (fix (/ bit 2)))
                    )
                    (setq msg (strcat "\n" msg ": "))
            )
            (initget bit kwd)
            (setq inp (getreal msg))
            (if inp inp def)
    )

     

     

     

     

    【AutoLISP Visual LISP›】普通图元索引色修改为真彩色
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池| |网站地图

    GMT+8, 2024-9-8 10:56 , Processed in 0.069398 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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