明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 牛排包

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

[复制链接]
 楼主| 发表于 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)
)

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

点评

程序有误。当输入透明命令时会出错。  发表于 2013-4-9 12:48
发表于 2013-4-9 12:35:39 | 显示全部楼层
本帖最后由 jj2098 于 2013-4-10 16:28 编辑
  1. ;;下面是楼主的程序
  2. (DEFUN c:ccc (pt)
  3.   (COMMAND "circle" pt pause)
  4.   (PRINC)
  5. )
  6. ;;主程序,程序名: TEST
  7. (DEFUN c:test (/ loop gr gr-model gr-value)
  8.   (SETQ  loop t)
  9.      (princ "\n为第一个圆指定圆心:")
  10.   (WHILE loop
  11.     (SETQ gr     (GRREAD T)
  12.     gr-model (CAR gr)
  13.     gr-value (CADR gr)
  14.     )
  15.     (COND ((AND  (= gr-model 2) ;键盘
  16.     (= gr-value 32);空格键
  17.      )         
  18.      (SETQ loop nil)
  19.     )
  20.     ((= gr-model 3);鼠标左键
  21.      (c:ccc gr-value);调用你自己的程序
  22.      (princ "\n为下一个圆指定圆心:")
  23.     )
  24.     (T nil)
  25.     )
  26.   )
  27. )
复制代码


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

点评

刚才没仔细看,是我冲动了,2了。输入ccc空格,用了我自己的程序,功能实现。用该楼的test程序,可以连续画圆,但是无法空格退出。您那里没有cad吗?疑问中……  发表于 2013-4-9 21:48
成了,功能完美实现。正在学习。谢了!  发表于 2013-4-9 21:44
 楼主| 发表于 2013-4-9 22:06:58 | 显示全部楼层
本帖最后由 牛排包 于 2013-4-9 22:07 编辑
wowan1314 发表于 2013-4-8 23:49
用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
抱歉,上次调试时加载了其他的程序,现在做了更改,请再试一下看。

功能实现了,但是输入圆心时没有捕捉功能,没法精确定位。
发表于 2013-4-11 10:06:17 | 显示全部楼层
本帖最后由 jj2098 于 2013-4-11 10:08 编辑
牛排包 发表于 2013-4-10 21:45
功能实现了,但是输入圆心时没有捕捉功能,没法精确定位。

从网站里查了一下可以同时接受点输入和空格输入的做法,程序调整如下:
  1. ;;下面是楼主的程序
  2. (DEFUN c:ccc (pt)
  3.   (COMMAND "_.circle" pt pause)
  4.   (PRINC)
  5. )
  6. ;;主程序,程序名: TEST
  7. (DEFUN c:test (/ loop gr gr-model gr-value)
  8.   (SETQ loop T)
  9.   (SETQ pt (GETPOINT "\n圓心:"))
  10.   (WHILE loop
  11.     (c:ccc pt);调用你自己的程序
  12.     (INITGET 1 " ")
  13.     (SETQ pt (getpoint "/n圓心: "))
  14.     (IF        (EQUAL pt "")
  15.       (SETQ loop nil)
  16.     )
  17.   )
  18. )
复制代码
发表于 2014-5-29 08:49:45 | 显示全部楼层
楼上的方法很扫盲,用 INITGET  getpoint 搭配来实现楼主的想法。
发表于 2016-8-2 12:27:02 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-19 19:38 , Processed in 0.179082 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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