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ěď.
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
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--
[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 ?
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...