micromamba install -c conda-forge pythonocc-core
opencascade.js安裝不起來,ai用pythonocc練個手
拉伸線框 線成面
from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire
from OCC.Core.BRep import BRep_Tool # Add this import
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism
from OCC.Display.SimpleGui import init_displaydef create_closed_wire():# 定義閉合線段的頂點(示例為正方形輪廓)p1 = gp_Pnt(0, 0, 0)p2 = gp_Pnt(10, 0, 0)p3 = gp_Pnt(10, 10, 0)p4 = gp_Pnt(0, 10, 0)# 創建邊(線段)edge1 = BRepBuilderAPI_MakeEdge(p1, p2).Edge()edge2 = BRepBuilderAPI_MakeEdge(p2, p3).Edge()edge3 = BRepBuilderAPI_MakeEdge(p3, p4).Edge()edge4 = BRepBuilderAPI_MakeEdge(p4, p1).Edge() # 閉合最后一條邊# 創建線框并添加所有邊wire_builder = BRepBuilderAPI_MakeWire()wire_builder.Add(edge1)wire_builder.Add(edge2)wire_builder.Add(edge3)wire_builder.Add(edge4)wire_builder.Build()# 檢查線框是否閉合(修正:使用 BRep_Tool.IsClosed)if not wire_builder.IsDone() or not BRep_Tool.IsClosed(wire_builder.Wire()):raise ValueError("線框未成功構建或未閉合")return wire_builder.Wire()def extrude_wire_to_solid(wire):# 定義拉伸方向(沿 Z 軸正方向,高度 20)direction = gp_Dir(0, 0, 1)vec = gp_Vec(direction) * 20 # 拉伸向量(長度決定高度)# 生成拉伸實體(BREP 特征)prism = BRepPrimAPI_MakePrism(wire, vec)prism.Build()if not prism.IsDone():raise ValueError("拉伸操作失敗")return prism.Shape()if __name__ == "__main__":display, start_display, add_menu, add_function_to_menu = init_display()try:# 生成閉合線框closed_wire = create_closed_wire()# 拉伸生成實體solid = extrude_wire_to_solid(closed_wire)# 顯示結果display.DisplayShape(solid, update=True)start_display()except Exception as e:print(f"錯誤:{e}")
拉伸面 實體
from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire, BRepBuilderAPI_MakeFace # 新增 BRepBuilderAPI_MakeFace
from OCC.Core.BRep import BRep_Tool
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism
from OCC.Display.SimpleGui import init_displaydef create_closed_wire():# 定義閉合線段的頂點(示例為正方形輪廓)p1 = gp_Pnt(0, 0, 0)p2 = gp_Pnt(10, 0, 0)p3 = gp_Pnt(10, 10, 0)p4 = gp_Pnt(0, 10, 0)# 創建邊(線段)edge1 = BRepBuilderAPI_MakeEdge(p1, p2).Edge()edge2 = BRepBuilderAPI_MakeEdge(p2, p3).Edge()edge3 = BRepBuilderAPI_MakeEdge(p3, p4).Edge()edge4 = BRepBuilderAPI_MakeEdge(p4, p1).Edge() # 閉合最后一條邊# 創建線框并添加所有邊wire_builder = BRepBuilderAPI_MakeWire()wire_builder.Add(edge1)wire_builder.Add(edge2)wire_builder.Add(edge3)wire_builder.Add(edge4)wire_builder.Build()# 檢查線框是否閉合(修正:使用 BRep_Tool.IsClosed)if not wire_builder.IsDone() or not BRep_Tool.IsClosed(wire_builder.Wire()):raise ValueError("線框未成功構建或未閉合")return wire_builder.Wire()def extrude_wire_to_solid(wire):# 新增:將線框轉換為面(關鍵步驟)face_builder = BRepBuilderAPI_MakeFace(wire)face_builder.Build()if not face_builder.IsDone():raise ValueError("面構建失敗,線框可能未正確閉合或自相交")face = face_builder.Face()# 定義拉伸方向(沿 Z 軸正方向,高度 20)direction = gp_Dir(0, 0, 1)vec = gp_Vec(direction) * 20 # 拉伸向量(長度決定高度)# 拉伸面生成實體(BREP 特征)prism = BRepPrimAPI_MakePrism(face, vec) # 改為拉伸面而非線框prism.Build()if not prism.IsDone():raise ValueError("拉伸操作失敗")return prism.Shape()if __name__ == "__main__":display, start_display, add_menu, add_function_to_menu = init_display()try:# 生成閉合線框closed_wire = create_closed_wire()# 拉伸生成實體solid = extrude_wire_to_solid(closed_wire)# 顯示結果display.DisplayShape(solid, update=True)start_display()except Exception as e:print(f"錯誤:{e}")