0

我有一个 stl 文件,其中包含大量的 traingles。我想使用顶点阈值分割 stl 文件。

1.我使用numpy-stl将stl文件分成两个独立的实体。拆分完美完成。

  1. 但是,我需要一个封闭的网格作为原始 stl 网格。拆分后如何获得闭合网格。下面是分割网格的代码片段。

  2. 我还附上了原始网格和分割网格的图像。

    加载原始 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]])

    腺体.单位 = 腺体_f​​acet_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')`

图片:

原始stl网格 原始stl网格

分割的stl网格 分割的stl网格

从分割网格中可以看出,两个网格的连接之间存在孔。如何获得闭合网格?任何线索将不胜感激。

问候, Sunag R A.

4

0 回答 0