Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • VTK VTK
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 737
    • Issues 737
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 209
    • Merge requests 209
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • VTK
  • VTKVTK
  • Issues
  • #17347

Closed
Open
Created Jun 25, 2018 by Nhan Nguyen@ngunhaSO

vtkFillHolesFilter does not close all the surfaces

I am learning vtk for python now, I am trying to convert .obj to .stl file. During the conversion, I wanna close all the open surfaces before start slicing the object for 3D printer. I used the vtkFillHolesFilter(), however it does not close all the surfaces. Here are the screenshots:

  1. Before call the vtkFillHolesFilter(): before-fill-holes
  2. After call the vtkFillHolesFilter(): after-fill-holes

From the 2nd image, as you can see from the screenshot, only the bottom part is covered up, the side is still open.

Any suggestion?

Here is my code:

reader = vtk.vtkOBJReader()
reader.SetFileName('data/3D_data/demoparts/notScaledStuff.obj')
reader.Update()

srcPolyData = reader.GetOutput()
featureEdges = vtk.vtkFeatureEdges()
featureEdges.FeatureEdgesOn()
featureEdges.BoundaryEdgesOn()
featureEdges.NonManifoldEdgesOn()
featureEdges.SetInputData(srcPolyData)
featureEdges.Update()
numberOfOpenEdges = featureEdges.GetOutput().GetNumberOfCells()
if numberOfOpenEdges > 0:
   print('Number of open edges:', numberOfOpenEdges)
else:
   print('All edges are closed')

triangleTrans = vtk.vtkTriangleFilter()
triangleTrans.SetInputData(srcPolyData)
triangleTrans.PassVertsOff()
triangleTrans.PassLinesOn()
triangleTrans.Update()

fill = vtk.vtkFillHolesFilter()
fill.SetInputData(triangleTrans.GetOutput())
fill.SetHoleSize(1000000000)
fill.Update()

writer = vtk.vtkSTLWriter()
writer.SetFileTypeToBinary()
writer.SetInputConnection(fill.GetOutputPort())
writer.SetFileName('data/3D_data/demoparts/notScaledStuff.stl')
writer.Update()
writer.Write()
Edited Oct 23, 2018 by Ben Boeckel
Assignee
Assign to
Time tracking