牛排包 发表于 2013-4-9 12:06:08

本帖最后由 牛排包 于 2013-4-9 22:49 编辑

(defun c:fff()
(setq Osnapmode (getvar "OSMODE"));获得当前捕捉模式
(while (setq pt(getpoint "\n fff 指定直线起点:"))
    (command "line" pt)
    (while (/= 0 (getvar "cmdactive"))
      (command pause)
    )
)(princ)
)

这个是直线的相关程序。看来需要根据执行的命令的执行方式做一点调整。

jj2098 发表于 2013-4-9 12:35:39

本帖最后由 jj2098 于 2013-4-10 16:28 编辑

;;下面是楼主的程序
(DEFUN c:ccc (pt)
(COMMAND "circle" pt pause)
(PRINC)
)
;;主程序,程序名: TEST
(DEFUN c:test (/ loop gr gr-model gr-value)
(SETQloop t)
   (princ "\n为第一个圆指定圆心:")
(WHILE loop
    (SETQ gr   (GRREAD T)
    gr-model (CAR gr)
    gr-value (CADR gr)
    )
    (COND ((AND(= gr-model 2) ;键盘
    (= gr-value 32);空格键
   )         
   (SETQ loop nil)
    )
    ((= gr-model 3);鼠标左键
   (c:ccc gr-value);调用你自己的程序
   (princ "\n为下一个圆指定圆心:")
    )
    (T nil)
    )
)
)

抱歉,上次调试时加载了其他的程序,现在做了更改,请再试一下看。

牛排包 发表于 2013-4-9 22:06:58

本帖最后由 牛排包 于 2013-4-9 22:07 编辑

wowan1314 发表于 2013-4-8 23:49 static/image/common/back.gif
用While做成死循环。这样退出必须是按esc。楼主的例子是调用cad命令但参数不全时常用代码。
按照你后面提供的“空格也能退出是getpoint函数的原因”这条信息,我大概猜出了while的执行顺序。以连续画圆那个程序为例,先执行(getpoint "\n 圓心:"),再执行 (setq pt(……)),第一步读取圆心时,如果以鼠标输入圆心,第二部setq就会正常执行下去,于是while可以循环下去;如果执行(getpoint "\n 圓心:")时,输入空格,就会返回nil,于是再执行 (setq pt(……))同样返回nil,于是循环条件不成立,就跳出循环了。
不晓得猜的是否对路?

牛排包 发表于 2013-4-10 21:45:57

jj2098 发表于 2013-4-9 12:35 static/image/common/back.gif
抱歉,上次调试时加载了其他的程序,现在做了更改,请再试一下看。

功能实现了,但是输入圆心时没有捕捉功能,没法精确定位。

jj2098 发表于 2013-4-11 10:06:17

本帖最后由 jj2098 于 2013-4-11 10:08 编辑

牛排包 发表于 2013-4-10 21:45 http://bbs.mjtd.com/static/image/common/back.gif
功能实现了,但是输入圆心时没有捕捉功能,没法精确定位。
从网站里查了一下可以同时接受点输入和空格输入的做法,程序调整如下:
;;下面是楼主的程序
(DEFUN c:ccc (pt)
(COMMAND "_.circle" pt pause)
(PRINC)
)
;;主程序,程序名: TEST
(DEFUN c:test (/ loop gr gr-model gr-value)
(SETQ loop T)
(SETQ pt (GETPOINT "\n圓心:"))
(WHILE loop
    (c:ccc pt);调用你自己的程序
    (INITGET 1 " ")
    (SETQ pt (getpoint "/n圓心: "))
    (IF      (EQUAL pt "")
      (SETQ loop nil)
    )
)
)

liyamg 发表于 2014-5-29 08:49:45

楼上的方法很扫盲,用 INITGETgetpoint 搭配来实现楼主的想法。

start4444 发表于 2016-8-2 12:27:02

页: 1 [2]
查看完整版本: 如何反复执行某命令,直到输入空格键退出?