Jump to content

AutoLISP remembering last used input?


harrison-matt

Recommended Posts

All,

 

I am wondering if it is possible to have your program remember the last, say string, that you used in your program. for example, if i use:

 

(setq revn (getstring "\nEnter your revision number:"))

 

And the last revision number i used was "5" i would like this string request to automatically fill in with "5" so that i can pass on to the next input.

 

Is this possible?

 

Thanks ahead of time,

Matt

Link to comment
Share on other sites

here's one way

(if (null *revn*)
(setq *revn* "1")
)
(setq revn (getstring (strcat "\n Enter revision number: <"  *revn* ">: ")))
(if (eq revn "")
(setq revn *revn*)
(setq *revn* revn)
 )

Edited by lpseifert
Code revised per Lee Mac's comment in post #3
Link to comment
Share on other sites

I agree with Lee and have used that same exact method before, but if all you are wanting is an integer, why not just use getint and convert to a string?

 

eg.

(setq *rev* (cond ((getint (strcat "\nSpecify revision number <"
                                  (itoa (cond (*rev*)
                                              ((setq *rev* 1))
                                        )
                                  )
                                  ">: "
                          )
                  )
                 )
                 (*rev*)
           )
)

Link to comment
Share on other sites

Completely agree with Alan's sentiment above, but just for genericity:

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] LM:GetXWithDefault [b][color=RED]([/color][/b] _function _prompt _symbol _default [b][color=BLUE]/[/color][/b] _toString [b][color=RED])[/color][/b]
 [i][color=#990099];; © Lee Mac 2010[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] _toString
   [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=BLUE]getangle[/color][/b] _function[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]angtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]REAL [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]INT  [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]
 
 [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol
   [b][color=RED]([/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] input [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] input[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] input[b][color=RED]))[/color][/b]
     [b][color=RED]([/color][/b]_function [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] _prompt [b][color=#a52a2a]"<"[/color][/b] [b][color=RED]([/color][/b]_toString [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] _default [b][color=RED]))))[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED]))[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]
[b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=BLUE]nil[/color][/b]

 [b][color=RED]([/color][/b]LM:GetXWithDefault [b][color=BLUE]getstring[/color][/b] [b][color=#a52a2a]"\nEnter Revision Number "[/color][/b] [b][color=DARKRED]'[/color][/b]*rev* [b][color=#a52a2a]"1"[/color][/b][b][color=RED])[/color][/b]

[b][color=RED])[/color][/b]

Link to comment
Share on other sites

FYI: null input with getstring = "" :)

It worked fine when tested using getint... changed it to getstring cuz I thought that was what the OP wanted

ya learn something new everyday... thanks

Link to comment
Share on other sites

It does make things a bit harder to read and dissect. Maybe there are some pluses that I haven't uncovered yet. My $0.02 -David

Edited by David Bethel
Link to comment
Share on other sites

  • 4 years later...
Completely agree with Alan's sentiment above, but just for genericity:

 

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] LM:GetXWithDefault [b][color=RED]([/color][/b] _function _prompt _symbol _default [b][color=BLUE]/[/color][/b] _toString [b][color=RED])[/color][/b]
 [i][color=#990099];; © Lee Mac 2010[/color][/i]
 
 [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] _toString
   [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=BLUE]getangle[/color][/b] _function[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]angtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]REAL [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]INT  [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b]
     [b][color=RED])[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]
 
 [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol
   [b][color=RED]([/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] input [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] input[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] input[b][color=RED]))[/color][/b]
     [b][color=RED]([/color][/b]_function [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] _prompt [b][color=#a52a2a]"<"[/color][/b] [b][color=RED]([/color][/b]_toString [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] _default [b][color=RED]))))[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED]))[/color][/b]
   [b][color=RED])[/color][/b]
 [b][color=RED])[/color][/b]
