三维坐标拾取,可以借助vtkPointPicker或者vtkCellPicker,其官方例程序参见annotatePick.py或QtVTKRenderWindows.cxx。
QtVTKRenderWindows.cxx例子中说明,如果将vtkCellPicker与vtkImagePlaneWidget结合使用时,只需要使用vtkImagePlaneWidget的SetPicker()将它们两者绑定即可实现坐标点的拾取和显示;然而,如果想在三维重建时,实现目标的三维坐标拾取,可不那么简单。下面是VTK6.2.0的使用文档中对含有SetPicker()函数的类的总结:
SetPicker() : vtkRenderWindowInteractor , vtkBalloonWidget , vtkImagePlaneWidget
由上面的总结可见,只有3个类是含有SetPicker()函数的,也就是说只有3个类可以与vtkCellPicker绑定。在三维重建效果显示时,通常使用的是第1个:vtkRenderWindowInteractor。
将vtkCellPicker与vtkRenderWindowInteractor通过SetPicker()绑定之后,并非就万事大吉。这时候还不能触发三维坐标点的采集。此外,就算继续设定vtkCellPicker的事件处理函数,也还不行。
那么,要怎样才能触发vtkCellPicker的采集呢?答案是必须调用其Pick()函数,而且是调用一次,就触发一次!下面将用一个实例说明。
1 vtkCellPicker的创建并且与Interactor绑定
// Cell Picker
m_pvtkCellPicker =
<