Οδηγός ανάπτυξης πρόσθετων
Εισαγωγή
Από την έκδοση 1.5, είναι δυνατή η προσθήκη νέων λειτουργιών στο Sweet Home 3D με αρχεία πρόσθετων που τοποθετούνται στο φάκελο πρόσθετων. Αυτό επιτρέπει στους προγραμματιστές Java να αναπτύσσουν και να διανέμουν νέες λειτουργίες για το Sweet Home 3D χωρίς να τροποποιούν τα αρχεία πηγαίου κώδικα της τρέχουσας έκδοσης (που είναι καλό για την προς τα πάνω συμβατότητα), και χωρίς να παραδίδουν μια πλήρη έκδοση του προγράμματος (που είναι καλό για το μέγεθος διανομής).
Αυτό το έγγραφο περιγράφει τα εργαλεία που απαιτούνται για τη δημιουργία πρόσθετων, στη συνέχεια δείχνει πώς να προγραμματίσεις ένα πρόσθετο που υπολογίζει τον μέγιστο όγκο των κινητών επίπλων που προστέθηκαν σε ένα σπίτι, και τέλος δίνει κάποιες πρόσθετες πληροφορίες που θα σε βοηθήσουν να προχωρήσεις περαιτέρω.
Εγκατάσταση εργαλείων ανάπτυξης
Αν και το Sweet Home 3D απευθύνεται στο ευρύ κοινό, η ανάπτυξη πρόσθετων απαιτεί ειδικές δεξιότητες, και θα πρέπει να ξέρεις πώς να προγραμματίζεις σε Java με ένα IDE, πριν προχωρήσεις παρακάτω. Αυτός ο οδηγός δείχνει πώς να φτιάξεις ένα πρόσθετο με το Eclipse, αλλά μπορείς να χρησιμοποιήσεις το IDE της επιλογής σου, ή και κανένα IDE.
Κατέβασε και εγκατέστησε το Eclipse
Πρώτα κατέβασε το Eclipse από το https://www.eclipse.org/. Η έκδοση με όνομα Eclipse IDE for Java Developers είναι αρκετή για την ανάπτυξη ενός πρόσθετου, αλλά μπορείς να κατεβάσεις οποιαδήποτε έκδοση για ανάπτυξη Java.
Αφού το κατεβάσεις, η εγκατάσταση του Eclipse είναι πολύ απλή: απλά αποσυμπίεσε το αρχείο που θα πάρεις, άνοιξε το φάκελο eclipse και ανάλογα με το σύστημά σου, εκτέλεσε το αρχείο με όνομα eclipse.exe (στα Windows), eclipse.app (στο Mac OS X) ή eclipse (στο Linux).
Στην πρώτη εκτέλεση, το Eclipse θα σου ζητήσει να επιλέξεις ένα φάκελο workspace, όπου θα αποθηκεύονται τα project των πρόσθετων.
Αφού το κάνεις αυτό, επίλεξε File > New > Project από το μενού για να δημιουργήσεις ένα νέο project, επίλεξε Java > Java project στον οδηγό New project που θα εμφανιστεί, βάλε VolumePlugin ως όνομα project και κάνε κλικ στο κουμπί Finish. Τέλος, κλείσε την καρτέλα Welcome για να δεις το workspace σου όπως φαίνεται στην εικόνα 1.

Κατέβασε και εγκατέστησε τη βιβλιοθήκη Sweet Home 3D
Η ανάπτυξη ενός πρόσθετου βασίζεται σε κάποιες κλάσεις του Sweet Home 3D που το Eclipse πρέπει να γνωρίζει για να μπορεί να χτίσει το project σου. Ο ευκολότερος τρόπος να προσθέσεις τις κλάσεις του Sweet Home 3D στο Eclipse είναι να κατεβάσεις την εκτελέσιμη έκδοση JAR του Sweet Home 3D που είναι διαθέσιμη στο https://sourceforge.net/projects/sweethome3d/files/SweetHome3D/SweetHome3D-7.5/SweetHome3D-7.5.jar/download. Αφού το κατεβάσεις, σύρε και άφησε το αρχείο SweetHome3D-7.5.jar στο εικονίδιο του project VolumePlugin στην προβολή Package Explorer του Eclipse, και επίλεξε το στοιχείο Build Path > Add to Build Path στο μενού περιεχομένου του αρχείου SweetHome3D-7.5.jar, όπως φαίνεται στην εικόνα 2.

στο Build Path
Προγραμματισμός ενός πρόσθετου
Τώρα που εγκατέστησες τα απαραίτητα εργαλεία, ας δούμε πώς μπορείς να προγραμματίσεις το πρώτο σου πρόσθετο για το Sweet Home 3D.
Δημιουργία της κλάσης του πρόσθετου
Πρώτα, δημιούργησε μια νέα υποκλάση της com.eteks.sweethome3d.plugin.Plugin επιλέγοντας το στοιχείο μενού File > New > Class στο Eclipse.

Στο παράθυρο διαλόγου New Java Class, βάλε VolumePlugin ως όνομα κλάσης, βάλε ένα πακέτο (εδώ το επιλεγμένο πακέτο ήταν com.eteks.test), και επίλεξε την com.eteks.sweethome3d.plugin.Plugin ως υπερκλάση της VolumePlugin. Αφού το κάνεις αυτό, κάνε κλικ στο Finish. Το Eclipse θα δημιουργήσει το αρχείο της νέας κλάσης με το ακόλουθο περιεχόμενο:
package com.eteks.test;
import com.eteks.sweethome3d.plugin.Plugin;
import com.eteks.sweethome3d.plugin.PluginAction;
public class VolumePlugin extends Plugin {
@Override
public PluginAction[] getActions() {
// TODO Auto-generated method stub
return null;
}
}
Όπως μπορείς να μαντέψεις από το σχόλιο TODO, πρέπει τώρα να αλλάξεις την υλοποίηση της μεθόδου getActions για να επιστρέφει μια ενέργεια πρόσθετου ικανή να υπολογίζει τον όγκο των κινητών επίπλων. Αντικατέστησε το return null; με την ακόλουθη δήλωση:
return new PluginAction [] {new VolumeAction()};
και επίλεξε Edition > Quick Fix από το μενού του Eclipse για να δημιουργήσεις την κλάση VolumeAction που λείπει, όπως φαίνεται στην εικόνα 4.

Στο παράθυρο διαλόγου New Java Class που εμφανίζεται, επίλεξε το πλαίσιο ελέγχου Enclosing type για να δημιουργήσεις μια εσωτερική κλάση της VolumePlugin και κάνε κλικ στο Finish. Αυτό θα δημιουργήσει την κλάση VolumeAction που κληρονομεί από την κλάση com.eteks.sweethome3d.plugin.PluginAction και περιέχει μια κενή μέθοδο execute:
public class VolumeAction extends PluginAction {
@Override
public void execute() {
// TODO Auto-generated method stub
}
}
Αυτή η μέθοδος είναι αυτή που το Sweet Home 3D θα καλέσει όταν ο χρήστης εκτελέσει την ενέργεια του πρόσθετου. Επομένως, εδώ είναι το σημείο όπου πρέπει να υλοποιήσεις πώς να υπολογίζεται ο όγκος των επίπλων και να εμφανίζεται:
public class VolumeAction extends PluginAction {
@Override
public void execute() {
float volumeInCm3 = 0;
// Υπολογισμός του αθροίσματος του όγκου του περιβάλλοντος κουτιού
// κάθε κινητού επίπλου στο σπίτι
for (PieceOfFurniture piece : getHome(). getFurniture()) {
if (piece. isMovable()) {
volumeInCm3 += piece. getWidth ()
* piece. getDepth()
* piece. getHeight();
}
}
// Εμφάνιση του αποτελέσματος σε ένα πλαίσιο μηνύματος (³ είναι για το 3 σε εκθέτη)
String message = String. format(
"Ο μέγιστος όγκος των κινητών επίπλων στο σπίτι είναι %.2f m³.",
volumeInCm3 / 1000000);
JOptionPane. showMessageDialog(null, message);
}
}
Τώρα που καθόρισες τι θέλεις να κάνει το πρόσθετο, πρέπει να περιγράψεις πώς ο χρήστης θα εκτελεί αυτή τη νέα ενέργεια. Έχεις την επιλογή να προσθέσεις ένα νέο στοιχείο μενού σε ένα μενού, και/ή ένα νέο κουμπί στη γραμμή εργαλείων. Αυτή η επιλογή γίνεται ορίζοντας τις κατάλληλες ιδιότητες της ενέργειας του πρόσθετου κατά τη δημιουργία της. Για παράδειγμα, αν θέλεις οι χρήστες να εκτελούν την ενέργεια υπολογισμού όγκου με το στοιχείο μενού Υπολογισμός όγκου που βρίσκεται στο μενού Εργαλεία, θα προσθέσεις τον ακόλουθο κατασκευαστή στην κλάση VolumeAction:
public VolumeAction() {
putPropertyValue(Property.NAME, "Υπολογισμός όγκου");
putPropertyValue(Property.MENU, "Εργαλεία");
// Ενεργοποίηση της ενέργειας από προεπιλογή
setEnabled(true);
}
Η κλάση πρόσθετου VolumePlugin είναι τώρα προγραμματισμένη και σχεδόν έτοιμη να λειτουργήσει ως πρόσθετο στο Sweet Home 3D. Τα δύο τελευταία πράγματα που πρέπει να κάνεις είναι:
- η δημιουργία ενός αρχείου περιγραφής ApplicationPlugin.properties
- η συγκέντρωση των αρχείων σε ένα αρχείο JAR.
Δημιουργία του αρχείου περιγραφής του πρόσθετου
Ένα αρχείο ApplicationPlugin.properties περιγράφει το όνομα του πρόσθετου, την κλάση του, τις ελάχιστες εκδόσεις του Sweet Home 3D και της Java που υποστηρίζονται, και νομικά θέματα. Επίλεξε File > New > File από το μενού του Eclipse, βάλε το όνομα αρχείου ApplicationPlugin.properties και κάνε κλικ στο Finish, όπως φαίνεται στην εικόνα 5.

Στη συνέχεια βάλε την ακόλουθη περιγραφή στο νέο αρχείο και αποθήκευσέ το:
name=Όγκος κινητών επίπλων
class=com.eteks.test.VolumePlugin
description=Υπολογίζει τον όγκο των κινητών επίπλων στο σπίτι
version=1.0
license=GNU GPL
provider=(C) Πνευματικά δικαιώματα 2024 Space Mushrooms
applicationMinimumVersion=1.5
javaMinimumVersion=1.5
Δημιουργία του JAR του πρόσθετου
Το JAR του πρόσθετου περιέχει τα αρχεία class που δημιουργήθηκαν από τη μεταγλώττιση του αρχείου VolumePlugin.java, και το αρχείο ApplicationPlugin.properties. Καθώς το Eclipse μεταγλωττίζει ένα αρχείο Java μόλις το αποθηκεύσεις, απλά επίλεξε File > Export… από το μενού και επίλεξε Java > JAR file στο παράθυρο διαλόγου Export που θα εμφανιστεί. Στον οδηγό Jar Export που εμφανίζεται όπως φαίνεται στην εικόνα 6, επίλεξε το πλαίσιο ελέγχου του project και βάλε τη διαδρομή ενός αρχείου JAR που βρίσκεται στο φάκελο πρόσθετων του Sweet Home 3D. Αυτός ο κατάλληλος φάκελος εξαρτάται από το σύστημά σου ως εξής:
- στα Windows Vista / 7 / 8 / 10 / 11, αυτός ο φάκελος είναι C:UsersuserAppDataRoamingeTeksSweet Home 3Dplugins,
- στα Windows XP και προηγούμενες εκδόσεις των Windows, αυτός ο φάκελος είναι C:Documents and SettingsuserApplication DataeTeksSweet Home 3Dplugins,
- στο macOS, είναι ο υποφάκελος Library/Application Support/eTeks/Sweet Home 3D/plugins του φακέλου χρήστη σου,
- στο Linux και άλλα Unix, είναι ο υποφάκελος .eteks/sweethome3d/plugins του φακέλου χρήστη σου.

Δοκιμή του πρόσθετου
Το πρόσθετο που ανέπτυξες θα τρέξει στο Sweet Home 3D, είτε με την έκδοση Java Web Start, την έκδοση εγκαταστάτη, ή το SweetHome3D-7.5.jar που κατέβασες προηγουμένως. Καθώς το τελευταίο είναι ένα εκτελέσιμο JAR, μπορείς να το τρέξεις κάνοντας διπλό κλικ σε αυτό ή με την ακόλουθη εντολή:
Το πρόσθετο που ανέπτυξες θα τρέξει στο Sweet Home 3D, είτε με την έκδοση Java Web Start, την έκδοση εγκαταστάτη, ή το SweetHome3D-7.5.jar που κατέβασες προηγουμένως. Καθώς το τελευταίο είναι ένα εκτελέσιμο JAR, μπορείς να το τρέξεις κάνοντας διπλό κλικ σε αυτό ή με την ακόλουθη εντολή:
java -jar /διαδρομή/προς/SweetHome3D-7.5.jar
Όσο κάνεις δοκιμές, πιθανώς θα προτιμήσεις να τρέχεις το Sweet Home 3D με αυτή την εντολή, για να μπορείς να διαβάζεις στην κονσόλα το ίχνος στοίβας των εξαιρέσεων που προκύπτουν κατά την εκτέλεση του πρόσθετού σου.
Μόλις εκκινηθεί το Sweet Home 3D, θα δεις το νέο μενού και το στοιχείο του όπως φαίνεται στην εικόνα 7:

Αν επιλέξεις το νέο στοιχείο μενού για το παράδειγμα σπιτιού που δημιουργήθηκε στον οδηγό χρήσης, θα πάρεις το ακόλουθο αποτέλεσμα:

Αποσφαλμάτωση του πρόσθετου
Αν χρειάζεται να κάνεις αποσφαλμάτωση του πρόσθετου σου από το Eclipse, δημιούργησε μια ρύθμιση αποσφαλμάτωσης ακολουθώντας αυτά τα βήματα:
- Επίλεξε Run > Debug Configurations… από το μενού, επίλεξε το στοιχείο Java Application στη λίστα διαθέσιμων ρυθμίσεων του παραθύρου διαλόγου Debug configurations, κάνε κλικ στο κουμπί New πάνω αριστερά και βάλε ένα όνομα για τη ρύθμιση.
- Κάνε κλικ στο κουμπί Search… στα δεξιά του πεδίου κειμένου Main class και κάνε διπλό κλικ στην κλάση SweetHome3DBootstrap
ανάμεσα στις προτεινόμενες κλάσεις.

- Κάνε κλικ στην καρτέλα Classpath, επίλεξε το υπο-στοιχείο VolumePlugin (default classpath) του στοιχείου User Entries στη λίστα Classpath και κάνε κλικ στο κουμπί Remove.
- Κάνε κλικ στο στοιχείο User Entries στη λίστα Classpath, κάνε κλικ στο κουμπί Add JARs…, επίλεξε το στοιχείο SweetHome3D-7.5.jar και επιβεβαίωσε την επιλογή σου.

- Επίλεξε την καρτέλα Source, κάνε κλικ στο κουμπί Add…, κάνε διπλό κλικ στο στοιχείο Java Project στο παράθυρο διαλόγου Add Source, επίλεξε το στοιχείο VolumePlugin στο αναδυόμενο παράθυρο Project Selection και επιβεβαίωσε την επιλογή σου.

- Τέλος, κάνε κλικ στο κουμπί Debug για να εκκινήσεις το Sweet Home 3D σε λειτουργία αποσφαλμάτωσης. Μόλις το πρόγραμμα τρέξει, άνοιξε το αρχείο VolumePlugin.java, όρισε ένα σημείο διακοπής στη μέθοδο execute και επίλεξε Tools > Compute volume από το μενού του Sweet Home 3D. Το Eclipse θα σταματήσει στο επιλεγμένο σημείο διακοπής για να σου επιτρέψει να εκτελέσεις το πρόγραμμα βήμα-βήμα και να επιθεωρήσεις τις τιμές των μεταβλητών.


Κάθε φορά που τροποποιείς τον πηγαίο κώδικα του πρόσθετού σου, μην ξεχνάς να δημιουργήσεις το JAR του πρόσθετου πριν εκκινήσεις τη ρύθμιση αποσφαλμάτωσης που δημιούργησες. Για να επιταχύνεις τη διαδικασία εξαγωγής JAR στο eclipse, πήγαινε στο δεύτερο βήμα του οδηγού εξαγωγής JAR και επίλεξε την επιλογή Save the description of this JAR in the workspace. Αυτό θα προσθέσει ένα νέο στοιχείο στο έργο με ένα στοιχείο μενού περιεχομένου Create JAR.
Ανάπτυξη του πρόσθετου
Όταν είναι έτοιμο, το πρόσθετό σου μπορεί να αναπτυχθεί στον υπολογιστή άλλων χρηστών του Sweet Home 3D απλά αντιγράφοντάς το στον φάκελο πρόσθετων τους. Από την έκδοση 1.6, ένα αρχείο πρόσθετου μπορεί επίσης να εγκατασταθεί στον φάκελο πρόσθετων του Sweet Home 3D κάνοντας διπλό κλικ σε αυτό, αν η επέκτασή του είναι SH3P (απλά άλλαξε την επέκταση αρχείου από .zip σε .sh3p). Αν το διπλό κλικ σε ένα αρχείο .sh3p δεν εκκινεί το Sweet Home 3D (πιο πιθανό στο Linux), μπορείς επίσης να εγκαταστήσεις ένα πρόσθετο με την ακόλουθη εντολή σε ένα παράθυρο Terminal (όπου SweetHome3D είναι το όνομα του εκτελέσιμου αρχείου που παρέχεται με τα προγράμματα εγκατάστασης του Sweet Home 3D):
/path/to/SweetHome3D /path/to/plugin.sh3p
Για να σταματήσεις να χρησιμοποιείς ένα πρόσθετο, αφαίρεσε το αρχείο του από τον φάκελο πρόσθετων και επανεκκίνησε το Sweet Home 3D.

