본문 바로가기
반응형

STL27

pyvista 원근법 설정 전후 비교 코드는 아래와 같습니다. 원근법을 끌 때는 enable_parallel_projection( ) 메소드를 사용합니다. import pyvista as pv from pyvista import demos pl = pv.demos.orientation_plotter() pl.enable_parallel_projection() #원근법 제거 pl.show() 아래 왼쪽 그림은 원근법을 끈 경우이고, 오른쪽 그림은 원근법을 킨 경우입니다. 2023. 12. 15.
numpy-stl mesh 데이터를 pyvista PolyData 로 바꾸기가 힘든 이유 numpy-stl 의 mesh 모듈에서 stl 을 생성하는 방식을 먼저 알아보겠습니다. mesh 모듈에서는 하나의 face 를 구성하는 점의 좌표만을 이용하여 face 를 정의합니다. 어떤 face1 을 구성하는 점의 좌표가 p1,p2,p2 라고 한다면 아래와 같이 정의되는 것입니다. face1=[p1,p2,p3] p1,p2,p3는 각각 크기가 3인 벡터입니다. 반면! pyvista 는 사용할 점들을 모아놓은 배열을 정의하고, 배열의 인덱스를 가져다가 face 를 정의합니다. 예를들어 face1 을 구성하는 점이, 점들을 모아놓은 배열에서 각각 2,8,4 번째라면 face1 은 아래와 같이 정의됩니다. face1=[2,8,4] 자, 이제 numpy-mesh 로 정의된 stl 을 pyvista 로 변환해야.. 2023. 12. 8.
파이썬 STL 시각화 패키지 numpy-stl 글 하나로 끝내기 오늘 사용할 stl 은 아래와 같습니다. 다운받아서 사용하시면 됩니다. 먼저 stl을 불러와봅시다. 코드는 아래와 같습니다. import os from stl import mesh import numpy as np #stl이 있는 폴더 경로 path="폴더경로" #폴더 경로를 현재 디렉토리로 os.chdir(converted_path) #stl 불러오기 cat = mesh.Mesh.from_file('cat.stl') 데이터를 살펴봅시다. 아래와 같이 콘솔창이 입력합니다. >>> cat 데이터타입이 stl.mesh.Mesh 라는 것을 알 수 있습니다. 1. 각 매쉬 별 점 정보를 알고 싶어요! 아마 우리는 각 삼각매쉬를 형성하고 있는 점 정보를 주로 다룰 것입니다. 각 매쉬는 세개의 점으로 구성되어 있습.. 2023. 12. 8.
파이썬 STL 시각화 패키지 pyvista 글 하나로 끝내기 오늘 사용할 stl 은 아래와 같습니다. 다운받아서 사용하시면 됩니다. 먼저 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 A.. 2023. 12. 8.
[numpy-stl] stl 생성 원리 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.vec.. 2023. 5. 26.
[파이썬] STL을 평면으로 자르기 #8. 속도개선 2초대로 줄임 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) #교점이 저장될.. 2022. 2. 8.
[파이썬] STL을 평면으로 자르기 #7. 속도개선 4초대로 줄임 평면의 어느편에 있는지 판단하는걸 패키지 함수를 사용했었는데, 직접 계산하도록 수정했다. >>> time4 [4.5958613000002515, 4.686201099997561, 4.7097910000011325, 4.7155559999991965, 4.911541900000884] 4초대로 줄었다. 더 줄일 수 있을까. 2022. 2. 6.
[파이썬] STL을 평면으로 자르기 #6. 시간 잡아먹는 부분 확인 else 문을 지워봤는데 시간차이가 별로 없다. 아마 else 문에 걸리는 점들이 몇개 없어서 그런 것 같다. if문 자체를 빼봤는데 시간차이가 없다. 뭐지...여기서 비교연산 등을 수행하는건 시간이 거의 들지 않는다는 말인가. 평면의 어느 쪽에 있는지 구하는 코드를 지웠더니 시간이 2초대로 줄어든다. 아래는 시간변화다. >>> time3_original [16.10053549999975, 13.224060499999723, 14.326108700000077, 16.356680699999743, 13.758388700000069] >>> time3 [2.8779554000002463, 2.8111312999999427, 2.914083199999368, 2.9338815999999497, 2.833796.. 2022. 2. 6.
[파이썬] STL을 평면으로 자르기 #5. 속도개선 시도 (성공) if 문에서 계산 후 비교하는 것을 그냥 비교하는걸로 바꿨다. 시간이 약간 줄었다. >>> time2 [13.642363099999997, 11.509126199999997, 13.2013338, 17.86278129999998, 12.619769899999994] >>> time3 [10.019133699999998, 10.265788899999961, 10.640305100000091, 11.123026500000037, 11.977286100000015] 2022. 2. 6.
[파이썬] STL을 평면으로 자르기 #4. 속도개선 시도 왼쪽 코드를 오른쪽과 같이 바꿨다. 평면 어느 쪽에 있는지 여부를 계산하는 것을 처음에만 하고 변수에 넣었다. 시간이 오히려 늘었다. 큰 의미없는 차이다. >>> time [16.898227600000155, 17.11739409999973, 16.90786509999998, 16.87015599999995, 17.234067800000048] >>> time2 [17.96122940000032, 16.95500889999994, 17.137785200000053, 17.103367199999866, 17.54229200000009] 2022. 2. 5.
[파이썬] STL을 평면으로 자르기 #3. 속도개선 (20초 근처로 단축) 코드 실행속도를 개선하기 위해 for 문을 아래와 같이 수정해보았다. 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))*pl.side_point(p3)==2 : pass else : 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)=.. 2022. 2. 5.
[파이썬] STL을 평면으로 자르기 #2. 코드 실행 시간 계산하기 생각보다 실행시간이 너무 오래걸려서 코드를 개선하며 시간을 단축시키려고 한다. 시간이 단축되는지 알려면 먼저 코드 실행시간을 측정해야한다. 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 #코드 실행시간 확인 #.. 2022. 2. 5.
[파이썬] 3차원 공간에 라벨 표시하기 (pyvista) 3차원 공간에 라벨을 표시하는 방법은 아래와 같습니다. 다양한 옵션 적용이 가능합니다. import pyvista as pv #라벨 위치 정의 x_label=pv.PolyData([0,0,0]) y_label=pv.PolyData([0,10,0]) z_label=pv.PolyData([0,20,0]) # 캔버스 정의 p = pv.Plotter() #라벨 그리기 p.add_point_labels(x_label, ["x"],point_color='yellow',text_color='red', point_size=20, font_size=40,render_points_as_spheres=True,always_visible=True,show_points=False) p.add_point_labels(y_labe.. 2022. 1. 18.
[파이썬] 3차원에 선 그리기 (pyvista) 3차원 공간에 선을 그리는 방법은 아래와 같습니다. import pyvista as pv #선 정의 x_axis=pv.Line((0,0,0),(150,0,0)) y_axis=pv.Line((0,0,0),(0,150,0)) z_axis=pv.Line((0,0,0),(0,0,150)) # 캔버스 정의 p = pv.Plotter() # 선 그리기 p.add_mesh(x_axis,color='yellow') p.add_mesh(y_axis,color='yellow') p.add_mesh(z_axis,color='yellow') #그래프 보이기 p.show() 2022. 1. 18.
[파이썬] 점 3차원 그래프 그리고 크기,색 설정 (pyvista) 넘파이를 이용하여 점을 생성합니다. import numpy as np import pyvista as pv point = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) 그래프를 그려봅시다. p = pv.Plotter() # 캔버스 정의 p.add_mesh(point) p.show() 설정할 수 있는 옵션은 아래와 같습니다. add_mesh(self, mesh, color=None, style=None, scalars=None, clim=None, show_edges=None, edge_color=None, point_size=5.0, line_width=None, opacity=1.0, flip_scalars=False, l.. 2021. 11. 8.
반응형