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))
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))
(3 4 5)
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 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