Povratak / Back

Naredbe u naputnom jeziku AutoLISP

 

Napisao: Dane

 

Izvori:

 http://www.afralisp.net/lispa/lisp.htm

https://www.afralisp.net/autolisp/

AutoCAD Biblija

http://download.tutoriali.org/Tutorials/Programiranje/AutoLISP.pdf

http://docs.autodesk.com/ACD/2011/ENU/filesALR/WSfacf1429558a55de1a7524c1004e616f8b-5913.htm

 

 

OSNOVNO KOD IZRADBE 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 (Crimson Editor...).

Znakovne zaporke koje u naputnom jeziku Lisp predstavljaju određene radnje:

\e glumi pritisak na tipku Esc

\n glumi oznaku za novi red (primjena: (princ "\nOznaci sve crte medja"), gdje će zahvaljujući \n izpred nadpisa, taj nadpis biti pisan uviek u novom redu)

\r glumi pritisak na tipku Enter

\t glumi pritisak na tipku Tab

 

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

- niz (list)

- znakoniz

- cieli broj

- označeni skup

 

Stoga promjenljiva vriednost može pohraniti baš sve.

 

VRŠITELJI RADNJI U AUTOLISPU

(+ broj1 broj2 broj3...brN) - primjer (+ 2 4 3) daje 9

(- broj1 broj2 broj3...brN) - primjer (- 10 4.2 3) daje 2.8

(* broj1 broj2 broj3...brN) - primjer (* 2 4 3) daje 24

(/ broj1 broj2 broj3...brN) - primjer (/ 36 4 3) daje 3

(1 + broj) - primjer (1+ 2.3) daje 3.3

(1 - broj) - primjer (1- 2.3) daje 1.3

(= x y) - uzpoređuje dva broja i vraća T ako je istina ili nil ako je laž. Primjer (= 3.0 3) daje T, a za (= 3.1 3) daje nil.

(/= x y) - uzpoređuje dva broja i vraća T ako je istina ili nil ako je laž. Primjer (/= 3.0 3) daje nil, a za (= 3.1 3) daje T.

(< broj1 broj2 broj3...brN) - daje T ako brojevi s lieva na desno strogo rastu po veličini. Primjer (< 4 67 89) daje T, a (< 56 70 70) daje nil, jer su dva broja jednaka. Isto samo obrnuto vriedi i za (> broj1 broj2 broj3...brN)

(<= broj1 broj2 broj3...brN) - daje T ako brojevi s lieva na desno rastu po veličini ili ako su susjedni brojevi makar jednaki. (<= 56 70 70) daje T. Isto ali obrnuto vriedi i za (>= broj1 broj2 broj3...brN)

 

 

IZGLED PODPORE

 

Radite svoju podporu na način da 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. Svakako preporučujem izradbu naputbine preko više podnaputbina, koje kasnije uviek možete pozivat za određene radnje, bez da opet izmišljate toplu vodu.

 

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.

(setvar "osmode" 0) - izključuje OSNAP, a neki drug broj (t.j. zaporka bi uključio jednu iliviše mogućnosti osnapa)

 

NAREDBE IZ OLOSLOVLJA (RAČUN)

 

abs - Obći oblik naredbe je (abs [broj]). Daje podpunu vriednost broja. Ovaj broj može biti cjelobrojan i stvaran.

Primjeri:

(abs 7) daje 7

(abs -2.5) daje 2.5

 

angle - vraća kut crte koja prolazi kroz točke [toc1] i [toc2]. Obći oblik naredbe je (angle [toc1] [toc2]). Kut se mjeri od jestnog smjera osi y odgovarajuće ravnine. Jedinica dobivenog kuta je radian (luk). Kut raste u smjeru koji je suprotan smjeru kretanja kazaljke na dobnjaku. Ako se odrede troprotežne točke, onda se točke preslikaju na odgovarajuću ravninu.

Primjer:

(ANGLE (LIST 1 4 5) (LIST 4 5 7)) daje 0.321751

(ANGLE (LIST 1 4) (LIST 4 5)) daje 0.321751

 

NAREDBE VEZANE ZA MJERNIČTVO

 

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)

 

mnogokuti-od-crta - (ova radnja nije u sklopu AutoLISP-a, već ju se treba ovdje preuzet) daje niz mnogokuta od najmanje površine prema najvećoj koje još imaju uz sebe upisane i površine mnogokuta, a ako neke crte ne zatvaraju mnogokut, uz njih nam na crtežu stavi napomenu da se radi o pogrješci, te ne će stvoriti mnogokut unutar kojeg se nalazi ta pogrješka ukoliko su nepovezane crte vezane za taj mnogokut.

podanputbinu pozovi kano (mnogokuti-od-crta niz_crta), gdje je niz_crta razlog.

Ovu radnju pozivamo na sliedeći način, a to je da kano vriednostnicu toj radnji stavimo niz crta određenih s dvie točke:

(mnogokuti-od-crta ((list (list (list ya1 xa1 0) (list yb1 xb1 0)) (list (list ya2 xa2 0) (list yb2 xb2 0))... (list (list yaN xaN 0) (list ybN xbN 0)) ))) , gdje su ya i xa susonice prve točke crte, yb i xb druge točke crte.

Izhod te radnje onda bude niz mnogokuta od najmanje površine prema najvećoj koje još imaju uz sebe upisane i površine mnogokuta (Ako neke crte ne zatvaraju mnogokut, uz njih na crtežu nam stavi napomenu da se radi o pogrješci, ter mnogokut unutar kojeg je pogrješka nepovezanih crta a koje su još vezane na taj mnogokut, ne će biti dobiven):

(list (list povrsinaa (list (list ya1 xa1 0) (list ya2 xa2 0)... (list yaN xaN 0))) (list povrsinab (list (list yb1 xb1 0) (list yb2 xb2 0)... (list ybN xbN 0)))... )

Poveznica na sam naputak radnje koji možete ovdje preuzet i dalje ga izkoristiti.

 

punktinpolylinie - (ova radnja nije u sklopu AutoLISP-a, već ju se treba ovdje preuzet) daje odgovor je li neka točka unutar zatvorenog mnogokuta ili nije. Ukoliko je točka na nekoj od stranica mnogokuta, također će javiti da je unutar mnogokuta.

Radnju pozivaj kano (punktinpolylinie tocka mnogokut) , gdje su tocka i mnogokut promjenljivice.

Obći primjer:

Neka je mnogokut zadan kano:

