DecimateFran
VTKExamples/Python/VisualizationAlgorithms/DecimateFran
Other Languages
See (Cxx)
Code¶
DecimateFran.py
#!/usr/bin/env python """ """ import vtk def main(): colors = vtk.vtkNamedColors() fileName1, fileName2 = 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. # # We start by reading some data that was originally captured from # a Cyberware laser digitizing system. # fran = vtk.vtkPolyDataReader() fran.SetFileName(fileName1) # Read the corresponding texture. textureReader = vtk.vtkPNGReader() textureReader.SetFileName(fileName2) texture = vtk.vtkTexture() texture.InterpolateOn() texture.SetInputConnection(textureReader.GetOutputPort()) # 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(fran.GetOutputPort()) deci.SetTargetReduction(0.9) deci.PreserveTopologyOn() decimatedNormals = vtk.vtkPolyDataNormals() decimatedNormals.SetInputConnection(deci.GetOutputPort()) decimatedNormals.FlipNormalsOn() decimatedNormals.SetFeatureAngle(60) originalNormals = vtk.vtkPolyDataNormals() originalNormals.SetInputConnection(fran.GetOutputPort()) originalNormals.FlipNormalsOn() originalNormals.SetFeatureAngle(60) decimatedMapper = vtk.vtkPolyDataMapper() decimatedMapper.SetInputConnection(decimatedNormals.GetOutputPort()) decimatedActor = vtk.vtkActor() decimatedActor.SetMapper(decimatedMapper) decimatedActor.GetProperty().SetAmbient(.5) decimatedActor.GetProperty().SetDiffuse(.5) decimatedActor.SetTexture(texture) originalMapper = vtk.vtkPolyDataMapper() originalMapper.SetInputConnection(originalNormals.GetOutputPort()) originalActor = vtk.vtkActor() originalActor.SetMapper(originalMapper) originalActor.GetProperty().SetAmbient(.5) originalActor.GetProperty().SetDiffuse(.5) originalActor.SetTexture(texture) # Create the RenderWindow, Renderer and Interactor. # renderer1 = vtk.vtkRenderer() renderer1.SetViewport(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.SetClippingRange(0.0475572, 2.37786) cam1.SetFocalPoint(0.052665, -0.129454, -0.0573973) cam1.SetPosition(0.327637, -0.116299, -0.256418) cam1.SetViewUp(-0.0225386, 0.999137, 0.034901) renderer1.SetActiveCamera(cam1) renderer2.SetActiveCamera(cam1) renderWindow.Render() interactor.Start() def get_program_parameters(): import argparse description = 'Examples of the decimation algorithm.' epilogue = ''' (a) Decimation of laser digitizer. ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('filename1', help='fran_cut.vtk.') parser.add_argument('filename2', help='fran_cut.png.') args = parser.parse_args() return args.filename1, args.filename2 if __name__ == '__main__': main()