# Beim Picking werden alle Behaviors angesprochen



## Illuvatar (6. Aug 2004)

Also, ich hab im Universe viele Spheres, um die dann noch über OrientedShape3D Texte kreisen.
Eine solche Sphere mit Text wird von einem Objekt des Typs MindMapNode dargestellt, was aus BranchGroup abgeleitet ist, diese Groups werden dann direkt zum BranchGraph hinzugefügt.

Ausschnitte aus dem Konstruktor:

```
protected MindMapNode (Point3f loc, Color c, String name, MindPanel myPan)
	{
[...]
		Sphere s = new Sphere();
[...]
		Transform3D t3d = new Transform3D ();
		t3d.setTranslation (new Vector3f (loc.x, loc.y, loc.z));
		TransformGroup tg = new TransformGroup (t3d);
		this.addChild(tg);
[...]
		s.setPickable(true);
		Picker p = new Picker();
		s.setCapability(ENABLE_PICK_REPORTING);
		tg.addChild(p);
		tg.addChild(s);
```
Und die Klasse Picker:

```
private class Picker extends PickMouseBehavior
	{
		Picker ()
		{
			super (MindMapNode.this.myPan.getCanvas()/*Canvas*/, MindMapNode.this, new BoundingSphere (new Point3d(), 1)/*Default-Radius einer Sphere*/);
			setSchedulingBounds (new BoundingSphere (new Point3d(), 500)); //View ist bis zu 300 Meters weg
			pickCanvas.setMode(PickCanvas.GEOMETRY);
		}
		public void updateScene (int x, int y)
		{
			System.out.println ("PICKED: " + MindMapNode.this + " with coordinates: (" + x + "/" + y + ")!"); //Testausgabe
		}
	}
```

Das Problem ist: Egal, wohin ich klicke, machen *alle* Picker-Instanzen ihre Ausgabe. Wo liegt der Fehler?

PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden: http://www.java-forum.org/de/viewtopic.php?t=7140 :wink:


----------



## Oxygenic (9. Aug 2004)

Warum zum Geier erzeugst du so viele Pick-Objeke? Entsprechend ihrem Scope (oder Einflussbereich, ich habe mir deinen Code jetzt nicht näher angesehen), müssen die ja alle reagieren! Ich würde nur ein Pick-Objekt erzeugen und dann fix das ge"pick"te Objekt auffinden. Ressourcenschonender ist die Variante gewiss.

> PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden:
> http://www.java-forum.org/de/viewtopic.php?t=7140

Permanentes Spammen führt ganz gewiss zu einer Lösung :-(


----------



## Illuvatar (9. Aug 2004)

Oxygenic hat gesagt.:
			
		

> > PS: Ich will auch noch mal auf das hire hinweisen, da hab ich den Fehler auch noch nicht gefunden:
> > http://www.java-forum.org/de/viewtopic.php?t=7140
> 
> Permanentes Spammen führt ganz gewiss zu einer Lösung :-(



Jaja ...  

Also, zu dem Problem.
Es kann gut sein, dass ich das Picking noch gar nicht bis kaum verstanden habe.
Das hier hat übrigens auch nicht wirklich weitergeholfen.
Ich will nur wissen, wenn der User die Maus klickt, auf welche Sphere er geklickt hat. Das sollte doch nicht allzu schwer sein. ???:L Kann mir da jemand nen Tip geben?


----------



## Oxygenic (9. Aug 2004)

Ähm...zu jedem Pick-Result bekommst du einen Rückgabewert, aus dem du dann das gepickte Objekt ermitteln kannst. Das J3D-Tutorial von javacore.de beschreibt dieses Verfahren übrigens detailliert.


----------



## Illuvatar (9. Aug 2004)

Ups ... jetzt darf mich jeder einmal schlagen ... (virtuell) 
	

	
	
		
		

		
			





Ich hatte es schon mal fast. Es hat nur gefehlt, dass ich Sphere im Konstruktor den Primflag ENABLE_GEOMETRY_PICKING mitgeben muss, damit ALLOW_INTERSECT gesetzt wird.

Und dann hab ich immer abstrusere Sachen eingebaut... Jetzt klappt alles super.

PS: @Oxygenic Ich hatte mir das Tut vorher noch nicht so genau angeschut, das scheint ja echt gut zu sein.
Ich tus mal in die Linkbase


----------