(setq mnogo (list (list y1 x1 0) (list y2 x2 0)... (list yN xN 0))

Neka je točka zadana kano:

(setq toc (list yt xt 0))

Tada Radnju za izpitivanje je li točka u mnogokutu pozovemo kano (punktinpolylinie toc mnogo), ter nam ona javi T ili nil ovisno je li ili nije točka unutar mnogokuta.

Poveznica na sam naputak radnje koji možete ovdje preuzet i dalje ga izkoristiti.

 

toc-crto-duz - (ova radnja nije u sklopu AutoLISP-a, već ju se treba ovdje preuzet) na osnovu zadane točke i pravca koji je određen dvima točkama, daje odgovor kolika je udaljenost točke od tako zadanog pravca.

Radnju za račun udaljenosti točke od pravca pozivaj kano (toc-crto-duz (list ytoc xtoc ztoc) (list ycrta_poc xcrta_poc zcrta_poc) (list ycrta_kraj xcrta_kraj zcrta_kraj))

Tako pozvana radnja će vratit iznos najkraće udaljenosti između točke i pravca zadanog s dvie točke.

Poveznica na sam naputak radnje koju možete preuzet ovdje i dalje ju izkoristiti.

 

promieni-sklop - (ova radnja nije u sklopu AutoLISP-a, već ju se treba ovdje preuzet) ova podnaputbina kano ulazne razloge ima -ime jedinke-, -naziv pridjevka (podjedinke sklopa) kojeg želimo mienjati (oblik znakoniz), vriednost (u obliku znakoniza) koju želimo pridružiti tom pridjevku.

Izlazna vriednost ove podnaputbine jest izmienjena vriednost pridjevka unutar sklopa

PRIMJER: (promieni-sklop (car (entsel)) "VRSTA" "34") ;uvjet je da odabrani sklop ima u sebi pridjevak pod nazivom "VRSTA", te tada radnja vraća unutar odabranog sklopa izmienjeni vriednost pridjevka.

Poveznica na sam naputak radnje koju možete preuzet ovdje i dalje ju izkoristiti.

 

NAREDBE 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.

 

Naredba "-bhatch" koja crta izpunu na osnovu zadanog zatvorenog mnogokuta prikazanog preko niza točaka:

(command "-bhatch" "p" "s" "a" "i" "y" "s" "n" "" "w" "N") (apply 'command (list (list 1 1) (list 4 4) (list 7 1))) (command "c" "" "w" "" "")

Naredba "-bhatch" koja crta više izpuna s izdvojenim otocima na osnovu zadanog niza zatvorenih mnogokuta pohranjenih u promjenljivici polje:

(setq br10 0)

(command "-bhatch" "p" "s" "a" "i" "y" "s" "n" "" "w" "N")

(while (> (length polje) br10)

  (apply 'command (nth br10 polje)) (command "c" "" "w") (setq br10 (+ br10 1))

)

(command "" "") ;radi za crtanje izpune

 

(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.

 

(osnap) - ovdje vidi više o toj naredbi

 

(chprop) - mienja šaru, sloj, vrstu crte, mjerilo crte, debljinu crte i visinu crte u troprotežnom prikazu kod označenog predmeta. Razpis naredbe: (command "chprop" [promjenjivica označeni predmet(i)] "" "[Color/LAyer/LType/ltScale/LWeight/Thickness]" [vriednost koju želimo] "")

Color - šara predmeta

LAyer - sloj

LType - vrsta crte

ltScale - mjerilo prikaza crtkane crte

LWeight - debljina crte

Thickness - prikaz visine/debljine crte koja se može vidjet iz troprotežnog prikaza

Primjer uporabe naredbe:

(setq p1 (ssget ":S" )) ili (setq p1 (ssget))

(command "chprop" p1 "" "C" 1 "") ;označenom predmetu (ili predmetima) pl će promienit šaru u crvenu.

 

 

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".

 

vl-string-search - vraća broj položaja prvog nađenog podznakoniza unutar zadanog znakoniza, uz mogućnost određivanja početnog pložaja pretraživanja unutar zadanog znakoniza. Položaj se u zadanom znakonizu počinje brojat od 0.

(vl-string-search "dio_znakoniza_ciji_polozaj_trazis_trazis" "zadani_znakoniz_unutar_kojeg_trazis" [broj_polozaja_od_kojeg_pocinje_pretraga]) - ovo je obći oblik te naredbe, koji onda vraća broj pložaja u znakonizu traženog podznakoniza.

Primjer:

(vl-string-search "," "45,5677,986875,GFGF" 0) vraća 2.

(vl-string-search "," "45,5677,986875,GFGF" 3) vraća 7.

 

 

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 isto kano i (list 20 10 5).

 

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.

 

apply - radnja APPLY (apply [radnja] [niz]) vrši radnju na način kako je određena [radnja] s razlozima/promjenjivicama koji su zadani kano članovi niza [niz]. Na pr. [radnja] može biti '+ ili 'strcat...

Primjeri:

(apply '+ (list 1 2 8 8)) daje 19

(apply 'strcat (list "H" "r" "v" "a" "t" "s" "k" "a")) daje "Hrvatska"

Za uporabu složenijih naredbi nad članovima niza, dobro dođe i radnja lambda koja je potrebna da bi se takva posebna radnja odradila nad članovima niza.

Primjer radnje apply u suradnji s radnjom lambda:

(apply '(lambda (x y z) (* x (- y z))) '(5 20 14)) daje 30

 

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.

 

mapcar - radnja MAPCAR (mapcar [radnja] [niz]) vrši radnju nad svakim pojedinim članom zadanog niza.

Primjer:

(mapcar '1+ (list 2 4 5 6)) daje (3 5 6 7)

Kod određivanja radnje nad članovima niza tu onda dobro dođe radnja LAMBDA koja određuje nepoznatu radnju koja će to raditi.

Primjer izvršavanja naredbe MAPCAR pomoću radnje LAMBDA:

- (setq brojac 0) (mapcar '(lambda (x) (setq brojac (1+ brojac)) (* x 5)) '(2 4 -6 10.2)) daje (10 20 -30 51.0)

 

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 članom. 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)).

Ova naredba je važna i kod promjene podataka nekog predmeta (sloja, suosnice ili neke druge osobine):

Neka se u promjenljivoj vriednosti (promjenljivici) ,,c'' nalazi pohranjen niz podataka od jedinke:

((-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))

(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))

Na kraju, da bi se ova promjena suosnice ovog predmeta doista izvršila, potrebna je naredba entmod, koja tu promjenu izvrši u osnovici podataka unutar naputbine CAD.

 

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).

 

vl-remove - iz niza briše zadani član niza. Na pr.:

(vl-remove član_niza niz) - iz niza briše član_niza

(vl-remove 56 (list 3 5 6 8 56 89)) će napravit da izbaci 56 iz tog niza (3 5 6 8 89)

 

vl-sort - članove niza reda po veličini.

(vl-sort niz način_redanja_članova)

Na pr.:

(setq nizb (list 3 4 2 1 0 2.3))

(vl-sort nizb '<) će napraviti da se brojevi u nizb poredaju od najmanjeg prema najvećem (0 1 2 2.3 3 4).

Ovdje je također prikazan način kako pomoću naredbe vl-sort poredati po veličini niz, ako su članovi niza opet nizovi i to tako da se uzmu u obzir prvi članovi unutarnjih nizova:

(setq niza (list (list 4 10) (list 5 6) (list 1 3 6) (list 3 (list 34 2.3 4)) (list 2 2 7) (list 3 1)))

(vl-sort niza (function (lambda (e1 e2) (< (car e1) (car e2)))))

naredba vraća: ((1 3 6) (2 2 7) (3 (34 2.3 4)) (3 1) (4 10) (5 6))

 

PRETVARANJA VRIEDNOSTI IZ JEDNOG OBLIKA U DRUGI

 

angtof - (angtof [znakoniz] [način]) - radnja preobražava vriednost znakoniza, koji predstavlja neki kut u nekim mjernim jedinicama, u broj koji predstavlja iznos kuta u lučnim jedinicama. Kut će biti dobiven u lučnoj mjernoj u ovisnosti o načinu pretvaranja iz neke od mjernih jedinica za kut. Sliedeće vriednosti načina koje predstavljaju određenu mjernu jedinicu iz koje treba pretvoriti znakoniz u lučne jedinice:

0 desetni stupnjevi

1 stupnjevi/minute/hipovi

2 grada (posto)

3 radiani (luk)

4 zemljoupisničke jedinice

Primjeri:

(ANGTOF "180" 1) daje 3.14159

(ANGTOF "200" 2) daje 3.14159

 

angtos - (angtos [kut u luku] [način] [broj desetnina]) Uzima kut u radianima i pretvara ga u znakoniz, u poseban oblik. Ova radnja je zapravo obrnuta od radnje angtof. Ova radnja također ovisi kako su radnje unutar AutoCADa DIMZIN i UNITMODE namješteni. Mogućnosti [način] i [broj desetnina] su u vezi sa sustavnim radnjama AUNITS i AUPREC unutar naputbine AutoCAD. Ako se ove mogućnosti izričito ne navedu, radnje AUNITS i AUPREC će biti namještene na podrazumievane vriednosti. Na pr. 0.

Mogući oblici od ,,angtos'':

0 desetni stupnjevi

1 stupnjevi/minute/hipovi

2 grada (posto)

3 radiani (luk)

4 zemljoupisničke jedinice

Primjeri:

(angtos 3 0 0) vraća "172"

(angtos 3 0 4) vraća "171.8873"

(angtos 3 1 4) vraća "171d53'14\""

(angtos -3 1 4) vraća "188d6'46\""

(ANGTOS PI 1) vraća "180d"

(ANGTOS PI 0) vraća "180"

(ANGTOS PI 1 6) vraća "180d0'0.00\""

 

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.

 

and - ovo je smislena radnja koja ako je istinita vraća TRUE (istina), a ako je laž vraća NIL.

Primjeri:

(and (< 1 4) (= 2 2)) daje T

(and (= 3 4) (< 3 5)) daje NIL

 

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.

 

JEDINKE (ENTITIES)

 

Svaka jedinka je najjednostavniji predmet koji možeš smjestiti na svom zaslonu. Sliedeće jedinke su: CRTE, KRUŽNICE, LUKOVI, PROSLOVI, VIŠEREDNI PROSLOVI, MNOGOCRTE, SKLOPOVI 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 pokretanja 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).

 

entnext (vraća ime prvog sliedećeg predmeta (jedinke) u crtežu. Pojedini predmeti poput sklopova s pridjevcima i 3 protežnih mnogocrta imaju podjedinke, te pomoću naredbe entnext također možemo doći i do tih podjedinki unutar jedinke). Na primjer:

(setq sklop1 (entget (ssname (ssget) 0))) Dobijemo sliedeće:

((-1 . <Entity name: 7ee5a6c8>) (0 . "INSERT") (330 . <Entity name: 7ee58cf8>)

(5 . "239") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "8_tocke") (100

. "AcDbBlockReference") (66 . 1) (2 . "TOCKE") (10 12.7374 6.87866 0.0) (41 .

1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)

(210 0.0 0.0 1.0))

Ukoliko nas zanimaju podjedinke (pridjevci) unutar ovog sklopa, tada se po njima šećemo pomoću naredbe entnext, a prvo krenemo s imenom ove jedinke:

(setq ime_jedinke (cdr (car sklop1)))

<Entity name: 7ee5a6c8>

(setq ime_podjedinke1 (entnext ime_jedinke))

<Entity name: 7ee5a6d0> (kako bi vidjeli što sadržava ova podjedinka sklopa, vidimo pomoću naredbe entget:

(entget ime_podjedinke1)

((-1 . <Entity name: 7ee5a6d0>) (0 . "ATTRIB") (330 . <Entity name: 7ee5a6c8>)

(5 . "23A") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "8_tocke") (62 .

190) (100 . "AcDbText") (10 13.4374 7.57866 0.0) (40 . 1.5) (1 . "8388") (50 .

0.0) (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 . "AcDbAttribute") (2 . "TOCKA") (70 . 0) (73 . 0) (74 .

0) (280 . 0))

Ukoliko napravimo još jedan entnext od imena te ime_podjedinke1, tada dobijemo sliedeću podjedinku unutar sklopa:

(setq ime_podjedinke2 (entnext ime_podjedinke1)) te tako dobijemo ime sliedeće podjedinke i tako bi mogli dalje odvrtiti sve podjedinke unutar ovog odabranog sklopa:

<Entity name: 7ee5a6d8>

(entget ime_podjedinke2)

((-1 . <Entity name: 7ee5a6d8>) (0 . "ATTRIB") (330 . <Entity name: 7ee5a6c8>)

(5 . "23B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "8_tocke") (62 .

190) (100 . "AcDbText") (10 -325482.0 -5.01941e+006 0.0) (40 . 1.5) (1 . "")

(50 . 0.0) (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 . "AcDbAttribute") (2 . "VISINA") (70 . 1) (73 . 0)

(74 . 0) (280 . 0))

Uglavnom, ova naredba je koristna za izvlačenje podataka iz sklopa koji sadrži u sebi pridjevke.

 

ssname (uzima ime jedinke na osnovu rednog broja iz skupa, kojeg smo odredili pomoću naredbe ssget)

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) br))

ili

(setq a (ssget))

(setq b (ssname a br))

(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))

 

entmod (vrši promienu podatka unutar osnovice podataka neke jedinke)

Radnja entmod mienja obaviesti u osnovici podataka za jedinku ili podjedinku čije ime jedinke je određeno s -1 unutar člana niza koji čini jedinku. Glavni način na koji AutoLISP mienja osnovicu podataka je kroz prikupljanje jedinki s naredbom entget, mienjanje članova niza koji čine jedinke pomoću naredbe subst, ter da te promjene u nizu jedinke sprovedemo u osnovici podataka CADa s naredbom entmod.

Ograničenja u korištenju radnje entmod:

Tu su neka ograničenja na promjene koje bi radnja entmod mogla vršiti:

Vrsta jedinke ne može biti promienjena. Ako to želiš napraviti, tada koristi naredbu entdel za izbrisat jedinku, ter tada napravi novu jedinku u naredbenom prostoru CADa ili pomoću radnje entmake.

Radnja entmod ne može mienjati unutardnja polja (podjedinke), kano na pr. ime jedinke u zagradi s -2 kod vrste podjedinke ,,seqend''.

Takvi pokušaji promjene se ne će uzeti u obzir.

Radnju entmod ne možeš izkoristiti za promjenu jedinke vrste ,,viewport'' (gledolaz).

