@@ -259,7 +259,24 @@ inline void gbs_bind_curves(py::module &m)
259259 , py::arg (" crv" )
260260 , py::arg (" clamped" ) = false
261261 )
262- ;
262+ .def (" basisCurve" , &gbs::CurveExtended<T, dim>::basisCurve, " Get the basis curve" )
263+ .def (" isClamped" , &gbs::CurveExtended<T, dim>::isClamped, " Check if the curve is clamped" )
264+ .def (py::pickle (
265+ [](CurveExtended<T, dim> &crv) {
266+ return py::make_tuple (// __getstate__
267+ crv.basisCurve (),
268+ crv.isClamped ()
269+ );
270+ },
271+ [](py::tuple t) { // __setstate__
272+ if (t.size () != 2 )
273+ throw std::runtime_error (" Invalid state!" );
274+ return CurveExtended<T, dim>{
275+ t[0 ].cast <std::shared_ptr<gbs::Curve<T, dim>>>(),
276+ t[1 ].cast <bool >()
277+ };
278+ }
279+ ));
263280
264281
265282 py::class_<
@@ -268,4 +285,55 @@ inline void gbs_bind_curves(py::module &m)
268285 gbs::Curve<T, dim>
269286 >(m, add_ext<dim>(" CurveOffset_func_base" ).c_str () );
270287
288+
289+ py::class_<
290+ gbs::CurveReversed<T, dim>,
291+ std::shared_ptr<gbs::CurveReversed<T, dim>>,
292+ gbs::Curve<T, dim>
293+ >(m, add_ext<dim>(" CurveReversed" ).c_str ())
294+ .def (py::init<std::shared_ptr<gbs::Curve<T, dim>>>(), py::arg (" crv" ))
295+ .def (" basisCurve" ,&gbs::CurveReversed<T, dim>::basisCurve)
296+ .def (py::pickle (
297+ [](CurveReversed<T, dim> &crv) {
298+ return py::make_tuple (// __getstate__
299+ crv.basisCurve ()
300+ );
301+ },
302+ [](py::tuple t) { // __setstate__
303+ if (t.size () != 1 )
304+ throw std::runtime_error (" Invalid state!" );
305+ return CurveReversed<T, dim>{
306+ t[0 ].cast <std::shared_ptr<gbs::Curve<T, dim>>>()
307+ };
308+ }
309+ ))
310+ ;
311+
312+ py::class_<
313+ gbs::CurveReparametrized<T, dim>,
314+ std::shared_ptr<gbs::CurveReparametrized<T, dim>>,
315+ gbs::Curve<T, dim>
316+ >(m, add_ext<dim>(" CurveReparametrized" ).c_str ())
317+ .def (py::init<const std::shared_ptr<gbs::Curve<T, dim>> &, const BSCfunction<T> &>(),
318+ py::arg (" crv" ), py::arg (" f_u" ))
319+ .def (" basisCurve" ,&gbs::CurveReparametrized<T, dim>::basisCurve)
320+ .def (" paramFunction" ,&gbs::CurveReparametrized<T, dim>::paramFunction)
321+ .def (" setParamFunction" ,&gbs::CurveReparametrized<T, dim>::setParamFunction, py::arg (" f_u" ))
322+ .def (py::pickle (
323+ [](CurveReparametrized<T, dim> &crv) {
324+ return py::make_tuple (// __getstate__
325+ crv.basisCurve (),
326+ crv.paramFunction ()
327+ );
328+ },
329+ [](py::tuple t) { // __setstate__
330+ if (t.size () != 2 )
331+ throw std::runtime_error (" Invalid state!" );
332+ return CurveReparametrized<T, dim>{
333+ t[0 ].cast <std::shared_ptr<gbs::Curve<T, dim>>>(),
334+ t[1 ].cast <BSCfunction<T>>()
335+ };
336+ }
337+ ))
338+ ;
271339}
0 commit comments