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 Eugene, Currently there is no way to move lights or control lighting parameters. VisAD uses the same policy we have used for years in Vis5D - the light is at infinity in the direction of the users eye (along with a light from 180 degrees away so that we don't have to worry about the signs of normals). There are two approaches to represent graphs: 1. Represent your graph as a set of points and edges in 2-D or 3-D, as an Irregular2DSet or Irregular3DSet, constructed using a DelaunayCustom (see Section 3.5.5 of the Developers Guide). You can use this Set as the domain of a Field, with Field values attached to each vertex (but not to each edge). Also, VisAD currently does not include a display mode to visualize a set as its edges. The default visualization will be as faces, but it can also be visualized as vertices in 'pointMode'. 2. Represent your graph as complex nested Fields with MathTypes such as: (vertex -> (list -> edge)) (edge -> (vertex, vertex)) where list is a sort of dummy variable that indexes the list of edges meeting at a vertex. The current VisAD displays won't be able to do much with these fields, though. The second MathType is degenerate from the display point of view, with vertex occuring more than once in a RealTuple. For this second approach to work, you'd need a custom DataRenderer tuned to work with specific MathTypes and interpret them as graphs. It would be a bit tricky. Your DataRenderer would take an array of two DataReferences, similar to Luz Laemmer's custom DataRenderer for texture mapping (see the link on the VisAD web page). You'd want to check the MathTypes and ScalarMaps to make sure they obeyed the assumptions of your DataRenderer. You would probably want to elaborate the MathTypes to something like: (vertex -> ((x, y, z), (list -> edge), (vertex_param1, ..., vertex_paramN))) (edge -> (vertex1, vertex2), (edge_param1, edge_paramN))) Here (x, y, z) gives the spatial location of a vertex, the Fields would all have IntegerSet domain sets (so edge, vertex and list are all RealTypes taking integer values), vertex1 and vertex2 are two different RealTypes for vertex to avoid degeneracy, and vertex_param* and edge_param* are parameters attached to vertices and edges to be rendered as you desire according to ScalarMaps. The custom DataRenderer would probably test to make that x, y and z are mapped to XAxis, YAXis and ZAxis. Interpreting ScalarMaps involving vertex_param* and edge_param* could be a little tricky, depending on how general yuo want to get. You can always just throw a BadMappingException of UnimplementedException if you get ScalarMaps you don't like. If you decide to try this approach, feel free to ask us for advice. 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: