- 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());
-
- }
-
-// private void updatePickRay(double x , double y) {
-// Ray ray = vtkUtil.createMouseRay(panel.GetRenderer(), x, y);
-//
-//
-// System.out.println(ray.pos + " " + ray.dir);
-// vtkPoints linePoints = new vtkPoints();
-// linePoints.InsertPoint(0,ray.pos.x, ray.pos.y, ray.pos.z);
-// linePoints.InsertPoint(1, ray.pos.x + ray.dir.x, ray.pos.y + ray.dir.y, ray.pos.z + ray.dir.z);
-// vtkLine aLine = new vtkLine();
-// aLine.GetPointIds().SetId(0, 0);
-// aLine.GetPointIds().SetId(1, 1);
-// vtkUnstructuredGrid aLineGrid = new vtkUnstructuredGrid();
-// aLineGrid.Allocate(1, 1);
-// aLineGrid.InsertNextCell(aLine.GetCellType(), aLine.GetPointIds());
-// aLineGrid.SetPoints(linePoints);
-// vtkDataSetMapper aLineMapper = new vtkDataSetMapper();
-// aLineMapper.SetInput(aLineGrid);
-// vtkActor aLineActor = new vtkActor();
-// aLineActor.SetMapper(aLineMapper);
-// aLineActor.GetProperty().SetDiffuseColor(.2, 1, 1);
-//
-// if (rayActor != null) {
-// panel.GetRenderer().RemoveActor(rayActor);
-// rayActor.Delete();
-// }
-// rayActor = aLineActor;
-// panel.GetRenderer().AddActor(rayActor);
-//
-// linePoints.Delete();
-// aLine.Delete();
-// aLineGrid.Delete();
-// aLineMapper.Delete();
-// panel.repaint();
-// }
-//
-// private vtkActor rayActor;
-
- @Override
- public boolean mouseMoved(MouseEvent e) {
- lastX = e.getX();
- lastY = e.getY();
-
- if (!panel.getComponent().isFocusControl())
- return false;
- List<vtkProp> prevHover = new ArrayList<vtkProp>();
- prevHover.addAll(hoverActor);
- hoverActor.clear();
- vtkProp pick[] = panel.pick(e.getX(),e.getY());
- if (pick != null) {
- for (vtkProp p : pick)
- hoverActor.add(p);
- }
-
- if (!prevHover.containsAll(hoverActor) || !hoverActor.containsAll(prevHover)) {
- fireHoverChanged();
- }
- return true;
- }
-
- public List<vtkProp> getSelectActor() {
- return selectActors;
- }
-
- public List<vtkProp> getHoverActor() {
- return hoverActor;
- }
-
- private List<ISelectionChangedListener> selectionListeners = new ArrayList<ISelectionChangedListener>();
-
- @Override
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- selectionListeners.add(listener);