from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire, BRepBuilderAPI_MakeFace
from OCC.Core.BRepOffsetAPI import BRepOffsetAPI_MakePipe
from OCC.Core.gp import gp_Circ, gp_Ax2, gp_Pnt, gp_Dir
import math
import math
from OCC.Core.gp import (gp_Pnt, gp_OX, gp_Vec, gp_Trsf, gp_DZ, gp_Ax2, gp_Ax3,
gp_Pnt2d, gp_Dir2d, gp_Ax2d, gp_Pln)
from OCC.Core.GC import GC_MakeArcOfCircle, GC_MakeSegment
from OCC.Core.GCE2d import GCE2d_MakeSegment
from OCC.Core.Geom import Geom_CylindricalSurface
from OCC.Core.Geom2d import Geom2d_Ellipse, Geom2d_TrimmedCurve
from OCC.Core.BRepBuilderAPI import (BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire,
BRepBuilderAPI_MakeFace, BRepBuilderAPI_Transform)
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakePrism, BRepPrimAPI_MakeCylinder
from OCC.Core.BRepFilletAPI import BRepFilletAPI_MakeFillet
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse
from OCC.Core.BRepOffsetAPI import BRepOffsetAPI_MakeThickSolid, BRepOffsetAPI_ThruSections
from OCC.Core.BRepLib import breplib
from OCC.Core.BRep import BRep_Builder
from OCC.Core.GeomAbs import GeomAbs_Plane
from OCC.Core.BRepAdaptor import BRepAdaptor_Surface
from OCC.Core.TopoDS import topods, TopoDS_Compound, TopoDS_Face
from OCC.Core.TopExp import TopExp_Explorer
from OCC.Core.TopAbs import TopAbs_EDGE, TopAbs_FACE
from OCC.Core.TopTools import TopTools_ListOfShape
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox
def face_is_plane(face: TopoDS_Face) -> bool:
"""
如果地形面是平面,则返回真,否则返回假
Returns True if the TopoDS_Face is a plane, False otherwise
"""
surf = BRepAdaptor_Surface(face, True)
surf_type = surf.GetType() #冲浪
return surf_type == GeomAbs_Plane
def geom_plane_from_face(aFace: TopoDS_Face) -> gp_Pln:
"""
从平面返回几何平面图元
Returns the geometric plane entity from a planar surface
"""
return BRepAdaptor_Surface(aFace, True).Plane() #返回曲面--平面()
def make_box():
Solid_guanzi = BRepPrimAPI_MakeBox(gp_Pnt(0, 0, 0), 3, 3,3).Shape() # 每个填充快
display.DisplayShape(Solid_guanzi, update=True)
return Solid_guanzi
# 挖空三维体,针对圆锥以及面在底部的图形(,空没挖出来---实现倒角???)
def scoop(shape, thickness):
faceToRemove = None
zMax = 1
aFaceExplorer = TopExp_Explorer(shape, TopAbs_FACE)
while aFaceExplorer.More():
aFace = topods.Face(aFaceExplorer.Current())
if face_is_plane(aFace):
aPlane = geom_plane_from_face(aFace)
aPnt = aPlane.Location()
aZ = aPnt.Z()
if aZ < zMax:
zMax = aZ
faceToRemove = aFace
aFaceExplorer.Next()
facesToRemove = TopTools_ListOfShape()
facesToRemove.Append(faceToRemove)
# 第一个参数是shape,第二个是要删除的面的集合,第三个是变化后的厚度,第四个是偏差
scoopShape = BRepOffsetAPI_MakeThickSolid(shape, facesToRemove, thickness, 0.001)
display.DisplayShape(scoopShape.Shape(), update=True)
return scoopShape
if __name__ == "__main__":
from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()
Solid_guanzi=make_box()
thickness=3 #3越大,顶部倒角越大
scoop(Solid_guanzi, thickness)
start_display()
pythonocc特殊倒角
最新推荐文章于 2024-03-04 09:51:31 发布