/********************************************************************** 文件名: 8.4_PointPicker.cpp Copyright (c) 张晓东, 罗火灵. All rights reserved. 更多信息请访问: http://www.vtkchina.org (VTK中国) http://blog.csdn.net/www_doling_net (东灵工作室) **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include // PointPickerInteractorStyle class PointPickerInteractorStyle : public vtkInteractorStyleTrackballCamera { public: static PointPickerInteractorStyle* New(); vtkTypeMacro(PointPickerInteractorStyle, vtkInteractorStyleTrackballCamera); virtual void OnLeftButtonDown() { std::cout << "Picking pixel: " << this->Interactor->GetEventPosition()[0] << " " << this->Interactor->GetEventPosition()[1] << std::endl; this->Interactor->GetPicker()->Pick(this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1], 0, // always zero. this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()); double picked[3]; this->Interactor->GetPicker()->GetPickPosition(picked); std::cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << std::endl; vtkSmartPointer sphereSource = vtkSmartPointer::New(); sphereSource->Update(); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); actor->SetPosition(picked); actor->SetScale(0.05); actor->GetProperty()->SetColor(1.0, 0.0, 0.0); this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(actor); vtkInteractorStyleTrackballCamera::OnLeftButtonDown(); } }; vtkStandardNewMacro(PointPickerInteractorStyle); int main(int, char *[]) { vtkSmartPointer sphereSource = vtkSmartPointer::New(); sphereSource->Update(); // Create a mapper and actor vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(sphereSource->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); // Create a renderer, render window, and interactor vtkSmartPointer renderer = vtkSmartPointer::New(); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->Render(); renderWindow->SetWindowName("PointPicker"); renderWindow->AddRenderer(renderer); vtkSmartPointer pointPicker = vtkSmartPointer::New(); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetPicker(pointPicker); renderWindowInteractor->SetRenderWindow(renderWindow); vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle( style ); // Add the actor to the scene renderer->AddActor(actor); renderer->SetBackground(1,1,1); // Render and interact renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }