拾取
- 拾取是用来选择场景中的物体,获取物体的信息
- 通常调用vtkAbstractPicker::Pick()方法拾取物体
- 不同的拾取子类,返回的拾取信息也不同,如物体的全局坐标,单元ID,点ID等
- 调用语法:Pick(SelectX,SelectY,SelectZ,Renderer)
- 与Renderer相关联的角色都是被拾取的对象
- Pick方法不能直接调用,而是交由交互类vtkRenderWindowInteractor进行管理
主要的拾取子类
拾取类 | 作用 | 返回值 |
---|---|---|
vtkWorldPointPicker | 快速拾取场景中的角色 | 返回拾取点的世界坐标值 |
vtkAbstractPropPicker | 拾取场景中的对象 | 返回拾取对象的数据类型 |
vtkPropPicker:vtkAbstractPropPicker | 用于硬件支持的拾取操作 | – |
vtkPicker:vtkAbstractPropPicker | 用软件的方式实现边界拾 | – |
vtkCellPicker:vtkPicker | 用于拾取单元的信息 | 返回单元ID,参数坐标 |
vtkPointPicker:vtkPicker | 用于获取点的信息 | 返回点的ID,坐标 |
vtkAssemblyPath | 以访问vtkAssembly 中的每个对象 | 返回每个对象的结点和变换矩阵 |
在交互类子类中使用pick对象,满足用户自定义交互拾取操作
//构建一个vtkCellPicker的实例
vtkSmartPointer<vtkCellPicker> cellPicker = vtkSmartPointer<vtkCellPicker>::New();
//构建vtk内建的交互类对象
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
//将pick对象交由交互类vtkRenderWindowInteractor进行管理
iren->SetPicker(cellPicker);
//将绘制窗口对象与绘制交互类绑定
iren->SetRenderWindow(renWin);
vtkSmartPointer<MyPointPickerInteractorStyle> style = vtkSmartPointer<MyPointPickerInteractorStyle>::New();
iren->SetInteractorStyle(style);
class MyPointPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
static MyPointPickerInteractorStyle* New();
vtkTypeMacro(MyPointPickerInteractorStyle, vtkInteractorStyleTrackballCamera);
virtual void OnLeftButtonDown()