diff --git a/python/curves_python.cpp b/python/curves_python.cpp index 9c12986e271d51ab5873f17564ec6b59b8acac01..a5ebd59d02215ceaf1d2c3430bdcd43f857f353a 100644 --- a/python/curves_python.cpp +++ b/python/curves_python.cpp @@ -367,6 +367,10 @@ namespace curves "Add a new curve to piecewise curve, which should be defined in T_{min},T_{max}] " "where T_{min} is equal toT_{max} of the actual piecewise curve.") .def("is_continuous", &piecewise_polynomial_curve_t::is_continuous,"Check if the curve is continuous at the given order.") + .def("convert_piecewise_curve_to_bezier", &piecewise_polynomial_curve_t::convert_piecewise_curve_to_bezier<bezier_t>, + "Convert a piecewise polynomial curve to to a piecewise bezier curve") + .def("convert_piecewise_curve_to_cubic_hermite", &piecewise_polynomial_curve_t::convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>, + "Convert a piecewise polynomial curve to to a piecewise cubic hermite spline") .def("saveAsText", &piecewise_polynomial_curve_t::saveAsText<piecewise_polynomial_curve_t>,bp::args("filename"),"Saves *this inside a text file.") .def("loadFromText",&piecewise_polynomial_curve_t::loadFromText<piecewise_polynomial_curve_t>,bp::args("filename"),"Loads *this from a text file.") .def("saveAsXML",&piecewise_polynomial_curve_t::saveAsXML<piecewise_polynomial_curve_t>,bp::args("filename","tag_name"),"Saves *this inside a XML file.") @@ -385,6 +389,10 @@ namespace curves .def("derivate", &piecewise_bezier_curve_t::derivate) .def("add_curve", &piecewise_bezier_curve_t::add_curve) .def("is_continuous", &piecewise_bezier_curve_t::is_continuous) + .def("convert_piecewise_curve_to_polynomial", &piecewise_bezier_curve_t::convert_piecewise_curve_to_polynomial<polynomial_t>, + "Convert a piecewise bezier curve to to a piecewise polynomial curve") + .def("convert_piecewise_curve_to_cubic_hermite", &piecewise_bezier_curve_t::convert_piecewise_curve_to_cubic_hermite<cubic_hermite_spline_t>, + "Convert a piecewise bezier curve to to a piecewise cubic hermite spline") .def("saveAsText", &piecewise_bezier_curve_t::saveAsText<piecewise_bezier_curve_t>,bp::args("filename"),"Saves *this inside a text file.") .def("loadFromText",&piecewise_bezier_curve_t::loadFromText<piecewise_bezier_curve_t>,bp::args("filename"),"Loads *this from a text file.") .def("saveAsXML",&piecewise_bezier_curve_t::saveAsXML<piecewise_bezier_curve_t>,bp::args("filename","tag_name"),"Saves *this inside a XML file.") @@ -403,6 +411,10 @@ namespace curves .def("derivate", &piecewise_cubic_hermite_curve_t::derivate) .def("add_curve", &piecewise_cubic_hermite_curve_t::add_curve) .def("is_continuous", &piecewise_cubic_hermite_curve_t::is_continuous) + .def("convert_piecewise_curve_to_polynomial", &piecewise_cubic_hermite_curve_t::convert_piecewise_curve_to_polynomial<polynomial_t>, + "Convert a piecewise cubic hermite spline to to a piecewise polynomial curve") + .def("convert_piecewise_curve_to_bezier", &piecewise_cubic_hermite_curve_t::convert_piecewise_curve_to_bezier<bezier_t>, + "Convert a piecewise cubic hermite spline to to a piecewise bezier curve") .def("saveAsText", &piecewise_cubic_hermite_curve_t::saveAsText<piecewise_cubic_hermite_curve_t>,bp::args("filename"),"Saves *this inside a text file.") .def("loadFromText",&piecewise_cubic_hermite_curve_t::loadFromText<piecewise_cubic_hermite_curve_t>,bp::args("filename"),"Loads *this from a text file.") .def("saveAsXML",&piecewise_cubic_hermite_curve_t::saveAsXML<piecewise_cubic_hermite_curve_t>,bp::args("filename","tag_name"),"Saves *this inside a XML file.") diff --git a/python/test/test.py b/python/test/test.py index 1ae9ed28e1e5bafefe7a26c35fd6062b9ba6bcf2..603540eabe8342b114d7030605313cf2624744f0 100644 --- a/python/test/test.py +++ b/python/test/test.py @@ -338,6 +338,24 @@ class TestCurves(unittest.TestCase): self.assertTrue(norm(a(0.3) - a_bc(0.3)) < __EPS) return + def test_conversion_piecewise_curves(self): + __EPS = 1e-6 + waypoints = matrix([[1., 2., 3.], [4., 5., 6.]]).transpose() + a = bezier(waypoints, 0., 1.) + b = bezier(waypoints, 1., 2.) + pc = piecewise_bezier_curve(a) + pc.add_curve(b) + # Convert to piecewise polynomial + pc_pol = pc.convert_piecewise_curve_to_polynomial() + self.assertTrue(norm(pc_pol(0.3) - pc(0.3)) < __EPS) + # Convert to piecewise cubic hermite + pc_chs = pc.convert_piecewise_curve_to_cubic_hermite() + self.assertTrue(norm(pc_chs(0.3) - pc(0.3)) < __EPS) + # Convert to piecewise bezier + pc_bc = pc_chs.convert_piecewise_curve_to_bezier() + self.assertTrue(norm(pc_bc(0.3) - pc(0.3)) < __EPS) + return + if __name__ == '__main__': unittest.main()