France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
quelques besoins d'aide
Bonjour.
Dans le cadre de mon stage, je dois faire un plugin de gestion de serveurs dans un datacenter.
La première étape consiste à remplacer le catalog normal par un catalog de fournitures qui sont des serveurs. Je voudrais savoir comment je dois faire de la manière la plus propre.
Mon autre question est, comment faire une toolbar? ie, dans un plugin, l'action est liée non pas à un menu mais à un bouton de la toolbar : y a-t-il une configuration spéciale à faire? J'ai essayé dans le pluginaction putPropertyValue(Property.TOOL_BAR, "true"); putPropertyValue(Property.SMALL_ICON,pathToIconFromProjectRoot); mais cela n'a pas marché.
Y aurait il des tutos pour développer des plug ins un peu plus détaillés?
France
Joined: Nov 7, 2005
Post Count: 9423
Status:
Offline
Re: quelques besoins d'aide
La première étape consiste à remplacer le catalog normal par un catalog de fournitures qui sont des serveurs. Je voudrais savoir comment je dois faire de la manière la plus propre.
Si vous voulez remplacer complètement le catalogue existant par un autre via un plug-in, implémentez la méthode getActions de votre plug-in pour y supprimer au départ tous les meubles existants grâce à la méthode delete de la classe FurnitureCatalog puis y ajouter les vôtres grâce à la méthode add de cette classe (le catalogue fait partie des préférences). Si vous voulez reprendre la façon de créer les meubles du catalogue, regardez le code source de la classe DefaultFurnitureCatalog.
Attention, si vous spécifiez ces propriétés programmatiquement et non via un fichier properties, il faut passer un objet booléen à la méthode putPropertyValue pour la propriété Property.TOOL_BAR et un objet de type Content pour la propriété Property.SMALL_ICON (comme par exemple une instance de ResourceURLContent qui référencera le chemin du fichier de l'icone dans le fichier sh3p).
Y aurait il des tutos pour développer des plug ins un peu plus détaillés?
Non, mais le code source devrait beaucoup vous aider. En plus si vous êtes français, vous pouvez lire aussi le cahier du programmeur Swing si ce n'est déjà fait. Ca ne parle pas des plug-ins qui sont apparus bien après, mais ça détaille bien l'architecture de Sweet Home 3D.
Bonne chance pour votre stage.
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
Re: quelques besoins d'aide
Une petite remarque en passant, si le plug-in est fait dans un projet maven, le ApplicationPlugin.properties et les images utilisées doivent être dans le repertoire src/main/resources/{packagedir}/ , et l'exportation du jar doit être fait avec les options "export all output foldes for checked projects"
Ensuite, comme demandé sur le forum ubuntu-fr , serait il possible d'en faire une dépendance maven? ie, déposer le jar sur un serveur avec la hiérarchie spécifique aux dépots maven. Je l'ai fait en local, mais je n'aurai pas les éventuelles modifs, et je n'ai pas le source, et mon plugin ne peut pas être compilé par d'autres personnes.
J'avais bien vu la méthode delete du catalog, mais j'éspérais qu'il y aurait un autre moyen que recréer une liste temporaire d'éléments à supprimer, puis la supprimer. Mais effectivement, ça marche :
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
Re: quelques besoins d'aide
problème quand j'exporte mon projet maven : En lisant le .jar, sh3d s'arrête au premier ApplicationPlugin.properties . Et étant donné que j'ai exporté tout le projet, cela veut dire que un seul de mes plugin sera reconnu par sh3d, vu que mes plugins sont dans le même projet. Résultat, je dois faire un projet par plugin… bof bof.
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
Re: quelques besoins d'aide
au passage, ce serait bien de mettre certaines fonctions de defaultFurnitureCatalog.java en static, en particulier les getOptionnalString, getOptionnalFloat, getContent, getDoorOrWindowSashes, getLightSources, getModelRotation .
Ça me permettrait d'y faire appel directement à partir du plugin au lieu de devoir les recopier dans celui ci.
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Unknown resource /lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj at com.eteks.sweethome3d.tools.ResourceURLContent.<init>(Unknown Source) at lelouet.sh3d.plugins.sweetServer.FurnitureBundleIterator.getContent(FurnitureBundleIterator.java:63)
at lelouet.sh3d.plugins.sweetServer.FurnitureBundleIterator.readPieceOfFurniture(FurnitureBundleIterato r.java:292) at lelouet.sh3d.plugins.sweetServer.FurnitureBundleIterator.hasNext(FurnitureBundleIterator.java:392)
Je suppose donc que le getContent devrait avoir en paramètre l'URL du jar qui contient le plugin, mais je ne vois pas comment la récupérer. J'ai accès à getPluginClassLoader(), mais ça ne me donne pas son URL.
À noter que le .properties qui contient cette ligne, lui aussi dans le .jar, est trouvé lors du new ResourceBundle("blabla.properties").
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
Re: quelques besoins d'aide
Bon, je regarde l'archive de KatorLegaz.
À priori, il est possible donc de rajouter des modèles sans rien ajout en code. Donc je vais simplement ajouter des catégories, avec des éléments, et supprimer tous les éléments qui ne font pas partie cette catégorie.
France
Joined: Nov 7, 2005
Post Count: 9423
Status:
Offline
Re: quelques besoins d'aide
Guillaume, le projet sur lequel tu travailles sera-t-il open source et donc disponible pour la communauté, ou c'est un développement privé pour l'entreprise où tu es en stage ? Parce que je veux bien assurer un peu de support pour un projet open source, mais pour un développement privé, c'est une toute autre histoire...
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
Re: quelques besoins d'aide
Le projet est assez vaste, et la partie que je fais sera surement libre : On ne gagnera pas d'argent avec, puisque c'est seulement pour visualiser en interne un datacenter. Mon stage est sur la consommation énergétique dans les dacacenters, le plugin est juste un outil pour charger un fichier décrivant le datacenter (ça va saxer …) et le visualiser
Bon, rajouter des modèles 3D directement n'est pas possible à priori dans un plugin( il faut un catalogfurniture je pense)
/!\ J'ai réussi à chopper l'URL correcte du jar avec
Si tu cherches à construire une instance de ResourceURLContent, il y a aussi:
new ResourceURLContent(instancePlugin, "/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj")
Avec la classe DefaultFurnitureCatalog, tu peux charger un ensemble de meubles d'un fichier SH3F qui contient un fichier .properties décrivant des meubles avec les fichiers de leur icône et de leur modèle. Après tu n'as plus qu'à injecter dans le catalogue des préférences les meubles lus. Tu peux aussi décrire tes meubles dans un fichier /com/eteks/sweethome3d/io/AdditionalFurnitureCatalog.properties que tu ajoutes au classpath avec les fichiers des icônes et des modèles. Ensuite, tu n'enlèves que les meubles dont l'URL est relative à com/eteks/sweethome3d/io/resources.
au passage, ce serait bien de mettre certaines fonctions de defaultFurnitureCatalog.java en static, en particulier les getOptionnalString, getOptionnalFloat, getContent, getDoorOrWindowSashes, getLightSources,getModelRotation.
Ben non puisque tu n'en as pas besoin finalement Tu verras à l'usage que ma politique de développement est de restreindre l'accès public le plus souvent possible, car une classe ou une méthode public = une API à maintenir.
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator