From 5b1a835e34ee4d3287a8ad113ee4ffb7a2fe2f43 Mon Sep 17 00:00:00 2001 From: JasonChmn <jason.chemin@hotmail.fr> Date: Thu, 22 Aug 2019 17:04:59 +0200 Subject: [PATCH] [Serialization] Add serialization of Dim getter for all curves --- include/curves/bezier_curve.h | 1 + include/curves/cubic_hermite_spline.h | 21 +- include/curves/piecewise_curve.h | 1 + include/curves/polynomial.h | 1 + tests/Main.cpp | 565 +++++++++++++------------- 5 files changed, 310 insertions(+), 279 deletions(-) diff --git a/include/curves/bezier_curve.h b/include/curves/bezier_curve.h index 3c5ab11..8f98930 100644 --- a/include/curves/bezier_curve.h +++ b/include/curves/bezier_curve.h @@ -440,6 +440,7 @@ namespace curves if (version) { // Do something depending on version ? } + ar & boost::serialization::make_nvp("dim", dim_); ar & boost::serialization::make_nvp("T_min", T_min_); ar & boost::serialization::make_nvp("T_max", T_max_); ar & boost::serialization::make_nvp("mult_T", mult_T_); diff --git a/include/curves/cubic_hermite_spline.h b/include/curves/cubic_hermite_spline.h index bfca68f..48da1fe 100644 --- a/include/curves/cubic_hermite_spline.h +++ b/include/curves/cubic_hermite_spline.h @@ -43,7 +43,7 @@ namespace curves /// \brief Empty constructor. Curve obtained this way can not perform other class functions. /// cubic_hermite_spline() - : T_min_(0), T_max_(0) + : dim_(0), T_min_(0), T_max_(0) {} /// \brief Constructor. @@ -66,12 +66,18 @@ namespace curves { control_points_.push_back(*it); } + // Set dimension according to size of points + if (control_points_.size()!=0) + { + dim_ = control_points_[0].first.size(); + } + // Set time setTime(time_control_points); } cubic_hermite_spline(const cubic_hermite_spline& other) - : control_points_(other.control_points_), time_control_points_(other.time_control_points_), + : dim_(other.dim_), control_points_(other.control_points_), time_control_points_(other.time_control_points_), duration_splines_(other.duration_splines_), T_min_(other.T_min_), T_max_(other.T_max_), size_(other.size_), degree_(other.degree_) {} @@ -88,7 +94,7 @@ namespace curves /// virtual Point operator()(const Time t) const { - check_if_not_empty(); + check_conditions(); if(Safe &! (T_min_ <= t && t <= T_max_)) { throw std::invalid_argument("can't evaluate cubic hermite spline, out of range"); @@ -110,7 +116,7 @@ namespace curves /// virtual Point derivate(const Time t, const std::size_t order) const { - check_if_not_empty(); + check_conditions(); return evalCubicHermiteSpline(t, order); } @@ -314,12 +320,16 @@ namespace curves return left_id-1; } - void check_if_not_empty() const + void check_conditions() const { if (control_points_.size() == 0) { throw std::runtime_error("Error in cubic hermite : there is no control points set / did you use empty constructor ?"); } + else if(dim_ == 0) + { + throw std::runtime_error("Error in cubic hermite : Dimension of points is zero / did you use empty constructor ?"); + } } /// \brief compute duration of each spline. @@ -399,6 +409,7 @@ namespace curves if (version) { // Do something depending on version ? } + ar & boost::serialization::make_nvp("dim", dim_); ar & boost::serialization::make_nvp("control_points", control_points_); ar & boost::serialization::make_nvp("time_control_points", time_control_points_); ar & boost::serialization::make_nvp("duration_splines", duration_splines_); diff --git a/include/curves/piecewise_curve.h b/include/curves/piecewise_curve.h index e4dbc2c..a1211c0 100644 --- a/include/curves/piecewise_curve.h +++ b/include/curves/piecewise_curve.h @@ -334,6 +334,7 @@ namespace curves if (version) { // Do something depending on version ? } + ar & boost::serialization::make_nvp("dim", dim_); ar & boost::serialization::make_nvp("curves", curves_); ar & boost::serialization::make_nvp("time_curves", time_curves_); ar & boost::serialization::make_nvp("size", size_); diff --git a/include/curves/polynomial.h b/include/curves/polynomial.h index ebca9fc..a6435bb 100644 --- a/include/curves/polynomial.h +++ b/include/curves/polynomial.h @@ -257,6 +257,7 @@ namespace curves if (version) { // Do something depending on version ? } + ar & boost::serialization::make_nvp("dim", dim_); ar & boost::serialization::make_nvp("coefficients", coefficients_); ar & boost::serialization::make_nvp("dim", dim_); ar & boost::serialization::make_nvp("degree", degree_); diff --git a/tests/Main.cpp b/tests/Main.cpp index 7ee49b9..6023f46 100644 --- a/tests/Main.cpp +++ b/tests/Main.cpp @@ -1071,171 +1071,172 @@ void CubicHermitePairsPositionDerivativeTest(bool& error) { std::cout << "Cubic hermite spline test, Error when calling getTime\n"; } - // Test derivative : three pairs, time default - res1 = cubic_hermite_spline_2Pairs.derivate(0.,1); - ComparePoints(t0, res1, errmsg3, error); - res1 = cubic_hermite_spline_2Pairs.derivate(0.5,1); - ComparePoints(t1, res1, errmsg3, error); - res1 = cubic_hermite_spline_2Pairs.derivate(1.,1); - ComparePoints(t2, res1, errmsg3, error); } void piecewiseCurveTest(bool& error) { - // TEST WITH POLYNOMIALS - std::string errmsg1("in piecewise polynomial curve test, Error While checking value of point on curve : "); - point_t a(1,1,1); // in [0,1[ - point_t b(2,1,1); // in [1,2[ - point_t c(3,1,1); // in [2,3] - point_t res; - t_point_t vec1, vec2, vec3; - vec1.push_back(a); // x=1, y=1, z=1 - vec2.push_back(b); // x=2, y=1, z=1 - vec3.push_back(c); // x=3, y=1, z=1 - // Create three polynomials of constant value in the interval of definition - polynomial_t pol1(vec1.begin(), vec1.end(), 0, 1); - polynomial_t pol2(vec2.begin(), vec2.end(), 1, 2); - polynomial_t pol3(vec3.begin(), vec3.end(), 2, 3); - // 1 polynomial in curve - piecewise_polynomial_curve_t pc(pol1); - res = pc(0.5); - ComparePoints(a,res,errmsg1,error); - // 3 polynomials in curve - pc.add_curve(pol2); - pc.add_curve(pol3); - // Check values on piecewise curve - // t in [0,1[ -> res=a - res = pc(0.); - ComparePoints(a,res,errmsg1,error); - res = pc(0.5); - ComparePoints(a,res,errmsg1,error); - // t in [1,2[ -> res=b - res = pc(1.0); - ComparePoints(b,res,errmsg1,error); - res = pc(1.5); - ComparePoints(b,res,errmsg1,error); - // t in [2,3] -> res=c - res = pc(2.0); - ComparePoints(c,res,errmsg1,error); - res = pc(3.0); - ComparePoints(c,res,errmsg1,error); - // Create piecewise curve C0 from bezier - point_t a0(1,2,3); - point_t b0(2,3,4); - point_t c0(3,4,5); - point_t d0(4,5,6); - std::vector<point_t> params0; - std::vector<point_t> params1; - params0.push_back(a0); // bezier between [0,1] - params0.push_back(b0); - params0.push_back(c0); - params0.push_back(d0); - params1.push_back(d0); // bezier between [1,2] - params1.push_back(c0); - params1.push_back(b0); - params1.push_back(a0); - bezier_curve_t bc0(params0.begin(), params0.end(), 0., 1.); - bezier_curve_t bc1(params1.begin(), params1.end(), 1., 2.); - piecewise_bezier_curve_t pc_C0(bc0); - pc_C0.add_curve(bc1); - // Check value in t=0.5 and t=1.5 - res = pc_C0(0.0); - ComparePoints(a0,res,errmsg1,error); - res = pc_C0(1.0); - ComparePoints(d0,res,errmsg1,error); - res = pc_C0(2.0); - ComparePoints(a0,res,errmsg1,error); - // Create piecewise curve C1 from Hermite - point_t p0(0.,0.,0.); - point_t p1(1.,2.,3.); - point_t p2(4.,4.,4.); - tangent_t t0(0.5,0.5,0.5); - tangent_t t1(0.1,0.2,-0.5); - tangent_t t2(0.1,0.2,0.3); - std::vector< pair_point_tangent_t > control_points_0; - control_points_0.push_back(pair_point_tangent_t(p0,t0)); - control_points_0.push_back(pair_point_tangent_t(p1,t1)); // control_points_0 = 1st piece of curve - std::vector< pair_point_tangent_t > control_points_1; - control_points_1.push_back(pair_point_tangent_t(p1,t1)); - control_points_1.push_back(pair_point_tangent_t(p2,t2)); // control_points_1 = 2nd piece of curve - std::vector< double > time_control_points0, time_control_points1; - time_control_points0.push_back(0.); - time_control_points0.push_back(1.); // hermite 0 between [0,1] - time_control_points1.push_back(1.); - time_control_points1.push_back(3.); // hermite 1 between [1,3] - cubic_hermite_spline_t chs0(control_points_0.begin(), control_points_0.end(), time_control_points0); - cubic_hermite_spline_t chs1(control_points_1.begin(), control_points_1.end(), time_control_points1); - piecewise_cubic_hermite_curve_t pc_C1(chs0); - pc_C1.add_curve(chs1); - // Create piecewise curve C2 - point_t a1(0,0,0); - point_t b1(1,1,1); - t_point_t veca, vecb; - // in [0,1[ - veca.push_back(a1); - veca.push_back(b1); // x=t, y=t, z=t - // in [1,2] - vecb.push_back(b1); - vecb.push_back(b1); // x=(t-1)+1, y=(t-1)+1, z=(t-1)+1 - polynomial_t pola(veca.begin(), veca.end(), 0, 1); - polynomial_t polb(vecb.begin(), vecb.end(), 1, 2); - piecewise_polynomial_curve_t pc_C2(pola); - pc_C2.add_curve(polb); - // check C0 continuity - std::string errmsg2("in piecewise polynomial curve test, Error while checking continuity C0 on "); - std::string errmsg3("in piecewise polynomial curve test, Error while checking continuity C1 on "); - std::string errmsg4("in piecewise polynomial curve test, Error while checking continuity C2 on "); - // not C0 - bool isC0 = pc.is_continuous(0); - if (isC0) - { - std::cout << errmsg2 << " pc " << std::endl; - error = true; - } - // C0 - isC0 = pc_C0.is_continuous(0); - if (not isC0) - { - std::cout << errmsg2 << " pc_C0 " << std::endl; - error = true; - } - // not C1 - bool isC1 = pc_C0.is_continuous(1); - if (isC1) - { - std::cout << errmsg3 << " pc_C0 " << std::endl; - error = true; - } - // C1 - isC1 = pc_C1.is_continuous(1); - if (not isC1) - { - std::cout << errmsg3 << " pc_C1 " << std::endl; - error = true; - } - // not C2 - bool isC2 = pc_C1.is_continuous(2); - if (isC2) + try { - std::cout << errmsg4 << " pc_C1 " << std::endl; - error = true; + // TEST WITH POLYNOMIALS + std::string errmsg1("in piecewise polynomial curve test, Error While checking value of point on curve : "); + point_t a(1,1,1); // in [0,1[ + point_t b(2,1,1); // in [1,2[ + point_t c(3,1,1); // in [2,3] + point_t res; + t_point_t vec1, vec2, vec3; + vec1.push_back(a); // x=1, y=1, z=1 + vec2.push_back(b); // x=2, y=1, z=1 + vec3.push_back(c); // x=3, y=1, z=1 + // Create three polynomials of constant value in the interval of definition + polynomial_t pol1(vec1.begin(), vec1.end(), 0, 1); + polynomial_t pol2(vec2.begin(), vec2.end(), 1, 2); + polynomial_t pol3(vec3.begin(), vec3.end(), 2, 3); + // 1 polynomial in curve + piecewise_polynomial_curve_t pc(pol1); + res = pc(0.5); + ComparePoints(a,res,errmsg1,error); + // 3 polynomials in curve + pc.add_curve(pol2); + pc.add_curve(pol3); + // Check values on piecewise curve + // t in [0,1[ -> res=a + res = pc(0.); + ComparePoints(a,res,errmsg1,error); + res = pc(0.5); + ComparePoints(a,res,errmsg1,error); + // t in [1,2[ -> res=b + res = pc(1.0); + ComparePoints(b,res,errmsg1,error); + res = pc(1.5); + ComparePoints(b,res,errmsg1,error); + // t in [2,3] -> res=c + res = pc(2.0); + ComparePoints(c,res,errmsg1,error); + res = pc(3.0); + ComparePoints(c,res,errmsg1,error); + // Create piecewise curve C0 from bezier + point_t a0(1,2,3); + point_t b0(2,3,4); + point_t c0(3,4,5); + point_t d0(4,5,6); + std::vector<point_t> params0; + std::vector<point_t> params1; + params0.push_back(a0); // bezier between [0,1] + params0.push_back(b0); + params0.push_back(c0); + params0.push_back(d0); + params1.push_back(d0); // bezier between [1,2] + params1.push_back(c0); + params1.push_back(b0); + params1.push_back(a0); + bezier_curve_t bc0(params0.begin(), params0.end(), 0., 1.); + bezier_curve_t bc1(params1.begin(), params1.end(), 1., 2.); + piecewise_bezier_curve_t pc_C0(bc0); + pc_C0.add_curve(bc1); + // Check value in t=0.5 and t=1.5 + res = pc_C0(0.0); + ComparePoints(a0,res,errmsg1,error); + res = pc_C0(1.0); + ComparePoints(d0,res,errmsg1,error); + res = pc_C0(2.0); + ComparePoints(a0,res,errmsg1,error); + // Create piecewise curve C1 from Hermite + point_t p0(0.,0.,0.); + point_t p1(1.,2.,3.); + point_t p2(4.,4.,4.); + tangent_t t0(0.5,0.5,0.5); + tangent_t t1(0.1,0.2,-0.5); + tangent_t t2(0.1,0.2,0.3); + std::vector< pair_point_tangent_t > control_points_0; + control_points_0.push_back(pair_point_tangent_t(p0,t0)); + control_points_0.push_back(pair_point_tangent_t(p1,t1)); // control_points_0 = 1st piece of curve + std::vector< pair_point_tangent_t > control_points_1; + control_points_1.push_back(pair_point_tangent_t(p1,t1)); + control_points_1.push_back(pair_point_tangent_t(p2,t2)); // control_points_1 = 2nd piece of curve + std::vector< double > time_control_points0, time_control_points1; + time_control_points0.push_back(0.); + time_control_points0.push_back(1.); // hermite 0 between [0,1] + time_control_points1.push_back(1.); + time_control_points1.push_back(3.); // hermite 1 between [1,3] + cubic_hermite_spline_t chs0(control_points_0.begin(), control_points_0.end(), time_control_points0); + cubic_hermite_spline_t chs1(control_points_1.begin(), control_points_1.end(), time_control_points1); + piecewise_cubic_hermite_curve_t pc_C1(chs0); + pc_C1.add_curve(chs1); + // Create piecewise curve C2 + point_t a1(0,0,0); + point_t b1(1,1,1); + t_point_t veca, vecb; + // in [0,1[ + veca.push_back(a1); + veca.push_back(b1); // x=t, y=t, z=t + // in [1,2] + vecb.push_back(b1); + vecb.push_back(b1); // x=(t-1)+1, y=(t-1)+1, z=(t-1)+1 + polynomial_t pola(veca.begin(), veca.end(), 0, 1); + polynomial_t polb(vecb.begin(), vecb.end(), 1, 2); + piecewise_polynomial_curve_t pc_C2(pola); + pc_C2.add_curve(polb); + // check C0 continuity + std::string errmsg2("in piecewise polynomial curve test, Error while checking continuity C0 on "); + std::string errmsg3("in piecewise polynomial curve test, Error while checking continuity C1 on "); + std::string errmsg4("in piecewise polynomial curve test, Error while checking continuity C2 on "); + // not C0 + bool isC0 = pc.is_continuous(0); + if (isC0) + { + std::cout << errmsg2 << " pc " << std::endl; + error = true; + } + // C0 + isC0 = pc_C0.is_continuous(0); + if (not isC0) + { + std::cout << errmsg2 << " pc_C0 " << std::endl; + error = true; + } + // not C1 + bool isC1 = pc_C0.is_continuous(1); + if (isC1) + { + std::cout << errmsg3 << " pc_C0 " << std::endl; + error = true; + } + // C1 + isC1 = pc_C1.is_continuous(1); + if (not isC1) + { + std::cout << errmsg3 << " pc_C1 " << std::endl; + error = true; + } + // not C2 + bool isC2 = pc_C1.is_continuous(2); + if (isC2) + { + std::cout << errmsg4 << " pc_C1 " << std::endl; + error = true; + } + // C2 + isC2 = pc_C2.is_continuous(2); + if (not isC2) + { + std::cout << errmsg4 << " pc_C2 " << std::endl; + error = true; + } + // CONVERT PIECEWISE POLYNOMIAL CURVES TO BEZIER AND HERMITE + std::string errmsg5("in piecewise polynomial curve test, Error while checking piecewise curve conversion"); + piecewise_bezier_curve_t pc_bezier = pc.convert_piecewise_curve_to_bezier<bezier_curve_t>(); + CompareCurves<piecewise_polynomial_curve_t, piecewise_bezier_curve_t>(pc, pc_bezier, errmsg5, error); + piecewise_cubic_hermite_curve_t pc_hermite = pc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); + CompareCurves<piecewise_polynomial_curve_t, piecewise_cubic_hermite_curve_t>(pc, pc_hermite, errmsg5, error); + piecewise_polynomial_curve_t pc_polynomial_same = pc.convert_piecewise_curve_to_polynomial<polynomial_t>(); + CompareCurves<piecewise_polynomial_curve_t, piecewise_polynomial_curve_t>(pc, pc_polynomial_same, errmsg5, error); } - // C2 - isC2 = pc_C2.is_continuous(2); - if (not isC2) + catch(...) { - std::cout << errmsg4 << " pc_C2 " << std::endl; error = true; + std::cout<<"Error in piecewiseCurveTest"<<std::endl; } - // CONVERT PIECEWISE POLYNOMIAL CURVES TO BEZIER AND HERMITE - std::string errmsg5("in piecewise polynomial curve test, Error while checking piecewise curve conversion"); - piecewise_bezier_curve_t pc_bezier = pc.convert_piecewise_curve_to_bezier<bezier_curve_t>(); - CompareCurves<piecewise_polynomial_curve_t, piecewise_bezier_curve_t>(pc, pc_bezier, errmsg5, error); - piecewise_cubic_hermite_curve_t pc_hermite = pc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); - CompareCurves<piecewise_polynomial_curve_t, piecewise_cubic_hermite_curve_t>(pc, pc_hermite, errmsg5, error); - piecewise_polynomial_curve_t pc_polynomial_same = pc.convert_piecewise_curve_to_polynomial<polynomial_t>(); - CompareCurves<piecewise_polynomial_curve_t, piecewise_polynomial_curve_t>(pc, pc_polynomial_same, errmsg5, error); } void curveAbcDimDynamicTest(bool& error) @@ -1331,133 +1332,149 @@ void curveAbcDimDynamicTest(bool& error) void piecewiseCurveConversionFromDiscretePointsTest(bool& error) { - std::string errMsg("piecewiseCurveConversionFromDiscretePointsTest, Error, value on curve is wrong : "); - point_t p0(0.,0.,0.); - point_t p1(1.,2.,3.); - point_t p2(4.,4.,4.); - point_t p3(10.,10.,10.); - point_t p_test_0_5 = (p0+p1)/2.0; - t_point_t points; - points.push_back(p0); - points.push_back(p1); - points.push_back(p2); - points.push_back(p3); - double T_min = 1.0; - double T_max = 3.0; - double timestep = (T_max-T_min)/double(points.size()-1); - piecewise_polynomial_curve_t ppc = piecewise_polynomial_curve_t:: - convert_discrete_points_to_polynomial<polynomial_t>(points,T_min,T_max); - if (!ppc.is_continuous(0)) - { - std::cout<<"piecewiseCurveConversionFromDiscretePointsTest, Error, piecewise curve is not C0"<<std::endl; + try + { + std::string errMsg("piecewiseCurveConversionFromDiscretePointsTest, Error, value on curve is wrong : "); + point_t p0(0.,0.,0.); + point_t p1(1.,2.,3.); + point_t p2(4.,4.,4.); + point_t p3(10.,10.,10.); + point_t p_test_0_5 = (p0+p1)/2.0; + t_point_t points; + points.push_back(p0); + points.push_back(p1); + points.push_back(p2); + points.push_back(p3); + double T_min = 1.0; + double T_max = 3.0; + double timestep = (T_max-T_min)/double(points.size()-1); + piecewise_polynomial_curve_t ppc = piecewise_polynomial_curve_t:: + convert_discrete_points_to_polynomial<polynomial_t>(points,T_min,T_max); + if (!ppc.is_continuous(0)) + { + std::cout<<"piecewiseCurveConversionFromDiscretePointsTest, Error, piecewise curve is not C0"<<std::endl; + error = true; + } + ComparePoints(p0, ppc(T_min), errMsg, error); + ComparePoints(p_test_0_5, ppc(T_min+timestep/2.0), errMsg, error); + ComparePoints(p1, ppc(T_min+timestep), errMsg, error); + ComparePoints(p2, ppc(T_min+2*timestep), errMsg, error); + ComparePoints(p3, ppc(T_max), errMsg, error); + } + catch(...) + { error = true; + std::cout<<"Error in piecewiseCurveConversionFromDiscretePointsTest"<<std::endl; } - ComparePoints(p0, ppc(T_min), errMsg, error); - ComparePoints(p_test_0_5, ppc(T_min+timestep/2.0), errMsg, error); - ComparePoints(p1, ppc(T_min+timestep), errMsg, error); - ComparePoints(p2, ppc(T_min+2*timestep), errMsg, error); - ComparePoints(p3, ppc(T_max), errMsg, error); } void serializationCurvesTest(bool& error) { - std::string errMsg1("in serializationCurveTest, Error While serializing Polynomial : "); - std::string errMsg2("in serializationCurveTest, Error While serializing Bezier : "); - std::string errMsg3("in serializationCurveTest, Error While serializing Cubic Hermite : "); - std::string errMsg4("in serializationCurveTest, Error While serializing Piecewise curves : "); - std::string errMsg5("in serializationCurveTest, Error While serializing Exact cubic : "); - std::string errMsg6("in serializationCurveTest, Error While serializing using abstract pointers : "); - point_t a(1,1,1); // in [0,1[ - point_t b(2,1,1); // in [1,2[ - point_t c(3,1,1); // in [2,3] - point_t res; - t_point_t vec1, vec2, vec3; - vec1.push_back(a); // x=1, y=1, z=1 - vec2.push_back(b); // x=2, y=1, z=1 - vec3.push_back(c); // x=3, y=1, z=1 - polynomial_t pol1(vec1.begin(), vec1.end(), 0, 1); - polynomial_t pol2(vec2.begin(), vec2.end(), 1, 2); - polynomial_t pol3(vec3.begin(), vec3.end(), 2, 3); - piecewise_polynomial_curve_t ppc(pol1); - ppc.add_curve(pol2); - ppc.add_curve(pol3); - std::string fileName("fileTest.test"); - std::string fileName1("fileTest1.test"); - // Simple curves - // Test serialization on Polynomial - pol1.saveAsText<polynomial_t>(fileName1); - polynomial_t pol_test; - pol_test.loadFromText<polynomial_t>(fileName1); - CompareCurves<polynomial_t, polynomial_t>(pol1, pol_test, errMsg1, error); - // Test serialization on Bezier - bezier_curve_t bc = bezier_from_curve<bezier_curve_t, polynomial_t>(pol1); - bc.saveAsText<bezier_curve_t>(fileName); - bezier_curve_t bc_test; - bc_test.loadFromText<bezier_curve_t>(fileName); - CompareCurves<polynomial_t, bezier_curve_t>(pol1, bc_test, errMsg2, error); - // Test serialization on Cubic Hermite - cubic_hermite_spline_t chs = hermite_from_curve<cubic_hermite_spline_t, polynomial_t>(pol1); - chs.saveAsText<cubic_hermite_spline_t>(fileName); - cubic_hermite_spline_t chs_test; - chs_test.loadFromText<cubic_hermite_spline_t>(fileName); - CompareCurves<polynomial_t, cubic_hermite_spline_t>(pol1, chs_test, errMsg3, error); - // Piecewise curves - // Test serialization on Piecewise Polynomial curve - ppc.saveAsText<piecewise_polynomial_curve_t>(fileName); - piecewise_polynomial_curve_t ppc_test; - ppc_test.loadFromText<piecewise_polynomial_curve_t>(fileName); - CompareCurves<piecewise_polynomial_curve_t,piecewise_polynomial_curve_t>(ppc, ppc_test, errMsg4, error); - // Test serialization on Piecewise Bezier curve - piecewise_bezier_curve_t pbc = ppc.convert_piecewise_curve_to_bezier<bezier_curve_t>(); - pbc.saveAsText<piecewise_bezier_curve_t>(fileName); - piecewise_bezier_curve_t pbc_test; - pbc_test.loadFromText<piecewise_bezier_curve_t>(fileName); - CompareCurves<piecewise_polynomial_curve_t,piecewise_bezier_curve_t>(ppc, pbc_test, errMsg4, error); - // Test serialization on Piecewise Cubic Hermite curve - piecewise_cubic_hermite_curve_t pchc = ppc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); - pchc.saveAsText<piecewise_cubic_hermite_curve_t>(fileName); - piecewise_cubic_hermite_curve_t pchc_test; - pchc_test.loadFromText<piecewise_cubic_hermite_curve_t>(fileName); - CompareCurves<piecewise_polynomial_curve_t,piecewise_cubic_hermite_curve_t>(ppc, pchc_test, errMsg4, error); - // Test serialization on exact cubic - curves::T_Waypoint waypoints; - for(double i = 0; i <= 1; i = i + 0.2) + try { - waypoints.push_back(std::make_pair(i,point_t(i,i,i))); + std::string errMsg1("in serializationCurveTest, Error While serializing Polynomial : "); + std::string errMsg2("in serializationCurveTest, Error While serializing Bezier : "); + std::string errMsg3("in serializationCurveTest, Error While serializing Cubic Hermite : "); + std::string errMsg4("in serializationCurveTest, Error While serializing Piecewise curves : "); + std::string errMsg5("in serializationCurveTest, Error While serializing Exact cubic : "); + std::string errMsg6("in serializationCurveTest, Error While serializing using abstract pointers : "); + point_t a(1,1,1); // in [0,1[ + point_t b(2,1,1); // in [1,2[ + point_t c(3,1,1); // in [2,3] + point_t res; + t_point_t vec1, vec2, vec3; + vec1.push_back(a); // x=1, y=1, z=1 + vec2.push_back(b); // x=2, y=1, z=1 + vec3.push_back(c); // x=3, y=1, z=1 + polynomial_t pol1(vec1.begin(), vec1.end(), 0, 1); + polynomial_t pol2(vec2.begin(), vec2.end(), 1, 2); + polynomial_t pol3(vec3.begin(), vec3.end(), 2, 3); + piecewise_polynomial_curve_t ppc(pol1); + ppc.add_curve(pol2); + ppc.add_curve(pol3); + std::string fileName("fileTest.test"); + std::string fileName1("fileTest1.test"); + // Simple curves + // Test serialization on Polynomial + pol1.saveAsText<polynomial_t>(fileName1); + polynomial_t pol_test; + pol_test.loadFromText<polynomial_t>(fileName1); + CompareCurves<polynomial_t, polynomial_t>(pol1, pol_test, errMsg1, error); + // Test serialization on Bezier + bezier_curve_t bc = bezier_from_curve<bezier_curve_t, polynomial_t>(pol1); + bc.saveAsText<bezier_curve_t>(fileName); + bezier_curve_t bc_test; + bc_test.loadFromText<bezier_curve_t>(fileName); + CompareCurves<polynomial_t, bezier_curve_t>(pol1, bc_test, errMsg2, error); + // Test serialization on Cubic Hermite + cubic_hermite_spline_t chs = hermite_from_curve<cubic_hermite_spline_t, polynomial_t>(pol1); + chs.saveAsText<cubic_hermite_spline_t>(fileName); + cubic_hermite_spline_t chs_test; + chs_test.loadFromText<cubic_hermite_spline_t>(fileName); + CompareCurves<polynomial_t, cubic_hermite_spline_t>(pol1, chs_test, errMsg3, error); + // Piecewise curves + // Test serialization on Piecewise Polynomial curve + ppc.saveAsText<piecewise_polynomial_curve_t>(fileName); + piecewise_polynomial_curve_t ppc_test; + ppc_test.loadFromText<piecewise_polynomial_curve_t>(fileName); + CompareCurves<piecewise_polynomial_curve_t,piecewise_polynomial_curve_t>(ppc, ppc_test, errMsg4, error); + // Test serialization on Piecewise Bezier curve + piecewise_bezier_curve_t pbc = ppc.convert_piecewise_curve_to_bezier<bezier_curve_t>(); + pbc.saveAsText<piecewise_bezier_curve_t>(fileName); + piecewise_bezier_curve_t pbc_test; + pbc_test.loadFromText<piecewise_bezier_curve_t>(fileName); + CompareCurves<piecewise_polynomial_curve_t,piecewise_bezier_curve_t>(ppc, pbc_test, errMsg4, error); + // Test serialization on Piecewise Cubic Hermite curve + piecewise_cubic_hermite_curve_t pchc = ppc.convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>(); + pchc.saveAsText<piecewise_cubic_hermite_curve_t>(fileName); + piecewise_cubic_hermite_curve_t pchc_test; + pchc_test.loadFromText<piecewise_cubic_hermite_curve_t>(fileName); + CompareCurves<piecewise_polynomial_curve_t,piecewise_cubic_hermite_curve_t>(ppc, pchc_test, errMsg4, error); + // Test serialization on exact cubic + curves::T_Waypoint waypoints; + for(double i = 0; i <= 1; i = i + 0.2) + { + waypoints.push_back(std::make_pair(i,point_t(i,i,i))); + } + spline_constraints_t constraints; + constraints.end_vel = point_t(0.1,0,0); + constraints.init_vel = point_t(0.2,0,0); + constraints.end_acc = point_t(0.01,0,0); + constraints.init_acc = point_t(0.01,0,0); + exact_cubic_t ec(waypoints.begin(), waypoints.end(), constraints); + ec.saveAsText<exact_cubic_t>(fileName); + exact_cubic_t ec_test; + ec_test.loadFromText<exact_cubic_t>(fileName); + CompareCurves<exact_cubic_t,exact_cubic_t>(ec, ec_test, errMsg5, error); + // Test with pointer on abstract struct curve_abc + // Polynomial + curve_abc_t * pt_0; + curve_abc_t * pt_1; + pol_test = polynomial_t(); + pt_0 = &pol1; + pt_1 = &pol_test; + (*pt_0).saveAsText<polynomial_t>(fileName); + (*pt_1).loadFromText<polynomial_t>(fileName); + CompareCurves<polynomial_t,polynomial_t>(pol1, + (*dynamic_cast<polynomial_t*>(pt_1)), + errMsg6, error); + // Piecewise Polynomial + pt_0 = NULL; + pt_1 = NULL; + ppc_test = piecewise_polynomial_curve_t(); + pt_0 = &ppc; + pt_1 = &ppc_test; + (*pt_0).saveAsText<piecewise_polynomial_curve_t>(fileName); + (*pt_1).loadFromText<piecewise_polynomial_curve_t>(fileName); + CompareCurves<piecewise_polynomial_curve_t,piecewise_polynomial_curve_t>(ppc, + (*dynamic_cast<piecewise_polynomial_curve_t*>(pt_1)), + errMsg6, error); + } + catch(...) + { + error = true; + std::cout<<"Error in serializationCurvesTest"<<std::endl; } - spline_constraints_t constraints; - constraints.end_vel = point_t(0.1,0,0); - constraints.init_vel = point_t(0.2,0,0); - constraints.end_acc = point_t(0.01,0,0); - constraints.init_acc = point_t(0.01,0,0); - exact_cubic_t ec(waypoints.begin(), waypoints.end(), constraints); - ec.saveAsText<exact_cubic_t>(fileName); - exact_cubic_t ec_test; - ec_test.loadFromText<exact_cubic_t>(fileName); - CompareCurves<exact_cubic_t,exact_cubic_t>(ec, ec_test, errMsg5, error); - // Test with pointer on abstract struct curve_abc - // Polynomial - curve_abc_t * pt_0; - curve_abc_t * pt_1; - pol_test = polynomial_t(); - pt_0 = &pol1; - pt_1 = &pol_test; - (*pt_0).saveAsText<polynomial_t>(fileName); - (*pt_1).loadFromText<polynomial_t>(fileName); - CompareCurves<polynomial_t,polynomial_t>(pol1, - (*dynamic_cast<polynomial_t*>(pt_1)), - errMsg6, error); - // Piecewise Polynomial - pt_0 = NULL; - pt_1 = NULL; - ppc_test = piecewise_polynomial_curve_t(); - pt_0 = &ppc; - pt_1 = &ppc_test; - (*pt_0).saveAsText<piecewise_polynomial_curve_t>(fileName); - (*pt_1).loadFromText<piecewise_polynomial_curve_t>(fileName); - CompareCurves<piecewise_polynomial_curve_t,piecewise_polynomial_curve_t>(ppc, - (*dynamic_cast<piecewise_polynomial_curve_t*>(pt_1)), - errMsg6, error); } int main(int /*argc*/, char** /*argv[]*/) -- GitLab