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 Bill, Thanks for the suggested fix.I have tried to programmatically zoom the display in the test harness, without luck in addressing the symptoms of the bug.
On your suggestion, I tried simply updating the projection matrix with its current value:
private void runTestFix(Display display) throws Exception { Thread.sleep(2000);ProjectionControl projectionControl = ((DisplayImplJ3D)display).getProjectionControl();
double[] matrix = projectionControl.getMatrix(); projectionControl.setMatrix(matrix); }I also tried a progressive zoom, and a progressive zoom with a reset, both of which had no effect on the bug:
private void runTestFix(Display display) throws Exception { Thread.sleep(2000);ProjectionControl projectionControl = ((DisplayImplJ3D)display).getProjectionControl();
double[] matrix = projectionControl.getMatrix(); double [] base = {matrix[0], matrix[5], matrix[10]}; for (int i = 0; i < 4; i++) { matrix[0] += 0.25; matrix[5] += 0.25; matrix[10] += 0.25; projectionControl.setMatrix(matrix); } // reset matrix[0] = base[0]; matrix[5] = base[1]; matrix[10] = base[2]; projectionControl.setMatrix(matrix); }A virtual desktop change will force a re-draw that will address the symptom, causing the missing geometry to be displayed again.
Interestingly, a zoom in our operational application does cause the geometry to be displayed most of the time for most types of geometry, although was contingent on the amount of zoom (and I presume the number of triggered internal display change events, or similar).
Sincerely, Dr Jason Brownlee Software Engineer Australian Bureau of Meteorology On 04/20/2010 10:54 PM, hiding@xxxxxxxxx wrote:
Jason, Thanks for your very clear statement of the problem. I no longer work on VisAD, but one part of your message caught my eye:Analysis shows the geometry is still in the scene graph, and is live. Minimizing, resizing, further add/remove data references, and forced doAction on the display do no correct the bug. Major operations on the display that force a full re-draw (switching virtual desktops on Linux, zoom operation in our application) will cause the geometry to be displayed again.If this bug proves to be difficult to track down, or is even a bug in Java3D, one work around would be, whenever data is added to or removed from a display, to trigger a delayed (say, after 0.5 second) redraw. My memory of Java3D is a bit shaky, but this might be done by setting the projection matrix (to the same value it currently has). Good luck, Bill
visad
archives: