- Lock();
- ren.ResetCameraClippingRange();
- UnLock();
- }
-
- public void resetCamera() {
- Lock();
- ren.ResetCamera();
- UnLock();
- }
-
- public boolean mousePressed(MouseEvent e)
- {
-
- if (ren.VisibleActorCount() == 0) return false;
- 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();
- }
- return true;
- }
-
- public boolean mouseReleased(MouseEvent e)
- {
- rw.SetDesiredUpdateRate(passiveRate);
- return true;
- }
-
-
-
- public boolean mouseDragged(MouseEvent e)
- {
- if (ren.VisibleActorCount() == 0) return false;
- 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.refresh();
- return true;
- }
-
-
- private List<vtkProp> selectActors = new ArrayList<vtkProp>();
- private List<vtkProp> hoverActor = new ArrayList<vtkProp>();
-
- @Override
- public boolean mouseClicked(MouseEvent e) {
- if (!panel.getComponent().isFocusControl())
- return false;
- if (e.getButton() != MouseEvent.BUTTON1)
- return false;
- vtkProp spick[] = panel.pick(e.getX(), e.getY());
- if (spick != null && spick.length > 0) {
- for (vtkProp selectActor : spick) {
- if (!e.isControlDown()) {
- selectActors.clear();
- selectActors.add(selectActor);
- } else {
- if (selectActors.contains(selectActor))
- selectActors.remove(selectActor);
- else
- selectActors.add(selectActor);
- }
- }
- fireSelectionChanged();
- } else if (!e.isControlDown()) {
- selectActors.clear();
- fireSelectionChanged();
- }
- return true;
-// if (e.getClickCount() > 1)
-// updatePickRay(e.getX(), e.getY());
-