quelques besoins d'aide
This topic has been viewed 8141 times and has 24 replies
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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?
Merci,
guillaume.
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.
Re: quelques besoins d'aide
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).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 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).putPropertyValue(Property.TOOL_BAR, "true");
putPropertyValue(Property.SMALL_ICON,pathToIconFromProjectRoot);
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.Y aurait il des tutos pour développer des plug ins un peu plus détaillés?
Bonne chance pour votre stage. [:)]
Emmanuel Puybaret, Sweet Home 3D creator
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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 :
Bon, je vais mater DefaultFurnitureCatalog 
Merci( pour le soft et pour les réponses )
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 :
Code: Select all
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);
(…)
Merci( pour le soft et pour les réponses )
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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.
Résultat, je dois faire un projet par plugin… bof bof.
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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.
Ça me permettrait d'y faire appel directement à partir du plugin au lieu de devoir les recopier dans celui ci.
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
Re: quelques besoins d'aide
J'ai un petit problème là :
Comment dans un plugin sa propre URL ?
dans mon plugin, j'ai un properties qui contient
cet emplacement est correct dans l'archive .jar
cependant, au chargement du plugin j'ai
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").
Comment dans un plugin sa propre URL ?
dans mon plugin, j'ai un properties qui contient
Code: Select all
model#1=/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.objcependant, au chargement du plugin j'ai
Code: Select all
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(FurnitureBundleIterator.java:292)
at lelouet.sh3d.plugins.sweetServer.FurnitureBundleIterator.hasNext(FurnitureBundleIterator.java:392)
À noter que le .properties qui contient cette ligne, lui aussi dans le .jar, est trouvé lors du new ResourceBundle("blabla.properties").
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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.
À 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.
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...
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
-
guillaume_ll
- Posts: 16
- Joined: Tue May 04, 2010 2:13 pm
- Country: Nantes, France
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
C'est crade mais c'était ça ou devenir fou.
Pour info le projet est pour l'instant ici :
http://code.google.com/p/lelouettests/s ... e%3Dclosed
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
Code: Select all
URL jarURL = ((URLClassLoader) getPluginClassLoader()).getURLs()[0];Pour info le projet est pour l'instant ici :
http://code.google.com/p/lelouettests/s ... e%3Dclosed
Re: quelques besoins d'aide
Et ton entreprise mène ce projet juste par philanthropie ! [:D]On ne gagnera pas d'argent avec...
Bon, je vais te contacter par email...
Pour "choper" l'URL, il y a plus propre:
Code: Select all
getPluginClassLoader().getResource("/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj")Code: Select all
new ResourceURLContent(instancePlugin, "/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj")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.
Ben non puisque tu n'en as pas besoin finalement [;)]au passage, ce serait bien de mettre certaines fonctions de defaultFurnitureCatalog.java en static, en particulier les getOptionnalString, getOptionnalFloat, getContent, getDoorOrWindowSashes, getLightSources,getModelRotation.
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
Who is online
Users browsing this forum: No registered users and 2 guests