Računalna podpora koja nakon što se označi nekoliko zatvorenih mnogocrta t.
j. mnogokuta, izpisuje te površine u vanjsku podatkovnicu
;Račnalna podpora koja
po rednim brojevima izpisuje površine mnogokuta pod
;pojedinim rednim
brojevima. Pod jedan redni broj može se označiti više mnogokuta.
;Tj. pod jedan redni
broj može staviti sbroj površina od više mnogokuta.
;-- IZRADIO DANE --
;--ZA DOM SPREMNI--
;---BOG I HRVATI---
(defun c:ip ()
(setq naziv (getstring "\nnaziv izpisne
podatkovnice:"))
(setq podatkovnica (strcat
"c:\\iskol\\" naziv ".pov"))
(setq d (open podatkovnica "w"))
(princ "\noznaci redni broj povrsine 1
i pritisni ENTER")
(setq skupsl (ssget))
(princ "\noznaci jedan ili vise
mnogokuta i pritisni ENTER")
(setq skupmnog (ssget))
(setq
sl (cdr (assoc 1 (entget (ssname skupsl 0)))))
(setq pov_br 0)
(setq br 0)
(while (< br (sslength skupmnog))
(command "area"
"object" (ssname skupmnog br))
(setq pov (getvar "area"))
(setq pov_br (+ pov pov_br))
(setq br (+ br 1))
)
(princ (strcat "\n" sl " " (rtos pov_br 2 2)) d)
(setq br1 1)
(while (/= skupmnog nil)
(setq br1 (+ br1 1))
(princ (strcat "\noznaci redni broj
povrsine " (rtos br1 2 0) " i pritisni ENTER"))
(setq skupsl (ssget))
(princ "\noznaci jedan ili vise
mnogokuta i pritisni ENTER")
(setq skupmnog (ssget))
(if (/= skupmnog nil)
(progn ;nuždno ukoliko pod petlju if spada
više naredbi
(setq sl (cdr (assoc 1 (entget (ssname
skupsl 0)))))
(setq pov_br 0)
(setq br 0)
(while (< br (sslength skupmnog))
(command "area"
"object" (ssname skupmnog br))
(setq pov (getvar "area"))
(setq pov_br (+ pov pov_br))
(setq br (+ br 1))
)
(princ (strcat "\n" sl
" " (rtos pov_br 2 2)) d)
)
)
)
(close d)
)
Naputak za uporabu ovde
podpore:
- Na pamtilu ,,C:\'' moraš stvoriti
pohranilište (folder) pod nazivom ,,iskol''.
- odi na Tools->Load
Application...->odaberi podporu ,,visestruko_izkol_pov.lsp''->pritisni
,,Load''->Ubodi mišem na ,,Close''
- upiši u naredbeni prostor
,,ip''
- ,,naziv izpisne
podatkovnice'' - tu upišeš ime podatkovnice u koju će se izbaciti vriednosti
površine.
- zatim pokazivačem miša označi bilo kakav
znakoniz koji se odnosi na određenu površinu. Na pr. kod poprečnih presjeka su
njihove dužine od uzdužne osi.
- zatim označiš jedan ili više mnogokuta
koj spadaju pod isti redni broj i stisneš ENTER. Drugim riečima podpora će u
podatkovnicu izbaciti površinu koja će predstavljati ukupni sbroj pod tim
rednim brojem.
- Ako imaš još rednih brojeva, onda ovo
sve ponavljaš tako da opet prvo označiš redni broj, pak površine pod tim rednim
brojem.
- Ukoliko želiš prestati, samo pritisneš
svaki put samo ENTER bez da bilo što zaokružiš.
- Izlaznu podatkovnicu s površinama ćeš
pronaći u pohranilišti ,,iskol'' na ,,C:\'' koji se prije toga stvorio, ter gu
odtvori u podpori ,,Notepad''.
Razčlanba podpore red po
red:
1) ;Račnalna podpora koja po rednim brojevima izpisuje površine mnogokuta pod
Sve što dolazi poslije znaka ,,;'' u
AutoLISP-u prilikom izvršenja podpore ne ima nikakvu ulogu. To služi tek kano
podsjetnik za izraditelja podpore ili kano naputak proučavatelju podpore.
2) ;pojedinim rednim brojevima. Pod jedan redni broj može se
označiti više mnogokuta.
Isto kano i u prvom redku.
3) ;Tj. pod jedan redni broj može staviti sbroj površina od
više mnogokuta.
Isto kano i u prvom redku.
4) ;-- IZRADIO DANE --
Isto kano i u prvom redku.
5) ;--ZA DOM SPREMNI--
Isto kano i u prvom redku.
6) ;---BOG I HRVATI---
Isto kano i u prvom redku.
7)
Prazan redak ne predstavlja baš ništa.
8) (defun c:ip ()
Ovaj red zadaje podpodporu ,,ip'' pomoću
naredbe ,,defun''. Znak ,,c:'' koji stoji prije ,,ip'' omogućuje da u
naredbenom prostoru od AutoCAD-a upišemo samo ,,ip'' kad želimo pozivati ovu
podporu.
9) (setq naziv (getstring
"\nnaziv izpisne podatkovnice:"))
Naredba ,,getstring'' traži
od koristnika da u naredbeni prostor od AutoCAD-a upiše znakoniz (string), ter
ga od tamo i preuzima. Proslov pod navodnicima je tek naputak, a izraz ,,\n''
stavlja proslov u novi red.
Naredba ,,setq'' pridružuje
preuzeti znakoniz promienljivoj vriednosti ,,naziv''.
10) (setq
podatkovnica (strcat "c:\\iskol\\" naziv ".pov"))
Naredba ,,strcat'' spaja više znakonizova
u jedan znakoniz. U ovom slučaju se oblikuje naziv bivališta izlazne podatkovnice.
Naredba ,,setq'' pridružuje taj čitavi
znakoniz promienljivoj vriednosti ,,podatkovnica''
11) (setq d (open
podatkovnica "w"))
Naredba ,,open'' služi za odtvaranje, t.
j. stvaranje nove podatkovnice. Oznaka ''w'' znači kako će ta podatkovnica biti
za upisivanje podataka.
Sve te osobine pridružuju se pomoću
naredbe ,,setq'' promienljivoj vriednosti ,,d''. Znači, ,,d'' nam je ovdje
oznaka za podatkovnicu, s kojom u ovoj podpori izvodimo razne radnje.
12) (princ
"\noznaci redni broj povrsine 1 i pritisni ENTER")
Naredba ,,princ'' služi za izpis proslova
u naredbenom prostoru od AutoCAD-a. U ovom slučaju, to je naputak što trebamo
napraviti. Naredba ,,\n'' će napraviti da se čitav taj proslov napiše u novom
redku.
13) (setq skupsl
(ssget))
Naredba ,,ssget'' traži od uporabitelja da
označi jedan ili više nacrtanih predmeta (u ovom slučaju naputak kaže samo
jedan predmet) u AutoCAD-u, ter onda skup tih označenih predmeta sprema kano
niz.
Naredba ,,setq'' taj niz predmeta
pridružuje promienljivoj vriednosti ,,skupsl''.
14) (princ
"\noznaci jedan ili vise mnogokuta i pritisni ENTER")
Isto kano i u 12. redku.
15) (setq skupmnog
(ssget))
Isto kano i u 13. redku.
16) (setq sl (cdr
(assoc 1 (entget (ssname skupsl 0)))))
S obzirom kako naredba ,,ssget'' služi za
dobivanje skupa izcrtanih predmeta, a od nas se u ovom slučaju traži da
označimo samo jedan predmet, t. j. proslov, mi smo svejedno dužni staviti broj
0 za dobivanje zaporkiranog naziva ništičnog člana skupa (u ovom slučaju i
jedinog). Za dobivanje naziva člana rabi se naredba ,,ssname''. Naredbom
,,(entget (ssname skupsl 0))'', dobije se ovako nešto (pogledaj dodatak 1.),
ali naravno ovisno o tome kakvu vrstu izcrtanog predmeta smo u AutoCAD-u
označili. U ovom slučaju to je proslov.
Dodatak 1.
((-1 . <Entity name: 7ef60f68>) (0 .
"TEXT") (330 . <Entity name: 7ef60cf8>) (5 . "E5")
(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbText") (10 680.475 498.677 0.0) (40 . 2.5)
(1 . "0+125") (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 .
"AcDbText") (73 . 0))
Kano što vidimo, ovo se može proglasiti
kano niz od puno nizova. Svaki niz unutar sebe ima na početku neki broj, koji
predstavlja zaporku za neku osobinu. Tako na pr. zaporka ,,0'' označava vrstu
predmeta (proslov, krug, crta, mnogocrta...). Zaporka ,,1'' ovdje predstavlja
sadržaj proslova, što je u ovom slučaju ''0+125'' i t. d. Uglavnom na ovaj
način se mogu izvuči mnogi koristni podatci o pojedinom predmetu, kano što su
položaj, vrsta, sadržaj predmeta i t. d.
Naredbom ,,assoc'' i brojem 1 uz to, mi
odabiremo onaj niz koji u sebi sadrži zaporku 1. T. j. u ovom slučaju ćemo
dobiti ,,(1 . "0+125")''. S obzirom kako nas zanima samo sadržaj, a
ne sma zaporka, pomoću naredbe ,,cdr'' se riešavamo prvog člana niza, ter nam
ostaju drugi članovi, a u ovom slučaju to je samo "0+125". Tu
dobivenu vriednost zatim pridružujemo promienljivoj vriednosti ,,sl''.
17) (setq pov_br 0)
Pomoću naredbe ,,setq'', promienljivoj vriednosti ,,pov_br'' pridružujemo
broj 0.
18) (setq br 0)
Isto kano i u 17. redku.
19) (while (< br
(sslength skupmnog))
Naredba ,,sslength'' vraća ukupan broj
predmeta koje smo zaokružili u AutoCAD-u s naredbom ,,ssget'', a koje su kano
niz pohranjene u ovom slučaju u promienljivu vriednost ,,skupmnog''.
Izraz ,,(< br (sslength skupmnog))'' je
istinit, ukoliko je promienljiva vriednost ,,br'' manja od broja zaokruženih
predmeta pohranjenih u promienljivoj vriednosti ,,skupmnog''.
Naredba ,,while'' je petlja koja se vrti u
krug sve dok je uvjet ,,(< br (sslength skupmnog))'' istinit. Petlja od
,,while'' se zatvara sa zagradom ,,)''.
20) (command
"area" "object" (ssname skupmnog br))
Naredbom ,,ssname'' dobivamo zaporkirano
ime od predmeta koji se nalazi pod rednim brojem ,,br'' u nizu predmeta
pohranjenih u promienljivoj vriednosti ,,skupmnog''.
Naredba "area" je naredba unutar
samog AutoCAD-a izkorištena u podpori. Naredbom "object" odredimo na
koji način želimo ostavriti dobivanje površine od predmeta i zatim dolazi
zaporkirano ime od predmeta. Ovom naredbom dobijemo osim površine i dužinu
mnogocrte t. j. mnogokuta sastavljenog od mnogocrte. Na pr. upišite u naredbeni
prostor od AutoCAD-a ovo: ,,(command "area" "object"
(ssname (ssget) 0)), pak nakon što označite neki mnogokut (izcrtan s
mnogocrtom) i pritisnete tipku ,,ENTER'', tada ćete dobiti izpis površine i
dužine u naredbenom prostoru. Sliedeća naredba pokazuje kako možemo izdvojiti
površinu i pridružiti je nekoj promienljivoj vriednosti.
21) (setq pov
(getvar "area"))
Naredba ,,(getvar "area")''
izdvaja površinu, ter ju pridružuje promienljivoj vriednosti ,,pov''. Ova i
predhodna naredba služe kano jedna cielovita naredba za dobivanje površine.
Naredba ,,getvar'' inače sama po sebi preuzima vriednosti od promienljivih
vriednosti koje se nalaze u sustavu od samog AutoCAD-a.
22) (setq pov_br
(+ pov pov_br))
Sustav izvršavanja naredbi u AutoLISP-u je
takav da se prvo izvršavaju naredbe od unutarnjih zagrada, pak prema vanjskima.
Najprije vrši sbroj dvie promienljive
vriednosti ,,pov'' i ,,pov_br'', koje s naredbom ,,setq'' pridružuje promienljivoj
vriednosti ,,pov_br''. Drugim riečima, kako se petlja ,,while'' vrti u krug,
tako se ,,pov_br'' neprestalno povećava za ,,pov''.
23) (setq br (+ br
1))
Isto kano i u 23. redku.
24) )
Završetak od petlje ,,while''.
25) (princ (strcat
"\n" sl " " (rtos
pov_br 2 2)) d)
Naredba ,,rtos'' pretvara stvarni broj
,,pov_br'' u znakoniz, tako da ga na način pod brojem 2 zaokruži na dva desetna
mjesta. Obći prikaz naredbe ,,rtos'' je: (rtos stvarni_broj način
broj_desetnih_mjesta)
Naredba ,,strcat'' spaja više znakonizova
u jedan znakoniz, s time da oznaka ,,\n'' koja se nalazi na početku, služi za
prebacivanje čitavog znakoniza u novi redak prilikom izpisa.
Naredba ,,princ'' izpisuje ovaj znakoniz u
podatkovnicu ,,d''.
26) (setq br1 1)
Naredba ,,setq'' pridružuje broj 1 promienljivoj vriednosti ,,br1''.
27) (while (/=
skupmnog nil)
Izraz ,,(/= skupmnog nil)'' je ISTINA ukoliko je promienljiva vriednost
,,skupmnog'' različita od praznog skupa.
Naredba ,,while'' će se izvršavati, sve dok je uvjet ISTINA.
28) (setq br1 (+
br1 1))
Izraz ,,(+ br1 1)'' izvršava sbrajanje dva
broja ,,br1'' i 1, koji se zatim pomoću naredbe ,,setq'' pridružuje
promienljivoj vriednosti ,,br1''. Ovo je zapravo izraz za brojač, koji se
neprestalno povećava za 1.
29) (princ (strcat
"\noznaci redni broj povrsine " (rtos br1 2 0) " i pritisni
ENTER"))
Prvo se izvrši naredba ,,rtos'' koja
stvarni broj ,,br1'' pretvara u znakoniz tako da ga zaokruži na cieli broj.
Naredba ,,strcat'' spaja više znakonizova u jedan, a zatim taj znakoniz
izpisuje naredba ,,princ'' u naredbeni prostor od AutoCAD-a.
30) (setq skupsl
(ssget))
Isto kano i u redku broj 13.
31) (princ
"\noznaci jedan ili vise mnogokuta i pritisni ENTER")
Naredba ,,princ'' izpisuje poruku koja se nalazi unutar navodnika, u
naredbeni prostor od AutoCAD-a.
32) (setq skupmnog
(ssget))
Isto kano i u redku broj 13.
33) (if (/=
skupmnog nil)
Ukoliko je izraz, da je promienljiva
vriednost ,,skupmnog'' različita od praznog skupa, tada će se izvršiti petlja
,,if'', a inače će ju zaobići.
34) (progn ;nuždno
ukoliko pod petlju if spada više naredbi
Sve što je napisano iza ,,;'', služi tek
kano naputak izraditelju ili proučavatelju, ter ne ima nikakvu ulogu u
izvršenju podpore.
Naredba ,,progn'' u ovom slučaju služi
zato da možemo više izvršnih naredbi staviti pod jedan ,,if'', jerbo inače
možemo staviti samo jednu naredbu.
35) (setq sl
(cdr (assoc 1 (entget (ssname skupsl 0)))))
Isto kano i u redku broj 16.
36) (setq
pov_br 0)
Naredba ,,setq'' pridružuje broj ništicu promienljivoj vriednosti
,,pov_br''.
37) (setq br
0)
Isto kano i u redku 36.
38) (while
(< br (sslength skupmnog))
Naredba ,,sslength'' vraća ukupan broj
označenih predmeta u AutoCAD-u, koji su pohranjeni u promienljivoj vriednosti
,,skupmnog''. Sliedeća zagrada vraća ISTINU ukoliko je ,,br'' manji od ukupnog
broja predmeta. Petlja ,,while'' će se izvršavati sve dok je ovaj uvjet
istinit.
39) (command
"area" "object" (ssname skupmnog br))
Isto kano i u redku 20, osim što ovdje imamo više zaokruženih predmeta, pak
se ,,br'' stalno povećava. U predhodnoj je on 0.
40) (setq
pov (getvar "area"))
Isto kano i u redku 21.
41) (setq
pov_br (+ pov pov_br))
Ovo je naredba za ukupan sbroj površina.
Najprije se sbroje ,,pov'' i ,,pov_br'', pak se pomoću naredbe ,,setq'' taj
sbroj pridruži promienljivoj vriednosti ,,pov_br''.
42) (setq br
(+ br 1))
Ovo je naredba za brojač. Brojač ,,br'' se prilikom svakog prolazka
povećava za 1, tako da se pridružuje sam sebi.
42) )
Završetak petlje ,,while iz 38. redka.
43) (princ
(strcat "\n" sl " "
(rtos pov_br 2 2)) d)
Isto kano i u redku 25.
44) )
Kraj od naredbe ,,progn''.
45) )
Kraj od petlje ,,if''.
46) )
Kraj od kružne petlje ,,while'' iz 27. redka.
47) (close d)
Ovime se zatvara podatkovnica ,,d''.
48) )
Ovime se završava naredba ,,defun''. Ovo je ujedno kraj podpodpore ,,ip''.