ClosedSurface
VTKExamples/Python/PolyData/ClosedSurface
Code¶
ClosedSurface.py
#!/usr/bin/env python import vtk def get_program_parameters(): import argparse description = 'Read a polydata file of a surface and determine if it is a closed surface.' epilogue = ''' ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('filename', help='Enter a polydata file e.g cow.g.') args = parser.parse_args() return args.filename def ReadPolyData(file_name): import os path, extension = os.path.splitext(file_name) extension = extension.lower() if extension == ".ply": reader = vtk.vtkPLYReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == ".vtp": reader = vtk.vtkXMLpoly_dataReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == ".obj": reader = vtk.vtkOBJReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == ".stl": reader = vtk.vtkSTLReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == ".vtk": reader = vtk.vtkpoly_dataReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == ".g": reader = vtk.vtkBYUReader() reader.SetGeometryFileName(file_name) reader.Update() poly_data = reader.GetOutput() else: # Return a None if the extension is unknown. poly_data = None return poly_data def main(): fn = get_program_parameters() polyData = ReadPolyData(fn) featureEdges = vtk.vtkFeatureEdges() featureEdges.FeatureEdgesOff() featureEdges.BoundaryEdgesOn() featureEdges.NonManifoldEdgesOn() featureEdges.SetInputData(polyData) featureEdges.Update() numberOfOpenEdges = featureEdges.GetOutput().GetNumberOfCells() if numberOfOpenEdges > 0: print(fn, ': Surface is not closed') else: print(fn, ': Surface is closed') if __name__ == '__main__': main()