Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

Error on 3D IsoSurfaces

Im trying to do isosurfaces on 3d data; im following the examples in
test01 and test59;
i get the following VisAD Exception:

java.lang.NullPointerException
        at visad.Irregular3DSet.makeSpatial(Irregular3DSet.java:179)
        at visad.ShadowType.assembleSpatial(ShadowType.java:1678)
        at
visad.ShadowFunctionOrSetType.doTransform(ShadowFunctionOrSetType.java:1
605)
        at
visad.java3d.ShadowFunctionOrSetTypeJ3D.doTransform(ShadowFunctionOrSetT
ypeJ3D.java:102)
        at
visad.java3d.DefaultRendererJ3D.doTransform(DefaultRendererJ3D.java:86)
        at visad.java3d.RendererJ3D.doAction(RendererJ3D.java:180)
        at visad.DisplayImpl.doAction(DisplayImpl.java:852)
        at visad.ActionImpl.run(ActionImpl.java:186)
        at visad.util.ThreadPool$ThreadMinnow.run(ThreadPool.java:86)

here's the jist of the code:

    int sizeX = xaxis.getNumElements();
    int sizeY = yaxis.getNumElements();
    int sizeZ = zaxis.getNumElements();

    int[] index = {0, 0, 0};
    float[][] xyz = new float[3][(int) arr.getSize()];
    float[][] f = new float[1][(int) arr.getSize()];

    long startTime = System.currentTimeMillis();
    for (int k=0; k<sizeZ; k++) {
     for (int j=0; j<sizeY; j++) {
      for (int i=0; i<sizeX; i++) {
        int elem = i + (j + k*sizeY)*sizeX;
        index[0] = k;
        index[1] = j;
        index[2] = i;
        f[0][elem] = arr.getFloat(index);

        xyz[0][elem] = (float) xaxis.getCoordValue(i);
        xyz[1][elem] = (float) yaxis.getCoordValue(j);
        xyz[2][elem] = (float) zaxis.getCoordValue(k);
      }
     }
    }

    RealType xtype = VisUtil.RealTypeFactory(xname);
    RealType ytype = VisUtil.RealTypeFactory(yname);
    RealType ztype = VisUtil.RealTypeFactory(zname);
    RealType ftype = VisUtil.RealTypeFactory(fname);

    RealTupleType xyzType = new RealTupleType(xtype, ytype, ztype);
    FunctionType ft = new FunctionType(xyzType, ftype);

    Gridded3DSet xyzSet = new Gridded3DSet(xyzType, xyz, nx, ny, nz);
    FlatField ffld = new FlatField(ft, xyzSet);
    ffld.setSamples(f);

    // create a DataReference
    DataReference setRef = new DataReferenceImpl("Visad_DataReference");
    setRef.setData(ffld);

    // create a Display using Java3D
    DisplayImpl display = new DisplayImplJ3D("Visad3D_Display");

    // map plot to display coordinates
    display.addMap(new ScalarMap(xtype, Display.XAxis));
    display.addMap(new ScalarMap(ytype, Display.YAxis));
    display.addMap(new ScalarMap(ytype, Display.ZAxis));

    display.addMap(new ScalarMap(ftype, Display.IsoContour));


    // link the Display to the data
    display.addReference(setRef);

    // add axes
    GraphicsModeControl mode = display.getGraphicsModeControl();
    mode.setScaleEnable(true);

    // return a JComponent of preferred size
    JComponent c = (JComponent) display.getComponent();
    c.setPreferredSize(displaySize);
    return c;


 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690