Hi, Seram,
This is how I do “look at plane” (the 3 first button in your case):
void View3DWidget::onLookAtXY()
{
//_renderer->ResetCamera();
double *fp = _rendererMainScene->GetActiveCamera()->GetFocalPoint();
double *p = _rendererMainScene->GetActiveCamera()->GetPosition();
double dist
= std::sqrt((p[0] - fp[0]) * (p[0] - fp[0]) + (p[1] - fp[1]) * (p[1] - fp[1])
+ (p[2] - fp[2]) * (p[2] - fp[2]));
_rendererMainScene->GetActiveCamera()->SetPosition(fp[0], fp[1], fp[2] + dist);
_rendererMainScene->GetActiveCamera()->SetViewUp(0.0, 1.0, 0.0);
// redraw the scene
_vtkwidget->GetRenderWindow()->Render();
}
void View3DWidget::onLookAtXZ()
{
double *fp = _rendererMainScene->GetActiveCamera()->GetFocalPoint();
double *p = _rendererMainScene->GetActiveCamera()->GetPosition();
double dist
= std::sqrt((p[0] - fp[0]) * (p[0] - fp[0]) + (p[1] - fp[1]) * (p[1] - fp[1])
+ (p[2] - fp[2]) * (p[2] - fp[2]));
_rendererMainScene->GetActiveCamera()->SetPosition(fp[0], fp[1] - dist, fp[2]);
_rendererMainScene->GetActiveCamera()->SetViewUp(0.0, 0.0, 1.0);
// redraw the scene
_vtkwidget->GetRenderWindow()->Render();
}
void View3DWidget::onLookAtYZ()
{
double *fp = _rendererMainScene->GetActiveCamera()->GetFocalPoint();
double *p = _rendererMainScene->GetActiveCamera()->GetPosition();
double dist
= std::sqrt((p[0] - fp[0]) * (p[0] - fp[0]) + (p[1] - fp[1]) * (p[1] - fp[1])
+ (p[2] - fp[2]) * (p[2] - fp[2]));
_rendererMainScene->GetActiveCamera()->SetPosition(fp[0] + dist, fp[1], fp[2]);
_rendererMainScene->GetActiveCamera()->SetViewUp(0.0, 0.0, 1.0);
// redraw the scene
_vtkwidget->GetRenderWindow()->Render();
}
For the other 3 buttons, you need to swap the signs of the sums/diffs in the _rendererMainScene->GetActiveCamera()->SetPosition()
calls (e.g. from fp[0] + dist
to fp[0] - dist
);
I hope this helps,
regards,
Paulo