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 Tennessee, > We are making heavy use of contour lines in our applications (hardly > surprising so far) ... A couple of points have come up where we would > like to improve on the way things are done. > > Firstly, we find that it is possible to zoom in over an area where no > contour labels are visible. This is undesirable, so we would really like > to force a relabelling of contour lines based on what is currently > visible after every zoom action. > > Also, the contour lines are clearly linear lines of best fit. Just > taking a guess, it looks like the contour lines are built by drawing a > straight line until the line of best fit diverges too much from the > data, at which point a new line is started. We would like to use a > smoother line-fitting algorithm, which I suppose would be done by > fitting nonlinear lines of best fit instead. > > I'm happy to do the legwork, but am having trouble finding where the > relevant areas of code are. I'd really appreciate an overview of the > contour labelling algorithm and event structure, and also a description > of how the current contour fitting algorithm works. Actually, contours are composed of straight lines across each grid box. Say it is drawing the "10" contour. It finds two adjacent grid points above and below the value 10, then find the point on the connecting edge where the grid point values interpolate to 10. There must be 2 (or 4) edges with such interpolated 10 points in a grid box, and a straight line is drawn between them (2 straight lines for 4 points). Tom Rink greatly improved the contour labels a year or two ago, so perhaps he can give you some guidance about that. Much of the code is in visad/Contour2D.java. Also relevant are the makeContour() method in visad/ShadowType.java and the makeIsoLines() methods in various visad/*Set.java classes. You can do what you want as a custom DataRenderer (see the tutorial). That way you don't have to change any of the system's core code. If you want to make the changes in system core code, then we will look very closely at what you have done and get pretty involved in telling you what you can and cannot do. Good luck, Bill
visad
archives: