vtk <vtkRenderWindowInteractor>交互器

声明一个交互器

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);   //必须添加上
相关推荐
beibeix20156 天前
VTK 渲染全流程与 OpenGL 上下文适配
vtk
把我格子衫拿来18 天前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
把我格子衫拿来18 天前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
把我格子衫拿来19 天前
鼠标点到哪里才算选中?Qt 与 VTK 的拾取坐标、DPI 与体素定位
python·qt·vtk·坐标变换·三维交互
把我格子衫拿来19 天前
VTK 体绘制入门到排错:传递函数、采样距离与透明度的关系
python·vtk·可视化·医学影像·体绘制
走好每一步5 个月前
12、VTK用X、Z平面去切割一个圆锥
平面·vtk·三维图像
走好每一步5 个月前
11、VTK重要数学知识:平面和法向量
平面·vtk·三维图像
走好每一步5 个月前
5、VTK刚体变换
qt·vtk·三维图像
走好每一步5 个月前
4、VDK读取xml模型数据
vtk·三维图像
走好每一步5 个月前
2、VDK 使用QVTKOpenGLNativeWidget嵌入到QT窗体中
qt·vtk·三维图像