1. 获取点选的Actor,并获取关联的PolyData
vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkRenderWindowInteractor::SafeDownCast(caller);
if (interactor == NULL)
return;
// 鼠标点击位置
int pos[2];
interactor->GetLastEventPosition(pos);
// 在鼠标点击位置拾取
vtkSmartPointer<vtkCellPicker> picker =
vtkSmartPointer<vtkCellPicker>::New();
picker->SetTolerance(0.005); // 拾取灵敏度设置
picker->Pick(pos[0], pos[1], 0,
interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
vtkIdType mouseoverFaceIdx = picker->GetCellId(); // 如果为-1,则不被选中。
if (mouseoverFaceIdx != -1)
{
//查找 polyData
vtkSmartPointer<vtkRenderer> renderer =
interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer();
vtkSmartPointer<vtkActorCollection> actorCollection =
renderer->GetActors();
actorCollection->InitTraversal();
vtkSmartPoin