{"id":10629,"date":"2019-05-07T02:34:04","date_gmt":"2019-05-07T01:34:04","guid":{"rendered":"https:\/\/www.arhns.uns.ac.rs\/givsf\/?p=10629"},"modified":"2019-05-07T02:34:04","modified_gmt":"2019-05-07T01:34:04","slug":"generisanje-waffle-strukture-iz-uvezenih-obj-fajlova-i-priprema-za-2d-secenje-iii-deo-4","status":"publish","type":"post","link":"https:\/\/www.arhns.uns.ac.rs\/givsf\/generisanje-waffle-strukture-iz-uvezenih-obj-fajlova-i-priprema-za-2d-secenje-iii-deo-4\/","title":{"rendered":"Generisanje \u201cwaffle\u201d strukture iz uvezenih obj. fajlova, i priprema za 2d se\u010denje- III deo"},"content":{"rendered":"<h2 style=\"text-align: left\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10643\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/5.2-1024x497.jpg\" alt=\"5.2\" width=\"640\" height=\"310\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/5.2-1024x497.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/5.2-300x145.jpg 300w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/5.2.jpg 1949w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/h2>\n<h2 style=\"text-align: left\"><strong>Korak 1: Priprema modela<\/strong><\/h2>\n<p><strong>Biranje modela<\/strong><\/p>\n<p style=\"padding-left: 30px\">Modele mo\u017eemo izabrati i skinuti sa bilo koje od brojnih besplatnih biblioteka (Free3D, cgtrader&#8230; neke zahtevaju registraciju).Iz iskustva zaklju\u010dili smo da model bi trebao da bude u obj. formatu, &#8220;polygon mesh&#8221; geometrije po mogu\u0107nosti ispod 10.000 poligona (game ready, low poly), i sastavljen od \u0161to manje zasebnih mesh-ova (3D printable ready). Tako\u0111e treba napomenuti da modeli iz softveras &#8220;blender&#8221; i &#8220;zbrush&#8221; su se pokazali lakim za rad.<\/p>\n<p style=\"padding-left: 30px\">U ovoj ve\u017ebi smo koristili modele koje ispunjavaju i ne ispunjavaju sve ove kriterijume da bi pokazali i mogu\u0107e probleme u radu i probali da time unapredimo algoritam.<\/p>\n<p style=\"padding-left: 30px\">Kori\u0161\u0107eni modeli:<\/p>\n<ol>\n<li style=\"padding-left: 30px\"><a href=\"https:\/\/free3d.com\/3d-model\/diplodocus-v1--471374.html\">https:\/\/free3d.com\/3d-model\/diplodocus-v1&#8211;471374.html<\/a><\/li>\n<li style=\"padding-left: 30px\"><a href=\"https:\/\/free3d.com\/3d-model\/american-paint-horse-nuetral-v1--575385.html\">https:\/\/free3d.com\/3d-model\/american-paint-horse-nuetral-v1&#8211;575385.html<\/a><\/li>\n<li style=\"padding-left: 30px\"><a href=\"https:\/\/free3d.com\/3d-model\/low-poly-tree-96065.html\">https:\/\/free3d.com\/3d-model\/low-poly-tree-96065.html<\/a><\/li>\n<li style=\"padding-left: 30px\"><a href=\"https:\/\/www.cgtrader.com\/3d-models\/furniture\/chair\/le-bambole-armchair-bb-italia\">https:\/\/www.cgtrader.com\/3d-models\/furniture\/chair\/le-bambole-armchair-bb-italia<\/a><\/li>\n<\/ol>\n<h3 style=\"text-align: left\"><strong>Uvo\u017eenje modela<\/strong><\/h3>\n<p style=\"padding-left: 30px\">Kad skinemo sa nekog od sajtova rar. datoteku i iz njega izvu\u010demo obj. fajl modela, najjednostavnije da ga prevu\u010demo u prozor otvorenog rhnoceros-a i idemo:\u00a0<strong>import file&gt;nothing; import OBJ objects (\u010dekiraj)&gt;ok.<\/strong><\/p>\n<p style=\"padding-left: 30px\">Model proveriti, obrisati ako ima neki element vi\u0161ka. Proveriti merne jedinice: <strong>Tools&gt;Options&gt;Units <\/strong>i podesimo po \u017eelji.\u00a0Tako\u0111e proveriti skalu i podesiti. Ako model ima previ\u0161e poligona, mogu\u0107e je dosta bezbedno smanjiti broj sa <strong>Mesh&gt;Mesh Edit Tools&gt; Reduce (izaberemo procenat).<\/strong><\/p>\n<p style=\"padding-left: 30px\">Zbog na\u010dina na koji \u0107emo praviti algoritam nije neophodno da model bude centriran na presek osa (nultu ta\u010dku), ali je bitno da bude uspravan.<\/p>\n<h2 style=\"text-align: left\"><strong>Korak 2: Smi\u0161ljanje algoritma<\/strong><\/h2>\n<h3 style=\"text-align: left\"><strong>Osnova\u00a0algoritma<img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10647\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/60-1024x591.jpg\" alt=\"6,0\" width=\"640\" height=\"369\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/60-1024x591.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/60-300x173.jpg 300w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/60.jpg 1695w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/strong><\/h3>\n<p style=\"padding-left: 30px\">Trebamo da ima mesto za uvo\u017eenje modela (<strong>mesh<\/strong>) i kutiju (<strong>box<\/strong>) formiranu u odnosu na model.Kutiji \u0107emo tako\u0111e dati mogu\u0107nost rotacije (<strong>Rotate<\/strong>) i skaliranja (<strong>Scale<\/strong>). Ona \u0107e nam poslu\u017eiti kao mali koordinantni sistem u odnosu na koji \u0107emo sve pozicionirati i menjati dalje u algoritmu, pa \u0107emo je sa komandom <strong>DeBrep<\/strong> rastaviti na potrebne delove. Posle bilo koji od elemenata biramo sa definiciom\u00a0<strong>Item, <\/strong>index elementa biramo sa<strong> NumberSlider<\/strong>-om. Ovo \u0107e nam dati mogu\u0107nost da ne moramo precizno postavljati model da bi radili sa njim i tako\u0111e omogu\u0107ava rad sa vi\u0161e modela istovremeno.<\/p>\n<h3 style=\"text-align: left\"><strong>Pozicioniranje preseka<img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10649\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/70-1024x792.jpg\" alt=\"7,0\" width=\"640\" height=\"495\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/70-1024x792.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/70-300x232.jpg 300w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/70.jpg 1662w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/strong><\/h3>\n<h3 style=\"text-align: left;padding-left: 30px\">Treba odrediti osu (zapravo du\u017e) u odnosu na koju se\u010demo model, broj preseka kao i njihov raspored ako je mogu\u0107e.<\/h3>\n<p style=\"padding-left: 30px\">Ose uzimamo sa na\u0161e osnovne kutije iz prethodnog koraka. Broj preseka treba da bude podesiv i nalazimo ga tako \u0161to du\u017einu ose (tj osu) delimo sa \u017eeljenim brojem (<strong>NumbSlid+PFrames<\/strong>) da bi na\u0161li du\u017einu segmenta izme\u0111u preseka. Rasporedom smo manipulisali na na\u010din, umesto da ostavimo du\u017e sa ravnima preseka (isti onaj\u00a0<strong>NumbSlid+PFrames<\/strong>) (ravni su upravne na du\u017e), i te ravni da seku model (<strong>PlOrigin&gt;Sec<\/strong>), mi smo tu du\u017e zakrivili (<strong>End;A+B;Item&gt;Cat<\/strong>) (podesivo je). Ako stavimo da ortogonalni preseci na zakrivljenoj du\u017ei seku (<strong>PCX<\/strong>) pravu du\u017e,\u00a0(sa istim po\u010detnim i krajnjim ta\u010dkama) dobi\u0107emo novi raspored prese\u010dnih ta\u010daka, pove\u0107ane gustine u centralnoj zoni. Tako\u0111e mogu\u0107e je fino podesiti preseke &#8220;levo-desno&#8221; tj &#8220;napred-nazad&#8221;(<strong>Move<\/strong>) proporcionalno po du\u017eini ose.<\/p>\n<p>*Iako postoji comanda <em>contour, <\/em>koja je jednostavnija za pripremu,<em>\u00a0<\/em>konstantnije rezultate preseka smo dobijali sa <em>mesh\/plane (sec) <\/em>komandom.<\/p>\n<h3 style=\"text-align: left\"><strong>Ure\u0111ivanje preseka<a href=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/80.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10651\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/80-1024x934.jpg\" alt=\"8,0\" width=\"640\" height=\"583\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/80-1024x934.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/80-300x273.jpg 300w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/80.jpg 1394w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/strong><\/h3>\n<p style=\"padding-left: 30px\">Pri operaciji <em>mesh\/plane(sec)\u00a0<\/em>mo\u017ee do\u0107i do odre\u0111enih problema i ne\u017eeljenih rezultata kao \u0161to su ne\u017eeljeni preseci, otvorene linije ili prekomplikovane konture.<\/p>\n<p style=\"padding-left: 30px\">Ne\u017eeljene preseke \u0107emo re\u0161iti ru\u010dnim otklanjanjem, \u010dekiranjem\u00a0<span style=\"color: #000000\">(<strong>ValueList&gt;Item<\/strong>)<\/span>. Otvorene linije re\u0161avamo pronala\u017eenjem njihovih krajeva i spajanjem (<strong>Crv&gt;End&gt;Line&gt;Join<\/strong>). Prekomplikovane ili o\u0161tre konture se re\u0161avaju direktno komandama <strong>RedPLine\u00a0<\/strong>i <strong>SmoothPLine.<\/strong><\/p>\n<p><strong>*<\/strong>Postoje situacije kada imamo 2 ili vi\u0161e preklapaju\u0107ih koplanarnih kontura a \u017eeljeni rezultat je njihova unija tada koristimo komandu <strong>RUnion,<\/strong>\u00a0ali \u010desto ume da se pona\u0161a na nepredvidiv na\u010din. Ovo zahteva ru\u010dno prespajanje algoritma.<\/p>\n<h3><strong>Zasecanje preseka<\/strong><\/h3>\n<h3><strong><a href=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/90.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10653\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/90-1024x525.jpg\" alt=\"9,0\" width=\"640\" height=\"328\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/90-1024x525.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/90-300x153.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/strong><\/h3>\n<p style=\"padding-left: 30px\">Da bi zasekli preseke moramo prvo da im damo debljinu (<strong>extr<\/strong>). Pre extruzije \u0107emo pomeriti presek za polovinu du\u017eine u suprotnom pravcu vektora pomeranja (<strong>Move<\/strong>\u00a0sa expresiom <strong>-(x\/2)<\/strong>). Vektor pomeranja pravimo od krajnjih ta\u010daka (<strong>end<\/strong>) jedne od horizontalnih linija iz na\u0161e kutije na po\u010detku i komande <strong>Vec2Pt<\/strong>. Rezultat \u0107emo podeliti (<strong>A\/B<\/strong>) sa du\u017einom prvobitne horizontalne duzi (<strong>End&gt;Ln&gt;Len<\/strong>) da bi doboli jedini\u010dni vektor koji je lak\u0161i za rad. Ovo je deo kad se 2 stabla algoritma spajaju. Ukr\u0161tamo preseke sa komandom <strong>BBX, <\/strong>nepravilnosti ispravljamo sa <strong>BBox<\/strong> i pomeramo ih za polovinu du\u017eine elemenata po <strong>Z<\/strong> osi u oba smera, ovde smo opet razdvojili algoritam. Radi sigurnosti skaliramo elemente minimalno i sa <strong>SDiff<\/strong> komandom volumene \u0161tapova oduzmemo od preseka.<\/p>\n<p>*Kod \u0161tapova koji imaju kratke prekide desi se da komanda <strong>BBox<\/strong>\u00a0zanemari prekid i \u0161to bi trebalo da bude 2 ilivi\u0161e kolinearna \u0161tapa pretvori u 1. Ovo nekad zna\u010di da do\u0111e do potpunog otsecanja elemenata od celine, i bivaju neupotrebljivi. Ovo za sad ispravljamo prosto nala\u017eenjem boljih preseka, ali bi trebalo na\u0107i bolje re\u0161enje.<\/p>\n<h3 style=\"text-align: left\"><strong>Prostiranje preseka po povr\u0161ini<a href=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/100.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10656\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/100-1024x854.jpg\" alt=\"10,0\" width=\"640\" height=\"533\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/100-1024x854.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/100-300x250.jpg 300w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/100.jpg 1453w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/strong><\/h3>\n<p style=\"padding-left: 30px\">Da bi model pripremili za 2d se\u010denje, od dobijenih zase\u010denih tvorevina (preseka) trebamo da uzmemo odgovaraju\u0107e konturne (<strong>Item&gt;Plane<\/strong>) linije i da ih prostremo (<strong>Orient<\/strong>) po \u017eeljenoj povr\u0161ini, koju\u00a0uzmemo\u00a0odakle \u017eelimo, organizovane u tabelu pomo\u0107u komande <strong>RecGrid<\/strong>. Na kraju smo numerisali preseke (<strong>Points<\/strong>) radi lak\u0161eg raspoznavanja pri sklapanju.<\/p>\n<p>*Na\u010din organizacije preseka\u00a0bi trebalo mo\u017eda jednostavnije uraditi.<\/p>\n<h3><strong>Rezultat rada za jedan model<\/strong><\/h3>\n<p><a href=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/110.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-large wp-image-10657\" src=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/110-1024x234.jpg\" alt=\"11,0\" width=\"640\" height=\"146\" srcset=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/110-1024x234.jpg 1024w, https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-content\/uploads\/2019\/05\/110-300x68.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Korak 1: Priprema modela Biranje modela Modele mo\u017eemo izabrati i skinuti sa bilo koje od brojnih besplatnih biblioteka (Free3D, cgtrader&#8230; neke zahtevaju registraciju).Iz iskustva zaklju\u010dili smo da model bi trebao da bude u obj. formatu, &#8220;polygon mesh&#8221; geometrije po mogu\u0107nosti ispod 10.000 poligona (game ready, low poly), i sastavljen od \u0161to manje zasebnih mesh-ova (3D&hellip; <a class=\"more-link\" href=\"https:\/\/www.arhns.uns.ac.rs\/givsf\/generisanje-waffle-strukture-iz-uvezenih-obj-fajlova-i-priprema-za-2d-secenje-iii-deo-4\/\">Continue reading <span class=\"screen-reader-text\">Generisanje \u201cwaffle\u201d strukture iz uvezenih obj. fajlova, i priprema za 2d se\u010denje- III deo<\/span><\/a><\/p>\n","protected":false},"author":325,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"coauthors":[385],"class_list":["post-10629","post","type-post","status-publish","format-standard","hentry","category-opste","entry"],"_links":{"self":[{"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/posts\/10629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/users\/325"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/comments?post=10629"}],"version-history":[{"count":18,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/posts\/10629\/revisions"}],"predecessor-version":[{"id":10658,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/posts\/10629\/revisions\/10658"}],"wp:attachment":[{"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/media?parent=10629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/categories?post=10629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/tags?post=10629"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.arhns.uns.ac.rs\/givsf\/wp-json\/wp\/v2\/coauthors?post=10629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}