{"id":10548,"date":"2025-10-01T14:53:41","date_gmt":"2025-10-01T14:53:41","guid":{"rendered":"https:\/\/wp-test-1.sweethome3d.eu\/przewodnik-dla-tworcow-wtyczek\/"},"modified":"2025-10-31T17:15:02","modified_gmt":"2025-10-31T17:15:02","slug":"przewodnik-dla-tworcow-wtyczek","status":"publish","type":"page","link":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/przewodnik-dla-tworcow-wtyczek\/","title":{"rendered":"Przewodnik dla tw\u00f3rc\u00f3w wtyczek"},"content":{"rendered":"<ul class=\"simpletoc-list\">\n<li><a href=\"#wprowadzenie\">Wprowadzenie<\/a>\n\n<\/li>\n<li><a href=\"#instalacja-narzedzi-programistycznych\">Instalacja narz\u0119dzi programistycznych<\/a>\n\n\n<\/li>\n\n<li><a href=\"#programowanie-wtyczki\">Programowanie wtyczki<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<li><a href=\"#dalsze-kroki\">Dalsze kroki<\/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=\"wprowadzenie\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Wprowadzenie<\/h2>\n<p>Od wersji 1.5 mo\u017cliwe jest dodawanie nowych funkcji do <a href=\"\/\">Sweet Home 3D<\/a> za pomoc\u0105 plik\u00f3w wtyczek umieszczonych w <a href=\"#deployingPlugin\">folderze wtyczek<\/a>. Pozwala to programistom Java tworzy\u0107 i rozpowszechnia\u0107 nowe funkcje dla Sweet Home 3D bez modyfikowania plik\u00f3w \u017ar\u00f3d\u0142owych bie\u017c\u0105cej wersji (co jest dobre dla zgodno\u015bci wstecznej) i bez dostarczania pe\u0142nej wersji programu (co jest korzystne dla rozmiaru dystrybucji).<br\/>Ten dokument opisuje <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">narz\u0119dzia<\/a> wymagane do tworzenia wtyczek, nast\u0119pnie pokazuje jak <a href=\"#programmingPlugin\">zaprogramowa\u0107 wtyczk\u0119<\/a>, kt\u00f3ra oblicza maksymaln\u0105 obj\u0119to\u015b\u0107 ruchomych mebli dodanych do domu, a na ko\u0144cu podaje <a href=\"#goingFurther\">dodatkowe informacje<\/a>, kt\u00f3re pomog\u0105 ci p\u00f3j\u015b\u0107 dalej. <\/p>\n<h2 class=\"wp-block-heading\" id=\"instalacja-narzedzi-programistycznych\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Instalacja narz\u0119dzi programistycznych<\/h2>\n<p>Chocia\u017c Sweet Home 3D jest przeznaczony dla og\u00f3lnego odbiorcy, tworzenie wtyczek wymaga specjalnych umiej\u0119tno\u015bci i powiniene\u015b wiedzie\u0107, jak programowa\u0107 w <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Java<\/a> u\u017cywaj\u0105c IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a>, zanim p\u00f3jdziesz dalej. Ten przewodnik pokazuje, jak zbudowa\u0107 wtyczk\u0119 w <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a>, ale mo\u017cesz u\u017cy\u0107 dowolnego IDE wed\u0142ug w\u0142asnego wyboru lub nie u\u017cywa\u0107 IDE wcale. <\/p>\n<h3 class=\"wp-block-heading\" id=\"pobierz-i-zainstaluj-eclipse\">Pobierz i zainstaluj Eclipse<\/h3>\n<p>Najpierw pobierz Eclipse ze strony <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a>. Wersja nazwana <em>Eclipse IDE for Java Developers<\/em> jest wystarczaj\u0105ca do tworzenia wtyczek, ale mo\u017cesz pobra\u0107 dowoln\u0105 wersj\u0119 do programowania w Java. <br\/>Po pobraniu, instalacja Eclipse jest bardzo prosta: wystarczy rozpakowa\u0107 archiwum, otworzy\u0107 folder eclipse i w zale\u017cno\u015bci od systemu uruchomi\u0107 plik o nazwie  <code>eclipse.exe<\/code>  (w systemie Windows),  <code>eclipse.app<\/code>  (w systemie Mac OS X) lub  <code>eclipse<\/code>  (w systemie Linux).<br\/>Przy pierwszym uruchomieniu Eclipse poprosi ci\u0119 o wybranie folderu <em>workspace<\/em>, w kt\u00f3rym b\u0119d\u0105 przechowywane projekty wtyczek.<br\/>Po zako\u0144czeniu wybierz <em>File &gt; New &gt; Project<\/em> z menu, aby utworzy\u0107 nowy projekt, wybierz <em>Java &gt; Java project<\/em> w kreatorze <em>New project<\/em>, kt\u00f3ry si\u0119 wy\u015bwietli, wpisz VolumePlugin jako nazw\u0119 projektu i kliknij przycisk <em>Finish<\/em>. Na koniec zamknij zak\u0142adk\u0119 <em>Welcome<\/em>, aby zobaczy\u0107 sw\u00f3j workspace jak pokazano na rysunku 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=\"Przewodnik dla tw&#xF3;rc&#xF3;w wtyczek\" 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>Rysunek 1. Przestrze\u0144 robocza Eclipse <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"pobierz-i-zainstaluj-biblioteke-sweet-home-3d\">Pobierz i zainstaluj bibliotek\u0119 Sweet Home 3D<\/h3>\n<p>Tworzenie wtyczki opiera si\u0119 na niekt\u00f3rych klasach Sweet Home 3D, kt\u00f3re Eclipse musi zna\u0107, aby m\u00f3c zbudowa\u0107 tw\u00f3j projekt. Naj\u0142atwiejszym sposobem dodania klas Sweet Home 3D do Eclipse jest pobranie wersji JAR Sweet Home 3D dost\u0119pnej pod adresem <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 pobraniu przeci\u0105gnij i upu\u015b\u0107 plik SweetHome3D-7.5.jar na ikon\u0119 projektu <em>VolumePlugin<\/em> w widoku <em>Package Explorer<\/em> w Eclipse i wybierz pozycj\u0119 <em>Build Path &gt; Add to Build Path<\/em> z menu kontekstowego pliku SweetHome3D-7.5.jar, jak pokazano na rysunku 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>Rysunek 2. Dodawanie SweetHome3D-7.5.jar<br\/> do Build Path <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p><\/p>\n<h2 class=\"wp-block-heading\" id=\"programowanie-wtyczki\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Programowanie wtyczki<\/h2>\n<p>Teraz, gdy zainstalowa\u0142e\u015b wymagane narz\u0119dzia, zobaczmy jak mo\u017cesz zaprogramowa\u0107 swoj\u0105 pierwsz\u0105 wtyczk\u0119 dla Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"tworzenie-klasy-wtyczki\">Tworzenie klasy wtyczki<\/h3>\n<p>Najpierw utw\u00f3rz now\u0105 podklas\u0119 com.eteks.sweethome3d.plugin.Plugin wybieraj\u0105c z menu Eclipse pozycj\u0119 <em>File &gt; New &gt; Class<\/em>.<\/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>Rysunek 3. Tworzenie nowej klasy <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p>W oknie dialogowym <em>New Java Class<\/em> wpisz VolumePlugin jako nazw\u0119 klasy, wprowad\u017a pakiet (tutaj wybrany pakiet to com.eteks.test) i wybierz com.eteks.sweethome3d.plugin.Plugin jako klas\u0119 nadrz\u0119dn\u0105 dla VolumePlugin. Po zako\u0144czeniu kliknij <em>Finish<\/em>. Eclipse utworzy plik nowej klasy z nast\u0119puj\u0105c\u0105 zawarto\u015bci\u0105:  <\/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 mo\u017cesz si\u0119 domy\u015bli\u0107 z komentarza TODO, musisz teraz zmieni\u0107 implementacj\u0119 metody getActions, aby zwraca\u0142a akcj\u0119 wtyczki zdoln\u0105 do obliczenia obj\u0119to\u015bci ruchomych mebli. Zast\u0105p return null; nast\u0119puj\u0105c\u0105 instrukcj\u0105: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>i wybierz <em>Edition &gt; Quick Fix<\/em> z menu Eclipse, aby utworzy\u0107 brakuj\u0105c\u0105 klas\u0119 VolumeAction, jak pokazano na rysunku 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>Rysunek 4. U\u017cywanie Quick fix do wygenerowania brakuj\u0105cej klasy <\/em><\/figcaption><\/figure>\n<\/div>\n<p>W oknie dialogowym <em>New Java Class<\/em>, kt\u00f3re si\u0119 pojawi, zaznacz pole wyboru <em>Enclosing type<\/em>, aby utworzy\u0107 klas\u0119 wewn\u0119trzn\u0105 VolumePlugin i kliknij <em>Finish<\/em>. Spowoduje to utworzenie klasy VolumeAction, kt\u00f3ra dziedziczy po klasie com.eteks.sweethome3d.plugin.PluginAction i zawiera pust\u0105 metod\u0119 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 zostanie wywo\u0142ana przez Sweet Home 3D, gdy u\u017cytkownik uruchomi akcj\u0119 wtyczki; to w\u0142a\u015bnie tutaj musisz zaimplementowa\u0107 spos\u00f3b obliczania obj\u0119to\u015bci mebli i wy\u015bwietlania jej:<\/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\/> \/\/ Oblicz sum\u0119 obj\u0119to\u015bci prostopad\u0142o\u015bcianu ograniczaj\u0105cego <br\/> \/\/ ka\u017cdy ruchomy mebel w 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\/> \/\/ Wy\u015bwietl wynik w oknie komunikatu (\u00b3 oznacza 3 w indeksie g\u00f3rnym)<br\/> String message = String. <g id=\"gid_0\">format<\/g>(<br\/> \"Maksymalna obj\u0119to\u015b\u0107 ruchomych mebli w domu wynosi %.2f m\u00b3.\", <br\/> volumeInCm3 \/ 1000000);<br\/> JOptionPane. <strong>showMessageDialog<\/strong>(null, message);<br\/>  }<br\/>  }<\/pre>\n\n<p>Teraz, gdy okre\u015bli\u0142e\u015b, co ma robi\u0107 wtyczka, musisz opisa\u0107, jak u\u017cytkownik b\u0119dzie uruchamia\u0142 t\u0119 now\u0105 akcj\u0119. Masz do wyboru dodanie nowej <strong>pozycji menu<\/strong> do menu i\/lub nowego <strong>przycisku<\/strong> do paska narz\u0119dzi. Wyboru dokonuje si\u0119 ustawiaj\u0105c odpowiednie w\u0142a\u015bciwo\u015bci akcji wtyczki przy jej tworzeniu. Na przyk\u0142ad, je\u015bli chcesz, aby u\u017cytkownicy uruchamiali akcj\u0119 obliczania obj\u0119to\u015bci za pomoc\u0105 pozycji menu <em>Oblicz obj\u0119to\u015b\u0107<\/em> znajduj\u0105cej si\u0119 w menu <em>Narz\u0119dzia<\/em>, dodasz nast\u0119puj\u0105cy konstruktor do klasy VolumeAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br\/>           <strong>putPropertyValue<\/strong>(Property.NAME, \"Oblicz obj\u0119to\u015b\u0107\");<br\/>           <strong>putPropertyValue<\/strong>(Property.MENU, \"Narz\u0119dzia\");<br\/> \/\/ Domy\u015blnie w\u0142\u0105cza akcj\u0119<br\/>           <strong>setEnabled<\/strong>(true);<br\/> }<\/pre>\n\n<p>Klasa wtyczki <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> jest teraz zaprogramowana i prawie gotowa do dzia\u0142ania jako wtyczka w Sweet Home 3D. Pozosta\u0142y dwie ostatnie rzeczy do zrobienia: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>utworzenie pliku opisu <tt>ApplicationPlugin.properties<\/tt>,<\/li>\n\n\n\n<li>umieszczenie plik\u00f3w razem w pliku JAR.<br\/><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\" id=\"tworzenie-pliku-opisu-wtyczki\">Tworzenie pliku opisu wtyczki<\/h3>\n<p>Plik <tt>ApplicationPlugin.properties<\/tt>\n opisuje nazw\u0119 wtyczki, jej klas\u0119, minimalne wersje Sweet Home 3D i Javy, pod kt\u00f3rymi jest obs\u0142ugiwana,\n oraz informacje prawne. Wybierz <i>File &gt; New &gt; File<\/i> z\n menu Eclipse, wprowad\u017a nazw\u0119 pliku <tt>ApplicationPlugin.properties<\/tt> i kliknij <i>Finish<\/i>, jak pokazano\n na rysunku 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>Rysunek 5. Tworzenie nowego pliku <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Nast\u0119pnie wprowad\u017a <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">nast\u0119puj\u0105cy opis<\/a> w nowym pliku i zapisz go:<\/p>\n\n<pre class=\"wp-block-preformatted\"><strong>name<\/strong>=Obj\u0119to\u015b\u0107 ruchomych mebli<br\/><strong>class<\/strong>=com.eteks.test.VolumePlugin<br\/><strong>description<\/strong>=Oblicza obj\u0119to\u015b\u0107 ruchomych mebli w domu<br\/><strong>version<\/strong>=1.0<br\/><strong>license<\/strong>=GNU GPL<br\/><strong>provider<\/strong>=(C) Prawa autorskie 2024 Space Mushrooms<br\/><strong>applicationMinimumVersion<\/strong>=1.5<br\/><strong>javaMinimumVersion<\/strong>=1.5<\/pre>\n<h3 class=\"wp-block-heading\" id=\"tworzenie-pliku-jar-wtyczki\">Tworzenie pliku JAR wtyczki<\/h3>\n<p>Plik JAR wtyczki zawiera pliki <tt>class<\/tt> utworzone z kompilacji pliku <tt>VolumePlugin.java<\/tt>,\n oraz plik <tt>ApplicationPlugin.properties<\/tt>. Poniewa\u017c Eclipse kompiluje plik Java zaraz po jego zapisaniu,\n wystarczy wybra\u0107 <i>File &gt; Export&#8230;<\/i> z menu i wybra\u0107 <i>Java &gt; JAR file<\/i> w oknie dialogowym <i>Export<\/i>,\n kt\u00f3re si\u0119 wy\u015bwietli. W kreatorze <i>Jar Export<\/i>, kt\u00f3ry pojawi si\u0119 jak pokazano na rysunku 6, zaznacz pole wyboru projektu\n i wprowad\u017a \u015bcie\u017ck\u0119 do pliku JAR umieszczonego w folderze wtyczek Sweet Home 3D. Odpowiedni folder zale\u017cy\n od twojego systemu w nast\u0119puj\u0105cy spos\u00f3b:   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>  w systemie Windows Vista \/ 7 \/ 8 \/ 10 \/ 11, ten folder to <tt>C:Users<i>u\u017cytkownik<\/i>AppDataRoamingeTeksSweet\n Home 3Dplugins<\/tt>,<\/li>\n\n\n\n<li>  w systemie Windows XP i wcze\u015bniejszych wersjach Windows, ten folder to <tt>C:Documents and Settings<i>u\u017cytkownik<\/i>Application DataeTeksSweet\n Home 3Dplugins<\/tt>,<\/li>\n\n\n\n<li>  w systemie macOS, to podfolder <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> twojego\n folderu u\u017cytkownika,<\/li>\n\n\n\n<li>  w systemie Linux i innych systemach Unix, to podfolder <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> twojego folderu u\u017cytkownika.<\/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>Rysunek 6. Eksportowanie do pliku JAR <\/em><\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"testowanie-wtyczki\">Testowanie wtyczki<\/h3>\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Wtyczka<\/a>, kt\u00f3r\u0105 stworzy\u0142e\u015b, b\u0119dzie dzia\u0142a\u0107 w Sweet Home 3D, zar\u00f3wno w wersji <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, wersji <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">instalacyjnej<\/a>, jak i w <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>, kt\u00f3ry pobra\u0142e\u015b wcze\u015bniej. Poniewa\u017c ten ostatni jest wykonywalnym plikiem JAR, mo\u017cesz go uruchomi\u0107 przez podw\u00f3jne klikni\u0119cie lub za pomoc\u0105 nast\u0119puj\u0105cego polecenia: <\/p>\n\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Wtyczka<\/a>, kt\u00f3r\u0105 stworzy\u0142e\u015b, b\u0119dzie dzia\u0142a\u0107 w Sweet Home 3D, zar\u00f3wno w wersji <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, wersji <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">instalacyjnej<\/a>, jak i w <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>, kt\u00f3ry pobra\u0142e\u015b wcze\u015bniej. Poniewa\u017c ten ostatni jest wykonywalnym plikiem JAR, mo\u017cesz go uruchomi\u0107 przez podw\u00f3jne klikni\u0119cie lub za pomoc\u0105 nast\u0119puj\u0105cego polecenia: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>\u015bcie\u017cka<\/em>\/<em>do<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>Dop\u00f3ki testujesz, prawdopodobnie b\u0119dziesz wola\u0142 uruchamia\u0107 Sweet Home 3D za pomoc\u0105 tego polecenia, aby m\u00f3c odczyta\u0107 w konsoli \u015blad stosu wyj\u0105tk\u00f3w zg\u0142aszanych podczas wykonywania twojej wtyczki.<\/p>\n\n<p>Po uruchomieniu Sweet Home 3D zobaczysz nowe menu i jego pozycj\u0119, jak pokazano na rysunku 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>Rysunek 7. Menu wtyczki <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Je\u015bli wybierzesz now\u0105 pozycj\u0119 menu dla <a href=\"\/examples\/userGuideExample.sh3d\">przyk\u0142adowego domu<\/a> utworzonego w <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/pl\/przewodnik-uzytkownika-sweet-home-3d\/\" data-type=\"page\" data-id=\"424\">przewodniku u\u017cytkownika<\/a>, otrzymasz nast\u0119puj\u0105cy wynik:<\/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>Rysunek 8. Wtyczka w dzia\u0142aniu <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"debugowanie-wtyczki\">Debugowanie wtyczki<\/h3>\n<p>Je\u015bli potrzebujesz debugowa\u0107 swoj\u0105 wtyczk\u0119 z Eclipse, utw\u00f3rz konfiguracj\u0119 debugowania wykonuj\u0105c nast\u0119puj\u0105ce kroki:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Wybierz <i>Run &gt; Debug Configurations&#8230;<\/i> z menu, wybierz pozycj\u0119 <i>Java Application<\/i> z listy dost\u0119pnych konfiguracji w oknie dialogowym \n          <i>Debug configurations<\/i>, kliknij przycisk <i>New <\/i>w lewym g\u00f3rnym rogu i wprowad\u017a nazw\u0119 dla konfiguracji.<\/li>\n\n\n\n<li>Kliknij przycisk <i>Szukaj&#8230;<\/i> po prawej stronie pola tekstowego <i>Klasa g\u0142\u00f3wna<\/i> i kliknij dwukrotnie klas\u0119 <i>SweetHome3DBootstrap<\/i> <br\/> spo\u015br\u00f3d proponowanych klas.<\/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>Rysunek 9. Tworzenie konfiguracji debugowania <\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Kliknij zak\u0142adk\u0119 <em>Classpath<\/em>, wybierz element podrz\u0119dny <em>VolumePlugin (default classpath)<\/em> elementu <em>User Entries<\/em> na li\u015bcie <em>Classpath<\/em> i kliknij przycisk <em>Remove<\/em>.<\/li>\n\n\n\n<li>Kliknij element <em>User Entries<\/em> na li\u015bcie <em>Classpath<\/em>, kliknij przycisk <em>Add JARs&#8230;<\/em>, wybierz element SweetHome3D-7.5.jar i potwierd\u017a sw\u00f3j wyb\u00f3r.<\/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>Rysunek 10. Ustawianie classpath konfiguracji debugowania <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Wybierz zak\u0142adk\u0119 <em>Source<\/em>, kliknij przycisk <em>Add\u2026<\/em>, kliknij dwukrotnie element <em>Java Project<\/em> w oknie dialogowym <em>Add Source<\/em>, wybierz element <em>VolumePlugin<\/em> w oknie popup <em>Project Selection<\/em> i potwierd\u017a sw\u00f3j wyb\u00f3r.<\/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>Rysunek 11. Ustawianie \u015bcie\u017cki \u017ar\u00f3d\u0142owej konfiguracji debugowania <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Na koniec kliknij przycisk <i>Debug<\/i>, \u017ceby uruchomi\u0107 Sweet Home 3D w trybie debugowania. Gdy program ju\u017c dzia\u0142a, otw\u00f3rz plik <g id=\"gid_1\">VolumePlugin.java<\/g>, <x id=\"gid_2\"><\/x> ustaw punkt przerwania w metodzie <g id=\"gid_3\">execute<\/g> i wybierz <g id=\"gid_4\">Narz\u0119dzia <x id=\"gid_5\"><\/x> Oblicz obj\u0119to\u015b\u0107<\/g> z menu Sweet Home 3D. Eclipse zatrzyma si\u0119 na wybranym \n punkcie przerwania, \u017ceby umo\u017cliwi\u0107 ci wykonywanie programu krok po kroku i sprawdzanie warto\u015bci zmiennych.  <\/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>Rysunek 12. Perspektywa debugowania 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>Za ka\u017cdym razem, gdy modyfikujesz kod \u017ar\u00f3d\u0142owy swojej wtyczki, nie zapomnij <a href=\"#creatingPluginJAR\">wygenerowa\u0107 pliku JAR wtyczki<\/a> przed uruchomieniem utworzonej konfiguracji debugowania. \u017beby przyspieszy\u0107 proces eksportu JAR w eclipse, przejd\u017a do drugiego kroku kreatora eksportu JAR i wybierz opcj\u0119 <em>Zapisz opis tego pliku JAR w obszarze roboczym<\/em>. To doda nowy element w projekcie z kontekstowym elementem menu <em>Utw\u00f3rz JAR<\/em>.  <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"wdrazanie-wtyczki\">Wdra\u017canie wtyczki<\/h3>\n<p>Gdy b\u0119dzie gotowa, twoja wtyczka mo\u017ce zosta\u0107 wdro\u017cona na komputerach innych u\u017cytkownik\u00f3w Sweet Home 3D przez zwyk\u0142e skopiowanie jej do ich <a href=\"#creatingPluginJAR\">folderu wtyczek<\/a>. Od wersji 1.6 plik wtyczki mo\u017ce by\u0107 r\u00f3wnie\u017c zainstalowany w folderze wtyczek Sweet Home 3D przez dwukrotne klikni\u0119cie na nim, je\u015bli jego rozszerzenie to SH3P (po prostu zmie\u0144 rozszerzenie pliku z .zip na .sh3p). Je\u015bli dwukrotne klikni\u0119cie na plik .sh3p nie uruchamia Sweet Home 3D (najcz\u0119\u015bciej pod Linuksem), mo\u017cesz r\u00f3wnie\u017c zainstalowa\u0107 wtyczk\u0119 za pomoc\u0105 nast\u0119puj\u0105cego polecenia w oknie <em>Terminal<\/em> (gdzie    <code>SweetHome3D<\/code>  to nazwa pliku wykonywalnego dostarczonego z instalatorami Sweet Home 3D):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/\u015bcie\u017cka\/do\/<\/em>SweetHome3D <em>\/\u015bcie\u017cka\/do\/<\/em>plugin.sh3p<\/pre>\n\n<p>\u017beby przesta\u0107 u\u017cywa\u0107 wtyczki, usu\u0144 jej plik z folderu wtyczek i uruchom ponownie 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>Je\u015bli chcesz, \u017ceby twoja wtyczka mog\u0142a dzia\u0142a\u0107 ze wszystkimi <a href=\"http:\/\/download\">instalatorami Sweet Home 3D<\/a> dost\u0119pnymi na tej stronie internetowej, zadbaj o zachowanie zgodno\u015bci z Java 5, wybieraj\u0105c <code>1.5<\/code> w polu <em>Poziom zgodno\u015bci kompilatora<\/em> dost\u0119pnym w sekcji <em>Java Compiler<\/em> okna dialogowego pokazywanego przez element menu <em>Project &gt; Properties<\/em> w Eclipse.<br\/>Je\u015bli u\u017cywasz wersji kompilatora Java, w kt\u00f3rej zgodno\u015b\u0107 z Java 1.5 nie jest ju\u017c dost\u0119pna, spr\u00f3buj celowa\u0107 przynajmniej w Java 1.8 nadal u\u017cywan\u0105 w najnowszych wersjach Sweet Home 3D i ustaw <code>javaMinimumVersion<\/code> w pliku <code>ApplicationPlugin.properties<\/code> swojej wtyczki odpowiednio.<\/p>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"dalsze-kroki\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Dalsze kroki<\/h2>\n<p>Programowanie pierwszej wtyczki pokaza\u0142o ci og\u00f3lny obraz. Oto dodatkowe informacje, kt\u00f3re pomog\u0105 ci p\u00f3j\u015b\u0107 dalej. <\/p>\n<h3 class=\"wp-block-heading\" id=\"sweet-home-3d-api-javadoc\">Sweet home 3D API &#8211; javadoc<\/h3>\n<p>Najbardziej przydatn\u0105 dokumentacj\u0105 do tworzenia nowej wtyczki jest <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), wygenerowane narz\u0119dziem javadoc.<br\/>U\u017cywaj tylko klas z pakiet\u00f3w <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> i <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a> w swojej wtyczce, je\u015bli chcesz, \u017ceby by\u0142a zgodna z przysz\u0142ymi wersjami Sweet Home 3D. To b\u0119dzie w zupe\u0142no\u015bci wystarczaj\u0105ce do zaprogramowania dowolnej wtyczki, kt\u00f3ra pracuje na danych domu dost\u0119pnych w Sweet Home 3D.<br\/>Pakiety odpowiadaj\u0105ce innym warstwom programu s\u0105 do\u0142\u0105czone do Javadoc tylko w celach informacyjnych. Nie polegaj na ich API, poniewa\u017c mo\u017ce si\u0119 jeszcze zmieni\u0107 w przysz\u0142o\u015bci bez gwarancji zgodno\u015bci wstecznej (i tak nie zobaczysz \u017cadnego odniesienia do klasy z pakiet\u00f3w <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> czy <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a> w wymienionych wcze\u015bniej pakietach).  <\/p>\n<h3 class=\"wp-block-heading\" id=\"architektura-klas-modelu\">Architektura klas modelu<\/h3>\n<p>Sweet Home 3D opiera si\u0119 na architekturze MVC (Model View Controller), wi\u0119c zrozumienie organizacji warstwy Model jest kluczowe. Rysunek 13 (dost\u0119pny r\u00f3wnie\u017c w <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/modelClassesDiagram.png\">formacie PDF<\/a>) przedstawia prawie wszystkie klasy i interfejsy dost\u0119pne w wersji 1.5 pakietu <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a>, kt\u00f3ry odpowiada tej warstwie 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>Centraln\u0105 klas\u0105 w warstwie Model jest klasa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a> (10), abstrakcyjna klasa nadrz\u0119dna g\u0142\u00f3wnej klasy aplikacji <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>. Instancja tej klasy daje dost\u0119p do aktualnie edytowanych instancji <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) oraz do obiektu <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a> (11), kt\u00f3ry przechowuje u\u017cywan\u0105 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">jednostk\u0119 d\u0142ugo\u015bci<\/a> (12), <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">katalog mebli<\/a> (14) i <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">katalog tekstur<\/a> (15), z kt\u00f3rych u\u017cytkownik wybiera <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">elementy wyposa\u017cenia<\/a> (17) i <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">tekstury<\/a> (18).<br\/>Instancja <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) przechowuje wszystkie obiekty utworzone przez u\u017cytkownika w planie domu: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>list\u0119 obiekt\u00f3w <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a> (13), kt\u00f3re implementuj\u0105 interfejs <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16),<\/li>\n\n\n\n<li>kolekcj\u0119 obiekt\u00f3w <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a> (9),<\/li>\n\n\n\n<li>list\u0119 obiekt\u00f3w <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a> (5),<\/li>\n\n\n\n<li>kolekcj\u0119 obiekt\u00f3w <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a> (2),<\/li>\n\n\n\n<li>kolekcj\u0119 obiekt\u00f3w <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a> (3).<\/li>\n<\/ul>\n\n<p>Te obiekty implementuj\u0105 interfejs <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1), podobnie jak obiekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), kt\u00f3ry przechowuje po\u0142o\u017cenie kamery w trybie <em>Wirtualny zwiedzaj\u0105cy<\/em>. Wszystkie zewn\u0119trzne informacje zarz\u0105dzane przez obiekty Model, jak ikona i model 3D <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">elementu wyposa\u017cenia<\/a> (16) czy obraz <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">tekstury<\/a> (20), s\u0105 dost\u0119pne przez interfejs <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), implementowany przez klas\u0119 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> i inne klasy pakietu <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Ten diagram UML powinien pom\u00f3c ci zrozumie\u0107, kt\u00f3re klasy s\u0105 dost\u0119pne w modelu Sweet Home 3D i jak mo\u017cesz do nich uzyska\u0107 dost\u0119p, ale prawdopodobnie zauwa\u017cysz, \u017ce nie ma w nim konstruktor\u00f3w ani mutator\u00f3w (lub setter\u00f3w, je\u015bli wolisz). To tylko z braku miejsca, ale mo\u017cesz ich u\u017cywa\u0107 bez problemu w klasie wtyczki. Zauwa\u017c r\u00f3wnie\u017c, \u017ce ka\u017cda modyfikacja istniej\u0105cego obiektu modelu zostanie powiadomiona do wy\u015bwietlanych komponent\u00f3w za pomoc\u0105 <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>\u00f3w, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>\u00f3w (8) lub <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>\u00f3w (6), umo\u017cliwiaj\u0105c natychmiastowe odzwierciedlenie wszystkich zmian na ekranie.  <\/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>nie jest<\/strong> bezpieczny w\u0105tkowo ze wzgl\u0119d\u00f3w wydajno\u015bciowych. Wszystkie <strong>modyfikacje<\/strong> obiektu nale\u017c\u0105cego do modelu powinny by\u0107 wykonywane w Event Dispatch Thread. <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"architektura-klas-wtyczek\">Architektura klas wtyczek<\/h3>\n<p>Architektura klas wtyczek jest znacznie prostsza do zrozumienia ni\u017c architektura warstwy Model. Pakiet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> zawiera tylko trzy klasy, z kt\u00f3rych powiniene\u015b u\u017cywa\u0107 tylko klas <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> i <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, jak pokazano na rysunku 14 (r\u00f3wnie\u017c dost\u0119pnym w <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginClassesDiagram.png\">formacie 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>Instancja <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a> (1) jest tworzona przy uruchomieniu aplikacji i wyszukuje wtyczki zainstalowane w <a href=\"#creating-the-plugin-jar\">folderze wtyczek<\/a> u\u017cytkownika. Za ka\u017cdym razem, gdy edytowany jest nowy dom, ten mened\u017cer tworzy instancj\u0119 i konfiguruje obiekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> (3) dla ka\u017cdej wtyczki znalezionej przy uruchomieniu. Nast\u0119pnie wywo\u0142uje metod\u0119 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a>, \u017ceby pobra\u0107 wszystkie <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">akcje<\/a> (4), kt\u00f3re zostan\u0105 dodane jako elementy menu i\/lub przyciski paska narz\u0119dzi w oknie domu. Ka\u017cda akcja jest instancj\u0105 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, kt\u00f3ra przypomina klas\u0119 <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a> ze swoj\u0105 metod\u0105 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a> i modyfikowalnymi <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">w\u0142a\u015bciwo\u015bciami<\/a> (2).   <\/p>\n\n<p>Zauwa\u017c, \u017ce klasa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> daje ci dost\u0119p do instancji <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a> przez swoj\u0105 metod\u0119 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a>. Gdy tylko modyfikujesz dom lub jego obiekty (meble, \u015bciany&#8230;) w metodzie execute instancji <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, powiniene\u015b r\u00f3wnie\u017c wys\u0142a\u0107 obiekt <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a> do wsparcia edycji cofania zwr\u00f3conego przez metod\u0119 getUndoableEditSupport, w przeciwnym razie u\u017cytkownicy nie b\u0119d\u0105 mogli poprawnie cofn\u0105\u0107\/ponowi\u0107 wprowadzonych przez ciebie zmian. <\/p>\n<h3 class=\"wp-block-heading\" id=\"lokalizacja\">Lokalizacja<\/h3>\n<p>Je\u015bli planujesz opracowa\u0107 wtyczk\u0119 dla spo\u0142eczno\u015bci u\u017cytkownik\u00f3w Sweet Home 3D, spr\u00f3buj zlokalizowa\u0107 wy\u015bwietlane przez ni\u0105 ci\u0105gi znak\u00f3w zar\u00f3wno w nazwach akcji i menu, jak i w tworzonych oknach dialogowych (lub przynajmniej przygotuj jej lokalizacj\u0119). Dwa <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">konstruktory klasy PluginAction<\/a> pomog\u0105 ci zorganizowa\u0107 t\u0142umaczenie w\u0142a\u015bciwo\u015bci akcji za pomoc\u0105 plik\u00f3w .properties, a je\u015bli potrzebujesz przet\u0142umaczy\u0107 inne ci\u0105gi znak\u00f3w w swojej wtyczce (jak te w oknie dialogowym pokazywanym przez <a href=\"#testing-the-plugin\">testowan\u0105 wtyczk\u0119<\/a>), u\u017cyj ponownie tych plik\u00f3w .properties z klas\u0105 Java <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br\/>Je\u015bli wolisz ograniczy\u0107 liczb\u0119 plik\u00f3w properties, mo\u017cesz nawet napisa\u0107 warto\u015bci w\u0142a\u015bciwo\u015bci akcji i innych ci\u0105g\u00f3w znak\u00f3w w <a href=\"#creating-the-plugin-description-file\">pliku opisu<\/a> ApplicationPlugin.properties swojej wtyczki. <\/p>\n\n<p>Je\u015bli chcesz przyk\u0142ad, kt\u00f3ry u\u017cywa tej architektury, pobierz wtyczk\u0119 <em>Export to SH3F<\/em> dost\u0119pn\u0105 pod adresem <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a> i rozpakuj j\u0105 (ten plik wtyczki zawiera r\u00f3wnie\u017c kod \u017ar\u00f3d\u0142owy wtyczki).<br\/>Jak opisano na <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">Forum pomocy<\/a>, ta wtyczka tworzy plik SH3F, kt\u00f3ry zawiera wszystkie meble zaimportowane do katalogu mebli Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"udostepnianie-wtyczek\">Udost\u0119pnianie wtyczek<\/h3>\n<p>Mo\u017cesz publikowa\u0107 zaprogramowane przez siebie wtyczki w systemie \u015bledzenia <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">Plug-ins Contributions<\/a>, \u017ceby dzieli\u0107 si\u0119 nimi ze spo\u0142eczno\u015bci\u0105 u\u017cytkownik\u00f3w Sweet Home 3D.<br\/>Wiele funkcji mo\u017cna doda\u0107 do Sweet Home 3D dzi\u0119ki wtyczkom, od importer\u00f3w po eksportery, ale tak\u017ce wtyczki zdolne do modyfikowania danych domu, jak <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Home Rotator Plug-in<\/a> opracowana przez Michela Mbema i inne wymienione w <a href=\"\/storage\/pluginsUserGuide.pdf\">Tutorial for Plug-ins and Extensions<\/a> (PDF) napisanym przez Hansa Dirkse oraz na stronie <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/pl\/plugins-and-tools\/\" data-type=\"page\" data-id=\"437\">Plug-ins and tools<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wprowadzenie Od wersji 1.5 mo\u017cliwe jest dodawanie nowych funkcji do Sweet Home 3D za pomoc\u0105 plik\u00f3w wtyczek umieszczonych w folderze wtyczek. Pozwala to programistom Java tworzy\u0107 i rozpowszechnia\u0107 nowe funkcje dla Sweet Home 3D bez modyfikowania plik\u00f3w \u017ar\u00f3d\u0142owych bie\u017c\u0105cej wersji (co jest dobre dla zgodno\u015bci wstecznej) i bez dostarczania pe\u0142nej wersji programu (co jest korzystne [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":10517,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-10548","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/pages\/10548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/comments?post=10548"}],"version-history":[{"count":2,"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/pages\/10548\/revisions"}],"predecessor-version":[{"id":10763,"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/pages\/10548\/revisions\/10763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/media\/10517"}],"wp:attachment":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/pl\/wp-json\/wp\/v2\/media?parent=10548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}