modified logic for moving/zooming the camera
This commit is contained in:
parent
b75466a08f
commit
25f5456e9d
|
|
@ -38,17 +38,40 @@ void CameraMoveCallback::Execute(vtkObject *caller, unsigned long evId,
|
||||||
intr->GetRenderWindow()->Render();
|
intr->GetRenderWindow()->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CameraMoveCallback::clampCamera(double pos[3]) {
|
||||||
|
double scale = this->cam->GetParallelScale();
|
||||||
|
|
||||||
|
// only check the x,y coords of the camera; we don't care about z
|
||||||
|
for (int i=0; i < 2; i++) {
|
||||||
|
//boundary cond: scale+|pos| < 1.
|
||||||
|
if (abs(pos[i])+scale > 1.01) {
|
||||||
|
if (pos[i] >= 0) {
|
||||||
|
pos[i] = 1 - scale;
|
||||||
|
} else {
|
||||||
|
pos[i] = scale - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->cam->SetPosition(pos);
|
||||||
|
this->cam->SetFocalPoint(pos[0], pos[1], 0);
|
||||||
|
}
|
||||||
|
|
||||||
void CameraMoveCallback::zoom(const bool in) {
|
void CameraMoveCallback::zoom(const bool in) {
|
||||||
double scale = this->cam->GetParallelScale();
|
double scale = this->cam->GetParallelScale();
|
||||||
|
|
||||||
if (in) {
|
if (in) {
|
||||||
scale -= 1;
|
if (scale >= 0.2) {
|
||||||
|
scale -= 0.1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
scale += 1;
|
if (scale <= 0.9)
|
||||||
|
scale += 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->cam->SetParallelScale(scale);
|
this->cam->SetParallelScale(scale);
|
||||||
|
clampCamera(this->cam->GetPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CameraMoveCallback::pan(const string dir) {
|
void CameraMoveCallback::pan(const string dir) {
|
||||||
|
|
@ -56,17 +79,16 @@ void CameraMoveCallback::pan(const string dir) {
|
||||||
this->cam->GetPosition(pos);
|
this->cam->GetPosition(pos);
|
||||||
|
|
||||||
if (dir == "Left" or dir == "h") {
|
if (dir == "Left" or dir == "h") {
|
||||||
pos[0] -= 1;
|
pos[0] -= 0.1;
|
||||||
} else if (dir == "Up" or dir == "j" ) {
|
} else if (dir == "Up" or dir == "j" ) {
|
||||||
pos[1] += 1;
|
pos[1] += 0.1;
|
||||||
} else if (dir == "Right" or dir == "k" ) {
|
} else if (dir == "Right" or dir == "k" ) {
|
||||||
pos[0] += 1;
|
pos[0] += 0.1;
|
||||||
} else if (dir == "Down" or dir == "l" ) {
|
} else if (dir == "Down" or dir == "l" ) {
|
||||||
pos[1] -= 1;
|
pos[1] -= 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->cam->SetPosition(pos);
|
clampCamera(pos);
|
||||||
this->cam->SetFocalPoint(pos[0], pos[1], 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraMoveCallback::CameraMoveCallback() : cam(nullptr) {}
|
CameraMoveCallback::CameraMoveCallback() : cam(nullptr) {}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ private:
|
||||||
void Execute(vtkObject *caller, unsigned long evId, void *callData) override;
|
void Execute(vtkObject *caller, unsigned long evId, void *callData) override;
|
||||||
void zoom(const bool in);
|
void zoom(const bool in);
|
||||||
void pan(const std::string dir);
|
void pan(const std::string dir);
|
||||||
|
void clampCamera(double *pos);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue