public void gotoLocation(String vrmlfile) {
	
	FileReader filereader = null;
	try{
		filereader	 = new FileReader(vrmlfile);
	}
	catch (FileNotFoundException e) {
		System.err.println(e);
		System.exit(1);
	}
	
	Reader reader = (Reader)filereader;
	VrmlLoader loader = new VrmlLoader();		
	Scene s = null;
	
	try {
		s = loader.load(reader);
	}
	catch (FileNotFoundException e) {
		System.err.println(e);
		System.exit(1);
	}
	catch (ParsingErrorException e) {
		System.err.println(e);
		System.exit(1);
	}
	catch (IncorrectFormatException e) {
		System.err.println(e);
		System.exit(1);
	}
	
	BranchGroup bg = new BranchGroup();
	bg.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
	bg = s.getSceneGroup();
	Enumeration enum1 = bg.getAllChildren();
	iterateLoop(enum1);
	
}


public void iterateLoop(Enumeration enum){
	while (enum.hasMoreElements())
	{
		Object tmpObject = enum.nextElement();
		
		if (tmpObject instanceof Shape3D)
		{
			createShape(tmpObject);
		}
		
		else if (tmpObject instanceof TransformGroup)
		{
			TransformGroup tmptransformGroup = (TransformGroup) tmpObject; 
			
			Enumeration nextenum = tmptransformGroup.getAllChildren();
			
			iterateLoop(nextenum);
		}
		
		else if(tmpObject instanceof Group){
			Group tmpGroup = (Group) tmpObject;                      
			Enumeration groupenum = tmpGroup.getAllChildren();
			
			iterateLoop(groupenum);
		}
		
		else{System.out.println("What is this thing?");
		}
	}
}

public void createShape(Object tmpObj){
	//System.out.println("yes -- Shape3d");
	Shape3D tempshape = (Shape3D) tmpObj;
	shape[j] = (Shape3D)tempshape.cloneNode(true);
	shape[j].setCapability(Shape3D.ALLOW_GEOMETRY_READ);
	//shape[j].setCapability(Shape3D.ALLOW_APPEARANCE_READ);
	//shape[j].setCapability(Shape3D.ALLOW_APPEARANCE_WRITE);
	shape[j].setCapability(Shape3D.ENABLE_PICK_REPORTING);
	//shape[i].setCapability(Shape3D.ALLOW_PICKABLE_READ);
	
	tgStorage[j] = new TransformGroup();
	tgStorage[j].setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	tgStorage[j].setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
	tgStorage[j].setCapability(TransformGroup.ENABLE_PICK_REPORTING);
	tgStorage[j].setCapability(TransformGroup.ALLOW_CHILDREN_READ);
	tgStorage[j].setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);
	tgStorage[j].setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);
	
	addRoot[j] = new BranchGroup();
	addRoot[j].setCapability(BranchGroup.ALLOW_DETACH);
	addRoot[j].setCapability(BranchGroup.ALLOW_BOUNDS_READ);
	addRoot[j].setCapability(BranchGroup.ALLOW_CHILDREN_READ);
	addRoot[j].setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
	addRoot[j].setCapability(BranchGroup.ALLOW_PICKABLE_READ);
	addRoot[j].setCapability(BranchGroup.ALLOW_PICKABLE_WRITE);
	addRoot[j].setCapability(BranchGroup.ENABLE_PICK_REPORTING);
	addRoot[j].setPickable(true);
	
	data[j] = new UserData();
	
	t3dStorage[j] = new Transform3D();
	
	tgStorage[j].setTransform(t3dStorage[j]);
	tgStorage[j].setUserData(data[j]);
	
	geometry[j] = shape[j].getGeometry();
	geometry[j].setCapability(Geometry.ALLOW_INTERSECT);
	
	tgStorage[j].addChild(shape[j]);
	
	addRoot[j].addChild(tgStorage[j]);
	pickRoot.addChild(addRoot[j]);
	
	//PickTool.setCapabilities(shape[i], PickTool.INTERSECT_FULL);
	//PickTool.setCapabilities(geometry[i], PickTool.INTERSECT_FULL);
	j++;
}

