NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Hi Bill, a few years ago you helped me to grab my created VisAD-Shape3Ds and put them into my own scenegraph. Today I tried to grab my newly created 3D-lines for the profile and put them into my scenegraph as well. Unforetunately I get an J:\java\visad\tutorial>java LineTest6 In enumeration Located Shape3D javax.media.j3d.Shape3D@d10a5c java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:508) at java.util.ArrayList.get(ArrayList.java:320) at javax.media.j3d.GroupRetained.getChild(GroupRetained.java:408) at javax.media.j3d.Group.getChild(Group.java:224) at visad.java3d.RendererJ3D.getBranch(RendererJ3D.java:258) at LineTest6.displayChanged(LineTest6.java:165) at visad.DisplayImpl.notifyListeners(DisplayImpl.java:484) at visad.DisplayImpl.notifyListeners(DisplayImpl.java:466) at visad.DisplayImpl.doAction(DisplayImpl.java:1510) at visad.ActionImpl.run(ActionImpl.java:303) at visad.util.ThreadPool$ThreadMinnow.run(ThreadPool.java:95) exception the second time I try to get hold of the VisAD-BranchGroup. A little test programm trying to simulate the flow is attached: First I am creating my terrain and add it two the view. The terrain is grabbed and in reality put into my own scene. After that I am creating my 3D-line and add it into the VisAD-View (In reality I need some user input to create the clipping plane). Trying to grab the VisAD BranchGroup a second time, directs me to the error. I was thinking of not detaching the BranchGroup in the first place, so that I only need to grap the group once. But then I am not allowed to look for the geometry, because of capability bits, which are not set. Can I avoid the error? Is it possible to reattach the VisAD-BranchGroup, and would that help? Or is there another solution? Thanks for your help Desiree oooooooooooooooooooooooooooooooooooooooooooooooo Desiree Hilbring Institut fuer Photogrammetrie und Fernerkundung Universitaet Karlsruhe, Germany email: hilbring@xxxxxxxxxxxxxxxxxxxx # 0721 6083676 oooooooooooooooooooooooooooooooooooooooooooooooo
// Import needed classes import visad.*; import visad.util.*; //import visad.java3d.DisplayImplJ3D; import visad.java3d.*; import java.rmi.RemoteException; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.media.j3d.*; import java.util.Enumeration; public class LineTest6 implements DisplayListener{ int counter; public DisplayListener listener; DefaultRendererJ3D renderer; // Declare variables // The domain quantities longitude and latitude // and the dependent quantity rgbVal private RealType x,y,height; // Tuple to pack x and y together private RealTupleType xy; // The function (domain_tuple -> rgbVal ) private FunctionType terrain_type; // Our Data values for the domain are represented by the Set private Set set; // The Data class FlatField private FlatField terrain; // The DataReference from data to display private DataReferenceImpl data_ref; // The 2D display, and its the maps static private DisplayImpl display; private ScalarMap hoxmap,reymap,heightmap; public LineTest6(String []args) throws RemoteException, VisADException { counter = 0; this.listener = this; // Create the quantities // Use RealType(String name, Unit unit, Set set); RealType x = RealType.getRealType("x"); RealType y = RealType.getRealType("y"); RealType height = RealType.getRealType("height"); xy = new RealTupleType(x, y); RealTupleType xheight = new RealTupleType(x, height); terrain_type = new FunctionType( xy, height); FunctionType line_type = new FunctionType(x,height); float[] eastValues = {1,2,7,7,13}; float[] northValues = {3,8,1,6,3}; float[] heightValues = {1,2,3,2,1}; set = new Irregular2DSet(xy,new float[][] {eastValues, northValues}); // Create a FlatField // Use FlatField(FunctionType type, Set domain_set) terrain = new FlatField( terrain_type, set); // ...and put the rgbVal values above into it // Note the argument false, meaning that the array won't be copied terrain.setSamples(new float[][] {heightValues}); // Create Display and its maps // This is new: a 3D display display = new DisplayImplJ3D("display1"); // Get display's graphics mode control and draw scales GraphicsModeControl dispGMC = (GraphicsModeControl) display.getGraphicsModeControl(); dispGMC.setScaleEnable(true); // Create the ScalarMaps: latitude to XAxis, longitude to YAxis and // rgbVal to ZAxis and to RGB // Use ScalarMap(ScalarType scalar, DisplayRealType display_scalar) hoxmap = new ScalarMap( x, Display.XAxis ); reymap = new ScalarMap( y, Display.YAxis ); heightmap = new ScalarMap( height, Display.ZAxis ); // Add maps to display display.addMap( hoxmap ); display.addMap( reymap ); display.addMap( heightmap ); heightmap.setRange(0,15); hoxmap.setRange(0,15); reymap.setRange(0,15); // Create a data reference and set the FlatField as our data data_ref = new DataReferenceImpl("data_ref"); data_ref.setData( terrain ); renderer = new DefaultRendererJ3D(); display.addReferences( renderer, data_ref ); display.addDisplayListener(listener); // Create application window and add display to window JFrame jframe = new JFrame("LineTest6"); jframe.getContentPane().add(display.getComponent()); // Set window size and make it visible jframe.setSize(300, 300); jframe.setVisible(true); } public void makeProfileView() { try { if (counter==0) { counter++; float[][] eastNorthSamples = new float[2][50]; for (int i=0;i<50;i++) { eastNorthSamples[0][i]=i; eastNorthSamples[1][i]=i; } Gridded2DSet setGrid2D = new Gridded2DSet(xy, eastNorthSamples, 50); FlatField terrain_new = (FlatField) terrain.resample(setGrid2D,Data.WEIGHTED_AVERAGE,Data.NO_ERRORS); DataReferenceImpl data_ref5 = new DataReferenceImpl("data_ref5"); data_ref5.setData( terrain_new ); display.addReference( data_ref5 ); } } catch (VisADException ve) { System.out.println("VisAd TupleType Exception "+ve); } catch (RemoteException re) { System.out.println("RemoteExcpetion "+re); } } public synchronized void displayChanged(DisplayEvent e) { //System.out.println("DISPLAY CHANGED !!!!!!!!!!!!!!!"); if (e.getId() == DisplayEvent.TRANSFORM_DONE) { // Branch from VisAD with Shape3D BranchGroup branchGroup = renderer.getBranch(); if (branchGroup != null) { branchGroup.detach(); Enumeration enum = branchGroup.getAllChildren(); while(enum.hasMoreElements()) { System.out.println("In enumeration"); Object o; o = enum.nextElement(); if (o instanceof Shape3D) { System.out.println("Located Shape3D "+(Shape3D) o); } } } } makeProfileView(); } public static void main(String[] args) throws RemoteException, VisADException { new LineTest6(args); /* System.out.println("111111111111111"); //JFrame jframe = new JFrame("LineTest6"); //jframe.getContentPane().add(display.getComponent()); System.out.println("22222222222222222222"); // Set window size and make it visible //jframe.setSize(300, 300); //jframe.setVisible(true); System.out.println("3333333333333333333"); */ } }
visad
archives: