_

[LISP] Polecenie z wyborem opcji

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".

Re: [LISP] Polecenie z wyborem opcji

Postprzez kojacek » sie 22, 2017 18:03

wilda napisał(a):Wszystko zmierza do szczęśliwego końca. (...)

Pochwal się na koniec. Ewentualnie jeszcze coś podrasujemy (jak będzie trzeba) :)
Avatar użytkownika
kojacek
 
Posty: 5292
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Polecenie z wyborem opcji

Postprzez wilda » sie 22, 2017 22:21

oj na pewno będzie trzeba :oops:
do końca jeszcze trochę, bo strasznie dużo czasu zabiera testowanie wprowadzanych zmian zanim zaczynają działać jak na leży,
a zarobiony jestem że czasu na to brakuje
wilda
 
Posty: 198
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] Polecenie z wyborem opcji

Postprzez wilda » sie 23, 2017 01:32

Jeżeli z dcl usuniemy wartości value to za pierwszym razem jak otwieramy okno dialogowe to wszystkie okienka są nieznaczone. Chciałbym dla pierwszego otwarcia dialogu nadać wartości domyślne.
Potrzebny jest warunek jak zapisać:
Kod: Zaznacz cały
Jeżeli "key_XY"  nie ma żadnej wartości to
(set_tile "key_XY" "1")
.....
wilda
 
Posty: 198
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] Polecenie z wyborem opcji

Postprzez kojacek » sie 23, 2017 06:14

wilda napisał(a):Jeżeli z dcl usuniemy wartości value to za pierwszym razem jak otwieramy okno dialogowe to wszystkie okienka są nieznaczone. Chciałbym dla pierwszego otwarcia dialogu nadać wartości domyślne.
Potrzebny jest warunek jak zapisać:
Kod: Zaznacz cały
Jeżeli "key_XY"  nie ma żadnej wartości to
(set_tile "key_XY" "1")
.....

Nie no - przy pierwszym (a właściwie przy każdym) uruchomieniu, daj w oknie tak jak ziele zadał. A przy pierwszym wywołaniu sprawdź czy jest zmienna (globalna) z nastawami domyślnymi, jeśli nie ma to ustaw. Potem każde działanie programu modyfikuje tę zmienną. O globalnych tu: https://kojacek.wordpress.com/2015/12/20/symbole-zmienne/
Avatar użytkownika
kojacek
 
Posty: 5292
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] Polecenie z wyborem opcji

Postprzez ziele_o2k » sie 23, 2017 07:15

wilda napisał(a):Jeżeli z dcl usuniemy wartości value to za pierwszym razem jak otwieramy okno dialogowe to wszystkie okienka są nieznaczone. Chciałbym dla pierwszego otwarcia dialogu nadać wartości domyślne.
Potrzebny jest warunek jak zapisać:
Kod: Zaznacz cały
Jeżeli "key_XY"  nie ma żadnej wartości to
(set_tile "key_XY" "1")
.....

Tak jak kojacek napisał. Dodatkowo ja mam taka praktykę, że definicję zmiennych globalnych (przykładowo z wartościami domyślnymi) daję na początku lispa, ewentualnie pod obsługą errora. Wygląda to tak:
Kod: Zaznacz cały
(defun c:mojaFunkcja ( / *error* xxx xxx xxx)
  (defun *error* ....)
  (if (not *Wartosci_domyslne*)
    (setq *Wartosci_domyslne* ...)
  )
)

Potem w lispie modyfikuję zmienne globalne (przykładowo przez pobranie wartości z DCLa) i one zostają już zmienione. Kiedy ponownie odpalamy lispa
Kod: Zaznacz cały
  (if (not *Wartosci_domyslne*)
    (setq *Wartosci_domyslne* ...)
  )

nie zmienia wartości domyślnych, ponieważ *Wartosci_domyslne* nie są nil i zaprzeczenie czemuś co jest (not *Wartosci_domyslne*) zwraca nil.
Dodatkowo, żeby rozróżnić zmienne lokalnych od globalnych daję (za sprawą uważnego uczenia się od kolegów z tego forum) zmienne globalne jako *zmienna1* *zmienna2*, a zmienne lokalne bez *...* czyli zmienna3 zmienna4
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 507
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Polecenie z wyborem opcji

Postprzez wilda » sie 23, 2017 10:56

kojacek napisał(a):Nie no - przy pierwszym (a właściwie przy każdym) uruchomieniu, daj w oknie tak jak ziele zadał. A przy pierwszym wywołaniu sprawdź czy jest zmienna (globalna) z nastawami domyślnymi, jeśli nie ma to ustaw. Potem każde działanie programu modyfikuje tę zmienną. O globalnych tu: https://kojacek.wordpress.com/2015/12/20/symbole-zmienne/

Myślałem o tym żeby przy pierwszym otwarciu okna (zmienne jeszcze nie mają żadnej wartości) program wczytywał wartości domyślne, natomiast już później wartości pobierał z ustawień w oknie dialogowym.
Nie wiem jak zapisać warunek że zmienna "key_XY" nie ma żadnej wartości
Próbowałem poprzez analogię (if (not answer1) ale to nie działa.
wilda
 
Posty: 198
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] Polecenie z wyborem opcji

Postprzez wilda » sie 29, 2017 22:29

Męczę się z tym kodem już dłuższy czas i nic nie wychodzi.
Okazało się (może to jest oczywiste) że pogram ponownie wywołany (C:TESTUJ) po wykonaniu "Ustaw" kasuje wszystkie ustawienia zmiennych lokalnych i za każdym razem przyjmuje wartości domyślne (warunek (if (not answer1) prawdziwy).
Jak zmieniłem zmienną answer1 na globalną to program przestaje działać.
ponizej fragment kodu odpowiedzialny za tę sytuację:
Kod: Zaznacz cały
(defun C:TESTUJ ( / answer1 ........ )

 (if (not answer1) ;ustawienie domyślnych ustawień dla pierwszego uruchomienia
   (progn
      (setq answer1 "0"
                ....)
   )
);end if   

(initget "Ustaw")
  (if
    (setq srcblk (entsel "\nWybierz blok źródłowy lub [Ustaw]: "))
    (cond
      ( (= srcblk "Ustaw")
         (setq dcl_id (load_dialog "Match Block.dcl")
         )
      (if (not (new_dialog "CopyBlockProp" dcl_id))
         (exit)
         (progn
            (set_tile "key_XY" answer1)
            ......
            (action_tile "accept" "(getValues)")
            (action_tile "cancel" "(done_dialog 1)")
            (setq an (start_dialog))   
            (C:TESTUJ)   
         )    ;end progn
      )        ;end if
      (unload_dialog dcl_id)
      )            
    )    ;end cond
  )    ;end if
wilda
 
Posty: 198
Dołączył(a): gru 18, 2007 21:41

Re: [LISP] Polecenie z wyborem opcji

Postprzez ziele_o2k » sie 30, 2017 09:44

Przeanalizuj sobie ten fragment kodu:
Kod: Zaznacz cały
  (while (/= kw "Dalej")
    (setq kw (cd:USR_GetKeyWord "\nAktualizuj koty wysokościowe: " '("Dalej" "Punkt bazowy" "Ustawienia") "Dalej"))
    (cond
      ( (= kw "Punkt")
        (setq *pz:KotyPtBazowy* (getpoint "\nWskaż punkt bazowy: "))
      )
      ( (= kw "Ustawienia")
        (if (setq tmp (pz:KotyDialog))
          (setq *pz:KotyUstawienia* tmp)
        )
      )
      ( (not kw) (exit) )
    )
  )
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 507
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] Polecenie z wyborem opcji

Postprzez wilda » wrz 03, 2017 19:38

kojacek napisał(a):Pochwal się na koniec. Ewentualnie jeszcze coś podrasujemy (jak będzie trzeba) :)


Wygląda na to, że uporałem się ze wszystkimi problemami i program działa :shock:
Załączniki
właściwości bloku .rar
(1.35 KiB) Pobrane 15 razy
wilda
 
Posty: 198
Dołączył(a): gru 18, 2007 21:41

Poprzednia strona

Powrót do AutoCAD

Kto przegląda forum

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