Hi Edward,
You can extract geometry data from VisAD scene graphs, and in fact
there is a long discussion thread about this issue in Unidata's
VisAD mailing list archive:
http://www.unidata.ucar.edu/staff/russ/visad/
under the subject "Delaunay and Java3D".
Basically, in a DisplayImplJ3D you do something like:
ScalarMap xmap = new ScalarMap(whatever, Display.XAxis);
display.addMap(xmap);
xmap.setRange(-1.0, 1.0); // also need this for any ScalarMaps
// to YAxis or ZAxis, to make sure
// display values equal data values
DefaultRendererJ3D contour_renderer = new DefaultRendererJ3D();
display.addReferences(contour_renderer, contour_data_ref);
DefaultRendererJ3D flow_renderer = new DefaultRendererJ3D();
display.addReferences(flow_renderer, contour_data_ref);
DisplayListener listener = new YourDisplayListenerClass();
display.addDisplayListener(listener);
Then in the displayChanged() method of listener:
if (e.getId() == DisplayEvent.TRANSFORM_DONE) {
BranchGroup contour_branch = contour_renderer.getBranch();
BranchGroup flow_branch = flow_renderer.getBranch();
// now the Shape3Ds you want are the children or
// grandchildren or greatgrandchildren of these branchs
// (I'm not sure which offhand)
// then:
LineArray contour_geometry
(LineArray) contour_shape.getGeometry();
int ncontour_vertices = contour_geometry.getVertexCount();
float[] contour_coordinates = new float[3 * ncontour_vertices];
contour_shape.getCoordinates(0, contour_coordinates);
// now each group of six values in contour_coordinates defines
// a line segment of the contours: x1, y1, z1, x2, y2, z2
// do not enable contour labels, or your line segments will
// include the font strokes for the label characters
// similarly for flow, but note they will include line segments
// for the little arrow heads in addition to the arrow shafts
}
Good luck,
Bill
Edward Stanford wrote:
>
> Hello, everyone,
>
> I need to use VisAD to generate contours and flow maps of a dataset,
> and
> then import those contours into a GIS application. To do this, it would be
> extremely convenient to be able to get the list of vector points describing
> the contours. My other alternative is to create a display, plot the
> contours, extract a bitmap, set the bitmap background to something
> transparent, and import the result into my GIS application. This seems
> awkward at best.
>
> Looking at the javadoc, I didn't see any obvious accessors. Looking
> at
> the source code, I found a static method contour( long parameter list ) in
> Contour2D.java which ignores all the type safety restrictions of the VisAD
> data model, but which otherwise appears to give me what I need. Still, I
> can't help but think that there must be a better way, especially since this
> doesn't extend to flows anyway.
>
> I'm perfectly happy to extend the source code myself, if the necessary
> accessors don't exist, but I sure would appreciate any pointers anyone can
> give me as to where/how contours and flows are calculated for a
> display. greps for contour and flow in the source tree didn't flash any
> obvious neon signs.
>
> Edward
--
----------------------------------------------------------
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI 53706
hibbard@xxxxxxxxxxxxxxxxx 608-263-4427 fax: 608-263-6738
http://www.ssec.wisc.edu/~billh/vis.html