Sweet Home 3D Forum
No member browsing this thread
Thread Status: Active
Total posts in this thread: 25
guillaume_ll
Newbie
France
Joined: May 4, 2010
Post Count: 16
Status:
Offline
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? Merci, guillaume.
[May 4, 2010, 2:26:21 PM]
[Link]
Puybaret
Expert
France
Joined: Nov 7, 2005
Post Count: 9420
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 .putPropertyValue(Property.TOOL_BAR, "true"); putPropertyValue(Property.SMALL_ICON,pathToIconFromProjectRoot);
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
[May 5, 2010, 7:53:27 AM]
[Link]
guillaume_ll
Newbie
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 : protected static void emptyCatalog(FurnitureCatalog catalog) { List<CatalogPieceOfFurniture> toDel = new ArrayList<CatalogPieceOfFurniture>(); for (FurnitureCategory fc : catalog.getCategories()) { for (CatalogPieceOfFurniture cpof : fc.getFurniture()) { toDel.add(cpof); } } for (CatalogPieceOfFurniture cpof : toDel) { catalog.delete(cpof); } } @Override public PluginAction[] getActions() { selectDefaultElement(); FurnitureCategory defaultCat = defaultElement.getCategory(); FurnitureCatalog catalog = getUserPreferences().getFurnitureCatalog(); emptyCatalog(catalog); catalog.add(defaultCat, defaultElement); (…)
Bon, je vais mater DefaultFurnitureCatalog :) Merci( pour le soft et pour les réponses )
[May 5, 2010, 8:36:28 AM]
[Link]
guillaume_ll
Newbie
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.
[May 5, 2010, 9:29:31 AM]
[Link]
guillaume_ll
Newbie
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.
[May 5, 2010, 12:33:28 PM]
[Link]
guillaume_ll
Newbie
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.
[May 5, 2010, 2:14:37 PM]
[Link]
Puybaret
Expert
France
Joined: Nov 7, 2005
Post Count: 9420
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
[May 5, 2010, 2:51:50 PM]
[Link]
Puybaret
Expert
France
Joined: Nov 7, 2005
Post Count: 9420
Status:
Offline
Re: quelques besoins d'aide
On ne gagnera pas d'argent avec...
Et ton entreprise mène ce projet juste par philanthropie ! Bon, je vais te contacter par email... Pour "choper" l'URL, il y a plus propre:getPluginClassLoader().getResource("/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj")
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
[May 5, 2010, 4:56:48 PM]
[Link]