반응형
생각보다 실행시간이 너무 오래걸려서 코드를 개선하며 시간을 단축시키려고 한다. 시간이 단축되는지 알려면 먼저 코드 실행시간을 측정해야한다.
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초
반응형
'STL > stl - cutting하기' 카테고리의 다른 글
[파이썬] STL을 평면으로 자르기 #6. 시간 잡아먹는 부분 확인 (0) | 2022.02.06 |
---|---|
[파이썬] STL을 평면으로 자르기 #5. 속도개선 시도 (성공) (0) | 2022.02.06 |
[파이썬] STL을 평면으로 자르기 #4. 속도개선 시도 (0) | 2022.02.05 |
[파이썬] STL을 평면으로 자르기 #3. 속도개선 (20초 근처로 단축) (0) | 2022.02.05 |
[파이썬] STL을 평면으로 자르기 #1. 교점구하기 (0) | 2021.10.26 |
댓글