明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6683|回复: 16

如何反复执行某命令,直到输入空格键退出?

[复制链接]
发表于 2013-4-8 02:27 | 显示全部楼层 |阅读模式
如题。自定义一个命令ccc(),如何反复执行该命令,直到输入空格键退出?
比如ccc()就是画一个圆(command "c").
我见过一个例子,如下:
(defun c:aaa()
  (setq Osnapmode (getvar "OSMODE"));获得当前捕捉模式
  (while (setq pt(getpoint "\n 圆心:"))
    (command "_.circle" pt)
    (while (/= 0 (getvar "cmdactive"))
      (command pause)  
    )
  )(princ)
)

就是想实现这样的功能。但是不知道怎样把命令从画圆扩展到任意命令。
求教。

发表于 2013-4-8 11:16 | 显示全部楼层
试试下面的程序可否满足你的要求:
  1. (DEFUN c:aaa ()
  2.   (PRINC "\naaaaa")
  3. )
  4. (DEFUN c:test ( / gr gr-model gr-value)
  5.   (SETQ  gr 0
  6.   gr-model 0
  7.   gr-value 0
  8.   )
  9.   (WHILE (OR (/= gr-model 2)  ;非键盘
  10.        (/= gr-value 32) ;非空格键
  11.    )
  12.     (SETQ gr     (GRREAD T)
  13.     gr-model (CAR gr)
  14.     gr-value (CADR gr)
  15.     )
  16.     (c:aaa);你自己的程序放在这里或调用你的程序
  17.   )
  18. )
复制代码

点评

不错的想法 可以实现的啊  发表于 2015-6-26 11:08
自定义命令的引用没有问题,但是画完第一个圆以后自动退出。不能实现连续画圆的功能。空格退出暂时无从验证。  发表于 2013-4-9 10:10
额,对不起!是我没仔细看。我看懂你的意思了。前面是自定义的子程序。后面在中间引用了该子程序。  发表于 2013-4-9 10:05
另外: (DEFUN c:aaa () (PRINC "\naaaaa") ) (DEFUN c:test ( / gr gr-model gr-value) ……) 这两段脱节,看不明白是什么关系。  发表于 2013-4-9 10:03
就执行(command "circle")。二楼的程序在cad中不能实现想要的功能。建议上机试验。  发表于 2013-4-9 10:01
 楼主| 发表于 2013-4-8 22:25 | 显示全部楼层
谢谢!我试了一下,没有实现我想要的那个功能。您可以试试我上面的那段程序。
发表于 2013-4-8 23:09 | 显示全部楼层
(while    <-----不是就是加了這個嗎?
.
.
(command "_.circle" pt)
);end while
還是我理解錯誤?
 楼主| 发表于 2013-4-8 23:40 | 显示全部楼层
lincctw_ccl 发表于 2013-4-8 23:09
(while

建议还是在cad上运行一下。我感觉循环里面嵌套的那个循环,还有(command pause) 都有些用处。还没有真弄明白。正在查函数,学习中。
发表于 2013-4-8 23:48 | 显示全部楼层
我改成這樣好像結果也是一樣的!!

(defun c:aaa()
  (setq Osnapmode (getvar "OSMODE"));
  (while (setq pt(getpoint "\n 圓心:"))
    (command "_.circle" pt pause)
  )
(princ)
)
发表于 2013-4-8 23:49 | 显示全部楼层
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。
 楼主| 发表于 2013-4-9 00:08 | 显示全部楼层
wowan1314 发表于 2013-4-8 23:49
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。

现在的情况是按空格也能退出。不晓得是啥原理哎。用空格退出命令,感觉上比esc退出要好看些。
 楼主| 发表于 2013-4-9 00:08 | 显示全部楼层
wowan1314 发表于 2013-4-8 23:49
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。

另外,您的头像很经典啊!赞
 楼主| 发表于 2013-4-9 00:26 | 显示全部楼层
我有些明白了。把那些不必要的玄虚都去掉,只留下最核心的部分,这个东东还是不难看明白的。
(defun c:ccc()
  (while (setq pt(getpoint "\n ccc 指定圆的圆心:"))
    (command "circle" pt pause)
  )(princ)
)
关于为什么空格也能退出,我想这大概是cad自己的某种功能,暂不深究了。
谢谢各位的回帖!
Happy!

点评

我在二楼的程序中就采用了空格退出的方法。楼主不妨给出一个你想连续运行的命令,加到我那个程序中即可。  发表于 2013-4-9 09:42
而且花园不用后面的循环也可以!如果是画线就必须要!我理解是这样  发表于 2013-4-9 01:02
空格也能退出是getpont函数的原因。这个还不是死循环啊!死循环就只能esc了  发表于 2013-4-9 00:58
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 07:18 , Processed in 0.168490 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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