如何使打开的 stl 文件不漏水
how to make an open stl file watertight
这里是新手!
我有一个STL文件,它不是水密的,并且与trimesh的接近顶点之间的差距很大,无法修复。
我按照 this 尝试使用 open3d,但出现以下错误:“ValueError: vector too long”..
有什么方法可以让网格不透水吗?我需要计算 CoM 和惯性矩阵,但如果我的网格不是 watertight/a 封闭曲面,这些值将不正确。
对于open3d,首先我上传了stl文件,我把它转换成numpy然后我使用了下面的代码:
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(DataNP)
o3d.io.write_point_cloud("testinggggg.ply", pcd)
poisson_mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=8, width=0, scale=1.1, linear_fit=False)[0]
bbox = pcd.get_axis_aligned_bounding_box()
p_mesh_crop = poisson_mesh.crop(bbox)
o3d.io.write_triangle_mesh("output_testinggggg.ply", dec_mesh)
非常感谢任何帮助!
我已经设法让网格防水了。我会 post 在这里,以防将来有人遇到麻烦。
我的网格实际上是由 2 个较小的网格组成的,所以我必须先将它们合并在一起,然后使用 VTK 库清理网格并填充孔。这使我的网格水密,我可以计算我需要的一切。
这是代码:
input1 = vtk.vtkPolyData()
input2 = vtk.vtkPolyData()
input1.DeepCopy(Data1.GetOutput())
input2.DeepCopy(Data2.GetOutput())
# Append the two meshes
appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputData(input1)
appendFilter.AddInputData(input2)
appendFilter.Update()
# Remove any duplicate points.
cleanFilter = vtk.vtkCleanPolyData()
cleanFilter.SetInputConnection(appendFilter.GetOutputPort())
cleanFilter.Update()
# newData = cleanFilter
fill = vtk.vtkFillHolesFilter()
fill.SetInputConnection(appendFilter.GetOutputPort())
fill.SetHoleSize(100)
fill.Update()
这里是新手!
我有一个STL文件,它不是水密的,并且与trimesh的接近顶点之间的差距很大,无法修复。
我按照 this 尝试使用 open3d,但出现以下错误:“ValueError: vector too long”..
有什么方法可以让网格不透水吗?我需要计算 CoM 和惯性矩阵,但如果我的网格不是 watertight/a 封闭曲面,这些值将不正确。
对于open3d,首先我上传了stl文件,我把它转换成numpy然后我使用了下面的代码:
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(DataNP)
o3d.io.write_point_cloud("testinggggg.ply", pcd)
poisson_mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=8, width=0, scale=1.1, linear_fit=False)[0]
bbox = pcd.get_axis_aligned_bounding_box()
p_mesh_crop = poisson_mesh.crop(bbox)
o3d.io.write_triangle_mesh("output_testinggggg.ply", dec_mesh)
非常感谢任何帮助!
我已经设法让网格防水了。我会 post 在这里,以防将来有人遇到麻烦。
我的网格实际上是由 2 个较小的网格组成的,所以我必须先将它们合并在一起,然后使用 VTK 库清理网格并填充孔。这使我的网格水密,我可以计算我需要的一切。
这是代码:
input1 = vtk.vtkPolyData()
input2 = vtk.vtkPolyData()
input1.DeepCopy(Data1.GetOutput())
input2.DeepCopy(Data2.GetOutput())
# Append the two meshes
appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputData(input1)
appendFilter.AddInputData(input2)
appendFilter.Update()
# Remove any duplicate points.
cleanFilter = vtk.vtkCleanPolyData()
cleanFilter.SetInputConnection(appendFilter.GetOutputPort())
cleanFilter.Update()
# newData = cleanFilter
fill = vtk.vtkFillHolesFilter()
fill.SetInputConnection(appendFilter.GetOutputPort())
fill.SetHoleSize(100)
fill.Update()