Documentation/Labs/ViewInfrastructureImprovements
From Slicer Wiki
Home < Documentation < Labs < ViewInfrastructureImprovements
Contents
Goals
- Update Slicer code base to listen to interactor instead of interactor style
- Add support for interactor style switch per view
- Allow access to vtkRenderWindow from vtkMRMLViewNode
Motivation
- We would like to conveniently be able to change the interactor style without having to reset all observer for the displayable managers.
- Accessing the vtkRenderWindow would allow us to do (for example) screenshots given a specific viewNode.
InteractorStyle management
Workaround
Access 3D View
- Created a new Action menu in qSlicerMouseModeToolBar following this method.
- Accessed all qMRMLThreeDView through the layoutManager
void qSlicerMouseModeToolBar::switchToTrackBallInteractorStyle()
{
qMRMLLayoutManager *layoutManager = qSlicerApplication::application()->layoutManager();
// loop through all existing threeDViews
vtkNew<vtkThreeDViewInteractorStyle> interactorStyle;
for (int i=0; i < layoutManager->threeDViewCount(); ++i)
{
qMRMLThreeDView* view = layoutManager->threeDWidget(i)->threeDView();
// Update Interactor style
this->SetInteractorStyle(view, interactorStyle.GetPointer());
// Reset focal point
view->resetFocalPoint();
}
// Update icon
Q_D(qSlicerMouseModeToolBar);
d->InteractorStyleToolButton->setIcon(QIcon(":/Icons/TrackBall.png"));
}
- Issue : not setting the interactor per view but for all views
- Solution : adding the switch in each 3D View Qt controller
Update InteractorStyle
TODO
Design & implementation
TODO
vtkRenderWindow mapping
Current workaround
TODO
Issues
TODO
Design & implementation
TODO