明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 330|回复: 13

[提问] 求高手帮忙看下改颜色的问题

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
参考论坛中sammy的快速改颜色lisp,我自己想弄个简单点的,如下选择图元改为红色,但每次选完后要空格键确认后才会改色,我想要的效果是输入命令后选中就改色(点选或框选),并且能一直选直到esc或空格退出。求论坛高手帮忙看下怎么修改下。
  1. (defun c:gs1 (/ en i obj ss)
  2.   (vl-load-com)
  3.   (setq ss (ssget))
  4.       (setq i 0)
  5.       (while (< i (sslength ss))
  6.       (setq en (ssname ss i));获取图元名
  7.       (setq obj (vlax-ename->vla-object en));转换为VLA对象
  8.       (vla-put-color obj 1);改颜色
  9.       (setq i (+ 1 i))
  10.       )
  11.   (princ)
  12. )

回复

使用道具 举报

发表于 前天 10:18 | 显示全部楼层
薄荷微光 发表于 2024-11-29 09:19
感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢

你复制我的代码再试试。

评分

参与人数 1金钱 +10 收起 理由
薄荷微光 + 10 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 3 天前 | 显示全部楼层
  1. (defun c:gs1 (/ en i obj ss)
  2.   (vl-load-com)
  3.   (while
  4.   (setq ss (ssget ":S"))
  5.       (setq i 0)
  6.       (while (< i (sslength ss))
  7.       (setq en (ssname ss i));获取图元名
  8.       (setq obj (vlax-ename->vla-object en));转换为VLA对象
  9.       (vla-put-color obj 1);改颜色
  10.       (setq i (1+ i))
  11.       )
  12.     )
  13.   (princ)
  14. )


评分

参与人数 1明经币 +1 收起 理由
薄荷微光 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 前天 17:59 | 显示全部楼层
本帖最后由 e2002 于 2024-11-29 18:16 编辑

首先要理清程序的流程。一般的,象这种直接操作对象,选择对象的进行修改某一个特性的,先是输入特性的新的值,然后while选择对象(entsel或者 ssget),这里需要判断对象的类型是否符合要求,还要判断是否选择对象是否在 LockedLayer上(如果是ssget就加上""参数)。

while循环中,主要就是对象访问与修改特性的那些语句,这个想必你已经理解了。修改后一般不需要regen,修改厚的效果就能直接看到的。

另外: 颜色现在是TrueColor,应使用 AcCmColor对象,下面是 sample code:

  1. (setq amColor (vla-GetInterfaceObject acApp (strcat "AutoCAD.AcCmColor." (substr (getvar "ACADVER") 1 2))))
  2.       (vla-put-ColorIndex amColor acCyan)
  3.       (vla-put-TrueColor att amColor)
  4.       (vlax-release-object amColor)



回复 支持 反对

使用道具 举报

发表于 前天 07:15 | 显示全部楼层

麻烦大佬将再修改下,输入指令后再输入颜色数字,然后执行一直选一直改色,知道ESC才退出。
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 09:19 | 显示全部楼层

感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢
回复 支持 反对

使用道具 举报

发表于 前天 10:06 | 显示全部楼层
本帖最后由 kozmosovia 于 2024-11-29 10:17 编辑
  1. (defun c:gs1 (/ aci obj)
  2.   (vl-load-com)
  3.   (if (setq aci 1)
  4.     (while (setq obj (car (nentselp "\n Pick Objects:")))
  5.       (vla-put-color (vlax-ename->vla-object obj) aci)
  6.     )
  7.   )
  8.   (princ)
  9. )
回复 支持 反对

使用道具 举报

发表于 前天 10:12 | 显示全部楼层
薄荷微光 发表于 2024-11-29 09:19
感谢回复,加上while后选中还是要空格确认才能改色,能不能不确认直接改色呢

我在AutoCAD 2007 、AutoCAD 2021、浩辰CAD2025测试了,正常呀,不需要按空格就可以改色的了。
回复 支持 反对

使用道具 举报

发表于 前天 10:27 | 显示全部楼层
测试正常啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 10:40 | 显示全部楼层
qazxswk 发表于 2024-11-29 10:18
你复制我的代码再试试。

看到了第04行加了“:s”,没问题了,请问下这个是什么原理呢
回复 支持 反对

使用道具 举报

发表于 前天 10:46 | 显示全部楼层

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
薄荷微光 + 1 + 10 很给力!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-1 11:49 , Processed in 0.180336 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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