_

[LISP]wybór domyślnej wartości

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[LISP]wybór domyślnej wartości

Postprzez wilda » cze 18, 2020 21:01

Witam
Chcę mieć możliwość wybrania domyślnej wartości zaproponowanej przez program.
"Napisałem" kawałek kodu który działa ale nie do końca tak jak powinien.
Jeżeli przy zgłoszeniu "Podaj wartość" zaakceptuję enterem zaproponowaną przez program wartość to nie mogę odczytać zmiennej wart1 - komunikat1 jest pomijany. Jeżeli ręcznie wpiszę wartość w oknie komunikatu wówczas zmienna jest wyświetlana.
Jak zrobić, żeby po zaakceptowanie domyślnej wartości było można odczytać zmienną wart1???

Kod: Zaznacz cały
(if (null wart2)
    (setq wart2 10)
)

(progn
      (if
         (setq wart1 (getreal (strcat "\nSpecify circumference <" (rtos wart2 2 3) ">: ")))
         (setq wart2 wart1)
      )
                  (alert (strcat "komunikat1= " (rtos wart1)))
                  (alert (strcat "komunikat2= " (rtos wart2)))
)
                  
wilda
 
Posty: 265
Dołączył(a): gru 18, 2007 21:41

Re: [LISP]wybór domyślnej wartości

Postprzez kojacek » cze 18, 2020 21:26

wilda napisał(a):Witam
Chcę mieć możliwość wybrania domyślnej wartości zaproponowanej przez program.
"Napisałem" kawałek kodu który działa ale nie do końca tak jak powinien.
Jeżeli przy zgłoszeniu "Podaj wartość" zaakceptuję enterem zaproponowaną przez program wartość to nie mogę odczytać zmiennej wart1 - komunikat1 jest pomijany. Jeżeli ręcznie wpiszę wartość w oknie komunikatu wówczas zmienna jest wyświetlana.
Jak zrobić, żeby po zaakceptowanie domyślnej wartości było można odczytać zmienną wart1???

Kod: Zaznacz cały
(if (null wart2)
    (setq wart2 10)
)

(progn
      (if
         (setq wart1 (getreal (strcat "\nSpecify circumference <" (rtos wart2 2 3) ">: ")))
         (setq wart2 wart1)
      )
                  (alert (strcat "komunikat1= " (rtos wart1)))
                  (alert (strcat "komunikat2= " (rtos wart2)))
)
                  



a tak nie lepiej?
Kod: Zaznacz cały
; ----- (1)
(if (null wart2)(setq wart2 10))
; ----- (2)
(setq wart2
  (if
    (setq wart1 (getreal (strcat "\nSpecify circumference <" (rtos wart2 2 3) ">: ")))
    wart1
    wart2
  )
)
Avatar użytkownika
kojacek
 
Posty: 5554
Dołączył(a): paź 03, 2005 20:17

Re: [LISP]wybór domyślnej wartości

Postprzez wilda » cze 18, 2020 22:10

Nie wiem czy to tylko u mnie, ale to też tak samo nie działa jak mój kod.
Jeżeli wpisuję wartość ręcznie na zgłoszenie o podanie wartości to działa. Wyświetlany jest komunikat1 i komunikat2.
Jeżeli akceptuję enterem domyślną wartość podawaną przez program to program przerywa nie wyświetla komunikatów. I przyczyną jest zmienna wart1. Jeżeli wyłączę komunikat1 to komunikat2 jest wyświetlany.

Kod: Zaznacz cały
(defun c:aatest0 ()
; ----- (1)
(if (null wart2)(setq wart2 10))
; ----- (2)
(setq wart2
  (if
    (setq wart1 (getreal (strcat "\nPodaj wartość <" (rtos wart2 2 3) ">: ")))
    wart1
    wart2
  )
)
   (alert (strcat "komunikat1= " (rtos wart1)))
   (alert (strcat "komunikat2= " (rtos wart2)))
)
wilda
 
Posty: 265
Dołączył(a): gru 18, 2007 21:41

Re: [LISP]wybór domyślnej wartości

Postprzez andkal » cze 18, 2020 22:20

Dzieje się tak bo jak sie potwierdza enterem to wart1 przybiera wartośc nil, wiec (rtos nil) wywali błąd
http://www.autolisps.blogspot.com - handy plugins for autocad
andkal
 
Posty: 68
Dołączył(a): paź 01, 2017 22:10

Re: [LISP]wybór domyślnej wartości

Postprzez wilda » cze 18, 2020 23:47

W związku z ostatnią wiadomości wykombinowałem sobie że jeżeli wartość została wybrana enterem to wart1 będzie przyjmować wart2 (wartość domyślna). Jeżeli została ręcznie wpisana wartość na zgłoszenie to wart2 będzie przyjmować wart1 tak by po kolejnym uruchomieniu domyślnie była pokazywana ostatnio wprowadzona wartość.
Ale to też nie działa.
Kod: Zaznacz cały
(defun c:aatest ()
(if (null wart2)
    (setq wart2 111)
)
(progn
      (if
         nil (setq wart1 (getreal (strcat "\nPodaj wartość  <" (rtos wart2 2 3) ">: ")))

               (setq wart1 wart2) ;jeżeli wartość1 jest nil
               (setq wart2 wart1)   ;jezeli wart1 została wpisana
      )
                     (alert (strcat "komunikat1= " (rtos wart1)))
                     (alert (strcat "komunikat2= " (rtos wart2)))
)            
)


Edit:
zmieniłem na
Kod: Zaznacz cały
      (if
         (null (setq wart1 (getreal (strcat "\nPodaj wartość  <" (rtos wart2 2 3) ">: "))))

i teraz działa :D
wilda
 
Posty: 265
Dołączył(a): gru 18, 2007 21:41


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników