/********************************************************************** 文件名: 6.2_PolyDataNormal.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 //测试文件:../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 normFilter = vtkSmartPointer::New(); normFilter->SetInput(reader->GetOutput()); normFilter->SetComputePointNormals(1); normFilter->SetComputeCellNormals(0); normFilter->SetAutoOrientNormals(1); normFilter->SetSplitting(0); normFilter->Update(); vtkSmartPointer mask = vtkSmartPointer::New(); mask->SetInput(normFilter->GetOutput()); mask->SetMaximumNumberOfPoints(300); mask->RandomModeOn(); vtkSmartPointer arrow = vtkSmartPointer::New(); vtkSmartPointer glyph = vtkSmartPointer::New(); glyph->SetInput(mask->GetOutput()); glyph->SetSource(arrow->GetOutput()); glyph->SetVectorModeToUseNormal(); glyph->SetScaleFactor(0.01); vtkSmartPointer originMapper = vtkSmartPointer::New(); originMapper->SetInput(reader->GetOutput()); vtkSmartPointer originActor = vtkSmartPointer::New(); originActor->SetMapper(originMapper); vtkSmartPointer normedMapper = vtkSmartPointer::New(); normedMapper->SetInput(normFilter->GetOutput()); vtkSmartPointer normedActor = vtkSmartPointer::New(); normedActor->SetMapper(normedMapper); vtkSmartPointer glyphMapper = vtkSmartPointer::New(); glyphMapper->SetInput(glyph->GetOutput()); vtkSmartPointer glyphActor = vtkSmartPointer::New(); glyphActor->SetMapper(glyphMapper); glyphActor->GetProperty()->SetColor(1., 0.,0.); double originalViewport[4] = {0.0, 0.0, 0.33, 1.0}; double normViewport[4] = {0.33, 0.0, 0.66, 1.0}; double glphViewport[4] = {0.66, 0.0, 1.0, 1.0}; vtkSmartPointer originalRenderer = vtkSmartPointer::New(); originalRenderer->SetViewport(originalViewport); originalRenderer->AddActor(originActor); originalRenderer->ResetCamera(); originalRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer normedRenderer = vtkSmartPointer::New(); normedRenderer->SetViewport(normViewport); normedRenderer->AddActor(normedActor); normedRenderer->ResetCamera(); normedRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer glyphRenderer = vtkSmartPointer::New(); glyphRenderer->SetViewport(glphViewport); glyphRenderer->AddActor(glyphActor); glyphRenderer->AddActor(normedActor); glyphRenderer->ResetCamera(); glyphRenderer->SetBackground(1.0, 1.0, 1.0); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(originalRenderer); renderWindow->AddRenderer(normedRenderer); renderWindow->AddRenderer(glyphRenderer); renderWindow->SetSize(640, 320); renderWindow->Render(); renderWindow->SetWindowName("PolyDataNormal"); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderWindowInteractor->Initialize(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }