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.
John, Two excellent questions. > 1) If I want, say, the confluence of the south flowing river and the > east feeder river to be represented by a node, ie a very small circle, > how do I render this circle? Given your example, I can devise a set of > node coordinates and radii. What eludes me is how to access the > API-specific method for drawing these circles (if that's how you'ld > approach this; typically graphic api's offer ellipses and other shapes). > I could also use rectangles, but could create these with line segments. > Anyway, that's the idea. VisAD is designed to shield applications from the details of graphics API's. Once you've got your data in VisAD data objects, you only need a couple methods of DisplayImpl and ScalarMap in order to display your data. Of course, as your questions illustrate, sometimes applications need access to graphics APIs in order to customize depictions of data. In your case, your river 'Sets' are transformed into graphics geometry by the make1DGeometry method of Gridded2DSet and UnionSet. One approach would be to extend Gridded2DSet and UnionSet, and override the implementation of the make1DGeometry method in your extension classes, to make the sort of graphics geometry you want. Then construct your river systems using your extensions to Gridded2DSet and UnionSet. Of course, doing this will take you into the world of computational geometry, which can be a pain. A simpler apporach might be to reprent your river systems using a Tuple consisting of two Sets: the first your current UnionSet of Gridded2DSets each with manifold dimension = 1, the second a UnionSet of SingletonSets (which have manifold dimension = 0) giving the locations of river confluences. Sets with manifold dimension = 0 are depicted as squares (size determined by a ConstantMap to Display.PointSize) rather than circles. You could change this depiction by extending SingletonSet to override the implementation of the makePointGeometry method to draw circles rather than squares. Right now, SingletonSet is the only Set class with manifold dimension = 0, and your question makes me think that there should be constructors for Gridded1DSet, Gridded2DSet and Gridded3DSet with manifold dimension = 0. One of these days. > 2) How do I render lables? For example, I would want to label a feeder > river as "Calsag Inflow" and a node as "Calsag Confluence", and so > forth. Right now, you'd need to extend DataRenderer, DisplayRenderer and one or more of the ShadowType classes, plus define a new instance of DisplayRealType for text display. The idea is that you could have a FunctionType like: (list_index -> (..., x, y, text, ...)) where list_index, x and y are RealTypes and text is a TextType. Then you'd construct ScalarMaps x -> Display.XAxis, y -> Display.YAxis and text -> Display.Text and the DataRenderer would render the text values at the associated x and y locations. Your DisplayRenderer extension would need to override the legalDisplayScalar method to allow Display.Text, and your DataRenderer extension would need to override the appropriate makeShadow*Type method to return your extension of some Shadow*TypeJ*D class. If you wanted it to work with both Java3D and Java2D, you'd need to extend both sets of classes. However, this all sounds like such a good idea (text rendering) that we will add it to the existing DefaultRendererJ3D and DefaultRendererJ2D classes, and define Display.Text as a system intrinsic. The big question is whether I can squeeze it in before my absence during October and November (working at ECMWF). I cannot promise when we will do it, but we will do it. Cheers, Bill ---------------------------------------------------------- Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI 53706 whibbard@xxxxxxxxxxxxx 608-263-4427 fax: 608-263-6738 http://www.ssec.wisc.edu/~billh/vis.html "kill cross-platform Java by growing the polluted Java market" - from an internal Microsoft planning document
visad
archives: