# [J3D]Dynamische Erzeugung vom Objekt Box



## mattn (9. Jun 2010)

guten Mittag ^^

ich will in einer for-Schleife z.b. 100 Würfel mit eigener ID erzeugen 
ich schreib einfach mal meine beiden mislungenen versuche rein... hoffendlich lacht ihr euch nicht schlapp :lol:

so erster versuch
... da gibt der mir nichts aus 

```
TransformGroup BoxTG_[] = new TransformGroup[n];
Transform3D BoxT3D_[] = new Transform3D[n];

for(i=0; i<n; i++){
   BoxTG_[i] = new TransformGroup();
   BoxT3D_[i] = new Transform3D();
   BoxT3D_[i].setTranslation(new Vector3f(0f,0f,2f));
   BoxTG_[i].setTransform(BoxT3D_[i]);
   BoxTG_[i].addChild(new Box(0.1f,0.1f,0.1f, BoxAppearance));
   rootBG.addChild(BoxTG_[i]);
      
   System.out.println(i);
}
```




das scheitert dann schon an der syntax ... 

```
TransformGroup BoxTG[];
Transform3D BoxT3D[];

for(i=0; i<n; i++){
	BoxTG[i] = new TransformGroup();
	BoxT3D[i] = new Transform3D();
	BoxT3D[i].setTranslation(new Vector3f(0f,0f,2f));
	BoxTG[i].setTransform(BoxT3D[i]);
	BoxTG[i].addChild(new Box(0.1f,0.1f,0.1f, BoxAppearance));
	rootBG.addChild(BoxTG[i]);
	
	System.out.println(i);
}
```


----------



## Marco13 (9. Jun 2010)

Beschreib' das Problem mal genauer.


----------



## mattn (9. Jun 2010)

ok... also 

ich will keine aufwendigen grafiken bauen sondern eine datenstruktur mit ihren abhängigkeiten in 3d darstellen. 

das erste was ich machen will ist ein performance test... den habe ich mit folgender schleife gemacht


```
x=(float)-0.5; 	//Startwert für die Schleife
		y=(float)-0.5; 	//Startwert für die Schleife
		n= 500; 		//Anzahl der Würfel, die generiert werden sollen
		
		//Generierungmehrerer Knoten noch ohne Index
		for(i=0; i<n; i++){
			
			//Formatierung für bis zu 500 Würfel --> noch optimierbar
			switch(i){
				case 50:  { y= (float)(y + 0.025);
							x=(float)-0.5;  break; //x Wert wird für nächste Zeile zurückgesetzt
				}
				case 100: { y= (float)(y + 0.025); 
							x=(float)-0.5;  break;
				}
				case 150: { y= (float)(y + 0.025);
							x=(float)-0.5;  break;
				}
				case 200: { y= (float)(y + 0.025); 
							x=(float)-0.5;  break;
				}
				case 250: { y= (float)(y + 0.025);
							x=(float)-0.5;  break;
				}
				case 300: { y= (float)(y + 0.025);
							x=(float)-0.5;  break;
				}
				case 350: { y= (float)(y + 0.025);
				x=(float)-0.5;  break;
				}
				case 400: { y= (float)(y + 0.025);
							x=(float)-0.5;  break;
				}
				case 450: { y= (float)(y + 0.025);
							x=(float)-0.5;  break;
				}
			}
			
			TransformGroup BoxTG = new TransformGroup();
			Transform3D BoxT3D = new Transform3D();
			
			
			BoxT3D.setTranslation(new Vector3f((float)x,(float)y,0f)); // x und y für 
			BoxTG.setTransform(BoxT3D);
			BoxTG.addChild(new Box(0.01f,0.01f,0.01f, BoxAppearance));
			x= (float) (x+ 0.025);
			rootBG.addChild(BoxTG);
				
			//der BoxTG die Transformationen mit der Maus erlauben
			BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
			BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
			//verschieben mit rechter Maustaste
			BoundingBox boundBox=new BoundingBox (new Point3d(-1000,-1000,-1000),new Point3d(1000,1000,1000));
			MouseTranslate mouseTranslate= new MouseTranslate(BoxTG);
	        mouseTranslate.setSchedulingBounds(boundBox);
	        BoxTG.addChild(mouseTranslate);
/*	        //zoomen mit mittlerer Maustaste
	        MouseZoom mouseBeh2=new MouseZoom(BoxTG);
	        mouseBeh2.setSchedulingBounds(boundBox);
	        BoxTG.addChild(mouseBeh2);
	        //rotieren mit der linken Maustaste
			MouseRotate behavior = new MouseRotate(BoxTG);
	        behavior.setTransformGroup(BoxTG);
	        behavior.setSchedulingBounds(boundBox);
	        BoxTG.addChild(behavior);
*/
	        
			
			//System.out.println(i);
			
		}
```

ergebnis sind einfach 10 zeilen a 50 würfel 
ich habe an vorerst an jeden einzelnen die MouseTranslate Eigenschaft - Verschieben mit der rechten Maustaste-  gehängt um die cpu auslastung zu testen .... 

leider habe ich gemerkt das ich den würfel garnicht mit dem cursor "anfassen" muss um ihn zu verschieben, sondern das es reicht wenn ich irgendwo klick+die maus beweg damit sich der würfel bewegt ... da ich aber will das ich den würfel, den ich bewegen will wirklich anfassen muss, muss ich das noch ändern(geht glaube ich mit picking oder so - ging bei mir noch nicht ^^) 

soweit sogut ...

später brauch aber jeder würfel eine eigene ID - z.b. via index - damit ich daten/eigenschaften oder so "dahinter" leg.... habe mich mal schlau gemacht und denke das man das mit einen vektor oder einer map lösen kann ... leider ist mir das aber noch nicht gelungen.

konntest mir folgen? 
ich hoff das war verständlich - wenn nicht frag einfach  

vllt weißt ja rat ^^


----------



## truesoul (10. Jun 2010)

Hallo.

Hmmm , deine Beschreibung ist noch ein wenig unverständlich vorallem deine frage zu deinem Problem fehlt noch ?!?

Willst du beim "anklicken" von einem Würfel herausfinden welcher das von den 500 ist oder was? 

Gruß


----------



## mattn (10. Jun 2010)

ja genau...

jeder würfel steht .... z.b. für ein arbeitsprozess ... wenn ich den anklick möchte ich informationen darüber (wer bearbeitet ihn ... und so weiter) ... also denk ich mir das jeder würfel eine eindeutige id braucht


----------



## truesoul (10. Jun 2010)

Als erstes lese dir mal : PickCanvas (Java 3D 1.3.2) durch .

Und google bisschen danach , es gibt sehr viele hilfreiche Beiträge darüber.

Ein Tipp: 
Man kann die Speicheradressen der Objekte(Nodes) vergleichen und somit unter anderem herausfinden welches Objekt angeklickt wurde.

Mfg


----------

