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

Reply via email to