/********************************************************************** 文件名: 6.6_PolyDataDecimation.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 //测试文件:../data/fran_cut.vtk int main(int argc, char * argv[]) { if(argc < 2) { std::cout< reader = vtkSmartPointer::New(); reader->SetFileName(argv[1]); reader->Update(); vtkSmartPointer original = reader->GetOutput(); std::cout << "抽取前:" << std::endl << "------------" << std::endl; std::cout << "模型点数为: " << original->GetNumberOfPoints() << std::endl; std::cout << "模型面数为: " << original->GetNumberOfPolys() << std::endl; vtkSmartPointer decimate = vtkSmartPointer::New(); decimate->SetInput(original); decimate->SetTargetReduction(.80); decimate->Update(); vtkSmartPointer decimated = decimate->GetOutput(); std::cout << "抽取后" << std::endl << "------------" << std::endl; std::cout << "模型点数为:" << decimated->GetNumberOfPoints()<< std::endl; std::cout << "模型面数为:" << decimated->GetNumberOfPolys()<< std::endl; vtkSmartPointer origianlMapper = vtkSmartPointer::New(); origianlMapper->SetInput(original); vtkSmartPointer origianlActor = vtkSmartPointer::New(); origianlActor->SetMapper(origianlMapper); vtkSmartPointer decimatedMapper = vtkSmartPointer::New(); decimatedMapper->SetInput(decimated); vtkSmartPointer decimatedActor = vtkSmartPointer::New(); decimatedActor->SetMapper(decimatedMapper); double leftViewport[4] = {0.0, 0.0, 0.5, 1.0}; double rightViewport[4] = {0.5, 0.0, 1.0, 1.0}; vtkSmartPointer leftRenderer = vtkSmartPointer::New(); leftRenderer->SetViewport(leftViewport); leftRenderer->AddActor(origianlActor); leftRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer rightRenderer = vtkSmartPointer::New(); rightRenderer->SetViewport(rightViewport); rightRenderer->AddActor(decimatedActor); rightRenderer->SetBackground(1.0, 1.0, 1.0); leftRenderer->GetActiveCamera()->SetPosition(0, -1, 0); leftRenderer->GetActiveCamera()->SetFocalPoint(0, 0, 0); leftRenderer->GetActiveCamera()->SetViewUp(0, 0, 1); leftRenderer->GetActiveCamera()->Azimuth(30); leftRenderer->GetActiveCamera()->Elevation(30); leftRenderer->ResetCamera(); rightRenderer->SetActiveCamera(leftRenderer->GetActiveCamera()); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(leftRenderer); renderWindow->AddRenderer(rightRenderer); renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("PolyDataDecimation"); vtkSmartPointer interactor = vtkSmartPointer::New(); interactor->SetRenderWindow(renderWindow); renderWindow->Render(); interactor->Start(); return EXIT_SUCCESS; }