{"id":8040,"date":"2025-10-01T14:53:41","date_gmt":"2025-10-01T14:53:41","guid":{"rendered":"https:\/\/wp-test-1.sweethome3d.eu\/pruvodce-pro-vyvojare-pluginu\/"},"modified":"2025-10-31T16:03:54","modified_gmt":"2025-10-31T16:03:54","slug":"pruvodce-pro-vyvojare-pluginu","status":"publish","type":"page","link":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/pruvodce-pro-vyvojare-pluginu\/","title":{"rendered":"Pr\u016fvodce pro v\u00fdvoj\u00e1\u0159e plugin\u016f"},"content":{"rendered":"<ul class=\"simpletoc-list\">\n<li><a href=\"#uvod\">\u00davod<\/a>\n\n<\/li>\n<li><a href=\"#instalace-vyvojovych-nastroju\">Instalace v\u00fdvojov\u00fdch n\u00e1stroj\u016f<\/a>\n\n\n<\/li>\n\n<li><a href=\"#programovani-pluginu\">Programov\u00e1n\u00ed pluginu<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<li><a href=\"#dalsi-postup\">Dal\u0161\u00ed postup<\/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\">\u00davod<\/h2>\n<p>Od verze 1.5 je mo\u017en\u00e9 p\u0159id\u00e1vat nov\u00e9 funkce do <a href=\"\/\">Sweet Home 3D<\/a> pomoc\u00ed soubor\u016f plugin\u016f um\u00edst\u011bn\u00fdch ve tv\u00e9 <a href=\"#deployingPlugin\">slo\u017ece plugin\u016f<\/a>. To umo\u017e\u0148uje Java program\u00e1tor\u016fm vyv\u00edjet a distribuovat nov\u00e9 funkce pro Sweet Home 3D bez \u00fapravy zdrojov\u00fdch soubor\u016f aktu\u00e1ln\u00ed verze (co\u017e je dobr\u00e9 pro kompatibilitu sm\u011brem nahoru) a bez dod\u00e1v\u00e1n\u00ed pln\u00e9 verze programu (co\u017e je dobr\u00e9 pro velikost dod\u00e1vky).<br\/>Tento dokument popisuje <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">n\u00e1stroje<\/a> pot\u0159ebn\u00e9 k vytv\u00e1\u0159en\u00ed plugin\u016f, pot\u00e9 ukazuje, jak <a href=\"#programmingPlugin\">naprogramovat plugin<\/a>, kter\u00fd vypo\u010d\u00edt\u00e1 maxim\u00e1ln\u00ed objem movit\u00e9ho n\u00e1bytku p\u0159idan\u00e9ho do domova, a nakonec poskytuje n\u011bkter\u00e9 <a href=\"#goingFurther\">dodate\u010dn\u00e9 informace<\/a>, kter\u00e9 ti pomohou j\u00edt d\u00e1l. <\/p>\n<h2 class=\"wp-block-heading\" id=\"instalace-vyvojovych-nastroju\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Instalace v\u00fdvojov\u00fdch n\u00e1stroj\u016f<\/h2>\n<p>Pokud Sweet Home 3D c\u00edl\u00ed na \u0161irokou ve\u0159ejnost, v\u00fdvoj plugin\u016f vy\u017eaduje speci\u00e1ln\u00ed dovednosti a m\u011bl bys v\u011bd\u011bt, jak programovat v <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Jav\u011b<\/a> s IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a>, ne\u017e p\u016fjde\u0161 d\u00e1l. Tento pr\u016fvodce ukazuje, jak sestavit plugin s <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a>, ale m\u016f\u017ee\u0161 pou\u017e\u00edt IDE podle sv\u00e9ho v\u00fdb\u011bru, nebo \u017e\u00e1dn\u00e9 IDE v\u016fbec. <\/p>\n<h3 class=\"wp-block-heading\" id=\"stahni-a-nainstaluj-eclipse\">St\u00e1hni a nainstaluj Eclipse<\/h3>\n<p>Nejprve si st\u00e1hni Eclipse z <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a>. Verze nazvan\u00e1 <em>Eclipse IDE for Java Developers<\/em> sta\u010d\u00ed k v\u00fdvoji pluginu, ale m\u016f\u017ee\u0161 si st\u00e1hnout jakoukoli verzi pro v\u00fdvoj v Jav\u011b. <br\/>Po sta\u017een\u00ed je instalace Eclipse velmi jednoduch\u00e1: sta\u010d\u00ed rozbalit archiv, kter\u00fd z\u00edsk\u00e1\u0161, otev\u0159\u00edt slo\u017eku eclipse a v z\u00e1vislosti na tv\u00e9m syst\u00e9mu spustit soubor s n\u00e1zvem  <code>eclipse.exe<\/code>  (pod Windows),  <code>eclipse.app<\/code>  (pod Mac OS X) nebo  <code>eclipse<\/code>  (pod Linuxem).<br\/>P\u0159i prvn\u00edm spu\u0161t\u011bn\u00ed bude Eclipse vy\u017eadovat, abys zvolil slo\u017eku <em>workspace<\/em>, kde budou ulo\u017eeny projekty plugin\u016f.<br\/>Jakmile je to hotovo, zvol <em>File &gt; New &gt; Project<\/em> z menu pro vytvo\u0159en\u00ed nov\u00e9ho projektu, vyber <em>Java &gt; Java project<\/em> v pr\u016fvodci <em>New project<\/em>, kter\u00fd se zobraz\u00ed, zadej VolumePlugin jako n\u00e1zev projektu a klikni na tla\u010d\u00edtko <em>Finish<\/em>. Nakonec zav\u0159i z\u00e1lo\u017eku <em>Welcome<\/em>, abys objevil sv\u016fj workspace, jak je uk\u00e1z\u00e1no na obr\u00e1zku 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=\"Pr&#x16F;vodce pro v&#xFD;voj&#xE1;&#x159;e plugin&#x16F;\" 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>Obr\u00e1zek 1. Eclipse workspace <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"stahni-a-nainstaluj-knihovnu-sweet-home-3d\">St\u00e1hni a nainstaluj knihovnu Sweet Home 3D<\/h3>\n<p>V\u00fdvoj pluginu je zalo\u017een na n\u011bkter\u00fdch t\u0159\u00edd\u00e1ch Sweet Home 3D, kter\u00e9 mus\u00ed Eclipse zn\u00e1t, aby mohl sestavit tv\u016fj projekt. Nejjednodu\u0161\u0161\u00ed zp\u016fsob, jak p\u0159idat t\u0159\u00eddy Sweet Home 3D do Eclipse, je st\u00e1hnout JAR spustitelnou verzi Sweet Home 3D dostupnou 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>. Po sta\u017een\u00ed p\u0159et\u00e1hni soubor SweetHome3D-7.5.jar na ikonu projektu <em>VolumePlugin<\/em> v pohledu <em>Package Explorer<\/em> v Eclipse a zvol polo\u017eku <em>Build Path &gt; Add to Build Path<\/em> v kontextov\u00e9m menu souboru SweetHome3D-7.5.jar, jak je uk\u00e1z\u00e1no na obr\u00e1zku 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>Obr\u00e1zek 2. P\u0159id\u00e1n\u00ed SweetHome3D-7.5.jar<br\/> do Build Path <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p><\/p>\n<h2 class=\"wp-block-heading\" id=\"programovani-pluginu\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Programov\u00e1n\u00ed pluginu<\/h2>\n<p>Nyn\u00ed, kdy\u017e jsi nainstaloval pot\u0159ebn\u00e9 n\u00e1stroje, pod\u00edvejme se, jak m\u016f\u017ee\u0161 naprogramovat sv\u016fj prvn\u00ed plugin pro Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"vytvoreni-tridy-pluginu\">Vytvo\u0159en\u00ed t\u0159\u00eddy pluginu<\/h3>\n<p>Nejprve vytvo\u0159 novou podt\u0159\u00eddu com.eteks.sweethome3d.plugin.Plugin v\u00fdb\u011brem polo\u017eky menu <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>Obr\u00e1zek 3. Vytvo\u0159en\u00ed nov\u00e9 t\u0159\u00eddy <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p>V dialogu <em>New Java Class<\/em> zadej VolumePlugin jako n\u00e1zev t\u0159\u00eddy, zadej bal\u00ed\u010dek (zde byl zvolen bal\u00ed\u010dek com.eteks.test) a zvol com.eteks.sweethome3d.plugin.Plugin jako nadt\u0159\u00eddu VolumePlugin. Jakmile je to hotovo, klikni na <em>Finish<\/em>. Eclipse vytvo\u0159\u00ed soubor nov\u00e9 t\u0159\u00eddy s n\u00e1sleduj\u00edc\u00edm obsahem:  <\/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>Jak m\u016f\u017ee\u0161 uhodnout z koment\u00e1\u0159e TODO, mus\u00ed\u0161 nyn\u00ed zm\u011bnit implementaci metody getActions, aby vr\u00e1tila akci pluginu schopnou vypo\u010d\u00edtat objem movit\u00e9ho n\u00e1bytku. Nahra\u010f return null; n\u00e1sleduj\u00edc\u00edm p\u0159\u00edkazem: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>a zvol <em>Edition &gt; Quick Fix<\/em> z menu Eclipse pro vytvo\u0159en\u00ed chyb\u011bj\u00edc\u00ed t\u0159\u00eddy VolumeAction, jak je uk\u00e1z\u00e1no na obr\u00e1zku 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>Obr\u00e1zek 4. Pou\u017eit\u00ed Quick fix pro generov\u00e1n\u00ed chyb\u011bj\u00edc\u00ed t\u0159\u00eddy <\/em><\/figcaption><\/figure>\n<\/div>\n<p>V dialogu <em>New Java Class<\/em>, kter\u00fd se objev\u00ed, vyber za\u0161krt\u00e1vac\u00ed pol\u00ed\u010dko <em>Enclosing type<\/em> pro vytvo\u0159en\u00ed vnit\u0159n\u00ed t\u0159\u00eddy VolumePlugin a klikni na <em>Finish<\/em>. T\u00edm se vytvo\u0159\u00ed t\u0159\u00edda VolumeAction, kter\u00e1 d\u011bd\u00ed z t\u0159\u00eddy com.eteks.sweethome3d.plugin.PluginAction a obsahuje pr\u00e1zdnou metodu 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>Tato metoda je ta, kterou Sweet Home 3D zavol\u00e1, kdy\u017e u\u017eivatel spust\u00ed akci pluginu; tak\u017ee toto je m\u00edsto, kde mus\u00ed\u0161 implementovat, jak vypo\u010d\u00edtat objem n\u00e1bytku a zobrazit ho:<\/p>\n\n<pre class=\"wp-block-preformatted\">  public class <g id=\"gid_0\">VolumeAction<\/g> extends <strong>PluginAction<\/strong> {  <br\/>  @Override<br\/>  public void <strong>execute<\/strong>() { <br\/>  float volumeInCm3 = 0;<br\/> \/\/ Vypo\u010d\u00edtej sou\u010det objemu ohrani\u010duj\u00edc\u00edho boxu <br\/> \/\/ ka\u017ed\u00e9ho movit\u00e9ho kusu n\u00e1bytku v domov\u011b<br\/> for (PieceOfFurniture piece : <strong>getHome<\/strong>(). <g id=\"gid_1\">getFurniture<\/g>()) {<br\/> if (piece. <g id=\"gid_2\">isMovable<\/g>()) {<br\/> volumeInCm3 += piece. <g id=\"gid_3\">getWidth<\/g>() <br\/> * piece. <strong>getDepth<\/strong>() <br\/> * piece. <strong>getHeight<\/strong>();<br\/>  }<br\/> }<br\/>            <br\/> \/\/ Zobraz v\u00fdsledek v okn\u011b se zpr\u00e1vou (\u00b3 je pro 3 v horn\u00edm indexu)<br\/> String message = String. <strong>format<\/strong>(<br\/> \"Maxim\u00e1ln\u00ed objem movit\u00e9ho n\u00e1bytku v domov\u011b je %.2f m\u00b3.\", <br\/> volumeInCm3 \/ 1000000);<br\/> JOptionPane. <strong>showMessageDialog<\/strong>(null, message);<br\/>  }<br\/>  }<\/pre>\n\n<p>Nyn\u00ed, kdy\u017e jsi specifikoval, co chce\u0161, aby plugin d\u011blal, mus\u00ed\u0161 popsat, jak u\u017eivatel spust\u00ed tuto novou akci. M\u00e1\u0161 na v\u00fdb\u011br mezi p\u0159id\u00e1n\u00edm nov\u00e9 <strong>polo\u017eky menu<\/strong> do menu a\/nebo nov\u00e9ho <strong>tla\u010d\u00edtka<\/strong> do panelu n\u00e1stroj\u016f. Tato volba se prov\u00e1d\u00ed nastaven\u00edm p\u0159\u00edslu\u0161n\u00fdch vlastnost\u00ed akce pluginu p\u0159i jej\u00edm vytvo\u0159en\u00ed. Nap\u0159\u00edklad, pokud chce\u0161, aby u\u017eivatel\u00e9 spustili akci objemu pomoc\u00ed polo\u017eky menu <em>Compute volume<\/em> nalezen\u00e9 v menu <em>Tools<\/em>, p\u0159id\u00e1\u0161 n\u00e1sleduj\u00edc\u00ed konstruktor do t\u0159\u00eddy VolumeAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br\/>           <strong>putPropertyValue<\/strong>(Property.NAME, \"Compute volume\");<br\/>           <strong>putPropertyValue<\/strong>(Property.MENU, \"Tools\");<br\/> \/\/ Povol\u00ed akci ve v\u00fdchoz\u00edm nastaven\u00ed<br\/>           <strong>setEnabled<\/strong>(true);<br\/> }<\/pre>\n\n<p>T\u0159\u00edda pluginu <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> je nyn\u00ed naprogramov\u00e1na a t\u00e9m\u011b\u0159 p\u0159ipravena fungovat jako plugin v Sweet Home 3D. Posledn\u00ed dv\u011b v\u011bci, kter\u00e9 je t\u0159eba ud\u011blat, jsou: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>vytvo\u0159en\u00ed popisn\u00e9ho souboru <tt>ApplicationPlugin.properties<\/tt>,<\/li>\n\n\n\n<li>spojen\u00ed soubor\u016f do JAR souboru.<br\/><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\" id=\"vytvoreni-popisneho-souboru-pluginu\">Vytvo\u0159en\u00ed popisn\u00e9ho souboru pluginu<\/h3>\n<p>Soubor <tt>ApplicationPlugin.properties<\/tt>\n popisuje n\u00e1zev pluginu, jeho t\u0159\u00eddu, minim\u00e1ln\u00ed verze Sweet Home 3D a Javy, pod kter\u00fdmi je podporov\u00e1n,\n a pr\u00e1vn\u00ed z\u00e1le\u017eitosti. Zvol <i>File &gt; New &gt; File<\/i> z\n menu Eclipse, zadej n\u00e1zev souboru <tt>ApplicationPlugin.properties<\/tt> a klikni na <i>Finish<\/i>, jak je uk\u00e1z\u00e1no\n na obr\u00e1zku 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>Obr\u00e1zek 5. Vytvo\u0159en\u00ed nov\u00e9ho souboru <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Pot\u00e9 zadej <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">n\u00e1sleduj\u00edc\u00ed popis<\/a> do nov\u00e9ho souboru a ulo\u017e ho:<\/p>\n\n<pre class=\"wp-block-preformatted\"><strong>name<\/strong>=Movable furniture volume<br\/><strong>class<\/strong>=com.eteks.test.VolumePlugin<br\/><strong>description<\/strong>=Computes the volume of the movable furniture in home<br\/><strong>version<\/strong>=1.0<br\/><strong>license<\/strong>=GNU GPL<br\/><strong>provider<\/strong>=(C) Copyrights 2024 Space Mushrooms<br\/><strong>applicationMinimumVersion<\/strong>=1.5<br\/><strong>javaMinimumVersion<\/strong>=1.5<\/pre>\n<h3 class=\"wp-block-heading\" id=\"vytvoreni-jar-pluginu\">Vytvo\u0159en\u00ed JAR pluginu<\/h3>\n<p>JAR plugin obsahuje <tt>class<\/tt> soubory vytvo\u0159en\u00e9 z kompilace souboru <tt>VolumePlugin.java<\/tt>,\n a soubor <tt>ApplicationPlugin.properties<\/tt>. Proto\u017ee Eclipse kompiluje Java soubor, jakmile ho ulo\u017e\u00ed\u0161,\n sta\u010d\u00ed zvolit <i>File &gt; Export&#8230;<\/i> z menu a vybrat <i>Java &gt; JAR file<\/i> v dialogu <i>Export<\/i>\n, kter\u00fd se zobraz\u00ed. V pr\u016fvodci <i>Jar Export<\/i>, kter\u00fd se objev\u00ed, jak je uk\u00e1z\u00e1no na obr\u00e1zku 6, vyber za\u0161krt\u00e1vac\u00ed pol\u00ed\u010dko projektu\n a zadej cestu k JAR souboru um\u00edst\u011bn\u00e9mu ve slo\u017ece plugin\u016f Sweet Home 3D. Tato p\u0159\u00edslu\u0161n\u00e1 slo\u017eka z\u00e1vis\u00ed\n na tv\u00e9m syst\u00e9mu n\u00e1sledovn\u011b:   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>  pod Windows Vista \/ 7 \/ 8 \/ 10 \/ 11 je tato slo\u017eka <tt>C:\\Users\\<i>user<\/i>\\AppData\\Roaming\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  pod Windows XP a p\u0159edchoz\u00edmi verzemi Windows je tato slo\u017eka <tt>C:\\Documents and Settings\\<i>user<\/i>\\Application Data\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  pod macOS je to podslo\u017eka <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> tv\u00e9\n u\u017eivatelsk\u00e9 slo\u017eky,<\/li>\n\n\n\n<li>  pod Linuxem a jin\u00fdmi Unix syst\u00e9my je to podslo\u017eka <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> tv\u00e9 u\u017eivatelsk\u00e9 slo\u017eky.<\/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>Obr\u00e1zek 6. Export do JAR souboru <\/em><\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"testovani-pluginu\">Testov\u00e1n\u00ed pluginu<\/h3>\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Plugin<\/a>, kter\u00fd jsi vyvinul, pob\u011b\u017e\u00ed v Sweet Home 3D, bu\u010f s verz\u00ed <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, verz\u00ed <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">instal\u00e1tor\u016f<\/a>, nebo s <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>, kter\u00fd jsi p\u0159edt\u00edm st\u00e1hl. Proto\u017ee ten posledn\u00ed je spustiteln\u00fd JAR, m\u016f\u017ee\u0161 ho spustit dvojklikem na n\u011bj nebo n\u00e1sleduj\u00edc\u00edm p\u0159\u00edkazem: <\/p>\n\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Plugin<\/a>, kter\u00fd jsi vyvinul, pob\u011b\u017e\u00ed v Sweet Home 3D, bu\u010f s verz\u00ed <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, verz\u00ed <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">instal\u00e1tor\u016f<\/a>, nebo s <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>, kter\u00fd jsi p\u0159edt\u00edm st\u00e1hl. Proto\u017ee ten posledn\u00ed je spustiteln\u00fd JAR, m\u016f\u017ee\u0161 ho spustit dvojklikem na n\u011bj nebo n\u00e1sleduj\u00edc\u00edm p\u0159\u00edkazem: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>cesta<\/em>\/<em>k<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>Dokud testuje\u0161, pravd\u011bpodobn\u011b bude\u0161 preferovat spu\u0161t\u011bn\u00ed Sweet Home 3D t\u00edmto p\u0159\u00edkazem, abys mohl \u010d\u00edst v konzoli stack trace v\u00fdjimek vyhozen\u00fdch b\u011bhem prov\u00e1d\u011bn\u00ed tv\u00e9ho pluginu.<\/p>\n\n<p>Jakmile je Sweet Home 3D spu\u0161t\u011bn, uvid\u00ed\u0161 nov\u00e9 menu a jeho polo\u017eku, jak je uk\u00e1z\u00e1no na obr\u00e1zku 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>Obr\u00e1zek 7. Menu pluginu <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Pokud zvol\u00ed\u0161 novou polo\u017eku menu pro <a href=\"\/examples\/userGuideExample.sh3d\">p\u0159\u00edklad domova<\/a> vytvo\u0159en\u00fd v <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/cs\/uzivatelska-prirucka-sweet-home-3d\/\" data-type=\"page\" data-id=\"424\">u\u017eivatelsk\u00e9 p\u0159\u00edru\u010dce<\/a>, z\u00edsk\u00e1\u0161 n\u00e1sleduj\u00edc\u00ed v\u00fdsledek:<\/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>Obr\u00e1zek 8. Plugin v akci <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"ladeni-pluginu\">Lad\u011bn\u00ed pluginu<\/h3>\n<p>Pokud pot\u0159ebuje\u0161 ladit sv\u016fj plugin z Eclipse, vytvo\u0159 konfiguraci lad\u011bn\u00ed podle t\u011bchto krok\u016f:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Zvol <i>Run &gt; Debug Configurations&#8230;<\/i> z menu, vyber polo\u017eku <i>Java Application<\/i> v seznamu dostupn\u00fdch konfigurac\u00ed v\n          dialogu <i>Debug configurations<\/i>, klikni na tla\u010d\u00edtko <i>New <\/i> vlevo naho\u0159e a zadej n\u00e1zev pro konfiguraci.<\/li>\n\n\n\n<li>Klikni na tla\u010d\u00edtko <i>Search&#8230;<\/i> vpravo od textov\u00e9ho pole <i>Main class<\/i> a dvojklikni na t\u0159\u00eddu <i>SweetHome3DBootstrap<\/i> <br\/> mezi navr\u017een\u00fdmi t\u0159\u00eddami.<\/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>Obr\u00e1zek 9. Vytvo\u0159en\u00ed konfigurace lad\u011bn\u00ed <\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Klikni na z\u00e1lo\u017eku <em>Classpath<\/em>, vyber podpolo\u017eku <em>VolumePlugin (default classpath)<\/em> polo\u017eky <em>User Entries<\/em> v seznamu <em>Classpath<\/em> a klikni na tla\u010d\u00edtko <em>Remove<\/em>.<\/li>\n\n\n\n<li>Klikni na<em> polo\u017eku User Entries<\/em> v seznamu <em>Classpath<\/em>, klikni na tla\u010d\u00edtko <em>Add JARs&#8230;<\/em>, vyber polo\u017eku SweetHome3D-7.5.jar a potvr\u010f svou volbu.<\/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>Obr\u00e1zek 10. Nastaven\u00ed classpath konfigurace lad\u011bn\u00ed <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Vyber z\u00e1lo\u017eku <em>Source<\/em>, klikni na tla\u010d\u00edtko <em>Add\u2026<\/em>, dvojklikni na polo\u017eku <em>Java Project<\/em> v dialogu <em>Add Source<\/em>, vyber polo\u017eku <em>VolumePlugin<\/em> v popup <em>Project Selection<\/em> a potvr\u010f svou volbu.<\/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>Obr\u00e1zek 11. Nastaven\u00ed cesty ke zdroj\u016fm konfigurace lad\u011bn\u00ed <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Nakonec klikni na tla\u010d\u00edtko <i>Debug<\/i> pro spu\u0161t\u011bn\u00ed Sweet Home 3D v re\u017eimu lad\u011bn\u00ed. Jakmile program b\u011b\u017e\u00ed, otev\u0159i soubor <tt>VolumePlugin.java<\/tt>,\n nastav breakpoint v metod\u011b <i>execute<\/i> a zvol <i>Tools &gt; Compute volume<\/i> z menu Sweet Home 3D. Eclipse se zastav\u00ed na vybran\u00e9m\n breakpointu, aby ti umo\u017enil prov\u00e1d\u011bt program krok za krokem a kontrolovat hodnoty prom\u011bnn\u00fdch.  <\/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>Obr\u00e1zek 12. Perspektiva lad\u011bn\u00ed Eclipse <\/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>Poka\u017ed\u00e9, kdy\u017e uprav\u00ed\u0161 zdrojov\u00fd k\u00f3d sv\u00e9ho pluginu, nezapome\u0148 <a href=\"#creatingPluginJAR\">vygenerovat JAR pluginu<\/a> p\u0159ed spu\u0161t\u011bn\u00edm konfigurace lad\u011bn\u00ed, kterou jsi vytvo\u0159il. Pro urychlen\u00ed procesu exportu JAR v Eclipse jdi do druh\u00e9ho kroku pr\u016fvodce exportem JAR a vyber mo\u017enost <em>Save the description of this JAR in the workspace<\/em>. T\u00edm se p\u0159id\u00e1 nov\u00e1 polo\u017eka do projektu s kontextovou polo\u017ekou menu <em>Create JAR<\/em>.  <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"nasazeni-pluginu\">Nasazen\u00ed pluginu<\/h3>\n<p>Jakmile je p\u0159ipraven, tv\u016fj plugin m\u016f\u017ee b\u00fdt nasazen na po\u010d\u00edta\u010d jin\u00fdch u\u017eivatel\u016f Sweet Home 3D jednodu\u0161e zkop\u00edrov\u00e1n\u00edm do jejich <a href=\"#creatingPluginJAR\">slo\u017eky plugin\u016f<\/a>. Od verze 1.6 m\u016f\u017ee b\u00fdt soubor pluginu tak\u00e9 nainstalov\u00e1n do slo\u017eky plugin\u016f Sweet Home 3D dvojklikem na n\u011bj, pokud m\u00e1 p\u0159\u00edponu SH3P (jednodu\u0161e zm\u011b\u0148 p\u0159\u00edponu souboru z .zip na .sh3p). Pokud dvojklik na soubor .sh3p nespust\u00ed Sweet Home 3D (nejpravd\u011bpodobn\u011bj\u0161\u00ed pod Linuxem), m\u016f\u017ee\u0161 tak\u00e9 nainstalovat plugin n\u00e1sleduj\u00edc\u00edm p\u0159\u00edkazem v okn\u011b <em>Terminal<\/em> (kde    <code>SweetHome3D<\/code>  je n\u00e1zev spustiteln\u00e9ho souboru poskytovan\u00e9ho s instal\u00e1tory Sweet Home 3D):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/cesta\/k\/<\/em>SweetHome3D <em>\/cesta\/k\/<\/em>plugin.sh3p<\/pre>\n\n<p>Pro ukon\u010den\u00ed pou\u017e\u00edv\u00e1n\u00ed pluginu odstra\u0148 jeho soubor ze slo\u017eky plugin\u016f a znovu spus\u0165 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>Pokud chce\u0161, aby tv\u016fj plugin mohl b\u011b\u017eet se v\u0161emi <a href=\"http:\/\/download\">instal\u00e1tory Sweet Home 3D<\/a> dostupn\u00fdmi na t\u00e9to webov\u00e9 str\u00e1nce, dbej na to, aby z\u016fstal kompatibiln\u00ed s Java 5, v\u00fdb\u011brem<code>1.5<\/code> v poli <em>Compiler compliance level<\/em> dostupn\u00e9m v sekci <em>Java Compiler<\/em> dialogu zobrazen\u00e9ho polo\u017ekou menu <em>Project &gt; Properties<\/em> v Eclipse.<br\/>Pokud pou\u017e\u00edv\u00e1\u0161 verzi Java kompil\u00e1toru, kde kompatibilita s Java 1.5 ji\u017e nen\u00ed dostupn\u00e1, zkus c\u00edlit alespo\u0148 na Java 1.8 st\u00e1le pou\u017e\u00edvanou v ned\u00e1vn\u00fdch verz\u00edch Sweet Home 3D a nastav<code>javaMinimumVersion<\/code> v souboru<code>ApplicationPlugin.properties<\/code> tv\u00e9ho pluginu odpov\u00eddaj\u00edc\u00edm zp\u016fsobem.<\/p>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"dalsi-postup\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Dal\u0161\u00ed postup<\/h2>\n<p>Programov\u00e1n\u00ed prvn\u00edho pluginu ti uk\u00e1zalo celkov\u00fd p\u0159ehled. Zde jsou dal\u0161\u00ed informace, kter\u00e9 ti pomohou pokro\u010dit d\u00e1le. <\/p>\n<h3 class=\"wp-block-heading\" id=\"sweet-home-3d-api-javadoc\">Sweet Home 3D API &#8211; javadoc<\/h3>\n<p>Neju\u017eite\u010dn\u011bj\u0161\u00ed dokumentac\u00ed pro v\u00fdvoj nov\u00e9ho pluginu je <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), vygenerovan\u00e9 n\u00e1strojem javadoc.<br\/>Ve sv\u00e9m pluginu pou\u017e\u00edvej pouze t\u0159\u00eddy z bal\u00ed\u010dk\u016f <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> a <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a>, pokud chce\u0161, aby byl kompatibiln\u00ed s budouc\u00edmi verzemi Sweet Home 3D. To bude v\u00edce ne\u017e dosta\u010duj\u00edc\u00ed pro programov\u00e1n\u00ed jak\u00e9hokoli pluginu, kter\u00fd pracuje s daty dom\u016f dostupn\u00fdmi v Sweet Home 3D.<br\/>Bal\u00ed\u010dky odpov\u00eddaj\u00edc\u00ed ostatn\u00edm vrstv\u00e1m programu jsou zahrnuty v Javadocu pouze pro informa\u010dn\u00ed \u00fa\u010dely. Nespol\u00e9hej se na jejich API, proto\u017ee se m\u016f\u017ee v budoucnu zm\u011bnit bez z\u00e1ruky zp\u011btn\u00e9 kompatibility (v ka\u017ed\u00e9m p\u0159\u00edpad\u011b neuvid\u00ed\u0161 \u017e\u00e1dn\u00fd odkaz na t\u0159\u00eddu z bal\u00ed\u010dk\u016f <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> nebo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a> ve v\u00fd\u0161e zm\u00edn\u011bn\u00fdch bal\u00ed\u010dc\u00edch).  <\/p>\n<h3 class=\"wp-block-heading\" id=\"architektura-trid-modelu\">Architektura t\u0159\u00edd modelu<\/h3>\n<p>Sweet Home 3D je zalo\u017een na architektu\u0159e MVC (Model View Controller), tak\u017ee porozum\u011bn\u00ed organizaci jeho vrstvy Model je z\u00e1sadn\u00ed. Obr\u00e1zek 13 (dostupn\u00fd tak\u00e9 ve <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/modelClassesDiagram.png\">form\u00e1tu PDF<\/a>) p\u0159edstavuje t\u00e9m\u011b\u0159 v\u0161echny t\u0159\u00eddy a rozhran\u00ed dostupn\u00e9 ve verzi 1.5 bal\u00ed\u010dku <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a>, kter\u00fd odpov\u00edd\u00e1 t\u00e9to vrstv\u011b 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>Centr\u00e1ln\u00ed t\u0159\u00eddou ve vrstv\u011b Model je t\u0159\u00edda <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a> (10), abstraktn\u00ed nadt\u0159\u00edda hlavn\u00ed t\u0159\u00eddy aplikace <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>. Instance t\u00e9to t\u0159\u00eddy poskytuje p\u0159\u00edstup k aktu\u00e1ln\u011b upravovan\u00fdm instanc\u00edm <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) a k objektu <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a> (11), kter\u00fd ukl\u00e1d\u00e1 pou\u017e\u00edvanou <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">jednotku d\u00e9lky<\/a> (12), <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">katalog n\u00e1bytku<\/a> (14) a <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">katalog textur<\/a> (15), ze kter\u00fdch u\u017eivatel vyb\u00edr\u00e1 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">kusy n\u00e1bytku<\/a> (17) a <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">textury<\/a> (18).<br\/>Instance <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) ukl\u00e1d\u00e1 v\u0161echny objekty, kter\u00e9 u\u017eivatel vytvo\u0159il v pl\u00e1nu domu: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>seznam objekt\u016f <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a> (13), kter\u00e9 implementuj\u00ed rozhran\u00ed <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16),<\/li>\n\n\n\n<li>kolekci objekt\u016f <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a> (9),<\/li>\n\n\n\n<li>seznam objekt\u016f <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a> (5),<\/li>\n\n\n\n<li>kolekci objekt\u016f <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a> (2),<\/li>\n\n\n\n<li>kolekci objekt\u016f <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a> (3).<\/li>\n<\/ul>\n\n<p>Tyto objekty implementuj\u00ed rozhran\u00ed <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1), stejn\u011b jako objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), kter\u00fd ukl\u00e1d\u00e1 polohu kamery v re\u017eimu <em>Virtu\u00e1ln\u00ed n\u00e1v\u0161t\u011bvn\u00edk<\/em>. V\u0161echny extern\u00ed informace spravovan\u00e9 objekty Model, jako jsou ikona a 3D model <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">kusu n\u00e1bytku<\/a> (16) nebo obr\u00e1zek <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">textury<\/a> (20), jsou p\u0159\u00edstupn\u00e9 p\u0159es rozhran\u00ed <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), implementovan\u00e9 t\u0159\u00eddou <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> a dal\u0161\u00edmi t\u0159\u00eddami z bal\u00ed\u010dku <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Tento UML diagram by ti m\u011bl pomoci pochopit, kter\u00e9 t\u0159\u00eddy jsou dostupn\u00e9 v modelu Sweet Home 3D a jak k nim m\u016f\u017ee\u0161 p\u0159istupovat, ale pravd\u011bpodobn\u011b si v\u0161imne\u0161, \u017ee v n\u011bm nejsou uvedeny \u017e\u00e1dn\u00e9 konstruktory ani mut\u00e1tory (nebo settery, pokud preferuje\u0161). Je to jen kv\u016fli nedostatku m\u00edsta, ale m\u016f\u017ee\u0161 je bez probl\u00e9m\u016f pou\u017e\u00edvat ve t\u0159\u00edd\u011b pluginu. V\u0161imni si tak\u00e9, \u017ee jak\u00e1koli modifikace existuj\u00edc\u00edho objektu modelu bude ozn\u00e1mena zobrazen\u00fdm komponent\u00e1m bu\u010f pomoc\u00ed <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>\u016f, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>\u016f (8) nebo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>\u016f (6), co\u017e umo\u017e\u0148uje okam\u017eit\u00e9 zobrazen\u00ed v\u0161ech zm\u011bn na obrazovce.  <\/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>nen\u00ed<\/strong> vl\u00e1knov\u011b bezpe\u010dn\u00fd z d\u016fvod\u016f v\u00fdkonu. V\u0161echny <strong>modifikace<\/strong> objektu pat\u0159\u00edc\u00edho do modelu by m\u011bly b\u00fdt prov\u00e1d\u011bny ve vl\u00e1kn\u011b Event Dispatch Thread. <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"architektura-trid-pluginu\">Architektura t\u0159\u00edd pluginu<\/h3>\n<p>Architektura t\u0159\u00edd pluginu je mnohem jednodu\u0161\u0161\u00ed na pochopen\u00ed ne\u017e architektura vrstvy Model. Bal\u00ed\u010dek <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> obsahuje pouze t\u0159i t\u0159\u00eddy, z nich\u017e by ses m\u011bl pou\u017e\u00edvat pouze t\u0159\u00eddy <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> a <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, jak je zn\u00e1zorn\u011bno na obr\u00e1zku 14 (dostupn\u00e9m tak\u00e9 ve <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginClassesDiagram.png\">form\u00e1tu PDF<\/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>Instance <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a> (1) je vytvo\u0159ena p\u0159i spu\u0161t\u011bn\u00ed aplikace a vyhled\u00e1v\u00e1 pluginy nainstalovan\u00e9 ve <a href=\"#creating-the-plugin-jar\">slo\u017ece plugin\u016f<\/a> u\u017eivatele. Poka\u017ed\u00e9, kdy\u017e je upravov\u00e1n nov\u00fd d\u016fm, tento mana\u017eer vytvo\u0159\u00ed a nakonfiguruje objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> (3) pro ka\u017ed\u00fd plugin nalezen\u00fd p\u0159i spu\u0161t\u011bn\u00ed. Pot\u00e9 vol\u00e1 metodu <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a> pro z\u00edsk\u00e1n\u00ed v\u0161ech <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">akc\u00ed<\/a> (4), kter\u00e9 budou p\u0159id\u00e1ny jako polo\u017eky menu a\/nebo tla\u010d\u00edtka panelu n\u00e1stroj\u016f v okn\u011b domu. Ka\u017ed\u00e1 akce je instanc\u00ed <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, kter\u00e1 se podob\u00e1 t\u0159\u00edd\u011b <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a>, s jej\u00ed metodou <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a> a jej\u00edmi modifikovateln\u00fdmi <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">vlastnostmi<\/a> (2).   <\/p>\n\n<p>V\u0161imni si, \u017ee t\u0159\u00edda <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> ti poskytuje p\u0159\u00edstup k instanci <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a> prost\u0159ednictv\u00edm jej\u00ed metody <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a>. Jakmile uprav\u00ed\u0161 d\u016fm nebo jeho objekty (n\u00e1bytek, zdi&#8230;) v metod\u011b execute instance <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, m\u011bl bys tak\u00e9 odeslat objekt <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a> do podpory vratn\u00fdch \u00faprav vr\u00e1cen\u00e9 metodou getUndoableEditSupport, jinak u\u017eivatel\u00e9 nebudou moci spr\u00e1vn\u011b vr\u00e1tit\/znovu prov\u00e9st zm\u011bny, kter\u00e9 jsi provedl. <\/p>\n<h3 class=\"wp-block-heading\" id=\"lokalizace\">Lokalizace<\/h3>\n<p>Pokud pl\u00e1nuje\u0161 vyvinout plugin pro komunitu u\u017eivatel\u016f Sweet Home 3D, sna\u017e se lokalizovat \u0159et\u011bzce, kter\u00e9 zobrazuje bu\u010f v n\u00e1zvech akc\u00ed a menu, nebo v dialoz\u00edch, kter\u00e9 vytvo\u0159\u00ed\u0161 (nebo alespo\u0148 p\u0159iprav jeho lokalizaci). Dva <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">konstruktory t\u0159\u00eddy PluginAction<\/a> ti pomohou organizovat p\u0159eklad vlastnost\u00ed akc\u00ed pomoc\u00ed soubor\u016f .properties, a pokud pot\u0159ebuje\u0161 p\u0159elo\u017eit dal\u0161\u00ed \u0159et\u011bzce ve sv\u00e9m pluginu (jako ten v dialogu zobrazen\u00e9m <a href=\"#testing-the-plugin\">testovan\u00fdm pluginem<\/a>), znovu pou\u017eij tyto soubory .properties s Java t\u0159\u00eddou <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br\/>Pokud preferuje\u0161 omezit po\u010det soubor\u016f properties, m\u016f\u017ee\u0161 dokonce zapsat hodnoty vlastnost\u00ed akc\u00ed a dal\u0161\u00ed \u0159et\u011bzce do <a href=\"#creating-the-plugin-description-file\">popisn\u00e9ho souboru<\/a> ApplicationPlugin.properties tv\u00e9ho pluginu. <\/p>\n\n<p>Pokud chce\u0161 p\u0159\u00edklad, kter\u00fd pou\u017e\u00edv\u00e1 tuto architekturu, st\u00e1hni si plugin <em>Export to SH3F<\/em> dostupn\u00fd na <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a> a rozbal ho (tento soubor pluginu obsahuje tak\u00e9 zdrojov\u00fd k\u00f3d pluginu).<br\/>Jak je pops\u00e1no v <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">F\u00f3ru n\u00e1pov\u011bdy<\/a>, tento plugin vytv\u00e1\u0159\u00ed soubor SH3F, kter\u00fd obsahuje ve\u0161ker\u00fd n\u00e1bytek, kter\u00fd jsi importoval do katalogu n\u00e1bytku Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"prispivani-pluginy\">P\u0159isp\u00edv\u00e1n\u00ed pluginy<\/h3>\n<p>Pluginy, kter\u00e9 jsi naprogramoval, m\u016f\u017ee\u0161 zve\u0159ejnit v syst\u00e9mu sledov\u00e1n\u00ed <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">P\u0159\u00edsp\u011bvk\u016f plugin\u016f<\/a>, abys je sd\u00edlel s komunitou u\u017eivatel\u016f Sweet Home 3D.<br\/>D\u00edky plugin\u016fm lze do Sweet Home 3D p\u0159idat mnoho funkc\u00ed, od import\u00e9r\u016f po export\u00e9ry, ale tak\u00e9 pluginy schopn\u00e9 upravovat data domu, jako je <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Plugin pro rotaci domu<\/a> vyvinut\u00fd Michelem Mbemem a dal\u0161\u00ed uveden\u00e9 v <a href=\"\/storage\/pluginsUserGuide.pdf\">Tutori\u00e1lu pro pluginy a roz\u0161\u00ed\u0159en\u00ed<\/a> (PDF) napsan\u00e9m Hansem Dirkse a na str\u00e1nce <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/cs\/pluginy-a-nastroje\/\" data-type=\"page\" data-id=\"437\">Pluginy a n\u00e1stroje<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00davod Od verze 1.5 je mo\u017en\u00e9 p\u0159id\u00e1vat nov\u00e9 funkce do Sweet Home 3D pomoc\u00ed soubor\u016f plugin\u016f um\u00edst\u011bn\u00fdch ve tv\u00e9 slo\u017ece plugin\u016f. To umo\u017e\u0148uje Java program\u00e1tor\u016fm vyv\u00edjet a distribuovat nov\u00e9 funkce pro Sweet Home 3D bez \u00fapravy zdrojov\u00fdch soubor\u016f aktu\u00e1ln\u00ed verze (co\u017e je dobr\u00e9 pro kompatibilitu sm\u011brem nahoru) a bez dod\u00e1v\u00e1n\u00ed pln\u00e9 verze programu (co\u017e je [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":7631,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-8040","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/pages\/8040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/comments?post=8040"}],"version-history":[{"count":3,"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/pages\/8040\/revisions"}],"predecessor-version":[{"id":10705,"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/pages\/8040\/revisions\/10705"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/media\/7631"}],"wp:attachment":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/cs\/wp-json\/wp\/v2\/media?parent=8040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}