Created
July 27, 2018 09:08
-
-
Save ngunhaSO/cfc3184854d0ca6bf57d3c4637fb6d13 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import vtk | |
def checkQualityAndTriangulate(): | |
reader = vtk.vtkSTLReader() | |
reader.SetFileName('data/3D_data/demoparts/test.stl') | |
reader.Update() | |
srcPolyData = reader.GetOutput() | |
triangleFilter = vtk.vtkTriangleFilter() | |
triangleFilter.SetInputConnection(reader.GetOutputPort()) | |
triangleFilter.Update() | |
mesh = triangleFilter.GetOutput() | |
qualityFilter = vtk.vtkMeshQuality() | |
qualityFilter.SetInputData(mesh) | |
qualityFilter.SetTriangleQualityMeasureToArea() | |
qualityFilter.Update() | |
featureEdges = vtk.vtkFeatureEdges() | |
featureEdges.SetInputData(srcPolyData) | |
featureEdges.SetBoundaryEdges(1) | |
featureEdges.SetFeatureEdges(0) | |
featureEdges.SetNonManifoldEdges(0) | |
featureEdges.SetManifoldEdges(0) | |
featureEdges.Update() | |
numberOfOpenEdges = featureEdges.GetOutput().GetNumberOfLines() | |
print("open edges, there are: ", numberOfOpenEdges) | |
print("================== START FILLING HOLES ====================") | |
#clean up the mesh | |
boundaryClean = vtk.vtkCleanPolyData() | |
boundaryClean.SetInputData(srcPolyData) | |
boundaryClean.Update() | |
region = vtk.vtkPolyDataConnectivityFilter() | |
meshAppend = vtk.vtkAppendPolyData() | |
boundaryStrips = vtk.vtkStripper() | |
boundaryPoly = vtk.vtkPolyData() | |
boundaryTri = vtk.vtkTriangleFilter() | |
meshAppend.AddInputData(boundaryClean.GetOutput()) | |
meshAppend.AddInputData(boundaryTri.GetOutput()) | |
region.SetInputData(featureEdges.GetOutput()) | |
region.SetExtractionMode(6) | |
boundaryStrips.SetInputData(region.GetOutput()) | |
boundaryTri.SetInputData(boundaryPoly) | |
boundaryClean.SetInputData(meshAppend.GetOutput()) | |
boundaryClean.SetTolerance(0.0) | |
boundaryClean.SetConvertLinesToPoints(0) | |
boundaryClean.SetConvertPolysToLines(0) | |
boundaryClean.SetConvertStripsToPolys(0) | |
featureEdges.SetInputData(boundaryClean.GetOutput()) | |
i = 0 | |
while numberOfOpenEdges != 0: | |
print('number of open edges: ', numberOfOpenEdges) | |
region.Update() | |
#create polygonal patches | |
boundaryStrips.Update() | |
boundaryPoly.Initialize() | |
boundaryPoly.SetPoints(boundaryStrips.GetOutput().GetPoints()) | |
boundaryPoly.SetPolys(boundaryStrips.GetOutput().GetLines()) | |
boundaryPoly.Modified() | |
# triangulate the polygonal patch | |
boundaryTri.Update() | |
meshAppend.Update() | |
# remove dup | |
boundaryClean.Update() | |
featureEdges.Update() | |
numberOfOpenEdges = featureEdges.GetOutput().GetNumberOfLines() | |
print('........................ done ') | |
out = vtk.vtkPolyData() | |
out.DeepCopy(boundaryClean.GetOutput()) | |
writerFinal = vtk.vtkSTLWriter() | |
writerFinal.SetFileTypeToBinary() | |
writerFinal.SetInputData(out) | |
writerFinal.SetFileName('data/3D_data/demoparts/improve_final.stl') | |
writerFinal.Update() | |
writerFinal.Write() | |
if __name__ == '__main__': | |
checkQualityAndTriangulate() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment