{"id":11726,"date":"2025-11-05T16:28:15","date_gmt":"2025-11-05T16:28:15","guid":{"rendered":"https:\/\/www.sweethome3d.com\/vodnik-za-razvijalce-vticnikov\/"},"modified":"2025-12-19T10:19:44","modified_gmt":"2025-12-19T10:19:44","slug":"vodnik-za-razvijalce-vticnikov","status":"publish","type":"page","link":"https:\/\/www.sweethome3d.com\/sl\/vodnik-za-razvijalce-vticnikov\/","title":{"rendered":"Vodnik za razvijalce vti\u010dnikov"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Uvod<\/h2>\n\n<p>Od razli\u010dice 1.5 naprej je mogo\u010de dodati nove funkcije v <a href=\"\/\">Sweet Home 3D<\/a> z datotekami vti\u010dnikov, ki so shranjene v tvoji <a href=\"#deployingPlugin\">mapi z vti\u010dniki<\/a>. To omogo\u010da programerjem Jave, da razvijajo in distribuirajo nove funkcije za <a href=\"https:\/\/www.sweethome3d.com\/sl\/\">Sweet Home 3D<\/a>, ne da bi spreminjali izvorne datoteke trenutne razli\u010dice (kar je dobro za zdru\u017eljivost navzgor) in ne da bi dostavili celotno razli\u010dico programa (kar je dobro za velikost dostave).<br\/>Ta dokument opisuje <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">orodja<\/a>, potrebna za ustvarjanje vti\u010dnikov, nato poka\u017ee, kako <a href=\"#programmingPlugin\">programirati vti\u010dnik<\/a>, ki izra\u010duna najve\u010djo prostornino premi\u010dnega pohi\u0161tva, dodanega v dom, in kon\u010dno ponuja nekaj <a href=\"#goingFurther\">dodatnih informacij<\/a>, ki ti bodo pomagale pri nadaljnjem delu. <\/p>\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 class=\"wp-block-heading\" id=\"installingTools\">Namestitev razvojnih orodij<\/h2>\n\n<p>\u010ce je Sweet Home 3D namenjen splo\u0161ni javnosti, razvoj vti\u010dnikov zahteva posebne ve\u0161\u010dine in mora\u0161 znati programirati v <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Javi<\/a> z IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a>, preden nadaljuje\u0161. Ta vodnik prikazuje, kako zgraditi vti\u010dnik z <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a>, lahko pa uporabi\u0161 IDE po svoji izbiri ali pa sploh nobenega IDE-ja. <\/p>\n\n<h3 class=\"wp-block-heading\">Prenesi in namesti Eclipse<\/h3>\n\n<p>Najprej prenesi Eclipse z <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a>. Razli\u010dica z imenom <em>Eclipse IDE for Java Developers<\/em> je dovolj za razvoj vti\u010dnika, lahko pa prenese\u0161 katero koli razli\u010dico za razvoj v Javi. <br\/>Ko je prenesen, je namestitev Eclipse zelo preprosta: samo razpakiraj arhiv, ki ga bo\u0161 dobil, odpri mapo eclipse in odvisno od tvojega sistema, za\u017eeni datoteko z imenom  <code>eclipse.exe<\/code>  (v sistemu Windows),  <code>eclipse.app<\/code>  (v sistemu Mac OS X) ali  <code>eclipse<\/code>  (v sistemu Linux).<br\/>Ob prvem zagonu bo Eclipse zahteval, da izbere\u0161 mapo <em>delovnega prostora<\/em>, kjer bodo shranjeni projekti vti\u010dnikov.<br\/>Ko je to storjeno, izberi <em>Datoteka &gt; Novo &gt; Projekt<\/em> iz menija, da ustvari\u0161 nov projekt, izberi <em>Java &gt; Java projekt<\/em> v \u010darovniku <em>Nov projekt<\/em>, ki se bo prikazal, vnesi VolumePlugin kot ime projekta in klikni na gumb <em>Dokon\u010daj<\/em>. Na koncu zapri zavihek <em>Dobrodo\u0161li<\/em>, da odkrije\u0161 svoj delovni prostor, kot je prikazano na sliki 1. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"388\" height=\"315\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png\" alt=\"\" class=\"wp-image-5845 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png 388w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-300x244.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-111x90.png 111w\" data-sizes=\"(max-width: 388px) 100vw, 388px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 388px; --smush-placeholder-aspect-ratio: 388\/315;\" \/><figcaption class=\"wp-element-caption\">Slika 1. Delovni prostor Eclipse <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Prenesi in namesti knji\u017enico Sweet Home 3D<\/h3>\n\n<p>Razvoj vti\u010dnika temelji na nekaterih razredih Sweet Home 3D, ki jih mora Eclipse poznati, da lahko zgradi tvoj projekt. Najla\u017eji na\u010din za dodajanje razredov Sweet Home 3D v Eclipse je, da prenese\u0161 izvedljivo razli\u010dico JAR Sweet Home 3D, ki je na voljo na <a href=\"https:\/\/sourceforge.net\/projects\/sweethome3d\/files\/SweetHome3D\/SweetHome3D-7.5\/SweetHome3D-7.5.jar\/download\" target=\"_blank\" rel=\"noopener\">https:\/\/sourceforge.net\/projects\/sweethome3d\/files\/SweetHome3D\/SweetHome3D-7.5\/SweetHome3D-7.5.jar\/download<\/a>. Ko je prenesen, povleci in spusti datoteko SweetHome3D-7.5.jar na ikono projekta <em>VolumePlugin<\/em> v pogledu <em>Package Explorer<\/em> v Eclipse in izberi element <em>Build Path &gt; Add to Build Path<\/em> v kontekstnem meniju datoteke SweetHome3D-7.5.jar, kot je prikazano na sliki 2.  <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"452\" height=\"157\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png\" alt=\"\" class=\"wp-image-5846 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png 452w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-300x104.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-259x90.png 259w\" data-sizes=\"(max-width: 452px) 100vw, 452px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 452px; --smush-placeholder-aspect-ratio: 452\/157;\" \/><figcaption class=\"wp-element-caption\">Slika 2. Dodajanje SweetHome3D-7.5.jar<br\/> v Build Path <\/figcaption><\/figure>\n<\/div>\n\n<h2 class=\"wp-block-heading programmingPlugin\">Programiranje vti\u010dnika<\/h2>\n\n<p>Zdaj, ko si namestil potrebna orodja, poglejmo, kako lahko programira\u0161 svoj prvi vti\u010dnik za Sweet Home 3D.<\/p>\n\n<h3 class=\"wp-block-heading\">Ustvarjanje razreda vti\u010dnika<\/h3>\n\n<p>Najprej ustvari nov podrazred com.eteks.sweethome3d.plugin.Plugin tako, da izbere\u0161 element menija <em>Datoteka &gt; Novo &gt; Razred<\/em> v Eclipse.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"418\" height=\"509\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png\" alt=\"\" class=\"wp-image-5847 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png 418w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-246x300.png 246w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-74x90.png 74w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/509;\" \/><figcaption class=\"wp-element-caption\">Slika 3. Ustvarjanje novega razreda <\/figcaption><\/figure>\n<\/div>\n\n<p>V pogovornem oknu <em>Nov razred Java<\/em> vnesi VolumePlugin kot ime razreda, vnesi paket (tukaj je bil izbran paket com.eteks.test) in izberi com.eteks.sweethome3d.plugin.Plugin kot nadrazred VolumePlugin. Ko je to storjeno, klikni na <em>Dokon\u010daj<\/em>. Eclipse bo ustvaril datoteko novega razreda z naslednjo vsebino:  <\/p>\n\n<pre class=\"wp-block-preformatted\">package com.eteks.test;<br\/>import com.eteks.sweethome3d.plugin.Plugin;<br\/>import com.eteks.sweethome3d.plugin.PluginAction;<br\/>public class <strong>VolumePlugin<\/strong> extends <strong>Plugin<\/strong> {<br\/> @Override<br\/> public PluginAction[] <strong>getActions<\/strong>() {<br\/> \/\/ TODO Samodejno generirana metoda<br\/> return null;<br\/> }<br\/>}<\/pre>\n\n<p>Kot lahko ugane\u0161 iz komentarja TODO, mora\u0161 zdaj spremeniti implementacijo metode getActions, da vrne dejanje vti\u010dnika, ki lahko izra\u010duna prostornino premi\u010dnega pohi\u0161tva. Zamenjaj return null; z naslednjo izjavo: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>in izberi <em>Urejanje &gt; Hitri popravek<\/em> iz menija Eclipse, da ustvari\u0161 manjkajo\u010di razred VolumeAction, kot je prikazano na sliki 4.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"615\" height=\"117\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png\" alt=\"\" class=\"wp-image-5848 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png 615w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-300x57.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-473x90.png 473w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/117;\" \/><figcaption class=\"wp-element-caption\">Slika 4. Uporaba hitrega popravka za generiranje manjkajo\u010dega razreda <\/figcaption><\/figure>\n<\/div>\n\n<p>V pogovornem oknu <em>Nov razred Java<\/em>, ki se prika\u017ee, izberi potrditveno polje <em>Vklju\u010dujo\u010di tip<\/em>, da ustvari\u0161 notranji razred VolumePlugin, in klikni na <em>Dokon\u010daj<\/em>. To bo ustvarilo razred VolumeAction, ki podeduje od razreda com.eteks.sweethome3d.plugin.PluginAction in vsebuje prazno metodo execute: <\/p>\n\n<pre class=\"wp-block-preformatted\">  public class <strong>VolumeAction<\/strong> extends <strong>PluginAction<\/strong> {<br\/> @Override<br\/> public void <strong>execute<\/strong>() {<br\/> \/\/ TODO Samodejno generirana metoda<br\/> }<br\/> }<\/pre>\n\n<p>To metodo bo Sweet Home 3D poklical, ko bo uporabnik zagnal dejanje vti\u010dnika; zato je to mesto, kjer mora\u0161 implementirati, kako izra\u010dunati prostornino pohi\u0161tva in jo prikazati:<\/p>\n\n<pre class=\"wp-block-preformatted\">  public class <strong>VolumeAction<\/strong> extends <strong>PluginAction<\/strong> {  <br\/>  @Override<br\/>  public void <strong>execute<\/strong>() { <br\/>  float volumeInCm3 = 0;<br\/> \/\/ Izra\u010dunaj vsoto prostornine omejevalnega polja <br\/> \/\/ vsakega premi\u010dnega kosa pohi\u0161tva v domu<br\/> for (PieceOfFurniture piece : <strong>getHome<\/strong>(). <strong>getFurniture<\/strong>()) {<br\/> if (piece. <strong>isMovable<\/strong>()) {<br\/> volumeInCm3 += piece. <strong>getWidth<\/strong>() <br\/> * piece. <strong>getDepth<\/strong>() <br\/> * piece. <strong>getHeight<\/strong>();<br\/>  }<br\/> }<br\/>            <br\/> \/\/ Prika\u017ei rezultat v sporo\u010dilnem oknu (\u00b3 je za 3 v nadpisu)<br\/> String message = String. <strong>format<\/strong>(<br\/> \u201eNajve\u010dja prostornina premi\u010dnega pohi\u0161tva v domu je %.2f m\u00b3.\u201c, <br\/> volumeInCm3 \/ 1000000);<br\/> JOptionPane. <strong>showMessageDialog<\/strong>(null, message);<br\/>  }<br\/>  }<\/pre>\n\n<p>Zdaj, ko si dolo\u010dil, kaj \u017eeli\u0161, da vti\u010dnik naredi, mora\u0161 opisati, kako bo uporabnik zagnal to novo dejanje. Izbira\u0161 lahko med dodajanjem novega <strong>elementa menija<\/strong> v meni in\/ali novega <strong>gumba<\/strong> v orodno vrstico. Ta izbira se izvede z nastavitvijo ustreznih lastnosti dejanja vti\u010dnika ob njegovi ustvaritvi. Na primer, \u010de \u017eeli\u0161, da uporabniki za\u017eenejo dejanje prostornine z elementom menija <em>Izra\u010dunaj prostornino<\/em>, ki se nahaja v meniju <em>Orodja<\/em>, bo\u0161 dodal naslednji konstruktor razredu VolumnAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br\/>           <strong>putPropertyValue<\/strong>(Property.NAME, \u201eIzra\u010dunaj prostornino\u201c);<br\/>           <strong>putPropertyValue<\/strong>(Property.MENU, \u201eOrodja\u201c);<br\/> \/\/ Privzeto omogo\u010di dejanje<br\/>           <strong>setEnabled<\/strong>(true);<br\/> }<\/pre>\n\n<p>Razred vti\u010dnika <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> je zdaj programiran in skoraj pripravljen za delovanje kot vti\u010dnik v Sweet Home 3D. Zadnji dve stvari, ki ju je treba narediti, sta: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>ustvarjanje opisne datoteke <tt>ApplicationPlugin.properties<\/tt>,<\/li>\n\n\n\n<li>zdru\u017eevanje datotek v datoteko JAR.<br\/><\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\" id=\"creating-the-plugin-description-file\">Ustvarjanje opisne datoteke vti\u010dnika<\/h3>\n\n<p>Datoteka <tt>ApplicationPlugin.properties<\/tt>\n opisuje ime vti\u010dnika, njegov razred, minimalne razli\u010dice Sweet Home 3D in Jave, pod katerimi je podprt,\n in pravne zadeve. Izberi <i>Datoteka &gt; Novo &gt; Datoteka<\/i> iz\n menija Eclipse, vnesi ime datoteke <tt>ApplicationPlugin.properties<\/tt> in klikni na <i>Dokon\u010daj<\/i>, kot je prikazano\n na sliki 5. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img decoding=\"async\" width=\"264\" height=\"384\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png\" alt=\"\" class=\"wp-image-5849 lazyload\" style=\"--smush-placeholder-width: 264px; --smush-placeholder-aspect-ratio: 264\/384;width:264px;height:auto\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png 264w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-206x300.png 206w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-62x90.png 62w\" data-sizes=\"(max-width: 264px) 100vw, 264px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><figcaption class=\"wp-element-caption\">Slika 5. Ustvarjanje nove datoteke <\/figcaption><\/figure>\n<\/div>\n\n<p>Nato v novo datoteko vnesi <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">naslednji opis<\/a> in jo shrani:<\/p>\n\n<pre class=\"wp-block-preformatted\"><strong>name<\/strong>=Prostornina premi\u010dnega pohi\u0161tva<br\/><strong>class<\/strong>=com.eteks.test.VolumePlugin<br\/><strong>description<\/strong>=Izra\u010duna prostornino premi\u010dnega pohi\u0161tva v domu<br\/><strong>version<\/strong>=1.0<br\/><strong>license<\/strong>=GNU GPL<br\/><strong>provider<\/strong>=(C) Avtorske pravice 2024 Space Mushrooms<br\/><strong>applicationMinimumVersion<\/strong>=1.5<br\/><strong>javaMinimumVersion<\/strong>=1.5<\/pre>\n\n<h3 class=\"wp-block-heading\" id=\"creatingPluginJAR\">Ustvarjanje datoteke JAR vti\u010dnika<\/h3>\n\n<p>Datoteka JAR vti\u010dnika vsebuje datoteke <tt>razreda<\/tt>, ustvarjene s prevajanjem datoteke <tt>VolumePlugin.java<\/tt>,\n in datoteko <tt>ApplicationPlugin.properties<\/tt>. Ker Eclipse prevede datoteko Java takoj, ko jo shrani\u0161, mora\u0161\n samo izbrati <i>Datoteka &gt; Izvozi&#8230;<\/i> iz menija in izbrati <i>Java &gt; datoteka JAR<\/i> v pogovornem oknu <i>Izvozi<\/i>,\n ki se bo prikazalo. V \u010darovniku <i>Izvoz JAR<\/i>, ki se prika\u017ee, kot je prikazano na sliki 6, izberi potrditveno\n polje projekta in vnesi pot do datoteke JAR, shranjene v mapi z vti\u010dniki Sweet Home 3D. Ta ustrezna mapa je odvisna\n od tvojega sistema, kot sledi:   <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>  v sistemu Windows Vista \/ 7 \/ 8 \/ 10 \/ 11, je ta mapa <tt>C:\\Users\\<i>uporabnik<\/i>\\AppData\\Roaming\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  v sistemu Windows XP in prej\u0161njih razli\u010dicah sistema Windows, je ta mapa <tt>C:\\Documents and Settings\\<i>uporabnik<\/i>\\Application Data\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  v sistemu macOS, je to podmapa <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> tvoje\n uporabni\u0161ke mape,<\/li>\n\n\n\n<li>  v sistemu Linux in drugih sistemih Unix, je to podmapa <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> tvoje uporabni\u0161ke mape.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"499\" height=\"440\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport.png\" alt=\"\" class=\"wp-image-5850 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport.png 499w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport-300x265.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport-102x90.png 102w\" data-sizes=\"(max-width: 499px) 100vw, 499px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 499px; --smush-placeholder-aspect-ratio: 499\/440;\" \/><figcaption class=\"wp-element-caption\">Slika 6. Izvoz v datoteko JAR <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"testing-the-plugin\">Testiranje vti\u010dnika<\/h3>\n\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Vti\u010dnik<\/a>, ki si ga razvil, bo deloval v Sweet Home 3D, bodisi z razli\u010dico <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, razli\u010dico <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">namestitvenih programov<\/a> ali z datoteko <a href=\"https:\/\/sourceforge.net\/projects\/sweethome3d\/files\/SweetHome3D\/SweetHome3D-7.5\/SweetHome3D-7.5.jar\/download\" target=\"_blank\" rel=\"noopener\">SweetHome3D-7.5.jar<\/a>, ki si jo prenesel prej. Ker je zadnja izvedljiva datoteka JAR, jo lahko za\u017eene\u0161 z dvojnim klikom nanjo ali z naslednjim ukazom: <\/p>\n\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Vti\u010dnik<\/a>, ki si ga razvil, bo deloval v Sweet Home 3D, bodisi z razli\u010dico <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, razli\u010dico <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">namestitvenih programov<\/a> ali z datoteko <a href=\"https:\/\/sourceforge.net\/projects\/sweethome3d\/files\/SweetHome3D\/SweetHome3D-7.5\/SweetHome3D-7.5.jar\/download\" target=\"_blank\" rel=\"noopener\">SweetHome3D-7.5.jar<\/a>, ki si jo prenesel prej. Ker je zadnja izvedljiva datoteka JAR, jo lahko za\u017eene\u0161 z dvojnim klikom nanjo ali z naslednjim ukazom: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>path<\/em>\/<em>to<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>Dokler testira\u0161, bo\u0161 verjetno raje zagnal Sweet Home 3D s tem ukazom, da bo\u0161 lahko v konzoli prebral sled izjem, ki so se pojavile med izvajanjem tvojega vti\u010dnika.<\/p>\n\n<p>Ko je Sweet Home 3D zagnan, bo\u0161 videl, da se prika\u017ee nov meni in njegov element, kot je prikazano na sliki 7:<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"447\" height=\"53\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png\" alt=\"\" class=\"wp-image-5851 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png 447w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu-300x36.png 300w\" data-sizes=\"(max-width: 447px) 100vw, 447px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 447px; --smush-placeholder-aspect-ratio: 447\/53;\" \/><figcaption class=\"wp-element-caption\">Slika 7. Meni vti\u010dnika <\/figcaption><\/figure>\n<\/div>\n\n<p>\u010ce izbere\u0161 nov element menija za <a href=\"\/examples\/userGuideExample.sh3d\">primer doma<\/a>, ustvarjen v <a href=\"https:\/\/www.sweethome3d.com\/sl\/uporabniski-vodnik-za-sweet-home-3d\/\" data-type=\"page\" data-id=\"424\">uporabni\u0161kem priro\u010dniku<\/a>, bo\u0161 dobil naslednji rezultat:<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"448\" height=\"137\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction.png\" alt=\"\" class=\"wp-image-5853 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction.png 448w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction-300x92.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction-294x90.png 294w\" data-sizes=\"(max-width: 448px) 100vw, 448px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 448px; --smush-placeholder-aspect-ratio: 448\/137;\" \/><figcaption class=\"wp-element-caption\">Slika 8. Vti\u010dnik v akciji <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Odpravljanje napak v vti\u010dniku<\/h3>\n\n<p>\u010ce mora\u0161 odpraviti napake v svojem vti\u010dniku iz Eclipse, ustvari konfiguracijo za odpravljanje napak tako, da sledi\u0161 tem korakom:<\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Izberi <i>Zagon &gt; Konfiguracije za odpravljanje napak&#8230;<\/i> iz menija, izberi element <i>Java Application<\/i> na seznamu razpolo\u017eljivih konfiguracij v pogovornem oknu \n          <i>Konfiguracije za odpravljanje napak<\/i>, klikni na gumb <i>Novo <\/i>zgoraj levo in vnesi ime za konfiguracijo.<\/li>\n\n\n\n<li>Klikni na gumb <i>I\u0161\u010di&#8230;<\/i> desno od besedilnega polja <i>Glavni razred<\/i> in dvoklikni na razred <i>SweetHome3DBootstrap<\/i> <br\/> med predlaganimi razredi.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"629\" height=\"390\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration.png\" alt=\"\" class=\"wp-image-5854 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration.png 629w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration-300x186.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration-145x90.png 145w\" data-sizes=\"(max-width: 629px) 100vw, 629px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 629px; --smush-placeholder-aspect-ratio: 629\/390;\" \/><figcaption class=\"wp-element-caption\"><em>Slika 9. Ustvarjanje konfiguracije za odpravljanje napak <\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Klikni na zavihek <em>Classpath<\/em>, izberi podpostavko <em>VolumePlugin (privzeti classpath)<\/em> elementa <em>Uporabni\u0161ki vnosi<\/em> na seznamu <em>Classpath<\/em> in klikni na gumb <em>Odstrani<\/em>.<\/li>\n\n\n\n<li>Klikni na element <em>Uporabni\u0161ki vnosi<\/em> na seznamu <em>Classpath<\/em>, klikni na gumb <em>Dodaj JAR-e&#8230;<\/em>, izberi element SweetHome3D-7.5.jar in potrdi svojo izbiro.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"618\" height=\"482\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration.png\" alt=\"\" class=\"wp-image-5855 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration.png 618w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration-300x234.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration-115x90.png 115w\" data-sizes=\"(max-width: 618px) 100vw, 618px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 618px; --smush-placeholder-aspect-ratio: 618\/482;\" \/><figcaption class=\"wp-element-caption\">Slika 10. Nastavitev classpatha konfiguracije za odpravljanje napak <\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Izberi zavihek <em>Vir<\/em>, klikni na gumb <em>Dodaj&#8230;<\/em>, dvoklikni na element <em>Java Project<\/em> v pogovornem oknu <em>Dodaj vir<\/em>, izberi element <em>VolumePlugin<\/em> v pojavnem oknu <em>Izbira projekta<\/em> in potrdi svojo izbiro.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"773\" height=\"549\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration.png\" alt=\"\" class=\"wp-image-5856 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration.png 773w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-300x213.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-127x90.png 127w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-768x545.png 768w\" data-sizes=\"(max-width: 773px) 100vw, 773px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 773px; --smush-placeholder-aspect-ratio: 773\/549;\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Slika 11. Nastavitev izvorne poti konfiguracije za odpravljanje napak <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Na koncu klikni na gumb <i>Odpravljanje napak<\/i>, da za\u017eene\u0161 Sweet Home 3D v na\u010dinu za odpravljanje napak. Ko se program izvaja, odpri datoteko <tt>VolumePlugin.java<\/tt>,\n nastavi prelomno to\u010dko v metodi <i>execute<\/i> in izberi <i>Orodja &gt; Izra\u010dunaj prostornino<\/i> iz menija Sweet Home 3D. Eclipse se bo ustavil na izbrani \n prelomni to\u010dki, da ti omogo\u010di izvajanje programa korak za korakom in pregledovanje vrednosti spremenljivk.  <\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"601\" height=\"398\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug.png\" alt=\"\" class=\"wp-image-5857 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug.png 601w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug-300x199.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug-136x90.png 136w\" data-sizes=\"(max-width: 601px) 100vw, 601px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 601px; --smush-placeholder-aspect-ratio: 601\/398;\" \/><figcaption class=\"wp-element-caption\">Slika 12. Perspektiva odpravljanja napak v Eclipse <\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>Vsaki\u010d, ko spremeni\u0161 izvorno kodo svojega vti\u010dnika, ne pozabi <a href=\"#creatingPluginJAR\">generirati datoteke JAR vti\u010dnika<\/a>, preden za\u017eene\u0161 konfiguracijo za odpravljanje napak, ki si jo ustvaril. Za pospe\u0161itev postopka izvoza JAR v Eclipse, pojdi na drugi korak \u010darovnika za izvoz JAR in izberi mo\u017enost <em>Shrani opis te datoteke JAR v delovni prostor<\/em>. To bo dodalo nov element v projekt s kontekstnim elementom menija <em>Ustvari JAR<\/em>.  <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"deployingPlugin\">Uvedba vti\u010dnika<\/h3>\n\n<p>Ko je pripravljen, lahko tvoj vti\u010dnik namesti\u0161 na ra\u010dunalnike drugih uporabnikov Sweet Home 3D tako, da ga preprosto kopira\u0161 v njihovo <a href=\"#creatingPluginJAR\">mapo z vti\u010dniki<\/a>. Od razli\u010dice 1.6 naprej se datoteka vti\u010dnika lahko namesti tudi v mapo z vti\u010dniki Sweet Home 3D z dvojnim klikom nanjo, \u010de je njena raz\u0161iritev SH3P (preprosto spremeni raz\u0161iritev datoteke iz .zip v .sh3p). \u010ce dvojni klik na datoteko .sh3p ne za\u017eene Sweet Home 3D (najverjetneje v sistemu Linux), lahko vti\u010dnik namesti\u0161 tudi z naslednjim ukazom v oknu <em>Terminala<\/em> (kjer <code>SweetHome3D<\/code> je ime izvedljive datoteke, ki je prilo\u017eena namestitvenim programom Sweet Home 3D):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/path\/to\/<\/em>SweetHome3D <em>\/path\/to\/<\/em>plugin.sh3p<\/pre>\n\n<p>\u010ce \u017eeli\u0161 prenehati uporabljati vti\u010dnik, odstrani njegovo datoteko iz mape z vti\u010dniki in ponovno za\u017eeni Sweet Home 3D.<\/p>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>\u010ce \u017eeli\u0161, da tvoj vti\u010dnik deluje z vsemi <a href=\"https:\/\/www.sweethome3d.com\/sl\/prenos\/\">namestitvenimi programi Sweet Home 3D<\/a>, ki so na voljo na tej spletni strani, poskrbi, da bo skladen z Javo 5, tako da izbere\u0161 <code>1.5<\/code> v polju <em>Raven skladnosti prevajalnika<\/em>, ki je na voljo v razdelku <em>Java Compiler<\/em> pogovornega okna, prikazanega z elementom menija <em>Projekt &gt; Lastnosti<\/em> v Eclipse.<br\/>\u010ce uporablja\u0161 razli\u010dico prevajalnika Java, kjer zdru\u017eljivost z Javo 1.5 ni ve\u010d na voljo, poskusi ciljati vsaj na Javo 1.8, ki se \u0161e vedno uporablja v novej\u0161ih razli\u010dicah Sweet Home 3D, in ustrezno nastavi <code>javaMinimumVersion<\/code> v <code>ApplicationPlugin.properties<\/code> datoteki svojega vti\u010dnika.<\/p>\n<\/div>\n\n<h2 class=\"wp-block-heading\" id=\"goingFurther\">Nadaljevanje<\/h2>\n\n<p>Programiranje prvega vti\u010dnika ti je pokazalo \u0161ir\u0161o sliko. Tukaj je nekaj dodatnih informacij, ki ti bodo pomagale pri nadaljnjem delu. <\/p>\n\n<h3 class=\"wp-block-heading\">Sweet Home 3D API &#8211; Javadoc<\/h3>\n\n<p>Najbolj uporabna dokumentacija za razvoj novega vti\u010dnika je <a href=\"\/javadoc\/index.html\">API Sweet Home 3D<\/a> (Application Programming Interface), ustvarjen z orodjem javadoc.<br\/>V svojem vti\u010dniku uporabljaj samo razrede paketov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a>, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a>, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a> in <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a>, \u010de \u017eeli\u0161, da bo zdru\u017eljiv z bodo\u010dimi razli\u010dicami Sweet Home 3D. To bo v veliki meri dovolj za programiranje katerega koli vti\u010dnika, ki deluje na podatkih o domu, ki so na voljo v Sweet Home 3D.<br\/>Paketi, ki ustrezajo drugim plastem programa, so vklju\u010deni v Javadoc samo za informativne namene. Ne zana\u0161aj se na njihov API, saj se lahko v prihodnosti \u0161e spremeni brez garancije za zdru\u017eljivost navzgor (kakorkoli, v prej omenjenih paketih ne bo\u0161 videl reference na razred paketov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/swing\/package-summary.html\">com.eteks.sweethome3d.swing<\/a>, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/j3d\/package-summary.html\">com.eteks.sweethome3d.j3d<\/a>, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/io\/package-summary.html\">com.eteks.sweethome3d.io<\/a> ali <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a>).  <\/p>\n\n<h3 class=\"wp-block-heading\">Arhitektura razredov modela<\/h3>\n\n<p>Sweet Home 3D temelji na arhitekturi MVC (Model View Controller), zato je razumevanje organizacije njegove plasti modela bistveno. Slika 13 (na voljo tudi v <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/modelClassesDiagram.png\">formatu PDF<\/a>) prikazuje skoraj vse razrede in vmesnike, ki so na voljo v razli\u010dici 1.5 paketa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a>, ki ustreza tej plasti modela. <\/p>\n\n<p>[uml_diagram slug=&#8221;model-classes-diagram&#8221; map_name=&#8221;model-classes-diagram&#8221; caption=&#8221;Figure 13. UML diagram of com.eteks.sweethome3d.model package&#8221; caption_small=&#8221;(click on a class to view its javadoc)&#8221;]<\/p>\n\n<p>Osrednji razred v plasti modela je razred <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a> (10), abstraktni nadrazred glavnega razreda aplikacije <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>. Instanca tega razreda omogo\u010da dostop do trenutno urejenih instanc <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) in do objekta <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a> (11), ki shranjuje uporabljeno <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">mersko enoto<\/a> (12), <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">katalog pohi\u0161tva<\/a> (14) in <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">katalog tekstur<\/a> (15), iz katerih uporabnik izbira <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">kose pohi\u0161tva<\/a> (17) in <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">teksture<\/a> (18).<br\/>Instanca <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) shranjuje vse objekte, ki jih je uporabnik ustvaril v na\u010drtu doma: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>seznam objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a> (13), ki implementirajo vmesnik <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16),<\/li>\n\n\n\n<li>zbirka objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a> (9),<\/li>\n\n\n\n<li>seznam objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a> (5),<\/li>\n\n\n\n<li>zbirka objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a> (2),<\/li>\n\n\n\n<li>zbirka objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a> (3).<\/li>\n<\/ul>\n\n<p>Ti objekti implementirajo vmesnik <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1) ter objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), ki shranjuje lokacijo kamere v na\u010dinu <em>Virtualni obiskovalec<\/em>. Vse zunanje informacije, ki jih upravljajo objekti modela, kot so ikona in 3D model <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">kosa pohi\u0161tva<\/a> (16) ali slika <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">teksture<\/a> (20), so dostopne preko vmesnika <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), ki ga implementirajo razred <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> in drugi razredi paketa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Ta UML diagram ti naj pomaga razumeti, kateri razredi so na voljo v modelu Sweet Home 3D in kako lahko do njih dostopa\u0161, vendar bo\u0161 verjetno opazil, da v njem niso navedeni nobeni konstruktorji in mutatorji (ali setterji, \u010de ti je ljub\u0161e). To je zgolj zaradi pomanjkanja prostora, vendar jih lahko brez te\u017eav uporablja\u0161 v razredu vti\u010dnika. Upo\u0161tevaj tudi, da bo vsaka sprememba obstoje\u010dega objekta modela sporo\u010dena prikazanim komponentam bodisi z <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>i, z <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>i (8) ali z <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>i (6), kar omogo\u010da, da se vse spremembe takoj odrazijo na zaslonu.  <\/p>\n\n<div class=\"wp-block-group warning-banner is-nowrap is-layout-flex wp-container-core-group-is-layout-9123dee2 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"190\" height=\"190\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281.png\" alt=\"\" class=\"wp-image-786 lazyload\" style=\"--smush-placeholder-width: 190px; --smush-placeholder-aspect-ratio: 190\/190;width:130px\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281.png 190w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281-90x90.png 90w\" data-sizes=\"(max-width: 190px) 100vw, 190px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer !h-auto wp-container-content-16d1eb73\"><\/div>\n\n\n\n<p>Model Sweet Home 3D <strong>ni<\/strong> varen za niti (thread safe) zaradi razlogov zmogljivosti. Vse <strong>spremembe<\/strong> objekta, ki pripada modelu, je treba izvesti v niti za po\u0161iljanje dogodkov (Event Dispatch Thread). <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Arhitektura razredov vti\u010dnikov<\/h3>\n\n<p>Arhitektura razredov vti\u010dnikov je veliko enostavnej\u0161a za razumevanje kot arhitektura plasti modela. Paket <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> vsebuje samo tri razrede, med katerimi naj bi uporabljal le razreda <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> in <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, kot je prikazano na sliki 14 (na voljo tudi v <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginClassesDiagram.png\">formatu PDF<\/a>). <\/p>\n\n<p>[uml_diagram slug=&#8221;plugin-classes-diagram&#8221; map_name=&#8221;plugin-classes-diagram&#8221; caption=&#8221;Figure 14. UML diagram of com.eteks.sweethome3d.plugin package&#8221; caption_small=&#8221;(click on a class to view its javadoc)&#8221;]<\/p>\n\n<p>Instanca <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a> (1) se ustvari ob zagonu aplikacije in poi\u0161\u010de vti\u010dnike, name\u0161\u010dene v uporabnikovi <a href=\"#creating-the-plugin-jar\">mapi vti\u010dnikov<\/a>. Vsaki\u010d, ko se ureja nov dom, ta upravitelj instancira in konfigurira objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> (3) za vsak vti\u010dnik, najden ob zagonu. Nato pokli\u010de metodo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a> za pridobitev vseh <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">dejanj<\/a> (4), ki bodo dodana kot menijski elementi in\/ali gumbi orodne vrstice v oknu doma. Vsako dejanje je instanca <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, ki je podobna razredu <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a>, s svojo metodo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a> in svojimi spremenljivimi <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">lastnostmi<\/a> (2).   <\/p>\n\n<p>Upo\u0161tevaj, da ti razred <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> omogo\u010da dostop do instance <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a> preko svoje metode <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a>. Takoj ko spremeni\u0161 dom ali njegove objekte (pohi\u0161tvo, stene &#8230;) v metodi execute instance <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, mora\u0161 tudi objaviti objekt <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a> podpori za razveljavitev urejanja, ki jo vrne metoda getUndoableEditSupport, sicer uporabniki ne bodo mogli pravilno razveljaviti\/ponoviti sprememb, ki si jih naredil. <\/p>\n\n<h3 class=\"wp-block-heading\">Lokalizacija<\/h3>\n\n<p>\u010ce namerava\u0161 razviti vti\u010dnik za skupnost uporabnikov Sweet Home 3D, poskusi lokalizirati nize, ki jih prikazuje, bodisi v imenu dejanj in meniju ali v pogovornih oknih, ki jih bo\u0161 ustvaril (ali vsaj pripravi njegovo lokalizacijo). Dva <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">konstruktorja razreda PluginAction<\/a> ti bosta pomagala organizirati prevajanje lastnosti dejanj z datotekami .properties, in \u010de mora\u0161 prevesti druge nize v svojem vti\u010dniku (kot je tisti v pogovornem oknu, ki ga prikazuje <a href=\"#testing-the-plugin\">testirani vti\u010dnik<\/a>), ponovno uporabi te datoteke .properties z razredom Java <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br\/>\u010ce raje omeji\u0161 \u0161tevilo datotek z lastnostmi, lahko celo zapi\u0161e\u0161 vrednosti lastnosti dejanj in drugih nizov v <a href=\"#creating-the-plugin-description-file\">opisno datoteko<\/a> ApplicationPlugin.properties svojega vti\u010dnika. <\/p>\n\n<p>\u010ce \u017eeli\u0161 primer, ki uporablja to arhitekturo, prenesi vti\u010dnik <em>Export to SH3F<\/em>, ki je na voljo na <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a>, in ga razpakiraj (ta datoteka vti\u010dnika vsebuje tudi izvorno kodo vti\u010dnika).<br\/>Kot je opisano v <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" target=\"_blank\" rel=\"noopener\">forumu za pomo\u010d<\/a>, ta vti\u010dnik ustvari datoteko SH3F, ki vsebuje vse pohi\u0161tvo, ki si ga uvozil v katalog pohi\u0161tva Sweet Home 3D.<\/p>\n\n<h3 class=\"wp-block-heading\">Prispevanje vti\u010dnikov<\/h3>\n\n<p>Vti\u010dnike, ki si jih programiral, lahko objavi\u0161 v sistemu za sledenje <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">Plug-ins Contributions<\/a>, da jih deli\u0161 s skupnostjo uporabnikov Sweet Home 3D.<br\/>V Sweet Home 3D je mogo\u010de dodati \u0161tevilne funkcije zahvaljujo\u010d vti\u010dnikom, od uvoznikov do izvoznikov, pa tudi vti\u010dnike, ki lahko spreminjajo podatke o domu, kot je <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">vti\u010dnik Home Rotator<\/a>, ki ga je razvil Michel Mbem, in drugi, navedeni v <a href=\"\/storage\/pluginsUserGuide.pdf\">vadnici za vti\u010dnike in raz\u0161iritve<\/a> (PDF), ki jo je napisal Hans Dirkse, in na strani <a href=\"https:\/\/www.sweethome3d.com\/plugins\/\" data-type=\"page\" data-id=\"437\">Vti\u010dniki in orodja<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uvod Od razli\u010dice 1.5 naprej je mogo\u010de dodati nove funkcije v Sweet Home 3D z datotekami vti\u010dnikov, ki so shranjene v tvoji mapi z vti\u010dniki. To omogo\u010da programerjem Jave, da razvijajo in distribuirajo nove funkcije za Sweet Home 3D, ne da bi spreminjali izvorne datoteke trenutne razli\u010dice (kar je dobro za zdru\u017eljivost navzgor) in ne<a href=\"https:\/\/www.sweethome3d.com\/sl\/vodnik-za-razvijalce-vticnikov\/\">Continue reading <span class=\"sr-only\">&#8220;Vodnik za razvijalce vti\u010dnikov&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":11715,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-resources.php","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-11726","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/pages\/11726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/comments?post=11726"}],"version-history":[{"count":2,"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/pages\/11726\/revisions"}],"predecessor-version":[{"id":12447,"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/pages\/11726\/revisions\/12447"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/media\/11715"}],"wp:attachment":[{"href":"https:\/\/www.sweethome3d.com\/sl\/wp-json\/wp\/v2\/media?parent=11726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}