Print at Dec 22, 2025, 8:48:29 AM

Posted by Puybaret at May 11, 2010, 1:45:25 PM
Re: quelques besoins d'aide
Dans le constructeur d'une sous-classe de PluginAction, je viens d'essayer de remplacer à la volée une instance de HomePieceOfFurniture par une instance d'une sous-classe public MyPieceOfFurniture appartenant au plug-in. Ca donne ça:

getHome().addFurnitureListener(new CollectionListener<HomePieceOfFurniture>() {
public void collectionChanged(final CollectionEvent<HomePieceOfFurniture> ev) {
if (ev.getType() == CollectionEvent.Type.ADD) {
final Home home = (Home)ev.getSource();
home.removeFurnitureListener(this);

// Remplacement du meuble par une autre instance d'une sous-classe
final MyPieceOfFurniture myPiece = new MyPieceOfFurniture(ev.getItem());
home.addPieceOfFurniture(myPiece, ev.getIndex());

home.addFurnitureListener(this);

// Suppression du meuble précédemment ajouté
EventQueue.invokeLater(new Runnable() {
public void run() {
home.deletePieceOfFurniture(ev.getItem());
List<Selectable> selectedItems =
new ArrayList<Selectable>(home.getSelectedItems());
selectedItems.add(myPiece);
home.setSelectedItems(selectedItems);
}
});
}
}
});

Ca marche sur le moment, mais comme je le pressentais, le fichier sh3d qui contient des instances de MyPieceOfFurniture ne peut plus être lu après par Sweet Home 3D, parce que la classe MyPieceOfFurniture n'appartient pas au classpath de Sweet Home 3D. Cette classe n'est accessible que du plug-in et la lecture d'un fichier SH3D ne se fait pas dans le plug-in.

Si tu veux toujours continuer tes développements sous la forme d'un plug-in, je te conseille d'utiliser plutôt les méthodes setVisualProperty et getVisualProperty de la classe Home. Une "property value" peut être n'importe quelle instance d'une classe accessible dans Sweet Home 3D ; par exemple, un instance de HashMap dans laquelle tu stockes les valeurs supplémentaires dont tu as besoin pour chaque meuble (tu peux utiliser une instance de HomePieceOfFurniture comme clé de ta map).
Ca n'est pas super génial, mais ça marche sans problème et je m'en sers dans le plug-in de rendu avancé pour stocker les valeurs saisies par l'utilisateur dans la boîte de dialogue.
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator