/********************************************************************** 文件名: 8.4_CellPicker.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 #include #include #include #include #include #include #include class CellPickerInteractorStyle : public vtkInteractorStyleTrackballCamera { public: static CellPickerInteractorStyle* New(); CellPickerInteractorStyle() { selectedMapper = vtkSmartPointer::New(); selectedActor = vtkSmartPointer::New(); } virtual void OnLeftButtonDown() { int* pos = this->GetInteractor()->GetEventPosition(); vtkSmartPointer picker = vtkSmartPointer::New(); picker->SetTolerance(0.0005); picker->Pick(pos[0], pos[1], 0, this->GetDefaultRenderer()); if(picker->GetCellId() != -1) { vtkSmartPointer ids = vtkSmartPointer::New(); ids->SetNumberOfComponents(1); ids->InsertNextValue(picker->GetCellId()); vtkSmartPointer selectionNode = vtkSmartPointer::New(); selectionNode->SetFieldType(vtkSelectionNode::CELL); selectionNode->SetContentType(vtkSelectionNode::INDICES); selectionNode->SetSelectionList(ids); vtkSmartPointer selection = vtkSmartPointer::New(); selection->AddNode(selectionNode); vtkSmartPointer extractSelection = vtkSmartPointer::New(); extractSelection->SetInput(0, polyData); extractSelection->SetInput(1, selection); extractSelection->Update(); selectedMapper->SetInput((vtkDataSet*)extractSelection->GetOutput()); selectedActor->SetMapper(selectedMapper); selectedActor->GetProperty()->EdgeVisibilityOn(); selectedActor->GetProperty()->SetEdgeColor(1,0,0); selectedActor->GetProperty()->SetLineWidth(3); this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(selectedActor); } vtkInteractorStyleTrackballCamera::OnLeftButtonDown(); } vtkSmartPointer polyData; vtkSmartPointer selectedMapper; vtkSmartPointer selectedActor; }; vtkStandardNewMacro(CellPickerInteractorStyle); int main (int, char *[]) { vtkSmartPointer sphereSource = vtkSmartPointer::New(); sphereSource->Update(); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInput(sphereSource->GetOutput()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->GetProperty()->SetColor(0,1,0); actor->SetMapper(mapper); vtkSmartPointer renderer = vtkSmartPointer::New(); renderer->AddActor(actor); renderer->SetBackground(1,1,1); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->Render(); renderWindow->SetWindowName("CellPicker"); renderWindow->AddRenderer(renderer); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); vtkSmartPointer style = vtkSmartPointer::New(); style->SetDefaultRenderer(renderer); style->polyData = sphereSource->GetOutput(); renderWindowInteractor->SetInteractorStyle(style); renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }