CivilTechSource Posted Sunday at 12:57 PM Posted Sunday at 12:57 PM Hi again, Looking to create a lisp that will bring a block into a drawing and will loop and keep adding it. The catch is that I want to see the visual of the block similar to the -insert command. So I managed to achieve the visual by adding the pause. But how do I make the while loop keep going without the getpoint? Is there a way I could check for pause? Thanks again (while (setq ins (getpoint "\nSpecify point for block (ENTER to exit): ")) (command "-INSERT" GV-Block pause "" "" "0") ) Quote
CivilTechSource Posted Sunday at 01:03 PM Author Posted Sunday at 01:03 PM I think I solved it. Is this the most optimal way? (while continue (command "-INSERT" GV-Block pause "" "" "0") (if (= (getvar "CMDSTAT") 0) (setq continue nil) ) ) Quote
devitg Posted Sunday at 02:29 PM Posted Sunday at 02:29 PM 1 hour ago, CivilTechSource said: I think I solved it. Is this the most optimal way? (while continue (command "-INSERT" GV-Block pause "" "" "0") (if (= (getvar "CMDSTAT") 0) (setq continue nil) ) ) @CivilTechSource Quote Command: CMDSTAT Unknown command "CMDSTAT". Press F1 for help. Quote
Steven P Posted Sunday at 03:37 PM Posted Sunday at 03:37 PM (edited) If it is just a stand alone action, this will work but you have to escape out of it to cancel - you cannot have more to the routine, so stand alone only (while (= (command "-INSERT" GV-Block pause "" "" "0") nil) ) or this (while (setq pt1 (getpoint "Press LH Mouse to repeat, Enter / Space cancel")) (= (command "-insert" "circuitBreaker" pause 1 1 0) nil) ) Edited Sunday at 04:13 PM by Steven P 1 Quote
Lee Mac Posted yesterday at 07:45 AM Posted yesterday at 07:45 AM Depending on your version of CAD, you can use this: (defun c:test ( ) (command "_.-insert" "yourblockname" "_s" 1 "_r" 0 "_re" "_y") (while (= 1 (logand 1 (getvar 'cmdactive))) (command "\\")) (princ) ) 1 1 Quote
CivilTechSource Posted 10 hours ago Author Posted 10 hours ago So the first line keeps doing the loop while it is not nil? How will it know it is not nil? On 19/10/2025 at 16:37, Steven P said: If it is just a stand alone action, this will work but you have to escape out of it to cancel - you cannot have more to the routine, so stand alone only (while (= (command "-INSERT" GV-Block pause "" "" "0") nil) ) or this (while (setq pt1 (getpoint "Press LH Mouse to repeat, Enter / Space cancel")) (= (command "-insert" "circuitBreaker" pause 1 1 0) nil) ) Quote
CivilTechSource Posted 10 hours ago Author Posted 10 hours ago I am still new with Lisp, but it feels that this is more elegant by checking if a command is active? On 20/10/2025 at 08:45, Lee Mac said: Depending on your version of CAD, you can use this: (defun c:test ( ) (command "_.-insert" "yourblockname" "_s" 1 "_r" 0 "_re" "_y") (while (= 1 (logand 1 (getvar 'cmdactive))) (command "\\")) (princ) ) Quote
Lee Mac Posted 10 hours ago Posted 10 hours ago 16 minutes ago, CivilTechSource said: So the first line keeps doing the loop while it is not nil? How will it know it is not nil? It won't - it will continue indefinitely until the user presses Esc to force it to exit. 1 Quote
Lee Mac Posted 10 hours ago Posted 10 hours ago 14 minutes ago, CivilTechSource said: I am still new with Lisp, but it feels that this is more elegant by checking if a command is active? If you need more information, check the documentation on the CMDACTIVE system variable. 1 Quote
Steven P Posted 9 hours ago Posted 9 hours ago 59 minutes ago, CivilTechSource said: So the first line keeps doing the loop while it is not nil? How will it know it is not nil? As Lee says, it doesn't know, it is a bit of a blunt LISP that does the job and no more. Lees is much better but I had a mental block yesterday, couldn't remember cmdactive. Quote
Lee Mac Posted 5 hours ago Posted 5 hours ago For completeness, the key here is the "Repeat" option of the -INSERT command - though, I'm unsure in which version this relatively new keyword was introduced. 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.