明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1623|回复: 13

[已解答] 求一个简单的cad宏代码

[复制链接]
发表于 2015-11-2 22:52 | 显示全部楼层 |阅读模式
2明经币
我想实现通过按一个组合键,在不打断当前命令的情况下,达到来回切换“单独显示COLU、BEAM和AXIS图层”和“显示所有图层”。
本来这个“单独显示COLU、BEAM和AXIS图层”我知道lisp可以用一句代码来实现:
(command "_layer" "off" (strcat "~" "BEAM") "Y" "on" "COLU" "")
即使是要达到来回切换的功能,可以用if语句判断下图层的状态。但宏命令有一点比lisp好用,就是lisp的命令必须是单独执行,而宏命令可以在不打断当前命令的情况下去执行,比如我已经执行了copy命令,在需要选取目标的时候,还可以通过按ctrl等组合键来执行宏命令,实现切换图层开关显示等功能。
只要有宏代码,就可以在cui里面设定执行的快捷键。无奈本人也是lisp新手,更别提宏命令了。不知道论坛有没有哪位大大懂的,可以帮我实现小小的心愿,感激不尽!


点评

理解错误。宏代码是用SCRIPT命令调用的。如果用LISP调用,将不会返回调用程序。更别说在别的命令中调用了。  发表于 2015-11-3 07:56
 楼主| 发表于 2015-11-3 09:17 | 显示全部楼层

抱歉Z大,可能是我没讲清楚,我没想用lisp调用,就是要在这个“自定义用户界面”里直接填入宏代码的,这里还能自由设置组合键。就是不知道执行这样命令的宏代码该怎么写,所以才来请教

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2015-11-3 14:50 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2015-11-3 14:52 编辑
azbk00 发表于 2015-11-3 09:17
抱歉Z大,可能是我没讲清楚,我没想用lisp调用,就是要在这个“自定义用户界面”里直接填入宏代码的,这里 ...


'LAYER OFF ~BEAM Y on COLU;;
回复

使用道具 举报

 楼主| 发表于 2015-11-3 17:35 | 显示全部楼层
ZZXXQQ 发表于 2015-11-3 14:50
'LAYER OFF ~BEAM Y on COLU;;


Z大,我这里写上了你的代码,按组合键ctrl+F2,好像什么都没有发生。而且,我还希望的是来回切换"单独显示COLU、BEAM和AXIS图层”和“显示所有图层"。我知道这可能是核心代码,但原谅我真的是对宏不了解,少个符号可能我都看不出来,麻烦Z大能给出完整的宏代码,我直接粘贴过去就能用了,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2015-11-4 08:40 | 显示全部楼层
(if ll (progn (command "'LAYER" "ON" "COLU,BEAM,AXIS" "") (setq ll nil)) (progn (command "'LAYER" "OFF" "COLU,BEAM,AXIS" "") (setq ll T)))

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
azbk00 + 1 + 20 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-11-4 09:54 | 显示全部楼层
本帖最后由 azbk00 于 2015-11-4 10:04 编辑
ZZXXQQ 发表于 2015-11-4 08:40
(if ll (progn (command "'LAYER" "ON" "COLU,BEAM,AXIS" "") (setq ll nil)) (progn (command "'LAYER" "O ...

万分感谢Z大!!!
你的代码可以用,我依葫芦画瓢按照自己要求稍微改了下:
(if ll (progn (command "'LAYON") (setq ll nil)) (progn (command "'LAYER" "OFF" "~BEAM" "Y" "ON" "COLU" "ON" "AXIS" "") (setq ll T)))
觉得好神奇,想再追问Z大几个问题,望不吝指教:
1、cad中原生的宏代码都是各种$M、$、'_.、让我真心看不懂,比如这种
     $M=$(if,$(and,$(getvar,ShowPaletteState),1),^C^C_HIDEPALETTES,^C^C_SHOWPALETTES)
     但是Z大给出的代码跟lisp语言是一样的,这个我能看得懂。难道说这个宏代码既可以写vba,也可以写lisp吗?
2、即使把上述代码看作lisp语言,但"'LAYER"之中的这个单引号“'”不知道是什么意思,是宏命令中特有的写法吗?
3、实际测试中,(command "'LAYON") 打开所有图层的速度是非常慢的,要等好几秒,其实我就是想把所有关闭的图层都打开,不知道有没有运行速度更快的写法?我用Msteel工具箱的时候,用它的打开所有图层命令几乎就是秒开了,我想应该是有更快的方法的,Z大能指点一下吗?


点评

3:‘LAYER ON *;;  发表于 2015-11-4 15:15
回复

使用道具 举报

发表于 2015-11-4 10:09 | 显示全部楼层
你在菜单中看到的有$的宏是DIESEL语言,Z版使用的就是Lisp语言,所以看上去不同。
知道Z版使用的是Lisp语言,就应该知道单引号的作用了吧,就是回车。

点评

单引号是透明命令的前缀  发表于 2015-11-4 11:56
回复

使用道具 举报

 楼主| 发表于 2015-11-4 10:38 | 显示全部楼层
ll_j 发表于 2015-11-4 10:09
你在菜单中看到的有$的宏是DIESEL语言,Z版使用的就是Lisp语言,所以看上去不同。
知道Z版使用的是Lisp语言 ...

我知道得不多,单引号在lisp中不是表示“不求值,直接引用”吗?
如果单纯使用lisp语言的话,不加单引号,直接用command "LAYER" 也是可以的吗?
回复

使用道具 举报

发表于 2015-11-4 12:30 | 显示全部楼层
azbk00 发表于 2015-11-4 10:38
我知道得不多,单引号在lisp中不是表示“不求值,直接引用”吗?
如果单纯使用lisp语言的话,不加单引号 ...

对不起,看错了,谢谢Z版提醒。
菜单不仅可以使用DIESEL(字符串表达式语言)和AutoLisp语言,也可以使用命令脚本(Script)格式语句,Z版在三楼的回复正是命令脚本的格式,开始的“'"(单引号)是指可以透明使用的命令。
可以透明使用的命令,也简称透明命令,就是可以在一些命令没有终止时使用的命令,不是所有的命令都可以透明使用的,可以透明使用的命令可以在其它命令执行过程中输入单引号引导,比如:‘pan、’z等。
这就是你在顶楼表述中的概念不清之处,其实透明命令的使用与是否快捷键无关,只与命令本身有关。
回复

使用道具 举报

 楼主| 发表于 2015-11-4 12:52 | 显示全部楼层
ll_j 发表于 2015-11-4 12:30
对不起,看错了,谢谢Z版提醒。
菜单不仅可以使用DIESEL(字符串表达式语言)和AutoLisp语言,也可以使用 ...

同样都是大神,解释得很详细,在此表示对两位的钦佩。能再麻烦你看下我6楼中的第三个小问题吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 00:01 , Processed in 0.286575 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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