Создать файл .stl из набора точек - PullRequest
0 голосов
/ 05 февраля 2020

Таким образом, программное обеспечение, которое я использую, принимает трехмерные объекты в форме контуров или файлов .stl. Контуры, которые у меня есть, расположены вдоль плоскости z (каждая плоскость имеет уникальный z). Мне пришлось изменить контуры для моего эксперимента, и теперь у контуров нет уникального z для каждой плоскости (теперь они слегка наклонены относительно плоскости z = 0).

Точки представляют края 3D объект. Как лучше всего взять этот набор точек и создать файл .stl?

Я относительно новичок в работе с python и трехмерными объектами, поэтому любая помощь, указатели или предложения будут высоко оценены. .

Редактировать: у меня есть симплексы и вершины, использующие Delaunay (), но как мне продолжить дальше?

Координаты всех точек находятся в этом текстовом файле в формате "xyz".

1 Ответ

0 голосов
/ 25 апреля 2020

Итак, после нескольких месяцев поиска ответа и попытки использовать Meshlab и Blender я, наконец, наткнулся на ответ, используя numpy -stl . Надеемся, что это поможет другим в подобной ситуации.

Вот код для создания файла .STL:

from stl import mesh
num_triangles=len(fin_list)
data = np.zeros(num_triangles, dtype=mesh.Mesh.dtype)
for i in range(num_triangles):
    #I did not know how to use numpy-arrays in this case. This was the major roadblock
    # assign vertex co-ordinates to variables to write into mesh
    data["vectors"][i] = np.array([[v1x, v1y, v1z],[v2x, v2y, v2z],[v3x, v3y, v3z]])
m=mesh.Mesh(data)
m.save('filename.stl')

Три вершины, которые образуют треугольник в me sh go в качестве вектора, определяющего нормаль поверхности. Я просто собрал три таких вершины, которые образуют треугольник, и записал их в me sh. Поскольку у меня был обычный массив точек, было легко собирать треугольники:

for i in range(len(point_list)-1):
        plane_a=[]
        plane_b=[]
        for j in range(len(point_list[i])-1):
            tri_a=[]
            tri_b=[]
            #series a triangles
            tri_a.append(point_list[i+1][j])
            tri_a.append(point_list[i][j+1])
            tri_a.append(point_list[i][j])
            #series b triangles
            tri_b.append(point_list[i+1][j])
            tri_b.append(point_list[i+1][j+1])
            tri_b.append(point_list[i][j+1])
            #load to plane
            plane_a.append(tri_a)
            plane_b.append(tri_b)
        group_a.append(plane_a)
        group_b.append(plane_b)

Правила выбора треугольников для создания me sh следующие:

  1. Вершины должны быть расположены в направлении против часовой стрелки.
  2. Каждый треугольник должен делить две вершины со смежными треугольниками.
  3. Нормаль направления должна указывать из поверхности.

Существовали еще два правила, которые я не соблюдал, но они все еще работали в моем случае: 1. Все координаты должны быть положительными (только в 1-м квадранте) 2. Все треугольники должны быть расположены в увеличение z-порядка.

Примечание. Существует два вида форматов файлов .STL: двоичный и ASCII. numpy -stl записывает в двоичном формате. Больше информации о файлах STL можно найти здесь .

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...