}
public void InteractionModeRotate()
- {
- this.InteractionMode = 1;
- }
-
- public void InteractionModeTranslate()
- {
- this.InteractionMode = 2;
- }
-
- public void InteractionModeZoom()
- {
- this.InteractionMode = 3;
- }
-
+ {
+ this.InteractionMode = 1;
+ }
+
+ public void InteractionModeTranslate()
+ {
+ this.InteractionMode = 2;
+ }
+
+ public void InteractionModeZoom()
+ {
+ this.InteractionMode = 3;
+ }
+
public void resetCameraClippingRange() {
- Lock();
- ren.ResetCameraClippingRange();
- UnLock();
- }
+ Lock();
+ ren.ResetCameraClippingRange();
+ UnLock();
+ }
- public void resetCamera() {
- Lock();
- ren.ResetCamera();
- UnLock();
- }
-
- public void mousePressed(MouseEvent e)
- {
-
- if (ren.VisibleActorCount() == 0) return;
- rw.SetDesiredUpdateRate(activeRate);
- lastX = e.getX();
- lastY = e.getY();
- if ((e.getModifiers()==InputEvent.BUTTON2_MASK) ||
- (e.getModifiers()==(InputEvent.BUTTON1_MASK | InputEvent.SHIFT_MASK)))
- {
- InteractionModeTranslate();
- }
- else if (e.getModifiers()==InputEvent.BUTTON3_MASK)
- {
- InteractionModeZoom();
- }
- else
- {
- InteractionModeRotate();
- }
- }
-
- public void mouseReleased(MouseEvent e)
- {
- rw.SetDesiredUpdateRate(passiveRate);
- }
-
+ public void resetCamera() {
+ Lock();
+ ren.ResetCamera();
+ UnLock();
+ }
+
+ public void mousePressed(MouseEvent e)
+ {
+
+ if (ren.VisibleActorCount() == 0) return;
+ rw.SetDesiredUpdateRate(activeRate);
+ lastX = e.getX();
+ lastY = e.getY();
+ if ((e.getModifiers()==InputEvent.BUTTON2_MASK) ||
+ (e.getModifiers()==(InputEvent.BUTTON1_MASK | InputEvent.SHIFT_MASK)))
+ {
+ InteractionModeTranslate();
+ }
+ else if (e.getModifiers()==InputEvent.BUTTON3_MASK)
+ {
+ InteractionModeZoom();
+ }
+ else
+ {
+ InteractionModeRotate();
+ }
+ }
+
+ public void mouseReleased(MouseEvent e)
+ {
+ rw.SetDesiredUpdateRate(passiveRate);
+ }
+
-
- public void mouseDragged(MouseEvent e)
- {
- if (ren.VisibleActorCount() == 0) return;
- int x = e.getX();
- int y = e.getY();
- // rotate
- if (this.InteractionMode == 1)
- {
- cam.Azimuth(lastX - x);
- cam.Elevation(y - lastY);
- if (doNotRotate)
- cam.SetRoll(0);
- cam.OrthogonalizeViewUp();
- resetCameraClippingRange();
- panel.UpdateLight();
- }
- // translate
- if (this.InteractionMode == 2)
- {
- double FPoint[];
- double PPoint[];
- double APoint[] = new double[3];
- double RPoint[];
- double focalDepth;
-
- // get the current focal point and position
- FPoint = cam.GetFocalPoint();
- PPoint = cam.GetPosition();
-
- // calculate the focal depth since we'll be using it a lot
- ren.SetWorldPoint(FPoint[0],FPoint[1],FPoint[2],1.0);
- ren.WorldToDisplay();
- focalDepth = ren.GetDisplayPoint()[2];
-
- APoint[0] = rw.GetSize()[0]/2.0 + (x - lastX);
- APoint[1] = rw.GetSize()[1]/2.0 - (y - lastY);
- APoint[2] = focalDepth;
- ren.SetDisplayPoint(APoint);
- ren.DisplayToWorld();
- RPoint = ren.GetWorldPoint();
- if (RPoint[3] != 0.0)
- {
- RPoint[0] = RPoint[0]/RPoint[3];
- RPoint[1] = RPoint[1]/RPoint[3];
- RPoint[2] = RPoint[2]/RPoint[3];
- }
-
- /*
- * Compute a translation vector, moving everything 1/2
- * the distance to the cursor. (Arbitrary scale factor)
- */
- cam.SetFocalPoint(
- (FPoint[0]-RPoint[0])/2.0 + FPoint[0],
- (FPoint[1]-RPoint[1])/2.0 + FPoint[1],
- (FPoint[2]-RPoint[2])/2.0 + FPoint[2]);
- cam.SetPosition(
- (FPoint[0]-RPoint[0])/2.0 + PPoint[0],
- (FPoint[1]-RPoint[1])/2.0 + PPoint[1],
- (FPoint[2]-RPoint[2])/2.0 + PPoint[2]);
- resetCameraClippingRange();
- }
- // zoom
- if (this.InteractionMode == 3)
- {
- double zoomFactor;
- //double clippingRange[];
-
- zoomFactor = Math.pow(1.02,(y - lastY));
- if (cam.GetParallelProjection() == 1)
- {
- cam.SetParallelScale(cam.GetParallelScale()/zoomFactor);
- }
- else
- {
- cam.Dolly(zoomFactor);
- resetCameraClippingRange();
- }
- }
- lastX = x;
- lastY = y;
- panel.Render();
- }
+
+ public void mouseDragged(MouseEvent e)
+ {
+ if (ren.VisibleActorCount() == 0) return;
+ int x = e.getX();
+ int y = e.getY();
+ // rotate
+ if (this.InteractionMode == 1)
+ {
+ cam.Azimuth(lastX - x);
+ cam.Elevation(y - lastY);
+ if (doNotRotate)
+ cam.SetRoll(0);
+ cam.OrthogonalizeViewUp();
+ resetCameraClippingRange();
+ panel.UpdateLight();
+ }
+ // translate
+ if (this.InteractionMode == 2)
+ {
+ double FPoint[];
+ double PPoint[];
+ double APoint[] = new double[3];
+ double RPoint[];
+ double focalDepth;
+
+ // get the current focal point and position
+ FPoint = cam.GetFocalPoint();
+ PPoint = cam.GetPosition();
+
+ // calculate the focal depth since we'll be using it a lot
+ ren.SetWorldPoint(FPoint[0],FPoint[1],FPoint[2],1.0);
+ ren.WorldToDisplay();
+ focalDepth = ren.GetDisplayPoint()[2];
+
+ APoint[0] = rw.GetSize()[0]/2.0 + (x - lastX);
+ APoint[1] = rw.GetSize()[1]/2.0 - (y - lastY);
+ APoint[2] = focalDepth;
+ ren.SetDisplayPoint(APoint);
+ ren.DisplayToWorld();
+ RPoint = ren.GetWorldPoint();
+ if (RPoint[3] != 0.0)
+ {
+ RPoint[0] = RPoint[0]/RPoint[3];
+ RPoint[1] = RPoint[1]/RPoint[3];
+ RPoint[2] = RPoint[2]/RPoint[3];
+ }
+
+ /*
+ * Compute a translation vector, moving everything 1/2
+ * the distance to the cursor. (Arbitrary scale factor)
+ */
+ cam.SetFocalPoint(
+ (FPoint[0]-RPoint[0])/2.0 + FPoint[0],
+ (FPoint[1]-RPoint[1])/2.0 + FPoint[1],
+ (FPoint[2]-RPoint[2])/2.0 + FPoint[2]);
+ cam.SetPosition(
+ (FPoint[0]-RPoint[0])/2.0 + PPoint[0],
+ (FPoint[1]-RPoint[1])/2.0 + PPoint[1],
+ (FPoint[2]-RPoint[2])/2.0 + PPoint[2]);
+ resetCameraClippingRange();
+ }
+ // zoom
+ if (this.InteractionMode == 3)
+ {
+ double zoomFactor;
+ //double clippingRange[];
+
+ zoomFactor = Math.pow(1.02,(y - lastY));
+ if (cam.GetParallelProjection() == 1)
+ {
+ cam.SetParallelScale(cam.GetParallelScale()/zoomFactor);
+ }
+ else
+ {
+ cam.Dolly(zoomFactor);
+ resetCameraClippingRange();
+ }
+ }
+ lastX = x;
+ lastY = y;
+ panel.Render();
+ }
-
+
private List<vtkProp> selectActors = new ArrayList<vtkProp>();
private List<vtkProp> hoverActor = new ArrayList<vtkProp>();
-
+
@Override
public void mouseClicked(MouseEvent e) {
if (!panel.isFocusOwner())
@Override
public void mouseMoved(MouseEvent e) {
lastX = e.getX();
- lastY = e.getY();
-
+ lastY = e.getY();
+
if (!panel.isFocusOwner())
return;
List<vtkProp> prevHover = new ArrayList<vtkProp>();
}
private List<ISelectionChangedListener> selectionListeners = new ArrayList<ISelectionChangedListener>();
-
+
@Override
public void addSelectionChangedListener(ISelectionChangedListener listener) {
selectionListeners.add(listener);
private List<ISelectionChangedListener> hoverListeners = new ArrayList<ISelectionChangedListener>();
-
+
public void addHoverChangedListener(ISelectionChangedListener listener) {
hoverListeners.add(listener);
Lock();
cam.SetFocalPoint(x, y, z);
if (doNotRotate)
- cam.SetRoll(0);
- cam.OrthogonalizeViewUp();
- resetCameraClippingRange();
- panel.UpdateLight();
+ cam.SetRoll(0);
+ cam.OrthogonalizeViewUp();
+ resetCameraClippingRange();
+ panel.UpdateLight();
UnLock();
}