声明一个交互器
vtkSmartPointer<vtkRenderWindowInteractor>interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
设置交互器的交互风格
interactor->SetInteractorStyle(); //设置交互的风格。
常用的两个交互风格
vtkInteractorStyleTrackballCamera**/vtkInteractorStyleImage**
interactor->Initialize(); //初始化
interactor->Start(); //开始交互
功能性:
interactor->GetEventPosition(); //获取事件发生时,displaywindow的坐标
添加观察者:------绑定一个监听事件(如果你不想重写style的话)
interactor->AddObserver(); //添加观察者,这个观察者是 vtkcommand的智能指针,他要带一个特定格式的功能函数
过程是:上一篇文章有介绍到
1)功能事件声明 void function1(vtkObject *caller,unsinged long id,void*,void *)
2)声明callbackcommand
3)为callbackcommand添加fucntion1
4)绑定callbackcommand到interactor()
获取触发的场景(interactor是在场景下进行的)
interactor->GetRenderWindow(); //用在那个渲染窗口上。这个得指定
其他操作:
1,从功能函数获取交互器指针。(这里safedowncast返回的不知智能指针,是原始指针)
vtkRenderWindowInteractor * interactor =vtkRenderWindowInteractor ::SafeDownCast (caller )
2,
交互器重载的标准流程和格式
class ImagePixelPickerStyle : public vtkInteractorStyleImage //继承
{
public:
static ImagePixelPickerStyle* New(); //必须有
vtkTypeMacro(ImagePixelPickerStyle, vtkInteractorStyleImage); //必须有
// 设置需要拾取的图像数据
void SetImageData(vtkImageData* data) {}
// 重写左键点击事件
virtual void OnLeftButtonDown() override {}
private:
vtkImageData* ImageData = nullptr; // 图像数据
int ImageDims[3] = { 0, 0, 0 }; // 图像维度(宽、高、深度)
int NumComponents = 0; // 像素通道数(1=灰度,3=RGB)
};
vtkStandardNewMacro(ImagePixelPickerStyle); //必须添加上