/********************************************************************** 文件名: 6.6_PolyDataSubdivision.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 int main(int argc, char *argv[]) { vtkSmartPointer originalMesh; vtkSmartPointer sphereSource = vtkSmartPointer::New(); sphereSource->Update(); originalMesh = sphereSource->GetOutput(); double numberOfViewports = 3; int numberOfSubdivisions = 2; vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->SetSize(200* numberOfViewports,200); renderWindow->SetWindowName("Multiple ViewPorts"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(renderWindow); for(unsigned i = 0; i < numberOfViewports; i++) { vtkSmartPointer subdivisionFilter; switch(i) { case 0: subdivisionFilter = vtkSmartPointer::New(); dynamic_cast (subdivisionFilter.GetPointer())->SetNumberOfSubdivisions(numberOfSubdivisions); break; case 1: subdivisionFilter = vtkSmartPointer::New(); dynamic_cast (subdivisionFilter.GetPointer())->SetNumberOfSubdivisions(numberOfSubdivisions); break; case 2: subdivisionFilter = vtkSmartPointer::New(); dynamic_cast (subdivisionFilter.GetPointer())->SetNumberOfSubdivisions(numberOfSubdivisions); break; default: break; } subdivisionFilter->SetInput(originalMesh); subdivisionFilter->Update(); vtkSmartPointer renderer = vtkSmartPointer::New(); renderWindow->AddRenderer(renderer); renderer->SetViewport(static_cast(i)/numberOfViewports,0,static_cast(i+1)/numberOfViewports,1); renderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(subdivisionFilter->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); renderer->AddActor(actor); renderer->ResetCamera(); } renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("PolyDataSubdivision"); renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }