Hi,
I have problem when I try to get a VRML object loaded with a x3d loader.
This error is generate after click on object.
javax.media.j3d.CapabilityNotSetException: GeometryArray: no capability to get
vertex count
at
javax.media.j3d.GeometryArray.getVertexCount(GeometryArray.java:581)
at com.sun.j3d.utils.picking.PickResult.intersect(PickResult.java:654)
at
com.sun.j3d.utils.picking.PickResult.generateIntersections(PickResult.java:635)
at
com.sun.j3d.utils.picking.PickResult.numIntersections(PickResult.java:425)
at
com.sun.j3d.utils.picking.PickTool.pickGeomAllSortedIntersect(PickTool.java:854)
at
com.sun.j3d.utils.picking.PickTool.pickGeomClosestIntersect(PickTool.java:915)
at com.sun.j3d.utils.picking.PickTool.pickClosest(PickTool.java:566)
at Test.mouseClicked(Test.java:156)
at java.awt.Component.processMouseEvent(Component.java:5103)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)*/
My code is attached.
Thanks!
*************************************
* Leandro Lorenzett Dihl *
* HOME - www.urisan.tche.br/~ldihl *
* EMAIL - [EMAIL PROTECTED] *
* COMPUTER SCIENCE - URI University *
* Santo �ngelo - RS - Brazil *
*************************************
-------------------------------------------------
URI - Campus de Santo Angelo-RS
http://www.urisan.tche.br
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
import java.awt.Cursor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.media.j3d.*;
import javax.vecmath.*;
import org.web3d.j3d.loaders.VRML97Loader;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.utils.picking.PickCanvas;
import com.sun.j3d.utils.picking.PickResult;
import com.sun.j3d.utils.picking.PickTool;
public class Test implements MouseListener{
PickCanvas clickCanvas ;
private VirtualUniverse universe;
private Locale locale;
private Canvas3D canvas;
private View view;
private ViewPlatform viewPlatform;
private PhysicalBody physicalBody;
private PhysicalEnvironment physicalEnvironment;
private BranchGroup viewPlatformBG;
private BranchGroup objRoot;
private TransformGroup viewPlatformTG;
private BoundingSphere boundNA;
private Vector3f translate;
private Background bg;
public Scene scene = null;
/*---------------------------------- Construtor ---------------------------------*/
public Test(Canvas3D c)
{
this.canvas = c; // Canvas3D
this.canvas.setCursor(new Cursor(Cursor.HAND_CURSOR));
universe = new VirtualUniverse(); // cria o mundo virtual
locale = new Locale(universe); // cria o Locale e anexa-o ao mundo virtual
view = new View(); // cria um objeto View
viewPlatform = new ViewPlatform(); // cria um objeto ViewPlataform
physicalBody = new PhysicalBody(new Point3d(0, 0, 0), new Point3d(0, 0, 0)); // cria um objeto PhysicalBody
physicalEnvironment = new PhysicalEnvironment(); // cria um objeto PhysicalEnvironment
Transform3D t3D = new Transform3D();
translate = new Vector3f();
t3D.set(new Vector3f());
viewPlatformTG = new TransformGroup(t3D);
viewPlatformTG.addChild(viewPlatform);
viewPlatformTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
viewPlatformTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
viewPlatform.setCapability(TransformGroup.ALLOW_LOCAL_TO_VWORLD_READ);
translate.set( 0.0f, 0.0f, 0.0f);
t3D.setTranslation(translate);
viewPlatformTG.setTransform(t3D);
boundNA = new BoundingSphere();
view.addCanvas3D(c);
view.setPhysicalBody(physicalBody);
view.setPhysicalEnvironment(physicalEnvironment);
view.attachViewPlatform(viewPlatform);
objRoot = new BranchGroup();
viewPlatformBG = new BranchGroup();
viewPlatformBG.addChild(viewPlatformTG); // adiciona TG ao BG
viewPlatformBG.addChild(objRoot);
locale.addBranchGraph(viewPlatformBG);
/*Add VRML file*/
BranchGroup teste = new BranchGroup();
teste.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
teste.setCapability(BranchGroup.ENABLE_PICK_REPORTING);
teste.addChild(this.loadFile("./images/mesa.WRL" ));
locale.addBranchGraph(teste);
canvas.addMouseListener(this);
this.clickCanvas = new PickCanvas(canvas,teste);
this.clickCanvas.setMode(PickTool.GEOMETRY_INTERSECT_INFO);
this.clickCanvas.setTolerance(4.0f);
}
BranchGroup loadFile(String file) //carrega um arquivo de um objeto VRML externo
{
VRML97Loader loader = new VRML97Loader();
BranchGroup sceneGroup = new BranchGroup();
File f = new File(file);
if(f.exists() && !f.isFile())
{
System.out.println("Can't load directories specified");
System.exit(1);
}
URL url = null;
Scene scene = null;
try
{
url = new URL(file);
}
catch (MalformedURLException badUrl)
{
}
try
{
if(url != null)
scene = loader.load(url);
else
scene = loader.load(file);
}
catch(Exception e)
{
System.out.println("Exception loading URL:" + e);
e.printStackTrace();
System.exit(0);
}
if (scene != null)
{
// get the scene group
sceneGroup = scene.getSceneGroup();
sceneGroup.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
sceneGroup.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
sceneGroup.setCapability(GeometryArray.ALLOW_INTERSECT);
sceneGroup.setCapability(GeometryArray.ALLOW_FORMAT_READ);
sceneGroup.setCapability(GeometryArray.ALLOW_COUNT_READ);
sceneGroup.setCapability(GeometryArray.ALLOW_COORDINATE_READ);
}
return sceneGroup;
}
public void mouseClicked(MouseEvent e) {
this.clickCanvas.setShapeLocation(e);
PickResult clickResultado = clickCanvas.pickClosest();
if(clickResultado != null)
{
System.out.println(clickResultado.getObject());
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
/*
javax.media.j3d.CapabilityNotSetException: GeometryArray: no capability to get vertex count
at javax.media.j3d.GeometryArray.getVertexCount(GeometryArray.java:581)
at com.sun.j3d.utils.picking.PickResult.intersect(PickResult.java:654)
at com.sun.j3d.utils.picking.PickResult.generateIntersections(PickResult.java:635)
at com.sun.j3d.utils.picking.PickResult.numIntersections(PickResult.java:425)
at com.sun.j3d.utils.picking.PickTool.pickGeomAllSortedIntersect(PickTool.java:854)
at com.sun.j3d.utils.picking.PickTool.pickGeomClosestIntersect(PickTool.java:915)
at com.sun.j3d.utils.picking.PickTool.pickClosest(PickTool.java:566)
at Test.mouseClicked(Test.java:156)
at java.awt.Component.processMouseEvent(Component.java:5103)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)*/