{"id":11561,"date":"2025-11-05T16:28:15","date_gmt":"2025-11-05T16:28:15","guid":{"rendered":"https:\/\/www.sweethome3d.com\/anleitung-fuer-plug-in-entwickler\/"},"modified":"2025-12-19T10:19:36","modified_gmt":"2025-12-19T10:19:36","slug":"anleitung-fuer-plug-in-entwickler","status":"publish","type":"page","link":"https:\/\/www.sweethome3d.com\/de\/anleitung-fuer-plug-in-entwickler\/","title":{"rendered":"Anleitung f\u00fcr Plug-in-Entwickler"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einf\u00fchrung<\/h2>\n\n<p>Ab Version 1.5 ist es m\u00f6glich, <a href=\"\/\">Sweet Home 3D<\/a> mit Plug-in-Dateien, die sich in Ihrem <a href=\"#deployingPlugin\">Plug-in-Ordner<\/a> befinden, neue Funktionen hinzuzuf\u00fcgen. Dies erm\u00f6glicht es Java-Programmierern, neue Funktionen f\u00fcr <a href=\"https:\/\/www.sweethome3d.com\/de\/\">Sweet Home 3D<\/a> zu entwickeln und zu verteilen, ohne die Quelldateien der aktuellen Version zu ver\u00e4ndern (was gut f\u00fcr die Aufw\u00e4rtskompatibilit\u00e4t ist) und ohne eine Vollversion des Programms auszuliefern (was gut f\u00fcr die Liefergr\u00f6\u00dfe ist).<br\/>Dieses Dokument beschreibt die <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">Werkzeuge<\/a>, die zur Erstellung von Plug-ins ben\u00f6tigt werden, und zeigt dann, wie man ein <a href=\"#programmingPlugin\">Plug-in programmiert<\/a>, das das maximale Volumen der beweglichen M\u00f6bel berechnet, die einem Haus hinzugef\u00fcgt wurden, und gibt schlie\u00dflich einige <a href=\"#goingFurther\">zus\u00e4tzliche Informationen<\/a>, die Ihnen helfen werden, weiterzukommen. <\/p>\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 class=\"wp-block-heading\" id=\"installingTools\">Installation von Entwicklungswerkzeugen<\/h2>\n\n<p>Wenn Sweet Home 3D ein allgemeines Publikum anspricht, erfordert die Entwicklung von Plug-ins spezielle Kenntnisse, und Sie sollten wissen, wie man in <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Java<\/a> mit einer IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a> programmiert, bevor Sie fortfahren. Diese Anleitung zeigt, wie man ein Plug-in mit <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a> erstellt, aber Sie k\u00f6nnen die IDE Ihrer Wahl oder gar keine IDE verwenden. <\/p>\n\n<h3 class=\"wp-block-heading\">Eclipse herunterladen und installieren<\/h3>\n\n<p>Laden Sie zuerst Eclipse von <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a> herunter. Die Version mit dem Namen <em>Eclipse IDE for Java Developers<\/em> reicht aus, um ein Plug-in zu entwickeln, aber Sie k\u00f6nnen jede Version f\u00fcr die Java-Entwicklung herunterladen. <br\/>Nach dem Herunterladen ist die Installation von Eclipse sehr einfach: Entpacken Sie einfach das Archiv, das Sie erhalten, \u00f6ffnen Sie den Eclipse-Ordner und f\u00fchren Sie je nach System die Datei mit dem Namen aus <code>eclipse.exe<\/code>  (unter Windows),  <code>eclipse.app<\/code>  (unter Mac OS X) oder  <code>eclipse<\/code>  (unter Linux).<br\/>Beim ersten Start fordert Eclipse Sie auf, einen <em>Arbeitsbereichsordner<\/em> auszuw\u00e4hlen, in dem Plug-in-Projekte gespeichert werden.<br\/>W\u00e4hlen Sie anschlie\u00dfend <em>Datei &gt; Neu &gt; Projekt<\/em> aus dem Men\u00fc, um ein neues Projekt zu erstellen, w\u00e4hlen Sie <em>Java &gt; Java-Projekt<\/em> im <em>Assistent f\u00fcr neue Projekte<\/em>, der angezeigt wird, geben Sie VolumePlugin als Projektnamen ein und klicken Sie auf die Schaltfl\u00e4che <em>Fertigstellen<\/em>. Schlie\u00dfen Sie abschlie\u00dfend die Registerkarte <em>Willkommen<\/em>, um Ihren Arbeitsbereich wie in Abbildung 1 dargestellt zu entdecken. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"388\" height=\"315\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png\" alt=\"\" class=\"wp-image-5845 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png 388w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-300x244.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-111x90.png 111w\" data-sizes=\"(max-width: 388px) 100vw, 388px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 388px; --smush-placeholder-aspect-ratio: 388\/315;\" \/><figcaption class=\"wp-element-caption\">Abbildung 1. Eclipse-Arbeitsbereich <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Sweet Home 3D-Bibliothek herunterladen und installieren<\/h3>\n\n<p>Die Entwicklung eines Plug-ins basiert auf einigen Klassen von Sweet Home 3D, die Eclipse kennen muss, um Ihr Projekt erstellen zu k\u00f6nnen. Der einfachste Weg, Sweet Home 3D-Klassen zu Eclipse hinzuzuf\u00fcgen, ist das Herunterladen der ausf\u00fchrbaren JAR-Version von Sweet Home 3D, die unter <g id=\"gid_0\">https:\/\/sourceforge.net\/projects\/sweethome3d\/files\/SweetHome3D\/SweetHome3D-7.5\/SweetHome3D-7.5.jar\/download<\/g> verf\u00fcgbar ist. Ziehen Sie nach dem Herunterladen die Datei SweetHome3D-7.5.jar auf das <em>VolumePlugin<\/em>-Projektsymbol in der Ansicht <em>Package Explorer<\/em> von Eclipse und w\u00e4hlen Sie den Eintrag <em>Build Path &gt; Zum Build-Pfad hinzuf\u00fcgen<\/em> im Kontextmen\u00fc der Datei SweetHome3D-7.5.jar, wie in Abbildung 2 dargestellt.  <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"452\" height=\"157\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png\" alt=\"\" class=\"wp-image-5846 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png 452w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-300x104.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-259x90.png 259w\" data-sizes=\"(max-width: 452px) 100vw, 452px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 452px; --smush-placeholder-aspect-ratio: 452\/157;\" \/><figcaption class=\"wp-element-caption\">Abbildung 2. Hinzuf\u00fcgen von SweetHome3D-7.5.jar<br\/> zum Build-Pfad <\/figcaption><\/figure>\n<\/div>\n\n<h2 class=\"wp-block-heading programmingPlugin\">Programmierung eines Plug-ins<\/h2>\n\n<p>Nachdem Sie die erforderlichen Werkzeuge installiert haben, wollen wir sehen, wie Sie Ihr erstes Plug-in f\u00fcr Sweet Home 3D programmieren k\u00f6nnen.<\/p>\n\n<h3 class=\"wp-block-heading\">Erstellung der Plug-in-Klasse<\/h3>\n\n<p>Erstellen Sie zun\u00e4chst eine neue Unterklasse von com.eteks.sweethome3d.plugin.Plugin, indem Sie den Men\u00fcpunkt <em>Datei &gt; Neu &gt; Klasse<\/em> in Eclipse ausw\u00e4hlen.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"418\" height=\"509\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png\" alt=\"\" class=\"wp-image-5847 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png 418w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-246x300.png 246w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-74x90.png 74w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/509;\" \/><figcaption class=\"wp-element-caption\">Abbildung 3. Erstellung einer neuen Klasse <\/figcaption><\/figure>\n<\/div>\n\n<p>Geben Sie im Dialogfeld <em>Neue Java-Klasse<\/em> VolumePlugin als Klassennamen ein, geben Sie ein Paket ein (hier wurde das Paket com.eteks.test gew\u00e4hlt) und w\u00e4hlen Sie com.eteks.sweethome3d.plugin.Plugin als Superklasse von VolumePlugin. Klicken Sie anschlie\u00dfend auf <em>Fertigstellen<\/em>. Eclipse erstellt die Datei der neuen Klasse mit folgendem Inhalt:  <\/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>Wie Sie aus dem TODO-Kommentar erraten k\u00f6nnen, m\u00fcssen Sie nun die Implementierung der Methode getActions \u00e4ndern, um eine Plug-in-Aktion zur\u00fcckzugeben, die in der Lage ist, das Volumen der beweglichen M\u00f6bel zu berechnen. Ersetzen Sie return null; durch die folgende Anweisung: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>und w\u00e4hlen Sie <em>Edition &gt; Schnellkorrektur<\/em> aus dem Eclipse-Men\u00fc, um die fehlende Klasse VolumeAction zu erstellen, wie in Abbildung 4 dargestellt.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"615\" height=\"117\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png\" alt=\"\" class=\"wp-image-5848 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png 615w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-300x57.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-473x90.png 473w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/117;\" \/><figcaption class=\"wp-element-caption\">Abbildung 4. Verwenden der Schnellkorrektur, um eine fehlende Klasse zu generieren <\/figcaption><\/figure>\n<\/div>\n\n<p>Aktivieren Sie im Dialogfeld <em>Neue Java-Klasse<\/em>, das angezeigt wird, das Kontrollk\u00e4stchen <em>Umschlie\u00dfender Typ<\/em>, um eine innere Klasse von VolumePlugin zu erstellen, und klicken Sie auf <em>Fertigstellen<\/em>. Dadurch wird die Klasse VolumeAction erstellt, die von der Klasse com.eteks.sweethome3d.plugin.PluginAction erbt und eine leere Execute-Methode enth\u00e4lt: <\/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>Diese Methode ist diejenige, die Sweet Home 3D aufruft, wenn der Benutzer die Plug-in-Aktion startet; dies ist also der Ort, an dem Sie implementieren m\u00fcssen, wie das Volumen der M\u00f6bel berechnet und angezeigt wird:<\/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\/> \/\/ Compute the sum of the volume of the bounding box of <br\/> \/\/ each movable piece of furniture in home<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\/> \/\/ Display the result in a message box (\u00b3 is for 3 in supercript)<br\/> String message = String. <strong>format<\/strong>(<br\/> \"The maximum volume of the movable furniture in home is %.2f m\u00b3.\", <br\/> volumeInCm3 \/ 1000000);<br\/> JOptionPane. <strong>showMessageDialog<\/strong>(null, message);<br\/>  }<br\/>  }<\/pre>\n\n<p>Nachdem Sie nun festgelegt haben, was das Plug-in tun soll, m\u00fcssen Sie beschreiben, wie der Benutzer diese neue Aktion starten wird. Sie haben die Wahl zwischen dem Hinzuf\u00fcgen eines neuen <strong>Men\u00fcpunkts<\/strong> zu einem Men\u00fc und\/oder einer neuen <strong>Schaltfl\u00e4che<\/strong> zur Werkzeugleiste. Diese Wahl wird durch das Setzen der entsprechenden Eigenschaften der Plug-in-Aktion bei ihrer Erstellung getroffen. Wenn Sie beispielsweise m\u00f6chten, dass die Benutzer die Volumenaktion mit dem Men\u00fcpunkt <em>Volumen berechnen<\/em> im Men\u00fc <em>Werkzeuge<\/em> starten, f\u00fcgen Sie der VolumnAction-Klasse den folgenden Konstruktor hinzu:   <\/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\/> \/\/ Enables the action by default<br\/>           <strong>setEnabled<\/strong>(true);<br\/> }<\/pre>\n\n<p>Die Plug-in-Klasse <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> ist nun programmiert und fast bereit, als Plug-in in Sweet Home 3D zu arbeiten. Die beiden letzten Dinge, die zu tun sind, sind: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Erstellung einer <tt>ApplicationPlugin.properties<\/tt>-Beschreibungsdatei,<\/li>\n\n\n\n<li>Zusammenf\u00fcgen der Dateien in einer JAR-Datei.<br\/><\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\" id=\"creating-the-plugin-description-file\">Erstellung der Plug-in-Beschreibungsdatei<\/h3>\n\n<p>Eine <tt>ApplicationPlugin.properties<\/tt>-Datei\n beschreibt den Plug-in-Namen, seine Klasse, die Sweet Home 3D- und Java-Mindestversionen, unter denen es unterst\u00fctzt wird,\n und rechtliche Dinge. W\u00e4hlen Sie <i>Datei &gt; Neu &gt; Datei<\/i> aus dem\n Eclipse-Men\u00fc, geben Sie den Dateinamen <tt>ApplicationPlugin.properties<\/tt> ein und klicken Sie auf <i>Fertigstellen<\/i>, wie\n in Abbildung 5 dargestellt. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img decoding=\"async\" width=\"264\" height=\"384\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png\" alt=\"\" class=\"wp-image-5849 lazyload\" style=\"--smush-placeholder-width: 264px; --smush-placeholder-aspect-ratio: 264\/384;width:264px;height:auto\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png 264w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-206x300.png 206w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-62x90.png 62w\" data-sizes=\"(max-width: 264px) 100vw, 264px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><figcaption class=\"wp-element-caption\">Abbildung 5. Erstellung einer neuen Datei <\/figcaption><\/figure>\n<\/div>\n\n<p>Geben Sie dann die <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">folgende Beschreibung<\/a> in die neue Datei ein und speichern Sie sie:<\/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\n<h3 class=\"wp-block-heading\" id=\"creatingPluginJAR\">Erstellung der Plug-in-JAR<\/h3>\n\n<p>Die Plug-in-JAR enth\u00e4lt die <tt>Klassendateien<\/tt>, die aus der Kompilierung der Datei <tt>VolumePlugin.java<\/tt> erstellt wurden,\n und die Datei <tt>ApplicationPlugin.properties<\/tt>. Da Eclipse eine Java-Datei kompiliert, sobald Sie sie speichern, m\u00fcssen Sie\n nur <i>Datei &gt; Exportieren&#8230;<\/i> aus dem Men\u00fc w\u00e4hlen und <i>Java &gt; JAR-Datei<\/i> im Dialogfeld <i>Exportieren<\/i> ausw\u00e4hlen\n, das angezeigt wird. W\u00e4hlen Sie im <i>Jar-Export<\/i>-Assistenten, der wie in Abbildung 6 dargestellt erscheint, das Kontrollk\u00e4stchen des Projekts aus\n und geben Sie den Pfad einer JAR-Datei ein, die sich im Sweet Home 3D-Plug-in-Ordner befindet. Dieser entsprechende Ordner h\u00e4ngt\n von Ihrem System wie folgt ab:   <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>  unter Windows Vista \/ 7 \/ 8 \/ 10 \/ 11 ist dieser Ordner <tt>C:\\Users\\<i>Benutzer<\/i>\\AppData\\Roaming\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  unter Windows XP und fr\u00fcheren Versionen von Windows ist dieser Ordner <tt>C:\\Dokumente und Einstellungen\\<i>Benutzer<\/i>\\Anwendungsdaten\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  unter macOS ist es der Unterordner <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> Ihres\n Benutzerordners,<\/li>\n\n\n\n<li>  unter Linux und anderen Unix-Systemen ist es der Unterordner <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> Ihres Benutzerordners.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"499\" height=\"440\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport.png\" alt=\"\" class=\"wp-image-5850 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport.png 499w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport-300x265.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/jarExport-102x90.png 102w\" data-sizes=\"(max-width: 499px) 100vw, 499px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 499px; --smush-placeholder-aspect-ratio: 499\/440;\" \/><figcaption class=\"wp-element-caption\">Abbildung 6. Exportieren in eine JAR-Datei <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"testing-the-plugin\">Testen des Plug-ins<\/h3>\n\n<p>Das von Ihnen entwickelte <a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Plug-in<\/a> wird in Sweet Home 3D ausgef\u00fchrt, entweder mit der <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>-Version, der <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">Installationsprogramm<\/a>-Version oder der <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>, die Sie zuvor heruntergeladen haben. Da die letzte eine ausf\u00fchrbare JAR-Datei ist, k\u00f6nnen Sie sie durch Doppelklicken darauf oder mit dem folgenden Befehl ausf\u00fchren: <\/p>\n\n<p>Das von Ihnen entwickelte <a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Plug-in<\/a> wird in Sweet Home 3D ausgef\u00fchrt, entweder mit der <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>-Version, der <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">Installationsprogramm<\/a>-Version oder der <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>, die Sie zuvor heruntergeladen haben. Da die letzte eine ausf\u00fchrbare JAR-Datei ist, k\u00f6nnen Sie sie durch Doppelklicken darauf oder mit dem folgenden Befehl ausf\u00fchren: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>Pfad<\/em>\/<em>zu<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>Solange Sie testen, werden Sie es wahrscheinlich vorziehen, Sweet Home 3D mit diesem Befehl auszuf\u00fchren, um in der Konsole den Stack-Trace der Ausnahmen lesen zu k\u00f6nnen, die w\u00e4hrend der Ausf\u00fchrung Ihres Plug-ins ausgel\u00f6st werden.<\/p>\n\n<p>Sobald Sweet Home 3D gestartet ist, sehen Sie das neue Men\u00fc und seinen Eintrag, wie in Abbildung 7 dargestellt:<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"447\" height=\"53\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png\" alt=\"\" class=\"wp-image-5851 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png 447w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu-300x36.png 300w\" data-sizes=\"(max-width: 447px) 100vw, 447px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 447px; --smush-placeholder-aspect-ratio: 447\/53;\" \/><figcaption class=\"wp-element-caption\">Abbildung 7. Plug-in-Men\u00fc <\/figcaption><\/figure>\n<\/div>\n\n<p>Wenn Sie den neuen Men\u00fcpunkt f\u00fcr das <a href=\"\/examples\/userGuideExample.sh3d\">Beispielhaus<\/a> w\u00e4hlen, das in der <a href=\"https:\/\/www.sweethome3d.com\/de\/sweet-home-3d-benutzerhandbuch\/\" data-type=\"page\" data-id=\"424\">Bedienungsanleitung<\/a> erstellt wurde, erhalten Sie folgendes Ergebnis:<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"448\" height=\"137\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction.png\" alt=\"\" class=\"wp-image-5853 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction.png 448w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction-300x92.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginInAction-294x90.png 294w\" data-sizes=\"(max-width: 448px) 100vw, 448px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 448px; --smush-placeholder-aspect-ratio: 448\/137;\" \/><figcaption class=\"wp-element-caption\">Abbildung 8. Plug-in in Aktion <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Debuggen des Plug-ins<\/h3>\n\n<p>Wenn Sie Ihr Plug-in von Eclipse aus debuggen m\u00fcssen, erstellen Sie eine Debug-Konfiguration, indem Sie die folgenden Schritte ausf\u00fchren:<\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>W\u00e4hlen Sie <i>Ausf\u00fchren &gt; Debug-Konfigurationen&#8230;<\/i> aus dem Men\u00fc, w\u00e4hlen Sie den Eintrag <i>Java-Anwendung<\/i> in der Liste der verf\u00fcgbaren Konfigurationen des \n          <i>Debug-Konfigurationen<\/i>-Dialogfelds, klicken Sie auf die Schaltfl\u00e4che <i>Neu<\/i> oben links und geben Sie einen Namen f\u00fcr die Konfiguration ein.<\/li>\n\n\n\n<li>Klicken Sie auf die Schaltfl\u00e4che <i>Suchen&#8230;<\/i> rechts neben dem Textfeld <i>Hauptklasse<\/i> und doppelklicken Sie auf die Klasse <i>SweetHome3DBootstrap<\/i> <br\/> unter den vorgeschlagenen Klassen.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"629\" height=\"390\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration.png\" alt=\"\" class=\"wp-image-5854 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration.png 629w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration-300x186.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/debugConfiguration-145x90.png 145w\" data-sizes=\"(max-width: 629px) 100vw, 629px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 629px; --smush-placeholder-aspect-ratio: 629\/390;\" \/><figcaption class=\"wp-element-caption\"><em>Abbildung 9. Erstellung einer Debug-Konfiguration <\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Klicken Sie auf die Registerkarte <em>Classpath<\/em>, w\u00e4hlen Sie den Untereintrag <em>VolumePlugin (Standard-Classpath)<\/em> des Eintrags <em>Benutzereintr\u00e4ge<\/em> in der Liste <em>Classpath<\/em> und klicken Sie auf die Schaltfl\u00e4che <em>Entfernen<\/em>.<\/li>\n\n\n\n<li>Klicken Sie auf den Eintrag <em>Benutzereintr\u00e4ge<\/em> in der Liste <em>Classpath<\/em>, klicken Sie auf die Schaltfl\u00e4che <em>JARs hinzuf\u00fcgen&#8230;<\/em>, w\u00e4hlen Sie den Eintrag SweetHome3D-7.5.jar aus und best\u00e4tigen Sie Ihre Auswahl.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"618\" height=\"482\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration.png\" alt=\"\" class=\"wp-image-5855 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration.png 618w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration-300x234.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/classpathConfiguration-115x90.png 115w\" data-sizes=\"(max-width: 618px) 100vw, 618px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 618px; --smush-placeholder-aspect-ratio: 618\/482;\" \/><figcaption class=\"wp-element-caption\">Abbildung 10. Festlegen des Classpath der Debug-Konfiguration <\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>W\u00e4hlen Sie die Registerkarte <em>Quelle<\/em>, klicken Sie auf die Schaltfl\u00e4che <em>Hinzuf\u00fcgen&#8230;<\/em>, doppelklicken Sie auf den Eintrag <em>Java-Projekt<\/em> im Dialogfeld <em>Quelle hinzuf\u00fcgen<\/em>, w\u00e4hlen Sie den Eintrag <em>VolumePlugin<\/em> im Popup <em>Projektauswahl<\/em> und best\u00e4tigen Sie Ihre Auswahl.<\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"773\" height=\"549\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration.png\" alt=\"\" class=\"wp-image-5856 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration.png 773w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-300x213.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-127x90.png 127w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/sourcepathConfiguration-768x545.png 768w\" data-sizes=\"(max-width: 773px) 100vw, 773px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 773px; --smush-placeholder-aspect-ratio: 773\/549;\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Abbildung 11. Festlegen des Quellpfads der Debug-Konfiguration <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Klicken Sie abschlie\u00dfend auf die Schaltfl\u00e4che <i>Debuggen<\/i>, um Sweet Home 3D im Debug-Modus zu starten. Sobald das Programm l\u00e4uft, \u00f6ffnen Sie die Datei <tt>VolumePlugin.java<\/tt>, \n setzen Sie einen Haltepunkt in der Methode <i>execute<\/i> und w\u00e4hlen Sie <i>Werkzeuge &gt; Volumen berechnen<\/i> aus dem Sweet Home 3D-Men\u00fc. Eclipse stoppt am ausgew\u00e4hlten \n Haltepunkt, damit Sie das Programm Schritt f\u00fcr Schritt ausf\u00fchren und Variablenwerte \u00fcberpr\u00fcfen k\u00f6nnen.  <\/li>\n<\/ul>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"601\" height=\"398\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug.png\" alt=\"\" class=\"wp-image-5857 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug.png 601w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug-300x199.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipseDebug-136x90.png 136w\" data-sizes=\"(max-width: 601px) 100vw, 601px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 601px; --smush-placeholder-aspect-ratio: 601\/398;\" \/><figcaption class=\"wp-element-caption\">Abbildung 12. Eclipse-Debug-Perspektive <\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>Vergessen Sie nicht, jedes Mal, wenn Sie den Quellcode Ihres Plug-ins \u00e4ndern, die <a href=\"#creatingPluginJAR\">Plug-in-JAR zu generieren<\/a>, bevor Sie die von Ihnen erstellte Debug-Konfiguration starten. Um den JAR-Exportprozess in Eclipse zu beschleunigen, gehen Sie zum zweiten Schritt des JAR-Export-Assistenten und w\u00e4hlen Sie die Option <em>Beschreibung dieser JAR im Arbeitsbereich speichern<\/em>. Dadurch wird dem Projekt ein neuer Eintrag mit einem kontextbezogenen Men\u00fcpunkt <em>JAR erstellen<\/em> hinzugef\u00fcgt.  <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"deployingPlugin\">Bereitstellung des Plug-ins<\/h3>\n\n<p>Sobald Ihr Plug-in fertig ist, kann es auf dem Computer anderer Sweet Home 3D-Benutzer bereitgestellt werden, indem Sie es einfach in ihren <a href=\"#creatingPluginJAR\">Plug-in-Ordner<\/a> kopieren. Ab Version 1.6 kann eine Plug-in-Datei auch im Plug-in-Ordner von Sweet Home 3D installiert werden, indem Sie darauf doppelklicken, wenn ihre Erweiterung SH3P ist (\u00e4ndern Sie einfach die Dateierweiterung von .zip in .sh3p). Wenn ein Doppelklick auf eine .sh3p-Datei Sweet Home 3D nicht startet (h\u00f6chstwahrscheinlich unter Linux), k\u00f6nnen Sie ein Plug-in auch mit dem folgenden Befehl in einem <em>Terminal<\/em>-Fenster installieren (wobei <code>SweetHome3D<\/code> der Name der ausf\u00fchrbaren Datei ist, die mit den Sweet Home 3D-Installationsprogrammen bereitgestellt wird):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/Pfad\/zu\/<\/em>SweetHome3D <em>\/Pfad\/zu\/<\/em>plugin.sh3p<\/pre>\n\n<p>Um ein Plug-in nicht mehr zu verwenden, entfernen Sie seine Datei aus dem Plug-in-Ordner und starten Sie Sweet Home 3D neu.<\/p>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>Wenn Sie m\u00f6chten, dass Ihr Plug-in mit allen <a href=\"https:\/\/www.sweethome3d.com\/de\/download\/\">Sweet Home 3D-Installationsprogrammen<\/a>, die auf dieser Website verf\u00fcgbar sind, ausgef\u00fchrt werden kann, achten Sie darauf, dass es mit Java 5 kompatibel bleibt, indem Sie <code>1.5<\/code> im Feld <em>Compiler-Kompatibilit\u00e4tslevel<\/em> ausw\u00e4hlen, das im Abschnitt <em>Java Compiler<\/em> des Dialogfelds angezeigt wird, das durch den Men\u00fcpunkt <em>Projekt &gt; Eigenschaften<\/em> von Eclipse angezeigt wird.<br\/>Wenn Sie eine Java-Compilerversion verwenden, in der die Java 1.5-Kompatibilit\u00e4t nicht mehr verf\u00fcgbar ist, versuchen Sie, mindestens Java 1.8 zu verwenden, das noch in neueren Versionen von Sweet Home 3D verwendet wird, und setzen Sie <code>javaMinimumVersion<\/code> entsprechend in der <code>ApplicationPlugin.properties<\/code>-Datei Ihres Plug-ins.<\/p>\n<\/div>\n\n<h2 class=\"wp-block-heading\" id=\"goingFurther\">Weiterf\u00fchrende Informationen<\/h2>\n\n<p>Die Programmierung des ersten Plug-ins hat Ihnen das Gesamtbild gezeigt. Hier sind einige zus\u00e4tzliche Informationen, die Ihnen helfen werden, weiterzukommen. <\/p>\n\n<h3 class=\"wp-block-heading\">Sweet Home 3D API &#8211; Javadoc<\/h3>\n\n<p>Die n\u00fctzlichste Dokumentation zur Entwicklung eines neuen Plug-ins ist die <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), die mit dem Javadoc-Tool generiert wurde.<br\/>Verwenden Sie nur die Klassen der Pakete <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> und <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a> in Ihrem Plug-in, wenn Sie m\u00f6chten, dass es mit zuk\u00fcnftigen Versionen von Sweet Home 3D aufw\u00e4rtskompatibel ist. Dies wird weitgehend ausreichen, um jedes Plug-in zu programmieren, das mit den in Sweet Home 3D verf\u00fcgbaren Hausdaten arbeitet.<br\/>Die Pakete, die den anderen Schichten des Programms entsprechen, sind nur zu Informationszwecken in der Javadoc enthalten. Verlassen Sie sich nicht auf deren API, da sie sich in Zukunft ohne Garantie aufw\u00e4rtskompatibel \u00e4ndern kann (Sie werden ohnehin keinen Verweis auf eine Klasse der Pakete <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> oder <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a> in den oben genannten Paketen sehen).  <\/p>\n\n<h3 class=\"wp-block-heading\">Architektur der Modellklassen<\/h3>\n\n<p>Sweet Home 3D basiert auf einer MVC-Architektur (Model View Controller), daher ist es wichtig zu verstehen, wie die Modellschicht aufgebaut ist. Abbildung 13 (auch im <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/modelClassesDiagram.png\">PDF-Format<\/a> verf\u00fcgbar) zeigt fast alle Klassen und Schnittstellen, die in Version 1.5 des Pakets <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a> verf\u00fcgbar sind, das dieser Modellschicht entspricht. <\/p>\n\n<p>[uml_diagram slug=&#8220;model-classes-diagram&#8220; map_name=&#8220;model-classes-diagram&#8220; caption=&#8220;Figure 13. UML diagram of com.eteks.sweethome3d.model package&#8220; caption_small=&#8220;(click on a class to view its javadoc)&#8220;]<\/p>\n\n<p>Die zentrale Klasse in der Modellschicht ist die Klasse <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a> (10), die abstrakte Superklasse der Hauptklasse der Anwendung <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>. Die Instanz dieser Klasse erm\u00f6glicht den Zugriff auf die aktuell bearbeiteten <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a>-Instanzen (7) und auf das Objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a> (11), das die verwendete <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">L\u00e4ngeneinheit<\/a> (12), den <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">M\u00f6belkatalog<\/a> (14) und den <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">Texturenkatalog<\/a> (15) speichert, aus denen der Benutzer <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">M\u00f6belst\u00fccke<\/a> (17) und <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">Texturen<\/a> (18) ausw\u00e4hlt.<br\/>Eine <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a>-Instanz (7) speichert alle Objekte, die der Benutzer im Grundriss erstellt hat: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>die Liste der <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a>-Objekte (13), die die Schnittstelle <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16) implementieren,<\/li>\n\n\n\n<li>die Sammlung von <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a>-Objekten (9),<\/li>\n\n\n\n<li>die Liste der <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a>-Objekte (5),<\/li>\n\n\n\n<li>die Sammlung von <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a>-Objekten (2),<\/li>\n\n\n\n<li>die Sammlung von <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a>-Objekten (3).<\/li>\n<\/ul>\n\n<p>Diese Objekte implementieren die Schnittstelle <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1) sowie das Objekt <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), das die Position der Kamera im Modus <em>Virtueller Besucher<\/em> speichert. Alle externen Informationen, die von Modellobjekten verwaltet werden, wie das Symbol und das 3D-Modell eines <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">M\u00f6belst\u00fccks<\/a> (16) oder das Bild einer <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">Textur<\/a> (20), werden \u00fcber die Schnittstelle <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19) abgerufen, die von der Klasse <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> und anderen Klassen des Pakets <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a> implementiert wird. <\/p>\n\n<p>Dieses UML-Diagramm soll Ihnen helfen zu verstehen, welche Klassen im Sweet Home 3D-Modell verf\u00fcgbar sind und wie Sie auf sie zugreifen k\u00f6nnen. Sie werden jedoch wahrscheinlich feststellen, dass keine Konstruktoren und keine Mutatoren (oder Setter, wenn Sie es vorziehen) darin zitiert werden. Das liegt nur am Platzmangel, aber Sie k\u00f6nnen sie problemlos in einer Plug-in-Klasse verwenden. Beachten Sie auch, dass jede \u00c4nderung eines vorhandenen Objekts des Modells an die angezeigten Komponenten entweder mit <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>s, mit <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>s (8) oder mit <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>s (6) gemeldet wird, wodurch alle \u00c4nderungen sofort auf dem Bildschirm angezeigt werden k\u00f6nnen.  <\/p>\n\n<div class=\"wp-block-group warning-banner is-nowrap is-layout-flex wp-container-core-group-is-layout-9123dee2 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"190\" height=\"190\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281.png\" alt=\"\" class=\"wp-image-786 lazyload\" style=\"--smush-placeholder-width: 190px; --smush-placeholder-aspect-ratio: 190\/190;width:130px\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281.png 190w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/11\/Frame-281-90x90.png 90w\" data-sizes=\"(max-width: 190px) 100vw, 190px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer !h-auto wp-container-content-16d1eb73\"><\/div>\n\n\n\n<p>Das Sweet Home 3D-Modell ist aus Performancegr\u00fcnden <strong>nicht<\/strong> threadsicher. Alle <strong>\u00c4nderungen<\/strong> an einem Objekt, das zum Modell geh\u00f6rt, sollten im Event Dispatch Thread erfolgen. <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Architektur der Plug-in-Klassen<\/h3>\n\n<p>Die Architektur der Plug-in-Klassen ist viel einfacher zu verstehen als die der Modellschicht. Das Paket <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> enth\u00e4lt nur drei Klassen, von denen Sie vermutlich nur die Klassen <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> und <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a> verwenden werden, wie in Abbildung 14 (auch im <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginClassesDiagram.png\">PDF-Format<\/a> verf\u00fcgbar) dargestellt. <\/p>\n\n<p>[uml_diagram slug=&#8220;plugin-classes-diagram&#8220; map_name=&#8220;plugin-classes-diagram&#8220; caption=&#8220;Figure 14. UML diagram of com.eteks.sweethome3d.plugin package&#8220; caption_small=&#8220;(click on a class to view its javadoc)&#8220;]<\/p>\n\n<p>Eine <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a>-Instanz (1) wird beim Start der Anwendung erstellt und sucht nach den Plug-ins, die im <a href=\"#creating-the-plugin-jar\">Plug-in-Ordner<\/a> des Benutzers installiert sind. Jedes Mal, wenn ein neues Haus bearbeitet wird, instanziiert und konfiguriert dieser Manager ein <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a>-Objekt (3) f\u00fcr jedes Plug-in, das beim Start gefunden wurde. Anschlie\u00dfend ruft er die Methode <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a> auf, um alle <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">Aktionen<\/a> (4) abzurufen, die als Men\u00fcelemente und\/oder Symbolleistenschaltfl\u00e4chen im Hausfenster hinzugef\u00fcgt werden. Jede Aktion ist eine Instanz von <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, die wie die Klasse <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a> aussieht, mit ihrer Methode <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a> und ihren modifizierbaren <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">Eigenschaften<\/a> (2).   <\/p>\n\n<p>Beachten Sie, dass die Klasse <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> Ihnen \u00fcber ihre Methode <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a> Zugriff auf eine <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a>-Instanz gew\u00e4hrt. Sobald Sie ein Haus oder seine Objekte (M\u00f6bel, W\u00e4nde usw.) in der Execute-Methode einer <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>-Instanz \u00e4ndern, sollten Sie auch ein <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a>-Objekt an die Undoable-Edit-Unterst\u00fctzung senden, die von der GetUndoableEditSupport-Methode zur\u00fcckgegeben wird, da die Benutzer sonst die von Ihnen vorgenommenen \u00c4nderungen nicht korrekt r\u00fcckg\u00e4ngig machen\/wiederherstellen k\u00f6nnen. <\/p>\n\n<h3 class=\"wp-block-heading\">Lokalisierung<\/h3>\n\n<p>Wenn Sie planen, ein Plug-in f\u00fcr die Sweet Home 3D-Benutzergemeinschaft zu entwickeln, versuchen Sie, die von ihm angezeigten Zeichenketten entweder im Aktionsnamen und im Men\u00fc oder in den von Ihnen erstellten Dialogen zu lokalisieren (oder bereiten Sie zumindest seine Lokalisierung vor). Zwei <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">Konstruktoren der PluginAction<\/a>-Klasse helfen Ihnen, die \u00dcbersetzung von Aktionseigenschaften mit .properties-Dateien zu organisieren, und wenn Sie andere Zeichenketten in Ihrem Plug-in \u00fcbersetzen m\u00fcssen (wie die im Dialog, der vom <a href=\"#testing-the-plugin\">getesteten Plug-in<\/a> angezeigt wird), verwenden Sie diese .properties-Dateien mit der Java-Klasse <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a> wieder.<br\/>Wenn Sie die Anzahl der Eigenschaftsdateien begrenzen m\u00f6chten, k\u00f6nnen Sie die Werte der Aktionseigenschaften und anderer Zeichenketten sogar in die <a href=\"#creating-the-plugin-description-file\">Beschreibungsdatei<\/a> ApplicationPlugin.properties Ihres Plug-ins schreiben. <\/p>\n\n<p>Wenn Sie ein Beispiel f\u00fcr die Verwendung dieser Architektur w\u00fcnschen, laden Sie das Plug-in <em>Export to SH3F<\/em> herunter, das unter <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a> verf\u00fcgbar ist, und entpacken Sie es (diese Plug-in-Datei enth\u00e4lt auch den Quellcode des Plug-ins).<br\/>Wie im <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" target=\"_blank\" rel=\"noopener\">Hilfeforum<\/a> beschrieben, erstellt dieses Plug-in eine SH3F-Datei, die alle M\u00f6bel enth\u00e4lt, die Sie in den M\u00f6belkatalog von Sweet Home 3D importiert haben.<\/p>\n\n<h3 class=\"wp-block-heading\">Beitragen von Plug-ins<\/h3>\n\n<p>Sie k\u00f6nnen die von Ihnen programmierten Plug-ins im <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">Plug-ins Contributions<\/a> Tracking System ver\u00f6ffentlichen, um sie mit der Sweet Home 3D-Benutzergemeinschaft zu teilen.<br\/>Dank Plug-ins k\u00f6nnen Sweet Home 3D viele Funktionen hinzugef\u00fcgt werden, von Importeuren bis hin zu Exporteuren, aber auch Plug-ins, die in der Lage sind, die Daten eines Hauses zu \u00e4ndern, wie das von Michel Mbem entwickelte <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Home Rotator Plug-in<\/a> und andere, die im <a href=\"\/storage\/pluginsUserGuide.pdf\">Tutorial for Plug-ins and Extensions<\/a> (PDF) von Hans Dirkse und auf der Seite <a href=\"https:\/\/www.sweethome3d.com\/plugins\/\" data-type=\"page\" data-id=\"437\">Plug-ins and tools<\/a> aufgef\u00fchrt sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einf\u00fchrung Ab Version 1.5 ist es m\u00f6glich, Sweet Home 3D mit Plug-in-Dateien, die sich in Ihrem Plug-in-Ordner befinden, neue Funktionen hinzuzuf\u00fcgen. Dies erm\u00f6glicht es Java-Programmierern, neue Funktionen f\u00fcr Sweet Home 3D zu entwickeln und zu verteilen, ohne die Quelldateien der aktuellen Version zu ver\u00e4ndern (was gut f\u00fcr die Aufw\u00e4rtskompatibilit\u00e4t ist) und ohne eine Vollversion des<a href=\"https:\/\/www.sweethome3d.com\/de\/anleitung-fuer-plug-in-entwickler\/\">Continue reading <span class=\"sr-only\">&#8222;Anleitung f\u00fcr Plug-in-Entwickler&#8220;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":11558,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-resources.php","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-11561","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/pages\/11561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/comments?post=11561"}],"version-history":[{"count":2,"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/pages\/11561\/revisions"}],"predecessor-version":[{"id":12439,"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/pages\/11561\/revisions\/12439"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/media\/11558"}],"wp:attachment":[{"href":"https:\/\/www.sweethome3d.com\/de\/wp-json\/wp\/v2\/media?parent=11561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}