반응형
pyvista 쓰던걸 numpy-stl 모듈로 바꿨다. 속도가 2초대로 줄었다.
time5=[]
for i in range(5):
import timeit
time_start = timeit.default_timer() # 시작 시간 체크
import os
import numpy as np
from stl import mesh
from skspatial.objects import Plane
from skspatial.objects import Point
from skspatial.objects import Line
#STL 가져오기
ctl = mesh.Mesh.from_file('python_stl\CAT.stl') #STL 불러오기
#교점 찾기
inter_point=np.zeros(3) #교점이 저장될 변수
a=[0,-160,0]
n=[0,1,0]
for i in range(ctl.vectors.shape[0]-1): #교점을 찾는 for문
p1=ctl.vectors[i][0]
p2=ctl.vectors[i][1]
p3=ctl.vectors[i][2]
p1_sp=sum((p1-a)*n)/abs(sum((p1-a)*n))
p2_sp=sum((p2-a)*n)/abs(sum((p2-a)*n))
p3_sp=sum((p3-a)*n)/abs(sum((p3-a)*n))
if p1_sp==p2_sp==p3_sp :
pass
else :
if p1_sp*p2_sp==-1 :
inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p1,p2))))
if p1_sp*p3_sp==-1 :
inter_point=np.vstack((inter_point,pl.intersect_line(Line.from_points(p1,p3))))
if p2_sp*p3_sp==-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 형식으로 변환
# cat = pv.read('python_stl\CAT.stl') #STL을 시각화하기 위해 pyvista 패키지이용해서 불러옴
# p = pv.Plotter() # 캔버스 정의
# p.add_mesh(cat, 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))
time5.append(time_end - time_start)
아래는 결과다.
>>> time5
[2.4808239999983925, 2.4890664999984438, 2.510372999997344, 2.5054430999880424, 2.5771495000080904]
반응형
'STL > stl - cutting하기' 카테고리의 다른 글
[파이썬] STL을 평면으로 자르기 #7. 속도개선 4초대로 줄임 (0) | 2022.02.06 |
---|---|
[파이썬] 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 |
댓글