我有一个 stl 文件,其中包含大量的 traingles。我想使用顶点阈值分割 stl 文件。
1.我使用numpy-stl将stl文件分成两个独立的实体。拆分完美完成。
但是,我需要一个封闭的网格作为原始 stl 网格。拆分后如何获得闭合网格。下面是分割网格的代码片段。
我还附上了原始网格和分割网格的图像。
加载原始 stl 网格
网格 = 网格.Mesh.from_file('mesh.stl')
facet_normals = pd.DataFrame(mesh.units)
vertex1 = pd.DataFrame(mesh.v0)
vertex2 = pd.DataFrame(mesh.v1)
vertex3 = pd.DataFrame(mesh.v2)
网格分裂从这里开始
coord_matrix = np.zeros((len(facet_normals), 12))
coord_matrix = pd.DataFrame(coord_matrix)
所有的顶点法线和面法线都排列在矩阵中
coord_matrix[coord_matrix.columns[0:3]] = vertex1[vertex1.columns[0:3]] coord_matrix[coord_matrix.columns[3:6]] = vertex2[vertex2.columns[0:3]] coord_matrix[coord_matrix.列[6:9]] = vertex3[vertex3.columns[0:3]] coord_matrix[coord_matrix.columns[9:12]] = facet_normals[facet_normals.columns[0:3]]
根据顶点阈值一分为二
c = coord_matrix[(coord_matrix 2 <=0.1) & (coord_matrix[5] <=0.1) & (coord_matrix[8] <=0.1)] g = coord_matrix[(coord_matrix 2 >=0.1) & (coord_matrix[5] > =0.1) & (coord_matrix[8] >=0.1)]
将其分配给名为“chestwall”的新分割网格
胸壁 = 网格。网格(np.zeros(c.shape[0],dtype=mesh.Mesh.dtype))胸壁_facet_normals = np.array(c[c.columns[9:12]])
胸壁.units = 胸壁_facet_normals
chestwall.v0 = np.array(c[c.columns[0:3]])
chestwall.v1 = np.array(c[c.columns[3:6]])
chestwall.v2 = np.array(c[c.columns[6:9]])
将其分配给名为“腺体”的新分割网格
腺体=mesh.Mesh(np.zeros(g.shape[0], dtype=mesh.Mesh.dtype))
腺面法线 = np.array(g[g.columns[9:12]])
腺体.单位 = 腺体_facet_normals
腺体.v0 = np.array(g[g.columns[0:3]])
腺体.v1 = np.array(g[g.columns[3:6]])
腺体.v2 = np.array(g[g.columns[6:9]])
保存新的分割网格
胸墙.保存('胸墙.stl')
腺体.保存('腺体.stl')`
图片:
从分割网格中可以看出,两个网格的连接之间存在孔。如何获得闭合网格?任何线索将不胜感激。
问候, Sunag R A.