azbk00 发表于 2015-11-2 22:52:35

求一个简单的cad宏代码

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


azbk00 发表于 2015-11-3 09:17:57


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

ZZXXQQ 发表于 2015-11-3 14:50:16

本帖最后由 ZZXXQQ 于 2015-11-3 14:52 编辑

azbk00 发表于 2015-11-3 09:17 http://bbs.mjtd.com/static/image/common/back.gif
抱歉Z大,可能是我没讲清楚,我没想用lisp调用,就是要在这个“自定义用户界面”里直接填入宏代码的,这里 ...

'LAYER OFF ~BEAM Y on COLU;;

azbk00 发表于 2015-11-3 17:35:07

ZZXXQQ 发表于 2015-11-3 14:50 static/image/common/back.gif
'LAYER OFF ~BEAM Y on COLU;;


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

ZZXXQQ 发表于 2015-11-4 08:40:23

(if ll (progn (command "'LAYER" "ON" "COLU,BEAM,AXIS" "") (setq ll nil)) (progn (command "'LAYER" "OFF" "COLU,BEAM,AXIS" "") (setq ll T)))

azbk00 发表于 2015-11-4 09:54:52

本帖最后由 azbk00 于 2015-11-4 10:04 编辑

ZZXXQQ 发表于 2015-11-4 08:40 static/image/common/back.gif
(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大能指点一下吗?


ll_j 发表于 2015-11-4 10:09:36

你在菜单中看到的有$的宏是DIESEL语言,Z版使用的就是Lisp语言,所以看上去不同。
知道Z版使用的是Lisp语言,就应该知道单引号的作用了吧,就是回车。

azbk00 发表于 2015-11-4 10:38:10

ll_j 发表于 2015-11-4 10:09 static/image/common/back.gif
你在菜单中看到的有$的宏是DIESEL语言,Z版使用的就是Lisp语言,所以看上去不同。
知道Z版使用的是Lisp语言 ...

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

ll_j 发表于 2015-11-4 12:30:45

azbk00 发表于 2015-11-4 10:38 static/image/common/back.gif
我知道得不多,单引号在lisp中不是表示“不求值,直接引用”吗?
如果单纯使用lisp语言的话,不加单引号 ...

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

azbk00 发表于 2015-11-4 12:52:35

ll_j 发表于 2015-11-4 12:30 static/image/common/back.gif
对不起,看错了,谢谢Z版提醒。
菜单不仅可以使用DIESEL(字符串表达式语言)和AutoLisp语言,也可以使用 ...

同样都是大神,解释得很详细,在此表示对两位的钦佩。能再麻烦你看下我6楼中的第三个小问题吗?
页: [1] 2
查看完整版本: 求一个简单的cad宏代码