Povratak / Back

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

 

 

Free Web Hosting