Αν θέλεις το πρόσθετό σου να μπορεί να τρέξει με όλα τα προγράμματα εγκατάστασης του Sweet Home 3D που είναι διαθέσιμα σε αυτόν τον ιστότοπο, φρόντισε να το διατηρήσεις συμβατό με Java 5, επιλέγοντας 1.5 στο πεδίο Compiler compliance level που είναι διαθέσιμο στην ενότητα Java Compiler του παραθύρου διαλόγου που εμφανίζεται από το στοιχείο μενού Project > Properties του Eclipse.
Αν χρησιμοποιείς μια έκδοση μεταγλωττιστή Java όπου η συμβατότητα Java 1.5 δεν είναι πλέον διαθέσιμη, προσπάθησε να στοχεύσεις τουλάχιστον στη Java 1.8 που χρησιμοποιείται ακόμα σε πρόσφατες εκδόσεις του Sweet Home 3D και ρύθμισε το javaMinimumVersion στο αρχείο ApplicationPlugin.properties του πρόσθετού σου αντίστοιχα.
Περαιτέρω εξέλιξη
Ο προγραμματισμός του πρώτου πρόσθετου σου έδειξε τη γενική εικόνα. Εδώ είναι κάποιες επιπλέον πληροφορίες που θα σε βοηθήσουν να προχωρήσεις περαιτέρω.
Sweet home 3D API – javadoc
Η πιο χρήσιμη τεκμηρίωση για την ανάπτυξη ενός νέου πρόσθετου είναι το Sweet Home 3D API (Application Programming Interface), που δημιουργείται με το εργαλείο javadoc.
Χρησιμοποίησε μόνο τις κλάσεις των πακέτων com.eteks.sweethome3d.plugin, com.eteks.sweethome3d.model, com.eteks.sweethome3d.tools και com.eteks.sweethome3d.viewcontroller στο πρόσθετό σου αν θέλεις να είναι συμβατό προς τα πάνω με μελλοντικές εκδόσεις του Sweet Home 3D. Αυτό θα είναι αρκετό για να προγραμματίσεις οποιοδήποτε πρόσθετο που λειτουργεί με τα δεδομένα σπιτιού που είναι διαθέσιμα στο Sweet Home 3D.
Τα πακέτα που αντιστοιχούν στα άλλα επίπεδα του προγράμματος περιλαμβάνονται στο Javadoc μόνο για ενημερωτικούς σκοπούς. Μη βασίζεσαι στο API τους, καθώς μπορεί να αλλάξει στο μέλλον χωρίς εγγύηση συμβατότητας προς τα πάνω (έτσι κι αλλιώς δε θα δεις καμία αναφορά σε κλάση των πακέτων com.eteks.sweethome3d.swing, com.eteks.sweethome3d.j3d, com.eteks.sweethome3d.io ή com.eteks.sweethome3d στα προαναφερθέντα πακέτα).
Αρχιτεκτονική κλάσεων μοντέλου
Το Sweet Home 3D βασίζεται σε αρχιτεκτονική MVC (Model View Controller), οπότε η κατανόηση του πώς είναι οργανωμένο το επίπεδο Model είναι απαραίτητη. Η εικόνα 13 (διαθέσιμη επίσης σε μορφή PDF) παρουσιάζει σχεδόν όλες τις κλάσεις και διεπαφές που είναι διαθέσιμες στην έκδοση 1.5 του πακέτου com.eteks.sweethome3d.model που αντιστοιχεί σε αυτό το επίπεδο Model.
(click on a class to view its javadoc)
Η κεντρική κλάση στο επίπεδο Model είναι η κλάση HomeApplication (10), η αφηρημένη υπερκλάση της κύριας κλάσης εφαρμογής SweetHome3D. Το στιγμιότυπο αυτής της κλάσης δίνει πρόσβαση στα στιγμιότυπα Home (7) που υπόκεινται σε επεξεργασία, και στο αντικείμενο UserPreferences (11) που αποθηκεύει τη μονάδα μήκους σε χρήση (12), τον κατάλογο επίπλων (14) και τον κατάλογο υφών (15) από τους οποίους ο χρήστης επιλέγει κομμάτια επίπλων (17) και υφές (18).
Ένα στιγμιότυπο Home (7) αποθηκεύει όλα τα αντικείμενα που δημιούργησε ο χρήστης στο σχέδιο σπιτιού:
- τη λίστα των αντικειμένων HomePieceOfFurniture (13) που υλοποιούν τη διεπαφή PieceOfFurniture (16),
- τη συλλογή των αντικειμένων Wall (9),
- τη λίστα των αντικειμένων Room (5),
- τη συλλογή των αντικειμένων DimensionLine (2),
- τη συλλογή των αντικειμένων Label (3).
Αυτά τα αντικείμενα υλοποιούν τη διεπαφή Selectable (1) όπως και το αντικείμενο ObserverCamera (4), που αποθηκεύει τη θέση της κάμερας στη λειτουργία Εικονικού επισκέπτη. Όλες οι εξωτερικές πληροφορίες που διαχειρίζονται τα αντικείμενα Model, όπως το εικονίδιο και το 3D μοντέλο ενός κομματιού επίπλων (16), ή η εικόνα μιας υφής (20) προσπελαύνονται μέσω της διεπαφής Content (19), που υλοποιείται από την κλάση URLContent και άλλες κλάσεις του πακέτου com.eteks.sweethome3d.tools.
Αυτό το διάγραμμα UML θα σε βοηθήσει να καταλάβεις ποιες κλάσεις είναι διαθέσιμες στο μοντέλο του Sweet Home 3D και πώς μπορείς να τις προσπελάσεις, αλλά πιθανόν θα παρατηρήσεις ότι δεν αναφέρονται κατασκευαστές και μεταλλάκτες (ή setters αν προτιμάς) σε αυτό. Είναι απλά λόγω έλλειψης χώρου αλλά μπορείς να τα χρησιμοποιήσεις χωρίς πρόβλημα σε μια κλάση πρόσθετου. Σημείωσε επίσης ότι οποιαδήποτε τροποποίηση ενός υπάρχοντος αντικειμένου του μοντέλου θα ειδοποιηθεί στα εμφανιζόμενα στοιχεία είτε με PropertyChangeEvents, με CollectionEvents (8) ή με SelectionEvents (6), επιτρέποντας έτσι όλες οι αλλαγές να αντανακλώνται άμεσα στην οθόνη.

