Загрузка 3D-модели, но получение 2D-массива в Python - PullRequest
0 голосов
/ 05 июля 2018

Я скачал пример файла .stl отсюда: [https://www.thingiverse.com/thing:156207]

Затем я использовал этот код для получения пустого массива для дальнейшей обработки изображений с помощью matplotlib:

import numpy as np
from stl import mesh
np.set_printoptions(threshold=np.nan)


# Using an existing stl file:
your_mesh = mesh.Mesh.from_file('300_polygon_sphere_100mm.stl')

data = np.array(your_mesh)
print(data.shape)

К сожалению, это массив только с двумя измерениями. Я проверил файл .stl с моим редактором, и есть три измерения.

Может ли кто-нибудь мне помочь? Моя цель - создать код, с помощью которого я могу нарезать 3D-модели, чтобы получить доступ к нарезанным 2-мерным изображениям.

Спасибо.

РЕДАКТИРОВАТЬ: Я пытался изменить его:

data_reshaped = np.reshape(data, (550, 3, 3))

Но я думаю, это совершенно неправильно. И я не знаю, если шаблон (Z, X, Y).

Я хочу сделать несколько операций среза в массиве 3d, чтобы получить XY-изображения, как этот парень очень легко делает https://www.youtube.com/watch?v=5jQVQE6yfio&list=PLT66ZlnovHPYzny9TYM1mx02k5Xnw_kjw&t=215s&index=3

1 Ответ

0 голосов
/ 05 июля 2018

Вы не сможете просто загрузить файл .stl в массивный массив и выполнить нарезку, как показано в видео, которое вы связали. В видео они загружают модель, которая хранится в виде трехмерного массива.

Однако модель, которую вы пытаетесь загрузить, состоит из полигональной сетки. Это означает, что у вас есть только значения координат вершин. Вы можете открыть файл .stl в текстовом редакторе, чтобы увидеть его содержимое. (Преобразовав загруженную сетку в массив NumPy, вы просто извлекаете эти значения координат. Вы можете фактически сравнить значения в массиве NUMPY и текстовом файле, они совпадают.) Полученный массив NUMPY имеет форму (550, 9). Первое измерение определяется количеством граней в модели (в этом случае модель имеет 550 граней). Поскольку у каждой грани есть три вершины, каждая из которых имеет три значения координат, следовательно, у вас есть 9 чисел на грани. Таким образом, третье измерение не потеряно. Он просто хранится по-другому.

Простая перестройка массива не создаст вам модель, из которой вы можете получить кусочки, как показано на видео. Чтобы достичь этого, вы должны преобразовать сетчатую модель в растеризованную. Это можно сделать, инициализировав пустой трехмерный массив, содержащий всю модель, а затем определив для каждого пикселя, пересекается ли он с геометрией загруженной сетки.

...