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] problème de remove dans un BranchGroup


Sujet :

3D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Par défaut [java3D] problème de remove dans un BranchGroup
    Bonjour,

    Je suis en train de créer une application qui permet d'afficher des informations saisies par l'utilisateur sous forme 3D.

    A chaque fois que l'utilisateur ajoute une nouvelle information, je veux effacer le contenu de ma fenetre 3D et le remplacer par un nouveau contenu. Or mon code ne marche pas :

    le voici :

    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
     
    public class Fenetre3D extends javax.swing.JPanel {
        private SimpleUniverse simpleU;
        private BranchGroup bg = new BranchGroup();
     
     
    public Fenetre3D() {
     
            Canvas3D canvas = new  Canvas3D(SimpleUniverse.getPreferredConfiguration());
            canvas.setSize(this.fen3DsizeX,this.fen3DsizeY);
            SimpleUniverse simpleU = new SimpleUniverse(canvas);
            simpleU.getViewingPlatform().setNominalViewingTransform();
            this.add("Center",canvas);
            bg.setCapability(bg.ALLOW_CHILDREN_EXTEND);
            bg.setCapability(bg.ALLOW_CHILDREN_WRITE);
            bg.setCapability(bg.ALLOW_CHILDREN_READ);
            bg.compile();
            simpleU.addBranchGraph(bg);
        }
     
        public void actualise(BranchGroup scene) {
            try {
                if(bg.numChildren() != 0) bg.removeAllChildren();
                scene.compile();
                bg.addChild(scene);
                bg.compile();
            } catch(CapabilityNotSetException e) {
                System.out.println("probleme de Capacite");
            } catch(RestrictedAccessException e) {
                System.out.println("probleme d'Acces");
            } catch(Exception e) {
                System.out.println("probleme autre");
            }
    la fonction actualise(BranchGroup scene) m'ajoute lors de la première utilisation le BranchGroup scene qui est en paramètre en enfant sur le BranchGroup bg. Ceci marche bien.
    Par contre lors des utilisations suivantes, elle doit supprimer tous les Child du BranchGroup bg avant d'ajouter le BranchGroup scene en child, or elle va automatiquement dans l'erreur CapabilityNotSetException.

    Si quelqu'un pouvait me débloquer, ce serait sympa.

    PS : j'ai essayer sans utiliser la fonction compile(), ça ne marche pas non plus, et en essayant la fonction removeChild(0).

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 18
    Par défaut résolution.
    Bonjour.

    J'avais déjà cherché une solution à ce problème de rafraîchissement d'écran 3D.

    La solution que j'ai trouvé est la suivante:


    Au début de la classe: définition de la Locale.

    javax.media.j3d.Locale ma_locale=null;

    Lorsque l'univers est créé, on définit 'ma_locale'.

    ma_locale=simpleU.getLocale();

    Mise à jour de l'écran:
    ------------------------
    scene = createSceneGraph(simpleU);

    ma_locale.replaceBranchGraph(ancien_parent,parent);
    ancien_parent=parent;

  3. #3
    Membre Expert Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Par défaut
    ça marche !!

    merci beaucoup. J'ai quand même passé du temps avant de me rendre compte qu'il fallait ajouter un ALLOW_DETACH à scene.

    ce qui donne :

    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
     
    public class Fenetre3D extends javax.swing.JPanel {
        private SimpleUniverse simpleU;
        private BranchGroup bg = new BranchGroup();
        private Locale maLocale;
     
    public Fenetre3D(int sizeX, int sizeY, Application fenetre) {
            Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
            canvas.setSize(this.fen3DsizeX,this.fen3DsizeY);
            this.simpleU = new SimpleUniverse(canvas);
            this.simpleU.getViewingPlatform().setNominalViewingTransform();
            this.add("Center",canvas);
            this.bg.setCapability(bg.ALLOW_DETACH);
            this.bg.compile();
            this.simpleU.addBranchGraph(this.bg);
            this.maLocale = this.simpleU.getLocale();
        }
     
        public void actualise(BranchGroup scene) {
            try {
                scene.setCapability(scene.ALLOW_DETACH);
                scene.compile();
                maLocale.replaceBranchGraph(this.bg,scene);
                this.bg = scene;
            } catch(CapabilityNotSetException e) {
                System.out.println("probleme de Capacite");
            } catch(RestrictedAccessException e) {
                System.out.println("probleme d'Acces");
            } catch(Exception e) {
                System.out.println("probleme autre");
            }
     
        }

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 18
    Par défaut Réponse.
    Bonjour.

    Je suis content d'avoir pû vous aider.
    Amicalement.

  5. #5
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    Intéressant, je crois que ça va m'aider aussi, merci

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2007, 10h56
  2. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  3. problème de police dans un richedit
    Par chtiot dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/10/2003, 09h48
  4. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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