Το μοντέλο του Sweet Home 3D δεν είναι thread safe για λόγους απόδοσης. Όλες οι τροποποιήσεις ενός αντικειμένου που ανήκει στο μοντέλο θα πρέπει να γίνονται στο Event Dispatch Thread.
Αρχιτεκτονική κλάσεων πρόσθετου
Η αρχιτεκτονική των κλάσεων πρόσθετου είναι πολύ πιο απλή στην κατανόηση από αυτή του επιπέδου Model. Το πακέτο com.eteks.sweethome3d.plugin περιέχει μόνο τρεις κλάσεις από τις οποίες υποτίθεται ότι θα χρησιμοποιήσεις μόνο τις κλάσεις Plugin και PluginAction, όπως φαίνεται στην εικόνα 14 (διαθέσιμη επίσης σε μορφή PDF).
(click on a class to view its javadoc)
Ένα στιγμιότυπο PluginManager (1) δημιουργείται κατά την εκκίνηση της εφαρμογής και αναζητά τα πρόσθετα που είναι εγκατεστημένα στον φάκελο πρόσθετων του χρήστη. Κάθε φορά που γίνεται επεξεργασία ενός νέου σπιτιού, αυτός ο διαχειριστής δημιουργεί στιγμιότυπα και ρυθμίζει ένα αντικείμενο Plugin (3) για κάθε πρόσθετο που βρέθηκε κατά την εκκίνηση. Στη συνέχεια, καλεί τη μέθοδο getActions για να ανακτήσει όλες τις ενέργειες (4) που θα προστεθούν ως στοιχεία μενού και/ή κουμπιά γραμμής εργαλείων στο παράθυρο του σπιτιού. Κάθε ενέργεια είναι ένα στιγμιότυπο του PluginAction, που μοιάζει με την κλάση Action, με τη μέθοδο execute και τις τροποποιήσιμες ιδιότητές της (2).
Σημείωσε ότι η κλάση Plugin σου δίνει πρόσβαση σε ένα στιγμιότυπο UndoableEditSupport μέσω της μεθόδου getUndoableEditSupport. Μόλις τροποποιήσεις ένα σπίτι ή τα αντικείμενά του (έπιπλα, τοίχους…) στη μέθοδο execute ενός στιγμιότυπου PluginAction, θα πρέπει επίσης να στείλεις ένα αντικείμενο UndoableEdit στο undoable edit support που επιστρέφεται από τη μέθοδο getUndoableEditSupport, διαφορετικά οι χρήστες δε θα μπορούν να αναιρέσουν/επαναλάβουν σωστά τις αλλαγές που έκανες.
Τοπικοποίηση
Αν σχεδιάζεις να αναπτύξεις ένα πρόσθετο για την κοινότητα χρηστών του Sweet Home 3D, προσπάθησε να τοπικοποιήσεις τις συμβολοσειρές που εμφανίζει είτε στο όνομα ενεργειών και μενού είτε στους διαλόγους που θα δημιουργήσεις (ή τουλάχιστον προετοίμασε την τοπικοποίησή του). Δύο κατασκευαστές της κλάσης PluginAction θα σε βοηθήσουν να οργανώσεις τη μετάφραση των ιδιοτήτων ενεργειών με αρχεία .properties, και αν χρειάζεται να μεταφράσεις άλλες συμβολοσειρές στο πρόσθετό σου (όπως αυτή στο διάλογο που εμφανίζεται από το δοκιμασμένο πρόσθετο) επαναχρησιμοποίησε αυτά τα αρχεία .properties με την κλάση Java ResourceBundle.
Αν προτιμάς να περιορίσεις τον αριθμό των αρχείων properties, μπορείς ακόμη να γράψεις τις τιμές των ιδιοτήτων ενεργειών και άλλων συμβολοσειρών στο αρχείο περιγραφής ApplicationPlugin.properties του πρόσθετού σου.
Αν θέλεις ένα παράδειγμα που χρησιμοποιεί αυτή την αρχιτεκτονική, κατέβασε το πρόσθετο Export to SH3F που είναι διαθέσιμο στο https://www.sweethome3d.com/plugins/ExportToSH3F-1.0.sh3p, και αποσυμπίεσέ το (αυτό το αρχείο προσθέτου περιέχει επίσης τον πηγαίο κώδικα του προσθέτου).
Όπως περιγράφεται στο Help forum, αυτό το πρόσθετο δημιουργεί ένα αρχείο SH3F που περιέχει όλα τα έπιπλα που εισήγαγες στον κατάλογο επίπλων του Sweet Home 3D.
Συνεισφορά προσθέτων
Μπορείς να δημοσιεύσεις τα πρόσθετα που προγραμμάτισες στο σύστημα παρακολούθησης Plug-ins Contributions για να τα μοιραστείς με την κοινότητα χρηστών του Sweet Home 3D.
Πολλές λειτουργίες μπορούν να προστεθούν στο Sweet Home 3D χάρη στα πρόσθετα, από εισαγωγείς έως εξαγωγείς, αλλά και πρόσθετα που μπορούν να τροποποιήσουν τα δεδομένα ενός σπιτιού όπως το Home Rotator Plug-in που αναπτύχθηκε από τον Michel Mbem και άλλα που αναφέρονται στο Tutorial for Plug-ins and Extensions (PDF) που έγραψε ο Hans Dirkse και στη σελίδα Plug-ins and tools.