+#include <TopoDS_Edge.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+
+/// \brief Constructs infinite face from thePlane, and with axis located on the same side
+/// of the plane as thePoint. Modifies thePlane axis direction.
+/// \param[in,out] thePlane plane to construct face.
+/// \param[in] thePoint point to locate plane axis.
+/// \return constructed face.
+static TopoDS_Face makeFaceFromPlane(gp_Pln& thePlane, const gp_Pnt& thePoint);
+
+/// \return solid created from face or shell.
+static TopoDS_Solid makeSolidFromShape(const TopoDS_Shape& theShape);
+
+/// \brief return centre of mass for theShape.
+/// \param[in] theShape shape.
+static gp_Pnt centreOfMass(const TopoDS_Shape& theShape);
+
+/// \brief Selects solid from theShape with closest center of mass to thePoint
+/// \param[in] theShape compound with solids.
+/// \param[in] thePoint point.
+/// \return solid.
+static TopoDS_Shape findClosest(const TopoDS_Shape& theShape, const gp_Pnt& thePoint);
+
+static void storeGenerationHistory(GeomAlgoAPI_Revolution* theRevolutionAlgo,
+ const TopoDS_Shape& theBase,
+ const TopAbs_ShapeEnum theType,
+ BRepPrimAPI_MakeRevol* theRevolBuilder);
+
+static void storeGenerationHistory(GeomAlgoAPI_Revolution* theRevolutionAlgo,
+ const TopoDS_Shape& theResult,
+ const TopAbs_ShapeEnum theType,
+ const TopoDS_Shape& theToFace,
+ const TopoDS_Shape& theFromFace);
+
+static void storeGenerationHistory(GeomAlgoAPI_Revolution* theRevolutionAlgo,
+ const TopoDS_Shape& theResult,
+ const TopAbs_ShapeEnum theType,
+ const TopoDS_Shape& theRotatedBoundingFace,
+ const TopoDS_Shape& theModifiedBaseShape,
+ const bool theIsFromFaceSet);
+
+//==================================================================================================
+GeomAlgoAPI_Revolution::GeomAlgoAPI_Revolution(const GeomShapePtr theBaseShape,
+ const std::shared_ptr<GeomAPI_Ax1> theAxis,
+ const double theToAngle,
+ const double theFromAngle)