DecimateHawaii
VTKEx/Python/VisualizationAlgorithms/DecimateHawaii
Other languages
See (Cxx)
Question
If you have a simple question about this example contact us at VTKExProject If your question is more complex and may require extended discussion, please use the VTK Discourse Forum
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()