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)*/