17 #include "vtkCamera.h"
19 #include "vtkObjectFactory.h"
20 #include "vtkRenderWindow.h"
21 #include "vtkRenderWindowInteractor.h"
22 #include "vtkRenderer.h"
23 #include "vtkTransform.h"
55 vtkCamera* camera = ren->GetActiveCamera();
59 double* pos = camera->GetPosition();
60 double* fp = camera->GetFocalPoint();
62 axis[0] = fp[0] - pos[0];
63 axis[1] = fp[1] - pos[1];
64 axis[2] = fp[2] - pos[2];
71 x1 = rwi->GetLastEventPosition()[0] - (int)this->
DisplayCenter[0];
73 y1 = rwi->GetLastEventPosition()[1] - (int)this->
DisplayCenter[1];
75 if ((x2 == 0.0 && y2 == 0.0) || (x1 == 0.0 && y1 == 0.0))
82 double angle = vtkMath::DegreesFromRadians((x1 * y2 - y1 * x2) /
83 (sqrt(
static_cast<double>(x1 * x1 + y1 * y1)) * sqrt(
static_cast<double>(x2 * x2 + y2 * y2))));
86 vtkTransform* transform = vtkTransform::New();
87 transform->Identity();
91 transform->RotateWXYZ(angle, axis[0], axis[1], axis[2]);
96 camera->ApplyTransform(transform);
97 camera->OrthogonalizeViewUp();
106 this->Superclass::PrintSelf(os, indent);
void ComputeDisplayCenter(vtkRenderer *ren)
void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void PrintSelf(ostream &os, vtkIndent indent) override
~vtkPVTrackballRoll() override
vtkStandardNewMacro(vtkPVTrackballRoll)