Vytisknout stránku | Zavřít okno

prodleva

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=5654
Datum vytištění: 25.čer.2026 v 08:45


Téma: prodleva
Odeslal: Ferdinand
Předmět: prodleva
Datum odeslání: 13.pro.2007 v 11:05
Snažím se vytvořit utilitku pro zadání volitelné prodlevy při provádění nějaké subrutiny, abych postřehl proběhlé změny na obrazovce. Nějak se mi to nedaří odladit. Když lisp po řádcích resp. po logických celcích nakopíruji do p.ř., provede se vše.  Když si lisp načtu a spustím, neprovede se nic (výsledek je "nil").
http://www.cadforum.cz/forum/uploads/20071213_110441_prd.lsp - uploads/20071213_110441_prd.lsp


-------------
-FerTh-



Odpovědi:
Odeslal: pavelstyl
Datum odeslání: 13.pro.2007 v 11:39
Co treba takhle
Pavel Styl
 
(defun C:PRD (/ CAS MM)
 
  (if (> CAS 0)
    (setq CAS 0)
  )
  (setq MM (getint "\nZadejte délku prodlevy (ms) : <2000> "))
  (if (= MM nil)
    (setq CAS 2000)
    (setq CAS MM)
  )
  (command "_delay" CAS)
  (princ)
)


Odeslal: Ferdinand
Datum odeslání: 13.pro.2007 v 13:27
Pavle, je to pořád to stejné - výsledek je "nil".
Příklad: Ve výkresu již byla nastavena prom. CAS=5000. Načtu lisp, volám fci PRD, a dívám se, jestli tu zadanou hodnotu opravdu přiřadila:
Command: _appload prd.lsp successfully loaded.
Command: prd
Zadejte délku prodlevy (ms) : <2000> 1111
_delay Enter delay time (in milliseconds): 1111
Command:
Command: !cas
5000
Command: !mm
nil
To stejné i pro případ, když <2000> odentruji.
Když to řádek po řádku nakopíruji do p.ř., tak:
Command: (if (> CAS 0)
(_>     (setq CAS 0)
(_>   )
0
Command: (setq MM (getint "\nZadejte délku prodlevy (ms) : <2000> "))
Zadejte délku prodlevy (ms) : <2000> 1111
1111
Command: (if (= MM nil)
(_>     (setq CAS 2000)
(_>     (setq CAS MM)
(_>   )
1111
Command: (command "_delay" CAS)
_delay Enter delay time (in milliseconds): 1111
Command: nil
Command: !cas
1111
Command: !mm
1111
1. Zdá se, že se to zarazí po tom "delay" a nechce to dokončit celý. Ale i když v lispu to vynechám, tak je to stejné...
2. Pokud ;(command "_delay" 250) v původním lispu:
Command: _appload prd.lsp successfully loaded.
Command: prd
Zadejte délku prodlevy (ms) : <2000> 3333
3333
Command:
Command: !cas
5000
Command: !mm
0
Upřesnění: jde mi o to, získat prom. CAS se zadanou hodnotou od uživatele, kterou pak mohu použít v jiných aplikacích. Ten "delay" (s hodnotou 250) tam mám pouze jaksi "navíc", pro pozdržení (jak to bude chodit OK, pak to odmažu). Právě proto mi bylo divné, že i když CAS v lispu by se měla vynulovat, zůstává ji přiřazena pořád ta původní hodnota.


-------------
-FerTh-


Odeslal: pavelstyl
Datum odeslání: 13.pro.2007 v 14:05
No a není celý problém způsoben tím, že promněnná CAS je lokální?
Pokud chci, aby přiřazená hodnota v proměnné CAS zůstala i po ukončení funkce, tak ta hlavička musí být bez proměnné CAS
 
(defun C:PRD (/ MM)
...
Pavel Styl



Vytisknout stránku | Zavřít okno