Parent vom TransformGroup entfernen

B

benoetigeHilfe

Gast
Morgen allerseits,

ich möchte gerne vom TransformGroup ( Child ) den Elternteil entfernen.
Also normalerweise entfernt man Objekte so:

Java:
BranchGroup branch1 = new BranchGroup();
BranchGroup branchtrans = new BranchGroup();
TransformGroup transform = new TransfromGroup();

branchtrans.addChild(transform);
branch1.addChild(branchtrans);

....

branch1.removeChild(branchtrans);

branchtrans   = new BranchGroup();
branch1 = new BranchGroup();

branchtrans.addChild(transform);
branch1.addChild(branchtrans);

// Capability sind natürlich gesetzt

Nunja , jetzt möchte ich aber gerne den TransformGroup wieder den branchtrans als Child übergeben, nur das Problem ist das ich eine Exception bekomme , das TransformGroup schon ein Elternteil hat.
Wie kann ich den Elternteil entfernen.

So ist es nicht gewollt :
Java:
transform = new TransformGroup();
 
B

benoetigeHilfe

Gast
Hallo Marco,

ne leider nicht.
Für BranchGroup gibt es das entsprechende Capability setCapability(BranchGroup.ALLOW_DETACH); .

Aber bei TransformGroup gibt es leider kein setCapability(TransformGroup.ALLOW_DETACH);
Oder kann ich für TransformGroup setCapability(BranchGroup.ALLOW_DETACH); verwenden?
 

Marco13

Top Contributor
Oh ja, bin da ein bißchen raus. Aber wenn man
branchGroup.removeChild(transformGroup);
macht haut's ihn auch irgendwie raus, gell? (Da war doch was...?)

Die Möglichkeit, zwischen die TransformGroup und die Eltern-BG noch eine Hilfs-Branchgroup zu klemmen, die man dann detachen kann, gibt's nicht...?
 

truesoul

Top Contributor
Jup , leider ist es nicht möglich branchgroup.remove(transformgroup) zu machen.
Deshalb habe ich ja ein zweiten Branchgroup den ich dann branchgroup.remove(zweitenbranchgroup) ... ( zweiterbranchgroup enthält transformgroup) so entfernen würde.
Sobald der Transformgroup ein Elternteil hat habe ich noch kein weg gefunden ihm ein neuen Elternteil zu geben ausser mit :
Java:
transform = new TransformGroup();
transform.addChild(Shape3D);
Was aber so nicht gewollt.
 
B

benoetigeHilfe

Gast
So ich glaube ich sollte ein wenig mehr ausholen da es anscheinend nicht gut genug erklärt wurde von mir.

Also , ich denke ich muss jetzt nicht unbedingt die Initialiezierung vom SimpleUniverse und Co. drauf eingehen aber das wichtigeste ist:

Java:
BranchGroup variableBranchGroup = new BranchGroup();
variableBranchGroup.setCapability(BranchGroup.ALLOW_DETACH);

BranchGroup canvasBranchGroup = new BranchGroup();
canvasBranchGroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE | BranchGroup.ALLOW_CHILDREN_READ | BranchGroup.ALLOW_CHILDREN_WRITE);

// So Capability gesetzt 

public void haengeObjekteAn()
{

      for( int i = 0 ; i < objektListe.size() ; i++)
        {
            variableBranchGroup.addChild(objektListe.get(i).transformGroup);
        }


        variableBranchGroup.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
        variableBranchGroup.compile();

        canvasBranchGroup.addChild(variableBranchGroup);
        simpleUniverse.addBranchGraph(canvasBranchGroup);

}

So jetzt habe die Objekt geladen und ich sehe sie.
Die Variable objektListe (Typ List ) enthält ObjektInformationen wie TransformGroup, Shape3D und Co. ( Klasse ObjektInformation )

So jetzt wenn ich ein Objekt entferne muss ich :

