事件回调:
创建回调事件类,继承vtkCommand
class vtkImageInteractionCallback : public vtkCommand
{
public:
virtual void Execute(vtkObject *caller, unsigned long event, void *)
{
// 获取交互器
vtkSmartPointer<vtkRenderWindowInteractor> interator = vtkRenderWindowInteractor::SafeDownCast(caller);
// 获取交互样式
vtkInteractorStyle *style = vtkInteractorStyle::SafeDownCast(interator->GetInteractorStyle());
if (event == vtkCommand::LeftButtonPressEvent)
{
}
else if (event == vtkCommand::LeftButtonReleaseEvent)
{
}
else if (event == vtkCommand::MouseWheelBackwardEvent)
{
//style->OnMouseWheelBackward();
}
else if (event == vtkCommand::MouseWheelForwardEvent)
{
//style->OnMouseWheelForward();
}
if (event == vtkCommand::EndInteractionEvent)
{
//style->OnMouseWheelForward();
}
}
};
调用方式:
// 新建自定义交互类
vtkSmartPointer<vtkImageInteractionCallback> callback = vtkSmartPointer<vtkImageInteractionCallback>::New();
// 移除默认鼠标事件监听
ui->qvtkWidget->GetInteractor()->RemoveAllObservers();
添加自定义鼠标交互事件监听
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::LeftButtonPressEvent, callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::LeftButtonReleaseEvent, callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::MouseWheelBackwardEvent, callback);
ui->qvtkWidget->GetInteractor()->AddObserver(vtkCommand::MouseWheelForwardEvent, callback);
交互方式:
创建交互事件类,继承对应的vtkInteractorStyle
类如:
//鼠标滚轮切换不同的dcm
class myVtkInteractorStyleImage : public vtkInteractorStyleImage
{
public:
static myVtkInteractorStyleImage* New();
vtkTypeMacro(myVtkInteractorStyleImage, vtkInteractorStyleImage);
protected:
vtkImageViewer2* ImageViewer;
int Slice;
int MinSlice;
int MaxSlice;
public:
void SetImageViewer(vtkImageViewer2* imageViewer)
{
this->ImageViewer = imageViewer;
this->MinSlice = imageViewer->GetSliceMin();
this->MaxSlice = imageViewer->GetSliceMax();
this->Slice = (this->MinSlice + this->MaxSlice) / 2;
this->ImageViewer->SetSlice(this->Slice);
this->ImageViewer->Render();
}
protected:
virtual void KeyPressEvent() {}
virtual void KeyReleaseEvent() {}
virtual void OnMouseWheelForward()
{
if (this->Slice < this->MaxSlice)
{
this->Slice += 1;
this->ImageViewer->SetSlice(this->Slice);
this->ImageViewer->Render();
}
}
virtual void OnMouseWheelBackward()
{
if (this->Slice > this->MinSlice)
{
this->Slice -= 1;
this->ImageViewer->SetSlice(this->Slice);
this->ImageViewer->Render();
}
}
};
//该宏放在cpp文件中。
vtkStandardNewMacro(myVtkInteractorStyleImage);
//调用方式
//添加交互
vtkSmartPointer<myVtkInteractorStyleImage> style = vtkSmartPointer<myVtkInteractorStyleImage>::New();
style->SetImageViewer(this->m_Viewer);
interactor->SetInteractorStyle(style);
this->m_Viewer->Render();