牛排包 发表于 2013-4-8 02:27:18

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

如题。自定义一个命令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)
)

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

jj2098 发表于 2013-4-8 11:16:40

试试下面的程序可否满足你的要求:
(DEFUN c:aaa ()
(PRINC "\naaaaa")
)
(DEFUN c:test ( / gr gr-model gr-value)
(SETQgr 0
gr-model 0
gr-value 0
)
(WHILE (OR (/= gr-model 2);非键盘
       (/= gr-value 32) ;非空格键
   )
    (SETQ gr   (GRREAD T)
    gr-model (CAR gr)
    gr-value (CADR gr)
    )
    (c:aaa);你自己的程序放在这里或调用你的程序
)
)

牛排包 发表于 2013-4-8 22:25:36

谢谢!我试了一下,没有实现我想要的那个功能。您可以试试我上面的那段程序。

lincctw_ccl 发表于 2013-4-8 23:09:54

(while    <-----不是就是加了這個嗎?
.
.
(command "_.circle" pt)
);end while
還是我理解錯誤?

牛排包 发表于 2013-4-8 23:40:26

lincctw_ccl 发表于 2013-4-8 23:09 static/image/common/back.gif
(while

建议还是在cad上运行一下。我感觉循环里面嵌套的那个循环,还有(command pause) 都有些用处。还没有真弄明白。正在查函数,学习中。

lincctw_ccl 发表于 2013-4-8 23:48:37

我改成這樣好像結果也是一樣的!!

(defun c:aaa()
(setq Osnapmode (getvar "OSMODE"));
(while (setq pt(getpoint "\n 圓心:"))
    (command "_.circle" pt pause)
)
(princ)
)

wowan1314 发表于 2013-4-8 23:49:35

用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。

牛排包 发表于 2013-4-9 00:08:03

wowan1314 发表于 2013-4-8 23:49 static/image/common/back.gif
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。

现在的情况是按空格也能退出。不晓得是啥原理哎。用空格退出命令,感觉上比esc退出要好看些。

牛排包 发表于 2013-4-9 00:08:48

wowan1314 发表于 2013-4-8 23:49 static/image/common/back.gif
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。

另外,您的头像很经典啊!赞

牛排包 发表于 2013-4-9 00:26:42

我有些明白了。把那些不必要的玄虚都去掉,只留下最核心的部分,这个东东还是不难看明白的。
(defun c:ccc()
(while (setq pt(getpoint "\n ccc 指定圆的圆心:"))
    (command "circle" pt pause)
)(princ)
)
关于为什么空格也能退出,我想这大概是cad自己的某种功能,暂不深究了。
谢谢各位的回帖!
Happy!
页: [1] 2
查看完整版本: 如何反复执行某命令,直到输入空格键退出?