From 12b54504ee2ee59faa40b88c227f9a086ca0916c Mon Sep 17 00:00:00 2001 From: Pasukhin Dmitry Date: Wed, 25 Feb 2026 15:06:57 +0000 Subject: [PATCH] Modeling Data - Enforce construction-time initialization for Prop and GridEval classes (#1118) Replace two-step initialization (default constructor + Initialize) with direct construction for 8 non-copyable/non-movable property and grid evaluator classes. Objects are now always in a valid state after construction. Refactored classes: - GeomProp_Curve, GeomProp_Surface (TKG3d) - Geom2dProp_Curve (TKG2d) - BRepProp_Curve, BRepProp_Surface (TKBRep) - GeomGridEval_Curve, GeomGridEval_Surface (TKG3d) - Geom2dGridEval_Curve (TKG2d) Changes per class: - Remove default constructor and IsInitialized() method. - Add constructors matching each former Initialize overload. - Rename Initialize to protected initialization method for internal and derived class use. All callers updated across production code (Extrema, BndLib, IntCurveSurface, IntPatch, HLRBRep, GeomGridEval derived classes) and test files to use constructor-based initialization. --- .../IntCurveSurface_ThePolyhedronOfHInter.cxx | 6 +- .../IntPatch/IntPatch_Polyhedron.cxx | 6 +- .../HLRBRep_ThePolyhedronOfInterCSurf.cxx | 6 +- .../TKBRep/BRepProp/BRepProp_Curve.cxx | 48 +-- .../TKBRep/BRepProp/BRepProp_Curve.hxx | 52 +-- .../TKBRep/BRepProp/BRepProp_Surface.cxx | 33 +- .../TKBRep/BRepProp/BRepProp_Surface.hxx | 52 +-- .../TKBRep/GTests/BRepProp_Test.cxx | 67 +--- .../GTests/BRepProp_VsBRepLProp_Test.cxx | 21 +- .../GTests/Geom2dGridEval_Curve_Test.cxx | 62 +--- .../TKG2d/GTests/Geom2dProp_Test.cxx | 304 ++++++++---------- .../GTests/Geom2dProp_VsCLProps2d_Test.cxx | 69 ++-- .../TKG2d/GTests/Geom2dProp_VsLProp_Test.cxx | 75 ++--- .../Geom2dGridEval/Geom2dGridEval_Curve.cxx | 31 +- .../Geom2dGridEval/Geom2dGridEval_Curve.hxx | 46 ++- .../Geom2dGridEval_OffsetCurve.cxx | 15 +- .../TKG2d/Geom2dProp/Geom2dProp_Curve.cxx | 29 +- .../TKG2d/Geom2dProp/Geom2dProp_Curve.hxx | 38 ++- .../TKG3d/GTests/GeomGridEval_Curve_Test.cxx | 62 +--- .../GeomGridEval_OffsetSurface_Test.cxx | 4 +- .../GeomGridEval_SurfaceOfExtrusion_Test.cxx | 10 +- .../GeomGridEval_SurfaceOfRevolution_Test.cxx | 10 +- .../GTests/GeomGridEval_Surface_Test.cxx | 62 +--- .../TKG3d/GTests/GeomProp_Test.cxx | 99 ++---- .../TKG3d/GTests/GeomProp_VsCLProps_Test.cxx | 12 +- .../TKG3d/GTests/GeomProp_VsSLProps_Test.cxx | 9 +- .../GeomGridEval_BezierSurface.cxx | 3 +- .../TKG3d/GeomGridEval/GeomGridEval_Curve.cxx | 31 +- .../TKG3d/GeomGridEval/GeomGridEval_Curve.hxx | 46 ++- .../GeomGridEval/GeomGridEval_OffsetCurve.cxx | 15 +- .../GeomGridEval_OffsetSurface.cxx | 27 +- .../GeomGridEval/GeomGridEval_Surface.cxx | 47 +-- .../GeomGridEval/GeomGridEval_Surface.hxx | 46 ++- .../GeomGridEval_SurfaceOfExtrusion.cxx | 15 +- .../GeomGridEval_SurfaceOfRevolution.cxx | 15 +- .../TKG3d/GeomProp/GeomProp_Curve.cxx | 29 +- .../TKG3d/GeomProp/GeomProp_Curve.hxx | 38 ++- .../TKG3d/GeomProp/GeomProp_Surface.cxx | 29 +- .../TKG3d/GeomProp/GeomProp_Surface.hxx | 38 ++- .../TKGeomBase/BndLib/BndLib_AddSurface.cxx | 6 +- .../TKGeomBase/Extrema/Extrema_GenExtCS.cxx | 3 +- .../TKGeomBase/Extrema/Extrema_GenExtPS.cxx | 6 +- .../TKGeomBase/Extrema/Extrema_GenExtSS.cxx | 6 +- 43 files changed, 670 insertions(+), 958 deletions(-) diff --git a/src/ModelingAlgorithms/TKGeomAlgo/IntCurveSurface/IntCurveSurface_ThePolyhedronOfHInter.cxx b/src/ModelingAlgorithms/TKGeomAlgo/IntCurveSurface/IntCurveSurface_ThePolyhedronOfHInter.cxx index 3ef1a97c97..aeab0af78b 100644 --- a/src/ModelingAlgorithms/TKGeomAlgo/IntCurveSurface/IntCurveSurface_ThePolyhedronOfHInter.cxx +++ b/src/ModelingAlgorithms/TKGeomAlgo/IntCurveSurface/IntCurveSurface_ThePolyhedronOfHInter.cxx @@ -87,8 +87,7 @@ void IntCurveSurface_ThePolyhedronOfHInter::Init(const occ::handle& Vpars) { // Initialize grid evaluator with surface - GeomGridEval_Surface anEval; - anEval.Initialize(*Surface); + GeomGridEval_Surface anEval(*Surface); PolyUtils::InitWithParams(anEval, Upars, diff --git a/src/ModelingAlgorithms/TKGeomAlgo/IntPatch/IntPatch_Polyhedron.cxx b/src/ModelingAlgorithms/TKGeomAlgo/IntPatch/IntPatch_Polyhedron.cxx index 69bb4c69bd..87d638b726 100644 --- a/src/ModelingAlgorithms/TKGeomAlgo/IntPatch/IntPatch_Polyhedron.cxx +++ b/src/ModelingAlgorithms/TKGeomAlgo/IntPatch/IntPatch_Polyhedron.cxx @@ -108,8 +108,7 @@ IntPatch_Polyhedron::IntPatch_Polyhedron(const occ::handle& S } // Use grid evaluator for batch point evaluation - GeomGridEval_Surface anEval; - anEval.Initialize(*Surface); + GeomGridEval_Surface anEval(*Surface); NCollection_Array2 aGridPnts = anEval.EvaluateGrid(aUParams, aVParams); // Copy to internal arrays and build bounding box @@ -179,8 +178,7 @@ IntPatch_Polyhedron::IntPatch_Polyhedron(const occ::handle& S } // Use grid evaluator for batch point evaluation - GeomGridEval_Surface anEval; - anEval.Initialize(*Surface); + GeomGridEval_Surface anEval(*Surface); NCollection_Array2 aGridPnts = anEval.EvaluateGrid(aUParams, aVParams); // Copy to internal arrays and build bounding box diff --git a/src/ModelingAlgorithms/TKHLR/HLRBRep/HLRBRep_ThePolyhedronOfInterCSurf.cxx b/src/ModelingAlgorithms/TKHLR/HLRBRep/HLRBRep_ThePolyhedronOfInterCSurf.cxx index 9d1a9d7223..2d2a325b41 100644 --- a/src/ModelingAlgorithms/TKHLR/HLRBRep/HLRBRep_ThePolyhedronOfInterCSurf.cxx +++ b/src/ModelingAlgorithms/TKHLR/HLRBRep/HLRBRep_ThePolyhedronOfInterCSurf.cxx @@ -86,8 +86,7 @@ void HLRBRep_ThePolyhedronOfInterCSurf::Init(HLRBRep_Surface* Surface, const double V1) { // Initialize grid evaluator with the underlying BRepAdaptor_Surface - GeomGridEval_Surface anEval; - anEval.Initialize(Surface->Surface()); + GeomGridEval_Surface anEval(Surface->Surface()); PolyUtils::InitUniform(anEval, U0, @@ -117,8 +116,7 @@ void HLRBRep_ThePolyhedronOfInterCSurf::Init(HLRBRep_Surface* S const NCollection_Array1& Vpars) { // Initialize grid evaluator with the underlying BRepAdaptor_Surface - GeomGridEval_Surface anEval; - anEval.Initialize(Surface->Surface()); + GeomGridEval_Surface anEval(Surface->Surface()); PolyUtils::InitWithParams(anEval, Upars, diff --git a/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.cxx b/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.cxx index fc4134c3c7..8dcaa2fbdb 100644 --- a/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.cxx +++ b/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.cxx @@ -22,7 +22,28 @@ //================================================================================================== -void BRepProp_Curve::Initialize(const TopoDS_Edge& theEdge) +BRepProp_Curve::BRepProp_Curve(const TopoDS_Edge& theEdge) +{ + initialization(theEdge); +} + +//================================================================================================== + +BRepProp_Curve::BRepProp_Curve(const BRepAdaptor_Curve& theCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +BRepProp_Curve::BRepProp_Curve(const occ::handle& theCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +void BRepProp_Curve::initialization(const TopoDS_Edge& theEdge) { if (theEdge.IsNull()) { @@ -36,7 +57,7 @@ void BRepProp_Curve::Initialize(const TopoDS_Edge& theEdge) //================================================================================================== -void BRepProp_Curve::Initialize(const BRepAdaptor_Curve& theCurve) +void BRepProp_Curve::initialization(const BRepAdaptor_Curve& theCurve) { myOwned.Nullify(); myPtr = &theCurve; @@ -44,7 +65,7 @@ void BRepProp_Curve::Initialize(const BRepAdaptor_Curve& theCurve) //================================================================================================== -void BRepProp_Curve::Initialize(const occ::handle& theCurve) +void BRepProp_Curve::initialization(const occ::handle& theCurve) { myOwned = theCurve; myPtr = myOwned.get(); @@ -54,10 +75,6 @@ void BRepProp_Curve::Initialize(const occ::handle& theCurve) GeomProp::TangentResult BRepProp_Curve::Tangent(const double theParam, const double theTol) const { - if (!IsInitialized()) - { - return {{}, false}; - } gp_Pnt aPnt; gp_Vec aD1, aD2, aD3; myPtr->D3(theParam, aPnt, aD1, aD2, aD3); @@ -69,10 +86,6 @@ GeomProp::TangentResult BRepProp_Curve::Tangent(const double theParam, const dou GeomProp::CurvatureResult BRepProp_Curve::Curvature(const double theParam, const double theTol) const { - if (!IsInitialized()) - { - return {}; - } gp_Pnt aPnt; gp_Vec aD1, aD2; myPtr->D2(theParam, aPnt, aD1, aD2); @@ -83,10 +96,6 @@ GeomProp::CurvatureResult BRepProp_Curve::Curvature(const double theParam, GeomProp::NormalResult BRepProp_Curve::Normal(const double theParam, const double theTol) const { - if (!IsInitialized()) - { - return {{}, false}; - } gp_Pnt aPnt; gp_Vec aD1, aD2; myPtr->D2(theParam, aPnt, aD1, aD2); @@ -98,10 +107,6 @@ GeomProp::NormalResult BRepProp_Curve::Normal(const double theParam, const doubl GeomProp::CentreResult BRepProp_Curve::CentreOfCurvature(const double theParam, const double theTol) const { - if (!IsInitialized()) - { - return {{}, false}; - } gp_Pnt aPnt; gp_Vec aD1, aD2; myPtr->D2(theParam, aPnt, aD1, aD2); @@ -139,9 +144,8 @@ GeomAbs_Shape BRepProp_Curve::Continuity(const BRepAdaptor_Curve& theCurve1, aN2 = 1; // Evaluate properties at junction points. - BRepProp_Curve aProp1, aProp2; - aProp1.Initialize(theCurve1); - aProp2.Initialize(theCurve2); + BRepProp_Curve aProp1(theCurve1); + BRepProp_Curve aProp2(theCurve2); // Check point coincidence. gp_Pnt aPnt1, aPnt2; diff --git a/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.hxx b/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.hxx index 22cf679ea3..beaddb3b2c 100644 --- a/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.hxx +++ b/src/ModelingData/TKBRep/BRepProp/BRepProp_Curve.hxx @@ -35,8 +35,7 @@ class TopoDS_Edge; //! //! Usage: //! @code -//! BRepProp_Curve aProp; -//! aProp.Initialize(myEdge); +//! BRepProp_Curve aProp(myEdge); //! GeomProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); //! if (aCurv.IsDefined) //! { @@ -48,8 +47,21 @@ class BRepProp_Curve public: DEFINE_STANDARD_ALLOC - //! Default constructor - uninitialized state. - BRepProp_Curve() = default; + //! Construct from a TopoDS_Edge. + //! Creates an internal BRepAdaptor_Curve (owning). + //! @param[in] theEdge the edge to evaluate + Standard_EXPORT BRepProp_Curve(const TopoDS_Edge& theEdge); + + //! Construct from an existing BRepAdaptor_Curve. + //! The adaptor is referenced without copying (non-owning); + //! the caller must ensure the adaptor outlives this object. + //! @param[in] theCurve the adaptor to reference + Standard_EXPORT BRepProp_Curve(const BRepAdaptor_Curve& theCurve); + + //! Construct from a handle to BRepAdaptor_Curve. + //! Shares ownership of the adaptor (no copy). + //! @param[in] theCurve handle to the adaptor + Standard_EXPORT BRepProp_Curve(const occ::handle& theCurve); //! Non-copyable and non-movable. BRepProp_Curve(const BRepProp_Curve&) = delete; @@ -57,25 +69,6 @@ public: BRepProp_Curve(BRepProp_Curve&&) = delete; BRepProp_Curve& operator=(BRepProp_Curve&&) = delete; - //! Initialize from a TopoDS_Edge. - //! Creates an internal BRepAdaptor_Curve (owning). - //! @param[in] theEdge the edge to evaluate - Standard_EXPORT void Initialize(const TopoDS_Edge& theEdge); - - //! Initialize from an existing BRepAdaptor_Curve. - //! The adaptor is referenced without copying (non-owning); - //! the caller must ensure the adaptor outlives this object. - //! @param[in] theCurve the adaptor to reference - Standard_EXPORT void Initialize(const BRepAdaptor_Curve& theCurve); - - //! Initialize from a handle to BRepAdaptor_Curve. - //! Shares ownership of the adaptor (no copy). - //! @param[in] theCurve handle to the adaptor - Standard_EXPORT void Initialize(const occ::handle& theCurve); - - //! Returns true if properly initialized. - bool IsInitialized() const { return myPtr != nullptr; } - //! Returns the underlying adaptor. const BRepAdaptor_Curve& Adaptor() const { return *myPtr; } @@ -125,6 +118,19 @@ public: double theU1, double theU2); +protected: + //! Initialize from a TopoDS_Edge. + //! @param[in] theEdge the edge to evaluate + Standard_EXPORT void initialization(const TopoDS_Edge& theEdge); + + //! Initialize from an existing BRepAdaptor_Curve (non-owning). + //! @param[in] theCurve the adaptor to reference + Standard_EXPORT void initialization(const BRepAdaptor_Curve& theCurve); + + //! Initialize from a handle to BRepAdaptor_Curve. + //! @param[in] theCurve handle to the adaptor + Standard_EXPORT void initialization(const occ::handle& theCurve); + private: occ::handle myOwned; //!< Owns the adaptor when created from TopoDS_Edge. const BRepAdaptor_Curve* myPtr = nullptr; //!< Non-owning pointer to the active adaptor. diff --git a/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.cxx b/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.cxx index 0b1dc771b5..6097ffccdb 100644 --- a/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.cxx +++ b/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.cxx @@ -17,7 +17,28 @@ //================================================================================================== -void BRepProp_Surface::Initialize(const TopoDS_Face& theFace) +BRepProp_Surface::BRepProp_Surface(const TopoDS_Face& theFace) +{ + initialization(theFace); +} + +//================================================================================================== + +BRepProp_Surface::BRepProp_Surface(const BRepAdaptor_Surface& theSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +BRepProp_Surface::BRepProp_Surface(const occ::handle& theSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +void BRepProp_Surface::initialization(const TopoDS_Face& theFace) { if (theFace.IsNull()) { @@ -31,7 +52,7 @@ void BRepProp_Surface::Initialize(const TopoDS_Face& theFace) //================================================================================================== -void BRepProp_Surface::Initialize(const BRepAdaptor_Surface& theSurface) +void BRepProp_Surface::initialization(const BRepAdaptor_Surface& theSurface) { myOwned.Nullify(); myPtr = &theSurface; @@ -39,7 +60,7 @@ void BRepProp_Surface::Initialize(const BRepAdaptor_Surface& theSurface) //================================================================================================== -void BRepProp_Surface::Initialize(const occ::handle& theSurface) +void BRepProp_Surface::initialization(const occ::handle& theSurface) { myOwned = theSurface; myPtr = myOwned.get(); @@ -51,7 +72,7 @@ GeomProp::SurfaceNormalResult BRepProp_Surface::Normal(const double theU, const double theV, const double theTol) const { - if (!IsInitialized()) + if (myPtr == nullptr) { return {{}, false}; } @@ -67,7 +88,7 @@ GeomProp::SurfaceCurvatureResult BRepProp_Surface::Curvatures(const double theU, const double theV, const double theTol) const { - if (!IsInitialized()) + if (myPtr == nullptr) { return {}; } @@ -83,7 +104,7 @@ GeomProp::MeanGaussianResult BRepProp_Surface::MeanGaussian(const double theU, const double theV, const double theTol) const { - if (!IsInitialized()) + if (myPtr == nullptr) { return {}; } diff --git a/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.hxx b/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.hxx index 3080c9c963..60c4ca480b 100644 --- a/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.hxx +++ b/src/ModelingData/TKBRep/BRepProp/BRepProp_Surface.hxx @@ -34,8 +34,7 @@ class TopoDS_Face; //! //! Usage: //! @code -//! BRepProp_Surface aProp; -//! aProp.Initialize(myFace); +//! BRepProp_Surface aProp(myFace); //! GeomProp::SurfaceNormalResult aNorm = aProp.Normal(0.5, 0.5, Precision::Confusion()); //! if (aNorm.IsDefined) //! { @@ -47,8 +46,21 @@ class BRepProp_Surface public: DEFINE_STANDARD_ALLOC - //! Default constructor - uninitialized state. - BRepProp_Surface() = default; + //! Construct from a TopoDS_Face. + //! Creates an internal BRepAdaptor_Surface (owning). + //! @param[in] theFace the face to evaluate + Standard_EXPORT BRepProp_Surface(const TopoDS_Face& theFace); + + //! Construct from an existing BRepAdaptor_Surface. + //! The adaptor is referenced without copying (non-owning); + //! the caller must ensure the adaptor outlives this object. + //! @param[in] theSurface the adaptor to reference + Standard_EXPORT BRepProp_Surface(const BRepAdaptor_Surface& theSurface); + + //! Construct from a handle to BRepAdaptor_Surface. + //! Shares ownership of the adaptor (no copy). + //! @param[in] theSurface handle to the adaptor + Standard_EXPORT BRepProp_Surface(const occ::handle& theSurface); //! Non-copyable and non-movable. BRepProp_Surface(const BRepProp_Surface&) = delete; @@ -56,25 +68,6 @@ public: BRepProp_Surface(BRepProp_Surface&&) = delete; BRepProp_Surface& operator=(BRepProp_Surface&&) = delete; - //! Initialize from a TopoDS_Face. - //! Creates an internal BRepAdaptor_Surface (owning). - //! @param[in] theFace the face to evaluate - Standard_EXPORT void Initialize(const TopoDS_Face& theFace); - - //! Initialize from an existing BRepAdaptor_Surface. - //! The adaptor is referenced without copying (non-owning); - //! the caller must ensure the adaptor outlives this object. - //! @param[in] theSurface the adaptor to reference - Standard_EXPORT void Initialize(const BRepAdaptor_Surface& theSurface); - - //! Initialize from a handle to BRepAdaptor_Surface. - //! Shares ownership of the adaptor (no copy). - //! @param[in] theSurface handle to the adaptor - Standard_EXPORT void Initialize(const occ::handle& theSurface); - - //! Returns true if properly initialized. - bool IsInitialized() const { return myPtr != nullptr; } - //! Returns the underlying adaptor. const BRepAdaptor_Surface& Adaptor() const { return *myPtr; } @@ -105,6 +98,19 @@ public: double theV, double theTol) const; +protected: + //! Initialize from a TopoDS_Face. + //! @param[in] theFace the face to evaluate + Standard_EXPORT void initialization(const TopoDS_Face& theFace); + + //! Initialize from an existing BRepAdaptor_Surface (non-owning). + //! @param[in] theSurface the adaptor to reference + Standard_EXPORT void initialization(const BRepAdaptor_Surface& theSurface); + + //! Initialize from a handle to BRepAdaptor_Surface. + //! @param[in] theSurface handle to the adaptor + Standard_EXPORT void initialization(const occ::handle& theSurface); + private: occ::handle myOwned; //!< Owns the adaptor when created from TopoDS_Face. const BRepAdaptor_Surface* myPtr = nullptr; //!< Non-owning pointer to the active adaptor. diff --git a/src/ModelingData/TKBRep/GTests/BRepProp_Test.cxx b/src/ModelingData/TKBRep/GTests/BRepProp_Test.cxx index 8dd0f56a07..4e7f1ac8ac 100644 --- a/src/ModelingData/TKBRep/GTests/BRepProp_Test.cxx +++ b/src/ModelingData/TKBRep/GTests/BRepProp_Test.cxx @@ -52,31 +52,13 @@ constexpr double THE_POINT_TOL = Precision::Confusion(); // BRepProp_Curve tests // ============================================================ -TEST(BRepProp_CurveTest, UninitializedState) -{ - BRepProp_Curve aProp; - EXPECT_FALSE(aProp.IsInitialized()); - - const GeomProp::TangentResult aTan = aProp.Tangent(0.0, THE_LIN_TOL); - const GeomProp::CurvatureResult aCurv = aProp.Curvature(0.0, THE_LIN_TOL); - const GeomProp::NormalResult aNorm = aProp.Normal(0.0, THE_LIN_TOL); - const GeomProp::CentreResult aCent = aProp.CentreOfCurvature(0.0, THE_LIN_TOL); - - EXPECT_FALSE(aTan.IsDefined); - EXPECT_FALSE(aCurv.IsDefined); - EXPECT_FALSE(aNorm.IsDefined); - EXPECT_FALSE(aCent.IsDefined); -} - TEST(BRepProp_CurveTest, InitializeFromEdge_Line) { BRepBuilderAPI_MakeEdge aMakeEdge(gp_Lin(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)), 0.0, 10.0); ASSERT_TRUE(aMakeEdge.IsDone()); const TopoDS_Edge& anEdge = aMakeEdge.Edge(); - BRepProp_Curve aProp; - aProp.Initialize(anEdge); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Curve aProp(anEdge); // Tangent on a line should be defined. const GeomProp::TangentResult aTan = aProp.Tangent(5.0, THE_LIN_TOL); @@ -97,9 +79,7 @@ TEST(BRepProp_CurveTest, InitializeFromEdge_Circle) ASSERT_TRUE(aMakeEdge.IsDone()); const TopoDS_Edge& anEdge = aMakeEdge.Edge(); - BRepProp_Curve aProp; - aProp.Initialize(anEdge); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Curve aProp(anEdge); // Check curvature = 1/R at midpoint. const GeomProp::CurvatureResult aCurv = aProp.Curvature(M_PI, THE_LIN_TOL); @@ -125,9 +105,7 @@ TEST(BRepProp_CurveTest, InitializeFromAdaptor) BRepAdaptor_Curve anAdaptor(aMakeEdge.Edge()); - BRepProp_Curve aProp; - aProp.Initialize(anAdaptor); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Curve aProp(anAdaptor); const GeomProp::CurvatureResult aCurv = aProp.Curvature(M_PI / 2.0, THE_LIN_TOL); ASSERT_TRUE(aCurv.IsDefined); @@ -145,9 +123,7 @@ TEST(BRepProp_CurveTest, BoxEdge_Tangent) ASSERT_TRUE(anExp.More()); const TopoDS_Edge& anEdge = TopoDS::Edge(anExp.Current()); - BRepProp_Curve aProp; - aProp.Initialize(anEdge); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Curve aProp(anEdge); double aFirst = 0.0, aLast = 0.0; BRep_Tool::Range(anEdge, aFirst, aLast); @@ -174,9 +150,7 @@ TEST(BRepProp_CurveTest, CylinderEdge_Curvature) for (TopExp_Explorer anExp(aCyl, TopAbs_EDGE); anExp.More(); anExp.Next()) { const TopoDS_Edge& anEdge = TopoDS::Edge(anExp.Current()); - BRepProp_Curve aProp; - aProp.Initialize(anEdge); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Curve aProp(anEdge); double aFirst = 0.0, aLast = 0.0; BRep_Tool::Range(anEdge, aFirst, aLast); @@ -198,21 +172,6 @@ TEST(BRepProp_CurveTest, CylinderEdge_Curvature) // BRepProp_Surface tests // ============================================================ -TEST(BRepProp_SurfaceTest, UninitializedState) -{ - BRepProp_Surface aProp; - EXPECT_FALSE(aProp.IsInitialized()); - - const GeomProp::SurfaceNormalResult aNorm = aProp.Normal(0.0, 0.0, THE_LIN_TOL); - EXPECT_FALSE(aNorm.IsDefined); - - const GeomProp::SurfaceCurvatureResult aCurv = aProp.Curvatures(0.0, 0.0, THE_LIN_TOL); - EXPECT_FALSE(aCurv.IsDefined); - - const GeomProp::MeanGaussianResult aMG = aProp.MeanGaussian(0.0, 0.0, THE_LIN_TOL); - EXPECT_FALSE(aMG.IsDefined); -} - TEST(BRepProp_SurfaceTest, BoxFace_PlanarNormal) { BRepPrimAPI_MakeBox aBoxMaker(10.0, 20.0, 30.0); @@ -223,9 +182,7 @@ TEST(BRepProp_SurfaceTest, BoxFace_PlanarNormal) ASSERT_TRUE(anExp.More()); const TopoDS_Face& aFace = TopoDS::Face(anExp.Current()); - BRepProp_Surface aProp; - aProp.Initialize(aFace); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Surface aProp(aFace); const GeomProp::SurfaceNormalResult aNorm = aProp.Normal(0.5, 0.5, THE_LIN_TOL); ASSERT_TRUE(aNorm.IsDefined); @@ -253,9 +210,7 @@ TEST(BRepProp_SurfaceTest, InitializeFromAdaptor) const TopoDS_Face& aFace = TopoDS::Face(anExp.Current()); BRepAdaptor_Surface anAdaptor(aFace); - BRepProp_Surface aProp; - aProp.Initialize(anAdaptor); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Surface aProp(anAdaptor); const GeomProp::SurfaceNormalResult aNorm = aProp.Normal(0.5, 0.5, THE_LIN_TOL); ASSERT_TRUE(aNorm.IsDefined); @@ -273,9 +228,7 @@ TEST(BRepProp_SurfaceTest, SphereFace_Curvatures) ASSERT_TRUE(anExp.More()); const TopoDS_Face& aFace = TopoDS::Face(anExp.Current()); - BRepProp_Surface aProp; - aProp.Initialize(aFace); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Surface aProp(aFace); // Evaluate at equator-like parameter (away from poles). const double aU = M_PI; @@ -313,9 +266,7 @@ TEST(BRepProp_SurfaceTest, CylinderFace_Curvatures) continue; } - BRepProp_Surface aProp; - aProp.Initialize(aFace); - ASSERT_TRUE(aProp.IsInitialized()); + BRepProp_Surface aProp(aFace); const double aU = M_PI / 4.0; const double aV = aHeight / 2.0; diff --git a/src/ModelingData/TKBRep/GTests/BRepProp_VsBRepLProp_Test.cxx b/src/ModelingData/TKBRep/GTests/BRepProp_VsBRepLProp_Test.cxx index 90df19c5d8..38dac954b0 100644 --- a/src/ModelingData/TKBRep/GTests/BRepProp_VsBRepLProp_Test.cxx +++ b/src/ModelingData/TKBRep/GTests/BRepProp_VsBRepLProp_Test.cxx @@ -58,8 +58,7 @@ void compareCurveTangent(const TopoDS_Edge& theEdge, const double theParam) BRepAdaptor_Curve anAdaptor(theEdge); // New API - BRepProp_Curve aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Curve aNewProp(anAdaptor); const GeomProp::TangentResult aNew = aNewProp.Tangent(theParam, THE_LIN_TOL); // Old API @@ -79,8 +78,7 @@ void compareCurveCurvature(const TopoDS_Edge& theEdge, const double theParam) { BRepAdaptor_Curve anAdaptor(theEdge); - BRepProp_Curve aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Curve aNewProp(anAdaptor); const GeomProp::CurvatureResult aNew = aNewProp.Curvature(theParam, THE_LIN_TOL); BRepLProp_CLProps anOld(anAdaptor, theParam, 2, THE_LIN_TOL); @@ -96,8 +94,7 @@ void compareCurveNormal(const TopoDS_Edge& theEdge, const double theParam) { BRepAdaptor_Curve anAdaptor(theEdge); - BRepProp_Curve aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Curve aNewProp(anAdaptor); const GeomProp::NormalResult aNew = aNewProp.Normal(theParam, THE_LIN_TOL); BRepLProp_CLProps anOld(anAdaptor, theParam, 2, THE_LIN_TOL); @@ -116,8 +113,7 @@ void compareCurveCentre(const TopoDS_Edge& theEdge, const double theParam) { BRepAdaptor_Curve anAdaptor(theEdge); - BRepProp_Curve aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Curve aNewProp(anAdaptor); const GeomProp::CentreResult aNew = aNewProp.CentreOfCurvature(theParam, THE_LIN_TOL); BRepLProp_CLProps anOld(anAdaptor, theParam, 2, THE_LIN_TOL); @@ -139,8 +135,7 @@ void compareSurfaceNormal(const TopoDS_Face& theFace, const double theU, const d { BRepAdaptor_Surface anAdaptor(theFace); - BRepProp_Surface aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Surface aNewProp(anAdaptor); const GeomProp::SurfaceNormalResult aNew = aNewProp.Normal(theU, theV, THE_LIN_TOL); BRepLProp_SLProps anOld(anAdaptor, theU, theV, 2, THE_LIN_TOL); @@ -159,8 +154,7 @@ void compareSurfaceCurvatures(const TopoDS_Face& theFace, const double theU, con { BRepAdaptor_Surface anAdaptor(theFace); - BRepProp_Surface aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Surface aNewProp(anAdaptor); const GeomProp::SurfaceCurvatureResult aNew = aNewProp.Curvatures(theU, theV, THE_LIN_TOL); BRepLProp_SLProps anOld(anAdaptor, theU, theV, 2, THE_LIN_TOL); @@ -178,8 +172,7 @@ void compareSurfaceMeanGaussian(const TopoDS_Face& theFace, const double theU, c { BRepAdaptor_Surface anAdaptor(theFace); - BRepProp_Surface aNewProp; - aNewProp.Initialize(anAdaptor); + BRepProp_Surface aNewProp(anAdaptor); const GeomProp::MeanGaussianResult aNew = aNewProp.MeanGaussian(theU, theV, THE_LIN_TOL); BRepLProp_SLProps anOld(anAdaptor, theU, theV, 2, THE_LIN_TOL); diff --git a/src/ModelingData/TKG2d/GTests/Geom2dGridEval_Curve_Test.cxx b/src/ModelingData/TKG2d/GTests/Geom2dGridEval_Curve_Test.cxx index 1b3154fb04..d03c0aa3d1 100644 --- a/src/ModelingData/TKG2d/GTests/Geom2dGridEval_Curve_Test.cxx +++ b/src/ModelingData/TKG2d/GTests/Geom2dGridEval_Curve_Test.cxx @@ -404,9 +404,7 @@ TEST(Geom2dGridEval_CurveTest, LineDispatch) occ::handle aGeomLine = new Geom2d_Line(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)); Geom2dAdaptor_Curve anAdaptor(aGeomLine); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Line); NCollection_Array1 aParams = CreateUniformParams(0.0, 10.0, 11); @@ -427,9 +425,7 @@ TEST(Geom2dGridEval_CurveTest, CircleDispatch) new Geom2d_Circle(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 2.0); Geom2dAdaptor_Curve anAdaptor(aGeomCircle); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Circle); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 17); @@ -449,9 +445,7 @@ TEST(Geom2dGridEval_CurveTest, EllipseDispatch) new Geom2d_Ellipse(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 3.0, 2.0); Geom2dAdaptor_Curve anAdaptor(anEllipse); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Ellipse); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 13); @@ -471,9 +465,7 @@ TEST(Geom2dGridEval_CurveTest, HyperbolaDispatch) new Geom2d_Hyperbola(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 3.0, 2.0); Geom2dAdaptor_Curve anAdaptor(aHypr); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Hyperbola); NCollection_Array1 aParams = CreateUniformParams(-2.0, 2.0, 11); @@ -493,9 +485,7 @@ TEST(Geom2dGridEval_CurveTest, ParabolaDispatch) new Geom2d_Parabola(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 1.0); Geom2dAdaptor_Curve anAdaptor(aParab); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Parabola); NCollection_Array1 aParams = CreateUniformParams(-2.0, 2.0, 11); @@ -514,9 +504,7 @@ TEST(Geom2dGridEval_CurveTest, BSplineDispatch) occ::handle aCurve = CreateSimpleBSpline2d(); Geom2dAdaptor_Curve anAdaptor(aCurve); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BSplineCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 21); @@ -540,9 +528,7 @@ TEST(Geom2dGridEval_CurveTest, BezierCurveDispatch) occ::handle aBezier = new Geom2d_BezierCurve(aPoles); Geom2dAdaptor_Curve anAdaptor(aBezier); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BezierCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); @@ -561,9 +547,7 @@ TEST(Geom2dGridEval_CurveTest, OffsetCurveDispatch) occ::handle aLine = new Geom2d_Line(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)); occ::handle anOffset = new Geom2d_OffsetCurve(aLine, 1.0); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anOffset); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anOffset); EXPECT_EQ(anEval.GetType(), GeomAbs_OffsetCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 5.0, 6); @@ -581,9 +565,7 @@ TEST(Geom2dGridEval_CurveTest, DirectHandleInit) { occ::handle aGeomLine = new Geom2d_Line(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)); - Geom2dGridEval_Curve anEval; - anEval.Initialize(aGeomLine); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(aGeomLine); EXPECT_EQ(anEval.GetType(), GeomAbs_Line); NCollection_Array1 aParams = CreateUniformParams(0.0, 10.0, 11); @@ -593,24 +575,12 @@ TEST(Geom2dGridEval_CurveTest, DirectHandleInit) EXPECT_NEAR(aGrid.Value(1).X(), 0.0, THE_TOLERANCE); } -TEST(Geom2dGridEval_CurveTest, UninitializedState) -{ - Geom2dGridEval_Curve anEval; - EXPECT_FALSE(anEval.IsInitialized()); - - NCollection_Array1 aEmptyParams; - NCollection_Array1 aGrid = anEval.EvaluateGrid(aEmptyParams); - EXPECT_TRUE(aGrid.IsEmpty()); -} - TEST(Geom2dGridEval_CurveTest, EmptyParams) { occ::handle aGeomLine = new Geom2d_Line(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)); Geom2dAdaptor_Curve anAdaptor(aGeomLine); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + Geom2dGridEval_Curve anEval(anAdaptor); NCollection_Array1 aEmptyParams; NCollection_Array1 aGrid = anEval.EvaluateGrid(aEmptyParams); @@ -623,8 +593,7 @@ TEST(Geom2dGridEval_CurveTest, UnifiedDerivativeD1) new Geom2d_Circle(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 2.0); Geom2dAdaptor_Curve anAdaptor(aGeomCircle); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + Geom2dGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -645,8 +614,7 @@ TEST(Geom2dGridEval_CurveTest, UnifiedDerivativeD2) occ::handle aCurve = CreateSimpleBSpline2d(); Geom2dAdaptor_Curve anAdaptor(aCurve); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + Geom2dGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); @@ -668,8 +636,7 @@ TEST(Geom2dGridEval_CurveTest, UnifiedDerivativeD3) occ::handle aCurve = CreateSimpleBSpline2d(); Geom2dAdaptor_Curve anAdaptor(aCurve); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + Geom2dGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); @@ -693,8 +660,7 @@ TEST(Geom2dGridEval_CurveTest, OffsetCurveDerivativeD3) new Geom2d_Circle(gp_Ax22d(gp_Pnt2d(0, 0), gp_Dir2d(1, 0)), 2.0); occ::handle anOffset = new Geom2d_OffsetCurve(aCircle, 0.5); - Geom2dGridEval_Curve anEval; - anEval.Initialize(anOffset); + Geom2dGridEval_Curve anEval(anOffset); EXPECT_EQ(anEval.GetType(), GeomAbs_OffsetCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 9); diff --git a/src/ModelingData/TKG2d/GTests/Geom2dProp_Test.cxx b/src/ModelingData/TKG2d/GTests/Geom2dProp_Test.cxx index f9cb894642..c2b405a8c3 100644 --- a/src/ModelingData/TKG2d/GTests/Geom2dProp_Test.cxx +++ b/src/ModelingData/TKG2d/GTests/Geom2dProp_Test.cxx @@ -37,6 +37,7 @@ #include #include +#include // ============================================================================ // Free functions tests (Geom2dProp namespace) @@ -247,22 +248,21 @@ protected: { gp_Lin2d aLin(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)); myLine = new Geom2d_Line(aLin); - myProp.Initialize(myLine); + myProp.emplace(myLine); } - occ::handle myLine; - Geom2dProp_Curve myProp; + occ::handle myLine; + std::optional myProp; }; TEST_F(Geom2dProp_CurveLineTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_Line); + EXPECT_EQ(myProp->GetType(), GeomAbs_Line); } TEST_F(Geom2dProp_CurveLineTest, Tangent) { - const Geom2dProp::TangentResult aRes = myProp.Tangent(5.0, Precision::Confusion()); + const Geom2dProp::TangentResult aRes = myProp->Tangent(5.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Direction.X(), 1.0, Precision::Confusion()); EXPECT_NEAR(aRes.Direction.Y(), 0.0, Precision::Confusion()); @@ -273,7 +273,7 @@ TEST_F(Geom2dProp_CurveLineTest, TangentIsConstant) // Tangent should be the same at any parameter for (double u = -100.0; u <= 100.0; u += 50.0) { - const Geom2dProp::TangentResult aRes = myProp.Tangent(u, Precision::Confusion()); + const Geom2dProp::TangentResult aRes = myProp->Tangent(u, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Direction.X(), 1.0, Precision::Confusion()); EXPECT_NEAR(aRes.Direction.Y(), 0.0, Precision::Confusion()); @@ -282,7 +282,7 @@ TEST_F(Geom2dProp_CurveLineTest, TangentIsConstant) TEST_F(Geom2dProp_CurveLineTest, CurvatureIsZero) { - const Geom2dProp::CurvatureResult aRes = myProp.Curvature(5.0, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes = myProp->Curvature(5.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_FALSE(aRes.IsInfinite); EXPECT_NEAR(aRes.Value, 0.0, Precision::Confusion()); @@ -290,26 +290,26 @@ TEST_F(Geom2dProp_CurveLineTest, CurvatureIsZero) TEST_F(Geom2dProp_CurveLineTest, NormalUndefined) { - const Geom2dProp::NormalResult aRes = myProp.Normal(5.0, Precision::Confusion()); + const Geom2dProp::NormalResult aRes = myProp->Normal(5.0, Precision::Confusion()); EXPECT_FALSE(aRes.IsDefined); } TEST_F(Geom2dProp_CurveLineTest, CentreUndefined) { - const Geom2dProp::CentreResult aRes = myProp.CentreOfCurvature(5.0, Precision::Confusion()); + const Geom2dProp::CentreResult aRes = myProp->CentreOfCurvature(5.0, Precision::Confusion()); EXPECT_FALSE(aRes.IsDefined); } TEST_F(Geom2dProp_CurveLineTest, NoExtrema) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindCurvatureExtrema(); EXPECT_TRUE(aRes.IsDone); EXPECT_TRUE(aRes.Points.IsEmpty()); } TEST_F(Geom2dProp_CurveLineTest, NoInflections) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindInflections(); EXPECT_TRUE(aRes.IsDone); EXPECT_TRUE(aRes.Points.IsEmpty()); } @@ -320,8 +320,7 @@ TEST(Geom2dProp_LineTest, DiagonalLine_TangentDirection) gp_Lin2d aLin(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 1.0)); occ::handle aLine = new Geom2d_Line(aLin); - Geom2dProp_Curve aProp; - aProp.Initialize(aLine); + Geom2dProp_Curve aProp(aLine); const Geom2dProp::TangentResult aTan = aProp.Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); @@ -341,22 +340,21 @@ protected: { gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 5.0); myCircle = new Geom2d_Circle(aCirc); - myProp.Initialize(myCircle); + myProp.emplace(myCircle); } - occ::handle myCircle; - Geom2dProp_Curve myProp; + occ::handle myCircle; + std::optional myProp; }; TEST_F(Geom2dProp_CurveCircleTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_Circle); + EXPECT_EQ(myProp->GetType(), GeomAbs_Circle); } TEST_F(Geom2dProp_CurveCircleTest, Tangent) { - const Geom2dProp::TangentResult aRes = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aRes = myProp->Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Direction.X(), 0.0, Precision::Confusion()); EXPECT_NEAR(aRes.Direction.Y(), 1.0, Precision::Confusion()); @@ -364,7 +362,7 @@ TEST_F(Geom2dProp_CurveCircleTest, Tangent) TEST_F(Geom2dProp_CurveCircleTest, TangentAtPiHalf) { - const Geom2dProp::TangentResult aRes = myProp.Tangent(M_PI / 2.0, Precision::Confusion()); + const Geom2dProp::TangentResult aRes = myProp->Tangent(M_PI / 2.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Direction.X(), -1.0, Precision::Confusion()); EXPECT_NEAR(aRes.Direction.Y(), 0.0, Precision::Confusion()); @@ -375,7 +373,7 @@ TEST_F(Geom2dProp_CurveCircleTest, TangentPerpendicularToRadius) // At any parameter, tangent should be perpendicular to the radius vector for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 7.0) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(u, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(u, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); // Radius direction at param u on circle centered at origin const double aRadX = std::cos(u); @@ -389,7 +387,7 @@ TEST_F(Geom2dProp_CurveCircleTest, ConstantCurvature) { for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 4.0) { - const Geom2dProp::CurvatureResult aRes = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes = myProp->Curvature(u, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Value, 1.0 / 5.0, Precision::Confusion()); } @@ -397,9 +395,9 @@ TEST_F(Geom2dProp_CurveCircleTest, ConstantCurvature) TEST_F(Geom2dProp_CurveCircleTest, Normal) { - const Geom2dProp::NormalResult aRes = myProp.Normal(0.0, Precision::Confusion()); + const Geom2dProp::NormalResult aRes = myProp->Normal(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); EXPECT_NEAR( std::abs(aTan.Direction.X() * aRes.Direction.X() + aTan.Direction.Y() * aRes.Direction.Y()), 0.0, @@ -409,7 +407,7 @@ TEST_F(Geom2dProp_CurveCircleTest, Normal) TEST_F(Geom2dProp_CurveCircleTest, NormalPointsTowardCenter) { // At param=0, point=(5,0), normal should point toward center (0,0) => direction (-1,0) - const Geom2dProp::NormalResult aRes = myProp.Normal(0.0, Precision::Confusion()); + const Geom2dProp::NormalResult aRes = myProp->Normal(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Direction.X(), -1.0, Precision::Confusion()); EXPECT_NEAR(aRes.Direction.Y(), 0.0, Precision::Confusion()); @@ -417,7 +415,7 @@ TEST_F(Geom2dProp_CurveCircleTest, NormalPointsTowardCenter) TEST_F(Geom2dProp_CurveCircleTest, CentreOfCurvature) { - const Geom2dProp::CentreResult aRes = myProp.CentreOfCurvature(0.0, Precision::Confusion()); + const Geom2dProp::CentreResult aRes = myProp->CentreOfCurvature(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Centre.X(), 0.0, Precision::Confusion()); EXPECT_NEAR(aRes.Centre.Y(), 0.0, Precision::Confusion()); @@ -427,7 +425,7 @@ TEST_F(Geom2dProp_CurveCircleTest, CentreOfCurvature_ConstantAtAllParams) { for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 5.0) { - const Geom2dProp::CentreResult aRes = myProp.CentreOfCurvature(u, Precision::Confusion()); + const Geom2dProp::CentreResult aRes = myProp->CentreOfCurvature(u, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Centre.X(), 0.0, Precision::Confusion()); EXPECT_NEAR(aRes.Centre.Y(), 0.0, Precision::Confusion()); @@ -436,14 +434,14 @@ TEST_F(Geom2dProp_CurveCircleTest, CentreOfCurvature_ConstantAtAllParams) TEST_F(Geom2dProp_CurveCircleTest, NoExtrema) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindCurvatureExtrema(); EXPECT_TRUE(aRes.IsDone); EXPECT_TRUE(aRes.Points.IsEmpty()); } TEST_F(Geom2dProp_CurveCircleTest, NoInflections) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindInflections(); EXPECT_TRUE(aRes.IsDone); EXPECT_TRUE(aRes.Points.IsEmpty()); } @@ -454,8 +452,7 @@ TEST(Geom2dProp_CircleTest, SmallRadius_HighCurvature) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 0.1); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); const Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); @@ -468,8 +465,7 @@ TEST(Geom2dProp_CircleTest, OffCenter_CentreOfCurvature) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(3.0, 7.0), gp_Dir2d(1.0, 0.0)), 4.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); const Geom2dProp::CentreResult aCentre = aProp.CentreOfCurvature(1.0, Precision::Confusion()); ASSERT_TRUE(aCentre.IsDefined); @@ -488,23 +484,22 @@ protected: { gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 10.0, 5.0); myEllipse = new Geom2d_Ellipse(anElips); - myProp.Initialize(myEllipse); + myProp.emplace(myEllipse); } - occ::handle myEllipse; - Geom2dProp_Curve myProp; + occ::handle myEllipse; + std::optional myProp; }; TEST_F(Geom2dProp_CurveEllipseTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_Ellipse); + EXPECT_EQ(myProp->GetType(), GeomAbs_Ellipse); } TEST_F(Geom2dProp_CurveEllipseTest, TangentAtMajorVertex) { // At U=0, point is on major axis endpoint, tangent should be vertical - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); EXPECT_NEAR(aTan.Direction.X(), 0.0, Precision::Confusion()); EXPECT_NEAR(std::abs(aTan.Direction.Y()), 1.0, Precision::Confusion()); @@ -513,7 +508,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, TangentAtMajorVertex) TEST_F(Geom2dProp_CurveEllipseTest, TangentAtMinorVertex) { // At U=PI/2, point is on minor axis endpoint, tangent should be horizontal - const Geom2dProp::TangentResult aTan = myProp.Tangent(M_PI / 2.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(M_PI / 2.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); EXPECT_NEAR(std::abs(aTan.Direction.X()), 1.0, Precision::Confusion()); EXPECT_NEAR(aTan.Direction.Y(), 0.0, Precision::Confusion()); @@ -523,8 +518,8 @@ TEST_F(Geom2dProp_CurveEllipseTest, TangentPerpToNormal) { for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 6.0) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(u, Precision::Confusion()); - const Geom2dProp::NormalResult aNorm = myProp.Normal(u, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(u, Precision::Confusion()); + const Geom2dProp::NormalResult aNorm = myProp->Normal(u, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); ASSERT_TRUE(aNorm.IsDefined); const double aDot = @@ -536,7 +531,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, TangentPerpToNormal) TEST_F(Geom2dProp_CurveEllipseTest, CurvatureAtMajorVertex) { // At U=0 (major vertex): curvature = a/b^2 = 10/25 = 0.4 - const Geom2dProp::CurvatureResult aRes = myProp.Curvature(0.0, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes = myProp->Curvature(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Value, 10.0 / 25.0, 1.0e-6); } @@ -544,7 +539,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, CurvatureAtMajorVertex) TEST_F(Geom2dProp_CurveEllipseTest, CurvatureAtMinorVertex) { // At U=PI/2 (minor vertex): curvature = b/a^2 = 5/100 = 0.05 - const Geom2dProp::CurvatureResult aRes = myProp.Curvature(M_PI / 2.0, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes = myProp->Curvature(M_PI / 2.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Value, 5.0 / 100.0, 1.0e-6); } @@ -552,7 +547,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, CurvatureAtMinorVertex) TEST_F(Geom2dProp_CurveEllipseTest, CurvatureAtPi) { // At U=PI (opposite major vertex), curvature same as U=0 - const Geom2dProp::CurvatureResult aRes = myProp.Curvature(M_PI, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes = myProp->Curvature(M_PI, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); EXPECT_NEAR(aRes.Value, 10.0 / 25.0, 1.0e-6); } @@ -562,8 +557,8 @@ TEST_F(Geom2dProp_CurveEllipseTest, CurvatureSymmetry) // Curvature at U and -U should be equal (ellipse is symmetric) for (double u = 0.1; u < M_PI; u += 0.3) { - const Geom2dProp::CurvatureResult aRes1 = myProp.Curvature(u, Precision::Confusion()); - const Geom2dProp::CurvatureResult aRes2 = myProp.Curvature(-u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes1 = myProp->Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aRes2 = myProp->Curvature(-u, Precision::Confusion()); ASSERT_TRUE(aRes1.IsDefined); ASSERT_TRUE(aRes2.IsDefined); EXPECT_NEAR(aRes1.Value, aRes2.Value, 1.0e-10); @@ -573,10 +568,10 @@ TEST_F(Geom2dProp_CurveEllipseTest, CurvatureSymmetry) TEST_F(Geom2dProp_CurveEllipseTest, CurvatureMaxAtMajorVertex) { // |curvature| should be maximum at major vertex (U=0, PI) - const double aCurvMax = myProp.Curvature(0.0, Precision::Confusion()).Value; + const double aCurvMax = myProp->Curvature(0.0, Precision::Confusion()).Value; for (double u = 0.1; u < 2.0 * M_PI; u += 0.2) { - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); EXPECT_LE(std::abs(aCurv.Value), std::abs(aCurvMax) + 1.0e-10); } @@ -584,7 +579,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, CurvatureMaxAtMajorVertex) TEST_F(Geom2dProp_CurveEllipseTest, NormalAtMajorVertex) { - const Geom2dProp::NormalResult aRes = myProp.Normal(0.0, Precision::Confusion()); + const Geom2dProp::NormalResult aRes = myProp->Normal(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); // At (10,0) on x-axis aligned ellipse, normal should point toward center: (-1,0) EXPECT_NEAR(aRes.Direction.X(), -1.0, Precision::Confusion()); @@ -593,7 +588,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, NormalAtMajorVertex) TEST_F(Geom2dProp_CurveEllipseTest, CentreOfCurvatureAtMajorVertex) { - const Geom2dProp::CentreResult aRes = myProp.CentreOfCurvature(0.0, Precision::Confusion()); + const Geom2dProp::CentreResult aRes = myProp->CentreOfCurvature(0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); // Radius of curvature at major vertex = b^2/a = 25/10 = 2.5 // Centre should be at (10 - 2.5, 0) = (7.5, 0) @@ -604,7 +599,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, CentreOfCurvatureAtMajorVertex) TEST_F(Geom2dProp_CurveEllipseTest, CentreOfCurvatureAtMinorVertex) { const Geom2dProp::CentreResult aRes = - myProp.CentreOfCurvature(M_PI / 2.0, Precision::Confusion()); + myProp->CentreOfCurvature(M_PI / 2.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); // Radius of curvature at minor vertex = a^2/b = 100/5 = 20 // Centre should be at (0, 5 - 20) = (0, -15) @@ -614,7 +609,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, CentreOfCurvatureAtMinorVertex) TEST_F(Geom2dProp_CurveEllipseTest, FindCurvatureExtrema) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindCurvatureExtrema(); ASSERT_TRUE(aRes.IsDone); EXPECT_EQ(aRes.Points.Length(), 4); @@ -636,7 +631,7 @@ TEST_F(Geom2dProp_CurveEllipseTest, FindCurvatureExtrema) TEST_F(Geom2dProp_CurveEllipseTest, NoInflections) { - const Geom2dProp::CurveAnalysis aRes = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aRes = myProp->FindInflections(); EXPECT_TRUE(aRes.IsDone); EXPECT_TRUE(aRes.Points.IsEmpty()); } @@ -647,8 +642,7 @@ TEST(Geom2dProp_EllipseTest, EqualSemiAxes_BehavesLikeCircle) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 5.0, 5.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); // Curvature should be constant = 1/R = 1/5 for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 4.0) @@ -670,22 +664,21 @@ protected: { gp_Hypr2d aHypr(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 5.0, 3.0); myHyperbola = new Geom2d_Hyperbola(aHypr); - myProp.Initialize(myHyperbola); + myProp.emplace(myHyperbola); } - occ::handle myHyperbola; - Geom2dProp_Curve myProp; + occ::handle myHyperbola; + std::optional myProp; }; TEST_F(Geom2dProp_CurveHyperbolaTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_Hyperbola); + EXPECT_EQ(myProp->GetType(), GeomAbs_Hyperbola); } TEST_F(Geom2dProp_CurveHyperbolaTest, TangentAtVertex) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); // At vertex of hyperbola (t=0), tangent is vertical EXPECT_NEAR(aTan.Direction.X(), 0.0, Precision::Confusion()); @@ -697,7 +690,7 @@ TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureAtVertex) // At vertex (t=0): curvature = b^2/a^2 * 1/a * a = b^2/(a * a) ... actually K = b^2/a // For hyperbola x=a*cosh(t), y=b*sinh(t): // K(0) = b^2/(a^2 * (b^2/a^2)^(3/2)) ... Just verify it's defined and positive. - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(0.0, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); EXPECT_GT(aCurv.Value, 0.0); } @@ -705,10 +698,10 @@ TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureAtVertex) TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureDecreasesFromVertex) { // Curvature should be maximum at vertex and decrease away from it - const double aCurvAtVertex = std::abs(myProp.Curvature(0.0, Precision::Confusion()).Value); + const double aCurvAtVertex = std::abs(myProp->Curvature(0.0, Precision::Confusion()).Value); for (double u = 0.5; u < 3.0; u += 0.5) { - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); EXPECT_LT(std::abs(aCurv.Value), aCurvAtVertex + 1.0e-10); } @@ -716,10 +709,10 @@ TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureDecreasesFromVertex) TEST_F(Geom2dProp_CurveHyperbolaTest, NormalAtVertex) { - const Geom2dProp::NormalResult aNorm = myProp.Normal(0.0, Precision::Confusion()); + const Geom2dProp::NormalResult aNorm = myProp->Normal(0.0, Precision::Confusion()); ASSERT_TRUE(aNorm.IsDefined); // Normal should be perpendicular to tangent - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); const double aDot = aTan.Direction.X() * aNorm.Direction.X() + aTan.Direction.Y() * aNorm.Direction.Y(); EXPECT_NEAR(aDot, 0.0, 1.0e-10); @@ -727,13 +720,13 @@ TEST_F(Geom2dProp_CurveHyperbolaTest, NormalAtVertex) TEST_F(Geom2dProp_CurveHyperbolaTest, CentreOfCurvatureAtVertex) { - const Geom2dProp::CentreResult aCentre = myProp.CentreOfCurvature(0.0, Precision::Confusion()); + const Geom2dProp::CentreResult aCentre = myProp->CentreOfCurvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCentre.IsDefined); } TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureExtremaAtVertex) { - const Geom2dProp::CurveAnalysis aExtrema = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aExtrema = myProp->FindCurvatureExtrema(); ASSERT_TRUE(aExtrema.IsDone); EXPECT_EQ(aExtrema.Points.Length(), 1); if (!aExtrema.Points.IsEmpty()) @@ -745,7 +738,7 @@ TEST_F(Geom2dProp_CurveHyperbolaTest, CurvatureExtremaAtVertex) TEST_F(Geom2dProp_CurveHyperbolaTest, NoInflections) { - const Geom2dProp::CurveAnalysis aInfl = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aInfl = myProp->FindInflections(); EXPECT_TRUE(aInfl.IsDone); EXPECT_TRUE(aInfl.Points.IsEmpty()); } @@ -762,22 +755,21 @@ protected: // Focal parameter p=2 => parabola y^2 = 4px = 8x gp_Parab2d aParab(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 2.0); myParabola = new Geom2d_Parabola(aParab); - myProp.Initialize(myParabola); + myProp.emplace(myParabola); } - occ::handle myParabola; - Geom2dProp_Curve myProp; + occ::handle myParabola; + std::optional myProp; }; TEST_F(Geom2dProp_CurveParabolaTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_Parabola); + EXPECT_EQ(myProp->GetType(), GeomAbs_Parabola); } TEST_F(Geom2dProp_CurveParabolaTest, TangentAtVertex) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); // At vertex, tangent is vertical EXPECT_NEAR(aTan.Direction.X(), 0.0, Precision::Confusion()); @@ -787,17 +779,17 @@ TEST_F(Geom2dProp_CurveParabolaTest, TangentAtVertex) TEST_F(Geom2dProp_CurveParabolaTest, CurvatureAtVertex) { // At vertex: curvature = 1/(2*focal_parameter) = 1/4 = 0.25 - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(0.0, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); EXPECT_GT(aCurv.Value, 0.0); } TEST_F(Geom2dProp_CurveParabolaTest, CurvatureDecreasesFromVertex) { - const double aCurvAtVertex = std::abs(myProp.Curvature(0.0, Precision::Confusion()).Value); + const double aCurvAtVertex = std::abs(myProp->Curvature(0.0, Precision::Confusion()).Value); for (double u = 1.0; u <= 5.0; u += 1.0) { - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); EXPECT_LT(std::abs(aCurv.Value), aCurvAtVertex); } @@ -808,17 +800,17 @@ TEST_F(Geom2dProp_CurveParabolaTest, CurvatureSymmetric) // Curvature at U and -U should be equal for (double u = 0.5; u <= 5.0; u += 0.5) { - const double aCurv1 = myProp.Curvature(u, Precision::Confusion()).Value; - const double aCurv2 = myProp.Curvature(-u, Precision::Confusion()).Value; + const double aCurv1 = myProp->Curvature(u, Precision::Confusion()).Value; + const double aCurv2 = myProp->Curvature(-u, Precision::Confusion()).Value; EXPECT_NEAR(aCurv1, aCurv2, 1.0e-10); } } TEST_F(Geom2dProp_CurveParabolaTest, NormalAtVertex) { - const Geom2dProp::NormalResult aNorm = myProp.Normal(0.0, Precision::Confusion()); + const Geom2dProp::NormalResult aNorm = myProp->Normal(0.0, Precision::Confusion()); ASSERT_TRUE(aNorm.IsDefined); - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); const double aDot = aTan.Direction.X() * aNorm.Direction.X() + aTan.Direction.Y() * aNorm.Direction.Y(); EXPECT_NEAR(aDot, 0.0, 1.0e-10); @@ -826,13 +818,13 @@ TEST_F(Geom2dProp_CurveParabolaTest, NormalAtVertex) TEST_F(Geom2dProp_CurveParabolaTest, CentreOfCurvatureAtVertex) { - const Geom2dProp::CentreResult aCentre = myProp.CentreOfCurvature(0.0, Precision::Confusion()); + const Geom2dProp::CentreResult aCentre = myProp->CentreOfCurvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCentre.IsDefined); } TEST_F(Geom2dProp_CurveParabolaTest, CurvatureExtremaAtVertex) { - const Geom2dProp::CurveAnalysis aExtrema = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aExtrema = myProp->FindCurvatureExtrema(); ASSERT_TRUE(aExtrema.IsDone); EXPECT_EQ(aExtrema.Points.Length(), 1); if (!aExtrema.Points.IsEmpty()) @@ -844,7 +836,7 @@ TEST_F(Geom2dProp_CurveParabolaTest, CurvatureExtremaAtVertex) TEST_F(Geom2dProp_CurveParabolaTest, NoInflections) { - const Geom2dProp::CurveAnalysis aInfl = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aInfl = myProp->FindInflections(); EXPECT_TRUE(aInfl.IsDone); EXPECT_TRUE(aInfl.Points.IsEmpty()); } @@ -865,22 +857,21 @@ protected: aPoles(3) = gp_Pnt2d(3.0, -2.0); aPoles(4) = gp_Pnt2d(4.0, 0.0); myBezier = new Geom2d_BezierCurve(aPoles); - myProp.Initialize(myBezier); + myProp.emplace(myBezier); } occ::handle myBezier; - Geom2dProp_Curve myProp; + std::optional myProp; }; TEST_F(Geom2dProp_CurveBezierTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_BezierCurve); + EXPECT_EQ(myProp->GetType(), GeomAbs_BezierCurve); } TEST_F(Geom2dProp_CurveBezierTest, TangentAtStart) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(0.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(0.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); // Tangent at start should point toward second control point: (1,2) // Direction should be proportional to (1,2), normalized @@ -891,7 +882,7 @@ TEST_F(Geom2dProp_CurveBezierTest, TangentAtStart) TEST_F(Geom2dProp_CurveBezierTest, TangentAtEnd) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(1.0, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(1.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); // Tangent at end should point from third control point to fourth: (4,0)-(3,-2) = (1,2) const double aLen = std::sqrt(1.0 + 4.0); @@ -903,7 +894,7 @@ TEST_F(Geom2dProp_CurveBezierTest, CurvatureAtMultiplePoints) { for (double u = 0.0; u <= 1.0; u += 0.1) { - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); EXPECT_TRUE(aCurv.IsDefined); EXPECT_FALSE(aCurv.IsInfinite); } @@ -913,8 +904,8 @@ TEST_F(Geom2dProp_CurveBezierTest, NormalPerpendicularToTangent) { for (double u = 0.1; u < 1.0; u += 0.2) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(u, Precision::Confusion()); - const Geom2dProp::NormalResult aNorm = myProp.Normal(u, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(u, Precision::Confusion()); + const Geom2dProp::NormalResult aNorm = myProp->Normal(u, Precision::Confusion()); if (aTan.IsDefined && aNorm.IsDefined) { const double aDot = @@ -927,8 +918,8 @@ TEST_F(Geom2dProp_CurveBezierTest, NormalPerpendicularToTangent) TEST_F(Geom2dProp_CurveBezierTest, CentreOfCurvature_DistanceIsRadiusOfCurvature) { const double u = 0.3; - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); - const Geom2dProp::CentreResult aCentre = myProp.CentreOfCurvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); + const Geom2dProp::CentreResult aCentre = myProp->CentreOfCurvature(u, Precision::Confusion()); if (aCurv.IsDefined && aCentre.IsDefined && !aCurv.IsInfinite && std::abs(aCurv.Value) > 1.0e-10) { gp_Pnt2d aPnt; @@ -942,7 +933,7 @@ TEST_F(Geom2dProp_CurveBezierTest, CentreOfCurvature_DistanceIsRadiusOfCurvature TEST_F(Geom2dProp_CurveBezierTest, InflectionPoints) { // S-shaped curve should have inflection point(s) near the middle - const Geom2dProp::CurveAnalysis aInflections = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aInflections = myProp->FindInflections(); EXPECT_TRUE(aInflections.IsDone); EXPECT_GE(aInflections.Points.Length(), 1); if (!aInflections.Points.IsEmpty()) @@ -959,7 +950,7 @@ TEST_F(Geom2dProp_CurveBezierTest, InflectionPoints) TEST_F(Geom2dProp_CurveBezierTest, CurvatureExtrema) { - const Geom2dProp::CurveAnalysis aExtrema = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aExtrema = myProp->FindCurvatureExtrema(); EXPECT_TRUE(aExtrema.IsDone); // S-shaped cubic should have curvature extrema for (int i = 0; i < aExtrema.Points.Length(); ++i) @@ -980,8 +971,7 @@ TEST(Geom2dProp_BezierTest, StraightLine_ZeroCurvature) aPoles(3) = gp_Pnt2d(4.0, 0.0); occ::handle aBezier = new Geom2d_BezierCurve(aPoles); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); ASSERT_TRUE(aCurv.IsDefined); @@ -997,8 +987,7 @@ TEST(Geom2dProp_BezierTest, QuadraticBezier_Properties) aPoles(3) = gp_Pnt2d(2.0, 0.0); occ::handle aBezier = new Geom2d_BezierCurve(aPoles); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); // Symmetric parabolic arc: curvature should be max at midpoint const double aCurvMid = std::abs(aProp.Curvature(0.5, Precision::Confusion()).Value); @@ -1036,24 +1025,23 @@ protected: aMults(3) = 3; myBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 2); - myProp.Initialize(myBSpline); + myProp.emplace(myBSpline); } occ::handle myBSpline; - Geom2dProp_Curve myProp; + std::optional myProp; }; TEST_F(Geom2dProp_CurveBSplineTest, IsInitialized) { - EXPECT_TRUE(myProp.IsInitialized()); - EXPECT_EQ(myProp.GetType(), GeomAbs_BSplineCurve); + EXPECT_EQ(myProp->GetType(), GeomAbs_BSplineCurve); } TEST_F(Geom2dProp_CurveBSplineTest, TangentDefined) { for (double u = 0.0; u <= 1.0; u += 0.2) { - const Geom2dProp::TangentResult aTan = myProp.Tangent(u, Precision::Confusion()); + const Geom2dProp::TangentResult aTan = myProp->Tangent(u, Precision::Confusion()); EXPECT_TRUE(aTan.IsDefined); } } @@ -1062,7 +1050,7 @@ TEST_F(Geom2dProp_CurveBSplineTest, CurvatureDefined) { for (double u = 0.0; u <= 1.0; u += 0.2) { - const Geom2dProp::CurvatureResult aCurv = myProp.Curvature(u, Precision::Confusion()); + const Geom2dProp::CurvatureResult aCurv = myProp->Curvature(u, Precision::Confusion()); EXPECT_TRUE(aCurv.IsDefined); EXPECT_FALSE(aCurv.IsInfinite); } @@ -1071,19 +1059,19 @@ TEST_F(Geom2dProp_CurveBSplineTest, CurvatureDefined) TEST_F(Geom2dProp_CurveBSplineTest, NormalDefined) { // B-spline has non-zero curvature, so normal should be defined in the middle - const Geom2dProp::NormalResult aNorm = myProp.Normal(0.3, Precision::Confusion()); + const Geom2dProp::NormalResult aNorm = myProp->Normal(0.3, Precision::Confusion()); EXPECT_TRUE(aNorm.IsDefined); } TEST_F(Geom2dProp_CurveBSplineTest, CentreOfCurvatureDefined) { - const Geom2dProp::CentreResult aCentre = myProp.CentreOfCurvature(0.3, Precision::Confusion()); + const Geom2dProp::CentreResult aCentre = myProp->CentreOfCurvature(0.3, Precision::Confusion()); EXPECT_TRUE(aCentre.IsDefined); } TEST_F(Geom2dProp_CurveBSplineTest, CurvatureExtrema) { - const Geom2dProp::CurveAnalysis aExtrema = myProp.FindCurvatureExtrema(); + const Geom2dProp::CurveAnalysis aExtrema = myProp->FindCurvatureExtrema(); EXPECT_TRUE(aExtrema.IsDone); // Verify all extrema parameters are within [0, 1] for (int i = 0; i < aExtrema.Points.Length(); ++i) @@ -1095,7 +1083,7 @@ TEST_F(Geom2dProp_CurveBSplineTest, CurvatureExtrema) TEST_F(Geom2dProp_CurveBSplineTest, InflectionPoints) { - const Geom2dProp::CurveAnalysis aInfl = myProp.FindInflections(); + const Geom2dProp::CurveAnalysis aInfl = myProp->FindInflections(); EXPECT_TRUE(aInfl.IsDone); for (int i = 0; i < aInfl.Points.Length(); ++i) { @@ -1129,9 +1117,7 @@ TEST(Geom2dProp_BSplineTest, LowContinuity_C1) occ::handle aBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 2); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(aBSpline); // Should work with C3 interval subdivision const Geom2dProp::CurveAnalysis aExtrema = aProp.FindCurvatureExtrema(); @@ -1151,9 +1137,7 @@ TEST(Geom2dProp_OffsetCurveTest, IsInitialized) occ::handle aCircle = new Geom2d_Circle(aCirc); occ::handle anOffset = new Geom2d_OffsetCurve(aCircle, 2.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(anOffset); EXPECT_EQ(aProp.GetType(), GeomAbs_OffsetCurve); } @@ -1164,8 +1148,7 @@ TEST(Geom2dProp_OffsetCurveTest, OffsetCircle_ConstantCurvature) occ::handle aCircle = new Geom2d_Circle(aCirc); occ::handle anOffset = new Geom2d_OffsetCurve(aCircle, 2.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 4.0) { @@ -1181,8 +1164,7 @@ TEST(Geom2dProp_OffsetCurveTest, TangentAndNormalDefined) occ::handle aCircle = new Geom2d_Circle(aCirc); occ::handle anOffset = new Geom2d_OffsetCurve(aCircle, 2.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); const Geom2dProp::TangentResult aTan = aProp.Tangent(0.5, Precision::Confusion()); EXPECT_TRUE(aTan.IsDefined); @@ -1205,9 +1187,7 @@ TEST(Geom2dProp_OffsetCurveTest, OffsetEllipse_ExtremaAndInflections) occ::handle anEllipse = new Geom2d_Ellipse(anElips); occ::handle anOffset = new Geom2d_OffsetCurve(anEllipse, 1.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(anOffset); const Geom2dProp::CurveAnalysis aExtrema = aProp.FindCurvatureExtrema(); EXPECT_TRUE(aExtrema.IsDone); @@ -1226,9 +1206,7 @@ TEST(Geom2dProp_TrimmedCurveTest, UnwrapsToCircle) occ::handle aCircle = new Geom2d_Circle(aCirc); occ::handle aTrimmed = new Geom2d_TrimmedCurve(aCircle, 0.0, M_PI); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(aTrimmed); EXPECT_EQ(aProp.GetType(), GeomAbs_Circle); const Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); @@ -1242,9 +1220,7 @@ TEST(Geom2dProp_TrimmedCurveTest, UnwrapsToEllipse) occ::handle anEllipse = new Geom2d_Ellipse(anElips); occ::handle aTrimmed = new Geom2d_TrimmedCurve(anEllipse, 0.0, M_PI); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(aTrimmed); EXPECT_EQ(aProp.GetType(), GeomAbs_Ellipse); } @@ -1255,9 +1231,7 @@ TEST(Geom2dProp_TrimmedCurveTest, NestedTrimmedCurve) occ::handle aTrimmed1 = new Geom2d_TrimmedCurve(aCircle, 0.0, M_PI); occ::handle aTrimmed2 = new Geom2d_TrimmedCurve(aTrimmed1, 0.1, 1.0); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed2); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(aTrimmed2); EXPECT_EQ(aProp.GetType(), GeomAbs_Circle); const Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); @@ -1271,10 +1245,8 @@ TEST(Geom2dProp_TrimmedCurveTest, NestedTrimmedCurve) TEST(Geom2dProp_CurveTest, NullHandle_NotInitialized) { - Geom2dProp_Curve aProp; occ::handle aNullCurve; - aProp.Initialize(aNullCurve); - EXPECT_FALSE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(aNullCurve); const Geom2dProp::TangentResult aTan = aProp.Tangent(0.0, 1.0e-7); EXPECT_FALSE(aTan.IsDefined); @@ -1295,28 +1267,20 @@ TEST(Geom2dProp_CurveTest, NullHandle_NotInitialized) EXPECT_FALSE(aInfl.IsDone); } -TEST(Geom2dProp_CurveTest, DefaultConstructor_NotInitialized) +TEST(Geom2dProp_CurveTest, DifferentTypes) { - Geom2dProp_Curve aProp; - EXPECT_FALSE(aProp.IsInitialized()); -} - -TEST(Geom2dProp_CurveTest, ReInitialize_ChangesType) -{ - Geom2dProp_Curve aProp; - - // First: circle + // Circle gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 5.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - aProp.Initialize(aCircle); - EXPECT_EQ(aProp.GetType(), GeomAbs_Circle); + Geom2dProp_Curve aPropCircle(aCircle); + EXPECT_EQ(aPropCircle.GetType(), GeomAbs_Circle); - // Re-initialize with line + // Line gp_Lin2d aLin(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)); occ::handle aLine = new Geom2d_Line(aLin); - aProp.Initialize(aLine); - EXPECT_EQ(aProp.GetType(), GeomAbs_Line); - EXPECT_NEAR(aProp.Curvature(0.0, Precision::Confusion()).Value, 0.0, Precision::Confusion()); + Geom2dProp_Curve aPropLine(aLine); + EXPECT_EQ(aPropLine.GetType(), GeomAbs_Line); + EXPECT_NEAR(aPropLine.Curvature(0.0, Precision::Confusion()).Value, 0.0, Precision::Confusion()); } // ============================================================================ @@ -1329,9 +1293,7 @@ TEST(Geom2dProp_AdaptorTest, InitFromGeom2dAdaptor) occ::handle aCircle = new Geom2d_Circle(aCirc); Geom2dAdaptor_Curve anAdaptor(aCircle); - Geom2dProp_Curve aProp; - aProp.Initialize(anAdaptor); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(anAdaptor); EXPECT_EQ(aProp.GetType(), GeomAbs_Circle); const Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.0, Precision::Confusion()); @@ -1345,9 +1307,7 @@ TEST(Geom2dProp_AdaptorTest, InitFromGeom2dAdaptor_Ellipse) occ::handle anEllipse = new Geom2d_Ellipse(anElips); Geom2dAdaptor_Curve anAdaptor(anEllipse); - Geom2dProp_Curve aProp; - aProp.Initialize(anAdaptor); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(anAdaptor); EXPECT_EQ(aProp.GetType(), GeomAbs_Ellipse); // Curvature at major vertex: a/b^2 = 8/9 @@ -1377,9 +1337,7 @@ TEST(Geom2dProp_AdaptorTest, InitFromGeom2dAdaptor_BSpline) occ::handle aBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 2); Geom2dAdaptor_Curve anAdaptor(aBSpline); - Geom2dProp_Curve aProp; - aProp.Initialize(anAdaptor); - EXPECT_TRUE(aProp.IsInitialized()); + Geom2dProp_Curve aProp(anAdaptor); EXPECT_EQ(aProp.GetType(), GeomAbs_BSplineCurve); } @@ -1392,8 +1350,7 @@ TEST(Geom2dProp_CrossValidationTest, Circle_MatchesLProp) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(1.0, 2.0), gp_Dir2d(1.0, 0.0)), 7.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 6.0) { @@ -1413,8 +1370,7 @@ TEST(Geom2dProp_CrossValidationTest, Ellipse_MatchesLProp) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 10.0, 5.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); // At major vertex (U=0): curvature = a/b^2 = 10/25 = 0.4 const Geom2dProp::CurvatureResult aCurv0 = aProp.Curvature(0.0, Precision::Confusion()); @@ -1433,8 +1389,7 @@ TEST(Geom2dProp_CrossValidationTest, FreeFunctionVsDispatcher) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 3.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); const double u = 1.0; gp_Pnt2d aPnt; @@ -1458,8 +1413,7 @@ TEST(Geom2dProp_CrossValidationTest, CentreDistanceConsistency) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 8.0, 4.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 8.0) { @@ -1484,12 +1438,10 @@ TEST(Geom2dProp_CrossValidationTest, AdaptorVsGeometryInit) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(1.0, 2.0), gp_Dir2d(1.0, 0.0)), 6.0, 3.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aPropGeom; - aPropGeom.Initialize(anEllipse); + Geom2dProp_Curve aPropGeom(anEllipse); Geom2dAdaptor_Curve anAdaptor(anEllipse); - Geom2dProp_Curve aPropAdap; - aPropAdap.Initialize(anAdaptor); + Geom2dProp_Curve aPropAdap(anAdaptor); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 5.0) { diff --git a/src/ModelingData/TKG2d/GTests/Geom2dProp_VsCLProps2d_Test.cxx b/src/ModelingData/TKG2d/GTests/Geom2dProp_VsCLProps2d_Test.cxx index 9133cdd988..f962bb055f 100644 --- a/src/ModelingData/TKG2d/GTests/Geom2dProp_VsCLProps2d_Test.cxx +++ b/src/ModelingData/TKG2d/GTests/Geom2dProp_VsCLProps2d_Test.cxx @@ -160,8 +160,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Line_Tangent) gp_Lin2d aLin(gp_Pnt2d(1.0, 2.0), gp_Dir2d(3.0, 4.0)); occ::handle aLine = new Geom2d_Line(aLin); - Geom2dProp_Curve aProp; - aProp.Initialize(aLine); + Geom2dProp_Curve aProp(aLine); Geom2dLProp_CLProps2d aOld(aLine, 2, THE_PARAM_TOL); for (double u = -10.0; u <= 10.0; u += 2.5) @@ -175,8 +174,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Line_Curvature) gp_Lin2d aLin(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 1.0)); occ::handle aLine = new Geom2d_Line(aLin); - Geom2dProp_Curve aProp; - aProp.Initialize(aLine); + Geom2dProp_Curve aProp(aLine); Geom2dLProp_CLProps2d aOld(aLine, 2, THE_PARAM_TOL); for (double u = -5.0; u <= 5.0; u += 1.0) @@ -194,8 +192,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Circle_AllProperties) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(3.0, 4.0), gp_Dir2d(1.0, 0.0)), 7.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); Geom2dLProp_CLProps2d aOld(aCircle, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 6.0) @@ -209,8 +206,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Circle_SmallRadius) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 0.01); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); Geom2dLProp_CLProps2d aOld(aCircle, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 4.0) @@ -224,8 +220,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Circle_LargeRadius) gp_Circ2d aCirc(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 1000.0); occ::handle aCircle = new Geom2d_Circle(aCirc); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); Geom2dLProp_CLProps2d aOld(aCircle, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 4.0) @@ -243,8 +238,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Ellipse_AllProperties) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 10.0, 5.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); Geom2dLProp_CLProps2d aOld(anEllipse, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 12.0) @@ -258,8 +252,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Ellipse_HighEccentricity) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 100.0, 1.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); Geom2dLProp_CLProps2d aOld(anEllipse, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 8.0) @@ -273,8 +266,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Ellipse_OffCenter) gp_Elips2d anElips(gp_Ax2d(gp_Pnt2d(100.0, -50.0), gp_Dir2d(1.0, 0.0)), 8.0, 3.0); occ::handle anEllipse = new Geom2d_Ellipse(anElips); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); Geom2dLProp_CLProps2d aOld(anEllipse, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 8.0) @@ -292,8 +284,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Hyperbola_AllProperties) gp_Hypr2d anHypr(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 6.0, 3.0); occ::handle aHyperbola = new Geom2d_Hyperbola(anHypr); - Geom2dProp_Curve aProp; - aProp.Initialize(aHyperbola); + Geom2dProp_Curve aProp(aHyperbola); Geom2dLProp_CLProps2d aOld(aHyperbola, 2, THE_PARAM_TOL); for (double u = -2.0; u <= 2.0; u += 0.5) @@ -307,8 +298,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Hyperbola_NearVertex) gp_Hypr2d anHypr(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 4.0, 2.0); occ::handle aHyperbola = new Geom2d_Hyperbola(anHypr); - Geom2dProp_Curve aProp; - aProp.Initialize(aHyperbola); + Geom2dProp_Curve aProp(aHyperbola); Geom2dLProp_CLProps2d aOld(aHyperbola, 2, THE_PARAM_TOL); // Fine-grained near vertex @@ -327,8 +317,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Parabola_AllProperties) gp_Parab2d aParab(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 2.0); occ::handle aParabola = new Geom2d_Parabola(aParab); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); Geom2dLProp_CLProps2d aOld(aParabola, 2, THE_PARAM_TOL); for (double u = -5.0; u <= 5.0; u += 1.0) @@ -342,8 +331,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Parabola_SmallFocal) gp_Parab2d aParab(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 0.1); occ::handle aParabola = new Geom2d_Parabola(aParab); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); Geom2dLProp_CLProps2d aOld(aParabola, 2, THE_PARAM_TOL); for (double u = -3.0; u <= 3.0; u += 0.5) @@ -357,8 +345,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Parabola_LargeFocal) gp_Parab2d aParab(gp_Ax2d(gp_Pnt2d(0.0, 0.0), gp_Dir2d(1.0, 0.0)), 50.0); occ::handle aParabola = new Geom2d_Parabola(aParab); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); Geom2dLProp_CLProps2d aOld(aParabola, 2, THE_PARAM_TOL); for (double u = -10.0; u <= 10.0; u += 2.0) @@ -380,8 +367,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Bezier_CubicSShape) aPoles(4) = gp_Pnt2d(4.0, 0.0); occ::handle aBezier = new Geom2d_BezierCurve(aPoles); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); Geom2dLProp_CLProps2d aOld(aBezier, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.1) @@ -398,8 +384,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Bezier_Quadratic) aPoles(3) = gp_Pnt2d(4.0, 0.0); occ::handle aBezier = new Geom2d_BezierCurve(aPoles); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); Geom2dLProp_CLProps2d aOld(aBezier, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.1) @@ -419,8 +404,7 @@ TEST(Geom2dProp_VsCLProps2dTest, Bezier_HighDegree) aPoles(6) = gp_Pnt2d(5.0, 1.0); occ::handle aBezier = new Geom2d_BezierCurve(aPoles); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); Geom2dLProp_CLProps2d aOld(aBezier, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.05) @@ -453,8 +437,7 @@ TEST(Geom2dProp_VsCLProps2dTest, BSpline_Quadratic) occ::handle aBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 2); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); Geom2dLProp_CLProps2d aOld(aBSpline, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.1) @@ -487,8 +470,7 @@ TEST(Geom2dProp_VsCLProps2dTest, BSpline_Cubic) occ::handle aBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 3); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); Geom2dLProp_CLProps2d aOld(aBSpline, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.05) @@ -516,8 +498,7 @@ TEST(Geom2dProp_VsCLProps2dTest, BSpline_Degree4) occ::handle aBSpline = new Geom2d_BSplineCurve(aPoles, aKnots, aMults, 4); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); Geom2dLProp_CLProps2d aOld(aBSpline, 2, THE_PARAM_TOL); for (double u = 0.0; u <= 1.0; u += 0.05) @@ -536,8 +517,7 @@ TEST(Geom2dProp_VsCLProps2dTest, OffsetCircle_AllProperties) occ::handle aCircle = new Geom2d_Circle(aCirc); occ::handle anOffset = new Geom2d_OffsetCurve(aCircle, 2.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); Geom2dLProp_CLProps2d aOld(anOffset, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 6.0) @@ -552,8 +532,7 @@ TEST(Geom2dProp_VsCLProps2dTest, OffsetEllipse_AllProperties) occ::handle anEllipse = new Geom2d_Ellipse(anElips); occ::handle anOffset = new Geom2d_OffsetCurve(anEllipse, 1.0); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); Geom2dLProp_CLProps2d aOld(anOffset, 2, THE_PARAM_TOL); for (double u = 0.0; u < 2.0 * M_PI; u += M_PI / 8.0) @@ -572,8 +551,7 @@ TEST(Geom2dProp_VsCLProps2dTest, TrimmedEllipse_AllProperties) occ::handle anEllipse = new Geom2d_Ellipse(anElips); occ::handle aTrimmed = new Geom2d_TrimmedCurve(anEllipse, 0.5, 2.5); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); + Geom2dProp_Curve aProp(aTrimmed); Geom2dLProp_CLProps2d aOld(aTrimmed, 2, THE_PARAM_TOL); for (double u = 0.5; u <= 2.5; u += 0.2) @@ -592,8 +570,7 @@ TEST(Geom2dProp_VsCLProps2dTest, TrimmedBezier_AllProperties) occ::handle aBezier = new Geom2d_BezierCurve(aPoles); occ::handle aTrimmed = new Geom2d_TrimmedCurve(aBezier, 0.2, 0.8); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); + Geom2dProp_Curve aProp(aTrimmed); Geom2dLProp_CLProps2d aOld(aTrimmed, 2, THE_PARAM_TOL); for (double u = 0.2; u <= 0.8; u += 0.1) diff --git a/src/ModelingData/TKG2d/GTests/Geom2dProp_VsLProp_Test.cxx b/src/ModelingData/TKG2d/GTests/Geom2dProp_VsLProp_Test.cxx index 653b0b0631..cd869b0033 100644 --- a/src/ModelingData/TKG2d/GTests/Geom2dProp_VsLProp_Test.cxx +++ b/src/ModelingData/TKG2d/GTests/Geom2dProp_VsLProp_Test.cxx @@ -89,8 +89,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Circle_NoExtrema) ASSERT_TRUE(anOld.IsDone()); EXPECT_EQ(anOld.NbPoints(), 0); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); EXPECT_EQ(aNew.Points.Length(), 0); @@ -106,8 +105,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Circle_NoInflections) ASSERT_TRUE(anOld.IsDone()); EXPECT_EQ(anOld.NbPoints(), 0); - Geom2dProp_Curve aProp; - aProp.Initialize(aCircle); + Geom2dProp_Curve aProp(aCircle); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); EXPECT_EQ(aNew.Points.Length(), 0); @@ -126,8 +124,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Ellipse_Extrema) anOld.PerformCurExt(anEllipse); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -144,8 +141,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Ellipse_NoInflections) ASSERT_TRUE(anOld.IsDone()); EXPECT_EQ(anOld.NbPoints(), 0); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); EXPECT_EQ(aNew.Points.Length(), 0); @@ -160,8 +156,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Ellipse_HighEccentricity_Extrema) anOld.PerformCurExt(anEllipse); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -177,8 +172,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Ellipse_FullPerform) anOld.Perform(anEllipse); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anEllipse); + Geom2dProp_Curve aProp(anEllipse); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -201,8 +195,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Hyperbola_Extrema) anOld.PerformCurExt(aHyperbola); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aHyperbola); + Geom2dProp_Curve aProp(aHyperbola); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -219,8 +212,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Hyperbola_NoInflections) ASSERT_TRUE(anOld.IsDone()); EXPECT_EQ(anOld.NbPoints(), 0); - Geom2dProp_Curve aProp; - aProp.Initialize(aHyperbola); + Geom2dProp_Curve aProp(aHyperbola); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); EXPECT_EQ(aNew.Points.Length(), 0); @@ -239,8 +231,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Parabola_Extrema) anOld.PerformCurExt(aParabola); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -257,8 +248,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Parabola_NoInflections) ASSERT_TRUE(anOld.IsDone()); EXPECT_EQ(anOld.NbPoints(), 0); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); EXPECT_EQ(aNew.Points.Length(), 0); @@ -273,8 +263,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Parabola_FullPerform) anOld.Perform(aParabola); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aParabola); + Geom2dProp_Curve aProp(aParabola); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -301,8 +290,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Bezier_CubicS_Inflections) anOld.PerformInf(aBezier); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); @@ -322,8 +310,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Bezier_CubicS_Extrema) anOld.PerformCurExt(aBezier); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -343,8 +330,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Bezier_CubicS_FullPerform) anOld.Perform(aBezier); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -366,8 +352,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Bezier_Quadratic_NoInflections) anOld.PerformInf(aBezier); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); @@ -389,8 +374,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, Bezier_HighDegree_FullPerform) anOld.Perform(aBezier); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBezier); + Geom2dProp_Curve aProp(aBezier); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -427,8 +411,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, BSpline_Degree4_FullPerform) anOld.Perform(aBSpline); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -466,8 +449,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, BSpline_Cubic_Extrema) anOld.PerformCurExt(aBSpline); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -502,8 +484,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, BSpline_Cubic_Inflections) anOld.PerformInf(aBSpline); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); @@ -537,8 +518,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, BSpline_LowContinuity_FullPerform) anOld.Perform(aBSpline); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aBSpline); + Geom2dProp_Curve aProp(aBSpline); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -593,8 +573,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, TrimmedEllipse_Extrema) anOld.PerformCurExt(aTrimmed); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); + Geom2dProp_Curve aProp(aTrimmed); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -615,8 +594,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, TrimmedBezier_FullPerform) anOld.Perform(aTrimmed); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(aTrimmed); + Geom2dProp_Curve aProp(aTrimmed); const Geom2dProp::CurveAnalysis aNewExt = aProp.FindCurvatureExtrema(); const Geom2dProp::CurveAnalysis aNewInfl = aProp.FindInflections(); ASSERT_TRUE(aNewExt.IsDone); @@ -640,8 +618,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, OffsetEllipse_Extrema) anOld.PerformCurExt(anOffset); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); @@ -658,8 +635,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, OffsetEllipse_Inflections) anOld.PerformInf(anOffset); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); const Geom2dProp::CurveAnalysis aNew = aProp.FindInflections(); ASSERT_TRUE(aNew.IsDone); @@ -676,8 +652,7 @@ TEST(Geom2dProp_VsCurAndInf2dTest, OffsetCircle_NoExtrema) anOld.PerformCurExt(anOffset); ASSERT_TRUE(anOld.IsDone()); - Geom2dProp_Curve aProp; - aProp.Initialize(anOffset); + Geom2dProp_Curve aProp(anOffset); const Geom2dProp::CurveAnalysis aNew = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aNew.IsDone); diff --git a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.cxx b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.cxx index 94abca89bd..8ed4c1513c 100644 --- a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.cxx +++ b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.cxx @@ -44,11 +44,29 @@ occ::handle ExtractBasisCurve(const occ::handle& the //================================================================================================== -void Geom2dGridEval_Curve::Initialize(const Adaptor2d_Curve2d& theCurve) +Geom2dGridEval_Curve::Geom2dGridEval_Curve(const Adaptor2d_Curve2d& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +Geom2dGridEval_Curve::Geom2dGridEval_Curve(const occ::handle& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +void Geom2dGridEval_Curve::initialization(const Adaptor2d_Curve2d& theCurve) { if (theCurve.IsKind(STANDARD_TYPE(Geom2dAdaptor_Curve))) { - Initialize(static_cast(theCurve).Curve()); + initialization(static_cast(theCurve).Curve()); return; } @@ -60,7 +78,7 @@ void Geom2dGridEval_Curve::Initialize(const Adaptor2d_Curve2d& theCurve) //================================================================================================== -void Geom2dGridEval_Curve::Initialize(const occ::handle& theCurve) +void Geom2dGridEval_Curve::initialization(const occ::handle& theCurve) { if (theCurve.IsNull()) { @@ -122,13 +140,6 @@ void Geom2dGridEval_Curve::Initialize(const occ::handle& theCurve) //================================================================================================== -bool Geom2dGridEval_Curve::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - NCollection_Array1 Geom2dGridEval_Curve::EvaluateGrid( const NCollection_Array1& theParams) const { diff --git a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.hxx b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.hxx index 691fce4b09..d21025ec05 100644 --- a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.hxx +++ b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_Curve.hxx @@ -52,10 +52,9 @@ //! //! Usage: //! @code -//! Geom2dGridEval_Curve anEval; -//! anEval.Initialize(myAdaptorCurve2d); +//! Geom2dGridEval_Curve anEval(myAdaptorCurve2d); //! // OR -//! anEval.Initialize(myGeom2dCurve); +//! Geom2dGridEval_Curve anEval(myGeom2dCurve); //! NCollection_Array1 aGrid = anEval.EvaluateGrid(myParams); //! @endcode class Geom2dGridEval_Curve @@ -75,12 +74,17 @@ public: Geom2dGridEval_OffsetCurve, // Offset curve Geom2dGridEval_OtherCurve>; // Fallback for other types - //! Default constructor - uninitialized state. - Geom2dGridEval_Curve() - : myEvaluator(std::monostate{}), - myCurveType(GeomAbs_OtherCurve) - { - } + //! Construct from 2D adaptor reference (auto-detects curve type). + //! For Geom2dAdaptor_Curve, extracts underlying Geom2d_Curve for optimized evaluation. + //! For other adaptors, stores reference for fallback evaluation. + //! @note The curve adaptor reference must remain valid during the lifetime + //! of this evaluator when using fallback evaluation. + //! @param[in] theCurve 2D curve adaptor reference to evaluate + Standard_EXPORT Geom2dGridEval_Curve(const Adaptor2d_Curve2d& theCurve); + + //! Construct from geometry handle (auto-detects curve type). + //! @param[in] theCurve 2D geometry to evaluate + Standard_EXPORT Geom2dGridEval_Curve(const occ::handle& theCurve); //! Non-copyable and non-movable. Geom2dGridEval_Curve(const Geom2dGridEval_Curve&) = delete; @@ -88,21 +92,6 @@ public: Geom2dGridEval_Curve(Geom2dGridEval_Curve&&) = delete; Geom2dGridEval_Curve& operator=(Geom2dGridEval_Curve&&) = delete; - //! Initialize from 2D adaptor reference (auto-detects curve type). - //! For Geom2dAdaptor_Curve, extracts underlying Geom2d_Curve for optimized evaluation. - //! For other adaptors, stores reference for fallback evaluation. - //! @note The curve adaptor reference must remain valid during the lifetime - //! of this evaluator when using fallback evaluation. - //! @param theCurve 2D curve adaptor reference to evaluate - Standard_EXPORT void Initialize(const Adaptor2d_Curve2d& theCurve); - - //! Initialize from geometry handle (auto-detects curve type). - //! @param theCurve 2D geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theCurve); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Evaluate grid points at all parameters. //! @param theParams array of parameter values //! @return array of 2D points (1-based indexing) @@ -138,6 +127,15 @@ public: //! Returns the detected curve type. GeomAbs_CurveType GetType() const { return myCurveType; } +protected: + //! Initialize from 2D adaptor reference (auto-detects curve type). + //! @param[in] theCurve 2D curve adaptor reference to evaluate + Standard_EXPORT void initialization(const Adaptor2d_Curve2d& theCurve); + + //! Initialize from geometry handle (auto-detects curve type). + //! @param[in] theCurve 2D geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theCurve); + private: EvaluatorVariant myEvaluator; GeomAbs_CurveType myCurveType; diff --git a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_OffsetCurve.cxx b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_OffsetCurve.cxx index eb49eda887..f66ba4d060 100644 --- a/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_OffsetCurve.cxx +++ b/src/ModelingData/TKG2d/Geom2dGridEval/Geom2dGridEval_OffsetCurve.cxx @@ -27,8 +27,7 @@ NCollection_Array1 Geom2dGridEval_OffsetCurve::EvaluateGrid( } // Offset D0 requires basis D1 to compute offset normal direction - Geom2dGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + Geom2dGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD1 = aBasisEval.EvaluateGridD1(theParams); if (aBasisD1.IsEmpty()) @@ -64,8 +63,7 @@ NCollection_Array1 Geom2dGridEval_OffsetCurve::Evaluate } // Offset D1 requires basis D2 - Geom2dGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + Geom2dGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD2 = aBasisEval.EvaluateGridD2(theParams); if (aBasisD2.IsEmpty()) @@ -102,8 +100,7 @@ NCollection_Array1 Geom2dGridEval_OffsetCurve::Evaluate } // Offset D2 requires basis D3 - Geom2dGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + Geom2dGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD3 = aBasisEval.EvaluateGridD3(theParams); if (aBasisD3.IsEmpty()) @@ -161,8 +158,7 @@ NCollection_Array1 Geom2dGridEval_OffsetCurve::Evaluate } // Offset D3 requires basis D3 + D4 - Geom2dGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + Geom2dGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD3 = aBasisEval.EvaluateGridD3(theParams); if (aBasisD3.IsEmpty()) @@ -270,8 +266,7 @@ NCollection_Array1 Geom2dGridEval_OffsetCurve::EvaluateGridDN( else { // For orders > 3, batch evaluate basis curve DN - Geom2dGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + Geom2dGridEval_Curve aBasisEval(myBasis); return aBasisEval.EvaluateGridDN(theParams, theN); } } diff --git a/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.cxx b/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.cxx index a71d76f7a8..e0413d7c61 100644 --- a/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.cxx +++ b/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.cxx @@ -18,7 +18,25 @@ //================================================================================================== -void Geom2dProp_Curve::Initialize(const Adaptor2d_Curve2d& theCurve) +Geom2dProp_Curve::Geom2dProp_Curve(const Adaptor2d_Curve2d& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +Geom2dProp_Curve::Geom2dProp_Curve(const occ::handle& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +void Geom2dProp_Curve::initialization(const Adaptor2d_Curve2d& theCurve) { if (theCurve.IsKind(STANDARD_TYPE(Geom2dAdaptor_Curve))) { @@ -36,7 +54,7 @@ void Geom2dProp_Curve::Initialize(const Adaptor2d_Curve2d& theCurve) //================================================================================================== -void Geom2dProp_Curve::Initialize(const occ::handle& theCurve) +void Geom2dProp_Curve::initialization(const occ::handle& theCurve) { if (theCurve.IsNull()) { @@ -91,13 +109,6 @@ void Geom2dProp_Curve::initFromAdaptor() //================================================================================================== -bool Geom2dProp_Curve::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - Geom2dProp::TangentResult Geom2dProp_Curve::Tangent(const double theParam, const double theTol) const { diff --git a/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.hxx b/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.hxx index e39974390c..ec9774ad48 100644 --- a/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.hxx +++ b/src/ModelingData/TKG2d/Geom2dProp/Geom2dProp_Curve.hxx @@ -53,8 +53,7 @@ //! //! Usage: //! @code -//! Geom2dProp_Curve aProp; -//! aProp.Initialize(myGeom2dCurve); +//! Geom2dProp_Curve aProp(myGeom2dCurve); //! Geom2dProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); //! if (aCurv.IsDefined) //! { @@ -78,12 +77,14 @@ public: Geom2dProp_OffsetCurve, Geom2dProp_OtherCurve>; - //! Default constructor - uninitialized state. - Geom2dProp_Curve() - : myEvaluator(std::monostate{}), - myCurveType(GeomAbs_OtherCurve) - { - } + //! Construct from 2D adaptor reference (auto-detects curve type). + //! For Geom2dAdaptor_Curve, extracts underlying Geom2d_Curve for optimized evaluation. + //! @param[in] theCurve 2D curve adaptor reference + Standard_EXPORT Geom2dProp_Curve(const Adaptor2d_Curve2d& theCurve); + + //! Construct from geometry handle (auto-detects curve type). + //! @param[in] theCurve 2D geometry to evaluate + Standard_EXPORT Geom2dProp_Curve(const occ::handle& theCurve); //! Non-copyable and non-movable. Geom2dProp_Curve(const Geom2dProp_Curve&) = delete; @@ -91,18 +92,6 @@ public: Geom2dProp_Curve(Geom2dProp_Curve&&) = delete; Geom2dProp_Curve& operator=(Geom2dProp_Curve&&) = delete; - //! Initialize from 2D adaptor reference (auto-detects curve type). - //! For Geom2dAdaptor_Curve, extracts underlying Geom2d_Curve for optimized evaluation. - //! @param[in] theCurve 2D curve adaptor reference - Standard_EXPORT void Initialize(const Adaptor2d_Curve2d& theCurve); - - //! Initialize from geometry handle (auto-detects curve type). - //! @param[in] theCurve 2D geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theCurve); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Returns the detected curve type. GeomAbs_CurveType GetType() const { return myCurveType; } @@ -138,6 +127,15 @@ public: //! @return analysis result with inflection points sorted by parameter Standard_EXPORT Geom2dProp::CurveAnalysis FindInflections() const; +protected: + //! Initialize from 2D adaptor reference (auto-detects curve type). + //! @param[in] theCurve 2D curve adaptor reference + Standard_EXPORT void initialization(const Adaptor2d_Curve2d& theCurve); + + //! Initialize from geometry handle (auto-detects curve type). + //! @param[in] theCurve 2D geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theCurve); + private: //! Initialize from stored adaptor (dispatches to per-geometry evaluator). //! Must be called after myAdaptor is set. Per-geometry evaluators receive diff --git a/src/ModelingData/TKG3d/GTests/GeomGridEval_Curve_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomGridEval_Curve_Test.cxx index 96a1959612..ca7e1f1d0c 100644 --- a/src/ModelingData/TKG3d/GTests/GeomGridEval_Curve_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomGridEval_Curve_Test.cxx @@ -260,9 +260,7 @@ TEST(GeomGridEval_CurveTest, LineDispatch) occ::handle aGeomLine = new Geom_Line(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)); GeomAdaptor_Curve anAdaptor(aGeomLine); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Line); NCollection_Array1 aParams = CreateUniformParams(0.0, 10.0, 11); @@ -284,9 +282,7 @@ TEST(GeomGridEval_CurveTest, CircleDispatch) new Geom_Circle(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); GeomAdaptor_Curve anAdaptor(aGeomCircle); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Circle); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 17); @@ -306,9 +302,7 @@ TEST(GeomGridEval_CurveTest, BSplineDispatch) occ::handle aCurve = CreateSimpleBSpline(); GeomAdaptor_Curve anAdaptor(aCurve); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BSplineCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 21); @@ -329,9 +323,7 @@ TEST(GeomGridEval_CurveTest, EllipseDispatch) new Geom_Ellipse(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 3.0, 2.0); GeomAdaptor_Curve anAdaptor(anEllipse); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Ellipse); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 13); @@ -352,9 +344,7 @@ TEST(GeomGridEval_CurveTest, HyperbolaDispatch) new Geom_Hyperbola(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 3.0, 2.0); GeomAdaptor_Curve anAdaptor(aHypr); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Hyperbola); NCollection_Array1 aParams = CreateUniformParams(-2.0, 2.0, 11); @@ -375,9 +365,7 @@ TEST(GeomGridEval_CurveTest, ParabolaDispatch) new Geom_Parabola(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 1.0); GeomAdaptor_Curve anAdaptor(aParab); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Parabola); NCollection_Array1 aParams = CreateUniformParams(-2.0, 2.0, 11); @@ -403,9 +391,7 @@ TEST(GeomGridEval_CurveTest, BezierCurveDispatch) occ::handle aBezier = new Geom_BezierCurve(aPoles); GeomAdaptor_Curve anAdaptor(aBezier); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BezierCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); @@ -427,9 +413,7 @@ TEST(GeomGridEval_CurveTest, OffsetCurveFallbackDispatch) occ::handle anOffset = new Geom_OffsetCurve(aLine, 1.0, gp::DZ()); GeomAdaptor_Curve anAdaptor(anOffset); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_OffsetCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 5.0, 6); @@ -448,9 +432,7 @@ TEST(GeomGridEval_CurveTest, DirectHandleInit) { occ::handle aGeomLine = new Geom_Line(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)); - GeomGridEval_Curve anEval; - anEval.Initialize(aGeomLine); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(aGeomLine); EXPECT_EQ(anEval.GetType(), GeomAbs_Line); NCollection_Array1 aParams = CreateUniformParams(0.0, 10.0, 11); @@ -460,24 +442,12 @@ TEST(GeomGridEval_CurveTest, DirectHandleInit) EXPECT_NEAR(aGrid.Value(1).X(), 0.0, THE_TOLERANCE); } -TEST(GeomGridEval_CurveTest, UninitializedState) -{ - GeomGridEval_Curve anEval; - EXPECT_FALSE(anEval.IsInitialized()); - - NCollection_Array1 aEmptyParams; - NCollection_Array1 aGrid = anEval.EvaluateGrid(aEmptyParams); - EXPECT_TRUE(aGrid.IsEmpty()); -} - TEST(GeomGridEval_CurveTest, EmptyParams) { occ::handle aGeomLine = new Geom_Line(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)); GeomAdaptor_Curve anAdaptor(aGeomLine); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Curve anEval(anAdaptor); // EvaluateGrid with empty params should return empty NCollection_Array1 aEmptyParams; @@ -763,8 +733,7 @@ TEST(GeomGridEval_CurveTest, UnifiedDerivativeD1) new Geom_Circle(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); GeomAdaptor_Curve anAdaptor(aGeomCircle); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -786,8 +755,7 @@ TEST(GeomGridEval_CurveTest, UnifiedDerivativeD2) occ::handle aCurve = CreateSimpleBSpline(); GeomAdaptor_Curve anAdaptor(aCurve); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); @@ -865,8 +833,7 @@ TEST(GeomGridEval_CurveTest, OffsetCurveDerivativeD3) occ::handle anOffset = new Geom_OffsetCurve(aLine, 1.0, gp::DZ()); GeomAdaptor_Curve anAdaptor(anOffset); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Curve anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_OffsetCurve); NCollection_Array1 aParams = CreateUniformParams(0.0, 5.0, 6); @@ -891,8 +858,7 @@ TEST(GeomGridEval_CurveTest, UnifiedDerivativeD3) occ::handle aCurve = CreateSimpleBSpline(); GeomAdaptor_Curve anAdaptor(aCurve); - GeomGridEval_Curve anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Curve anEval(anAdaptor); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 11); diff --git a/src/ModelingData/TKG3d/GTests/GeomGridEval_OffsetSurface_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomGridEval_OffsetSurface_Test.cxx index b90199fecd..2a2a8e1a03 100644 --- a/src/ModelingData/TKG3d/GTests/GeomGridEval_OffsetSurface_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomGridEval_OffsetSurface_Test.cxx @@ -134,10 +134,8 @@ TEST(GeomGridEval_OffsetSurfaceTest, NestedDispatch) occ::handle aPlane = new Geom_Plane(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); occ::handle anOffset = new Geom_OffsetSurface(aPlane, 5.0); - GeomGridEval_Surface anEval; - anEval.Initialize(anOffset); + GeomGridEval_Surface anEval(anOffset); - EXPECT_TRUE(anEval.IsInitialized()); // Assuming GetType() returns OffsetSurface or similar identifier // (GeomGridEval_Surface::GetType logic might need checking, usually delegates to adaptor or // stored type) Since we added OffsetSurface to variant, it should be supported. diff --git a/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfExtrusion_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfExtrusion_Test.cxx index 257326f6e0..822fc52ee9 100644 --- a/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfExtrusion_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfExtrusion_Test.cxx @@ -245,10 +245,7 @@ TEST(GeomGridEval_SurfaceOfExtrusionTest, UnifiedDispatch) new Geom_SurfaceOfLinearExtrusion(aLine, aDirection); // Test dispatch via unified evaluator - GeomGridEval_Surface anEval; - anEval.Initialize(anExtSurf); - - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anExtSurf); EXPECT_EQ(anEval.GetType(), GeomAbs_SurfaceOfExtrusion); NCollection_Array1 aUParams = CreateUniformParams(0.0, 10.0, 5); @@ -275,10 +272,7 @@ TEST(GeomGridEval_SurfaceOfExtrusionTest, AdaptorDispatch) // Test dispatch via adaptor GeomAdaptor_Surface anAdaptor(anExtSurf); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_SurfaceOfExtrusion); NCollection_Array1 aUParams = CreateUniformParams(0.0, 10.0, 5); diff --git a/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfRevolution_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfRevolution_Test.cxx index 20d4432f4f..b8c61c39ab 100644 --- a/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfRevolution_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomGridEval_SurfaceOfRevolution_Test.cxx @@ -213,10 +213,7 @@ TEST(GeomGridEval_SurfaceOfRevolutionTest, UnifiedDispatch) occ::handle aRevSurf = new Geom_SurfaceOfRevolution(aLine, aRevAxis); // Test dispatch via unified evaluator - GeomGridEval_Surface anEval; - anEval.Initialize(aRevSurf); - - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(aRevSurf); EXPECT_EQ(anEval.GetType(), GeomAbs_SurfaceOfRevolution); NCollection_Array1 aUParams = CreateUniformParams(0.0, M_PI, 5); @@ -242,10 +239,7 @@ TEST(GeomGridEval_SurfaceOfRevolutionTest, AdaptorDispatch) // Test dispatch via adaptor GeomAdaptor_Surface anAdaptor(aRevSurf); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_SurfaceOfRevolution); NCollection_Array1 aUParams = CreateUniformParams(0.0, M_PI, 5); diff --git a/src/ModelingData/TKG3d/GTests/GeomGridEval_Surface_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomGridEval_Surface_Test.cxx index 7b0c000eb2..effac02b82 100644 --- a/src/ModelingData/TKG3d/GTests/GeomGridEval_Surface_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomGridEval_Surface_Test.cxx @@ -251,9 +251,7 @@ TEST(GeomGridEval_SurfaceTest, PlaneDispatch) occ::handle aGeomPlane = new Geom_Plane(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); GeomAdaptor_Surface anAdaptor(aGeomPlane); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Plane); NCollection_Array1 aUParams = CreateUniformParams(-5.0, 5.0, 11); @@ -278,9 +276,7 @@ TEST(GeomGridEval_SurfaceTest, SphereDispatch) new Geom_SphericalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); GeomAdaptor_Surface anAdaptor(aGeomSphere); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Sphere); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 13); @@ -304,9 +300,7 @@ TEST(GeomGridEval_SurfaceTest, BSplineDispatch) occ::handle aSurf = CreateSimpleBSplineSurface(); GeomAdaptor_Surface anAdaptor(aSurf); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BSplineSurface); NCollection_Array1 aUParams = CreateUniformParams(0.0, 1.0, 11); @@ -335,9 +329,7 @@ TEST(GeomGridEval_SurfaceTest, BezierSurfaceDispatch) occ::handle aBezier = new Geom_BezierSurface(aPoles); GeomAdaptor_Surface anAdaptor(aBezier); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_BezierSurface); NCollection_Array1 aParams = CreateUniformParams(0.0, 1.0, 5); @@ -360,9 +352,7 @@ TEST(GeomGridEval_SurfaceTest, CylinderDispatch) new Geom_CylindricalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); GeomAdaptor_Surface anAdaptor(aCyl); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Cylinder); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -387,9 +377,7 @@ TEST(GeomGridEval_SurfaceTest, TorusDispatch) new Geom_ToroidalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 4.0, 1.0); GeomAdaptor_Surface anAdaptor(aTorus); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Torus); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -414,9 +402,7 @@ TEST(GeomGridEval_SurfaceTest, ConeDispatch) new Geom_ConicalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), M_PI / 4, 1.0); GeomAdaptor_Surface anAdaptor(aCone); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_Cone); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -445,9 +431,7 @@ TEST(GeomGridEval_SurfaceTest, SurfaceOfRevolutionFallbackDispatch) GeomAdaptor_Surface anAdaptor(aRevSurf); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); EXPECT_EQ(anEval.GetType(), GeomAbs_SurfaceOfRevolution); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); @@ -471,10 +455,7 @@ TEST(GeomGridEval_SurfaceTest, DirectHandleInit) occ::handle aPlane = new Geom_Plane(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); // Initialize directly from occ::handle - GeomGridEval_Surface anEval; - anEval.Initialize(aPlane); - - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(aPlane); EXPECT_EQ(anEval.GetType(), GeomAbs_Plane); NCollection_Array1 aUParams = CreateUniformParams(0.0, 1.0, 5); @@ -487,26 +468,12 @@ TEST(GeomGridEval_SurfaceTest, DirectHandleInit) EXPECT_NEAR(aGrid.Value(1, 1).Z(), 0.0, THE_TOLERANCE); } -TEST(GeomGridEval_SurfaceTest, UninitializedState) -{ - GeomGridEval_Surface anEval; - EXPECT_FALSE(anEval.IsInitialized()); - - NCollection_Array1 aUParams = CreateUniformParams(0.0, 1.0, 5); - NCollection_Array1 aVParams = CreateUniformParams(0.0, 1.0, 5); - - NCollection_Array2 aGrid = anEval.EvaluateGrid(aUParams, aVParams); - EXPECT_TRUE(aGrid.IsEmpty()); -} - TEST(GeomGridEval_SurfaceTest, EmptyParams) { occ::handle aGeomPlane = new Geom_Plane(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)); GeomAdaptor_Surface anAdaptor(aGeomPlane); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); - EXPECT_TRUE(anEval.IsInitialized()); + GeomGridEval_Surface anEval(anAdaptor); // EvaluateGrid with empty params should return empty NCollection_Array1 aEmptyParams; @@ -627,8 +594,7 @@ TEST(GeomGridEval_SurfaceTest, UnifiedDerivativeD1) new Geom_SphericalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); GeomAdaptor_Surface anAdaptor(aSphere); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Surface anEval(anAdaptor); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); NCollection_Array1 aVParams = CreateUniformParams(-M_PI / 2, M_PI / 2, 5); @@ -655,8 +621,7 @@ TEST(GeomGridEval_SurfaceTest, UnifiedDerivativeD2) occ::handle aSurf = CreateSimpleBSplineSurface(); GeomAdaptor_Surface anAdaptor(aSurf); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Surface anEval(anAdaptor); NCollection_Array1 aUParams = CreateUniformParams(0.0, 1.0, 5); NCollection_Array1 aVParams = CreateUniformParams(0.0, 1.0, 5); @@ -880,8 +845,7 @@ TEST(GeomGridEval_SurfaceTest, UnifiedDerivativeD3) new Geom_ToroidalSurface(gp_Ax3(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 4.0, 1.0); GeomAdaptor_Surface anAdaptor(aTorus); - GeomGridEval_Surface anEval; - anEval.Initialize(anAdaptor); + GeomGridEval_Surface anEval(anAdaptor); NCollection_Array1 aUParams = CreateUniformParams(0.0, 2 * M_PI, 9); NCollection_Array1 aVParams = CreateUniformParams(0.0, 2 * M_PI, 9); diff --git a/src/ModelingData/TKG3d/GTests/GeomProp_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomProp_Test.cxx index 8e5268b633..4f4a7e36e9 100644 --- a/src/ModelingData/TKG3d/GTests/GeomProp_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomProp_Test.cxx @@ -181,26 +181,10 @@ TEST(GeomPropTest, ComputeMeanGaussian_Sphere) // GeomProp_Curve - initialization and basic queries // ============================================================================ -TEST(GeomPropCurveTest, UninitializedState) -{ - GeomProp_Curve aProp; - EXPECT_FALSE(aProp.IsInitialized()); -} - -TEST(GeomPropCurveTest, InitializeFromNullHandle) -{ - GeomProp_Curve aProp; - occ::handle aNullCurve; - aProp.Initialize(aNullCurve); - EXPECT_FALSE(aProp.IsInitialized()); -} - TEST(GeomPropCurveTest, Line_ZeroCurvature) { occ::handle aLine = new Geom_Line(gp_Pnt(0, 0, 0), gp_Dir(1, 0, 0)); - GeomProp_Curve aProp; - aProp.Initialize(aLine); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(aLine); EXPECT_EQ(aProp.GetType(), GeomAbs_Line); const GeomProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); @@ -214,9 +198,7 @@ TEST(GeomPropCurveTest, Circle_ConstantCurvature) gp_Circ aCirc(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), aRadius); occ::handle aCircle = new Geom_Circle(aCirc); - GeomProp_Curve aProp; - aProp.Initialize(aCircle); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(aCircle); EXPECT_EQ(aProp.GetType(), GeomAbs_Circle); const GeomProp::CurvatureResult aCurv = aProp.Curvature(1.0, Precision::Confusion()); @@ -231,9 +213,7 @@ TEST(GeomPropCurveTest, Ellipse_CurvatureExtrema) gp_Elips anElips(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), aMajor, aMinor); occ::handle anEllipse = new Geom_Ellipse(anElips); - GeomProp_Curve aProp; - aProp.Initialize(anEllipse); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(anEllipse); const GeomProp::CurveAnalysis aResult = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aResult.IsDone); @@ -245,9 +225,7 @@ TEST(GeomPropCurveTest, Hyperbola_SingleExtremum) gp_Hypr anHypr(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 6.0, 3.0); occ::handle aHyperbola = new Geom_Hyperbola(anHypr); - GeomProp_Curve aProp; - aProp.Initialize(aHyperbola); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(aHyperbola); const GeomProp::CurveAnalysis aResult = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aResult.IsDone); @@ -260,9 +238,7 @@ TEST(GeomPropCurveTest, Parabola_SingleExtremum) gp_Parab aParab(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 2.0); occ::handle aParabola = new Geom_Parabola(aParab); - GeomProp_Curve aProp; - aProp.Initialize(aParabola); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(aParabola); const GeomProp::CurveAnalysis aResult = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aResult.IsDone); @@ -275,8 +251,7 @@ TEST(GeomPropCurveTest, Circle_NoExtrema) gp_Circ aCirc(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 5.0); occ::handle aCircle = new Geom_Circle(aCirc); - GeomProp_Curve aProp; - aProp.Initialize(aCircle); + GeomProp_Curve aProp(aCircle); const GeomProp::CurveAnalysis aResult = aProp.FindCurvatureExtrema(); ASSERT_TRUE(aResult.IsDone); EXPECT_EQ(aResult.Points.Length(), 0); @@ -287,8 +262,7 @@ TEST(GeomPropCurveTest, Circle_NoInflections) gp_Circ aCirc(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 5.0); occ::handle aCircle = new Geom_Circle(aCirc); - GeomProp_Curve aProp; - aProp.Initialize(aCircle); + GeomProp_Curve aProp(aCircle); const GeomProp::CurveAnalysis aResult = aProp.FindInflections(); ASSERT_TRUE(aResult.IsDone); EXPECT_EQ(aResult.Points.Length(), 0); @@ -303,9 +277,7 @@ TEST(GeomPropCurveTest, BezierCurve_Inflections) aPoles(4) = gp_Pnt(4, 1, 0); occ::handle aBezier = new Geom_BezierCurve(aPoles); - GeomProp_Curve aProp; - aProp.Initialize(aBezier); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Curve aProp(aBezier); EXPECT_EQ(aProp.GetType(), GeomAbs_BezierCurve); const GeomProp::CurveAnalysis aResult = aProp.FindInflections(); @@ -316,8 +288,7 @@ TEST(GeomPropCurveTest, BezierCurve_Inflections) TEST(GeomPropCurveTest, Line_TangentDirection) { occ::handle aLine = new Geom_Line(gp_Pnt(0, 0, 0), gp_Dir(0, 1, 0)); - GeomProp_Curve aProp; - aProp.Initialize(aLine); + GeomProp_Curve aProp(aLine); const GeomProp::TangentResult aTan = aProp.Tangent(5.0, Precision::Confusion()); ASSERT_TRUE(aTan.IsDefined); @@ -329,8 +300,7 @@ TEST(GeomPropCurveTest, Circle_Normal) gp_Circ aCirc(gp_Ax2(gp_Pnt(0, 0, 0), gp_Dir(0, 0, 1)), 5.0); occ::handle aCircle = new Geom_Circle(aCirc); - GeomProp_Curve aProp; - aProp.Initialize(aCircle); + GeomProp_Curve aProp(aCircle); // At param=0, point is (5,0,0), normal should point toward center (-1,0,0) const GeomProp::NormalResult aNorm = aProp.Normal(0.0, Precision::Confusion()); @@ -343,8 +313,7 @@ TEST(GeomPropCurveTest, Circle_CentreOfCurvature) gp_Circ aCirc(gp_Ax2(gp_Pnt(1, 2, 3), gp_Dir(0, 0, 1)), 5.0); occ::handle aCircle = new Geom_Circle(aCirc); - GeomProp_Curve aProp; - aProp.Initialize(aCircle); + GeomProp_Curve aProp(aCircle); const GeomProp::CentreResult aCentre = aProp.CentreOfCurvature(0.0, Precision::Confusion()); ASSERT_TRUE(aCentre.IsDefined); @@ -357,27 +326,11 @@ TEST(GeomPropCurveTest, Circle_CentreOfCurvature) // GeomProp_Surface - initialization and basic queries // ============================================================================ -TEST(GeomPropSurfaceTest, UninitializedState) -{ - GeomProp_Surface aProp; - EXPECT_FALSE(aProp.IsInitialized()); -} - -TEST(GeomPropSurfaceTest, InitializeFromNullHandle) -{ - GeomProp_Surface aProp; - occ::handle aNullSurf; - aProp.Initialize(aNullSurf); - EXPECT_FALSE(aProp.IsInitialized()); -} - TEST(GeomPropSurfaceTest, Plane_ZeroCurvatures) { occ::handle aPlane = new Geom_Plane(gp_Ax3()); - GeomProp_Surface aProp; - aProp.Initialize(aPlane); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Surface aProp(aPlane); EXPECT_EQ(aProp.GetType(), GeomAbs_Plane); const GeomProp::SurfaceCurvatureResult aCurv = aProp.Curvatures(0.0, 0.0, Precision::Confusion()); @@ -391,8 +344,7 @@ TEST(GeomPropSurfaceTest, Plane_Normal) { occ::handle aPlane = new Geom_Plane(gp_Ax3()); - GeomProp_Surface aProp; - aProp.Initialize(aPlane); + GeomProp_Surface aProp(aPlane); const GeomProp::SurfaceNormalResult aNorm = aProp.Normal(0.0, 0.0, Precision::Confusion()); ASSERT_TRUE(aNorm.IsDefined); @@ -403,8 +355,7 @@ TEST(GeomPropSurfaceTest, Plane_MeanGaussian) { occ::handle aPlane = new Geom_Plane(gp_Ax3()); - GeomProp_Surface aProp; - aProp.Initialize(aPlane); + GeomProp_Surface aProp(aPlane); const GeomProp::MeanGaussianResult aRes = aProp.MeanGaussian(0.0, 0.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); @@ -417,9 +368,7 @@ TEST(GeomPropSurfaceTest, Sphere_ConstantCurvature) const double aRadius = 5.0; occ::handle aSphere = new Geom_SphericalSurface(gp_Ax3(), aRadius); - GeomProp_Surface aProp; - aProp.Initialize(aSphere); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Surface aProp(aSphere); EXPECT_EQ(aProp.GetType(), GeomAbs_Sphere); // Curvature sign depends on normal orientation. For outward-pointing normal, @@ -435,8 +384,7 @@ TEST(GeomPropSurfaceTest, Sphere_MeanGaussian) const double aRadius = 5.0; occ::handle aSphere = new Geom_SphericalSurface(gp_Ax3(), aRadius); - GeomProp_Surface aProp; - aProp.Initialize(aSphere); + GeomProp_Surface aProp(aSphere); const GeomProp::MeanGaussianResult aRes = aProp.MeanGaussian(0.5, 0.5, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); @@ -449,9 +397,7 @@ TEST(GeomPropSurfaceTest, Cylinder_Curvatures) const double aRadius = 3.0; occ::handle aCyl = new Geom_CylindricalSurface(gp_Ax3(), aRadius); - GeomProp_Surface aProp; - aProp.Initialize(aCyl); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Surface aProp(aCyl); EXPECT_EQ(aProp.GetType(), GeomAbs_Cylinder); const GeomProp::SurfaceCurvatureResult aCurv = aProp.Curvatures(0.5, 1.0, Precision::Confusion()); @@ -468,8 +414,7 @@ TEST(GeomPropSurfaceTest, Cylinder_MeanGaussian) const double aRadius = 3.0; occ::handle aCyl = new Geom_CylindricalSurface(gp_Ax3(), aRadius); - GeomProp_Surface aProp; - aProp.Initialize(aCyl); + GeomProp_Surface aProp(aCyl); const GeomProp::MeanGaussianResult aRes = aProp.MeanGaussian(0.5, 1.0, Precision::Confusion()); ASSERT_TRUE(aRes.IsDefined); @@ -482,9 +427,7 @@ TEST(GeomPropSurfaceTest, Cone_CurvaturesVaryAlongV) gp_Ax3 anAx3; occ::handle aCone = new Geom_ConicalSurface(anAx3, M_PI / 6.0, 5.0); - GeomProp_Surface aProp; - aProp.Initialize(aCone); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Surface aProp(aCone); EXPECT_EQ(aProp.GetType(), GeomAbs_Cone); const GeomProp::SurfaceCurvatureResult aCurv1 = @@ -506,9 +449,7 @@ TEST(GeomPropSurfaceTest, Torus_CurvaturesVaryAlongV) const double aMinor = 3.0; occ::handle aTorus = new Geom_ToroidalSurface(gp_Ax3(), aMajor, aMinor); - GeomProp_Surface aProp; - aProp.Initialize(aTorus); - ASSERT_TRUE(aProp.IsInitialized()); + GeomProp_Surface aProp(aTorus); EXPECT_EQ(aProp.GetType(), GeomAbs_Torus); // At V=0 (outer edge): k1=1/r, k2=1/(R+r) diff --git a/src/ModelingData/TKG3d/GTests/GeomProp_VsCLProps_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomProp_VsCLProps_Test.cxx index cb2419612a..e9602c7f84 100644 --- a/src/ModelingData/TKG3d/GTests/GeomProp_VsCLProps_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomProp_VsCLProps_Test.cxx @@ -48,8 +48,7 @@ constexpr double THE_POINT_TOL = 1.0e-6; //! Compare tangent from new GeomProp_Curve vs old GeomLProp_CLProps. void compareTangent(const occ::handle& theCurve, const double theParam) { - GeomProp_Curve aProp; - aProp.Initialize(theCurve); + GeomProp_Curve aProp(theCurve); const GeomProp::TangentResult aNew = aProp.Tangent(theParam, THE_LIN_TOL); GeomLProp_CLProps anOld(theCurve, theParam, 2, THE_LIN_TOL); @@ -68,8 +67,7 @@ void compareTangent(const occ::handle& theCurve, const double thePar //! Compare curvature from new GeomProp_Curve vs old GeomLProp_CLProps. void compareCurvature(const occ::handle& theCurve, const double theParam) { - GeomProp_Curve aProp; - aProp.Initialize(theCurve); + GeomProp_Curve aProp(theCurve); const GeomProp::CurvatureResult aNew = aProp.Curvature(theParam, THE_LIN_TOL); GeomLProp_CLProps anOld(theCurve, theParam, 2, THE_LIN_TOL); @@ -84,8 +82,7 @@ void compareCurvature(const occ::handle& theCurve, const double theP //! Compare normal from new GeomProp_Curve vs old GeomLProp_CLProps. void compareNormal(const occ::handle& theCurve, const double theParam) { - GeomProp_Curve aProp; - aProp.Initialize(theCurve); + GeomProp_Curve aProp(theCurve); const GeomProp::NormalResult aNew = aProp.Normal(theParam, THE_LIN_TOL); GeomLProp_CLProps anOld(theCurve, theParam, 2, THE_LIN_TOL); @@ -103,8 +100,7 @@ void compareNormal(const occ::handle& theCurve, const double thePara //! Compare centre of curvature from new vs old. void compareCentre(const occ::handle& theCurve, const double theParam) { - GeomProp_Curve aProp; - aProp.Initialize(theCurve); + GeomProp_Curve aProp(theCurve); const GeomProp::CentreResult aNew = aProp.CentreOfCurvature(theParam, THE_LIN_TOL); GeomLProp_CLProps anOld(theCurve, theParam, 2, THE_LIN_TOL); diff --git a/src/ModelingData/TKG3d/GTests/GeomProp_VsSLProps_Test.cxx b/src/ModelingData/TKG3d/GTests/GeomProp_VsSLProps_Test.cxx index d9cb02fbb5..c76027fdcd 100644 --- a/src/ModelingData/TKG3d/GTests/GeomProp_VsSLProps_Test.cxx +++ b/src/ModelingData/TKG3d/GTests/GeomProp_VsSLProps_Test.cxx @@ -41,8 +41,7 @@ constexpr double THE_DIR_TOL = 1.0e-4; //! Compare surface normal from new GeomProp_Surface vs old GeomLProp_SLProps. void compareNormal(const occ::handle& theSurf, const double theU, const double theV) { - GeomProp_Surface aProp; - aProp.Initialize(theSurf); + GeomProp_Surface aProp(theSurf); const GeomProp::SurfaceNormalResult aNew = aProp.Normal(theU, theV, THE_LIN_TOL); GeomLProp_SLProps anOld(theSurf, theU, theV, 2, THE_LIN_TOL); @@ -61,8 +60,7 @@ void compareCurvatures(const occ::handle& theSurf, const double theU, const double theV) { - GeomProp_Surface aProp; - aProp.Initialize(theSurf); + GeomProp_Surface aProp(theSurf); const GeomProp::SurfaceCurvatureResult aNew = aProp.Curvatures(theU, theV, THE_LIN_TOL); GeomLProp_SLProps anOld(theSurf, theU, theV, 2, THE_LIN_TOL); @@ -83,8 +81,7 @@ void compareMeanGaussian(const occ::handle& theSurf, const double theU, const double theV) { - GeomProp_Surface aProp; - aProp.Initialize(theSurf); + GeomProp_Surface aProp(theSurf); const GeomProp::MeanGaussianResult aNew = aProp.MeanGaussian(theU, theV, THE_LIN_TOL); GeomLProp_SLProps anOld(theSurf, theU, theV, 2, THE_LIN_TOL); diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_BezierSurface.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_BezierSurface.cxx index 68a79ce91d..efd73279f5 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_BezierSurface.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_BezierSurface.cxx @@ -81,8 +81,7 @@ NCollection_Array2 GeomGridEval_BezierSurface::EvaluateGrid( if (!aCurve.IsNull()) { // Use unified curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(aCurve); + GeomGridEval_Curve aCurveEval(aCurve); NCollection_Array1 aCurveResult = aCurveEval.EvaluateGrid(theUParams); diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.cxx index b41af01d2c..f3917501ef 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.cxx @@ -44,11 +44,29 @@ occ::handle ExtractBasisCurve(const occ::handle& theCurv //================================================================================================== -void GeomGridEval_Curve::Initialize(const Adaptor3d_Curve& theCurve) +GeomGridEval_Curve::GeomGridEval_Curve(const Adaptor3d_Curve& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +GeomGridEval_Curve::GeomGridEval_Curve(const occ::handle& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +void GeomGridEval_Curve::initialization(const Adaptor3d_Curve& theCurve) { if (theCurve.IsKind(STANDARD_TYPE(GeomAdaptor_Curve))) { - Initialize(static_cast(theCurve).Curve()); + initialization(static_cast(theCurve).Curve()); return; } @@ -60,7 +78,7 @@ void GeomGridEval_Curve::Initialize(const Adaptor3d_Curve& theCurve) //================================================================================================== -void GeomGridEval_Curve::Initialize(const occ::handle& theCurve) +void GeomGridEval_Curve::initialization(const occ::handle& theCurve) { if (theCurve.IsNull()) { @@ -123,13 +141,6 @@ void GeomGridEval_Curve::Initialize(const occ::handle& theCurve) //================================================================================================== -bool GeomGridEval_Curve::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - NCollection_Array1 GeomGridEval_Curve::EvaluateGrid( const NCollection_Array1& theParams) const { diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.hxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.hxx index 783c17ab75..7de1f39ee1 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.hxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Curve.hxx @@ -51,10 +51,9 @@ //! //! Usage: //! @code -//! GeomGridEval_Curve anEval; -//! anEval.Initialize(myAdaptorCurve); +//! GeomGridEval_Curve anEval(myAdaptorCurve); //! // OR -//! anEval.Initialize(myGeomCurve); +//! GeomGridEval_Curve anEval(myGeomCurve); //! NCollection_Array1 aGrid = anEval.EvaluateGrid(myParams); //! @endcode class GeomGridEval_Curve @@ -74,12 +73,17 @@ public: GeomGridEval_OffsetCurve, // Offset curve GeomGridEval_OtherCurve>; // Fallback for other types - //! Default constructor - uninitialized state. - GeomGridEval_Curve() - : myEvaluator(std::monostate{}), - myCurveType(GeomAbs_OtherCurve) - { - } + //! Construct from adaptor reference (auto-detects curve type). + //! For GeomAdaptor_Curve, extracts underlying Geom_Curve for optimized evaluation. + //! For other adaptors, stores reference for fallback evaluation. + //! @note The curve adaptor reference must remain valid during the lifetime + //! of this evaluator when using fallback evaluation. + //! @param[in] theCurve curve adaptor reference to evaluate + Standard_EXPORT GeomGridEval_Curve(const Adaptor3d_Curve& theCurve); + + //! Construct from geometry handle (auto-detects curve type). + //! @param[in] theCurve geometry to evaluate + Standard_EXPORT GeomGridEval_Curve(const occ::handle& theCurve); //! Non-copyable and non-movable. GeomGridEval_Curve(const GeomGridEval_Curve&) = delete; @@ -87,21 +91,6 @@ public: GeomGridEval_Curve(GeomGridEval_Curve&&) = delete; GeomGridEval_Curve& operator=(GeomGridEval_Curve&&) = delete; - //! Initialize from adaptor reference (auto-detects curve type). - //! For GeomAdaptor_Curve, extracts underlying Geom_Curve for optimized evaluation. - //! For other adaptors, stores reference for fallback evaluation. - //! @note The curve adaptor reference must remain valid during the lifetime - //! of this evaluator when using fallback evaluation. - //! @param theCurve curve adaptor reference to evaluate - Standard_EXPORT void Initialize(const Adaptor3d_Curve& theCurve); - - //! Initialize from geometry handle (auto-detects curve type). - //! @param theCurve geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theCurve); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Evaluate grid points at all parameters. //! @param theParams array of parameter values //! @return array of 3D points (1-based indexing) @@ -137,6 +126,15 @@ public: //! Returns the detected curve type. GeomAbs_CurveType GetType() const { return myCurveType; } +protected: + //! Initialize from adaptor reference (auto-detects curve type). + //! @param[in] theCurve curve adaptor reference to evaluate + Standard_EXPORT void initialization(const Adaptor3d_Curve& theCurve); + + //! Initialize from geometry handle (auto-detects curve type). + //! @param[in] theCurve geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theCurve); + private: EvaluatorVariant myEvaluator; GeomAbs_CurveType myCurveType; diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetCurve.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetCurve.cxx index 2d9addb56b..b9001f8a90 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetCurve.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetCurve.cxx @@ -28,8 +28,7 @@ NCollection_Array1 GeomGridEval_OffsetCurve::EvaluateGrid( // Offset D0 requires basis D1 to compute offset direction // Batch evaluate basis curve D1 - GeomGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD1 = aBasisEval.EvaluateGridD1(theParams); if (aBasisD1.IsEmpty()) @@ -66,8 +65,7 @@ NCollection_Array1 GeomGridEval_OffsetCurve::EvaluateGrid // Offset D1 requires basis D2 // Batch evaluate basis curve D2 - GeomGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD2 = aBasisEval.EvaluateGridD2(theParams); if (aBasisD2.IsEmpty()) @@ -105,8 +103,7 @@ NCollection_Array1 GeomGridEval_OffsetCurve::EvaluateGrid // Offset D2 requires basis D3 // Batch evaluate basis curve D3 - GeomGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD3 = aBasisEval.EvaluateGridD3(theParams); if (aBasisD3.IsEmpty()) @@ -169,8 +166,7 @@ NCollection_Array1 GeomGridEval_OffsetCurve::EvaluateGrid // Offset D3 requires basis D3 + D4 // Batch evaluate basis curve D3, get D4 individually - GeomGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Curve aBasisEval(myBasis); NCollection_Array1 aBasisD3 = aBasisEval.EvaluateGridD3(theParams); if (aBasisD3.IsEmpty()) @@ -272,8 +268,7 @@ NCollection_Array1 GeomGridEval_OffsetCurve::EvaluateGridDN( { // For orders > 3, offset curve DN = basis curve DN (no offset contribution) // Batch evaluate basis curve DN - GeomGridEval_Curve aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Curve aBasisEval(myBasis); return aBasisEval.EvaluateGridDN(theParams, theN); } } diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetSurface.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetSurface.cxx index fbed59f225..0b2bc03aa5 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetSurface.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_OffsetSurface.cxx @@ -36,8 +36,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGrid( if (!anEquivSurf.IsNull() && anEquivSurf.get() != myGeom.get()) { // Use the equivalent surface directly - GeomGridEval_Surface anEquivEval; - anEquivEval.Initialize(anEquivSurf); + GeomGridEval_Surface anEquivEval(anEquivSurf); return anEquivEval.EvaluateGrid(theUParams, theVParams); } } @@ -48,8 +47,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGrid( NCollection_Array2 aResult(1, aNbU, 1, aNbV); // Batch evaluate basis surface D1 (offset D0 requires basis D1) - GeomGridEval_Surface aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Surface aBasisEval(myBasis); NCollection_Array2 aBasisD1 = aBasisEval.EvaluateGridD1(theUParams, theVParams); @@ -105,8 +103,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGri occ::handle anEquivSurf = myGeom->Surface(); if (!anEquivSurf.IsNull() && anEquivSurf.get() != myGeom.get()) { - GeomGridEval_Surface anEquivEval; - anEquivEval.Initialize(anEquivSurf); + GeomGridEval_Surface anEquivEval(anEquivSurf); return anEquivEval.EvaluateGridD1(theUParams, theVParams); } } @@ -116,8 +113,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGri NCollection_Array2 aResult(1, aNbU, 1, aNbV); // Batch evaluate basis surface D2 (offset D1 requires basis D2) - GeomGridEval_Surface aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Surface aBasisEval(myBasis); NCollection_Array2 aBasisD2 = aBasisEval.EvaluateGridD2(theUParams, theVParams); @@ -174,8 +170,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGri occ::handle anEquivSurf = myGeom->Surface(); if (!anEquivSurf.IsNull() && anEquivSurf.get() != myGeom.get()) { - GeomGridEval_Surface anEquivEval; - anEquivEval.Initialize(anEquivSurf); + GeomGridEval_Surface anEquivEval(anEquivSurf); return anEquivEval.EvaluateGridD2(theUParams, theVParams); } } @@ -185,8 +180,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGri NCollection_Array2 aResult(1, aNbU, 1, aNbV); // Batch evaluate basis surface D3 (offset D2 requires basis D3) - GeomGridEval_Surface aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Surface aBasisEval(myBasis); NCollection_Array2 aBasisD3 = aBasisEval.EvaluateGridD3(theUParams, theVParams); @@ -250,8 +244,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGri occ::handle anEquivSurf = myGeom->Surface(); if (!anEquivSurf.IsNull() && anEquivSurf.get() != myGeom.get()) { - GeomGridEval_Surface anEquivEval; - anEquivEval.Initialize(anEquivSurf); + GeomGridEval_Surface anEquivEval(anEquivSurf); return anEquivEval.EvaluateGridD3(theUParams, theVParams); } } @@ -313,8 +306,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGridDN( occ::handle anEquivSurf = myGeom->Surface(); if (!anEquivSurf.IsNull() && anEquivSurf.get() != myGeom.get()) { - GeomGridEval_Surface anEquivEval; - anEquivEval.Initialize(anEquivSurf); + GeomGridEval_Surface anEquivEval(anEquivSurf); return anEquivEval.EvaluateGridDN(theUParams, theVParams, theNU, theNV); } } @@ -325,8 +317,7 @@ NCollection_Array2 GeomGridEval_OffsetSurface::EvaluateGridDN( NCollection_Array2 aResult(1, aNbU, 1, aNbV); // Batch evaluate basis surface D1 (offset DN requires basis D1) - GeomGridEval_Surface aBasisEval; - aBasisEval.Initialize(myBasis); + GeomGridEval_Surface aBasisEval(myBasis); NCollection_Array2 aBasisD1 = aBasisEval.EvaluateGridD1(theUParams, theVParams); diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.cxx index 1c2aa4d534..226b85c59d 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.cxx @@ -115,7 +115,25 @@ occ::handle CreateExtrusionSurface( //================================================================================================== -void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) +GeomGridEval_Surface::GeomGridEval_Surface(const Adaptor3d_Surface& theSurface) + : myEvaluator(std::monostate{}), + mySurfaceType(GeomAbs_OtherSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +GeomGridEval_Surface::GeomGridEval_Surface(const occ::handle& theSurface) + : myEvaluator(std::monostate{}), + mySurfaceType(GeomAbs_OtherSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +void GeomGridEval_Surface::initialization(const Adaptor3d_Surface& theSurface) { // Reset transformation myTrsf.reset(); @@ -134,7 +152,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) } // Initialize with the underlying Geom_Surface - Initialize(aTransformed.GeomSurface()); + initialization(aTransformed.GeomSurface()); return; } @@ -147,7 +165,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) occ::handle aGeomSurf = CreateGeomSurfaceFromAdaptor(aRevAdaptor); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -155,7 +173,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) aGeomSurf = aRevAdaptor.Surface(); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -163,7 +181,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) aGeomSurf = CreateRevolutionSurface(aRevAdaptor); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -182,7 +200,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) occ::handle aGeomSurf = CreateGeomSurfaceFromAdaptor(aExtAdaptor); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -190,7 +208,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) aGeomSurf = aExtAdaptor.Surface(); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -198,7 +216,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) aGeomSurf = CreateExtrusionSurface(aExtAdaptor); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -222,7 +240,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -236,7 +254,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) occ::handle aGeomSurf = CreateGeomSurfaceFromAdaptor(theSurface); if (!aGeomSurf.IsNull()) { - Initialize(aGeomSurf); + initialization(aGeomSurf); return; } @@ -247,7 +265,7 @@ void GeomGridEval_Surface::Initialize(const Adaptor3d_Surface& theSurface) //================================================================================================== -void GeomGridEval_Surface::Initialize(const occ::handle& theSurface) +void GeomGridEval_Surface::initialization(const occ::handle& theSurface) { if (theSurface.IsNull()) { @@ -319,13 +337,6 @@ void GeomGridEval_Surface::Initialize(const occ::handle& theSurfac //================================================================================================== -bool GeomGridEval_Surface::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - NCollection_Array2 GeomGridEval_Surface::EvaluateGrid( const NCollection_Array1& theUParams, const NCollection_Array1& theVParams) const diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.hxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.hxx index c0487c66b1..c683399417 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.hxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_Surface.hxx @@ -60,10 +60,9 @@ //! //! Usage: //! @code -//! GeomGridEval_Surface anEval; -//! anEval.Initialize(myAdaptorSurface); +//! GeomGridEval_Surface anEval(myAdaptorSurface); //! // OR -//! anEval.Initialize(myGeomSurface); +//! GeomGridEval_Surface anEval(myGeomSurface); //! // Grid evaluation //! NCollection_Array2 aGrid = anEval.EvaluateGrid(myUParams, myVParams); //! @endcode @@ -86,12 +85,17 @@ public: GeomGridEval_SurfaceOfExtrusion, // Surface of extrusion GeomGridEval_OtherSurface>; // Fallback for other types - //! Default constructor - uninitialized state. - GeomGridEval_Surface() - : myEvaluator(std::monostate{}), - mySurfaceType(GeomAbs_OtherSurface) - { - } + //! Construct from adaptor reference (auto-detects surface type). + //! For GeomAdaptor_Surface, extracts underlying Geom_Surface for optimized evaluation. + //! For other adaptors, stores reference for fallback evaluation. + //! @note The surface adaptor reference must remain valid during the lifetime + //! of this evaluator when using fallback evaluation. + //! @param[in] theSurface surface adaptor reference to evaluate + Standard_EXPORT GeomGridEval_Surface(const Adaptor3d_Surface& theSurface); + + //! Construct from geometry handle (auto-detects surface type). + //! @param[in] theSurface geometry to evaluate + Standard_EXPORT GeomGridEval_Surface(const occ::handle& theSurface); //! Non-copyable and non-movable. GeomGridEval_Surface(const GeomGridEval_Surface&) = delete; @@ -99,21 +103,6 @@ public: GeomGridEval_Surface(GeomGridEval_Surface&&) = delete; GeomGridEval_Surface& operator=(GeomGridEval_Surface&&) = delete; - //! Initialize from adaptor reference (auto-detects surface type). - //! For GeomAdaptor_Surface, extracts underlying Geom_Surface for optimized evaluation. - //! For other adaptors, stores reference for fallback evaluation. - //! @note The surface adaptor reference must remain valid during the lifetime - //! of this evaluator when using fallback evaluation. - //! @param theSurface surface adaptor reference to evaluate - Standard_EXPORT void Initialize(const Adaptor3d_Surface& theSurface); - - //! Initialize from geometry handle (auto-detects surface type). - //! @param theSurface geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theSurface); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Evaluate grid points at all specified parameters. //! @param[in] theUParams array of U parameter values //! @param[in] theVParams array of V parameter values @@ -167,6 +156,15 @@ public: //! Returns the transformation (empty if not set). const std::optional& GetTransformation() const { return myTrsf; } +protected: + //! Initialize from adaptor reference (auto-detects surface type). + //! @param[in] theSurface surface adaptor reference to evaluate + Standard_EXPORT void initialization(const Adaptor3d_Surface& theSurface); + + //! Initialize from geometry handle (auto-detects surface type). + //! @param[in] theSurface geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theSurface); + private: //! Apply transformation to grid of points. void applyTransformation(NCollection_Array2& theGrid) const; diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfExtrusion.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfExtrusion.cxx index 1db9933c03..ef9216f86c 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfExtrusion.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfExtrusion.cxx @@ -43,8 +43,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfExtrusion::EvaluateGrid( const int aNbV = theVParams.Size(); // Batch evaluate curve points using optimized curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurvePoints = aCurveEval.EvaluateGrid(theUParams); if (aCurvePoints.IsEmpty()) @@ -87,8 +86,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfExtrusion::Evalua const int aNbV = theVParams.Size(); // Batch evaluate curve D1 using optimized curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD1 = aCurveEval.EvaluateGridD1(theUParams); if (aCurveD1.IsEmpty()) @@ -138,8 +136,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfExtrusion::Evalua const int aNbV = theVParams.Size(); // Batch evaluate curve D2 using optimized curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD2 = aCurveEval.EvaluateGridD2(theUParams); if (aCurveD2.IsEmpty()) @@ -194,8 +191,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfExtrusion::Evalua const int aNbV = theVParams.Size(); // Batch evaluate curve D3 using optimized curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD3 = aCurveEval.EvaluateGridD3(theUParams); if (aCurveD3.IsEmpty()) @@ -266,8 +262,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfExtrusion::EvaluateGridDN( if (theNV == 0) { // Pure U derivative = curve derivative - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveDN = aCurveEval.EvaluateGridDN(theUParams, theNU); diff --git a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfRevolution.cxx b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfRevolution.cxx index a2852779c3..4ba0fea5d3 100644 --- a/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfRevolution.cxx +++ b/src/ModelingData/TKG3d/GeomGridEval/GeomGridEval_SurfaceOfRevolution.cxx @@ -45,8 +45,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfRevolution::EvaluateGrid( const int aNbV = theVParams.Size(); // Batch evaluate curve points using optimized curve evaluator - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurvePoints = aCurveEval.EvaluateGrid(theVParams); if (aCurvePoints.IsEmpty()) @@ -86,8 +85,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfRevolution::Evalu const int aNbV = theVParams.Size(); // Batch evaluate curve D1 - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD1 = aCurveEval.EvaluateGridD1(theVParams); if (aCurveD1.IsEmpty()) @@ -136,8 +134,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfRevolution::Evalu const int aNbV = theVParams.Size(); // Batch evaluate curve D2 - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD2 = aCurveEval.EvaluateGridD2(theVParams); if (aCurveD2.IsEmpty()) @@ -190,8 +187,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfRevolution::Evalu const int aNbV = theVParams.Size(); // Batch evaluate curve D3 - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); NCollection_Array1 aCurveD3 = aCurveEval.EvaluateGridD3(theVParams); if (aCurveD3.IsEmpty()) @@ -254,8 +250,7 @@ NCollection_Array2 GeomGridEval_SurfaceOfRevolution::EvaluateGridDN( NCollection_Array2 aResult(1, aNbU, 1, aNbV); // Get curve data - GeomGridEval_Curve aCurveEval; - aCurveEval.Initialize(myBasisCurve); + GeomGridEval_Curve aCurveEval(myBasisCurve); if (theNU == 0) { diff --git a/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.cxx b/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.cxx index 34b6339ef6..c9a19406be 100644 --- a/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.cxx +++ b/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.cxx @@ -18,7 +18,25 @@ //================================================================================================== -void GeomProp_Curve::Initialize(const Adaptor3d_Curve& theCurve) +GeomProp_Curve::GeomProp_Curve(const Adaptor3d_Curve& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +GeomProp_Curve::GeomProp_Curve(const occ::handle& theCurve) + : myEvaluator(std::monostate{}), + myCurveType(GeomAbs_OtherCurve) +{ + initialization(theCurve); +} + +//================================================================================================== + +void GeomProp_Curve::initialization(const Adaptor3d_Curve& theCurve) { if (theCurve.IsKind(STANDARD_TYPE(GeomAdaptor_Curve))) { @@ -36,7 +54,7 @@ void GeomProp_Curve::Initialize(const Adaptor3d_Curve& theCurve) //================================================================================================== -void GeomProp_Curve::Initialize(const occ::handle& theCurve) +void GeomProp_Curve::initialization(const occ::handle& theCurve) { if (theCurve.IsNull()) { @@ -91,13 +109,6 @@ void GeomProp_Curve::initFromAdaptor() //================================================================================================== -bool GeomProp_Curve::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - GeomProp::TangentResult GeomProp_Curve::Tangent(const double theParam, const double theTol) const { return std::visit( diff --git a/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.hxx b/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.hxx index 84d14c4d96..6550c2787e 100644 --- a/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.hxx +++ b/src/ModelingData/TKG3d/GeomProp/GeomProp_Curve.hxx @@ -53,8 +53,7 @@ //! //! Usage: //! @code -//! GeomProp_Curve aProp; -//! aProp.Initialize(myGeomCurve); +//! GeomProp_Curve aProp(myGeomCurve); //! GeomProp::CurvatureResult aCurv = aProp.Curvature(0.5, Precision::Confusion()); //! if (aCurv.IsDefined) //! { @@ -78,12 +77,14 @@ public: GeomProp_OffsetCurve, GeomProp_OtherCurve>; - //! Default constructor - uninitialized state. - GeomProp_Curve() - : myEvaluator(std::monostate{}), - myCurveType(GeomAbs_OtherCurve) - { - } + //! Construct from 3D adaptor reference (auto-detects curve type). + //! For GeomAdaptor_Curve, extracts underlying Geom_Curve for optimized evaluation. + //! @param[in] theCurve 3D curve adaptor reference + Standard_EXPORT GeomProp_Curve(const Adaptor3d_Curve& theCurve); + + //! Construct from geometry handle (auto-detects curve type). + //! @param[in] theCurve 3D geometry to evaluate + Standard_EXPORT GeomProp_Curve(const occ::handle& theCurve); //! Non-copyable and non-movable. GeomProp_Curve(const GeomProp_Curve&) = delete; @@ -91,18 +92,6 @@ public: GeomProp_Curve(GeomProp_Curve&&) = delete; GeomProp_Curve& operator=(GeomProp_Curve&&) = delete; - //! Initialize from 3D adaptor reference (auto-detects curve type). - //! For GeomAdaptor_Curve, extracts underlying Geom_Curve for optimized evaluation. - //! @param[in] theCurve 3D curve adaptor reference - Standard_EXPORT void Initialize(const Adaptor3d_Curve& theCurve); - - //! Initialize from geometry handle (auto-detects curve type). - //! @param[in] theCurve 3D geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theCurve); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Returns the detected curve type. GeomAbs_CurveType GetType() const { return myCurveType; } @@ -138,6 +127,15 @@ public: //! @return analysis result with inflection points sorted by parameter Standard_EXPORT GeomProp::CurveAnalysis FindInflections() const; +protected: + //! Initialize from 3D adaptor reference (auto-detects curve type). + //! @param[in] theCurve 3D curve adaptor reference + Standard_EXPORT void initialization(const Adaptor3d_Curve& theCurve); + + //! Initialize from geometry handle (auto-detects curve type). + //! @param[in] theCurve 3D geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theCurve); + private: //! Initialize from stored adaptor (dispatches to per-geometry evaluator). //! Must be called after myAdaptor is set. Per-geometry evaluators receive diff --git a/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.cxx b/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.cxx index f3f49818e3..22c79c2b32 100644 --- a/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.cxx +++ b/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.cxx @@ -17,7 +17,25 @@ //================================================================================================== -void GeomProp_Surface::Initialize(const Adaptor3d_Surface& theSurface) +GeomProp_Surface::GeomProp_Surface(const Adaptor3d_Surface& theSurface) + : myEvaluator(std::monostate{}), + mySurfaceType(GeomAbs_OtherSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +GeomProp_Surface::GeomProp_Surface(const occ::handle& theSurface) + : myEvaluator(std::monostate{}), + mySurfaceType(GeomAbs_OtherSurface) +{ + initialization(theSurface); +} + +//================================================================================================== + +void GeomProp_Surface::initialization(const Adaptor3d_Surface& theSurface) { if (theSurface.IsKind(STANDARD_TYPE(GeomAdaptor_Surface))) { @@ -35,7 +53,7 @@ void GeomProp_Surface::Initialize(const Adaptor3d_Surface& theSurface) //================================================================================================== -void GeomProp_Surface::Initialize(const occ::handle& theSurface) +void GeomProp_Surface::initialization(const occ::handle& theSurface) { if (theSurface.IsNull()) { @@ -96,13 +114,6 @@ void GeomProp_Surface::initFromAdaptor() //================================================================================================== -bool GeomProp_Surface::IsInitialized() const -{ - return !std::holds_alternative(myEvaluator); -} - -//================================================================================================== - GeomProp::SurfaceNormalResult GeomProp_Surface::Normal(const double theU, const double theV, const double theTol) const diff --git a/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.hxx b/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.hxx index 76a669fb6a..1c2d97646b 100644 --- a/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.hxx +++ b/src/ModelingData/TKG3d/GeomProp/GeomProp_Surface.hxx @@ -57,8 +57,7 @@ //! //! Usage: //! @code -//! GeomProp_Surface aProp; -//! aProp.Initialize(myGeomSurface); +//! GeomProp_Surface aProp(myGeomSurface); //! GeomProp::SurfaceCurvatureResult aCurv = aProp.Curvatures(0.5, 0.5, Precision::Confusion()); //! if (aCurv.IsDefined) //! { @@ -85,12 +84,14 @@ public: GeomProp_OffsetSurface, GeomProp_OtherSurface>; - //! Default constructor - uninitialized state. - GeomProp_Surface() - : myEvaluator(std::monostate{}), - mySurfaceType(GeomAbs_OtherSurface) - { - } + //! Construct from 3D adaptor reference (auto-detects surface type). + //! For GeomAdaptor_Surface, extracts underlying Geom_Surface for optimized evaluation. + //! @param[in] theSurface 3D surface adaptor reference + Standard_EXPORT GeomProp_Surface(const Adaptor3d_Surface& theSurface); + + //! Construct from geometry handle (auto-detects surface type). + //! @param[in] theSurface 3D geometry to evaluate + Standard_EXPORT GeomProp_Surface(const occ::handle& theSurface); //! Non-copyable and non-movable. GeomProp_Surface(const GeomProp_Surface&) = delete; @@ -98,18 +99,6 @@ public: GeomProp_Surface(GeomProp_Surface&&) = delete; GeomProp_Surface& operator=(GeomProp_Surface&&) = delete; - //! Initialize from 3D adaptor reference (auto-detects surface type). - //! For GeomAdaptor_Surface, extracts underlying Geom_Surface for optimized evaluation. - //! @param[in] theSurface 3D surface adaptor reference - Standard_EXPORT void Initialize(const Adaptor3d_Surface& theSurface); - - //! Initialize from geometry handle (auto-detects surface type). - //! @param[in] theSurface 3D geometry to evaluate - Standard_EXPORT void Initialize(const occ::handle& theSurface); - - //! Returns true if properly initialized. - Standard_EXPORT bool IsInitialized() const; - //! Returns the detected surface type. GeomAbs_SurfaceType GetType() const { return mySurfaceType; } @@ -140,6 +129,15 @@ public: double theV, double theTol) const; +protected: + //! Initialize from 3D adaptor reference (auto-detects surface type). + //! @param[in] theSurface 3D surface adaptor reference + Standard_EXPORT void initialization(const Adaptor3d_Surface& theSurface); + + //! Initialize from geometry handle (auto-detects surface type). + //! @param[in] theSurface 3D geometry to evaluate + Standard_EXPORT void initialization(const occ::handle& theSurface); + private: //! Initialize from stored adaptor (dispatches to per-geometry evaluator). //! Must be called after myAdaptor is set. Per-geometry evaluators receive diff --git a/src/ModelingData/TKGeomBase/BndLib/BndLib_AddSurface.cxx b/src/ModelingData/TKGeomBase/BndLib/BndLib_AddSurface.cxx index c3c08b7971..8fd88bfd66 100644 --- a/src/ModelingData/TKGeomBase/BndLib/BndLib_AddSurface.cxx +++ b/src/ModelingData/TKGeomBase/BndLib/BndLib_AddSurface.cxx @@ -451,8 +451,7 @@ void BndLib_AddSurface::Add(const Adaptor3d_Surface& S, aVParams.SetValue(j, VMin + ((VMax - VMin) * (j - 1) / (Nv - 1))); } - GeomGridEval_Surface anEvaluator; - anEvaluator.Initialize(S); + GeomGridEval_Surface anEvaluator(S); const NCollection_Array2 aGrid = anEvaluator.EvaluateGrid(aUParams, aVParams); for (int i = aGrid.LowerRow(); i <= aGrid.UpperRow(); i++) @@ -577,8 +576,7 @@ void BndLib_AddSurface::AddGenSurf(const Adaptor3d_Surface& S, aVParams.SetValue(j, VMin + (j - 1) * dv2); } - GeomGridEval_Surface anEvaluator; - anEvaluator.Initialize(S); + GeomGridEval_Surface anEvaluator(S); const NCollection_Array2 aFineGrid = anEvaluator.EvaluateGrid(aUParams, aVParams); diff --git a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtCS.cxx b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtCS.cxx index fc6c869c2a..ac152b09e6 100644 --- a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtCS.cxx +++ b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtCS.cxx @@ -249,8 +249,7 @@ void Extrema_GenExtCS::Initialize(const Adaptor3d_Surface& S, } // Use batch grid evaluation for optimized surface point computation - GeomGridEval_Surface anEvaluator; - anEvaluator.Initialize(*myS); + GeomGridEval_Surface anEvaluator(*myS); const NCollection_Array2 aGrid = anEvaluator.EvaluateGrid(aUParams, aVParams); diff --git a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtPS.cxx b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtPS.cxx index ce743abb00..7913278f8c 100644 --- a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtPS.cxx +++ b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtPS.cxx @@ -538,8 +538,7 @@ void Extrema_GenExtPS::BuildGrid(const gp_Pnt& thePoint) // If flag was changed and extrema not reinitialized Extrema would fail myPoints.Resize(0, myusample + 1, 0, myvsample + 1, false); - GeomGridEval_Surface aGridEval; - aGridEval.Initialize(*myS); + GeomGridEval_Surface aGridEval(*myS); NCollection_Array2 aGridPoints = aGridEval.EvaluateGrid(myUParams->Array1(), myVParams->Array1()); @@ -870,8 +869,7 @@ void Extrema_GenExtPS::BuildTree() mySphereArray = new NCollection_HArray1(0, myusample * myvsample); // Use unified grid evaluator for all surface types (optimized for BSpline, Bezier, etc.) - GeomGridEval_Surface aGridEval; - aGridEval.Initialize(*myS); + GeomGridEval_Surface aGridEval(*myS); const NCollection_Array2 aGridPoints = aGridEval.EvaluateGrid(myUParams->Array1(), myVParams->Array1()); diff --git a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtSS.cxx b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtSS.cxx index a06586378c..19aaf5e47b 100644 --- a/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtSS.cxx +++ b/src/ModelingData/TKGeomBase/Extrema/Extrema_GenExtSS.cxx @@ -213,8 +213,7 @@ void Extrema_GenExtSS::Initialize(const Adaptor3d_Surface& S2, } // Use batch grid evaluation for optimized surface point computation - GeomGridEval_Surface anEvaluator; - anEvaluator.Initialize(*myS2); + GeomGridEval_Surface anEvaluator(*myS2); const NCollection_Array2 aGrid = anEvaluator.EvaluateGrid(aUParams, aVParams); @@ -294,8 +293,7 @@ void Extrema_GenExtSS::Perform(const Adaptor3d_Surface& S1, } // Use batch grid evaluation for optimized surface point computation - GeomGridEval_Surface anEvaluator; - anEvaluator.Initialize(S1); + GeomGridEval_Surface anEvaluator(S1); const NCollection_Array2 aGrid = anEvaluator.EvaluateGrid(aU1Params, aV1Params);