Python de 3DCAD ~ Spline Surface ~
7860 단어 OpenCASCADE3DCADPython
Surface 생성 코드
코드는 이것입니다.
빨간색 서피스와 파란색 서피스는 모양 자체가 같지만 gp에서는Ax3을 사용하여 변경합니다.
간이 된 부분만 발췌하다.
def spl_face(px, py, pz, axs=gp_Ax3()):
nx, ny = px.shape
pnt_2d = TColgp_Array2OfPnt(1, nx, 1, ny)
for row in range(pnt_2d.LowerRow(), pnt_2d.UpperRow() + 1):
for col in range(pnt_2d.LowerCol(), pnt_2d.UpperCol() + 1):
i, j = row - 1, col - 1
pnt = gp_Pnt(px[i, j], py[i, j], pz[i, j])
pnt_2d.SetValue(row, col, pnt)
#print (i, j, px[i, j], py[i, j], pz[i, j])
api = GeomAPI_PointsToBSplineSurface(pnt_2d, 3, 8, GeomAbs_G2, 0.001)
api.Interpolate(pnt_2d)
face = BRepBuilderAPI_MakeFace(api.Surface(), 1e-6).Face()
face.Location(set_loc(gp_Ax3(), axs))
return face
px,py,pz는 (n×n)의np이다.아리를meshgrid로 생성되어 해당 서피스의 Grid 데이터를 pz로 가져옵니다.그리고 Tcolgp.Array2 Offnt라는 Open CASCADE의 gpPnt 대신 2D 정렬(for loop 섹션), GeomapIPoints Tob Spline Surface를 먹입니다.
GeomAPI_PointsToBSplineSurface는 실질적인 SplineSurface를 생성하는 함수입니다. 자세한 내용은 여기. 참조.
TColgp_Arrray2Ofpnt 이후의 두 수치(3,8)는 Spline의 근사 다항식을 생성할 때 가장 작은 순서와 가장 큰 순서입니다.
GeomAbs_G2는 부드러움을 정의합니다.기타 GeomAbs도 있어요.C0, GeomAbs_C1, GeomAbs_C2, GeomAbs_G1 등이 있다.G2는 2단계 미분 가능성을 가리킨다.
마지막으로 0.001은 입력한 점 그룹과 서피스의 오차가 이 값보다 낮도록 서피스를 생성합니다.
예외 값만 입력
예쁜 그룹 데이터를 넣어도 재미없기 때문에 생성된 데이터에 이상값을 넣어 보세요.
코드는 여기.입니다.
데이터 생성 부분만 발췌하다.
px = np.linspace(-1, 1, 100) * 100 + 50
py = np.linspace(-1, 1, 200) * 100 - 50
mesh = np.meshgrid(px, py)
data = mesh[0]**2 / 1000 + mesh[1]**2 / 2000
data[100, 50] = 100.0
(200x100)의 2차원 아라리의 대체적인 중간부분(10050)은 100.0으로 튀어나온 형상이다.중간 부분이 이상하게 도약하는 모양으로 변했다.돌출된 부분에 당기면서 주변 모양이 변형됐고, 스플라인을 사용한 이상 어떻게든 일어날 수 있었다.
이렇게 이상한 모양이라도 Open CASCADE의 강점은 생길 수 있다(정확 여부는 잠시 논하지 않는다).
Reference
이 문제에 관하여(Python de 3DCAD ~ Spline Surface ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MachineCAT/items/3e5e43a8f9ad3816577c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)