pythonocc特殊倒角

在这里插入图片描述

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值