发个随机改颜色的代码——娱乐用
本帖最后由 183017064 于 2025-8-11 16:57 编辑;; 随机颜色修改子程序
;; 功能:为指定实体随机分配预设颜色列表中的一种颜色
;; 变量说明:
;; shiti - 实体(要修改颜色的对象)
;; yanSeLieBiao - 颜色列表(存储多种颜色代码)
;; suoYin - 索引(用于从颜色列表中随机选取颜色)
(defun SheZhiSuiJiYanSe (shiti / yanSeLieBiao suoYin)
;; 定义颜色列表,包含多种颜色的代码值
(setq yanSeLieBiao '(
40 ; 红色
201 ; 青色
11 ; 黄色
110 ; 紫色
160 ; 橙色
212 ; 粉色
))
;; 利用当前毫秒数生成随机索引(确保在颜色列表长度范围内)
;; rem函数用于取余数,保证索引不会超出列表范围
(setq suoYin (rem (getvar "MILLISECS") (length yanSeLieBiao)))
;; 修改实体颜色属性
;; entmod:修改实体属性的AutoCAD函数
;; append:将两个列表合并
;; entget:获取实体的当前属性数据
;; cons 62 ...:创建颜色属性对(62是AutoCAD中表示颜色的组码)
(entmod
(append
(entget shiti)
(list (cons 62 (nth suoYin yanSeLieBiao)))
)
)
)
;; 恢复随层颜色子程序
;; 功能:将指定实体的颜色恢复为"随层"状态(即跟随所在图层的颜色)
;; 变量说明:
;; shiti - 实体(要恢复颜色的对象)
(defun HuiFuSuiCeng (shiti)
;; 修改实体属性为随层颜色
;; 256是AutoCAD中表示"随层"的颜色代码
(entmod
(append
(entget shiti)
(list (cons 62 256)); 256表示随层颜色
)
)
)
;; 自定义颜色命令
(defun c:C1 () (setcolor 6)) ; 洋红
(defun c:C2 () (setcolor 1)) ; 红色
(defun c:C3 () (setcolor 2)) ; 黄色
(defun c:C4 () (setcolor 3)) ; 绿色
(defun c:C5 () (setcolor 4)) ; 青色
(defun c:C6 () (setcolor 5)) ; 蓝色
(defun c:C7 () (setcolor 11)) ; 棕色
(defun c:C8 () (setcolor 190)) ; 紫色
(defun c:CC () (setcolor 256)) ; 随层
;;; ======================================================
(defun setcolor (colorcode / color-palette color-name ss cnt ent)
;; 颜色名称对照表
(setq color-palette
'(
(1 . "红色") (2 . "黄色") (3 . "绿色")
(4 . "青色") (5 . "蓝色") (6 . "洋红")
(11 . "棕色") (190 . "紫色") (256 . "随层")
)
)
;; 获取颜色名称
(setq color-name
(if (setq temp (assoc colorcode color-palette))
(cdr temp)
"未知颜色"
)
)
;; 显示颜色设置提示
(princ
(strcat
"\n当前颜色: "
color-name
" (代码 "
(itoa colorcode)
")"
)
)
;; 实体选择
(if (setq ss (ssget))
(progn
(setq cnt 0)
(repeat (sslength ss)
(setq ent (ssname ss cnt))
(entmod
(append
(entget ent)
(list (cons 62 colorcode))
)
)
(setq cnt (1+ cnt))
)
;; 显示修改结果
(princ
(strcat
"\n成功修改 "
(itoa cnt)
" 个实体颜色为 "
color-name
)
)
)
;; 空选择提示
(princ "\n未选择任何实体,颜色已设置但未应用")
)
(princ) ; 静默退出
)
;;; ======================================================
(princ "\n颜色快捷命令加载成功 (C1-C8/CC)")
(princ)(defun c:tt(/ ent color-list idx) ; 定义命令
(setq color-list '( ; 颜色列表
40 ; 红色
201 ; 青色
11 ; 黄色
110 ; 紫色
160 ; 橙色
212 ; 粉色
))
(while (setq ent (car (entsel "\n选择实体: "))); 循环选择实体
(setq idx (rem (getvar "MILLISECS") (length color-list))); 生成随机索引
(entmod; 修改实体属性
(append
(entget ent)
(list (cons 62 (nth idx color-list))); 应用随机颜色
); 闭合 append
); 闭合 entmod
); 闭合 while
(princ); 静默退出
)
(defun RandomColorall (/ ent) ; 随机颜色命令
(while (setq ent (car (entsel "\n选实体: ")))
(entmod
(append
(entget ent)
(list (cons 62 (1+ (rem (getvar "MILLISECS") 255))))
)
)
)
(princ)
)作为一个子程序用,当选用一个元素作为基准的话,可以清楚的表达一下。实用性可有可无,添加一点制图的趣味性。(PS:个人认为)
都试了,前者在color-list中随机颜色,后者在1~255中随机颜色。 感谢大佬分享 感谢大佬分享 娱乐性,还能兼做入门学习用! 谢谢大佬分享 jkop 发表于 2025-4-12 10:16
娱乐性,还能兼做入门学习用!
我也没想那么多,就是想,当我们选择一个元素作为基准的时候,能不能清楚一点。
页:
[1]