17 #include "vtkCamera.h"
19 #include "vtkObjectFactory.h"
20 #include "vtkRenderWindow.h"
21 #include "vtkRenderWindowInteractor.h"
22 #include "vtkRenderer.h"
23 #include "vtkTransform.h"
53 int x,
int y, vtkRenderer* ren, vtkRenderWindowInteractor* rwi)
60 vtkTransform* transform = vtkTransform::New();
61 vtkCamera* camera = ren->GetActiveCamera();
63 double scale = vtkMath::Norm(camera->GetPosition());
66 scale = vtkMath::Norm(camera->GetFocalPoint());
72 double* temp = camera->GetFocalPoint();
73 camera->SetFocalPoint(temp[0] / scale, temp[1] / scale, temp[2] / scale);
74 temp = camera->GetPosition();
75 camera->SetPosition(temp[0] / scale, temp[1] / scale, temp[2] / scale);
79 transform->Identity();
80 transform->Translate(this->
Center[0] / scale, this->
Center[1] / scale, this->
Center[2] / scale);
82 int dx = rwi->GetLastEventPosition()[0] -
x;
83 int dy = rwi->GetLastEventPosition()[1] -
y;
85 camera->OrthogonalizeViewUp();
86 int*
size = ren->GetSize();
88 if (this->GetKeyCode() ==
'x' || this->GetKeyCode() ==
'y' || this->GetKeyCode() ==
'z' ||
89 this->GetKeyCode() ==
'X' || this->GetKeyCode() ==
'Y' || this->GetKeyCode() ==
'Z')
91 bool use_dx = std::abs(dx) > std::abs(dy);
93 double axis[3] = { 0, 0, 0 };
94 switch (this->GetKeyCode())
111 transform->RotateWXYZ(delta, axis[0], axis[1], axis[2]);
116 double* viewUp = camera->GetViewUp();
117 transform->RotateWXYZ(
122 transform->RotateWXYZ(-360.0 * dy /
size[1] * this->RotationFactor, v2[0], v2[1], v2[2]);
126 transform->Translate(
129 camera->ApplyTransform(transform);
130 camera->OrthogonalizeViewUp();
133 temp = camera->GetFocalPoint();
134 camera->SetFocalPoint(temp[0] * scale, temp[1] * scale, temp[2] * scale);
135 temp = camera->GetPosition();
136 camera->SetPosition(temp[0] * scale, temp[1] * scale, temp[2] * scale);
145 if (iren->GetKeyCode() == this->KeyCode)
156 this->
KeyCode = iren->GetKeyCode();
163 this->Superclass::PrintSelf(os, indent);
164 os << indent <<
"Center: " << this->
Center[0] <<
", " << this->
Center[1] <<
", "
void ComputeDisplayCenter(vtkRenderer *ren)
void OnKeyDown(vtkRenderWindowInteractor *iren) override
void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnKeyUp(vtkRenderWindowInteractor *iren) override
void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void PrintSelf(ostream &os, vtkIndent indent) override
~vtkPVTrackballRotate() override
QTextStream & endl(QTextStream &stream)
CLOUDVIEWER_HOST_DEVICE float Cross(const Point &a, const Point &b)
vtkStandardNewMacro(vtkPVTrackballRotate)