From 31457746c2bbe0ca793c2a1507cd50469f48cb8d Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Wed, 8 Jan 2025 23:13:53 +0530 Subject: [PATCH] [Sketcher][test] Move helper functions away for reusability ...in other tests --- tests/src/Mod/Sketcher/App/SketchObject.cpp | 122 +--------------- .../Mod/Sketcher/App/SketcherTestHelpers.h | 136 ++++++++++++++++++ 2 files changed, 138 insertions(+), 120 deletions(-) create mode 100644 tests/src/Mod/Sketcher/App/SketcherTestHelpers.h diff --git a/tests/src/Mod/Sketcher/App/SketchObject.cpp b/tests/src/Mod/Sketcher/App/SketchObject.cpp index 068d0d4aa8..98b1a5c837 100644 --- a/tests/src/Mod/Sketcher/App/SketchObject.cpp +++ b/tests/src/Mod/Sketcher/App/SketchObject.cpp @@ -11,127 +11,9 @@ #include #include #include +#include "SketcherTestHelpers.h" -void setupLineSegment(Part::GeomLineSegment& lineSeg) -{ - Base::Vector3d coords1(1.0, 2.0, 0.0); - Base::Vector3d coords2(3.0, 4.0, 0.0); - lineSeg.setPoints(coords1, coords2); -} - -void setupCircle(Part::GeomCircle& circle) -{ - Base::Vector3d coordsCenter(1.0, 2.0, 0.0); - Base::Vector3d splitPoint(2.0, 3.1, 0.0); - double radius = 3.0; - circle.setCenter(coordsCenter); - circle.setRadius(radius); -} - -void setupArcOfCircle(Part::GeomArcOfCircle& arcOfCircle) -{ - Base::Vector3d coordsCenter(1.0, 2.0, 0.0); - double radius = 3.0; - double startParam = M_PI / 3, endParam = M_PI * 1.5; - arcOfCircle.setCenter(coordsCenter); - arcOfCircle.setRadius(radius); - arcOfCircle.setRange(startParam, endParam, true); -} - -void setupEllipse(Part::GeomEllipse& ellipse) -{ - Base::Vector3d coordsCenter(1.0, 2.0, 0.0); - double majorRadius = 4.0; - double minorRadius = 3.0; - ellipse.setCenter(coordsCenter); - ellipse.setMajorRadius(majorRadius); - ellipse.setMinorRadius(minorRadius); -} - -void setupArcOfHyperbola(Part::GeomArcOfHyperbola& arcOfHyperbola) -{ - Base::Vector3d coordsCenter(1.0, 2.0, 0.0); - double majorRadius = 4.0; - double minorRadius = 3.0; - double startParam = M_PI / 3, endParam = M_PI * 1.5; - arcOfHyperbola.setCenter(coordsCenter); - arcOfHyperbola.setMajorRadius(majorRadius); - arcOfHyperbola.setMinorRadius(minorRadius); - arcOfHyperbola.setRange(startParam, endParam, true); -} - -void setupArcOfParabola(Part::GeomArcOfParabola& aop) -{ - Base::Vector3d coordsCenter(1.0, 2.0, 0.0); - double focal = 3.0; - double startParam = -M_PI * 1.5, endParam = M_PI * 1.5; - aop.setCenter(coordsCenter); - aop.setFocal(focal); - aop.setRange(startParam, endParam, true); -} - -std::unique_ptr createTypicalNonPeriodicBSpline() -{ - int degree = 3; - std::vector poles; - poles.emplace_back(1, 0, 0); - poles.emplace_back(1, 1, 0); - poles.emplace_back(1, 0.5, 0); - poles.emplace_back(0, 1, 0); - poles.emplace_back(0, 0, 0); - std::vector weights(5, 1.0); - std::vector knotsNonPeriodic = {0.0, 1.0, 2.0}; - std::vector multiplicitiesNonPeriodic = {degree + 1, 1, degree + 1}; - return std::make_unique(poles, - weights, - knotsNonPeriodic, - multiplicitiesNonPeriodic, - degree, - false); -} - -std::unique_ptr createTypicalPeriodicBSpline() -{ - int degree = 3; - std::vector poles; - poles.emplace_back(1, 0, 0); - poles.emplace_back(1, 1, 0); - poles.emplace_back(1, 0.5, 0); - poles.emplace_back(0, 1, 0); - poles.emplace_back(0, 0, 0); - std::vector weights(5, 1.0); - std::vector knotsPeriodic = {0.0, 0.3, 1.0, 1.5, 1.8, 2.0}; - std::vector multiplicitiesPeriodic(6, 1); - return std::make_unique(poles, - weights, - knotsPeriodic, - multiplicitiesPeriodic, - degree, - true); -} - -int countConstraintsOfType(const Sketcher::SketchObject* obj, const Sketcher::ConstraintType cType) -{ - const std::vector& constraints = obj->Constraints.getValues(); - - int result = std::count_if(constraints.begin(), - constraints.end(), - [&cType](const Sketcher::Constraint* constr) { - return constr->Type == cType; - }); - - return result; -} - -// Get point at the parameter after scaling the range to [0, 1]. -Base::Vector3d getPointAtNormalizedParameter(const Part::GeomCurve& curve, double param) -{ - return curve.pointAtParameter(curve.getFirstParameter() - + (curve.getLastParameter() - curve.getFirstParameter()) * param); -} - -// TODO: How to set up B-splines here? -// It's not straightforward to change everything from a "default" one. +using namespace SketcherTestHelpers; class SketchObjectTest: public ::testing::Test { diff --git a/tests/src/Mod/Sketcher/App/SketcherTestHelpers.h b/tests/src/Mod/Sketcher/App/SketcherTestHelpers.h new file mode 100644 index 0000000000..e03655e628 --- /dev/null +++ b/tests/src/Mod/Sketcher/App/SketcherTestHelpers.h @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include +#include +#include +#include +#include +#include +#include + +namespace SketcherTestHelpers +{ + +using namespace Sketcher; + +void setupLineSegment(Part::GeomLineSegment& lineSeg) +{ + Base::Vector3d coords1(1.0, 2.0, 0.0); + Base::Vector3d coords2(3.0, 4.0, 0.0); + lineSeg.setPoints(coords1, coords2); +} + +void setupCircle(Part::GeomCircle& circle) +{ + Base::Vector3d coordsCenter(1.0, 2.0, 0.0); + Base::Vector3d splitPoint(2.0, 3.1, 0.0); + double radius = 3.0; + circle.setCenter(coordsCenter); + circle.setRadius(radius); +} + +void setupArcOfCircle(Part::GeomArcOfCircle& arcOfCircle) +{ + Base::Vector3d coordsCenter(1.0, 2.0, 0.0); + double radius = 3.0; + double startParam = M_PI / 3, endParam = M_PI * 1.5; + arcOfCircle.setCenter(coordsCenter); + arcOfCircle.setRadius(radius); + arcOfCircle.setRange(startParam, endParam, true); +} + +void setupEllipse(Part::GeomEllipse& ellipse) +{ + Base::Vector3d coordsCenter(1.0, 2.0, 0.0); + double majorRadius = 4.0; + double minorRadius = 3.0; + ellipse.setCenter(coordsCenter); + ellipse.setMajorRadius(majorRadius); + ellipse.setMinorRadius(minorRadius); +} + +void setupArcOfHyperbola(Part::GeomArcOfHyperbola& arcOfHyperbola) +{ + Base::Vector3d coordsCenter(1.0, 2.0, 0.0); + double majorRadius = 4.0; + double minorRadius = 3.0; + double startParam = M_PI / 3, endParam = M_PI * 1.5; + arcOfHyperbola.setCenter(coordsCenter); + arcOfHyperbola.setMajorRadius(majorRadius); + arcOfHyperbola.setMinorRadius(minorRadius); + arcOfHyperbola.setRange(startParam, endParam, true); +} + +void setupArcOfParabola(Part::GeomArcOfParabola& aop) +{ + Base::Vector3d coordsCenter(1.0, 2.0, 0.0); + double focal = 3.0; + double startParam = -M_PI * 1.5, endParam = M_PI * 1.5; + aop.setCenter(coordsCenter); + aop.setFocal(focal); + aop.setRange(startParam, endParam, true); +} + +std::unique_ptr createTypicalNonPeriodicBSpline() +{ + int degree = 3; + std::vector poles; + poles.emplace_back(1, 0, 0); + poles.emplace_back(1, 1, 0); + poles.emplace_back(1, 0.5, 0); + poles.emplace_back(0, 1, 0); + poles.emplace_back(0, 0, 0); + std::vector weights(5, 1.0); + std::vector knotsNonPeriodic = {0.0, 1.0, 2.0}; + std::vector multiplicitiesNonPeriodic = {degree + 1, 1, degree + 1}; + return std::make_unique(poles, + weights, + knotsNonPeriodic, + multiplicitiesNonPeriodic, + degree, + false); +} + +std::unique_ptr createTypicalPeriodicBSpline() +{ + int degree = 3; + std::vector poles; + poles.emplace_back(1, 0, 0); + poles.emplace_back(1, 1, 0); + poles.emplace_back(1, 0.5, 0); + poles.emplace_back(0, 1, 0); + poles.emplace_back(0, 0, 0); + std::vector weights(5, 1.0); + std::vector knotsPeriodic = {0.0, 0.3, 1.0, 1.5, 1.8, 2.0}; + std::vector multiplicitiesPeriodic(6, 1); + return std::make_unique(poles, + weights, + knotsPeriodic, + multiplicitiesPeriodic, + degree, + true); +} + +int countConstraintsOfType(const Sketcher::SketchObject* obj, const Sketcher::ConstraintType cType) +{ + const std::vector& constraints = obj->Constraints.getValues(); + + int result = std::count_if(constraints.begin(), + constraints.end(), + [&cType](const Sketcher::Constraint* constr) { + return constr->Type == cType; + }); + + return result; +} + +// Get point at the parameter after scaling the range to [0, 1]. +Base::Vector3d getPointAtNormalizedParameter(const Part::GeomCurve& curve, double param) +{ + return curve.pointAtParameter(curve.getFirstParameter() + + (curve.getLastParameter() - curve.getFirstParameter()) * param); +} + +// TODO: How to set up B-splines here? +// It's not straightforward to change everything from a "default" one. +} // namespace SketcherTestHelpers