본문 바로가기
STL/stl - cutting하기

[파이썬] STL을 평면으로 자르기 #2. 코드 실행 시간 계산하기

by 만다린망고 2022. 2. 5.
반응형

생각보다 실행시간이 너무 오래걸려서 코드를 개선하며 시간을 단축시키려고 한다. 시간이 단축되는지 알려면 먼저 코드 실행시간을 측정해야한다. 

 

timeit 패키지를 사용한다. 시작한 시각을 측정하고, 종료 시각을 측정해서 그 차이를 구하면 소요시간이다. 아래와 같이 코드 맨 앞과 뒤에 입력하면 된다. 

 

import timeit
time_start = timeit.default_timer() # 시작 시각 체크

import os
import numpy as np
import pyvista as pv

from skspatial.objects import Plane
from skspatial.objects import Point
from skspatial.objects import Line

#코드 실행시간 확인


#STL 가져오기
ctl = pv.read('python_stl\CAT.stl') #STL 불러오기

#교점 찾기
inter_point=np.zeros(3) #교점이 저장될 변수

pl=Plane([0,-160,0],[0,1,0]) #원하는 평면

for i in range(ctl.n_cells-1): #교점을 찾는 for문
    p1=ctl.cell_points(i)[0]
    p2=ctl.cell_points(i)[1]
    p3=ctl.cell_points(i)[2]

    if pl.side_point(p1)*pl.side_point(p2)==-1 :
        inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p1,p2))))

    if pl.side_point(p1)*pl.side_point(p3)==-1 :
        inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p1,p3))))

    if pl.side_point(p2)*pl.side_point(p3)==-1 :
        inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p2,p3))))

inter_point=inter_point[1:,] #찾은 교점에서 더미로 입력한 [0,0,0] 제거

print(inter_point) #교점 출력해보기



##시각화하기

pvpoint=pv.PolyData(inter_point) #교점을 PolyData 형식으로 변환

p = pv.Plotter() # 캔버스 정의 
p.add_mesh(ctl, opacity=1, color='red') # STL 시각화
p.add_mesh(pvpoint,point_size=5,style='points') # 교점 시각화
p.show() #그래프 보이기


time_end = timeit.default_timer() # 종료 시각 체크  
 
print("소요시간 : %f초" % (time_end - time_start))

 

테스트를 세번 해봤는데 아래와 같다. 

 

>>> print("소요시간 : %f초" % (time_end - time_start))
소요시간 : 32.108151초

>>> print("소요시간 : %f초" % (time_end - time_start))
소요시간 : 33.877486초

>>> print("소요시간 : %f초" % (time_end - time_start))
소요시간 : 36.463264초

 

반응형

댓글