[vtkusers] Issues with picking in VTK Java on Mac OS X

Kevin Milner kmilner at usc.edu
Wed Feb 1 19:19:03 EST 2017


Hello. I develop a VTK Java application for visualizing georeferenced 
earthquake data, SCEC-VDO (http://scecvdo.usc.edu/). One of the 
important features of this software is the ability to click on elements 
of the 3D view to perform actions or view information. This works 
perfectly on Windows and Linux, but does not work on Macs. I believe 
that this is due to an internal bug in the Mac version of VTK. We use 
the vtkJoglPanelComponent to embed the 3D view into our Java application.

Here is the code that I use to pick items (where renderWindow is a 
vtkJoglPanelComponent):

         renderWindow.getComponent().addMouseListener(new MouseAdapter() {
             public void mousePressed(MouseEvent e) {
                 int[] clickPos = 
renderWindow.getRenderWindowInteractor().GetEventPosition();

                 int x = clickPos[0];
                 int y = clickPos[1];

                 cellPicker.Pick(x, y, 0, renderWindow.getRenderer());
                 if (cellPicker.GetActor() != null) {
                     // do stuff
                     ...
                 }
             }
         });

The first bug is that the y value of 
getRenderWindowInteractor().GetEventPosition() is just flat out wrong on 
the Mac (correct on Windows and Linux). For example, if I click near the 
top of my window with height 700, if will give me a y value that is 
greater than 1300! It should actually be very small, as y should be zero 
at the top of the window and 700 at the bottom of the window. I can get 
around this, and make it match the position on Linux/Windows with the 
following fix using the mouseEvent (e) and the height of the 3D view 
component:

                 int height = renderWindow.getComponent().getHeight();
                 int calcY = (height - e.getY()) - 1;
                 int x = e.getX();
                 int y = calcY;

Now when I click on a location in the 3D viewer, the x/y coordinates 
match the results on Linux/Windows. But picking actors still doesn't 
work. Instead, VTK thinks that I have clicked somewhere roughly between 
where I actually clicked and the bottom left corner. So if I click on 
the top right corner of the viewer, it thinks that I clicked in the 
middle. If I click on the top left, if thinks that I clicked middle 
left. If I click on the middle of the viewer, it thinks that I clicked 
1/4 up and right of the lower left corner. I have posted a video which 
demonstrates this bug:

http://sendvid.com/yqz1qww2

In this video, whatever actor is clicked turns red. This works as 
expected on Windows/Linux, both with and without the x/y fix mentioned 
above. Without the previous fix on a Mac, the behavior is similar but 
centered around the top left corner and sometimes doesn't detect clicks 
at all (due to y values which make no sense).

Any ideas what could be going on? I have experienced this behavior on 
all 4 Mac's on which I have tried the software.

Thanks,
Kevin Milner


More information about the vtkusers mailing list