/********************************************************************** 文件名: 6.5_PolyDataConnectedAllCompExtract.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 int main(int, char *[]) { vtkSmartPointer sphereSource = vtkSmartPointer::New(); sphereSource->SetRadius(10); sphereSource->SetThetaResolution(10); sphereSource->SetPhiResolution(10); sphereSource->Update(); vtkSmartPointer coneSource = vtkSmartPointer::New(); coneSource->SetRadius(5); coneSource->SetHeight(10); coneSource->SetCenter(25,0,0); coneSource->Update(); vtkSmartPointer appendFilter = vtkSmartPointer::New(); appendFilter->AddInput(sphereSource->GetOutput()); appendFilter->AddInput(coneSource->GetOutput()); appendFilter->Update(); vtkSmartPointer connectivityFilter = vtkSmartPointer::New(); connectivityFilter->SetInput(appendFilter->GetOutput()); connectivityFilter->SetExtractionModeToAllRegions(); connectivityFilter->Update(); int regionNum = connectivityFilter->GetNumberOfExtractedRegions(); for (int i=0; i connectivityFilter2 = vtkSmartPointer::New(); connectivityFilter2->SetInput(appendFilter->GetOutput()); connectivityFilter2->InitializeSpecifiedRegionList(); connectivityFilter2->SetExtractionModeToSpecifiedRegions(); connectivityFilter2->AddSpecifiedRegion(i); connectivityFilter2->Update(); char str[256]; itoa(i, str, 10); strcat(str, ".vtk"); vtkSmartPointer writer = vtkSmartPointer::New(); writer->SetFileName(str); writer->SetInput(connectivityFilter2->GetOutput()); writer->Update(); } vtkSmartPointer originalMapper = vtkSmartPointer::New(); originalMapper->SetInput(appendFilter->GetOutput()); vtkSmartPointer originalActor = vtkSmartPointer::New(); originalActor->SetMapper(originalMapper); vtkSmartPointer extractedMapper = vtkSmartPointer::New(); extractedMapper->SetInput(connectivityFilter->GetOutput()); vtkSmartPointer extractedActor = vtkSmartPointer::New(); extractedActor->SetMapper(extractedMapper); 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(originalActor); leftRenderer->SetBackground(0.2,0.1,0.5); leftRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer rightRenderer = vtkSmartPointer::New(); rightRenderer->SetViewport(rightViewport); rightRenderer->AddActor(extractedActor); rightRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(leftRenderer); renderWindow->AddRenderer(rightRenderer); renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("6.5_PolyDataConnectedAllCompExtract"); leftRenderer->ResetCamera(); rightRenderer->SetActiveCamera(leftRenderer->GetActiveCamera()); vtkSmartPointer interactor = vtkSmartPointer::New(); interactor->SetRenderWindow(renderWindow); interactor->Initialize(); interactor->Start(); return EXIT_SUCCESS; }