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
SKUP RADNJI IZ PODRUČJA MATRICA (REDONIZOVA), NIZOVA, RAZLOMAKA - više vidi ovdje ; a sve je preuzeto od ovdje: https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/sharing-my-matrix-and-fractions-library/td-p/8164199
Primjer naredbe za inverzni (obrtni) redoniz: (setq A (list (list 1.00000 2.00000 3.00000 4.00000) (list 2.00000 0.000000 4.00000 -4.00000) (list 0.000000 1.00000 2.00000 -1.00000) (list 2.00000 1.00000 0.000000 3.00000)))
(inv A)
daje: ((-0.166667 0.166667 -0.0833333 0.416667) (-0.416667 -0.333333 1.29167 0.541667) (0.333333 0.166667 -0.333333 -0.333333) (0.25 0.0 -0.375 -0.125))
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.
presjek-dva-pravca-u-ravnini - (ova radnja nije u sklopu AutoLISP-a, već ju se treba ovdje preuzet) računa presjek dva pravca zadana s po dvie točke (t1 i t2 za jedan pravac i t3 i t4 za drugi pravac). To se odnosi na pravce u ravnini, te dobivena presječna točka ima visinu 0 (list y x 0). Radnja za presjek pravaca se poziva (presjek-dva-pravca-u-ravnini toc1 toc2 toc3 toc4), gdje toc1 i toc2 određuju jedan pravac, a toc3 i toc4 drugi pravac. Ukoliko su dva pravca uzporedna, tada će ova radnja javiti pogrješku i ne će se izvršiti.
Poveznica na sam naputak radnje koju možete preuzet ovdje i dalje ju 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 nad članovima niza, 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. U sklopu radnje LAMBDA, prvo se odrede potrebni razlozi koji će se uporabiti u zadnjem izrazu, a zatim se daju izrazi, od kojih je najbitniji zadnji izraz čiji će se izhod jedino uzeti '(lambda [razlog1 razlog2...] [izraz1 izraz2... izrazN]).
Primjer radnje apply u suradnji s radnjom lambda:
(apply '(lambda (x y z) (* x (- y z))) '(5 20 14)) daje: 30
(apply '(lambda (y x z) (* x (- y z))) '(5 20 14)) daje: -180
(apply '(lambda (y x) (* x (- y z))) '(5 20 14)) daje: ; error: too many arguments
(apply '(lambda (y x) (* x (- y x))) '(5 20 14)) daje: ; error: too many arguments
(apply '(lambda (y x) (* x (- y x))) '(5 20)) daje: -300
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)
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. U sklopu radnje LAMBDA, prvo se odrede potrebni razlozi koji će se uporabiti u zadnjem izrazu, a zatim se daju izrazi, od kojih je najbitniji zadnji izraz (izrazN) čiji će se izhod jedino uzeti '(lambda [razlog1 razlog2...] [izraz1 izraz2... izrazN]).
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)
- (setq pts (list (list 2 3) (list 3 4) (list 5 6) (list 7 8) (list 9 10))) (setq pt (list 5 5)) (mapcar '(lambda (x1) (distance x1 pt)) pts) daje (3.60555 2.23607 1.0 3.60555 6.40312) ;to je niz udaljenosti između članova niza pts i točke pt.
- (setq pts (list (list 2 3) (list 3 4) (list 5 6) (list 7 8) (list 9 10))) (setq pt (list 5 5)) (mapcar '(lambda (x1) (append (list (distance x1 pt)) x1)) pts)
;Sa svakim članom (podniz koji ima suosnice y i x) niza pts računa udaljenost s točkom pt, te iznos pripadne udaljenosti stavlja na prvo mjesto svakog podniza (izpred y i x)
((3.60555 2 3) (2.23607 3 4) (1.0 5 6) (3.60555 7 8) (6.40312 9 10))
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))))) ili (vl-sort niza '(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))
- (setq pts (list (list 2 3) (list 3 4) (list 5 6) (list 7 8) (list 9 10))) (setq pt (list 5 5)) (vl-sort pts '(lambda (p1 p2) (< (distance p1 pt) (distance p2 pt))))
; na osnovu udaljenosti točaka iz niza pts u odnosu na točku pt, ova naredba poreda članove niza po udaljenosti od najmanje do najveće:
((5 6) (3 4) (2 3) (7 8) (9 10))
- (setq pts (list (list 2 3 11) (list 3 4 12) (list 5 6 13) (list 7 8 14) (list 9 10 15))) (setq pt (list 5 5)) (vl-sort pts '(lambda (p1 p2) (< (distance (list (car p1) (cadr p1)) pt) (distance (list (car p2) (cadr p2)) pt))))
;na osnovu udaljenosti točaka iz niza pts u odnosu na točku pt, ova naredba poreda članove niza po vodoravnoj udaljenosti od najmanje do najveće:
((5 6 13) (3 4 12) (2 3 11) (7 8 14) (9 10 15))
search - Ova radnja unutar niza lists traži podnize, koji u sebi na bilo kojem položaju podniza ima član item. Takve podnize koje nađe, daje objedinjene u nizu podnizova.
Ovo je naputbina za radnju koju moraš ubacit u zaglavlje svoje naputbine:
(defun search (item lists) (vl-remove-if-not '(lambda (x) (vl-position item x)) lists))
Primjer:
Command: (setq a '(1 2.1 3) b '(2 3 4) c '(3 4.5 2.1) d '(2 4.0 2.1) e '(3 3.5 2.2))
Command: (search 2.1 (list a b c d e))
((1 2.1 3) (3 4.5 2.1))
trazi-podniz-brn - Ova radnja pronalazi sve podnizove unutar niza niz koji na položaju brn (položaje broji od 0) imaju vriednost vriednost.
Ovo je naputbina za radnju koju moraš ubacit u zaglavlje svoje naputbine:
(defun trazi-podniz-brn (vriednost brn niz) (vl-remove-if-not '(lambda (x) (vl-position vriednost (list (nth brn x)))) niz))
Primjer kako radi:
Command: (setq br1 0)
Command: (setq a '(1 2.1 3) b '(2 3 4) c '(3 4.5 2.1) d '(2 4.0 2.1) e '(3 3.5 2.2))
Command: (trazi-podniz-brn 3 br1 (list a b c d e))
((3 4.5 2.1) (3 3.5 2.2))
NAREDBE VEZANO ZA PODATKOVNICE
vadi-gml - (vadi-gml ime_gml) Ova radnja na osnovu naziva ime_gml traži podatkovnicu ime_gml.gml (u c:\iskol\gml) i iz nje vadi pridjevne podatke između "<jis:" i "</jis:" i njih za svaku jedinku sprema u po jedan niz podataka. Ako se iza "<jis:" pojavljuje "xsi:nil=" tada u niz podataka sprema prazno "". Na ovaj način dobimo niz nizova podataka.
Sve to provjerava u istom redu podatkovnice, ter to ne uzpoređuje u odnosu na više redova odjednom unutar gml-a. Ovo se odnosi na službene gml-ove dobivene iz zemljomjernog upisnika.
Primjer:
Command: (setq ime "CESTICE")
Command: (vadi-gml ime)
(("18848927" "302589" "17754/2" "109.0" "360" "KAMENICA" "0" "2880" "" "" "" "0" "0" "0") ("18848929" "302589" "17755/2" "374.0" "377" "KAMENICA" "0" "2880" "" "" "217" "0" "0" "0") ("18851905" "302589" "19912/1" "333.0" "396" "PODBRIŽI" "0" "2880" "" "" "" "0" "0" "0")
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 unutar cielog crteža, a koje unutar sebe sadrže obaviest (0 . "TEXT"). Ili na pr. (ssget '((0 . "lwpolyline") (8 . "pokazivac"))), gdje od svih označenih predmeta uzima samo one koji su vrste mnogocrta u sloju ,,pokazivac''. Drugim riečima, na ovaj način se odaberu sve jedinke koje su proslovnog oblika (text).
ssget (radi izborni skup od odabranih/označenih predmeta)
Obći oblik naredbe s mogućim ulaznim razlozima (ssget [način odabira] [toc1] [toc2] [niz_točki] [pročistač prema zadanim činbenicima])
Izborni skup može sadržavati predmete od oba izpisa (layouts) i crtaćeg prostora (model space), ali kad se izborni skup koristi za neke radnje, tada se ne uvažavaju predmeti izvan crtaćeg prostora. Izborni skup vraćen s naredbom ssget sadrži samo glavne jedinke (ne pridjevke ili lomove mnogocrti).
Opis ulaznih razloga za naredbu ssget:
- načini odabira:
C - odabir pravokutnikom (primjer: (ssget "_C" '(0 0) '(350 250)) - moraš mu zadat lievu donju i desnu gornju točku pravokutnika, ter svi predmeti koji makar djelomično ulaze u taj pravokutnik, će biti izabrani u izborni skup. Moguće je koristiti i pročistače odabranih predmeta.)
CP - odabir nezatvorenim mnogokutom (primjer: (ssget "_CP" '((1 1)(3 98)(500 98)(500 4))) - odabire sve predmete koji se nalaze unutar zadanog mnogokuta ili ih mnogokut presjeca. Moguće je koristiti i pročistače odabranih predmeta.)
F - odabir mnogocrtom (primjer: (ssget "_F" '((1 1)(3 98)(500 98)(500 4))) - odabire sve predmete koji su u doticaju/ukriženi sa zadanom mnogocrtom. Moguće je koristiti i pročistače odabranih predmeta.)
I - odabir već označenih predmeta (primjer: (ssget "_I" '((0 . "LINE") (62 . 5))) ili (ssget "_I") ali prije pozivanja ovih naredbi moramo već označiti predmete - ovaj način radi tako da prvo unutar CADa odaberemo predmete, a tek onda pozovemo ovu naredbu. U sklopu ovog načina odabira možemo staviti i pročistač, koji onda izdvaja samo neke predmete, po zadanim osobinama od svih izabranih predmeta.)
L - odabir zadnjeg vidljivog predmet koji je dodan u osnovicu podataka (primjer: (ssget "_L") - odabire samo zadnji nacrtani predmet. Moguće je koristiti i pročistače odabranih predmeta.)
P - odabir zadnjeg napravljenog izbornog skupa (primjer: (ssget "_P") - odabire zadnji izborni skup koji je napravljen unutar CADa Moguće je koristiti i pročistače odabranih predmeta.)
W - odabir prozorom (primjer: (ssget "_W" '(31 19) '(500 300)) - odabire predmet koji u podpunosti ulazi u prozor, koji je određen s položajem lievog donjeg kuta i desnog gornjeg kuta. Moguće je koristiti i pročistače odabranih predmeta.)
WP - prozorski mnogokut koji odabire sve predmete koji su u podpunosti unutar zadanog mnogokuta (primjer: (ssget "_WP" '((1 1) (3 300) (500 300) (500 4)) '((0 . "LINE"))) - Moguće je koristiti i pročistače odabranih predmeta.)
X - odabire sve predmete iz osnovice podataka CADa. Ako odredite odabir na način X i ne naznačite pročistače, ssget će odabrati sve jedinke iz osnovice podataka, uključujući jedinke u slojevima koji su izključeni, zaleđeni, ter nisu vidljivi na zaslonu. (primjer: (ssget "_X" '((0 . "LINE"))) ili bez pročistača da sve odabere (ssget "_X"))
:E - odabire sve predmete označene pokazivačem na zaslonu. Označavat se mora pojedinačno, a sukladno uvedenom pročistaču, pojedine predmete će odbiti odabrati. (primjer: (ssget "_:E"))
:N - U ovom slučaju upotriebi naredbu ssnamex (ne ssname) za dodatne obaviesti na odabranim sklopovima i preobraženim poljepisima (matricama) za svaku jedinku odabranu tiekom radnje ssget. Ta dodatna obaviest je dostupna samo za jedinke odabrane kroz slikovni način odabira kano što su prozorski, križni i odabir ubodom.
Za razliku od drugih načina odabira predmeta, :N može vratiti višestruke jedinke s istim imenom jedinke (entity name) u odabranom skupu. Na primjer, ako koristnik odabere podjedinku od složene jedinke kano što su BlockReference, PolygonMesh ili stare vrste mnogocrte, ssget gleda na podjedinku koja je već odabrana prilikom utvrđivanja, ako je već odabrana. Kako god, ssget zapravo dodaje glavnu jedinku (BlockReference, PolygonMesh, i tako dalje) u skup odabira. Izhod mogu biti višestruki unosi s istim imenom jedinke u skupu odabira (svaki će imati različitu obaviest od podjedinki u izvještaju od naredbe ssnamex). (Primjer: (ssnamex (ssget "_:N") 0) - ako sam odabrao načinom odabira točke vraća ((1 <Entity name: 7ee61ac8> 0 (0 (303127.0 5.01085e+006 0.0)))), a ako sam odabrao načinom prozorskog odabira vraća ((3 <Entity name: 7ee61ac8> 0 -1) (-1 (0 (303127.0 5.01085e+006 0.0)) (0 (303128.0 5.01085e+006 0.0)) (0 (303128.0 5.01085e+006 0.0)) (0 (303127.0 5.01085e+006 0.0)))).
:R - Omogućuje odabir jedinke u dugoj transakciji (prienosu, izravnjanju) (nisam uspio izkušati ovaj način!)
:S - Omogućuje odabir samo jedne jedinke (Primjer: (ssget "_:S"))
:U - Omogućava odabir podjedinki. Ne može biti u suradnji s odabirnim načinima duplicate (":D") ili nested (":N"). U ovom načinu, jedinke na vrhu su odabrane po zadanim postavkama, ali koristnik može pokušati odabrati podjedinke pritiskanjem pritisnice CTRL, dok radi odabir. Ta mogućnost je poduprta jedino s međudjelatnim (interaktivnim) odabirima, kano što su prozorski, križni i mnogokutni načini. Nije omogućeno za sve načine odabira, pročistače i skupne odabire. (nisam uspio izkušati ovaj način!)
:V - Primorava na odabir podjedinke. Radi sve međudjelatne, slikovne odabire izvedene od koristnika kano odabire podjedinke. Vraćeni odabrani skup sadrži jedino podjedinke. Ovaj način ne može biti odrađen skupa s odabirnim načinima duplicate (":D") ili nested (":N"). Ova mogućnost je omogućena jedino s međudjelatnim odabirima, kano što su prozorski i križni. Ova mogućnost nije poduprta za sve, pročistače ili skupne odabire.
- toc1:
Točka odabira
- toc2:
Točka odabira
- niz_točki:
Niz točaka
- pročistač prema zadanim činbenicima:
Sdruženi niz koji određuje mogućnosti predmeta. Predmeti koji se podudaraju s pročišćavajućim nizom se dodaju u izborni skup. Ako daš točku ali ne odrediš način odabira predmeta, AutoCAD predpostavlja koristniku odabiranje predmeta ubodom jedne točke.
Naredba ssget Vraća vriednosti: Ime napravljenog izbornog skupa ako je uspješno; inače nil (ništa) ako predmeti nisu odabrani.
Odabrani predmeti su iztaknuti samo kada se ssget koristi bez ulaznih razloga. Skupovi odabranih predmeta troše privremene utore podatkovnica AutoCAD-a, tako da AutoLISP ne smije imati više od 128 otvorenih odjednom. Ako se dosegne ovo ograničenje, AutoCAD ne može stvoriti više odabranih skupova i vraća nil (ništa) na sve pozive naredbe ssget.
Promjenjiva vriednost odabranog skupa može se proslijediti AutoCAD-u kano odgovor na bilo koji upit za odabir predmeta na kojem vrijedi odabir Last (posljednji). AutoCAD zatim odabire sve predmete u promienjivoj vriednosti skupa udabira.
Naredba ssget zanemaruje trenutnu postavku načina Objekt Snap (hvatač predmeta), osim ako je izričito ne zatražite dok ste u radu.
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 nad članovima niza.
Obći oblik radnje: (lambda [razlozi/promjenjivice korišteni unutar izraza] [izraz1]... [izrazN])
Lamda se rabi, kad gore određena radnja nije unapried određena. Ova radnja vraća vriednost zadnjeg izraza (izrazN) i ona se često koristi skupa s radnjom apply, mapcar, vl-sort... kod vršenja radnje nad nekim nizom.
Razlozi/promjenjivice se odnosi na obćeniti član niza, dok [izrazN] se odnosi na izraz koji se treba izvršiti nad svakim članom (Razlozi/promjenjivice) nekog niza.
Primjeri:
- (apply '(lambda (x y z) (* x (- y z))) '(5 20 14)) daje 30
Radnja APPLY (apply [radnja s članovima niza, po potrebi uz pomoć LAMBDA] [niz]) vrši radnju na način kako je određena [radnja] s razlozima/promjenjivicama koji su zadani kano članovi niza [niz]. Pomoću naredbe lambda, odredili smo izraz (* x (- y z)), te smo odredili da u tom izrazu rabimo razloge (x y z). Broj razloga treba u ovom slučaju odgovarati i broju članova niza nad kojim vršimo radnju '(5 20 14).
- (setq brojac 0) (mapcar '(lambda (x) (setq brojac (1+ brojac)) (* x 5)) '(2 4 -6 10.2)) ili (mapcar '(lambda (x) (* 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 neodređenu radnju koja će to raditi. Kano što vidimo, u ova dva primjera izhod je isti, ter je u prvoj naredbi dio naredbe s brojačem zanemaren u izhodu radnje. Promjenjivica brojac se jest izvršila, ter iznosi 4 u ovom slučaju, ali ova cjelokupna naredba izbacuje izhod za samo zadnji izraz (* x 5), gdje x predstavlja svaki član niza, što je zadano na način lambda (x). Pomoću naredbe LAMBDA, odredili smo da se nad svakim članom niza '(2 4 -6 10.2) vrši izraz (* x 5), ter smo kano razlog unutar tog izraza morali navesti (x).
- 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))))) ili (vl-sort niza '(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 svakog podniza u nizu. U sklopu naredbe lambda smo odredili razloge (e1 e2), a onda smo stavili izraz (< (car e1) (car e2)) s tim razlozima koji određuje način redanja članova niza niza.
POTLA ČA STE OVO PROUČILI, MORETE REĆ KAKO STE DOBILI OSNOVNO ZNANJE Z AutoLISP-a !!!
ZA DOM PARIĆANI
BOG I HRVATI