Primjeri:

Sliedeći niz naredbi dobavlja svojstva jedinke, a potom ju mienja.

Stavi promjenljivicu en1 za ime prve jedinke u crtežu:

Command: (setq en1 (entnext))

<Entity name: 2c90520>

Stavi promjenljivicu nazvanu ed za podatke jedinke (niz svojstva predmeta) od jedinke en1:

Command: (setq ed (entget en1))

((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))

Promieni član niza podataka (zagradu) sa svojstvom sloja iz sloja 0 u sloj 1 pomoću naredbe subst:

Command: (setq ed (subst (cons 8 "1") (assoc 8 ed) ed ))

((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))

Promieni sloj jedinke en1 u osnovici podataka crteža:

Command: (entmod ed)

((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))

 

sslength

Vraća broj ukupno odabranih jedinki t. j. predmeta na zaslonu pomoću naredbe (ssget).

Na pr.:

(sslength (ssget))

Vraća broj odabranih predmeta na crtežu.

 

POSEBNE NAREDBE UNUTAR AutoLISPa

 

lambda

Određuje nepoznatu radnju.

Obći oblik radnje: (lambda [razlozi/promjenjivice korišteni unutar izraza] [izraz1]... [izrazN])

Lamda se rabi, kad gore određena nova radnja nije opravdana. Ova radnja vraća vriednost zadnjeg izraza (izrazN) i ona se često koristi skupa s radnjom apply i/ili mapcar kod vršenja radnje na nekom nizu.

Primjeri:

- (apply '(lambda (x y z) (* x (- y z))) '(5 20 14)) daje 30

Radnja APPLY (apply [radnja] [niz]) vrši radnju na način kako je određena [radnja] s razlozima/promjenjivicama koji su zadani kano članovi niza [niz]. Na pr. [radnja] može biti '+ ili 'strcat...

- (setq brojac 0) (mapcar '(lambda (x) (setq brojac (1+ brojac)) (* x 5)) '(2 4 -6 10.2)) daje (10 20 -30 51.0)

Radnja MAPCAR (mapcar [radnja] [niz]) vrši radnju nad svakim pojedinim članom zadanog niza. Kod određivanja radnje nad članovima niza tu onda dobro dođe radnja LAMBDA koja određuje nepoznatu radnju koja će to raditi.

- radnjaVL-SORT (setq niza (list (list 4 10) (list 5 6) (list 1 3 6) (list 3 (list 34 2.3 4)) (list 2 2 7) (list 3 1)))

(vl-sort niza (function (lambda (e1 e2) (< (car e1) (car e2)))))

radnja vraća: ((1 3 6) (2 2 7) (3 (34 2.3 4)) (3 1) (4 10) (5 6)) gdje su se članovi niza poredali po veličini s obzirom na prvi član niza u nizu.

 

 

 

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