본문 바로가기
STL/한눈에보기

파이썬 STL 시각화 패키지 pyvista 글 하나로 끝내기

by 만다린망고 2023. 12. 8.
반응형

오늘 사용할 stl 은 아래와 같습니다. 다운받아서 사용하시면 됩니다. 

CAT.stl
3.37MB



먼저 stl을 불러와봅시다. 코드는 아래와 같습니다. 

import os
import pyvista as pv

#stl이 있는 폴더 경로
path="폴더경로"

#폴더 경로를 현재 디렉토리로
os.chdir(converted_path)
#stl 불러오기
cat = pv.read('cat.stl')


데이터를 살펴봅시다. 아래와 같이 콘솔창이 입력합니다. 

>>> cat
PolyData (0x229750ded40)
  N Cells:      70576
  N Points:     35290
  X Bounds:     -6.278e+03, 6.278e+03
  Y Bounds:     -2.226e+04, 3.863e+04
  Z Bounds:     5.300e+00, 3.761e+04
  N Arrays:     0


데이터타입이 PolyData라는 것을 알 수 있습니다. 

 

1. 각 매쉬 별 점 정보를 알고 싶어요!

아마 우리는 각 삼각매쉬를 형성하고 있는 점 정보를 주로 다룰 것입니다. 각 매쉬는 세개의 점으로 구성되어 있습니다. 각 매쉬별 점 정보를 출력하는 방법은 아래와 같습니다. 아래는 첫번째 매쉬를 구성하는 점 정보를 출력하는 방법입니다. cell_points 메소드를 사용합니다. 

>>> cat.cell_points(0) 
array([[   613.40002441, -21935.69921875,  31444.09960938],
       [   620.5       , -21854.09960938,  31493.5       ],
       [   553.40002441, -21868.19921875,  31515.90039062]])


괄호 안에 매쉬의 index를 넣어주면 됩니다. 매쉬가 몇개 있는지는 어떻게 알 수 있을까요? n_cells 메소드를 사용합니다. 

>>> cat.n_cells
70576



인덱스는 0부터 시작이므로 마지막 인덱스는 70575입니다. 

 

2. 각 매쉬 별 법선벡터를 알고 싶어요!

각 삼각매쉬의 법선벡터를 사용하는 경우도 종종 있습니다. 각 삼각매쉬의 법선벡터를 확인하는 방법은 아래와 같습니다. 

>>> cat.face_normals
pyvista_ndarray([[ 0.3669228 , -0.50492173,  0.7812949 ],
                 [ 0.3570967 , -0.51294166,  0.7806233 ],
                 [ 0.37418526, -0.3939576 ,  0.8395134 ],
                 ...,
                 [ 0.02671368, -0.6064686 , -0.79465854],
                 [ 0.00216359, -0.5883112 , -0.8086317 ],
                 [-0.0128019 , -0.6195362 , -0.78486365]], dtype=float32)


shape은 아래와 같습니다. 

>>> cat.face_normals.shape
(70576, 3)



매쉬의 개수와 같다는 것을 알 수 있습니다. 

 

3. 모든 점을 출력하고 싶어요!

매쉬와 상관없이 모델을 구성하는 모든 점들을 출력하고 싶은 경우도 있습니다. points 메소드를 사용합니다. 

>>> cat.points
pyvista_ndarray([[   613.4, -21935.7,  31444.1],
                 [   620.5, -21854.1,  31493.5],
                 [   553.4, -21868.2,  31515.9],
                 ...,
                 [ -1025.5, -15684.9,  15649.1],
                 [  -721.7, -15387.3,  15388.2],
                 [  -372.2, -15083.9,  15168.4]], dtype=float32)


shape은 아래와 같습니다. 

>>> cat.points.shape
(35290, 3)


총 35290개의 점으로 구성된 것을 알 수 있습니다. 점의 개수만 확인하는 메소드도 있습니다. n_points 입니다. 

>>> cat.n_points
35290

 

4. 시각화 해주세요!

마지막으로 시각화를 해봅시다. cat.stl 을 시각화하는 방법은 아래와 같습니다. 

import os
import pyvista as pv

#stl이 있는 폴더 경로
path="폴더경로"

#폴더 경로를 현재 디렉토리로
os.chdir(converted_path)
#stl 불러오기
cat = pv.read('cat.stl')

# Create a plot
p = pv.Plotter() # 캔버스 정의 
p.add_mesh(cat, opacity=1, color='red')
p.show()

 

반응형

댓글