Java:
public void leereBranchGroup()
    {
        // entferne Knoten

        canvasBranchGroup.removeChild(variableBranchGroup);
        // variableBranchGroup wird neu Initializiert
        
        variableBranchGroup = new BranchGroup();
        variableBranchGroup.setCapability(BranchGroup.ALLOW_DETACH);
        // canvasBranchGroup wird neu Initializiert
        canvasBranchGroup = null;
        canvasBranchGroup = new BranchGroup();
        canvasBranchGroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE | BranchGroup.ALLOW_CHILDREN_READ | BranchGroup.ALLOW_CHILDREN_WRITE);
    }

Erstmal entferne ich variableBranchGroup aus canvasBranchGroup .
Erstelle dann neue Objekte und setzte Capability.

Aus der objektListe würde ich jetzt den entsprechende ObjektInformation entfernen und die anderen behalte ich bei.
Und jetzt rufe ich wieder die Methode :
Java:
 haengeObjekteAn()

Und genau dann bekomme ich eine Exception:

Exception in thread "AWT-EventQueue-0" javax.media.j3d.MultipleParentException: Group.addChild: child already has a parent.

Diese Exception tritt in der for Schleife auf.
Obwohl ich variableBranchGroup = new BranchGroup() heißt es ja nicht das objektListe.get(i).transformGroup die Information erhält das sein Elternteil "gelöscht" wurde und somit Elternlos ist.
Aber genau das möchte ich , das ich die objektListe mit den Informationen(transformGroup) benutzen kann ohne ein Neues Objekt vom Typ Transformgroup zu erstellen.
Also im Prinzip , möchte ich das TransformGroup Elternlos wird und ich
Java:
variableBranchGroup.addChild(objektListe.get(i).transformGroup);
machen kann.

P.S würde ich ein neues Objekt vom Typ TransformGroup machen , würde es alles klappen aber der aufwand ist höher als nur
Java:
 objektListe.remove( DIESESOBJEKT );
P.SS Und ich hänge ja in diesem fall ein BranchGroup dazwischen.
 

Marco13

Top Contributor
Ob der Aufwand höher ist, als der dieses Threads sei mal dahingestellt. Man kann eine TransformGroup nicht von der BranchGroup entfenden, an der sie hängt. Mit manchen Sachen muss man sich abfinden. Und dann eben eine geeignete Alternativlösung suchen. Was dagegen spricht, dafür zu sorgen, dass man statt der Zeile
Code:
 variableBranchGroup.addChild(objektListe.get(i).transformGroup);
eben
Code:
 variableBranchGroup.addChild(objektListe.get(i).[b]eine BranchGroupWoDieTransformGroupDranhängt[/b]);
schreibt, weiß ich nicht.
 
B

benoetigeHilfe

Gast
omg , ich glaub es nicht.
Wieso komme ich nicht darauf.
Marco , ich danke dir herzlichst dafür.
Jetzt habe ich es so hinbekommen wie ich es wollte , dank dir.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
H 3DS zur TransformGroup Spiele- und Multimedia-Programmierung 2
aze Animation an TransformGroup anpassen Spiele- und Multimedia-Programmierung 5
K TransformGroup werden nicht getrennt behandelt Spiele- und Multimedia-Programmierung 2
Developer_X Transform3D[] und TransformGroup[] Spiele- und Multimedia-Programmierung 13
G Behaviors bei TransformGroup Spiele- und Multimedia-Programmierung 2
G Ermitteln eines Punktes in einer anderen TransformGroup Spiele- und Multimedia-Programmierung 2
R TransformGroup finden und bearbeiten Spiele- und Multimedia-Programmierung 8
H Transformgroup zur Laufzeit bearbeiten Spiele- und Multimedia-Programmierung 4
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
F Hintergrund bei Image entfernen Spiele- und Multimedia-Programmierung 4
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
D Canvas3D vom JFrame entfernen Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen

Neue Themen


Oben