Python_occ 学习记录 | 细观建模(1)
概念理解
拓扑 vs. 几何
- 几何:点
gp_Pnt
、圆gp_Circ
、平面gp_Pln
等,描述“形状的数学定义” - 拓扑:边
Edge
、线框Wire
、面Face
等,描述“几何的连接关系与方向”
孔洞: Face
有一个外环(outer wire)和若干内环(inner wires)。内环的方向与外环相反,就会被视为“孔”。
挖孔
from OCC.Core.gp import gp, gp_Pnt, gp_Circ
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire, BRepBuilderAPI_MakeFace
from OCC.Display.SimpleGui import init_display# 外矩形 10x10
p00, p10, p11, p01 = gp_Pnt(0,0,0), gp_Pnt(10,0,0), gp_Pnt(10,10,0), gp_Pnt(0,10,0)
outer = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(p00, p10).Edge(),BRepBuilderAPI_MakeEdge(p10, p11).Edge(),BRepBuilderAPI_MakeEdge(p11, p01).Edge(),BRepBuilderAPI_MakeEdge(p01, p00).Edge()
).Wire()# 基于外环建面
face_mk = BRepBuilderAPI_MakeFace(outer)# 加入三个圆孔( Reverse)
ax2 = gp.XOY()
for cx, cy in [(3,3), (7,3), (3,7)]:circ = gp_Circ(ax2, 1.0) # 在 XOY 平面、半径 1 的圆circ.SetLocation(gp_Pnt(cx, cy, 0.0)) # 移动圆心到 (cx, cy, 0.0)w = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(circ).Edge()).Wire()w.Reverse() # 反向 = 作为“孔”face_mk.Add(w)face = face_mk.Shape()display, start_display, add_menu, add_function_to_menu = init_display()display.DisplayShape(face, update=True)
start_display()
拉伸
from OCC.Core.gp import gp_Vec
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism
solid = BRepPrimAPI_MakePrism(face, gp_Vec(0,0,1)).Shape() # 厚度 1