Archived issue #0033432
Modeling Algorithms - BRepFilletAPI_MakeFillet generates TopoDS_Solid with check-faults
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.
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.