파이썬 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] 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.