IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

[Java3D] Suppression d'un objet


Sujet :

3D Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 15
    Points
    15
    Par défaut [Java3D] Suppression d'un objet
    Bonjour à tous,
    J'aimerai faire une chose toute simple, c'est pouvoir supprimer un objet de ma scène même si celle-ci à été compilé ou si elle est "alive".

    Voici mon code tout simple (stricte minimum) :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    import com.sun.j3d.utils.universe.SimpleUniverse;
    import com.sun.j3d.utils.geometry.ColorCube;
     
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.swing.JFrame;
     
    import java.awt.GraphicsConfiguration;
    import java.awt.BorderLayout;
     
    public class Win extends JFrame {
     
    	public ColorCube c1 = new ColorCube(0.3);
    	public ColorCube c2 = new ColorCube(0.4);
    	public Canvas3D  canvas;
    	public BranchGroup contents;
     
    	public Win()
    	{
    		setLayout(new BorderLayout());
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
    		canvas = new Canvas3D(config);
     
    		add("Center", canvas);
     
    		BranchGroup contents = new BranchGroup();
     
    		contents.addChild(c1);
    		contents.addChild(c2);
    		contents.compile();
     
    		SimpleUniverse universe = new SimpleUniverse(canvas);
    		universe.getViewingPlatform().setNominalViewingTransform();
    		universe.addBranchGraph(contents);
     
    		contents.removeChild(1);
    	}
     
    	public static void main(String[] args)
    	{
    		Win demo = new Win();
    		demo.setSize(400,400);
    		demo.setVisible(true);
    	}
     
    }
    On peut voir que je crée deux cube que j'attache à mon BranchGroup.
    Une fois le bg attaché à l'univers, j'essaie de supprimer un des cubes mais j'ai droit à une belle erreur javax.media.j3d.RestrictedAccessException: Group: only a BranchGroup node may be removed

    Y a-t-il un moyen simple de faire ce que je désire ?

    Merci

  2. #2
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    Bonjour, comme le dit le message d'erreur, seuls des BranchGroup peuvent être supprimés pendant l'exécution une fois la scène compilée.
    Il te faut donc attacher chaque objet que tu veux pouvoir supprimer à un BranchGroup intermédiaire, ce qui donnerait qqch comme ça:

    c1 ---- BranchGroupC1 ---- contents

    Ensuite pour supprimer c1 tu supprimes directement BranchGroupC1.

    Pour pouvoir supprimer un BranchGroup après compilation il faut lui donner cette capacité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    contents.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); // autorise le BG a supprimer ou modifier ses enfants (je ne suis plus certain que celle là soit nécessaire, à tester avec ou sans)
    BranchGroupC1.setCapability(BranchGroup.ALLOW_DETACH); // donne la capacité au BG de se détacher de son parent, et donc d'être supprimé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 04/05/2009, 00h43
  2. [STL]Suppression d'un objet dans un vector
    Par cssiste dans le forum SL & STL
    Réponses: 10
    Dernier message: 19/07/2007, 14h23
  3. Réponses: 2
    Dernier message: 30/05/2007, 15h54
  4. Réponses: 2
    Dernier message: 21/04/2007, 16h13
  5. [Java3D] Textures sur un objet
    Par vero55 dans le forum 3D
    Réponses: 3
    Dernier message: 18/04/2007, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo