DecimateHawaii
VTKExamples/Python/VisualizationAlgorithms/DecimateHawaii
Code¶
DecimateHawaii.py
#!/usr/bin/env python """ """ import vtk def main(): colors = vtk.vtkNamedColors() fileName = get_program_parameters() # This example shows how to use decimation to reduce a polygonal mesh. We also # use mesh smoothing and generate surface normals to give a pleasing result. # hawaii = vtk.vtkPolyDataReader() hawaii.SetFileName(fileName) # We want to preserve topology (not let any cracks form). This may limit # the total reduction possible, which we have specified at 90%. # deci = vtk.vtkDecimatePro() deci.SetInputConnection(hawaii.GetOutputPort()) deci.SetTargetReduction(0.9) deci.PreserveTopologyOn() decimatedNormals = vtk.vtkPolyDataNormals() decimatedNormals.SetInputConnection(deci.GetOutputPort()) decimatedNormals.FlipNormalsOn() decimatedNormals.SetFeatureAngle(60) decimatedMapper = vtk.vtkPolyDataMapper() decimatedMapper.SetInputConnection(decimatedNormals.GetOutputPort()) decimatedActor = vtk.vtkActor() decimatedActor.SetMapper(decimatedMapper) decimatedActor.GetProperty().SetColor(colors.GetColor3d("Aqua")) decimatedActor.GetProperty().SetRepresentationToWireframe() originalMapper = vtk.vtkPolyDataMapper() originalMapper.SetInputConnection(decimatedNormals.GetOutputPort()) originalActor = vtk.vtkActor() originalActor.SetMapper(originalMapper) originalActor.GetProperty().SetColor(colors.GetColor3d("Aqua")) # Create the RenderWindow, Renderer and Interactor. # renderer1 = vtk.vtkRenderer() renderer1.SetViewport(0.0, 0.0, 0.5, 1.0) renderer2 = vtk.vtkRenderer() renderer2.SetViewport(0.5, 0.0, 1.0, 1.0) renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer1) renderWindow.AddRenderer(renderer2) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) # Add the actors to the renderer, set the background and size. # renderer1.AddActor(originalActor) renderer2.AddActor(decimatedActor) renderer1.SetBackground(colors.GetColor3d("Wheat")) renderer2.SetBackground(colors.GetColor3d("Papaya_Whip")) renderWindow.SetSize(800, 400) # Render the image. # cam1 = vtk.vtkCamera() cam1.SetFocalPoint(0, 0, 0) cam1.SetPosition(0, 0, 1) cam1.SetViewUp(0, 1, 0) renderer1.SetActiveCamera(cam1) renderer2.SetActiveCamera(cam1) renderer1.ResetCamera() cam1.Azimuth(30) cam1.Elevation(30) cam1.Dolly(1.3) renderer1.ResetCameraClippingRange() renderWindow.Render() interactor.Start() def get_program_parameters(): import argparse description = 'Examples of decimation algorithm.' epilogue = ''' (b) Decimation of terrain data. ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('filename1', help='honolulu.vtk.') args = parser.parse_args() return args.filename1 if __name__ == '__main__': main()