반응형
numpy-stl 에서 정사면체를 생성하는 예제는 아래와 같습니다.
import numpy as np
from stl import mesh
# mesh points
vertices = np.array([[0, 0, 0],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
# mesh faces
faces = np.array([[0,1,2], # square
[0,1,3], # triangle
[0,2,3],
[1,2,3]]) # triangle
# Create the mesh
cube = mesh.Mesh(np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype))
for i, f in enumerate(faces):
for j in range(3):
cube.vectors[i][j] = vertices[f[j],:]
vertices 변수에 총 네개의 점을 생성했습니다. 각각의 점은 순서 대로 0번, 1번, 2번, 3번 점 입니다. 점의 번호를 이용하여 faces 변수에 면을 생성합니다.
np.zeros(faces.shape[0],dtype=mesh.Mesh.dtype) 을 이용하여 배열을 하나 생성합니다. faces.shape[0] 은 면의 개수입니다. 생성된 배열은 아래와 같습니다.
>>> np.zeros(faces.shape[0], dtype=mesh.Mesh.dtype)
array([([0., 0., 0.], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [0]),
([0., 0., 0.], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [0]),
([0., 0., 0.], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [0]),
([0., 0., 0.], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [0])],
dtype=[('normals', '<f4', (3,)), ('vectors', '<f4', (3, 3)), ('attr', '<u2', (1,))])
이 배열은 mesh.Mesh 의 입력값으로 사용됩니다. mesh.Mesh에 위배열을 입력하고 cube 라는 변수를 생성했습니다. cube 를 인터프리터 창에 입력해보면 아래와 같습니다.
>>> cube
<Mesh: '' 4 vertices>
점이 4개 라고만 출력됩니다. 이어서 for 문을 이용하여 cube.vectors 를 채워줍니다. 최종 생성된 cube.vectors 는 아래아 같습니다.
>>> cube.vectors
array([[[0., 0., 0.],
[1., 0., 0.],
[0., 1., 0.]],
[[0., 0., 0.],
[1., 0., 0.],
[0., 0., 1.]],
[[0., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]],
[[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]]], dtype=float32)
세개의 점이 하나의 face 를 이루고 있습니다. face 는 총 4개 입니다.
반응형
'STL > numpy stl 모듈' 카테고리의 다른 글
파이썬 numpy stl 모듈에서 stl 병진,회전,변환(translate, rotate, transform) (0) | 2021.11.08 |
---|---|
파이썬에서 stl 파일 다루는 패키지 소개(numpy-stl) (0) | 2021.10.22 |
댓글