{"id":11626,"date":"2025-11-05T16:28:15","date_gmt":"2025-11-05T16:28:15","guid":{"rendered":"https:\/\/www.sweethome3d.com\/guida-per-sviluppatori-di-plug-in\/"},"modified":"2025-12-19T10:19:39","modified_gmt":"2025-12-19T10:19:39","slug":"guida-per-sviluppatori-di-plug-in","status":"publish","type":"page","link":"https:\/\/www.sweethome3d.com\/it\/guida-per-sviluppatori-di-plug-in\/","title":{"rendered":"Guida per sviluppatori di plug-in"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduzione<\/h2>\n\n<p>Dalla versione 1.5, \u00e8 possibile aggiungere nuove funzionalit\u00e0 a <a href=\"\/\">Sweet Home 3D<\/a> con file plug-in inseriti nella <a href=\"#deployingPlugin\">cartella dei plug-in<\/a>. Ci\u00f2 consente ai programmatori Java di sviluppare e distribuire nuove funzionalit\u00e0 per <a href=\"https:\/\/www.sweethome3d.com\/it\/\">Sweet Home 3D<\/a> senza modificare i file sorgente della versione corrente (il che \u00e8 positivo per la compatibilit\u00e0 verso l&#8217;alto) e senza fornire una versione completa del programma (il che \u00e8 positivo per le dimensioni della distribuzione).<br\/>Questo documento descrive gli <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">strumenti<\/a> necessari per creare plug-in, quindi mostra come <a href=\"#programmingPlugin\">programmare un plug-in<\/a> che calcola il volume massimo dei mobili mobili aggiunti a una casa e, infine, fornisce alcune <a href=\"#goingFurther\">informazioni aggiuntive<\/a> che ti aiuteranno ad andare oltre. <\/p>\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n<h2 class=\"wp-block-heading\" id=\"installingTools\">Installazione degli strumenti di sviluppo<\/h2>\n\n<p>Se Sweet Home 3D si rivolge a un pubblico generico, lo sviluppo di plug-in richiede competenze speciali ed \u00e8 necessario saper programmare in <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Java<\/a> con un IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a>, prima di procedere. Questa guida mostra come creare un plug-in con <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a>, ma puoi utilizzare l&#8217;IDE che preferisci o non utilizzarne affatto. <\/p>\n\n<h3 class=\"wp-block-heading\">Scarica e installa Eclipse<\/h3>\n\n<p>Innanzitutto, scarica Eclipse da <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a>. La versione denominata <em>Eclipse IDE for Java Developers<\/em> \u00e8 sufficiente per sviluppare un plug-in, ma puoi scaricare qualsiasi versione per lo sviluppo Java. <br\/>Una volta scaricato, l&#8217;installazione di Eclipse \u00e8 molto semplice: basta decomprimere l&#8217;archivio che otterrai, aprire la cartella eclipse e, a seconda del sistema, eseguire il file denominato  <code>eclipse.exe<\/code>  (in Windows),  <code>eclipse.app<\/code>  (in Mac OS X) o  <code>eclipse<\/code>  (in Linux).<br\/>Al primo avvio, Eclipse ti chieder\u00e0 di scegliere una cartella <em>workspace<\/em>, dove verranno memorizzati i progetti dei plug-in.<br\/>Una volta fatto, scegli <em>File &gt; Nuovo &gt; Progetto<\/em> dal menu per creare un nuovo progetto, seleziona <em>Java &gt; Progetto Java<\/em> nella procedura guidata <em>Nuovo progetto<\/em> che verr\u00e0 visualizzata, inserisci VolumePlugin come nome del progetto e fai clic sul pulsante <em>Fine<\/em>. Infine, chiudi la scheda <em>Benvenuto<\/em> per scoprire il tuo workspace come mostrato nella figura 1. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"388\" height=\"315\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png\" alt=\"\" class=\"wp-image-5845 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse.png 388w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-300x244.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/eclipse-111x90.png 111w\" data-sizes=\"(max-width: 388px) 100vw, 388px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 388px; --smush-placeholder-aspect-ratio: 388\/315;\" \/><figcaption class=\"wp-element-caption\">Figura 1. Workspace di Eclipse <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Scarica e installa la libreria Sweet Home 3D<\/h3>\n\n<p>Lo sviluppo di un plug-in si basa su alcune classi di Sweet Home 3D che Eclipse deve conoscere per poter compilare il tuo progetto. Il modo pi\u00f9 semplice per aggiungere le classi di Sweet Home 3D a Eclipse \u00e8 scaricare la versione eseguibile JAR di Sweet Home 3D disponibile all&#8217;indirizzo <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>. Una volta scaricato, trascina il file SweetHome3D-7.5.jar sull&#8217;icona del progetto <em>VolumePlugin<\/em> nella vista <em>Package Explorer<\/em> di Eclipse e scegli la voce <em>Build Path &gt; Add to Build Path<\/em> nel menu contestuale del file SweetHome3D-7.5.jar, come mostrato nella figura 2.  <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"452\" height=\"157\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png\" alt=\"\" class=\"wp-image-5846 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath.png 452w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-300x104.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/addToBuildPath-259x90.png 259w\" data-sizes=\"(max-width: 452px) 100vw, 452px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 452px; --smush-placeholder-aspect-ratio: 452\/157;\" \/><figcaption class=\"wp-element-caption\">Figura 2. Aggiunta di SweetHome3D-7.5.jar<br\/> al Build Path <\/figcaption><\/figure>\n<\/div>\n\n<h2 class=\"wp-block-heading programmingPlugin\">Programmazione di un plug-in<\/h2>\n\n<p>Ora che hai installato gli strumenti necessari, vediamo come puoi programmare il tuo primo plug-in per Sweet Home 3D.<\/p>\n\n<h3 class=\"wp-block-heading\">Creazione della classe plug-in<\/h3>\n\n<p>Innanzitutto, crea una nuova sottoclasse di com.eteks.sweethome3d.plugin.Plugin scegliendo la voce di menu <em>File &gt; Nuovo &gt; Classe<\/em> in Eclipse.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"418\" height=\"509\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png\" alt=\"\" class=\"wp-image-5847 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass.png 418w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-246x300.png 246w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newJavaClass-74x90.png 74w\" data-sizes=\"(max-width: 418px) 100vw, 418px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 418px; --smush-placeholder-aspect-ratio: 418\/509;\" \/><figcaption class=\"wp-element-caption\">Figura 3. Creazione di una nuova classe <\/figcaption><\/figure>\n<\/div>\n\n<p>Nella finestra di dialogo <em>Nuova classe Java<\/em>, inserisci VolumePlugin come nome della classe, inserisci un package (qui il package scelto \u00e8 stato com.eteks.test) e scegli com.eteks.sweethome3d.plugin.Plugin come superclasse di VolumePlugin. Una volta fatto, fai clic su <em>Fine<\/em>. Eclipse creer\u00e0 il file della nuova classe con il seguente contenuto:  <\/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>Come puoi intuire dal commento TODO, ora devi modificare l&#8217;implementazione del metodo getActions per restituire un&#8217;azione plug-in in grado di calcolare il volume dei mobili mobili. Sostituisci return null; con la seguente istruzione: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>e scegli <em>Modifica &gt; Quick Fix<\/em> dal menu di Eclipse per creare la classe mancante VolumeAction, come mostrato nella figura 4.<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"615\" height=\"117\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png\" alt=\"\" class=\"wp-image-5848 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix.png 615w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-300x57.png 300w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/quickFix-473x90.png 473w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/117;\" \/><figcaption class=\"wp-element-caption\">Figura 4. Utilizzo di Quick fix per generare una classe mancante <\/figcaption><\/figure>\n<\/div>\n\n<p>Nella finestra di dialogo <em>Nuova classe Java<\/em> che appare, seleziona la casella di controllo <em>Enclosing type<\/em> per creare una classe interna di VolumePlugin e fai clic su <em>Fine<\/em>. Questo creer\u00e0 la classe VolumeAction che eredita dalla classe com.eteks.sweethome3d.plugin.PluginAction e contiene un metodo execute vuoto: <\/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>Questo metodo \u00e8 quello che Sweet Home 3D chiamer\u00e0 quando l&#8217;utente avvier\u00e0 l&#8217;azione del plug-in; quindi questo \u00e8 il punto in cui devi implementare come calcolare il volume dei mobili e visualizzarlo:<\/p>\n\n<pre class=\"wp-block-preformatted\">  public class <g id=\"gid_0\">VolumeAction<\/g> extends <strong>PluginAction<\/strong> {  <br\/>  @Override<br\/>  public void <strong>execute<\/strong>() { <br\/>  float volumeInCm3 = 0;<br\/> \/\/ 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>Ora che hai specificato cosa vuoi che faccia il plug-in, devi descrivere come l&#8217;utente avvier\u00e0 questa nuova azione. Hai la possibilit\u00e0 di aggiungere una nuova <strong>voce di menu<\/strong> a un menu e\/o un nuovo <strong>pulsante<\/strong> alla barra degli strumenti. Questa scelta viene fatta impostando le propriet\u00e0 appropriate dell&#8217;azione del plug-in al momento della sua creazione. Ad esempio, se vuoi che gli utenti avviino l&#8217;azione del volume con la voce di menu <em>Calcola volume<\/em> che si trova nel menu <em>Strumenti<\/em>, aggiungerai il seguente costruttore alla classe VolumnAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br\/>           <strong>putPropertyValue<\/strong>(Property.NAME, \"Calcola volume\");<br\/>           <strong>putPropertyValue<\/strong>(Property.MENU, \"Strumenti\");<br\/> \/\/ Enables the action by default<br\/>           <strong>setEnabled<\/strong>(true);<br\/> }<\/pre>\n\n<p>La classe plug-in <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> \u00e8 ora programmata e quasi pronta per funzionare come plug-in in Sweet Home 3D. Le ultime due cose da fare sono: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>creare un file di descrizione <tt>ApplicationPlugin.properties<\/tt>,<\/li>\n\n\n\n<li>mettere insieme i file in un file JAR.<br\/><\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\" id=\"creating-the-plugin-description-file\">Creazione del file di descrizione del plug-in<\/h3>\n\n<p>Un file <tt>ApplicationPlugin.properties<\/tt>\n descrive il nome del plug-in, la sua classe, le versioni minime di Sweet Home 3D e Java sotto le quali \u00e8 supportato,\n e le questioni legali. Scegli <i>File &gt; Nuovo &gt; File<\/i> dal\n menu di Eclipse, inserisci il nome del file <tt>ApplicationPlugin.properties<\/tt> e fai clic su <i>Fine<\/i>, come mostrato\n nella figura 5. <\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img decoding=\"async\" width=\"264\" height=\"384\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png\" alt=\"\" class=\"wp-image-5849 lazyload\" style=\"--smush-placeholder-width: 264px; --smush-placeholder-aspect-ratio: 264\/384;width:264px;height:auto\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile.png 264w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-206x300.png 206w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/newFile-62x90.png 62w\" data-sizes=\"(max-width: 264px) 100vw, 264px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><figcaption class=\"wp-element-caption\">Figura 5. Creazione di un nuovo file <\/figcaption><\/figure>\n<\/div>\n\n<p>Quindi inserisci la <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">seguente descrizione<\/a> nel nuovo file e salvalo:<\/p>\n\n<pre class=\"wp-block-preformatted\"><strong>name<\/strong>=Volume dei mobili mobili<br\/><strong>class<\/strong>=com.eteks.test.VolumePlugin<br\/><strong>description<\/strong>=Calcola il volume dei mobili mobili in casa<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\">Creazione del JAR del plug-in<\/h3>\n\n<p>Il JAR del plug-in contiene i file <tt>class<\/tt> creati dalla compilazione del file <tt>VolumePlugin.java<\/tt>,\n e il file <tt>ApplicationPlugin.properties<\/tt>. Poich\u00e9 Eclipse compila un file Java non appena lo salvi, devi\n solo scegliere <i>File &gt; Esporta&#8230;<\/i> dal menu e selezionare <i>Java &gt; File JAR<\/i> nella finestra di dialogo <i>Esporta<\/i>\n che verr\u00e0 visualizzata. Nella procedura guidata <g id=\"gid_11\">Esportazione JAR<\/g> che appare come mostrato nella figura 6, seleziona la casella di controllo del progetto<x id=\"gid_12\"><\/x> e inserisci il percorso di un file JAR inserito nella cartella dei plug-in di Sweet Home 3D. Questa cartella appropriata dipende\n dal tuo sistema come segue:   <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>  in Windows Vista \/ 7 \/ 8 \/ 10 \/ 11, questa cartella \u00e8 <tt>C:\\Users\\<i>utente<\/i>\\AppData\\Roaming\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  in Windows XP e versioni precedenti di Windows, questa cartella \u00e8 <tt>C:\\Documents and Settings\\<i>utente<\/i>\\Application Data\\eTeks\\Sweet\n Home 3D\\plugins<\/tt>,<\/li>\n\n\n\n<li>  in macOS, \u00e8 la sottocartella <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> della tua\n cartella utente,<\/li>\n\n\n\n<li>  in Linux e altri Unix, \u00e8 la sottocartella <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> della tua cartella utente.<\/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\">Figura 6. Esportazione in un file JAR <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"testing-the-plugin\">Test del plug-in<\/h3>\n\n<p>Il <a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">plug-in<\/a> che hai sviluppato verr\u00e0 eseguito in Sweet Home 3D, sia con la versione <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, la versione <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">installers<\/a> o il file <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> che hai scaricato in precedenza. Poich\u00e9 quest&#8217;ultimo \u00e8 un JAR eseguibile, puoi eseguirlo facendo doppio clic su di esso o con il seguente comando: <\/p>\n\n<p>Il <a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">plug-in<\/a> che hai sviluppato verr\u00e0 eseguito in Sweet Home 3D, sia con la versione <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>, la versione <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" target=\"_blank\" rel=\"noopener\">installers<\/a> o il file <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> che hai scaricato in precedenza. Poich\u00e9 quest&#8217;ultimo \u00e8 un JAR eseguibile, puoi eseguirlo facendo doppio clic su di esso o con il seguente comando: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>percorso<\/em>\/<em>a<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>Finch\u00e9 sei in fase di test, probabilmente preferirai eseguire Sweet Home 3D con questo comando, per poter leggere nella console la stack trace delle eccezioni generate durante l&#8217;esecuzione del tuo plug-in.<\/p>\n\n<p>Una volta avviato Sweet Home 3D, vedrai il nuovo menu e la sua voce apparire come mostrato nella figura 7:<\/p>\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"447\" height=\"53\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png\" alt=\"\" class=\"wp-image-5851 lazyload\" data-srcset=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu.png 447w, https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginMenu-300x36.png 300w\" data-sizes=\"(max-width: 447px) 100vw, 447px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 447px; --smush-placeholder-aspect-ratio: 447\/53;\" \/><figcaption class=\"wp-element-caption\">Figura 7. Menu del plug-in <\/figcaption><\/figure>\n<\/div>\n\n<p>Se scegli la nuova voce di menu per l&#8217;<a href=\"\/examples\/userGuideExample.sh3d\">esempio di casa<\/a> creato nella <a href=\"https:\/\/www.sweethome3d.com\/it\/guida-per-lutente-di-sweet-home-3d\/\" data-type=\"page\" data-id=\"424\">guida per l&#8217;utente<\/a>, otterrai il seguente risultato:<\/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\">Figura 8. Plug-in in azione <\/figcaption><\/figure>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Debug del plug-in<\/h3>\n\n<p>Se hai bisogno di eseguire il debug del tuo plug-in da Eclipse, crea una configurazione di debug seguendo questi passaggi:<\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Scegli <i>Esegui &gt; Debug Configurations&#8230;<\/i> dal menu, seleziona la voce <i>Java Application<\/i> nell&#8217;elenco delle configurazioni disponibili della finestra di dialogo \n          <i>Debug configurations<\/i>, fai clic sul pulsante <i>New <\/i>in alto a sinistra e inserisci un nome per la configurazione.<\/li>\n\n\n\n<li>Fai clic sul pulsante <i>Search&#8230;<\/i> a destra del campo di testo <i>Main class<\/i> e fai doppio clic sulla classe <i>SweetHome3DBootstrap<\/i> <br\/> tra le classi proposte.<\/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>Figura 9. Creazione di una configurazione di debug <\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Fai clic sulla scheda <em>Classpath<\/em>, seleziona la sotto voce <em>VolumePlugin (default classpath)<\/em> della voce <em>User Entries<\/em> nell&#8217;elenco <em>Classpath<\/em> e fai clic sul pulsante <em>Remove<\/em>.<\/li>\n\n\n\n<li>Fai clic sulla voce<em> User Entries<\/em> nell&#8217;elenco <em>Classpath<\/em>, fai clic sul pulsante <em>Add JARs&#8230;<\/em>, seleziona la voce SweetHome3D-7.5.jar e conferma la tua scelta.<\/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\">Figura 10. Impostazione del classpath della configurazione di debug <\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Seleziona la scheda <em>Source<\/em>, fai clic sul pulsante <em>Add\u2026<\/em>, fai doppio clic sulla voce <em>Java Project<\/em> nella finestra di dialogo <em>Add Source<\/em>, seleziona la voce <em>VolumePlugin<\/em> nel popup <em>Project Selection<\/em> e conferma la tua scelta.<\/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>Figura 11. Impostazione del percorso di origine della configurazione di debug <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n\n<ul class=\"wp-block-list pl-14\">\n<li>Infine, fai clic sul pulsante <i>Debug<\/i> per avviare Sweet Home 3D in modalit\u00e0 debug. Una volta che il programma \u00e8 in esecuzione, apri il file <tt>VolumePlugin.java<\/tt>, \n imposta un punto di interruzione nel metodo <i>execute<\/i> e scegli <i>Strumenti &gt; Calcola volume<\/i> dal menu di Sweet Home 3D. Eclipse si fermer\u00e0 sul punto di interruzione selezionato \n per consentirti di eseguire il programma passo dopo passo e ispezionare il valore delle variabili.  <\/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\">Figura 12. Prospettiva di debug di Eclipse <\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>Ogni volta che modifichi il codice sorgente del tuo plug-in, non dimenticare di <a href=\"#creatingPluginJAR\">generare il JAR del plug-in<\/a> prima di avviare la configurazione di debug che hai creato. Per velocizzare il processo di esportazione JAR in Eclipse, vai al secondo passaggio della procedura guidata di esportazione JAR e seleziona l&#8217;opzione <em>Salva la descrizione di questo JAR nel workspace<\/em>. Questo aggiunger\u00e0 una nuova voce nel progetto con una voce di menu contestuale <em>Crea JAR<\/em>.  <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\" id=\"deployingPlugin\">Distribuzione del plug-in<\/h3>\n\n<p>Una volta pronto, il tuo plug-in pu\u00f2 essere distribuito sul computer di altri utenti di Sweet Home 3D semplicemente copiandolo nella loro <a href=\"#creatingPluginJAR\">cartella dei plug-in<\/a>. Dalla versione 1.6, un file plug-in pu\u00f2 essere installato anche nella cartella dei plug-in di Sweet Home 3D facendo doppio clic su di esso, se la sua estensione \u00e8 SH3P (basta cambiare l&#8217;estensione del file da .zip a .sh3p). Se fare doppio clic su un file .sh3p non avvia Sweet Home 3D (molto probabile in Linux), puoi anche installare un plug-in con il seguente comando in una finestra <em>Terminal<\/em> (dove <code>SweetHome3D<\/code> \u00e8 il nome del file eseguibile fornito con i programmi di installazione di Sweet Home 3D):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/percorso\/a\/<\/em>SweetHome3D <em>\/percorso\/a\/<\/em>plugin.sh3p<\/pre>\n\n<p>Per smettere di usare un plug-in, rimuovi il suo file dalla cartella dei plug-in e riavvia Sweet Home 3D.<\/p>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" data-src=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679 lazyload\" style=\"--smush-placeholder-width: 21px; --smush-placeholder-aspect-ratio: 21\/21;width:21px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" \/><\/figure>\n\n\n\n<p>Se vuoi che il tuo plug-in sia in grado di funzionare con tutti i <a href=\"https:\/\/www.sweethome3d.com\/it\/download\/\">programmi di installazione di Sweet Home 3D<\/a> disponibili su questo sito web, fai attenzione a mantenerlo conforme a Java 5, selezionando <code>1.5<\/code> nel campo <em>Compiler compliance level<\/em> disponibile nella sezione <em>Java Compiler<\/em> della finestra di dialogo mostrata dalla voce di menu <em>Project &gt; Properties<\/em> di Eclipse.<br\/>Se usi una versione del compilatore Java in cui la compatibilit\u00e0 con Java 1.5 non \u00e8 pi\u00f9 disponibile, prova a puntare almeno a Java 1.8 ancora utilizzato nelle versioni recenti di Sweet Home 3D e imposta <code>javaMinimumVersion<\/code> nel file <code>ApplicationPlugin.properties<\/code> del tuo plug-in di conseguenza.<\/p>\n<\/div>\n\n<h2 class=\"wp-block-heading\" id=\"goingFurther\">Andare oltre<\/h2>\n\n<p>La programmazione del primo plug-in ti ha mostrato il quadro generale. Ecco alcune informazioni aggiuntive che ti aiuteranno ad andare oltre. <\/p>\n\n<h3 class=\"wp-block-heading\">Sweet Home 3D API &#8211; Javadoc<\/h3>\n\n<p>La documentazione pi\u00f9 utile per sviluppare un nuovo plug-in \u00e8 la <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), generata con lo strumento javadoc.<br\/>Utilizza solo le classi dei pacchetti <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> e <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a> nel tuo plug-in se desideri che sia compatibile con le versioni future di Sweet Home 3D. Questo sar\u00e0 ampiamente sufficiente per programmare qualsiasi plug-in che funzioni sui dati della casa disponibili in Sweet Home 3D.<br\/>I pacchetti corrispondenti agli altri livelli del programma sono inclusi nel Javadoc solo a scopo informativo. Non fare affidamento sulla loro API, poich\u00e9 potrebbe cambiare in futuro senza alcuna garanzia di compatibilit\u00e0 (in ogni caso non vedrai alcun riferimento a una classe dei pacchetti <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> o <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a> nei suddetti pacchetti).  <\/p>\n\n<h3 class=\"wp-block-heading\">Architettura delle classi modello<\/h3>\n\n<p>Sweet Home 3D si basa su un&#8217;architettura MVC (Model View Controller), quindi capire come \u00e8 organizzato il suo livello Model \u00e8 essenziale. La figura 13 (disponibile anche in <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/modelClassesDiagram.png\">formato PDF<\/a>) presenta quasi tutte le classi e le interfacce disponibili nella versione 1.5 del pacchetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a> che corrisponde a questo livello Model. <\/p>\n\n<p>[uml_diagram slug=&#8221;model-classes-diagram&#8221; map_name=&#8221;model-classes-diagram&#8221; caption=&#8221;Figure 13. UML diagram of com.eteks.sweethome3d.model package&#8221; caption_small=&#8221;(click on a class to view its javadoc)&#8221;]<\/p>\n\n<p>La classe centrale nel livello Model \u00e8 la classe <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a> (10), la superclasse astratta della classe principale dell&#8217;applicazione <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>. L&#8217;istanza di questa classe fornisce l&#8217;accesso alle istanze <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) attualmente modificate e all&#8217;oggetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a> (11) che memorizza l&#8217;<a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">unit\u00e0 di lunghezza<\/a> in uso (12), il <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">catalogo dei mobili<\/a> (14) e il <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">catalogo delle texture<\/a> (15) da cui l&#8217;utente sceglie i <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">mobili<\/a> (17) e le <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">texture<\/a> (18).<br\/>Un&#8217;istanza <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a> (7) memorizza tutti gli oggetti che l&#8217;utente ha creato nella planimetria della casa: <\/p>\n\n<ul class=\"wp-block-list pl-14\">\n<li>l&#8217;elenco degli oggetti <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a> (13) che implementano l&#8217;interfaccia <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16),<\/li>\n\n\n\n<li>la raccolta di oggetti <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a> (9),<\/li>\n\n\n\n<li>l&#8217;elenco degli oggetti <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a> (5),<\/li>\n\n\n\n<li>la raccolta di oggetti <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a> (2),<\/li>\n\n\n\n<li>la raccolta di oggetti <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a> (3).<\/li>\n<\/ul>\n\n<p>Questi oggetti implementano l&#8217;interfaccia <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1) cos\u00ec come l&#8217;oggetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a> (4), che memorizza la posizione della telecamera nella modalit\u00e0 <em>Visitatore virtuale<\/em>. Tutte le informazioni esterne gestite dagli oggetti Model, come l&#8217;icona e il modello 3D di un <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">mobile<\/a> (16), o l&#8217;immagine di una <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">texture<\/a> (20) sono accessibili tramite l&#8217;interfaccia <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), implementata dalla classe <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> e da altre classi del pacchetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Questo diagramma UML dovrebbe aiutarti a capire quali classi sono disponibili nel modello di Sweet Home 3D e come puoi accedervi, ma probabilmente noterai che non sono citati costruttori e mutatori (o setter, se preferisci). \u00c8 solo per mancanza di spazio, ma puoi usarli senza problemi in una classe plug-in. Nota anche che qualsiasi modifica di un oggetto esistente del modello sar\u00e0 notificata ai componenti visualizzati tramite <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>, <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a> (8) o <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a> (6), consentendo cos\u00ec a tutte le modifiche di riflettersi immediatamente sullo schermo.  <\/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>Il modello di Sweet Home 3D <strong>non \u00e8<\/strong> thread-safe per motivi di prestazioni. Tutte le <strong>modifiche<\/strong> di un oggetto appartenente al modello devono essere eseguite nell&#8217;Event Dispatch Thread. <\/p>\n<\/div>\n\n<h3 class=\"wp-block-heading\">Architettura delle classi plug-in<\/h3>\n\n<p>L&#8217;architettura delle classi plug-in \u00e8 molto pi\u00f9 semplice da capire rispetto a quella del livello Model. Il pacchetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> contiene solo tre classi tra cui dovresti usare solo le classi <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> e <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, come mostrato nella figura 14 (disponibile anche in <a href=\"https:\/\/www.sweethome3d.com\/wp-content\/uploads\/2025\/12\/pluginClassesDiagram.png\">formato PDF<\/a>). <\/p>\n\n<p>[uml_diagram slug=&#8221;plugin-classes-diagram&#8221; map_name=&#8221;plugin-classes-diagram&#8221; caption=&#8221;Figure 14. UML diagram of com.eteks.sweethome3d.plugin package&#8221; caption_small=&#8221;(click on a class to view its javadoc)&#8221;]<\/p>\n\n<p>Un&#8217;istanza di <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a> (1) viene creata all&#8217;avvio dell&#8217;applicazione e cerca i plug-in installati nella <a href=\"#creating-the-plugin-jar\">cartella dei plug-in<\/a> dell&#8217;utente. Ogni volta che viene modificata una nuova casa, questo gestore crea un&#8217;istanza e configura un oggetto <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> (3) per ogni plug-in trovato all&#8217;avvio. Quindi, chiama il metodo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a> per recuperare tutte le <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">azioni<\/a> (4) che verranno aggiunte come voci di menu e\/o pulsanti della barra degli strumenti nella finestra della casa. Ogni azione \u00e8 un&#8217;istanza di <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, che assomiglia alla classe <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a>, con il suo metodo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a> e le sue <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">propriet\u00e0<\/a> modificabili (2).   <\/p>\n\n<p>Nota che la classe <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> ti d\u00e0 accesso a un&#8217;istanza di <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a> tramite il suo metodo <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a>. Non appena modifichi una casa o i suoi oggetti (mobili, pareti&#8230;) nel metodo execute di un&#8217;istanza di <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, dovresti anche pubblicare un oggetto <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a> al supporto di modifica annullabile restituito dal metodo getUndoableEditSupport, altrimenti gli utenti non saranno in grado di annullare\/ripetere correttamente le modifiche apportate. <\/p>\n\n<h3 class=\"wp-block-heading\">Localizzazione<\/h3>\n\n<p>Se hai intenzione di sviluppare un plug-in per la comunit\u00e0 di utenti di Sweet Home 3D, prova a localizzare le stringhe che visualizza, sia nel nome delle azioni e nel menu, sia nelle finestre di dialogo che creerai (o almeno prepara la sua localizzazione). Due <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">costruttori della classe PluginAction<\/a> ti aiuteranno a organizzare la traduzione delle propriet\u00e0 delle azioni con file .properties e, se hai bisogno di tradurre altre stringhe nel tuo plug-in (come quelle nella finestra di dialogo mostrata dal <a href=\"#testing-the-plugin\">plug-in testato<\/a>), riutilizza questi file .properties con la classe Java <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br\/>Se preferisci limitare il numero di file di propriet\u00e0, potresti anche scrivere i valori delle propriet\u00e0 delle azioni e altre stringhe nel <a href=\"#creating-the-plugin-description-file\">file di descrizione<\/a> ApplicationPlugin.properties del tuo plug-in. <\/p>\n\n<p>Se vuoi un esempio che utilizzi questa architettura, scarica il plug-in <em>Export to SH3F<\/em> disponibile all&#8217;indirizzo <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a> e decomprimilo (questo file plug-in contiene anche il codice sorgente del plug-in).<br\/>Come descritto nel <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" target=\"_blank\" rel=\"noopener\">forum di aiuto<\/a>, questo plug-in crea un file SH3F che contiene tutti i mobili che hai importato nel catalogo dei mobili di Sweet Home 3D.<\/p>\n\n<h3 class=\"wp-block-heading\">Contributo di plug-in<\/h3>\n\n<p>Puoi pubblicare i plug-in che hai programmato nel sistema di tracciamento <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">Plug-ins Contributions<\/a> per condividerli con la comunit\u00e0 di utenti di Sweet Home 3D.<br\/>Molte funzionalit\u00e0 possono essere aggiunte a Sweet Home 3D grazie ai plug-in, dagli importatori agli esportatori, ma anche plug-in in grado di modificare i dati di una casa come l&#8217;<a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Home Rotator Plug-in<\/a> sviluppato da Michel Mbem e altri elencati nel <a href=\"\/storage\/pluginsUserGuide.pdf\">Tutorial for Plug-ins and Extensions<\/a> (PDF) scritto da Hans Dirkse e nella pagina <a href=\"https:\/\/www.sweethome3d.com\/plugins\/\" data-type=\"page\" data-id=\"437\">Plug-ins and tools<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduzione Dalla versione 1.5, \u00e8 possibile aggiungere nuove funzionalit\u00e0 a Sweet Home 3D con file plug-in inseriti nella cartella dei plug-in. Ci\u00f2 consente ai programmatori Java di sviluppare e distribuire nuove funzionalit\u00e0 per Sweet Home 3D senza modificare i file sorgente della versione corrente (il che \u00e8 positivo per la compatibilit\u00e0 verso l&#8217;alto) e senza<a href=\"https:\/\/www.sweethome3d.com\/it\/guida-per-sviluppatori-di-plug-in\/\">Continue reading <span class=\"sr-only\">&#8220;Guida per sviluppatori di plug-in&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":11618,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-resources.php","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-11626","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/pages\/11626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/comments?post=11626"}],"version-history":[{"count":2,"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/pages\/11626\/revisions"}],"predecessor-version":[{"id":12442,"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/pages\/11626\/revisions\/12442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/media\/11618"}],"wp:attachment":[{"href":"https:\/\/www.sweethome3d.com\/it\/wp-json\/wp\/v2\/media?parent=11626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}