[vtkusers] Overriding vtkInteractorStyleImage
Scott Johnson
Scott.Johnson at neuwave.com
Thu Apr 1 10:50:58 EDT 2010
Hi Folks,
I'm still chasing this and haven't found a resolution. Does it make any
difference that I'm connecting the pipeline to a QVTKWidget using the
SetRenderingWindow method?
I'm trying to avoid re-implementing the window/level functionality of
vtkInteractorStyleImage in my ResliceInteractorStyle.
Thanks
-- Scott
From: Scott Johnson
Sent: Wednesday, March 31, 2010 12:07 PM
To: vtkusers at vtk.org
Subject: Overriding vtkInteractorStyleImage
Hi Folks,
I am trying to override the behavior of vtkInteractorStyleImage. I want
the mouse wheel to page through slices of the volume, and not zoom, but
I want to preserve the window/level functionality on the left mouse
move.
I created a subclass and overrode OnMouseWheelForward and
OnMouseWheelBackward, then set the style on a vtkRenderWindowInteractor.
The mouse wheel works, but the window/level functionality is gone. Any
ideas as to why?
My class is:
class ResliceInteractorStyle : public vtkInteractorStyleImage
{
public:
static ResliceInteractorStyle* New();
virtual void OnMouseWheelForward()
{
int slice=_reslice->GetSlice();
_reslice->SetSlice(slice + 1);
}
virtual void OnMouseWheelBackward()
{
int slice=_reslice->GetSlice();
_reslice->SetSlice(slice - 1);
}
void SetCallbackData(ResliceRender* reslice)
{
_reslice=reslice;
}
protected:
ResliceRender* _reslice;
};
The Pipeline is created with:
void ResliceRender::CreatePipeline(vtkAlgorithmOutput* input)
{
vtkSmartPointer<ResliceInteractorStyle> style =
vtkSmartPointer<ResliceInteractorStyle>::New();
style->SetCallbackData(this);
_transform = vtkTransform::New();
_reslice = vtkImageReslice::New();
_reslice->SetInputConnection(input);
_reslice->SetResliceTransform(_transform);
_interactor = vtkRenderWindowInteractor::New();
_imageViewer = vtkImageViewer2::New();
_imageViewer->SetupInteractor(_interactor);
_imageViewer->SetInputConnection(_reslice->GetOutputPort());
_imageViewer->SetSize(400, 400);
_imageViewer->SetColorWindow(2048);
_imageViewer->SetColorLevel(1024);
_imageViewer->Render();
_interactor->Initialize();
// This has to happen here or the new style isn't called.
_interactor->SetInteractorStyle(style);
}
I also tried to create an empty subclass of vtkInteractorStyleImage,
with no overridden methods, and still didn't get the window/level
functionality. If I don't set a new interactor style the original
interaction works as expected. If I instantiate a raw
vtkInteractorStyleImage and Set it as the style, it works too.
If I subclass vtkCommand for the mouse wheel events and assign them to
the default interactor style, the mouse wheel changes the image slice
while zooming. I couldn't get the event removed to make it do just one.
It also worked in python.
Thanks
-- Scott
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100401/73a86556/attachment.htm>
More information about the vtkusers
mailing list