Я генерирую 2D бинарные фигуры в python. После этого я хочу, чтобы они были преобразованы в файл 3D STL для 3D-печати. Этот вид работ, но только с «простыми» формами, такими как треугольники и квадраты. Для более сложных фигур я получаю следующую форму:
Итак, как мы можем видеть, это выглядит как двоичное изображение, но с еще некоторыми "артефактами". Я использую:
- триангуляция Делоне (от scipy)
- numpy -stl для генерации файла stl (для генерации нужны вершины + грани, что является причиной триангуляции )
- numpy для сохранения / загрузки моих фигур
Вот мой код:
import numpy as np
from scipy.spatial import Delaunay
from stl import mesh
from numpy import loadtxt
def load_shape(id):
return loadtxt("../shapes/shape_{}.shape".format(id))
def extract_vertices(shape):
arr = []
for ix, x in enumerate(shape):
for iy, y in enumerate(x):
if y == 0:
arr.append([ix, iy])
return np.array(arr)
def vertices_2d_to_3d(vertices, z=10):
x, y = vertices.shape
new = np.zeros((x*2, y + 1))
for i, v in enumerate(vertices):
new[i] = [v[0], v[1], 0]
new[x+i] = [v[0], v[1], z]
return new
shape = load_shape(4)
vertices = extract_vertices(shape)
vertices = vertices_2d_to_3d(vertices, 10)
tri = Delaunay(vertices)
faces = tri.convex_hull
ms = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))
for i, f in enumerate(faces):
for j in range(3):
ms.vectors[i][j] = vertices[f[j],:]
ms.save('shape.stl')
Может кто-нибудь дать мне несколько советов о том, как избавиться из этих "артефактов" и сказать триангуляции Делоне не соединять вершины, которые не в форме?