Povratak / Back

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

 

Free Web Hosting