求高手帮忙看下改颜色的问题
参考论坛中sammy的快速改颜色lisp,我自己想弄个简单点的,如下选择图元改为红色,但每次选完后要空格键确认后才会改色,我想要的效果是输入命令后选中就改色(点选或框选),并且能一直选直到esc或空格退出。求论坛高手帮忙看下怎么修改下。(defun c:gs1 (/ en i obj ss)(vl-load-com)
(setq ss (ssget))
(setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i));获取图元名
(setq obj (vlax-ename->vla-object en));转换为VLA对象
(vla-put-color obj 1);改颜色
(setq i (+ 1 i))
)
(princ)
)
薄荷微光 发表于 2024-11-29 09:19
感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢
你复制我的代码再试试。 (defun c:gs1 (/ en i obj ss)
(vl-load-com)
(while
(setq ss (ssget ":S"))
(setq i 0)
(while (< i (sslength ss))
(setq en (ssname ss i));获取图元名
(setq obj (vlax-ename->vla-object en));转换为VLA对象
(vla-put-color obj 1);改颜色
(setq i (1+ i))
)
)
(princ)
)
本帖最后由 e2002 于 2024-11-29 18:16 编辑
首先要理清程序的流程。一般的,象这种直接操作对象,选择对象的进行修改某一个特性的,先是输入特性的新的值,然后while选择对象(entsel或者 ssget),这里需要判断对象的类型是否符合要求,还要判断是否选择对象是否在 LockedLayer上(如果是ssget就加上":L"参数)。
while循环中,主要就是对象访问与修改特性的那些语句,这个想必你已经理解了。修改后一般不需要regen,修改厚的效果就能直接看到的。
另外: 颜色现在是TrueColor,应使用 AcCmColor对象,下面是 sample code:
(setq amColor (vla-GetInterfaceObject acApp (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
(vla-put-ColorIndex amColor acCyan)
(vla-put-TrueColor att amColor)
(vlax-release-object amColor)
qazxswk 发表于 2024-11-28 23:54
麻烦大佬将再修改下,输入指令后再输入颜色数字,然后执行一直选一直改色,知道ESC才退出。 qazxswk 发表于 2024-11-28 23:54
感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢 本帖最后由 kozmosovia 于 2024-11-29 10:17 编辑
(defun c:gs1 (/ aci obj)
(vl-load-com)
(if (setq aci 1)
(while (setq obj (car (nentselp "\n Pick Objects:")))
(vla-put-color (vlax-ename->vla-object obj) aci)
)
)
(princ)
) 薄荷微光 发表于 2024-11-29 09:19
感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢
我在AutoCAD 2007 、AutoCAD 2021、浩辰CAD2025测试了,正常呀,不需要按空格就可以改色的了。 测试正常啊 qazxswk 发表于 2024-11-29 10:18
你复制我的代码再试试。
看到了第04行加了“:s”,没问题了,请问下这个是什么原理呢 多学习就知道了。
http://bbs.mjtd.com/thread-84736-1-1.html