Index  | Recent Threads  | List Attachments  | Search
 Welcome Guest  |  Register  |  Login
Login Name  Password
 

Sweet Home 3D Forum



No member browsing this thread
Thread Status: Active
Total posts in this thread: 25
Posts: 25   Pages: 3   [ 1 2 3 | Next Page ]
[ Jump to Last Post ]
Post new Thread
Author
Previous Thread This topic has been viewed 7815 times and has 24 replies Next Thread
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
smile 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.
[May 4, 2010, 2:26:21 PM] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
Puybaret
Expert
Member's Avatar

France
Joined: Nov 7, 2005
Post Count: 9423
Status: Offline
Reply to this Post  Reply with Quote 
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. smile
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
[May 5, 2010, 7:53:27 AM] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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
model#1=/lelouet/sh3d/plugins/sweetServer/ServersFiles/panduit_cn1.obj

cet emplacement est correct dans l'archive .jar

cependant, au chargement du plugin j'ai
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").
[May 5, 2010, 1:57:16 PM] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
Puybaret
Expert
Member's Avatar

France
Joined: Nov 7, 2005
Post Count: 9423
Status: Offline
Reply to this Post  Reply with Quote 
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
guillaume_ll
Newbie



France
Joined: May 4, 2010
Post Count: 16
Status: Offline
Reply to this Post  Reply with Quote 
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
URL jarURL = ((URLClassLoader) getPluginClassLoader()).getURLs()[0];

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/source/...sipation%3Fstate%3Dclosed
[May 5, 2010, 3:33:28 PM] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
Puybaret
Expert
Member's Avatar

France
Joined: Nov 7, 2005
Post Count: 9423
Status: Offline
Reply to this Post  Reply with Quote 
Re: quelques besoins d'aide

On ne gagnera pas d'argent avec...
Et ton entreprise mène ce projet juste par philanthropie ! biggrin
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 wink
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] Show Printable Version of Post    View Member Profile    Send Private Message [Link] Report threatening or abusive post: please login first  Go to top 
Posts: 25   Pages: 3   [ 1 2 3 | Next Page ]
[ Jump to Last Post ]
Show Printable Version of Thread  Post new Thread

  Get Sweet Home 3D at SourceForge.net. Fast, secure and Free Open Source software downloads  
© Copyright 2024 Space Mushrooms - All rights reserved