# Probleme beim entfernen von Childs im HauptSceneGraph



## west (28. Jan 2007)

Hallo an alle ich habe folgendes Problem, dass mich schon seit mehreren Tagen beschäftigt

ich habe einen Teilgraphen der zur Laufzeit erstellt wir. Der Teilgraph beinhaltet als Oberstes Element eine BranchGroup(A) an der dann wiederum mehrere TransformGroups hängen. 
Auserdem benutze ich zur Kollisionserkennung ein Bahavior, welches auch an der BG (A) hängt. 

Ich benutze zum Laden von 3D Files den DSLoader. Von dem bekomme ich ne BranchGroup(B) zurück, (an der hängt nen Shape3D) diese BG (B) übergebe ich dem Behavior. und hänge ne reference an dein Teilscenegraph (A).

letztendlich wird noch der Teilbaum(A) an den HauptSceneGraph angeschlossen.

Soweit so gut. Das model kann ich sehen. Kollision wird richtig erkannt.  

Nun zum Problem:

es ist unbedingt notwendig, den Teilbaum wieder abhängen zu können. 

Ich benutzte dazu die Funktion (HauptSceneGraph).removeChild(node); Ich haben den Haupt und Teilbaum nicht compiliert.  das Problem scheint mir, dass im Core versucht wird das Shape zu aktualisieren. Das ist die Fehlermeldung:


Exception in thread "J3D-GeometryStructureUpdateThread-1" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.RangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at javax.media.j3d.Shape3DRetained.getMirrorShape(Shape3DRetained.java:1965)
	at javax.media.j3d.Shape3DRetained.searchGeometryAtoms(Shape3DRetained.java:2793)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.GroupRetained.searchGeometryAtoms(GroupRetained.java:3142)
	at javax.media.j3d.WakeupOnCollisionEntry.updateCollisionBounds(WakeupOnCollisionEntry.java:421)
	at javax.media.j3d.GeometryStructure.processCollisionDetection(GeometryStructure.java:890)
	at javax.media.j3d.GeometryStructure.processMessages(GeometryStructure.java:213)
	at javax.media.j3d.StructureUpdateThread.doWork(StructureUpdateThread.java:83)
	at javax.media.j3d.J3dThread.run(J3dThread.java:256)


Wenn ich das Behavior nicht in den Teilbaum adde dann hab ich auch keinerlei Probleme ... 

Ich hoffe einfach mal, dass einen von euch die Exception schon mal übern weg gelaufen is ... 

Tschüssi


----------



## Gast (30. Jan 2007)

Ich hab das gleich Problem ! Und wäre DRINGEND an der Lösung interessiert !


----------



## Mewel (30. Jan 2007)

Wenn der Teilbaum ein BranchGroup ist (so wie ichs verstanden habe ) dann könnt ihr ihn einfach mit der Methode .detach() vom Teilbaum abhängen. Dazu müsste ihr dem Teilbaum die Capability ALLOW_DETACH zuweisen.

Dem HauptSceneGraph müsst ihr glaub ich auch ein zwei Capabilitys zuweisen (glaube ALLOW_CHILDREN_WRITE).


----------



## west (30. Jan 2007)

Jo soweit is allet klar. removechild is ja das gleiche wie detach nur jeweils von einer ebene höher/tiefer betrachtet 

das isses also nicht ! zumal man das object ja auch abhängen kann solange man das behavior nicht added. die capbabilitys sind also auch richtig.

zum Gast Post: ich hab den DSLoader ersetzt durch verschiedene andere loader ! mit dem gleichen fehler. dann hab ich nen ColorCube genommen. und es passiert das gleiche! (auf diese objecte "lauscht" das behavoir und zwar im geomerty mode)

Frage an alle: kann es sein das das behavior versuch die geometry ständig zu aktualisiere und das auch obwohl es disabeld is ?

btw: ich bin ja schonmall froh, dass mal wer auf ne frage postet.  Also entweder keiner versteht meine frage oder es ist allgemeines rätzelraten


----------



## Illuvatar (30. Jan 2007)

Es ist allgemeines Rätselraten, aber hast du das, was Mewel geschrieben hat, schon probiert? Es kommt mir so vor, als wäre irgendetwas "abgehängtes" nicht richtig "aufgeräumt" - und vllt. macht detach das ja.


----------



## west (31. Jan 2007)

ich habe detach schon probiert, das geht genauso gut wie das removeChild, gar nicht.  
ich vermute, wie schon erwähnt, dass das behavior das problem ist. aber ich setze es halt schon vorher auf setEnable = false UND collidable = flase. da sollte auf keinen fall mehr was in den stimulus kommen  - (hab ich aber auch schon genauer ausgetet - da kommt nüscht rein). dagegen spricht aller Dings die Erkenntnis das wenn ich das behavior nicht in den Graphen adde das Problem nicht is. 

Also Grundlegend eher ein Problem zwischen Shape für das Behavior und dem Behavior selbst. Hab aber ehrlich gesagt keinen Ansatzpunkt mehr .


----------



## Guest (3. Feb 2007)

Ich hab auch nochmal mit detach probiert macht keinen Unterschied. Irgendwie scheint das ein Bug in Java3D zu sein.
Den wenn ich versuche die Exeption zu fangen bei der Zeile die den Fehler auslösst gelingt das nicht.

Er ist zu diesem zeitpunkt in irgendeinem internen Threat.

Ich möchte diesen Fehler unbedingt beseitigt wissen !!!

Wie würdet ihr weiter vorgehen wenn auch hier niemand weiter weis ?


----------



## Illuvatar (3. Feb 2007)

Mal googlen, ob das vielleicht ein bekannter Bug ist, oder ob irgendwo anders schon jemand den Bug(?) hatte. Sonst vileleicht mal im Forum von Sun nachfragen, oder in einem speziellen J3D-Forum, falls es das gibt.
Auch probieren könntest du es noch bei den Kollegen von Javacore, die haben auch recht kompetente Leute auf dem Gebiet, aber wahrscheinlich wird es sich mehr lohnen, in einem internationalen Forum zu fragen.


----------



## west (3. Feb 2007)

Das werd ich wohl machen! Gibt es vielleicht nen IRC Chanel wo man mit kompetenten Leuten reden kann?  
Ansonsten werd ich mich mit dem Problem wohl mal direkt an Sun wenden. Ich werd das Ergebnis dann mal hier posten falls Interesse besteht.


----------

