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 Rob, I missed this little problem because I normally use the IDV to test changes/enhancements to the Contour classes and most of the time there's an alpha component used.In your case, there wasn't, and hence the Exception.
If your application can be distributed, I'd be happy to test changes against it as well. Tom Rob Hackett wrote:
HiI've had a look at the new release of the source code and I noticed what seems like a minor bug relating to the message from James Kelly which I have quoted below.The new version of the source code solves James' problem, but shortly afterwards fails with the following error ...java.lang.ArrayIndexOutOfBoundsException: 3 at visad.Contour2D.contour(Contour2D.java: ) at visad.Gridded3DSet.makeIsoLines(Gridded3DSet.java:2180) at visad.ShadowType.makeContour(ShadowType.java:3846) at visad.java3d.ShadowTypeJ3D.makeContour(ShadowTypeJ3D.java:473)at visad.ShadowFunctionOrSetType.doTransform(ShadowFunctionOrSetType.java:2141) at visad.java3d.ShadowFunctionOrSetTypeJ3D.doTransform(ShadowFunctionOrSetTypeJ3D.java:159) at visad.java3d.DefaultRendererJ3D.doTransform(DefaultRendererJ3D.java:134)at visad.java3d.RendererJ3D.doAction(RendererJ3D.java:181) at visad.DisplayImpl.doAction(DisplayImpl.java:1711) at visad.ActionImpl.run(ActionImpl.java:364) at visad.util.ThreadPool$ThreadMinnow.run(ThreadPool.java:95)Looking at the source for Contour2D.java I can see that this corresponds to the following line ...auxLevels1[3] = new byte[numv1[0]+cnt];In this case, auxLevels is defined as having a length of 3, hence the array exception.I notice that in the preceding lines of Contour2D.java, references to auxLevels[3] are all protected by an "if statement" which ensures that the array is big enough. And when I add a similar "if statement" to line 1340 the problem disappears.Can you confirm that this is a safe solution to this problem? thanks, Rob From James Kelly ... Hi, Under some circumstances, I'm having trouble contouring a simple 2D FlatField, using the latest visad release. It works ok with a release from last year ( size 4444712 bytes, Apr 2006). Here are the details in brief: I want to contour an atmospheric pressure field (P: mean sea level pressure) at 2hPa intervals. If I load a field that has a size of 80x104 rows and columns it works ok. If I load the same field, but with a larger domain (112x120) it fails with the exception below: java.lang.ArrayIndexOutOfBoundsException: 21 at visad.ContourQuadSet.add(Contour2D.java:2968) at visad.ContourStripSet.add(Contour2D.java:3456) at visad.Contour2D.contour(Contour2D.java:1239) at visad.Gridded3DSet.makeIsoLines(Gridded3DSet.java:2180) at visad.ShadowType.makeContour(ShadowType.java:3805) It does work if I don't specify the 2hPa contour interval, and use a default interval. Also, as mentioned, it works with an earlier version of visad. Here's how to reproduce the problem: Download the following 2 files to your working directory: ftp://ftp.ssec.wisc.edu/pub/incoming/usmodel.nc ftp://ftp.ssec.wisc.edu/pub/incoming/usmodel_works.nc Save the jython program at the end of this email to your working directory (eg as test_contour.py). Run it using "./jy test_contour.py" [comment out the line "ci.setContourInterval(2.0, 0.0, 1050.0, 0.0)" and it works] Thanks for any help, James Jython program: from visad.python.JPythonMethods import * from visad import ScalarMap, Display from visad.data.netcdf import Plain import subs, graph, sys width = 800 height = 600 filename_works = "usmodel_works.nc" filename = "usmodel.nc" print "reading from netCDF..." netCDFReader = Plain() model = netCDFReader.open(filename) model_works = netCDFReader.open(filename_works) dom = domainType(model) dom_1 = dom.getComponent(0) dom_2 = dom.getComponent(1) rng = rangeType(model) rngMap = ScalarMap(rng, Display.IsoContour) xMap = ScalarMap(dom_1, Display.XAxis) yMap = ScalarMap(dom_2, Display.YAxis) maps = (xMap, yMap, rngMap) disp = subs.makeDisplay(maps) subs.addData("contours", model_works, disp) ci = rngMap.getControl() ci.enableLabels(1) ci.enableContours(1) ci.setContourInterval(2.0, 0.0, 1050.0, 0.0) subs.setBoxSize(disp, .80) subs.setAspectRatio(disp, float(width)/float(height)) subs.showDisplay(disp,width,height,"contour test") # now show second model field which doesn't work: subs.addData("contours don't work", model, disp)
============================================================================== To unsubscribe visad, visit: http://www.unidata.ucar.edu/mailing-list-delete-form.html ==============================================================================
visad
archives: