{"id":10642,"date":"2025-10-01T14:53:41","date_gmt":"2025-10-01T14:53:41","guid":{"rendered":"https:\/\/wp-test-1.sweethome3d.eu\/guide-for-insticksmodulsutvecklare\/"},"modified":"2025-11-03T18:06:16","modified_gmt":"2025-11-03T18:06:16","slug":"guide-for-insticksmodulsutvecklare","status":"publish","type":"page","link":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/guide-for-insticksmodulsutvecklare\/","title":{"rendered":"Guide f\u00f6r insticksmodulsutvecklare"},"content":{"rendered":"<ul class=\"simpletoc-list\">\n<li><a href=\"#introduktion\">Introduktion<\/a>\n\n<\/li>\n<li><a href=\"#installera-utvecklingsverktyg\">Installera utvecklingsverktyg<\/a>\n\n\n<\/li>\n\n<li><a href=\"#programmera-en-insticksmodul\">Programmera en insticksmodul<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<li><a href=\"#ga-vidare\">G\u00e5 vidare<\/a>\n\n\n<\/li>\n\n<\/li>\n\n<\/li>\n\n<\/li>\n<\/li>\n<\/ul>\n<\/li><\/ul><h2 class=\"wp-block-heading\" id=\"introduktion\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Introduktion<\/h2>\n<p>Fr\u00e5n version 1.5 \u00e4r det m\u00f6jligt att l\u00e4gga till nya funktioner i <a href=\"\/\">Sweet Home 3D<\/a> med insticksmodulfiler som placeras i din <a href=\"#deployingPlugin\">insticksmodulsmapp<\/a>. Detta g\u00f6r det m\u00f6jligt f\u00f6r Java-programmerare att utveckla och distribuera nya funktioner f\u00f6r Sweet Home 3D utan att \u00e4ndra k\u00e4llfilerna i den aktuella versionen (vilket \u00e4r bra f\u00f6r upp\u00e5tkompatibilitet) och utan att leverera en fullst\u00e4ndig version av programmet (vilket \u00e4r bra f\u00f6r leveransstorleken).<br \/>Detta dokument beskriver <a href=\"#installingTools\" data-type=\"internal\" data-id=\"#installingTools\">verktygen<\/a> som kr\u00e4vs f\u00f6r att skapa insticksmoduler, visar sedan hur man <a href=\"#programmingPlugin\">programmerar en insticksmodul<\/a> som ber\u00e4knar maxvolymen av de flyttbara m\u00f6blerna som lagts till i ett hem, och ger slutligen <a href=\"#goingFurther\">ytterligare information<\/a> som hj\u00e4lper dig att g\u00e5 vidare. <\/p>\n<h2 class=\"wp-block-heading\" id=\"installera-utvecklingsverktyg\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Installera utvecklingsverktyg<\/h2>\n<p>\u00c4ven om Sweet Home 3D riktar sig till en bred publik kr\u00e4ver utveckling av insticksmoduler s\u00e4rskilda kunskaper, och du b\u00f6r kunna programmera i <a href=\"https:\/\/java.sun.com\" target=\"_blank\" rel=\"noopener\">Java<\/a> med en IDE<a href=\"https:\/\/ant.apache.org\/\" target=\"_blank\" rel=\"noopener\"><\/a> innan du g\u00e5r vidare. Denna guide visar hur man bygger en insticksmodul med <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">Eclipse<\/a>, men du kan anv\u00e4nda valfri IDE eller ingen IDE alls. <\/p>\n<h3 class=\"wp-block-heading\" id=\"ladda-ner-och-installera-eclipse\">Ladda ner och installera Eclipse<\/h3>\n<p>Ladda f\u00f6rst ner Eclipse fr\u00e5n <a href=\"https:\/\/www.eclipse.org\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.eclipse.org\/<\/a>. Versionen som kallas <em>Eclipse IDE for Java Developers<\/em> r\u00e4cker f\u00f6r att utveckla en insticksmodul, men du kan ladda ner vilken version som helst f\u00f6r Java-utveckling. <br \/>N\u00e4r du har laddat ner \u00e4r det mycket enkelt att installera Eclipse: packa bara upp arkivet du f\u00e5r, \u00f6ppna Eclipse-mappen och beroende p\u00e5 ditt system, k\u00f6r filen som heter  <code>eclipse.exe<\/code>  (i Windows),  <code>eclipse.app<\/code>  (i Mac OS X) eller  <code>eclipse<\/code>  (i Linux).<br \/>Vid f\u00f6rsta k\u00f6rningen kommer Eclipse att be dig v\u00e4lja en <em>workspace<\/em>-mapp d\u00e4r insticksmodulsprojekt kommer att lagras.<br \/>N\u00e4r det \u00e4r klart, v\u00e4lj <em>File &gt; New &gt; Project<\/em> fr\u00e5n menyn f\u00f6r att skapa ett nytt projekt, v\u00e4lj <em>Java &gt; Java project<\/em> i guiden <em>New project<\/em> som visas, ange VolumePlugin som projektnamn och klicka p\u00e5 knappen <em>Finish<\/em>. St\u00e4ng slutligen fliken <em>Welcome<\/em> f\u00f6r att uppt\u00e4cka din workspace som visas i figur 1. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"315\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse.png\" alt=\"Guide f&#xF6;r insticksmodulsutvecklare\" class=\"wp-image-5073\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse.png 388w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse-360x292.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipse-160x130.png 160w\" sizes=\"auto, (max-width: 388px) 100vw, 388px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 1. Eclipse workspace <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"ladda-ner-och-installera-sweet-home-3dbiblioteket\">Ladda ner och installera Sweet Home 3D-biblioteket<\/h3>\n<p>Utvecklingen av en insticksmodul baseras p\u00e5 vissa klasser i Sweet Home 3D som Eclipse m\u00e5ste k\u00e4nna till f\u00f6r att kunna bygga ditt projekt. Det enklaste s\u00e4ttet att l\u00e4gga till Sweet Home 3D-klasser i Eclipse \u00e4r att ladda ner JAR-k\u00f6rbar version av Sweet Home 3D som finns p\u00e5 <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>. N\u00e4r den har laddats ner, dra och sl\u00e4pp filen SweetHome3D-7.5.jar p\u00e5 ikonen f\u00f6r projektet <em>VolumePlugin<\/em> i vyn <em>Package Explorer<\/em> i Eclipse, och v\u00e4lj alternativet <em>Build Path &gt; Add to Build Path<\/em> i snabbmenyn f\u00f6r filen SweetHome3D-7.5.jar, som visas i figur 2.  <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"452\" height=\"157\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath.png\" alt=\"\" class=\"wp-image-5075\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath.png 452w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-360x125.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-374x130.png 374w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/addToBuildPath-400x139.png 400w\" sizes=\"auto, (max-width: 452px) 100vw, 452px\" \/><figcaption class=\"wp-element-caption\"><em><em>Figur 2. L\u00e4gga till SweetHome3D-7.5.jar<br \/> till Build Path <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p><\/p>\n<h2 class=\"wp-block-heading\" id=\"programmera-en-insticksmodul\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">Programmera en insticksmodul<\/h2>\n<p>Nu n\u00e4r du har installerat de n\u00f6dv\u00e4ndiga verktygen, l\u00e5t oss se hur du kan programmera din f\u00f6rsta insticksmodul f\u00f6r Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"skapa-insticksmodulklassen\">Skapa insticksmodulklassen<\/h3>\n<p>Skapa f\u00f6rst en ny underklass av com.eteks.sweethome3d.plugin.Plugin genom att v\u00e4lja menyalternativet <em>File &gt; New &gt; Class<\/em> i Eclipse.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"418\" height=\"509\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass.png\" alt=\"\" class=\"wp-image-5076\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass.png 418w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-296x360.png 296w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-107x130.png 107w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newJavaClass-400x487.png 400w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Figur 3. Skapa en ny klass <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<p>I dialogrutan <em>New Java Class<\/em>, ange VolumePlugin som klassnamn, ange ett paket (h\u00e4r valdes paketet com.eteks.test), och v\u00e4lj com.eteks.sweethome3d.plugin.Plugin som superklassen f\u00f6r VolumePlugin. N\u00e4r det \u00e4r klart, klicka p\u00e5 <em>Finish<\/em>. Eclipse kommer att skapa filen f\u00f6r den nya klassen med f\u00f6ljande inneh\u00e5ll:  <\/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>Som du kan gissa fr\u00e5n TODO-kommentaren m\u00e5ste du nu \u00e4ndra implementeringen av getActions-metoden f\u00f6r att returnera en insticksmoduls\u00e5tg\u00e4rd som kan ber\u00e4kna volymen av de flyttbara m\u00f6blerna. Ers\u00e4tt return null; med f\u00f6ljande uttryck: <\/p>\n\n<pre class=\"wp-block-preformatted\">  return new <strong>PluginAction<\/strong> [] {new <strong>VolumeAction<\/strong>()};  <\/pre>\n\n<p>och v\u00e4lj <em>Edition &gt; Quick Fix<\/em> fr\u00e5n Eclipse-menyn f\u00f6r att skapa den saknade klassen VolumeAction, som visas i figur 4.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"615\" height=\"117\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix.png\" alt=\"\" class=\"wp-image-5077\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix.png 615w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix-360x68.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/quickFix-400x76.png 400w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 4. Anv\u00e4nd Quick fix f\u00f6r att generera en saknad klass <\/em><\/figcaption><\/figure>\n<\/div>\n<p>I dialogrutan <em>New Java Class<\/em> som visas, markera kryssrutan <em>Enclosing type<\/em> f\u00f6r att skapa en innerklass av VolumePlugin och klicka p\u00e5 <em>Finish<\/em>. Detta kommer att skapa klassen VolumeAction som \u00e4rver fr\u00e5n klassen com.eteks.sweethome3d.plugin.PluginAction och inneh\u00e5ller en tom execute-metod: <\/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>Denna metod \u00e4r den som Sweet Home 3D kommer att anropa n\u00e4r anv\u00e4ndaren startar insticksmoduls\u00e5tg\u00e4rden; detta \u00e4r allts\u00e5 platsen d\u00e4r du m\u00e5ste implementera hur volymen av m\u00f6blerna ska ber\u00e4knas och visas:<\/p>\n\n<pre class=\"wp-block-preformatted\">  public class VolumeAction extends <strong>PluginAction<\/strong> {  <br \/>  @Override<br \/>  public void <strong>execute<\/strong>() { <br \/>  float volumeInCm3 = 0;<br \/> \/\/ Ber\u00e4kna summan av volymen av den omslutande l\u00e5dan f\u00f6r <br \/> \/\/ varje flyttbar m\u00f6bel i hemmet<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 \/> \/\/ Visa resultatet i en meddelanderuta (\u00b3 \u00e4r f\u00f6r 3 i upph\u00f6jt)<br \/> String message = String. <strong>format<\/strong>(<br \/> \"Den maximala volymen av de flyttbara m\u00f6blerna i hemmet \u00e4r %.2f m\u00b3.\", <br \/> volumeInCm3 \/ 1000000);<br \/> JOptionPane. <strong>showMessageDialog<\/strong>(null, message);<br \/>  }<br \/>  }<\/pre>\n\n<p>Nu n\u00e4r du har specificerat vad du vill att insticksmodulen ska g\u00f6ra m\u00e5ste du beskriva hur anv\u00e4ndaren ska starta denna nya \u00e5tg\u00e4rd. Du har valet mellan att l\u00e4gga till ett nytt <strong>menyalternativ<\/strong> i en meny och\/eller en ny <strong>knapp<\/strong> i verktygsf\u00e4ltet. Detta val g\u00f6rs genom att st\u00e4lla in l\u00e4mpliga egenskaper f\u00f6r insticksmoduls\u00e5tg\u00e4rden vid dess skapande. Om du till exempel vill att anv\u00e4ndarna ska starta volym\u00e5tg\u00e4rden med menyalternativet <em>Ber\u00e4kna volym<\/em> som finns i menyn <em>Verktyg<\/em>, l\u00e4gger du till f\u00f6ljande konstruktor i klassen VolumeAction:   <\/p>\n\n<pre class=\"wp-block-preformatted\">  public <strong>VolumeAction<\/strong>() {<br \/>           <strong>putPropertyValue<\/strong>(Property.NAME, \"Ber\u00e4kna volym\");<br \/>           <strong>putPropertyValue<\/strong>(Property.MENU, \"Verktyg\");<br \/> \/\/ Aktiverar \u00e5tg\u00e4rden som standard<br \/>           <strong>setEnabled<\/strong>(true);<br \/> }<\/pre>\n\n<p>Klassen <a href=\"\/examples\/VolumePlugin\/VolumePlugin.java\">VolumePlugin<\/a> \u00e4r nu programmerad och n\u00e4stan redo att fungera som en insticksmodul i Sweet Home 3D. De tv\u00e5 sista sakerna att g\u00f6ra \u00e4r: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>att skapa en beskrivningsfil <tt>ApplicationPlugin.properties<\/tt><\/li>\n\n\n\n<li>att paketera filerna tillsammans i en JAR-fil.<br \/><\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\" id=\"skapa-insticksmodulens-beskrivningsfil\">Skapa insticksmodulens beskrivningsfil<\/h3>\n<p>En <tt>ApplicationPlugin.properties<\/tt>-fil\n beskriver insticksmodulens namn, dess klass, de minimiversioner av Sweet Home 3D och Java som den st\u00f6der,\n och juridisk information. V\u00e4lj <i>File &gt; New &gt; File<\/i> fr\u00e5n\n Eclipse-menyn, ange filnamnet <tt>ApplicationPlugin.properties<\/tt> och klicka p\u00e5 <i>Finish<\/i>, som visas\n i figur 5. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"264\" height=\"384\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile.png\" alt=\"\" class=\"wp-image-5079\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile.png 264w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile-248x360.png 248w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/newFile-89x130.png 89w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 5. Skapa en ny fil <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Ange sedan <a href=\"\/examples\/VolumePlugin\/ApplicationPlugin.properties\">f\u00f6ljande beskrivning<\/a> i den nya filen och spara den:<\/p>\n\n<pre class=\"wp-block-preformatted\"><strong>name<\/strong>=Volym f\u00f6r flyttbara m\u00f6bler<br \/><strong>class<\/strong>=com.eteks.test.VolumePlugin<br \/><strong>description<\/strong>=Ber\u00e4knar volymen av de flyttbara m\u00f6blerna i hemmet<br \/><strong>version<\/strong>=1.0<br \/><strong>license<\/strong>=GNU GPL<br \/><strong>provider<\/strong>=(C) Upphovsr\u00e4tt 2024 Space Mushrooms<br \/><strong>applicationMinimumVersion<\/strong>=1.5<br \/><strong>javaMinimumVersion<\/strong>=1.5<\/pre>\n<h3 class=\"wp-block-heading\" id=\"skapa-insticksmodulens-jar\">Skapa insticksmodulens JAR<\/h3>\n<p>Insticksmodulens JAR inneh\u00e5ller <tt>klass<\/tt>-filerna som skapats fr\u00e5n kompileringen av <tt>VolumePlugin.java<\/tt>-filen,\n och <tt>ApplicationPlugin.properties<\/tt>-filen. Eftersom Eclipse kompilerar en Java-fil s\u00e5 snart du sparar den\n beh\u00f6ver du bara v\u00e4lja <i>File &gt; Export&#8230;<\/i> fr\u00e5n menyn och v\u00e4lja <i>Java &gt; JAR file<\/i> i dialogrutan <i>Export<\/i>\n som visas. I guiden <i>Jar Export<\/i> som visas som i figur 6, markera projektets kryssruta\n och ange s\u00f6kv\u00e4gen till en JAR-fil placerad i Sweet Home 3D:s insticksmodulsmapp. Denna l\u00e4mpliga mapp beror\n p\u00e5 ditt system enligt f\u00f6ljande:   <\/p>\n\n<ul class=\"wp-block-list\">\n<li>  under Windows Vista \/ 7 \/ 8 \/ 10 \/ 11 \u00e4r denna mapp <tt>C:Users<i>anv\u00e4ndare<\/i>AppDataRoamingeTeksSweet\n Home 3Dplugins<\/tt>,<\/li>\n\n\n\n<li>  under Windows XP och tidigare versioner av Windows \u00e4r denna mapp <tt>C:Documents and Settings<i>anv\u00e4ndare<\/i>Application DataeTeksSweet\n Home 3Dplugins<\/tt>,<\/li>\n\n\n\n<li>  under macOS \u00e4r det undermappen <tt>Library\/Application Support\/eTeks\/Sweet Home 3D\/<\/tt><tt>plugins<\/tt> i din\n anv\u00e4ndarmapp,<\/li>\n\n\n\n<li>  under Linux och andra Unix \u00e4r det undermappen <tt>.eteks\/sweethome3d\/<\/tt><tt>plugins<\/tt> i din anv\u00e4ndarmapp.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"499\" height=\"440\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport.png\" alt=\"\" class=\"wp-image-5081\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport.png 499w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-360x317.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-147x130.png 147w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/jarExport-400x353.png 400w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><figcaption class=\"wp-element-caption\"><em><em>Figur 6. Exportera till en JAR-fil <\/em><\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"testa-insticksmodulen\">Testa insticksmodulen<\/h3>\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Insticksmodulen<\/a> du utvecklat kommer att k\u00f6ras i Sweet Home 3D, antingen med <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>-versionen, <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">installerare<\/a>-versionen, eller <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> som du laddade ner tidigare. Eftersom den senare \u00e4r en k\u00f6rbar JAR kan du k\u00f6ra den genom att dubbelklicka p\u00e5 den eller med f\u00f6ljande kommando: <\/p>\n\n<p><a href=\"\/examples\/VolumePlugin\/VolumePlugin.jar\">Insticksmodulen<\/a> du utvecklat kommer att k\u00f6ras i Sweet Home 3D, antingen med <a href=\"\/storage\/SweetHome3D.jnlp\">Java Web Start<\/a>-versionen, <a href=\"https:\/\/downloads.sourceforge.net\/sweethome3d\/\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">installerare<\/a>-versionen, eller <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> som du laddade ner tidigare. Eftersom den senare \u00e4r en k\u00f6rbar JAR kan du k\u00f6ra den genom att dubbelklicka p\u00e5 den eller med f\u00f6ljande kommando: <\/p>\n\n<pre class=\"wp-block-preformatted\">java -jar \/<em>s\u00f6kv\u00e4g<\/em>\/<em>till<\/em>\/SweetHome3D-7.5.jar<\/pre>\n\n<p>S\u00e5 l\u00e4nge du testar kommer du f\u00f6rmodligen f\u00f6redra att k\u00f6ra Sweet Home 3D med detta kommando f\u00f6r att kunna l\u00e4sa stacksp\u00e5rningen av undantagen som kastas under k\u00f6rningen av din insticksmodul i konsolen.<\/p>\n\n<p>N\u00e4r Sweet Home 3D har startats kommer du att se den nya menyn och dess alternativ visas som i figur 7:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"447\" height=\"53\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu.png\" alt=\"\" class=\"wp-image-5082\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu.png 447w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu-360x43.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginMenu-400x47.png 400w\" sizes=\"auto, (max-width: 447px) 100vw, 447px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 7. Insticksmodulsmeny <\/em><\/figcaption><\/figure>\n<\/div>\n<p>Om du v\u00e4ljer det nya menyalternativet f\u00f6r <a href=\"\/examples\/userGuideExample.sh3d\">hemexemplet<\/a> som skapats i <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/sv\/sweet-home-3d-anvandarguide\/\" data-type=\"page\" data-id=\"424\">anv\u00e4ndarguiden<\/a> f\u00e5r du f\u00f6ljande resultat:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"137\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction.png\" alt=\"\" class=\"wp-image-5084\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction.png 448w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-360x110.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-425x130.png 425w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginInAction-400x122.png 400w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 8. Insticksmodul i aktion <\/em><\/figcaption><\/figure>\n<\/div><h3 class=\"wp-block-heading\" id=\"felsoka-insticksmodulen\">Fels\u00f6ka insticksmodulen<\/h3>\n<p>Om du beh\u00f6ver fels\u00f6ka din insticksmodul fr\u00e5n Eclipse, skapa en fels\u00f6kningskonfiguration genom att f\u00f6lja dessa steg:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>V\u00e4lj <i>Run &gt; Debug Configurations&#8230;<\/i> fr\u00e5n menyn, v\u00e4lj alternativet <i>Java Application<\/i> i listan \u00f6ver tillg\u00e4ngliga konfigurationer i dialogrutan \n          <i>Debug configurations<\/i>, klicka p\u00e5 knappen <i>New <\/i> l\u00e4ngst upp till v\u00e4nster och ange ett namn f\u00f6r konfigurationen.<\/li>\n\n\n\n<li>Klicka p\u00e5 knappen <i>Search&#8230;<\/i> till h\u00f6ger om textf\u00e4ltet <i>Main class<\/i> och dubbelklicka p\u00e5 klassen <i>SweetHome3DBootstrap<\/i> <br \/> bland de f\u00f6reslagna klasserna.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"390\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration.png\" alt=\"\" class=\"wp-image-5085\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration.png 629w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-360x223.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-210x130.png 210w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/debugConfiguration-400x248.png 400w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><figcaption class=\"wp-element-caption\"><em>Figur 9. Skapa en fels\u00f6kningskonfiguration <\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Klicka p\u00e5 fliken <em>Classpath<\/em>, v\u00e4lj underalternativet <em>VolumePlugin (default classpath)<\/em> f\u00f6r alternativet <em>User Entries<\/em> i listan <em>Classpath<\/em> och klicka p\u00e5 knappen <em>Remove<\/em>.<\/li>\n\n\n\n<li>Klicka p\u00e5 alternativet<em> User Entries<\/em> i listan <em>Classpath<\/em>, klicka p\u00e5 knappen <em>Add JARs&#8230;<\/em>, v\u00e4lj alternativet SweetHome3D-7.5.jar och bekr\u00e4fta ditt val.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"482\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration.png\" alt=\"\" class=\"wp-image-5086\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration.png 618w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-360x281.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-167x130.png 167w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/classpathConfiguration-400x312.png 400w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><figcaption class=\"wp-element-caption\"><em><em>Figur 10. St\u00e4lla in classpath f\u00f6r fels\u00f6kningskonfigurationen <\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>V\u00e4lj fliken <em>Source<\/em>, klicka p\u00e5 knappen <em>Add\u2026<\/em>, dubbelklicka p\u00e5 alternativet <em>Java Project<\/em> i dialogrutan <em>Add Source<\/em>, v\u00e4lj alternativet <em>VolumePlugin<\/em> i popup-rutan <em>Project Selection<\/em> och bekr\u00e4fta ditt val.<\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"773\" height=\"549\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration.png\" alt=\"\" class=\"wp-image-5087\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration.png 773w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-360x256.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-183x130.png 183w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-768x545.png 768w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/sourcepathConfiguration-400x284.png 400w\" sizes=\"auto, (max-width: 773px) 100vw, 773px\" \/><figcaption class=\"wp-element-caption\"><em><em><em>Figur 11. St\u00e4lla in k\u00e4lls\u00f6kv\u00e4gen f\u00f6r fels\u00f6kningskonfigurationen <\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<ul class=\"wp-block-list\">\n<li>Slutligen, klicka p\u00e5 knappen <i>Debug<\/i> f\u00f6r att starta Sweet Home 3D i fels\u00f6kningsl\u00e4ge. N\u00e4r programmet k\u00f6rs, \u00f6ppna filen <tt>VolumePlugin.java<\/tt>,\n s\u00e4tt en brytpunkt i metoden <i>execute<\/i> och v\u00e4lj <i>Verktyg &gt; Ber\u00e4kna volym<\/i> fr\u00e5n Sweet Home 3D-menyn. Eclipse kommer att stanna vid den valda \n brytpunkten f\u00f6r att l\u00e5ta dig k\u00f6ra programmet steg f\u00f6r steg och inspektera variabelv\u00e4rden.  <\/li>\n<\/ul>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"398\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug.png\" alt=\"\" class=\"wp-image-5088\" srcset=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug.png 601w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-360x238.png 360w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-196x130.png 196w, https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/eclipseDebug-400x265.png 400w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><figcaption class=\"wp-element-caption\"><em><em><em><em>Figur 12. Eclipse fels\u00f6kningsperspektiv <\/em><\/em><\/em><\/em><\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>Varje g\u00e5ng du \u00e4ndrar k\u00e4llkoden f\u00f6r din insticksmodul, gl\u00f6m inte att <a href=\"#creatingPluginJAR\">generera insticksmodulens JAR<\/a> innan du startar fels\u00f6kningskonfigurationen du skapade. F\u00f6r att snabba upp JAR-exportprocessen i Eclipse, g\u00e5 till det andra steget i JAR-exportguiden och v\u00e4lj alternativet <em>Save the description of this JAR in the workspace<\/em>. Detta kommer att l\u00e4gga till ett nytt alternativ i projektet med ett kontextuellt menyalternativ <em>Create JAR<\/em>.  <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"distribuera-insticksmodulen\">Distribuera insticksmodulen<\/h3>\n<p>N\u00e4r den \u00e4r klar kan din insticksmodul distribueras p\u00e5 andra Sweet Home 3D-anv\u00e4ndares datorer genom att helt enkelt kopiera den till deras <a href=\"#creatingPluginJAR\">insticksmodulsmapp<\/a>. Fr\u00e5n version 1.6 kan en insticksmodulsfil ocks\u00e5 installeras i Sweet Home 3D:s insticksmodulsmapp genom att dubbelklicka p\u00e5 den om dess fil\u00e4ndelse \u00e4r SH3P (\u00e4ndra helt enkelt fil\u00e4ndelsen fr\u00e5n .zip till .sh3p). Om dubbelklickning p\u00e5 en .sh3p-fil inte startar Sweet Home 3D (mest sannolikt under Linux) kan du ocks\u00e5 installera en insticksmodul med f\u00f6ljande kommando i ett <em>Terminal<\/em>-f\u00f6nster (d\u00e4r    <code>SweetHome3D<\/code>  \u00e4r namnet p\u00e5 den k\u00f6rbara filen som medf\u00f6ljer Sweet Home 3D-installerare):<\/p>\n\n<pre class=\"wp-block-preformatted\"><em>\/s\u00f6kv\u00e4g\/till\/<\/em>SweetHome3D <em>\/s\u00f6kv\u00e4g\/till\/<\/em>plugin.sh3p<\/pre>\n\n<p>F\u00f6r att sluta anv\u00e4nda en insticksmodul, ta bort dess fil fr\u00e5n insticksmodulsmappen och starta om Sweet Home 3D.<\/p>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>Om du vill att din insticksmodul ska kunna k\u00f6ras med alla <a href=\"http:\/\/download\">Sweet Home 3D-installerare<\/a> som finns tillg\u00e4ngliga p\u00e5 denna webbplats, se till att h\u00e5lla den kompatibel med Java 5 genom att v\u00e4lja <code>1.5<\/code> i f\u00e4ltet <em>Compiler compliance level<\/em> som finns i avsnittet <em>Java Compiler<\/em> i dialogrutan som visas av menyalternativet <em>Project &gt; Properties<\/em> i Eclipse.<br \/>Om du anv\u00e4nder en Java-kompilatorversion d\u00e4r Java 1.5-kompatibilitet inte l\u00e4ngre \u00e4r tillg\u00e4nglig, f\u00f6rs\u00f6k att sikta p\u00e5 minst Java 1.8 som fortfarande anv\u00e4nds i nyare versioner av Sweet Home 3D och st\u00e4ll in <code>javaMinimumVersion<\/code> i <code>ApplicationPlugin.properties<\/code>-filen f\u00f6r din insticksmodul i enlighet med detta.<\/p>\n<\/div>\n<h2 class=\"wp-block-heading\" id=\"ga-vidare\"><img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"12\" src=\"https:\/\/www.sweethome3d.com\/images\/bullet.gif\">G\u00e5 vidare<\/h2>\n<p>Programmeringen av det f\u00f6rsta insticksprogrammet visade dig helhetsbilden. H\u00e4r \u00e4r lite ytterligare information som hj\u00e4lper dig att g\u00e5 vidare. <\/p>\n<h3 class=\"wp-block-heading\" id=\"sweet-home-3d-api-javadoc\">Sweet Home 3D API &#8211; javadoc<\/h3>\n<p>Den mest anv\u00e4ndbara dokumentationen f\u00f6r att utveckla ett nytt insticksprogram \u00e4r <a href=\"\/javadoc\/index.html\">Sweet Home 3D API<\/a> (Application Programming Interface), genererad med javadoc-verktyget.<br \/>Anv\u00e4nd endast klasserna i paketen <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> och <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/viewcontroller\/package-summary.html\">com.eteks.sweethome3d.viewcontroller<\/a> i ditt insticksprogram om du vill att det ska vara upp\u00e5tkompatibelt med framtida versioner av Sweet Home 3D. Detta kommer att vara mer \u00e4n tillr\u00e4ckligt f\u00f6r att programmera vilket insticksprogram som helst som arbetar med hemdata tillg\u00e4nglig i Sweet Home 3D.<br \/>Paketen som matchar de andra lagren i programmet \u00e4r inkluderade i Javadoc endast i informationssyfte. F\u00f6rlita dig inte p\u00e5 deras API, eftersom det fortfarande kan \u00e4ndras i framtiden utan garanti f\u00f6r upp\u00e5tkompatibilitet (du kommer \u00e4nd\u00e5 inte att se n\u00e5gon referens till en klass i paketen <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> eller <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/package-summary.html\">com.eteks.sweethome3d<\/a> i de tidigare n\u00e4mnda paketen).  <\/p>\n<h3 class=\"wp-block-heading\" id=\"arkitektur-for-modellklasser\">Arkitektur f\u00f6r modellklasser<\/h3>\n<p>Sweet Home 3D \u00e4r baserat p\u00e5 en MVC-arkitektur (Model View Controller), s\u00e5 att f\u00f6rst\u00e5 hur dess modellager \u00e4r organiserat \u00e4r v\u00e4sentligt. Figur 13 (finns \u00e4ven i <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/modelClassesDiagram.png\">PDF-format<\/a>) presenterar n\u00e4stan alla klasser och gr\u00e4nssnitt som finns tillg\u00e4ngliga i version 1.5 av paketet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/package-summary.html\">com.eteks.sweethome3d.model<\/a> som matchar detta modellager. <\/p>\n\n\n<figure class=\"aligncenter size-full uml-diagram\" id=\"uml-model-classes-diagram\">\n\t<img decoding=\"async\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/themes\/sh3d\/assets\/img\/uml\/model-classes-diagram.png\" alt=\"UML Diagram model-classes-diagram\"\n\t\tusemap=\"#model-classes-diagram\">\n\n\t<map name=\"model-classes-diagram\">\n    <area shape=\"rect\" coords=\"30,583,205,681\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"227,595,390,638\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">\n    <area shape=\"rect\" coords=\"410,594,574,635\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">\n    <area shape=\"rect\" coords=\"227,667,391,720\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCategory.html\">\n    <area shape=\"rect\" coords=\"410,666,574,719\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCategory.html\">\n    <area shape=\"rect\" coords=\"30,14,236,122\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">\n    <area shape=\"rect\" coords=\"266,14,410,115\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">\n    <area shape=\"rect\" coords=\"441,15,574,76\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">\n    <area shape=\"rect\" coords=\"441,91,574,106\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">\n    <area shape=\"rect\" coords=\"30,141,205,334\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Room.html\">\n    <area shape=\"rect\" coords=\"265,142,387,192\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextStyle.html\">\n    <area shape=\"rect\" coords=\"441,120,575,206\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Camera.html\">\n    <area shape=\"rect\" coords=\"226,243,460,379\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">\n    <area shape=\"rect\" coords=\"483,331,611,381\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionListener.html\">\n    <area shape=\"rect\" coords=\"483,397,611,449\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">\n    <area shape=\"rect\" coords=\"30,357,107,371\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeTexture.html\">\n    <area shape=\"rect\" coords=\"30,393,204,565\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.Property.html\">\n    <area shape=\"rect\" coords=\"226,409,429,452\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">\n    <area shape=\"rect\" coords=\"483,221,611,272\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionListener.html\">\n    <area shape=\"rect\" coords=\"483,286,611,315\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">\n    <area shape=\"rect\" coords=\"227,477,429,566\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">\n    <area shape=\"rect\" coords=\"452,476,610,578\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">\n    <area shape=\"rect\" coords=\"30,702,205,858\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"227,750,391,793\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">\n    <area shape=\"rect\" coords=\"410,751,574,782\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">\n    <area shape=\"rect\" coords=\"227,808,391,848\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">\n    <area shape=\"rect\" coords=\"410,808,574,881\" href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">\n<\/map>\n\t\t\t<figcaption class=\"wp-element-caption\">\n\t\t\t\t\t\t\t<em>Figure 13. UML diagram of com.eteks.sweethome3d.model package<\/em><br>\n\t\t\t\t\t\t\t\t\t\t<small><em>(click on a class to view its javadoc)<\/em><\/small>\n\t\t\t\t\t<\/figcaption>\n\t<\/figure>\n\n<p>Den centrala klassen i modellagret \u00e4r <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomeApplication.html\">HomeApplication<\/a>-klassen (10), den abstrakta superklassen f\u00f6r <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/SweetHome3D.html\">SweetHome3D<\/a>-applikationens huvudklass. Instansen av denna klass ger tillg\u00e5ng till de <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a>-instanser (7) som f\u00f6r n\u00e4rvarande redigeras, och till <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/UserPreferences.html\">UserPreferences<\/a>-objektet (11) som lagrar den <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/LengthUnit.html\">l\u00e4ngdenhet<\/a> som anv\u00e4nds (12), <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/FurnitureCatalog.html\">m\u00f6belkatalogen<\/a> (14) och <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TexturesCatalog.html\">texturkatalogen<\/a> (15) fr\u00e5n vilka anv\u00e4ndaren v\u00e4ljer <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogPieceOfFurniture.html\">m\u00f6bler<\/a> (17) och <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CatalogTexture.html\">texturer<\/a> (18).<br \/>En <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Home.html\">Home<\/a>-instans (7) lagrar alla objekt som anv\u00e4ndaren skapade i hemplanen: <\/p>\n\n<ul class=\"wp-block-list\">\n<li>listan \u00f6ver <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/HomePieceOfFurniture.html\">HomePieceOfFurniture<\/a>-objekt (13) som implementerar gr\u00e4nssnittet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">PieceOfFurniture<\/a> (16),<\/li>\n\n\n\n<li>samlingen av <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Wall<\/a>-objekt (9),<\/li>\n\n\n\n<li>listan \u00f6ver <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Wall.html\">Room<\/a>-objekt (5),<\/li>\n\n\n\n<li>samlingen av <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/DimensionLine.html\">DimensionLine<\/a>-objekt (2),<\/li>\n\n\n\n<li>samlingen av <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Label.html\">Label<\/a>-objekt (3).<\/li>\n<\/ul>\n\n<p>Dessa objekt implementerar gr\u00e4nssnittet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Selectable.html\">Selectable<\/a> (1) liksom <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/ObserverCamera.html\">ObserverCamera<\/a>-objektet (4), som lagrar kamerans position i l\u00e4get <em>Virtuell bes\u00f6kare<\/em>. All extern information som hanteras av modellobjekt, som ikonen och 3D-modellen av en <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/PieceOfFurniture.html\">m\u00f6bel<\/a> (16), eller bilden av en <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/TextureImage.html\">textur<\/a> (20) n\u00e5s genom gr\u00e4nssnittet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/Content.html\">Content<\/a> (19), implementerat av klassen <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/URLContent.html\">URLContent<\/a> och andra klasser i paketet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/tools\/package-summary.html\">com.eteks.sweethome3d.tools<\/a>. <\/p>\n\n<p>Detta UML-diagram b\u00f6r hj\u00e4lpa dig att f\u00f6rst\u00e5 vilka klasser som finns tillg\u00e4ngliga i Sweet Home 3D-modellen och hur du kan komma \u00e5t dem, men du kommer f\u00f6rmodligen att m\u00e4rka att inga konstruktorer och inga mutatorer (eller setters om du f\u00f6redrar) n\u00e4mns i det. Det \u00e4r bara p\u00e5 grund av brist p\u00e5 utrymme, men du kan anv\u00e4nda dem utan problem i en insticksprogramklass. Observera ocks\u00e5 att alla \u00e4ndringar av ett befintligt objekt i modellen kommer att meddelas till de visade komponenterna antingen med <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/beans\/PropertyChangeEvent.html\" target=\"_blank\" rel=\"noopener\">PropertyChangeEvent<\/a>s, med <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/CollectionEvent.html\">CollectionEvent<\/a>s (8) eller med <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/model\/SelectionEvent.html\">SelectionEvent<\/a>s (6), vilket g\u00f6r att alla \u00e4ndringar omedelbart \u00e5terspeglas p\u00e5 sk\u00e4rmen.  <\/p>\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-64989fb1 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"21\" height=\"21\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/09\/warning-1.gif\" alt=\"\" class=\"wp-image-4679\" style=\"width:21px\" \/><\/figure>\n\n\n\n<p>Sweet Home 3D-modellen <strong>\u00e4r inte<\/strong> tr\u00e5ds\u00e4ker av prestandask\u00e4l. Alla <strong>\u00e4ndringar<\/strong> av ett objekt som tillh\u00f6r modellen b\u00f6r g\u00f6ras i Event Dispatch Thread. <\/p>\n<\/div>\n<h3 class=\"wp-block-heading\" id=\"arkitektur-for-insticksprogramklasser\">Arkitektur f\u00f6r insticksprogramklasser<\/h3>\n<p>Arkitekturen f\u00f6r insticksprogramklasser \u00e4r mycket enklare att f\u00f6rst\u00e5 \u00e4n modelllagrets. Paketet <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/package-summary.html\">com.eteks.sweethome3d.plugin<\/a> inneh\u00e5ller endast tre klasser bland vilka du f\u00f6rv\u00e4ntas anv\u00e4nda endast klasserna <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> och <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, som visas i figur 14 (finns \u00e4ven i <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/uploads\/2025\/10\/pluginClassesDiagram.png\">PDF-format<\/a>). <\/p>\n\n\n<figure class=\"aligncenter size-full uml-diagram\" id=\"uml-plugin-classes-diagram\">\n\t<img decoding=\"async\" src=\"https:\/\/wp-test-1.sweethome3d.eu\/wp-content\/themes\/sh3d\/assets\/img\/uml\/plugin-classes-diagram.png\" alt=\"UML Diagram plugin-classes-diagram\"\n\t\tusemap=\"#plugin-classes-diagram\">\n\n\t<map name=\"plugin-classes-diagram\">\n    <area shape=\"rect\" coords=\"10,9,256,92\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">\n    <area shape=\"rect\" coords=\"11,131,257,288\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">\n    <area shape=\"rect\" coords=\"453,8,574,118\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">\n    <area shape=\"rect\" coords=\"282,133,574,289\" href=\"javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">\n<\/map>\n\t\t\t<figcaption class=\"wp-element-caption\">\n\t\t\t\t\t\t\t<em>Figure 14. UML diagram of com.eteks.sweethome3d.plugin package<\/em><br>\n\t\t\t\t\t\t\t\t\t\t<small><em>(click on a class to view its javadoc)<\/em><\/small>\n\t\t\t\t\t<\/figcaption>\n\t<\/figure>\n\n<p>En <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginManager.html\">PluginManager<\/a>-instans (1) skapas vid programstart och s\u00f6ker efter insticksprogram installerade i anv\u00e4ndarens <a href=\"#creating-the-plugin-jar\">insticksprogrammapp<\/a>. Varje g\u00e5ng ett nytt hem redigeras, instansierar och konfigurerar denna hanterare ett <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a>-objekt (3) f\u00f6r varje insticksprogram som hittades vid starttiden. Sedan anropar den metoden <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getActions()\">getActions<\/a> f\u00f6r att h\u00e4mta alla <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">\u00e5tg\u00e4rder<\/a> (4) som kommer att l\u00e4ggas till som menyobjekt och\/eller verktygsf\u00e4ltknappar i hemf\u00f6nstret. Varje \u00e5tg\u00e4rd \u00e4r en instans av <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>, som liknar klassen <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/Action.html\" target=\"_blank\" rel=\"noopener\">Action<\/a>, med sin <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#execute()\">execute<\/a>-metod och sina modifierbara <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.Property.html\">egenskaper<\/a> (2).   <\/p>\n\n<p>Observera att klassen <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html\">Plugin<\/a> ger dig tillg\u00e5ng till en <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEditSupport.html\" target=\"_blank\" rel=\"noopener\">UndoableEditSupport<\/a>-instans genom sin metod <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/Plugin.html#getUndoableEditSupport()\">getUndoableEditSupport<\/a>. S\u00e5 snart du \u00e4ndrar ett hem eller dess objekt (m\u00f6bler, v\u00e4ggar&#8230;) i execute-metoden f\u00f6r en <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html\">PluginAction<\/a>-instans, b\u00f6r du ocks\u00e5 posta ett <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/javax\/swing\/undo\/UndoableEdit.html\" target=\"_blank\" rel=\"noopener\">UndoableEdit<\/a>-objekt till det \u00e5ngringsbara redigeringsst\u00f6det som returneras av getUndoableEditSupport-metoden, annars kommer anv\u00e4ndarna inte att kunna \u00e5ngra\/g\u00f6ra om korrekt de \u00e4ndringar du gjorde. <\/p>\n<h3 class=\"wp-block-heading\" id=\"lokalisering\">Lokalisering<\/h3>\n<p>Om du planerar att utveckla ett insticksprogram f\u00f6r Sweet Home 3D:s anv\u00e4ndargrupp, f\u00f6rs\u00f6k att lokalisera str\u00e4ngarna det visar antingen i \u00e5tg\u00e4rdsnamn och menyer eller i dialogrutor du skapar (eller \u00e5tminstone f\u00f6rbereda dess lokalisering). Tv\u00e5 <a href=\"\/javadoc\/com\/eteks\/sweethome3d\/plugin\/PluginAction.html#PluginAction(java.lang.String,%20java.lang.String,%20java.lang.ClassLoader)\">konstruktorer i PluginAction<\/a>-klassen hj\u00e4lper dig att organisera \u00f6vers\u00e4ttningen av \u00e5tg\u00e4rdsegenskaper med .properties-filer, och om du beh\u00f6ver \u00f6vers\u00e4tta andra str\u00e4ngar i ditt insticksprogram (som den i dialogrutan som visas av det <a href=\"#testing-the-plugin\">testade insticksprogrammet<\/a>) \u00e5teranv\u00e4nd dessa .properties-filer med Java-klassen <a href=\"https:\/\/java.sun.com\/j2se\/1.5.0\/docs\/api\/java\/util\/ResourceBundle.html\" target=\"_blank\" rel=\"noopener\">ResourceBundle<\/a>.<br \/>Om du f\u00f6redrar att begr\u00e4nsa antalet egenskapsfiler kan du till och med skriva v\u00e4rdena f\u00f6r \u00e5tg\u00e4rdsegenskaperna och andra str\u00e4ngar i ApplicationPlugin.properties <a href=\"#creating-the-plugin-description-file\">beskrivningsfilen<\/a> f\u00f6r ditt insticksprogram. <\/p>\n\n<p>Om du vill ha ett exempel som anv\u00e4nder denna arkitektur, ladda ner insticksprogrammet <em>Export to SH3F<\/em> som finns p\u00e5 <a href=\"\/storage\/plugins\/ExportToSH3F-1.0.sh3p\">https:\/\/www.sweethome3d.com\/plugins\/ExportToSH3F-1.0.sh3p<\/a>, och packa upp det (denna insticksprogramfil inneh\u00e5ller \u00e4ven k\u00e4llkoden f\u00f6r insticksprogrammet).<br \/>Som beskrivs i <a href=\"https:\/\/sourceforge.net\/forum\/message.php?msg_id=5837358\" class=\"broken_link\" target=\"_blank\" rel=\"noopener\">Hj\u00e4lpforumet<\/a>, skapar detta insticksprogram en SH3F-fil som inneh\u00e5ller alla m\u00f6bler du importerat i m\u00f6belkatalogen i Sweet Home 3D.<\/p>\n<h3 class=\"wp-block-heading\" id=\"bidra-med-insticksprogram\">Bidra med insticksprogram<\/h3>\n<p>Du kan posta insticksprogrammen du programmerat i <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/\" target=\"_blank\" rel=\"noopener\">Plug-ins Contributions<\/a> Tracking System f\u00f6r att dela dem med Sweet Home 3D:s anv\u00e4ndargrupp.<br \/>M\u00e5nga funktioner kan l\u00e4ggas till i Sweet Home 3D tack vare insticksprogram, fr\u00e5n import\u00f6rer till export\u00f6rer, men \u00e4ven insticksprogram som kan \u00e4ndra data i ett hem som <a href=\"https:\/\/sourceforge.net\/p\/sweethome3d\/plug-ins\/1\/\" target=\"_blank\" rel=\"noopener\">Home Rotator Plug-in<\/a> utvecklat av Michel Mbem och andra listade i <a href=\"\/storage\/pluginsUserGuide.pdf\">Tutorial for Plug-ins and Extensions<\/a> (PDF) skriven av Hans Dirkse och p\u00e5 sidan <a href=\"https:\/\/wp-test-1.sweethome3d.eu\/sv\/tillagg-och-verktyg\/\" data-type=\"page\" data-id=\"437\">Plug-ins and tools<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduktion Fr\u00e5n version 1.5 \u00e4r det m\u00f6jligt att l\u00e4gga till nya funktioner i Sweet Home 3D med insticksmodulfiler som placeras i din insticksmodulsmapp. Detta g\u00f6r det m\u00f6jligt f\u00f6r Java-programmerare att utveckla och distribuera nya funktioner f\u00f6r Sweet Home 3D utan att \u00e4ndra k\u00e4llfilerna i den aktuella versionen (vilket \u00e4r bra f\u00f6r upp\u00e5tkompatibilitet) och utan att [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":10628,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-10642","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/pages\/10642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/comments?post=10642"}],"version-history":[{"count":3,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/pages\/10642\/revisions"}],"predecessor-version":[{"id":11802,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/pages\/10642\/revisions\/11802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/media\/10628"}],"wp:attachment":[{"href":"https:\/\/wp-test-1.sweethome3d.eu\/sv\/wp-json\/wp\/v2\/media?parent=10642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}