MarcoW 发表于 2022-7-6 09:37:54

关于退出一段时间的问题

你好,
 
在我的一段代码中,我使用了以下内容:
 


(princ "\nSpecify insertion point")

(while
(not
   (command "_.insert" BlockName "_s"
(getvar "DIMSCALE") pause pause)
)
;_not
      ) ;_while

 
这很好,但我有两个问题,我相信我应该能够回答自己,但我就是不明白。
 
1、代码中NOT的用法是什么?我知道我需要它在那里,但我如何阅读它的方式,我可以理解。
ie.“不”该做什么?这感觉毫无意义,这当然是愚蠢的,因为没有它,它根本就不会停留在循环中。
 
2.我只能在wich之前退出,因为我的错误捕捉工作正常,并且在恢复变量时节省了我的时间。(感谢Lee Macs关于错误捕捉的教程)。
但我发现退出更自然,因为我的鼠标右键。
 
我们将一如既往地感谢您的帮助!

David Bethel 发表于 2022-7-6 10:15:39

1) (命令)始终返回nil。(not)如果测试返回零,则返回T。因此,只要测试返回nil或没有使用esc键,循环就会继续
 
2) 您需要彻底检查整个代码段,才能按enter键退出
 
也许 吧:
 
(while(getpoint“\n插入点:”)。。。。
 
-大卫

Lee Mac 发表于 2022-7-6 10:24:28

你好,Marco,
 
命令函数始终返回nil,因此,通过使用逻辑not函数,while测试条件始终得到满足,因此您仍处于循环中。
 
另一种方法可能是:
 

(setq LastEntity T
       Scale      (getvar 'DIMSCALE)
       BlockName"MyBlock.dwg"
)

(while (not (equal LastEntity ThisEntity))
   (setq LastEntity (entlast))
   (command "_.-insert" BlockName "_S" scale pause pause)
   (setq ThisEntity (entlast))
)
 
但是,由于您使用INSERT命令插入块,因此在提示输入点时不允许空输入,因此再次需要Esc退出循环。
 
避免使用Esc的一种可能的替代方法是使用getpoint/getangle提示:
 

(setq Scale   (getvar 'DIMSCALE)
       BlockName "test.dwg"
)

(while
   (and
   (setq pt (getpoint "\nSpecify Point: "))
   (setq an (getangle "\nSpecify Angle: " pt))
   )
   (command "_.-insert" BlockName "_S" scale pt (angtos an))
)
 
 

MarcoW 发表于 2022-7-6 10:48:40

@李和大卫
 
 
感谢您的回复!现在我知道了。。。一旦你知道这很容易
 
 
我用grread(类似(=(cadr gr)13)运行了它,但由于我希望能够使用OSNAP,我将它改回了常规插入。
 
使用getpoint的另一部分也是我所拥有的,但这并不能在屏幕上拖动鼠标时预览块。
 
该喝咖啡了。
页: [1]
查看完整版本: 关于退出一段时间的问题