(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-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: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,于是循环条件不成立,就跳出循环了。
不晓得猜的是否对路? jj2098 发表于 2013-4-9 12:35 static/image/common/back.gif
抱歉,上次调试时加载了其他的程序,现在做了更改,请再试一下看。
功能实现了,但是输入圆心时没有捕捉功能,没法精确定位。 本帖最后由 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)
)
)
) 楼上的方法很扫盲,用 INITGETgetpoint 搭配来实现楼主的想法。
页:
1
[2]