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.