[b][color=RED])[/color][/b]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=BLUE]nil[/color][/b]

 [b][color=RED]([/color][/b]LM:GetXWithDefault [b][color=BLUE]getstring[/color][/b] [b][color=#a52a2a]"\nEnter Revision Number "[/color][/b] [b][color=DARKRED]'[/color][/b]*rev* [b][color=#a52a2a]"1"[/color][/b][b][color=RED])[/color][/b]

[b][color=RED])[/color][/b]

 

 

 

Lee, nice function ! and I see your new version at theswamp.

 

I have a problem

my original code

(getdist p "\nPlease Enter the length: ")

===>

(LM:GetXWithDefault getdist p "\nPlease Enter the length: "'*leng* 15.0)

error. too many arguments

 

Lee,

about example , only see getstring , getreal ,getkword

 

These?

getangle

getorient

getdist

getint

getpoint

getcorner

Link to comment
Share on other sites

Consider the following updated function & accompanying example:

;; GetX with Default  -  Lee Mac
;; fun - [sym] Quoted user input function
;; pmt - [str] Prompt string
;; sym - [sym] Quoted function to hold default value (not 'sym)
;; def - [any] Initial default value
;; ini - [lst] [Optional] List of initget arguments
;; arg - [lst] [Optional] List of arguments for user input function
;; Returns: [any] User input or default value

(defun LM:getxwithdefault ( fun pmt sym def ini arg / tmp )          
   (if (not (boundp sym)) (set sym def))
   (if ini (apply 'initget ini))
   (if
       (member
           (setq tmp
               (apply fun
                   (append arg
                       (list
                           (strcat pmt "<"
                               (
                                   (lambda ( x )
                                       (cond
                                           (   (= 'getangle fun) (angtos x))
                                           (   (= 'real (type x))  (rtos x))
                                           (   (= 'int  (type x))  (itoa x))
                                           (   (= 'str  (type x))  x)
                                           (   (vl-princ-to-string x))
                                       )
                                   )
                                   (eval sym)
                               )
                               ">: "
                           )
                       )
                   )
               )
           )
          '("" nil)
       )
       (eval sym)
       (set  sym tmp)
   )
)

 

(defun c:test ( / p )
   (if (setq p (getpoint "\nSpecify base point: "))
       (princ
           (strcat "\nUser entered: "
               (rtos (LM:getxwithdefault 'getdist "\nSpecify length " '*leng* 15.0 nil (list p)))
           )
       )
   )
   (princ)
)
 
Edited by Lee Mac
Link to comment
Share on other sites

Consider the following updated function & accompanying example:

 

Lee, Wonderful !!! Your help was greatly appreciated.

Link to comment
Share on other sites

  • 3 years later...

I'm reviving this dead post. Im using the code below from the great Lee Mac.

 

Once the lisp routine is completed and then reactivated the input is set back to the default, at least thats what its doing to me. How can the input be saved so when the lisp is activated again (in the same drawing) it will remember the rev number or is that even possible?

 

On 9/30/2010 at 12:58 PM, Lee Mac said:

 


(setq *rev*
 (
   (lambda ( input ) (if (eq "" input) *rev* input))
   (getstring (strcat "\nEnter Revision Number <" (setq *rev* (cond ( *rev* ) ( "1" ))) "> : "))
 )
)
 

 

 

Edited by jonathann3891
Link to comment
Share on other sites

8 minutes ago, jonathann3891 said:

Once the lisp routine is completed and then reactivated the input is set back to the default, at least thats what its doing to me. How can the input be saved so when the lisp is activated again (in the same drawing) it will remember the rev number or is that even possible?

 

Ensure that the variable *rev* is not declared as a local variable (i.e. not included in the list of variables following the forward slash in the defun expression) - this variable should remain global so that it retains its value between evaluations of the function.

 

If you wish to retain the default option between drawing sessions (i.e. after AutoCAD has been closed), you will need to store the default value either in the registry, a drawing dictionary, or external file such as a Text, CSV, XML, or INI file.

 

You may also wish to refer to this tutorial.

Edited by Lee Mac
Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...