17 #include "vtkCamera.h"
19 #include "vtkObjectFactory.h"
20 #include "vtkRenderWindow.h"
21 #include "vtkRenderWindowInteractor.h"
22 #include "vtkRenderer.h"
54 vtkCamera* camera = ren->GetActiveCamera();
56 camera->GetPosition(pos);
57 camera->GetFocalPoint(fp);
59 if (camera->GetParallelProjection())
61 camera->OrthogonalizeViewUp();
62 double* up = camera->GetViewUp();
63 double* vpn = camera->GetViewPlaneNormal();
66 camera->GetViewUp(up);
67 camera->GetViewPlaneNormal(vpn);
71 int*
size = ren->GetSize();
72 double dx = (double)(
x - rwi->GetLastEventPosition()[0]) / (
double)(
size[1]);
73 double dy = (double)(rwi->GetLastEventPosition()[1] -
y) / (
double)(
size[1]);
75 scale = camera->GetParallelScale();
79 tmp = (right[0] * dx + up[0] * dy);
82 tmp = (right[1] * dx + up[1] * dy);
85 tmp = (right[2] * dx + up[2] * dy);
88 camera->SetPosition(pos);
89 camera->SetFocalPoint(fp);
93 double depth, worldPt[4], lastWorldPt[4];
96 this->GetCenter(center);
97 ren->SetWorldPoint(center[0], center[1], center[2], 1.0);
99 ren->WorldToDisplay();
100 depth = ren->GetDisplayPoint()[2];
102 ren->SetDisplayPoint(
x,
y, depth);
103 ren->DisplayToWorld();
104 ren->GetWorldPoint(worldPt);
107 worldPt[0] /= worldPt[3];
108 worldPt[1] /= worldPt[3];
109 worldPt[2] /= worldPt[3];
113 ren->SetDisplayPoint(rwi->GetLastEventPosition()[0], rwi->GetLastEventPosition()[1], depth);
114 ren->DisplayToWorld();
115 ren->GetWorldPoint(lastWorldPt);
118 lastWorldPt[0] /= lastWorldPt[3];
119 lastWorldPt[1] /= lastWorldPt[3];
120 lastWorldPt[2] /= lastWorldPt[3];
121 lastWorldPt[3] = 1.0;
124 pos[0] += lastWorldPt[0] - worldPt[0];
125 pos[1] += lastWorldPt[1] - worldPt[1];
126 pos[2] += lastWorldPt[2] - worldPt[2];
128 fp[0] += lastWorldPt[0] - worldPt[0];
129 fp[1] += lastWorldPt[1] - worldPt[1];
130 fp[2] += lastWorldPt[2] - worldPt[2];
132 camera->SetPosition(pos);
133 camera->SetFocalPoint(fp);
135 ren->ResetCameraClippingRange();
142 this->Superclass::PrintSelf(os, indent);
void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren) override
void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren) override
~vtkTrackballPan() override
void PrintSelf(ostream &os, vtkIndent indent) override
void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren) override
CLOUDVIEWER_HOST_DEVICE float Cross(const Point &a, const Point &b)
vtkStandardNewMacro(vtkTrackballPan)