Zobrazit plnou verzi příspěvku: autolisp

Honzicek
29.03.2006, 14:27
Zdrawím,chtěl bych se zeptat jestli je nějaký speciální příkaz pro opakování již provedeného úkonu.
PŘ:
spustím soubor.lsp
provedu zadání parametrů
provede se třeba nakreslení nějakého obrazce
a program se zavře.

nevím zda by to šlo řešit třeba jako v Pascalu funkcí repeat until

a ještě bych se chtěl zeptat jestli je v lispu nějaký příkaz který smaže celý výkres?

Kdyžtak děkuji za odpověď.

Ondrejd
29.03.2006, 14:57
To záleží, jak to máte napsané.
Pokud u jména funkce použijete c:jmeno_funkce, tak se to může opakovat jako příkaz AutoCADu, tj Enter nebo pravé tlačítko myši.
A nebo tam musíte dát cyklus (while (= nil (getstring))..
 
S pozdravem
Ondřej Doležal

Ondrejd
29.03.2006, 15:02
Mazání všech entit:
(command "_erase" "_all" "")
nebo
(setq SsSet (ssget "_X"))
(while (/= nil (setq EntityName (ssname SsSet 0)))(entdel EntityName)(setq SsSet (ssdel EntityName SsSet)))
S pozdravem
Ondřej Doležal

Honzicek
29.03.2006, 15:27

mám to napsáno takto....
(defun c:tk ()
  (initget "CY EP HYP EV ARCH  ")
  (setq word (getkword "Zadejte druh krivky:(CYkloida EPicykloida HYPocykloida EVolventa ARCHimedova-spirála)"))
  (cond ((= word "CY")   (setq r(getreal"poloměr tvořící kružnice:"))
         &nbs p;         &nbs p;    
(setq d(getreal"vzdálenost bodu:"))
         &nbs p;         &nbs p;    
(setq pocet (getreal"Zadejte pocet cyklu:"))
   
      &n bsp;         
(setq bod(getpoint"Zadejte počáteční bod odvalovací úsečky:"))
   
      &n bsp;         
(command "úsečka" (list (car bod) (cadr bod)) (list (* (car bod) 1.2)
(cadr bod)) "")           
           
        
         &nbs p;         &nbs p;    
(setq t1 0)
         &nbs p;         &nbs p;    
(setq t2 (* pocet Pi))
         &nbs p;         &nbs p;    
(setq int (/ (- t2 t1) 100.0))
         &nbs p;         &nbs p;    
(setq a t1)
         &nbs p;         &nbs p;    
(setq x (-(* r a)(* d (sin a))))
         &nbs p;         &nbs p;    
(setq y (- r (* d (cos
a))))        & nbsp;       

         &nbs p;         &nbs p;    
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;    
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;    
(command "bod" (list x y))
         &nbs p;         &nbs p;        
(repeat 100
         &nbs p;         &nbs p;         &nbs p;  
(setq a (+ int a))
         &nbs p;         &nbs p;         &nbs p;  
(setq x (-(* r a)(* d (sin a))))
         &nbs p;         &nbs p;         &nbs p;  
(setq y (- r(* d(cos a))))
         &nbs p;         &nbs p;         &nbs p;  
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;         &nbs p;  
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;         &nbs p;  
(command "úsečka" "@" (list x y) "")
         &nbs p;         &nbs p;         &nbs p;         &nbs p; 
)
         &nbs p;         &nbs p;    
(command "regen")
   
      &n bsp;         
(setq part 1))

         ((= word "EP")  (setq a(getreal"Zadejte poloměr pevné kružnice:"))
         &nbs p;         &nbs p;    
(setq b(getreal"Zadejte poloměr kutálející se kružnice:"))
         &nbs p;         &nbs p;    
(setq pocet (getreal"Zadejte pocet cyklu:"))
         &nbs p;         &nbs p;    
(setq bod (getpoint"Zadejte bod"))
         &nbs p;         &nbs p;    
(setq t1 0)      
         &nbs p;         &nbs p;    
(setq t2 (* pocet Pi))
         &nbs p;         &nbs p;    
(setq int (/ (- t2 t1) 100.0))
         &nbs p;         &nbs p;    
(setq c t1)
         &nbs p;         &nbs p;    
(setq x (-(* (+ a b) (cos c))(* b( cos (* (/ (+ a b) b) c)))))
         &nbs p;         &nbs p;    
(setq y (-(* (+ a b) (sin c))(* b( sin (* (/ (+ a b) b) c)))))
         &nbs p;         &nbs p;    
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;    
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;    
(command "_POINT" (list x y))
         &nbs p;         &nbs p;      
(repeat 100 
         &nbs p;         &nbs p;        
(setq c (+ int c))
         &nbs p;         &nbs p;        
(setq x (-(* (+ a b) (cos c))(* b( cos (* (/ (+ a b) b) c)))))
         &nbs p;         &nbs p;        
(setq y (-(* (+ a b) (sin c))(* b( sin (* (/ (+ a b) b) c)))))
         &nbs p;         &nbs p;        
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;         
(s etq y (+ y (cadr bod)))
         &nbs p;         &nbs p;        
(command "úsečka" "@" (list x y) "")
         &nbs p;         &nbs p;         &nbs p;       
)
         &nbs p;         &nbs p;     
(command "_CIRCLE" (list (car bod) (cadr bod)) a)
         &nbs p;         &nbs p;     
(command "regen")
   
      &n bsp;         &n bsp;
(setq part 2))

    ((= word "HYP")  (setq a(getreal"Zadejte poloměr pevné kružnice:"))
         &nbs p;         &nbs p;    
(setq b(getreal"Zadejte poloměr kutálející se kružnice:"))
         &nbs p;         &nbs p;    
(setq pocet (getreal"Zadejte pocet cyklu:"))
         &nbs p;         &nbs p;    
(setq bod (getpoint"Zadejte bod:"))
         &nbs p;         &nbs p;    
(setq t1 0)      
         &nbs p;         &nbs p;    
(setq t2 (* pocet PI))
         &nbs p;         &nbs p;    
(setq int (/ (- t2 t1) 100.0))
         &nbs p;         &nbs p;    
(setq c t1)
         &nbs p;         &nbs p;    
(setq x (+(* (- a b) (cos c))(* b( cos (* (/ (- a b) b) c)))))
         &nbs p;         &nbs p;    
(setq y (-(* (- a b) (sin c))(* b( sin (* (/ (- a b) b) c)))))
         &nbs p;         &nbs p;    
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;    
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;    
(command "_POINT" (list x y))
         &nbs p;         &nbs p;      
(repeat 100 
         &nbs p;         &nbs p;        
(setq c (+ int c))
         &nbs p;         &nbs p;        
(setq x (+(* (- a b) (cos c))(* b( cos (* (/ (- a b) b) c)))))
         &nbs p;         &nbs p;        
(setq y (-(* (- a b) (sin c))(* b( sin (* (/ (- a b) b) c)))))
         &nbs p;         &nbs p;        
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;        
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;     
(command "úsečka" "@" (list x y) "")
         &nbs p;         &nbs p;         &nbs p;     
)
         &nbs p;         &nbs p;     
(command "_CIRCLE" (list (car bod) (cadr bod)) a)
         &nbs p;         &nbs p;     
(command "regen")
   
      &n bsp;         &n bsp;
(setq part 3))

       ((= word "EV")     (setq r (getreal"Zadejte poloměr:"))
         &nbs p;         &nbs p;     
(setq d (getreal"Zadejte průměr:"))
         &nbs p;         &nbs p;     
(setq pocet (getreal"Zadejte pocet cyklu:"))
         &nbs p;         &nbs p;     
(setq bod (getpoint"Zadejte bod:"))
         &nbs p;         &nbs p;     
(setq t1 0)
         &nbs p;         &nbs p;     
(setq t2 (* pocet PI))
         &nbs p;         &nbs p;     
(setq int (/(- t2 t1) 100.0))
         &nbs p;         &nbs p;     
(setq c t1)
         &nbs p;         &nbs p;     
(setq x  (+(*(+ r d) (cos c)) (* (* r c) (sin c))))
         &nbs p;         &nbs p;     
(setq y  (-(*(+ r d) (sin c)) (* (* r c) (cos c))))
         &nbs p;         &nbs p;     
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;     
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;     
(command "_POINT" (list x y))
         &nbs p;         &nbs p;       
(repeat 100
         &nbs p;         &nbs p;         
(s etq c (+ int c))
         &nbs p;         &nbs p;         
(s etq x  (+(*(+ r d) (cos c)) (* (* r c) (sin c))))
         &nbs p;         &nbs p;         
(s etq y  (-(*(+ r d) (sin c)) (* (* r c) (cos c))))
         &nbs p;         &nbs p;         
(s etq x (+ x (car bod)))
         &nbs p;         &nbs p;         
(s etq y (+ y (cadr bod)))
         &nbs p;         &nbs p;         
(c ommand "úsečka" "@" (list x y) "")
         &nbs p;         &nbs p;         &nbs p;         
)
         &nbs p;         &nbs p;     
(command "regen")
   
      &n bsp;         &n bsp;
(setq part 4))
   
    ((= word "ARCH")   (setq r(getreal"Zadejte poloměr Archimedovy spirály:"))
         &nbs p;         &nbs p;      
(setq pocet (getreal"Zadejte pocet cyklu:"))
         &nbs p;         &nbs p;      
(setq bod (getpoint"Zadejte bod:"))
         &nbs p;         &nbs p;      
(setq t1 0)
         &nbs p;         &nbs p;      
(setq t2 (* pocet PI))
         &nbs p;         &nbs p;      
(setq int (/(- t2 t1) 100.0))
         &nbs p;         &nbs p;      
(setq c t1)
         &nbs p;         &nbs p;      
(setq x (* (* r c) (sin c)))
         &nbs p;         &nbs p;      
(setq y (* (* r c) (cos c)))
         &nbs p;         &nbs p;      
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;      
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;      
(command "_POINT" (list x y) )
         &nbs p;         &nbs p;        
(repeat 100
         &nbs p;         &nbs p;         &nbs p;
(setq c (+ int c))
         &nbs p;         &nbs p;         &nbs p;
(setq x (* (* r c) (sin c)))
         &nbs p;         &nbs p;         &nbs p;
(setq y (* (* r c) (cos c)))
         &nbs p;         &nbs p;         &nbs p;
(setq x (+ x (car bod)))
         &nbs p;         &nbs p;         &nbs p;
(setq y (+ y (cadr bod)))
         &nbs p;         &nbs p;         &nbs p;
(command "úsečka" "@" (list x y) "")
         &nbs p;         &nbs p;         &nbs p;         &nbs p;
)
         &nbs p;         &nbs p;      
(command "regen")
   
      &n bsp;         &n bsp; 
(setq part 5))


   
    (T (prompt "Chyba:nevybral jste žádnou křivku!!!"))
    )
)
a potřebuji aby mi to po provedění  kreslení nějaké křivky dalo nabídku:upravit
křivku/konec->a to jsem myslel udělat,tak aby ji to smazalo a nabídlo mi
to parametry na novou(tu samou)...

Honzicek2006-3-29 15:30:51

Honzicek
29.03.2006, 15:32
vložil bych to jako soubor ale ve škole máme blbý prohlížeče takže tady na to nemám ikonu...soory
kdyžtak díky za radu  zítra se sem podívám--


vknop
29.03.2006, 22:42
[QUOTE=Honzicek] potųebuji aby mi to po provedģnķ  kreslenķ nģjaké kųivky dalo nabķdku:upravit kųivku/konec->a to jsem myslel udģlat,tak aby ji to smazalo a nabķdlo mi to parametry na novou(tu samou)...[/QUOTE]
Viděl bych to třeba tak nějak.  (netestováno, píšu z hlavy)
(defun c:tk ()  (initget "CY EP HYP EV ARCH  ")  (setq word (getkword "Zadejte druh krivky:(CYkloida EPicykloida HYPocykloida EVolventa ARCHimedova-spirála)")        KrivkaOK nil  )  (while (not KrivkaOK)    (command "_undo" "_mark")    (cond ((= word ...    );of cond    (initget "Ano Ne")    (if (= (getkword "\nSpokojen? (Ano/Ne)") "Ne")      (command "_undo" "_back")      (setq KrivkaOK T)    );of if  );of while  (princ))                                                                                    

Honzicek
01.04.2006, 19:15





Děkuji za pomoc hnedka to vyzkouušim...
ještě bych se chtěl zeptat jestli byste mi neporadil s sinusoidou....u ostatních křivek mám parametrické rovnice takže jen počítám souřadnice ale u sinusoidy nevim jak mám napsat souřadnice (x;y)bodu ? 

Seiner
01.04.2006, 20:43
Teda, to nerikejte pred svym matikarem !!!
x bude prostě rust o prirustek (x=x+int) a y je ...zkuste si typnout .... BINGO sin(x)

Honzicek
01.04.2006, 20:45
super funguje to až na jednu mouchu  neproběhne  volba jestli jsem spokojenej  a hned mě to vrátí  na zadávání další křivky....nebude potřeba funkce progn?







Honzicek
01.04.2006, 20:59
Děkuji za pomoc  mě matika vůbec nejde...