{"id":10598,"date":"2025-10-01T14:53:41","date_gmt":"2025-10-01T14:53:41","guid":{"rendered":"https:\/\/wp-test-1.sweethome3d.eu\/vodnik-za-razvijalce-vticnikov\/"},"modified":"2025-11-03T17:57:59","modified_gmt":"2025-11-03T17:57:59","slug":"vodnik-za-razvijalce-vticnikov","status":"publish","type":"page","link":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/vodnik-za-razvijalce-vticnikov\/","title":{"rendered":"Vodnik za razvijalce vti\u010dnikov"},"content":{"rendered":"<ul class=\"simpletoc-list\">\n<li><a href=\"#uvod\">Uvod<\/a>\n\n<\/li>\n<li><a href=\"#namestitev-razvojnih-orodij\">Namestitev razvojnih orodij<\/a>\n\n\n<\/li>\n\n<li><a href=\"#programiranje-vticnika\">Programiranje vti\u010dnika<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<li><a href=\"#nadaljnje-raziskovanje\">Nadaljnje raziskovanje<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n<\/li>\n<\/ul>\n<\/li><\/ul><h2 class=\"wp-block-heading\" id=\"uvod\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Uvod<\/h2>\n<p>Od razli\u010dice 1.5 je mogo\u010de dodajati nove funkcije v <a href=\"\/\">Sweet Home 3D<\/a> z vti\u010dniki, ki jih namestite v svojo <a href=\"#deployingPlugin\">mapo za vti\u010dnike<\/a>. To omogo\u010da Java programerjem razvoj in distribucijo novih funkcij za Sweet Home 3D brez spreminjanja izvornih datotek trenutne razli\u010dice (kar je dobro za zdru\u017eljivost navzgor) in brez dostave celotne razli\u010dice 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 na koncu poda nekaj <a href=\"#goingFurther\">dodatnih informacij<\/a>, ki ti bodo pomagale pri nadaljnjem delu. <\/p>\n<h2 class=\"wp-block-heading\" id=\"namestitev-razvojnih-orodij\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Namestitev razvojnih orodij<\/h2>\n<p>\u010ceprav je Sweet Home 3D namenjen splo\u0161ni publiki, 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>, vendar lahko uporabi\u0161 IDE po lastni izbiri ali pa sploh nobenega. <\/p>\n<h3 class=\"wp-block-heading\" id=\"prenesi-in-namesti-eclipse\">Prenesi in namesti Eclipse<\/h3>\n<p>Najprej prenesi Eclipse s <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 katerokoli razli\u010dico za razvoj v Javi. <br \/>Ko prenese\u0161, je namestitev Eclipse zelo preprosta: samo raz\u0161iri arhiv, ki ga dobi\u0161, odpri mapo eclipse in glede na svoj sistem za\u017eeni datoteko z imenom  <code>eclipse.exe<\/code>  (v Windows),  <code>eclipse.app<\/code>  (v Mac OS X) ali  <code>eclipse<\/code>  (v Linux).<br \/>Ob prvem zagonu bo Eclipse zahteval, da izbere\u0161 mapo <em>workspace<\/em>, kjer bodo shranjeni projekti vti\u010dnikov.<br \/>Ko je to opravljeno, izberi <em>File &gt; New &gt; Project<\/em> iz menija za ustvarjanje novega projekta, izberi <em>Java &gt; Java project<\/em> v \u010darovniku <em>New project<\/em>, ki se bo prikazal, vnesi VolumePlugin kot ime projekta in klikni gumb <em>Finish<\/em>. Na koncu zapri zavihek <em>Welcome<\/em>, da odkrije\u0161 svoj delovni prostor, kot je prikazano na sliki 1. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"315\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse.png\" alt=\"Vodnik za razvijalce vti&#x10D;nikov\" class=\"wp-image-5073\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse.png 388w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse-360x292.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse-160x130.png 160w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 1. Eclipse delovni prostor <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"prenesi-in-namesti-knjiznico-sweet-home-3d\">Prenesi in namesti knji\u017enico Sweet Home 3D<\/h3>\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 prenos JAR izvedljive razli\u010dice 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 jo prenese\u0161, 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<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"452\" height=\"157\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath.png\" alt=\"\" class=\"wp-image-5075\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath.png 452w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-360x125.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-374x130.png 374w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-400x139.png 400w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><figcaption class=\"wp-element-caption\"><em><em>Slika 2. Dodajanje SweetHome3D-7.5.jar<br \/> v Build Path <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p><\/p>\n<h2 class=\"wp-block-heading\" id=\"programiranje-vticnika\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Programiranje vti\u010dnika<\/h2>\n<p>Zdaj, ko si namestil potrebna orodja, poglejmo, kako lahko programira\u0161 svoj prvi vti\u010dnik za Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"ustvarjanje-razreda-vticnika\">Ustvarjanje razreda vti\u010dnika<\/h3>\n<p>Najprej ustvari nov podrazred com.eteks.sweethome3d.plugin.Plugin tako, da izbere\u0161 element menija <em>File &gt; New &gt; Class<\/em> v Eclipse.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"509\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass.png\" alt=\"\" class=\"wp-image-5076\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass.png 418w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-296x360.png 296w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-107x130.png 107w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-400x487.png 400w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Slika 3. Ustvarjanje novega razreda <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p>V pogovornem oknu <em>New Java Class<\/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 za VolumePlugin. Ko kon\u010da\u0161, klikni <em>Finish<\/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 Auto-generated method stub<br \/> return null;<br \/> }<br \/>}<\/pre>\n\n<p>Kot lahko sklepa\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>Edition &gt; Quick Fix<\/em> iz menija Eclipse za ustvarjanje manjkajo\u010dega razreda VolumeAction, kot je prikazano na sliki 4.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"117\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix.png\" alt=\"\" class=\"wp-image-5077\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix.png 615w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix-360x68.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix-400x76.png 400w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 4. Uporaba Quick fix za generiranje manjkajo\u010dega razreda <\/em><\/figcaption><\/figure>\n<\/div>\n<p>V pogovornem oknu <em>New Java Class<\/em>, ki se pojavi, ozna\u010di potrditveno polje <em>Enclosing type<\/em> za ustvarjanje notranjega razreda VolumePlugin in klikni <em>Finish<\/em>. To bo ustvarilo razred VolumeAction, ki deduje 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 Auto-generated method stub<br \/> }<br \/> }<\/pre>\n\n<p>Ta metoda je tista, ki jo bo Sweet Home 3D poklical, ko bo uporabnik zagnal dejanje vti\u010dnika; torej 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 mejnega kvadra <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 \/> \"Najve\u010dja prostornina premi\u010dnega pohi\u0161tva v domu je %.2f m\u00b3.\", <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. Ima\u0161 mo\u017enost dodati nov <strong>element menija<\/strong> v meni in\/ali nov <strong>gumb<\/strong> v orodno vrstico. To izbiro naredi\u0161 z nastavljanjem ustreznih lastnosti dejanja vti\u010dnika ob njegovem ustvarjanju. Na primer, \u010de \u017eeli\u0161, da uporabniki za\u017eenejo dejanje za prostornino z elementom menija <em>Izra\u010dunaj prostornino<\/em> v meniju <em>Orodja<\/em>, bo\u0161 dodal naslednji konstruktor razredu VolumeAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br \/>           <strong>putPropertyValue<\/strong>(Property.NAME, \"Izra\u010dunaj prostornino\");<br \/>           <strong>putPropertyValue<\/strong>(Property.MENU, \"Orodja\");<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 mora\u0161 narediti, sta: <\/p>\n\n<ul class=\"wp-block-list\">\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<h3 class=\"wp-block-heading\" id=\"ustvarjanje-opisne-datoteke-vticnika\">Ustvarjanje opisne datoteke vti\u010dnika<\/h3>\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>File &gt; New &gt; File<\/i> iz\n menija Eclipse, vnesi ime datoteke <tt>ApplicationPlugin.properties<\/tt> in klikni <i>Finish<\/i>, kot je prikazano\n na sliki 5. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"264\" height=\"384\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile.png\" alt=\"\" class=\"wp-image-5079\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile.png 264w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile-248x360.png 248w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile-89x130.png 89w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 5. Ustvarjanje nove datoteke <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Nato vnesi <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">naslednji opis<\/a> v novo datoteko 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<h3 class=\"wp-block-heading\" id=\"ustvarjanje-jar-vticnika\">Ustvarjanje JAR vti\u010dnika<\/h3>\n<p>JAR vti\u010dnika vsebuje datoteke <tt>class<\/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,\n samo izberi <i>File &gt; Export&#8230;<\/i> iz menija in izberi <i>Java &gt; JAR file<\/i> v pogovornem oknu <i>Export<\/i>,\n ki se bo prikazalo. V \u010darovniku <i>Jar Export<\/i>, ki se pojavi, kot je prikazano na sliki 6, izberi potrditveno polje projekta\n in vnesi pot do datoteke JAR, ki je name\u0161\u010dena v mapi vti\u010dnikov Sweet Home 3D. Ta ustrezna mapa je odvisna\n od tvojega sistema, kot sledi:   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>  v Windows Vista \/ 7 \/ 8 \/ 10 \/ 11 je ta mapa <tt>C:\\Users\\<i>user<\/i>\\AppData\\Roaming\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  v Windows XP in prej\u0161njih razli\u010dicah Windows je ta mapa <tt>C:\\Documents and Settings\\<i>user<\/i>\\Application Data\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  v 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 Linux in drugih Unix sistemih je to podmapa <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> tvoje uporabni\u0161ke mape.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"499\" height=\"440\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport.png\" alt=\"\" class=\"wp-image-5081\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport.png 499w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-360x317.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-147x130.png 147w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-400x353.png 400w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><figcaption class=\"wp-element-caption\"><em><em>Slika 6. Izvoz v datoteko JAR <\/em><\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"testiranje-vticnika\">Testiranje vti\u010dnika<\/h3>\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\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">namestitvenega programa<\/a> ali <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 prej prenesel. Ker je slednja izvedljiva datoteka JAR, jo lahko za\u017eene\u0161 z dvoklikom 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\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">namestitvenega programa<\/a> ali <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 prej prenesel. Ker je slednja izvedljiva datoteka JAR, jo lahko za\u017eene\u0161 z dvoklikom nanjo ali z naslednjim ukazom: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>pot<\/em>\/<em>do<\/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 sklada izjem, ki se spro\u017eijo med izvajanjem tvojega vti\u010dnika.<\/p>\n\n<p>Ko je Sweet Home 3D zagnan, bo\u0161 videl nov meni in njegov element, kot je prikazano na sliki 7:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"447\" height=\"53\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu.png\" alt=\"\" class=\"wp-image-5082\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu.png 447w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu-360x43.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu-400x47.png 400w\" sizes=\"auto, (max-width: 447px) 100vw, 447px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 7. Meni vti\u010dnika <\/em><\/figcaption><\/figure>\n<\/div>\n<p>\u010ce izbere\u0161 nov element menija za <a href=\"\/examples\/userGuideExample.sh3d\">primer doma<\/a>, ustvarjen v <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/sl\/uporabniski-prirocnik-sweet-home-3d\/\" data-type=\"page\" data-id=\"424\">uporabni\u0161kem vodniku<\/a>, bo\u0161 dobil naslednji rezultat:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"137\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction.png\" alt=\"\" class=\"wp-image-5084\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction.png 448w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-360x110.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-425x130.png 425w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-400x122.png 400w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 8. Vti\u010dnik v akciji <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"razhroscevanje-vticnika\">Razhro\u0161\u010devanje vti\u010dnika<\/h3>\n<p>\u010ce mora\u0161 razhro\u0161\u010devati svoj vti\u010dnik iz Eclipse, ustvari konfiguracijo za razhro\u0161\u010devanje z naslednjimi koraki:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Izberi <i>Run &gt; Debug Configurations&#8230;<\/i> iz menija, izberi element <i>Java Application<\/i> na seznamu razpolo\u017eljivih konfiguracij v pogovornem oknu \n          <i>Debug configurations<\/i>, klikni gumb <i>New <\/i>zgoraj levo in vnesi ime za konfiguracijo.<\/li>\n\n\n\n<li>Klikni gumb <i>Search&#8230;<\/i> na desni strani polja <i>Main class<\/i> in dvoklikni razred <i>SweetHome3DBootstrap<\/i> <br \/> med predlaganimi razredi.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"390\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration.png\" alt=\"\" class=\"wp-image-5085\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration.png 629w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-360x223.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-210x130.png 210w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-400x248.png 400w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><figcaption class=\"wp-element-caption\"><em>Slika 9. Ustvarjanje konfiguracije za razhro\u0161\u010devanje <\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Klikni zavihek <em>Classpath<\/em>, izberi podelement <em>VolumePlugin (default classpath)<\/em> elementa <em>User Entries<\/em> na seznamu <em>Classpath<\/em> in klikni gumb <em>Remove<\/em>.<\/li>\n\n\n\n<li>Klikni element<em> User Entries<\/em> na seznamu <em>Classpath<\/em>, klikni gumb <em>Add JARs&#8230;<\/em>, izberi element SweetHome3D-7.5.jar in potrdi svojo izbiro.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"482\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration.png\" alt=\"\" class=\"wp-image-5086\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration.png 618w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-360x281.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-167x130.png 167w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-400x312.png 400w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><figcaption class=\"wp-element-caption\"><em><em>Slika 10. Nastavljanje poti razreda konfiguracije za razhro\u0161\u010devanje <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Izberi zavihek <em>Source<\/em>, klikni gumb <em>Add\u2026<\/em>, dvoklikni element <em>Java Project<\/em> v pogovornem oknu <em>Add Source<\/em>, izberi element <em>VolumePlugin<\/em> v pojavnem oknu <em>Project Selection<\/em> in potrdi svojo izbiro.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"773\" height=\"549\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration.png\" alt=\"\" class=\"wp-image-5087\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration.png 773w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-360x256.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-183x130.png 183w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-768x545.png 768w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-400x284.png 400w\" sizes=\"auto, (max-width: 773px) 100vw, 773px\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Slika 11. Nastavljanje izvorne poti konfiguracije za razhro\u0161\u010devanje <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Na koncu klikni gumb <i>Debug<\/i> za zagon Sweet Home 3D v na\u010dinu za razhro\u0161\u010devanje. Ko program te\u010de, odpri datoteko <tt>VolumePlugin.java<\/tt>, \n nastavi prekinitveno to\u010dko v metodi <i>execute<\/i> in izberi <i>Tools &gt; Compute volume<\/i> iz menija Sweet Home 3D. Eclipse se bo ustavil na izbrani \n prekinitveni to\u010dki, da ti omogo\u010di izvajanje programa po korakih in pregledovanje vrednosti spremenljivk.  <\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"398\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug.png\" alt=\"\" class=\"wp-image-5088\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug.png 601w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-360x238.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-196x130.png 196w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-400x265.png 400w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><figcaption class=\"wp-element-caption\"><em><em><em><em>Slika 12. Eclipse perspektiva za razhro\u0161\u010devanje <\/em><\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\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 loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>Vsaki\u010d, ko spremeni\u0161 izvorno kodo svojega vti\u010dnika, ne pozabi <a href=\"#creatingPluginJAR\">generirati JAR vti\u010dnika<\/a> pred zagonom konfiguracije za razhro\u0161\u010devanje, 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>Save the description of this JAR in the workspace<\/em>. To bo dodalo nov element v projekt s kontekstnim menijem <em>Create JAR<\/em>.  <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"namescanje-vticnika\">Name\u0161\u010danje vti\u010dnika<\/h3>\n<p>Ko je pripravljen, lahko svoj vti\u010dnik namesti\u0161 na ra\u010dunalnike drugih uporabnikov Sweet Home 3D preprosto tako, da ga kopira\u0161 v njihovo <a href=\"#creatingPluginJAR\">mapo za vti\u010dnike<\/a>. Od razli\u010dice 1.6 lahko datoteko vti\u010dnika namesti\u0161 tudi v mapo za vti\u010dnike Sweet Home 3D z dvoklikom nanjo, \u010de je njena kon\u010dnica SH3P (preprosto spremeni kon\u010dnico datoteke iz .zip v .sh3p). \u010ce dvoklik na datoteko .sh3p ne za\u017eene Sweet Home 3D (najbolj verjetno v Linuxu), lahko vti\u010dnik namesti\u0161 tudi z naslednjim ukazom v oknu <em>Terminal<\/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>\/pot\/do\/<\/em>SweetHome3D <em>\/pot\/do\/<\/em>plugin.sh3p<\/pre>\n\n<p>Za prenehanje uporabe vti\u010dnika odstrani njegovo datoteko iz mape za vti\u010dnike 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 loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>\u010ce \u017eeli\u0161, da tvoj vti\u010dnik deluje z vsemi <a href=\"http:\/\/download\">namestitvenimi programi Sweet Home 3D<\/a>, ki so na voljo na tej spletni strani, poskrbi, da ostane zdru\u017eljiv z Javo 5, tako da izbere\u0161 <code>1.5<\/code> v polju <em>Compiler compliance level<\/em>, ki je na voljo v razdelku <em>Java Compiler<\/em> pogovornega okna, prikazanega z elementom menija <em>Project &gt; Properties<\/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 datoteki <code>ApplicationPlugin.properties<\/code> svojega vti\u010dnika.<\/p>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"nadaljnje-raziskovanje\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Nadaljnje raziskovanje<\/h2>\n<p>Programiranje prvega vti\u010dnika ti je pokazalo celotno sliko. Tukaj je nekaj dodatnih informacij, ki ti bodo pomagale pri nadaljnjem delu. <\/p>\n<h3 class=\"wp-block-heading\" id=\"sweet-home-3d-api-javadoc\">Sweet home 3D API &#8211; javadoc<\/h3>\n<p>Najbolj uporabna dokumentacija za razvoj novega vti\u010dnika je <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), ustvarjen z orodjem javadoc.<br \/>V svojem vti\u010dniku uporabljaj samo razrede iz 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 s prihodnjimi razli\u010dicami Sweet Home 3D. To bo ve\u010d kot dovolj za programiranje katerega koli vti\u010dnika, ki deluje s podatki 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 zagotovila o zdru\u017eljivosti navzgor (v vsakem primeru ne bo\u0161 videl nobene reference na razred iz 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> v prej omenjenih paketih).  <\/p>\n<h3 class=\"wp-block-heading\" id=\"arhitektura-razredov-modela\">Arhitektura razredov modela<\/h3>\n<p>Sweet Home 3D temelji na arhitekturi MVC (Model View Controller), zato je razumevanje organizacije njegove plasti Model bistveno. Slika 13 (na voljo tudi v <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/modelClassesDiagram.png\">PDF formatu<\/a>) predstavlja 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 Model. <\/p>\n\n\n<figure class=\"aligncenter size-full uml-diagram\" id=\"uml-model-classes-diagram\">\n\t<img decoding=\"async\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/themes\/sh3d\/assets\/img\/uml\/model-classes-diagram.png\" alt=\"UML Diagram model-classes-diagram\"\n\t\tusemap=\"#model-classes-diagram\">\n\n\t<map name=\"model-classes-diagram\">\n    <area shape=\"rect\" coords=\"30,583,205,681\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"227,595,390,638\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">\n    <area shape=\"rect\" coords=\"410,594,574,635\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">\n    <area shape=\"rect\" coords=\"227,667,391,720\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCategory.html\">\n    <area shape=\"rect\" coords=\"410,666,574,719\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCategory.html\">\n    <area shape=\"rect\" coords=\"30,14,236,122\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">\n    <area shape=\"rect\" coords=\"266,14,410,115\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">\n    <area shape=\"rect\" coords=\"441,15,574,76\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">\n    <area shape=\"rect\" coords=\"441,91,574,106\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">\n    <area shape=\"rect\" coords=\"30,141,205,334\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Room.html\">\n    <area shape=\"rect\" coords=\"265,142,387,192\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextStyle.html\">\n    <area shape=\"rect\" coords=\"441,120,575,206\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Camera.html\">\n    <area shape=\"rect\" coords=\"226,243,460,379\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">\n    <area shape=\"rect\" coords=\"483,331,611,381\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionListener.html\">\n    <area shape=\"rect\" coords=\"483,397,611,449\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">\n    <area shape=\"rect\" coords=\"30,357,107,371\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeTexture.html\">\n    <area shape=\"rect\" coords=\"30,393,204,565\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.Property.html\">\n    <area shape=\"rect\" coords=\"226,409,429,452\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">\n    <area shape=\"rect\" coords=\"483,221,611,272\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionListener.html\">\n    <area shape=\"rect\" coords=\"483,286,611,315\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">\n    <area shape=\"rect\" coords=\"227,477,429,566\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">\n    <area shape=\"rect\" coords=\"452,476,610,578\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">\n    <area shape=\"rect\" coords=\"30,702,205,858\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"227,750,391,793\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"410,751,574,782\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">\n    <area shape=\"rect\" coords=\"227,808,391,848\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">\n    <area shape=\"rect\" coords=\"410,808,574,881\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">\n<\/map>\n\t\t\t<figcaption class=\"wp-element-caption\">\n\t\t\t\t\t\t\t<em>Figure 13. UML diagram of com.eteks.sweethome3d.model package<\/em><br>\n\t\t\t\t\t\t\t\t\t\t<small><em>(click on a class to view its javadoc)<\/em><\/small>\n\t\t\t\t\t<\/figcaption>\n\t<\/figure>\n\n<p>Osrednji razred v plasti Model 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 urejanih 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 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">enoto dol\u017eine<\/a> v uporabi (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\">\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>zbirko 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>zbirko objektov <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a> (2),<\/li>\n\n\n\n<li>zbirko 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), prav tako kot objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), ki shranjuje lokacijo kamere v na\u010dinu <em>Virtualni obiskovalec<\/em>. Do vseh zunanjih informacij, ki jih upravljajo objekti Model, kot sta 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), dostopamo prek vmesnika <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), ki ga implementira razred <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> in drugi razredi iz paketa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Ta diagram UML ti bo pomagal razumeti, kateri razredi so na voljo v modelu Sweet Home 3D in kako lahko dostopa\u0161 do njih, vendar bo\u0161 verjetno opazil, da v njem niso navedeni konstruktorji in mutatorji (ali setterji, \u010de ti je ljub\u0161e). To je samo 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 v modelu 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, s <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>i (8) ali s <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>i (6), kar omogo\u010da, da se vse spremembe takoj odra\u017eajo na zaslonu.  <\/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 loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>Model Sweet Home 3D <strong>ni<\/strong> varen za niti zaradi razlogov zmogljivosti. Vse <strong>spremembe<\/strong> objekta, ki pripada modelu, je treba izvesti v niti Event Dispatch Thread. <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"arhitektura-razredov-vticnikov\">Arhitektura razredov vti\u010dnikov<\/h3>\n<p>Arhitekturo razredov vti\u010dnikov je veliko la\u017eje razumeti kot arhitekturo plasti Model. Paket <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> vsebuje samo tri razrede, od katerih naj bi uporabljal samo 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:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginClassesDiagram.png\">PDF formatu<\/a>). <\/p>\n\n\n<figure class=\"aligncenter size-full uml-diagram\" id=\"uml-plugin-classes-diagram\">\n\t<img decoding=\"async\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/themes\/sh3d\/assets\/img\/uml\/plugin-classes-diagram.png\" alt=\"UML Diagram plugin-classes-diagram\"\n\t\tusemap=\"#plugin-classes-diagram\">\n\n\t<map name=\"plugin-classes-diagram\">\n    <area shape=\"rect\" coords=\"10,9,256,92\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">\n    <area shape=\"rect\" coords=\"11,131,257,288\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">\n    <area shape=\"rect\" coords=\"453,8,574,118\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">\n    <area shape=\"rect\" coords=\"282,133,574,289\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">\n<\/map>\n\t\t\t<figcaption class=\"wp-element-caption\">\n\t\t\t\t\t\t\t<em>Figure 14. UML diagram of com.eteks.sweethome3d.plugin package<\/em><br>\n\t\t\t\t\t\t\t\t\t\t<small><em>(click on a class to view its javadoc)<\/em><\/small>\n\t\t\t\t\t<\/figcaption>\n\t<\/figure>\n\n<p>Instanca <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a> (1) se ustvari ob zagonu aplikacije in i\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 ustvari 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>, da pridobi vse <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">akcije<\/a> (4), ki bodo dodane kot elementi menija in\/ali gumbi v orodni vrstici v oknu doma. Vsaka akcija 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 spremenljivimi <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">lastnostmi<\/a> (2).   <\/p>\n\n<p>Upo\u0161tevaj, da 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> prek 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 poslati 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<h3 class=\"wp-block-heading\" id=\"lokalizacija\">Lokalizacija<\/h3>\n<p>\u010ce na\u010drtuje\u0161 razvoj vti\u010dnika za skupnost uporabnikov Sweet Home 3D, poskusi lokalizirati nize, ki jih prikazuje bodisi v imenih akcij in menijih ali v dialogih, 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 prevod lastnosti akcij z datotekami .properties, in \u010de mora\u0161 prevesti druge nize v svojem vti\u010dniku (kot je tisti v dialogu, ki ga prikazuje <a href=\"#testing-the-plugin\">preizku\u0161eni vti\u010dnik<\/a>), ponovno uporabi te datoteke .properties z Javinim razredom <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br \/>\u010ce \u017eeli\u0161 omejiti \u0161tevilo datotek properties, lahko celo zapi\u0161e\u0161 vrednosti lastnosti akcij in druge nize 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 raz\u0161iri (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\" class=\"broken_link\" 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<h3 class=\"wp-block-heading\" id=\"prispevanje-vticnikov\">Prispevanje vti\u010dnikov<\/h3>\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\">Prispevki vti\u010dnikov<\/a>, da jih deli\u0161 s skupnostjo uporabnikov Sweet Home 3D.<br \/>\u0160tevilne funkcije je mogo\u010de dodati v Sweet Home 3D s pomo\u010djo vti\u010dnikov, od uvoznikov do izvoznikov, pa tudi vti\u010dnikov, ki lahko spreminjajo podatke doma, kot je <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Vti\u010dnik za rotacijo doma<\/a>, ki ga je razvil Michel Mbem, in drugi, navedeni v <a href=\"\/storage\/pluginsUserGuide.pdf\">Priro\u010dniku za vti\u010dnike in raz\u0161iritve<\/a> (PDF), ki ga je napisal Hans Dirkse, in na strani <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/sl\/vticniki-in-orodja\/\" data-type=\"page\" data-id=\"437\">Vti\u010dniki in orodja<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uvod Od razli\u010dice 1.5 je mogo\u010de dodajati nove funkcije v Sweet Home 3D z vti\u010dniki, ki jih namestite v svojo mapo za vti\u010dnike. To omogo\u010da Java programerjem razvoj in distribucijo novih funkcij za Sweet Home 3D brez spreminjanja izvornih datotek trenutne razli\u010dice (kar je dobro za zdru\u017eljivost navzgor) in brez dostave celotne razli\u010dice programa (kar [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":10577,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-10598","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/pages\/10598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/comments?post=10598"}],"version-history":[{"count":2,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/pages\/10598\/revisions"}],"predecessor-version":[{"id":11786,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/pages\/10598\/revisions\/11786"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/media\/10577"}],"wp:attachment":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sl\/wp-json\/wp\/v2\/media?parent=10598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}