DiscussionsIssue archiveOCCT:Modeling Algorithms

Archived issue #0033432

Modeling Algorithms - BRepFilletAPI_MakeFillet generates TopoDS_Solid with check-faults

CommunityOCCT:Modeling Algorithmsnew0 public notes

Search issues

Description

Filleting an edge with a radius no larger than 0.0105 will generate a cleanly checking result. It is not clear why a larger radius (e.g., radius = 0.1) results in a faulty check.

Please note that other CAD systems (NX for instance) have successfully filleted this case with a larger radius fillet.

Steps to reproduce

    // Load .brep.
    TopoDS_Shape importShp;
    BRep_Builder builder;
    BRepTools::Read(importShp, "Attachment 1 (BREP)", builder);

    TopoDS_Solid solidShp;
    TopExp_Explorer exp;
    for (exp.Init(shp, TopAbs_SOLID); exp.More(); exp.Next()) {
        solidShp = TopoDS::Solid(exp.Current());
    }

    // Get lower-topology edges.
    TopTools_IndexedMapOfShape edgeShpMap;
    TopExp::MapShapes(solidShp, TopAbs_EDGE, edgeShpMap);

    // Fillet the 4th edge with a radius 0.1.
    // Note a radius of 0.0105 will generate a cleanly checking result.
    double radius = 0.1;
    TopoDS_Edge edgeShp = TopoDS::Edge(edgeShpMap(4));
    BRepFilletAPI_MakeFillet fillet(solidShp);
    fillet.Add(radius, edgeShp);
    fillet.Build();
    TopoDS_Shape newShp = fillet.Shape();

    // Check the result.
    BRepCheck_Analyzer fCheck(newShp);
    if (!fCheck.IsValid()) {
        bool nowImHere = true;
    }

Public activity

No public notes

Participants are labeled by their role within this record.