본문 바로가기
반응형

STL27

파이썬 pyvista 모듈에서 stl 병진,회전,변환(translate, rotate, transform) 넘파이와, pyvista 모듈을 불러옵니다. import numpy as np import pyvista as pv mesh 하나를 정의합시다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4], # triangle [3, 1, 2, 4]]) # triangle mesh = pv.PolyData(vertices, faces) 병진,회전,변환 메소드는 아래와 같이 사용합니다. STL.tran.. 2021. 11. 8.
파이썬 numpy stl 모듈에서 stl 병진,회전,변환(translate, rotate, transform) 넘파이와, stl 모듈을 불러옵니다. import numpy as np from stl import mesh mesh를 하나 불러와서 STL이라는 변수에 입력했다고 가정합시다 . STL=mesh.Mesh.from_file('ex.stl') 병진,회전,변환 메소드는 아래와 같이 사용합니다. STL.translate(np.array([x,y,z])) STL.rotate(axis, theta=0, point=None) STL.transform(matrix) ; 4x4 행렬 2021. 11. 8.
pyvista 자료형인 PolyData 에서 사용가능한 메소드들 pyvista에서 stl을 생성하거나, point cloud를 생성하거나, stl 을 불러올 때 사용하는 메소드는 pv.PolyData 입니다. PolyData에서 사용가능한 메소드들을 살펴봅시다. 먼저 PolyData 를 하나 생성하였습니다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4], # triangle [3, 1, 2, 4]]) # triangle mesh = pv.PolyDa.. 2021. 11. 8.
pyvista 매쉬 생성 원리 pyvista에서는 아래 형식으로 매쉬를 생성합니다. import pyvista as pv mesh = pv.PolyData(vertices, faces) vertices는 매쉬 생성에 사용되는 점이고, faces는 면에 대한 정보입니다. 아래는 pyvista documentation 에서 제공하는 예시입니다. import numpy as np import pyvista as pv # mesh points vertices = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, -1]]) # mesh faces (일렬로 나열한 것과 같음) faces = np.hstack([[4, 0, 1, 2, 3], # square [3, 0, 1, 4],.. 2021. 11. 8.
[파이썬] STL을 평면으로 자르기 #1. 교점구하기 STL과 내가 지정한 평면 사이의 교점을 얻는 코드를 짜보았다. 고양이 모델을 사용했다. 먼저 사용한 고양이 모델을 공유한다. 평면을 하나 만들고 교점을 구했다. 평면은 skspatial 패키지를 사용했다. STL을 불러와 교점을 구하는데는 numpy-stl 패키지를 사용했고, 시각화에는 pyvista 패키지를 사용했다. 평면,선 등 정의 및 계산 : skspatial 패키지 STL 불러와 계산 : numpy-stl 패키지 시각화 : pyvista 패키지 결과는 아래와 같다. 코드는 아래와 같다. 설명은 주석에 써놓았다. import os import numpy as np import pyvista as pv from skspatial.objects import Plane from skspatial.ob.. 2021. 10. 26.
[파이썬] STL 3차원 그래프 그리기 (pyvista) STL 파일을 불러와서 3차원에 시각화하려고 하는데 matplotlib 로 그리니까 너무 느리다. 심각하게 느려서 View 변경하는게 거의 불가능한 정도였다. 다른 방법을 찾던 중 pyvista 라는 패키지를 알게 되었다. 매쉬 데이터의 3차원 시각화가 목적인 패키지다. 써봤는데 엄청빠르다. 아래와 같은 형식으로 사용한다. pv.read 를 이용하여 stl을 불러오고 Plotter 함수를 이용하여 그려준다. import os import pyvista as pv path="C:/Users/python_stl" os.chdir(path) cat = pv.read('cat.stl') # Create a plot p = pv.Plotter() # 캔버스 정의 p.add_mesh(cat, opacity=1, c.. 2021. 10. 26.
파이썬에서 stl 파일 다루는 패키지 소개(numpy-stl) STL 파일은 삼각 매쉬형태로 된 3차원 파일입니다. 파이썬에서 STL 파일을 다룰 때는 stl 패키지를 사용합니다. stl 패키지는 numyp 에 의존합니다. array를 사용한다는 말입니다. 아래와 같이 설치합니다. pip install numpy-stl stl 패키지 안에는 아래와 같은 다섯개의 모듈이 있습니다. stl.Mesh stl.main stl.base stl.mesh stl.stl stl 파일을 다룰 때는 mesh 모듈을 사용하며 아래와 같이 불러서 사용합니다. import numpy as np from stl import mesh cat.stl 이라는 파일을 갖고 있다고 합시다. stl을 불러오는 방법은 아래와 같습니다. ctl = mesh.Mesh.from_file('cat.stl') .. 2021. 10. 22.
[파이썬과 STL] 5. 두 점과 평면의 교점 함수 사용해보기 [파이썬과 STL] 5. 두 점과 평면의 교점 함수 사용해보기 지난시간에 정의한 함수를 사용해봅시다. import numpy as np def po2pl1(p,q,a,N): P_p=np.dot(N,p)-np.dot(N,a) P_q=np.dot(N,q)-np.dot(N,a) result=P_p*P_q if result>0: print("no intersection point") else : return abs(P_q)/(np.abs(P_p)+np.abs(P_q))*p+abs(P_p)/(np.abs(P_p)+np.abs(P_q))*q 평면은 (0,5,0)을 지나고, 법선벡터로 (0,1,0)을 갖는 평면입니다. a=np.array([0,5,0])N=np.array([0,1,0]) 점은 아래와 같이 세 점이 있.. 2020. 11. 12.
[파이썬과 STL] 4. 두 점과 평면의 교점 함수 [파이썬과 STL] 4. 두 점과 평면의 교점 함수 지난시간에 두 점과 평면의 교점을 구한 코드를 가져옵시다. import numpy as np #두 점p=np.array([2,4,5])q=np.array([-4,-2,-6]) #평면a=np.array([1,3,2])N=np.array([2,3,5]) #두 점의 평면의방정식 함수값P_p=np.dot(N,p)-np.dot(N,a)P_q=np.dot(N,q)-np.dot(N,a) #결과, 음수인 경우 교점 존재result=P_p*P_q #교점inter_p=abs(P_q)/(np.abs(P_p)+np.abs(P_q))*p+abs(P_p)/(np.abs(P_p)+np.abs(P_q))*q 이제 함수로 바꿔봅시다. 아래와 같이 바꿨습니다. def po2pl1(p,.. 2020. 11. 12.
[파이썬과 STL] 3. 두 점과 평면의 교점 [파이썬과 STL] 3. 두 점과 평면의 교점 STL 을 평면으로 잘라서 section 을 얻고 싶습니다. 이를 위해 평면과 두 점을 입력하면 두 점을 연결한 선분과 평면의 교점을 구해주는 함수가 필요합니다. 교점이 없는 경우는 아무 것도 반환하지 않고, 교점이 있는 경우는 점을 반환합니다. 평면은 한 점과, 법선벡터로 정의됩니다. 한점 (a,b,c)법선벡터 (n1,n2,n3) 위 두 조건을 만족하는 평면의 방정식은 아래와 같습니다. P(x,y,z)라고 놓겠습니다. P(x,y,z)=n1(x-a)+n2(y-b)+n3(z-c)=0 아래와 같이 벡터의 내적 형태로도 놓을 수 있습니다. P(x,y,z)=[n1,n2,n3][x,y,z]-[n1,n2,n3][a,b,c]=0 임의의 두 점을 (p1,p2,p3) (q1.. 2020. 11. 12.
[파이썬과 STL] 2. STL 데이터 접근하기 [파이썬과 STL] 2. STL 데이터 접근하기 지난 시간에 만든 코드에 이어서 설명하겠습니다. import osfrom stl import mesh path="C:/Users" os.chdir(path)ctl = mesh.Mesh.from_file('CAT.stl') stl 데이터가 ctl 이라는 변수에 저장되었습니다. stl 파일을 다룰 수 있는 여러가지 매소드가 있습니다. 점에 접근하는 메소드만 살펴봅시다. 1) points 매소드 점에 접근하는 method 는 points 입니다. >>> ctl.pointsarray([[ 613.4, -21935.7, 31444.1, ..., 553.4, -21868.2, 31515.9], [ 613.4, -21935.7, 31444.1, ..., 546.4, -.. 2020. 11. 12.
[파이썬과 STL] 1. STL 불러오기 stl 포멧은 3차원 형상의 표면을 삼각형 매쉬형태로 저장한 것입니다. stereolithography의 줄임말이고, 3D 시스템즈가 개발했습니다. 파이썬에서 STL 파일을 불러오고, STL을 원하는 대로 다루는 방법을 공부하려고 합니다. Section 생성, 측정 등을 할 예정입니다. 먼저 STL 파일을 구해야하는데요. 아래 홈페이지에서 고양이 obj 파일을 받아서 stl로 변환했습니다. https://free3d.com/ 다운로드 -> 다운로드 후 원하는 위치에 저장합니다. 저는 C드라이브 Users 폴더에 저장했습니다. STL을 불러와봅시다. stl 패키지가 설치되어 있어야 하며 아래와 같이 설치합니다. pip install numpy-stl 설치한 후 파이썬에서 아래와 같은 코드를 이용하여 slt.. 2020. 10. 15.
반응형