参考:https://quaoar.su/blog/page/vtk-opencascade
1、vtkCellPicker的拾取创建后针对全局的是vtkPicker的子类
2、vtkCellPicker和渲染的形状来源没有关系,但是vtkCellPicker只能拾取Prop3Ds ,已经验证OCC对象 线和形状渲染为线框的不可以,这个可能和它拾取机制有关系,平面点射线的单元格,我理解的可能线没办法射线到。
3、IVtkTools_ShapePicker也是全局的,是OCC的api,但是它是继承了vtkAbstractPropPicker的类,部分功能可以在VTK库去理解。
4、回调中通过m_shapePicker->Pick(clickPos[0], clickPos[1], 0, ren);获取选取的对象。
参考中,通过设置渲染器到拾取器,拾取直接通过屏幕点击的点获取我认为是可以的
aShapePicker->SetRenderer(aRenderer);
void SetPicker(const vtkSmartPointer<IVtkTools_ShapePicker>& thePicker) { m_picker = thePicker; }
m_picker->Pick(aPos[0], aPos[1], 0);
但是我接手的工程直接是,一步完成的。
m_shapePicker->Pick(clickPos[0], clickPos[1], 0, ren);
5、之前讨论的OCC+VTK框选的问题,
IVtkTools_ShapePicker中Pick (double theX0, double theY0, double theX1, double theY1, vtkRenderer *theRenderer=NULL)
Pick entities in the given rectangle area.
VTK也有vtkAreaPicker实现获取框选的区域对象,后面项目中会尝试一下,参考下面的
VTK: 选取区域裁剪(vtkAreaPicker + vtkInteractorStyleRubberBandPick )_vtkareapicker用法-优快云博客