How to iterate all edges in TopoDS_Face using OpenCASCADE
You can use the OCCUtils library to iterate all TopoDS_Face
instances in a TopoDS_Solid
#include <occutils/ShapeComponents.hxx>
using namespace OCCUtils;
TopoDS_Shape myShape = /* ... */;
auto edges = ShapeComponents::AllEdgesWithin(myShape);
// Iterate all solids
for(const TopoDS_Edge& edge : edges) {
/* ... */
}
Alternatively, you can use this raw OpenCASCADE source code without OCCUtils:
#include <TopTools_IndexedMapOfShape.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <TopExp.hxx>
TopoDS_Shape myShape = /* ... */;
TopTools_IndexedMapOfShape faces;
TopExp::MapShapes (myShape, TopAbs_EDGE, faces);
for (int i = 1; i <= faces.Extent (); i++) {
TopoDS_Edge face = TopoDS::Edge(edges(i));
/* ... */
}
If you have the choice, I recommend using OCCUtils since it makes your code much more readable than using the raw OpenCASCADE API.