使用command的时候是需要关闭或取消捕捉,你也可以换一种方式,在commmand提示需要点的时候前面加_non 临时取消捕捉,另外如果是 (setvar "osmode" 0);关闭捕捉 这种方式,就需要命令完成后恢复该变量的值。
个人建议不要设置为0,最好是将捕捉值+-16384来实现F3键的操作。这才是关闭和开启对象捕捉的关键,而不是设置为0,也可以说,设置0算是一个错误的方式,建议不要用。。
提供秋枫大神的捕捉开关函数参考。
- (defun qf-disable-osmode()
- (setvar "osmode" (logior (getvar "osmode") 16384)) ; turn it off: 16384=0x4000
- )
- (defun qf-enable-osmode()
- (setvar "osmode" (logand (getvar "osmode") 49151)) ; turn it on: 49151=0xBFFF
- )
代码采用command _non临时取消捕捉方式参考。
- ;画楼梯,可选择楼梯方向******************************************************
- (defun c:tt(/ pa pb pc p1 p2 p3 ww hh lw lh n side ldirect)
- ;;;;输入楼梯左下角点、楼梯总宽度、楼梯总高度和楼梯阶数
- (setq pa (getpoint "\n 请选择楼梯左下角点:"))
- (setq ww (getdist pa "\n 请输入楼梯总宽度w:"))
- (setq hh (getdist pa "\n 请输入楼梯总高度h:"))
- (setq n (getint "\n 请输入楼梯阶数(整数):"))
- ;选择楼梯方向
- ;(initget "L l R r");;;指定输入范围
- (setq side (getstring "\n 请输入楼梯方向:(左/L)(右/R)"))
- (setq side (strcase side));;全变成大写
- (cond
- ((= side "L") (setq ldirect pi))
- ((= side "R") (setq ldirect 0))
- )
- ;画出楼梯右下角墙壁线
- (setq pb (polar pa ldirect ww))
- (setq pc (polar pb (* pi 0.5) hh))
- (command "pLINE" "_non" pa "_non" pb "_non" pc "")
- ;;赋值
- (setq lw (/ ww n))
- (setq lh (/ hh n))
- (princ "\n 一阶楼梯宽") (princ lw)
- (princ "\n 一阶楼梯高") (princ lh)
- ;;进入循环前的准备
- (setq p1 pa)
- (command "PLINE") ;;;;进入循环前先执行多段线命令,可将楼梯变为多段线
- ;;进入循环
- (repeat n
- (setq p2 (polar p1 (* pi 0.5) lh))
- (setq p3 (polar p2 ldirect lw))
- (command "_non" p1 "_non" p2 "_non" p3)
- (setq p1 p3)
- )
- (command "")
- (princ "\n 画楼梯任务完成")
- (prin1)
- )
- (prompt "\n 画楼梯程序(可选择楼梯方向),命令:tt")
- (prin1)
|