# Fehlermeldung(Picking)Shape3D: nocapability to get geometrie



## Franky (7. Feb 2005)

Hi leuds, 

in meinem Programm möchte ich beim anlicken eines erstelleten ColorCubes
einen Wert seinen Objectnamen ausgegeben haben. 
Klick man neben dem Cube soll nichts angeklick erscheinen.
Das funktioniert auch soweit. 

Ich weis das ich irgendwie die Shapes des Cubes Capability setzten muss.

Kann mir da vielleicht jemand weiterhelfen? 

mfg Franky


----------



## Franky (7. Feb 2005)

Da bis jetzt leider niemand geantwortet hat ... vielleicht hilft euch ja nen bissel Code weiter..


```
PointPicker pointpick = new PointPicker(m_canvas3d, obj_root);
	     pointpick.setSchedulingBounds(bounds);
	     obj_root.addChild(pointpick);
	      


//////////////////////////////////////////////////////////////////
Vector3f back22=new Vector3f(0.0f,0.0f,-4.0f);
		Transform3D back = new Transform3D();
		back.setTranslation(back22);
		
		TransformGroup cubetest = new TransformGroup(back);
		cubetest.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		cubetest.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		cubetest.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
		cubetest.setPickable(true);
		
		ColorCube test = new ColorCube(0.4);
		
		Shape3D shape = new Shape3D();
		shape = test.getShape();
		shape.setCapability(Shape3D.ALLOW_GEOMETRY_READ);
		shape.setCapability(Shape3D.ENABLE_PICK_REPORTING);
```

Es kommt immer folgende Fehlermeldung beim anklicken des Cubes:
no capability to get vertex count

Kann mir jetzt vielleicht jemand weiter helfen? 

Mfg Franky


----------



## Illuvatar (7. Feb 2005)

In welcher Zeile kommt das?


----------



## Franky (8. Feb 2005)

Folgende Fehlermeldung wird angezeigt...

javax.media.j3d.CapabilityNotSetException:    
GeometryArray: no capabilty to get vertex count
at javax.media.j3d.utils.picking.PickResult.intersect<PickResult.java:654>
at com.sun.j3d.utils.picking.PickResult.generateIntersections<PickResult.java:635>............


----------



## Oxygenic (8. Feb 2005)

Eigentlich ganz simpel: du hast vergessen, für dein GeometryArray die entsprechende(n) Capability/ies zu setzen ;-)


----------



## Franky (8. Feb 2005)

Jo danke... 

Ja sowas habe ich mir auch schon gedacht...
aber greife wie greife ich auf das GeometryArry zu?

Kannst du mir da ein Anstoß gegebenwerden?


----------



## Illuvatar (8. Feb 2005)

Ja, dass Capabilities fehlen, ist ja recht wahrscheinlich  , ich habe mich nur gewundert, weil in deinem Code nichts davon zu sehen war, dass du den Vertex Count von nem GeometryArray willst. Aber klar, wenn du auf das Polygon genau picken willst, macht das das PickResult...
Ich würde dir empfehlen, den ColorCube wegzulassen, das ist ja eigentlich nur eine simple Hilfs-/Testklasse, und eine Primitive zu nehmen, z.B. Sphere, wo du im Konstruktor das Primflag Primitive.ENABLE_GEOMETRY_PICKING übergeben kannst.
Mit einem ColorCube musst du halt den "umständlichen" Weg gehen: ColorCube ist aus Shape3D abgeleitet und bietet deshalb die Methode getGeometry(), das kannst du in ein GeometryArray casten und die gewünschten Capabilities setzen.


----------



## Franky (8. Feb 2005)

Hi... ich möchte mich erstmal für eure Hilfe Bedanken...

Ich habe eine Lösung gefunden...  und zwar in dem ich bei My Pick nicht mehr so genau bin... 
also nicht GEOMETRY_INTERSECT_INFO nutze sondern mit BOUNDS arbeite.

MFG


----------

