Naredbe u podpornom jeziku AutoLISP
Napisao: Dane
Izvori:
http://www.afralisp.net/lispa/lisp.htm
AutoCAD Biblija
OSNOVNO KOD IZRADE PODPORA
Sve podpore u AutoLISP-u moraju imati ,,*.LSP'' u
svom imenu inače ih AutoCAD ne će prepoznavati prilikom pozivanja (na pr.
,,izkolcenje.lsp'').
Za izradu podpora može se služiti jednostavnim
proslovnim obradnicima, kano što je Notepad, ali i onim prilagođenim baš za
pisanje LISP-ova.
PROMJENLJIVE VRIEDNOSTI
Njih se može opisati kano prazna spremišta za
pohranu podataka, koja će biti popunjavana. U AutoLISP-u, promjenljive
vriednosti mogu biti skupovi slova ili brojeva bilo koliko dugačkih, ali moraju
početi sa slovima.
Primjeri dobro napisanih naziva promjenljivih
vriednosti:
- a
- krug1
- tocka1
- d4
Neka promjenljiva vriednost u AutoLISP-u može
sadržavati više od jedne vriednosti u pojedinoj promjenljivoj vriednosti.
Vriednosti mogu biti bilo koje, kano na pr.:
- stvarni broj
- znakoniz
- cieli broj
- označeni skup
Stoga promjenljiva vriednost može pohraniti baš sve.
IZGLED PODPORE
Radite svoju podporu na način ada bude lahko
razumljiva vama i bilo kome drugome. Koristite točku-zarez ,,;'', nakon koje
možete napisati bilo primjetbu, podsjetnik ili naputak koji će vama i drugima
pomoću u boljem snalaženju među naredbama. Sve što dolazi nakon točke-zarez ne
ima ulogu prilikom izvršenja podpore.
OKRUGLE ZAGRADE ( )
Sve naredbe se stavljaju u zagrade. Stoga morate
zatvoriti svaku zagradu koju odtvorite. Unutar zagrade, može biti druga
zagrada, pak unutar druge treća i t. d. Svaki takav skup zagrada u AutoLISP-u
mora imati jednak broj odtvorenih i zatvorenih zagrada. Nije važno gdje ćete
staviti zatvorenu zagradu, jerbo je možete staviti u novi redak ili na nekoliko
razmaka poslije odtvorene zagrade. U oba slučaja, par zagrada se jednako
tumači.
AutoLISP prvo izvodi naredbe u najunutarnjijim
zagradama, pak prema vanjskima. Na pr. u naredbi ,,(setq tocka (getpoint))'' će
prvo izvršiti naredbu ,,getpoint'', pak onda ,,setq''.
NAREDBA ,,DEFUN''
U AutoLISP-u ime od podpore ili podpodpore mora
biti određeno u prvom redku, tako da se rabi naredba ,,defun''. ,,defun'' znači
,,DEFine FUNction'' (odredi podpodporu). ,,defun'' je prva djelatna naredba
kojoj se pridružuje i ime podpodpore (ili podpore). Postoji više načina s kojim
određujemo naredbu ,,defun''.
- (defun povrsina ()
- (defun povrsina (/ tocka1 tocka2)
- (defun c:povrsina ()
- (defun c:povrsina (/ tocka1 tocka2)
- (defun povrsina (pov / tocka1 tocka2)
Prvi način određuje da sve promjenljive vriednosti
koje budeš rabio će biti sveobće, što znači da promjenljive vriednosti ne će
gubiti vriednost niti nakon završetka podpore. Ovako određenu podporu ćeš
pozivati s ,,(povrsina)''.
U drugom načinu ti određuješ koje će promjenljive
vriednosti biti mjestne, t. j. koje će imati vriednost samo dok se podpora
izvršava. Ovako određenu podporu ćeš pozivati s ,,(povrsina)''.
Treći način je isti kano i prvi način, samo što
ima izpried naziva ,,povrsina'' nadodano ,,c:'' (skraćenica od command -
naredba). Na taj način će AutoCAD ovu podporu tumačiti kano i svaku drugu
naredbu od AutoCAD-a. Ovako određenu podporu pozivamo samo s ,,povrsina''.
Četvrti način je isti kano i drugi, samo što je
namješten kano naredba od AutoCAD-a.
U petom slučaju, promjenljiva vriednost ,,pov''
prihvaća prvu vriednost izvan podpore.
OBLICI PODATAKA
Cjelobrojni (integer) - su brojevi u razmaku između -32768 i
+32767 bez desetne točke (na pr. 1)
Stvarni (real) - su brojevi s desetnom točkom (na pr. 2.34)
Znakoniz (string) - znakonizovi mogu biti najveće dužine od 100
bilo kojih znakova
Niz (list) - niz je promjenljiva vriednost koja ima više
jedinki. Točka u crtežu od AutoCAD-a je određena s više od jedne vriednosti.
Ima određen položaj po X-u, po Y-u i po Z-u. U AutoLISP-u, točka je opisana s
jednom promjenljivom vriednošću, nizom od tri jedinke. Prva je vriednost X,
druga je vriednost Y, a treća Z. Neki primjeri nizova:
(7 10)
(34 56 89)
("er" 45 12 56)
Najsitnotvar (atom) - Ako promjenljiva vriednost ima samo
jednu vriednost, to je neka najsitnotvar (atom), na pr. 6. Na pr. za (atom 3) vratit će T,
što znači istina.
Naredba ,,type'' će vratiti vrstu oblika podataka
od promjenljive vriednosti. Na pr. ako upišemo u naredbeni prostor od AutoCAD-a
(type 5), tada će se vratiti kano odgovor INT.
ULAZNE NAREDBE - (dobavljaju podatke od
uporabitelja podpore)
getpoint - ova naredba traži da se ubode točka s
pokazivačem miša.
Na pr. ,,(getpoint "\n Ubodi tocku na
zaslonu:")"
\n - Mora uviek biti malim slovima. Njegova uloga
je da prebacuje proslov u novi red.
Tvoj proslov mora uviek biti između navodnika
" ", a nakon što ubodeš točku mišem naredba ,,(getpoint)'' će vratiti
vriednost položaja točke.
getint - Zahtjeva upis cielog broja (na pr. 1).
Na pr. ,,(getint "\nUpisi broj tocaka:
")'' - Nakon upisa cielog broja, AutoLISP će vratiti taj cieli broj na
uslugu podpori.
getreal - Zahtjeva upis stvarnog broja (na pr. 10.45).
Na pr. ,,(getreal "\nUpisi duzinu:")'' -
Nakon što upišeš na pr. broj 20.51, AutoLISP će vratiti taj broj na uslugu
podpori.
getcorner - Traži drugu točku na zaslonu, ter crta
raztezljivi prozor od početne točke.
Na pr. ,,(getcorner poctoc "\n Ubodi drugu
tocku ruba prozora:")'' - Izradit će raztezljivi pravokutni prozor od
početne unapried zadane točke ,,poctoc'', do sliedeće ubodene točke.
getstring - Traži upis nekog znakoniza.
Na pr. ,,(getstring "\nKako se zoves:
")'' - Unesi neki znakoniz, a AutoLISP će vratiti taj znakoniz.
getdist - Traži vriednost bilo tako da se mišem ubodu
dvie točke na zaslonu ili upiše vriednost dužine s tipkovnice.
Na pr. ,,(getdist "\nUzmi duzinu izmedju
tocki:")'' - Ubodi dvie točke ili unesi dužinu između točki, a AutoLISP će
vratiti tu dužinu na uslugu podpori.
getangle - Traži kut bilo pomoću uboda dviu tičaka s mišem
ili upisom brojevne vriednosti s tipkovnice, koje će AutoLISP vratiti u
jedinicama ,,radiani''.
Na pr. ,,(getangle "\nUnesi kut:")'' -
Ubodi dvie točke za kut ili unesi vriednost kuta s tipkovnice, a AutoLISP će
vratiti vriednost kuta u radianima. Dobiveni kut pomoću uboda mišem se odnosi
na kut između zadanog smjera zadanog u postavkama AutoCAD-a (Format
>Units... >Direction...) i pravca kojeg smo odredili s ubodom ove dvie
točke.
getkword - Traži unos ključne rieči od koristnika.
Na pr. ,,(getkword "\nHoces li stati? (Yes
ili No):")'' - Naredba ,,getkword'' prihvaća samo jednu od te dvie rieči.
getvar - Uzima vriednost iz skupa promjenljivih
vriednosti od AutoCAD-a.
Na pr. ,,(getvar "area")'' - vratit će
vriednost koja je trenutno pohranjena u promjenljivoj vriednosti od AutoCAD-a
,,area''.
initget - Postavlja različite postavke prilikom uporabe
naredbi koje počinju s ,,GET'' (getpoint, getstring...).
Na pr. ,,(initget 1)'' - Ako bi nakon ovog
uporabili neku naredbu koja počinje s ,,get'', tada se ne bi mogao izvršiti
,,unos'' praznog skupa.
Mogućnosti naredbe ,,initget'':
- 1 odbacuje unos praznog skupa
- 2 odbacuje unos ništice
- 4 odbacuje unešene vriednosti manje od ništice
- 8 ne provjerava ograničenja, osim ako nije
postavljen ,,limecheck''
- 16 vraća 3 protežne točke bolje od 2 protežnih
točaka
- 32 koristi crtkane crte prilikom crtanja brisače
trake ili okvira
getorient - Slično je kano naredba ,,getangle'', ali se kut
uviek očitava u odnosu na smjer iztoka.
Na pr. ,,(getorient "\nocitaj kut:")'' -
ubodi dvie točke za smjer kuta, a AutoLISP će vratiti kut između tog smjera i
smjera iztoka.
NAREDBA SETQ (preuzima vriednost)
(setq) je naredba za dodjeljivanje, na pr.: ova
naredba dodjeljuje vriednost od jedne promjenljive vriednosti ili nepromjenljive
vriednosti drugoj promjenljivoj vriednosti.
Napomena: (setq) je osnovna naredba u AutoLISP-u.
Znak ,,='' se ne rabi za dodjeljivanje. ,,='' postoji ali samo kano ne
dodjeljujuća naredba. Ono ne ima ovlasti da vriednost jedne promjenljive vriednosti
prenosi drugoj. (,,='' se rabi za uzporedbe promjenljivih vriednosti, brojeva
ili znakonizova)
(setq a b)
Ova naredba pridružuje vriednost od b,
promjenljivoj vriednosti a.
Napomena: Prva promjenljiva vriednost nakon setq
je ona koja prima vriednost.
NAREDBE ZA IZPIS
prompt - ova naredba se rabi jednostavno za izpis poruka
u naredbenom prostoru od AutoCAD-a. Ukoliko sliedeći red ne sadrži (\n), dvie
uzastopne naredbe od ,,prompt'' će izpisati obje poruke u istom redu. Sbog
toga, svaki izpis poslije naredbe ,,prompt'' mora imati naredbu ,,terpri'' ili
,,\n''.
terpri - ova naredba se stavlja iza naredbe za izpis
proslova, ukoliko želimo da sliedeći izpis ide u novi red. Primjeri:
(prompt "Bog i Sellam
braćo!")(terpri) ili
(prompt "\nBog i Sellam braćo!")
prin1 - Ova naredba izpisuje izraz na zaslonu i vraća
izraz. To može biti bilo koji izraz i ne treba biti znakoniz. Izraz može
također biti upisan u podatkovnicu i izgledat će isto kano i da je izpisan na
zaslonu. Primjeri:
(prin1 "Bog i Sellam") - izpisat će "Bog i
Sellam""Bog i Sellam"
(prin1 a) - izpisat će dvostruko vriednost od a, jedno do
drugoga
- ukoliko želimo spriečiti dvostruki izpis, tada
poslije naredbe (prin1) stavite naredbu (terpri).
(prin1 a f) - izpisat će vriednost od promjenljive vriednosti
,,a'' u odtvorenu podatkovnicu u promjenljivoj vriednosti ,,f''.
princ - Isto je kano i s ,,prin1'', osim što se ne
izpisuju navodnici (""). Također se mogu rabiti za izpis praznih
redova, ali bez ikakve poruke, već samo (princ).
print - Slično kano i kod ,,prin1'', osim što se novi
red izpisuje prije izraza a razmak se izpisuje nakon izraza. Na pr.:
(print "Bog i Sellam") - vratit će "Bog i Sellam" "Bog i
Sellam"
NAREDBA SETVAR
Ova naredba postavlja bilo koju sustavnu
promjenljivu vriednost unutar AutoCAD-a na datu vriednost, ter vraća tu
vriednost. Ime sustavne promjenljive vriednosti mora biti u dvostrukim
navodnicima (" "). na pr.:
(setvar "blipmode" 0) - vraća 0
- ,,blipmode'' će biti na izključeno. 1 će opet
uključiti.
RAČUNSKE RADNJE
(+ 1 1) vraća 2
(- 4 2) vraća 2
(* 3 4) vraća 12
(/ 8 4) vraća 2
(1+ 4)
vraća 5 (povisuje)
(1- 2)
vraća 1 (smanjuje)
NEKE SLOŽENIJE NAREDBE OD AutoLISP-a
polar - ova naredba vraća točku na račun kuta (u
radianima), dužine i točke s obzirom na koju se zasniva.
(polar tocka kut duzina) - vraća položaj točke u obliku niza (y x
z)
Na pr.: (polar (getpoint) 1 10) vraća
(5.61493e+006 5.0733e+006 0.0)
inters - izpituje dvie crte i vraća točku gdje se sjeku, čak ako ne križaju jedna
drugu. Crte zadaješ pomoću točaka.
(inters tocka1 tocka2 tocka3 tocka4)
NAREDBE OD AutoCAD-a u AutoLISP-u
Svaka naredba od AutoCAD-a se može rabiti unutar tvoje podpore u LISP-u,
ali moraš zapamtiti to da se one moraju rabiti točno onako kako se rabe u
AutoCAD-u a njihovo ostvarenje omogućuješ s dvostrukim skupom dvostrukih
navodnika (""). na pr.:
(command "line" tocka1 tocka2 "") - Ovo će nacrtati crtu od tocka1 do tocka2, a "" omogućuje završetak ove redne naredbe.
(graphscr) - vratit će te na crtežni zaslon dok se bude pokretala podpora.
(textscr) - vratit će te na proslovni zaslon dok se podpora bude pokretala.
KAKO DOĆI DO JEDINKI KOJE SU U NIZU?
Kada rabimo (setq a
(getpoint)), dodjeljuješ položaje X, Y i Z promjenljivoj vriednosti
,,a''. Ta promjenljiva vriednost je sada niz koji može izgledati ovako nešto (5 4 2). Ukoliko se želi zaviriti u niz radi pojedinih
jedinki, AutoLISP daje načine da se to izvede prieko naredbi s naredbenog
prostora od AutoCAD-a.
!a Stavljanje ! izpried promjenljive vriednosti, omogućuje prikaz jedne
(ili više) vriednosti od promjenljive vriednosti.
Naredba (car) vraća položaj X (prvu
jedinku iz niza).
Glavna naredba za uzimanje dielova
niza, (car) vraća prvi član iz niza. Ako je vriednost od ,,a'' niz: (3 5 0),
tada (setq b (car
a)) će pridružiti
promjenljivoj vriednosti ,,b'' vriednost od prvog člana u nizu, a to je ,,3''.
Naredba (cdr) vraća cieli niz, ali bez
prvog člana. Znači vraća niz od drugog člana, pak na dalje do zadnjeg člana
niza. Ako je za promjenljivu vriednost ,,a'' niz ovakav: (2 5 7 9 11), tada će
naredba (setq b
(cdr a)) vratiti
promjenljivoj vriednosti ,,b'' drugi i preostale članove iz niza od ,,a'', (5 7
9 11).
Naredba (cadr) vraća položaj Y (drugi
član niza).
Uviek vraća drugi član niza. Ako je
promjenljivoj vriednosti ,,a'' pridružen niz (5 10 0), tada naredba (setq b (cadr a)) vraća član 10.
Naredba (caddr) vraća položaj Z (treći
član niza).
Ova naredba uviek vraća treći član od
niza. Ukoliko je promjenljivoj vriednosti ,,a'' pridružen niz (2 8 9), tada će
naredba (setq c
(caddr a))
vratiti 9.
RADNJE SA ZNAKONIZOM
strcase - mienja znakoniz s malim
slovima u velika slova, ostavljajući velika slova na miru. Na pr.:
(strcase "Za Dom Spremni") vraća "ZA DOM
SPREMNI".
(strcase a) vraća slovčane znakove u
promjenljivoj vriednosti ,,a'', tako da mala slova prevede u velika slova.
strcat - spaja više znakonizova u
jedan znakoniz. Na pr.:
(strcat "Hrvatska" " i
" "Bosna") vraća "Hrvatska i Bosna".
(strcat a b) vraća znakonizove ,,a'' i ,,b'' kano
jedan znakoniz.
strlen - vraća ukupan broj znakova u
jednom znakonizu. Na pr.:
(strlen "Grobnik") vraća 7.
(strlen a) vraća dužinu znakoniza pohranjenu u
promjenljivoj vriednosti od ,,a''.
substr - vraća dio znakoniza, s
određenog položaja, s određenim brojem znakova. Na pr.:
(substr "Hercegovina" 3) vraća "rcegovina".
(substr "Hercegovina" 3 1) vraća "r".
(substr "Hercegovina" 3 4) vraća "rceg".
RADNJE S NIZOVIMA
Navodnik ' ima posebnu ulogu u
AutoLISP-u. Na pr. ako taj navodnik stavimo izpried skupine znakova, dobit ćemo
niz. Na pr.:
'(20 10 5) je niz.
angle - vraća kut između dvie točke u
radianima. Da bismo mogli rabiti taj kut u AutoCAD-u, moramo ga pretvoriti
natrag u stupnjeve s desetnom točkom. Na pr.:
(setq a (angle tocka1 tocka2)) stavlja kut između točaka
tocka1 i tocka2 u promjenljivu vriednost ,,a''.
,,a'' možemo izkoristiti za:
(command "text" tocka
"40" a p) - Ovo je naredba za proslov veličine 40, obrtnog kuta spremljenog u
promjenljivoj vriednosti ,,a'', ter vriednosti prolsova spremljenog u ,,p''.
Ali ,,a'' ne će biti u redu obrtni kut, ukoliko ga prije toga ne pretvorimo u
stupnjeve s desetnom točkom.
append - spaja više nizova u jedan
niz. Na pr.:
(append '(10 20) '(30 40)) vraća niz (10 20 30 40).
(append a b) vraća spoj nizova od
promjenljivih vriednosti a i b kano jedan.
distance - mjeri dužinu između dviu
poznatih točaka. Na pr.:
(setq duzina (distance tocka1 tocka2)) vraća udaljenost između
točaka tocka1 i tocka2, ter pridružuje vriednost udaljenosti promjenljivoj
vriednosti ,,duzina''.
length - vraća ukupan broj članova
od niza. Na pr.:
(length '(a b c d)) vraća 4.
member - traži zadani član niza i
vraća ga skupa s ostatkom niza. Na pr.:
(member 'c '(a b c d e)) vraća (C D E).
nth - vraća n-ti član iz niza, gdje je n
redni broj člana u nizu. (Ništica je prvi član). Na pr.:
(nth 3 '(a b c d)) vraća d.
assoc - ova naredba traži određeni član, a
zatim taj član pridružuje zadanoj promjenljivoj vriednosti. To vriedi za nizove
unutar nizova, t. j. polja.
Neka je promjenljiva vriednost ,,b''
niz ((10 5.5 2.7)(40 5)) a ti tražiš niz koji kano prvi član ima zaporku 40. Ti
želiš izvaditi čitav niz koji sadrži zaporku 40 na početku niza i pridružiti ga
promjenljivoj vriednosti ,,c''. Na pr.:
(setq c (assoc 40 b))
Ovo će pridružiti niz iz niza ,,b''
koji sadrži prvi član 40 u promjenljivu vriednost ,,c''. Tako će promjenljiva
vriednost ,,c'' izgledati ovako (40 5).
subst - Ova naredba omogućuje zamjenu
pojedinog člana nekog niza s nekim drugim znakom. Na pr.:
(setq bl (subst 40 50 '(20 30 50 80))) - Ovdje će se u nizu (20 30
50 80) član 50 zamjeniti s brojem 40, ter će se u promjenljivu vriednost ,,bl''
spremiti niz (20 30 40 80).
Također, kad imamo niz od nizova, tada
možemo zamjenjivati i čitave nizove:
(setq bl (subst '(50 19) '(40 5) (list
'(10 5.5 2.7) '(40 5)))) - Unutar niza od niza ((10 5.5 2.7)(40 5)) će niz (40 5) zamjeniti s nizom
(50 19), ter će završni niz pridružen promjenljivoj vriednosti ,,bl'' izgledati
ovako: ((10 5.5 2.7) (50 19)).
cons - izrađuje novi niz na osnovu dva
člana, tako da prvi član predstavlja zaporku nakon koje dolazi točka. Na pr.:
(setq d (cons 2 5)) - vraća u promjenljivu vriednost
,,d'' ovo (2 . 5).
PRETVARANJA VRIEDNOSTI IZ JEDNOG OBLIKA U DRUGI
angtos - Uzima kut u radianima i
pretvara ga u znakoniz, u poseban oblik.
Mogući oblici od ,,angtos'':
0 stupnjevi
1 stupnjevi/minute/hipovi
2 grada
3 radiani
4 mjerne jedinice
Na pr.: Neka je kut zadan kano 3.
(angtos 3 0 0) vraća "172"
(angtos 3 0 4) vraća "171.8873"
(angtos 3 1 4) vraća "171d53'14\""
fix - ova naredba vraća cieli broj dobiven
od stvarnog broja. Uviek zaokružuje na prvi manji cieli broj. Na pr.:
(fix 8) vraća 8
(fix 8.6) vraća 8
float - ova naredba pretvara cieli broj u
stvarni broj. Na pr.:
(float 8) vraća 8.0
(float 8.6) vraća 8.6
ascii - vraća zaporku (cieli broj) od ASCII
od prvog znaka iz znakoniza. Na pr.:
(ascii "a") vraća 97
(ascii "Bosna") vraća 66
(ascii "%") vraća 37
(ascii "3") vraća 51
chr - vraća znak od znakoniza na račun
brojčane zaporke iz ASCII-a. Na pr.:
(chr 65) vraća "A"
(chr 66) vraća "B"
atof - pretvara string u stvarni broj. Na
pr.:
(atof "9.3") vraća 9.3
(atof "2") vraća 2.0
rtos - pretvara stvarni broj u znakoniz u
posebnom zadanom obliku.
Razno oblici naredbe ,,rtos'':
1 znanstveni
2 desetni
3 strojarski (stopa i desetni palčevi)
4 graditeljski (stopa i razlomački
palčevi)
5 razlomačke jedinice
Stvarni broj može biti namješten u
posebni oblik i broj desetnih mjesta. Na pr.:
(rtos 7.2 1 4) vraća "7.2000E+00"
(rtos 7.2 2 2) vraća "7.2"
(rtos 7.12345 2 3) vraća "7.123"
itoa - pretvara cieli broj u znakoniz. Na
pr.:
(itoa 25) vraća "25"
atoi - pretvara znakoniz u cieli broj. Na
pr.:
(atoi "25") vraća 25
PETLJE I UVJETI
(=) - to nije naredba za
dodjeljivanje, već je to samo ,,setq''. Naredba (=) se rabi samo za provjeru
jednakosti raznih vriednosti.
if - to je uobičajenica za naredbu
ako-tada-inače (if-then-else). U AutoLISP-u je naredba ,,if'' povezana s
naredbom ,,then'' i s ,,else''. Na pr.:
(if (= a b) (setq b 5) (setq b 6))
Ako je ,,a'' jednako ,,b'', tada će
promjenljivoj vriednosti ,,b'' biti pridružen broj 5.
Ako ,,a'' nije jednak ,,b'', tada će
promjenljivoj vriednosti ,,b'' biti pridružen broj 6.
cond - ova naredba može imati bezkonačno
mnogo uvjeta, ter za svaki uvjet vraća neku vriednost. Ukoliko nije izpunjen
niti jedan uvjet, tada vraća prazan skup (nil).
Na pr.: Uporabiteljeva ulazna
vriednost jest promjenljiva vriednost ,,s'',
(cond
((= s
"Y") 1)
((= s
"y") 1)
((= s
"N") 0)
((= s
"n") 0)
(t nil)
)
Ova naredba provjerava uvjete i vraća
1 ako je ,,s'' jednak "Y" ili "y", a 0 ako je ,,s'' jednak
"N" ili "n", a inače prazan skup (nil). Slovo ,,t'' se
obično rabi kano naziv za zadnji uvjet.
repeat - naredba koja se vrti u krug
sve dok se ne izvrši uvjet. Na pr.:
(setq a 10)
(repeat 4
(setq a (+ a 10)))
Vratit će broj 50.
while - to je također kružna petlja koja se
vrti u krug sve dok je uvjet zadovoljen.
Oblik naredbe ,,while'' jest:
(while
provjera-uvjeta
ako-uvjet-jest-izpunjen
onda-izvršavaj-skup-naredbi-koje-sliede-dok-uvjet-više-nije-izpunjen)
Jednostavan primjer podpore u LISP-u s
petljom ,,while'':
(defun c:brojitelj (/ br)
(setq br 1)
(while (< br 5)
(princ "\ntrenutni redni broj ")
(princ br)
(setq br (+ 1 br))
)
)
U ovom primjeru brojač ,,br'' se
stalno povećava za jedan, sve dok se ne popne do 5, ter nakon svakog povećanja
za jedan, on se izpisuje.
JEDINKA (ENTITIES)
Svaka jedinka je najjednostavniji
predmet koji možeš smjestiti na svom zaslonu. Sliedeće jedinke su: CRTA, KRUG,
LUK, PROSLOV, MNOGOCRTE, i t. d. Jedinke su pohranjene i upućene u crtežnoj osnovici
podataka. Te jedinke mogu biti mienjane po porabi koristeći AutoLISP. Svaka
jedinka je određena s množtvom podataka u osnovici podataka. Na pr.: Podatci za
jednu crtu sadrže sliedeće obaviesti:
Ime jedinke (Entity name), oblik
jedinke (Entity type), mast (Color), početni položaj x y z, završni položaj x y
z, vrstu crte, i t. d. Ti moreš bilo promieniti ili samo dobiti bilo koji od
ovih podataka bilo koje jedinke. Evo primjera niza podataka od neke jedinke:
((-1 . <Entity name: 7ef60f68>) (0 .
"LINE") (330 . <Entity name: 7ef60cf8>) (5 . "E5")
(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbLine") (10 457.917 612.772 0.0) (11
1107.86 416.056 0.0) (210 0.0 0.0 1.0))
Ovo je primjer jedinke od obične crte.
Kano što vidimo, svaki opisni podatak od crte se nalazi pod nekim rednim
brojem. Tako se početni položaj od crte nalazi pod rednim brojem 10, a završni
položaj crte pod rednim brojem 11. Pod rednim brojem 0 se nalazi vrsta jedinke.
ssget i entsel (naredbe za odabir
jedinki)
Obje omogućuju način odabira jedinki
za skup. (entsel) omogućuje odabir samo jedne
jedinke od jednom. U ovom slučaju samo s mišem ubodeš određenu jedinku. Naredba
(ssget) omogućuje odabir jedne ili
više jedinki. Nakon pokretanaj te naredbe jedinke odabereš bilo da svaku
posebno ubodeš mišem ili zaokružiš raztezljivim prozorom. Najčešće se rabi (ssget).
Naredba (setq a (ssget)) će omogućiti odabir više jedinki.
Tako ćete dobiti odabirni skup s posebnim nazivom, na pr. <Selection set:l>, pohranjen u promjenljivoj
vriednosti a. Također možeš rabiti mogućnost
pročišćivača (setq a
(ssget "X" '((0 . "TEXT")))) za potražnju jedinki koje unutar sebe sadrže obaviest (0 . "TEXT"). Drugim riečima, na ovaj način
se odaberu sve jedinke koje su proslovnog oblika (text).
ssname (uzima ime jedinke)
Ova naredba vraća ime jedinke određenog predmeta
iz skupa izabranih predmeta. To ime je napisano kano broj s osnovicom 16. Prima
dvie vriednosti: skup izabranih predmeta i redni broj predmeta u skupu
izabranih predmeta, Broj prvog predmeta je 0, drugog 1 i t. d.
Na pr.:
Unesimo naredbu (ssname
(ssget) 0). Nakon što odaberemo bilo koje izcrtane predmete, dobit ćemo
ime jedinke, t. j. predmeta koji se nalazi pod rednim brojem 0 u odabirnom
skupu: <Entity name: 7ef60f78>
entget (vraća niz podataka od jedinke)
Ova naredba vraća niz podataka od odabranog
predmeta. Taj niz se može pridružiti nekoj promjenljivoj vriednosti. Na pr.:
(entget (ssname (ssget) 0))
ili
(setq a (ssget))
(setq b (ssname a 0))
(setq c (entget b))
vraća
((-1 . <Entity name: 7ef60f78>) (0 .
"TEXT") (330 . <Entity name: 7ef60cf8>) (5 . "E7")
(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbText") (10 471.704 345.238 0.0) (40 .
382.081) (1 . "gfh") (50 . 4.6499) (41 . 1.0) (51 . 0.0) (7 .
"Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100
. "AcDbText") (73 . 0))
subst (mienja novo sa starim)
Omogućuje ti zamienu jednog podatka od
jedinke s drigim. Na pr. tako možeš od neke proslovne jedinke promieniti njen
položaj, veličinu slova, sloj i slično.
Primjer:
Neka se u promjenljivoj vriednosti
,,c'' nalazi pohranjen niz podataka od jedinke.
(setq tocka (assoc 10 c)) - vraća položaj od jedinke (10 471.704 345.238 0.0)
(setq nova_tocka '(10 500 400 0.0)) - ovime radimo novi niz
(setq c (subst nova_tocka tocka c)) - ovime mienjamo podatak
položaja od ove jedinke. Tako će ova naredba vratiti ovo:
((-1 . <Entity name: 7ef60f78>) (0 .
"TEXT") (330 . <Entity name: 7ef60cf8>) (5 . "E7")
(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbText") (10 500 400 0.0) (40 . 382.081) (1
. "gfh") (50 . 4.6499) (41 . 1.0) (51 . 0.0) (7 .
"Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100
. "AcDbText") (73 . 0))
entmod (potvrđuje promienu podatka
od jedinke)
S ovom naredbom se vrši potvrda
promiene podatak unutar jedinke i u osnovici podataka od AutoCAD-a. Bez ovoga,
naredba (subst) sama po sebi ne bi uspjela.
Zato u predhodnom slučaju da bi se
promiena izvršila i u osnovici podataka (a time znači i na zaslonu računala)
još moramo staviti (entmod c).
sslength
Vraća broj ukupno odabranih jedinki t.
j. predmeta na zaslonu.
POTLA ČA STE
OVO PROUČILI, MORETE REĆ KAKO STE DOBILI OSNOVNO ZNANJE Z AutoLISP-a !!!
ZA DOM PARIĆANI
BOG I HRVATI