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;