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 Doug, > I have data of the type (x,y) -> (t,u,v) > > I display t as contours (IsoContour) and u,v as a vector field > (Flow1X,Flow1Y). No problem so far, but I'd like to be able to turn each > of them off and on via my GUI. I have done this sort of thing > successfully by removing and adding DataReferences to the Display. But, > for this case, there is one DataReference for the whole thing. I can't > remove one (e.g. t countours) without removing the other (e.g. u,v > vectors). Do I have to create 2 distinct Fields with types: > > (x,y) -> (t) > (x,y) -> (u,v) This will work. > If so, then I'd like to have my generic data reading code create > something like: > > (x,y) -> (t) > (x,y) -> (u) > (x,y) -> (v) > > But then, as far as I can tell, the Flow vectors won't work unless u and > v are part of the same Field. Is that the case? Yes, they must be part of the same Field. > Then what do I do if I > want to have individual contours of u and v also? Do I have to have > multiple copies of data all over the place? Is there a better way to > add/remove data from the Display? Given a FlatField with the MathType ((x, y) -> (u, v)) you can map: u -> Flow1X v -> Flow1Y u -> IsoContour v -> IsoContour and get flow vectors plus contours of both u and v. If you want to turn flow, u contour and v contour all on and off independently, then you'll need multiple FlatFields (or another suggestion below). No need for multiple copies of the float u and v values though, just use copy = false in calls to FlatField.setSamples() and FlatField.getFloats() and repeat the same float[] arrays inside various float[][] arrays passed to setSamples(). Another way to do this (JMet does it) is to create a complex Tuple object with MathType: ((select1 -> ((x, y) -> (u, v))), (select2 -> ((x, y) -> u)), (select3 -> ((x, y) -> v))) and to give each of the FieldImpl's (selectN -> ...) a domain set Integer1DSet(2), where one range value is the FlatField ((x, y) -> ...) you want to display, and the other range value is a FlatField with missing value (just don't call its setSamples() method). Then construct ScalarMaps of each selectN to SelectValue. The advantage of this approach is faster toggling speed. Cheers, Bill ---------------------------------------------------------- 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
visad
archives: