ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
vtkPVTrackballZoom.cxx
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: vtkPVTrackballZoom.cxx
5 
6  Copyright (c) Kitware, Inc.
7  All rights reserved.
8  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 #include "vtkPVTrackballZoom.h"
16 
17 #include "vtkCamera.h"
18 #include "vtkObjectFactory.h"
19 #include "vtkRenderWindow.h"
20 #include "vtkRenderWindowInteractor.h"
21 #include "vtkRenderer.h"
22 
24 
25 //-------------------------------------------------------------------------
27 {
28  this->ZoomScale = 0.0;
30 }
31 
32 //-------------------------------------------------------------------------
34 {
35 }
36 
37 //-------------------------------------------------------------------------
38 void vtkPVTrackballZoom::OnButtonDown(int, int, vtkRenderer* ren, vtkRenderWindowInteractor*)
39 {
40  int* size = ren->GetSize();
41  vtkCamera* camera = ren->GetActiveCamera();
42 
43  if (camera->GetParallelProjection() || !this->UseDollyForPerspectiveProjection)
44  {
45  this->ZoomScale = 1.5 / (double)size[1];
46  }
47  else
48  {
49  double* range = camera->GetClippingRange();
50  this->ZoomScale = 1.5 * range[1] / (double)size[1];
51  }
52 }
53 
54 //-------------------------------------------------------------------------
55 void vtkPVTrackballZoom::OnButtonUp(int, int, vtkRenderer*, vtkRenderWindowInteractor*)
56 {
57 }
58 
59 //-------------------------------------------------------------------------
61  int vtkNotUsed(x), int y, vtkRenderer* ren, vtkRenderWindowInteractor* rwi)
62 {
63  double dy = rwi->GetLastEventPosition()[1] - y;
64  vtkCamera* camera = ren->GetActiveCamera();
65  double pos[3], fp[3], *norm, k, tmp;
66 
67  if (camera->GetParallelProjection() || !this->UseDollyForPerspectiveProjection)
68  {
69  k = dy * this->ZoomScale;
70 
71  if (camera->GetParallelProjection())
72  {
73  camera->SetParallelScale((1.0 - k) * camera->GetParallelScale());
74  }
75  else
76  {
77  camera->SetViewAngle((1.0 - k) * camera->GetViewAngle());
78  }
79  }
80  else
81  {
82  camera->GetPosition(pos);
83  camera->GetFocalPoint(fp);
84  norm = camera->GetDirectionOfProjection();
85  k = dy * this->ZoomScale;
86 
87  tmp = k * norm[0];
88  pos[0] += tmp;
89  fp[0] += tmp;
90 
91  tmp = k * norm[1];
92  pos[1] += tmp;
93  fp[1] += tmp;
94 
95  tmp = k * norm[2];
96  pos[2] += tmp;
97  fp[2] += tmp;
98 
99  if (!camera->GetFreezeFocalPoint())
100  {
101  camera->SetFocalPoint(fp);
102  }
103  camera->SetPosition(pos);
104  }
105  rwi->Render();
106 }
107 
108 //-------------------------------------------------------------------------
109 void vtkPVTrackballZoom::PrintSelf(ostream& os, vtkIndent indent)
110 {
111  this->Superclass::PrintSelf(os, indent);
112  os << indent << "ZoomScale: " << this->ZoomScale << endl;
113  os << indent << "UseDollyForPerspectiveProjection: " << this->UseDollyForPerspectiveProjection
114  << endl;
115 }
int size
void PrintSelf(ostream &os, vtkIndent indent) override
void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
normal_z y
normal_z x
QTextStream & endl(QTextStream &stream)
Definition: QtCompat.h:718
vtkStandardNewMacro(vtkPVTrackballZoom)