Bonjour,
Je travail actuellement sur le logiciel Sweet Home 3D pour en faire une version personnalisé pour une entreprise. Malheureusement je suis encore débutant en 3D et j'aimerais avoir de vos lumière. Dans Sweet Home 3D, fichiers .obj sont chargés pour créer des objets de type BranchGroup contenant des Shape3D. Lorsque l'utilisateur redimensionne un objet depuis un plan en 2D, celui ci est mis à jour sur le plan 3D.
Jusque la c'est correct mais ce que je souhaiterais faire c'est de faire en sorte que quand on redimensionne un objet BranchGroup, certains éléments ne soit pas redimensionné. Par exemple si je change de taille à une fenêtre, je veux que les vitres changent de taille mais pas les poignées.
Pour cela il faut premièrement que je parvienne à identifier le Shape3D qui correspond à la poignée puis que je lui indique de ne pas redimensionner.
Comment faire pour identifier un élément de type Shape3D?
Lors d'un picking j'arrive a voir le nom des éléments. Comment faire sans? Voici ma fonction de picking :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public Selectable getSelectedItem(int x, int y){ Set<Selectable> cles = homeObjects.keySet(); Iterator<Selectable> it = cles.iterator(); PickResult[] pickResult = null; Selectable selectedItem = null; while (it.hasNext()){ Selectable cle = it.next(); Object3DBranch valeur = homeObjects.get(cle); PickCanvas pickCanvas = new PickCanvas(HomeComponent3D.this.canvas3D, valeur); pickCanvas.setMode(PickCanvas.GEOMETRY_INTERSECT_INFO); pickCanvas.setShapeLocation(x, y); pickResult = pickCanvas.pickAllSorted(); if (pickResult != null) { //Affichage du nom de l'objet System.out.println(pickResult[0].getObject().getUserData()); } } return selectedItem; }
Ensuite comment faire pour empêcher de redimensionner un élément Shape3D d'un BranchGroup?
Voici ma fonction qui redimensionne un BranchGroup.
Je ne sais pas si je suis très clair. Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 private void updatePieceOfFurnitureTransform() { HomePieceOfFurniture piece = (HomePieceOfFurniture)getUserData(); // Set piece size Transform3D scale = new Transform3D(); float pieceWidth = piece.getWidth(); // If piece model is mirrored, inverse its width if (piece.isModelMirrored()) { pieceWidth *= -1; } scale.setScale(new Vector3d(pieceWidth, piece.getHeight(), piece.getDepth())); // Change its angle around y axis Transform3D orientation = new Transform3D(); orientation.rotY(-piece.getAngle()); orientation.mul(scale); // Translate it to its location Transform3D pieceTransform = new Transform3D(); pieceTransform.setTranslation(new Vector3f( piece.getX(), piece.getElevation() + piece.getHeight() / 2, piece.getY())); pieceTransform.mul(orientation); // Change model transformation ((TransformGroup)getChild(0)).setTransform(pieceTransform); }
Partager