@@ -335,9 +335,19 @@ void init_kinfam(pybind11::module &m)
335
335
py::class_<ChainFkSolverPos, SolverI> chain_fk_solver_pos (m, " ChainFkSolverPos" );
336
336
chain_fk_solver_pos.def (" JntToCart" , (int (ChainFkSolverPos::*)(const JntArray&, Frame&, int )) &ChainFkSolverPos::JntToCart,
337
337
py::arg (" q_in" ), py::arg (" p_out" ), py::arg (" segmentNr" )=-1 );
338
- // Argument by reference doesn't work for container types
339
- // chain_fk_solver_pos.def("JntToCart", (int (ChainFkSolverPos::*)(const JntArray&, std::vector<Frame>&, int)) &ChainFkSolverPos::JntToCart,
340
- // py::arg("q_in"), py::arg("p_out"), py::arg("segmentNr")=-1);
338
+ chain_fk_solver_pos.def (" JntToCart" , [](ChainFkSolverPos& self, const JntArray& q_in, py::list& p_out, int segmentNr)
339
+ {
340
+ std::vector<Frame> temp;
341
+ temp.resize (p_out.size ());
342
+ int result = self.JntToCart (q_in, temp, segmentNr);
343
+ p_out.clear ();
344
+ for (const Frame& f : temp)
345
+ {
346
+ p_out.append (f);
347
+ }
348
+ return result;
349
+ },
350
+ py::arg (" q_in" ), py::arg (" p_out" ), py::arg (" segmentNr" )=-1 );
341
351
342
352
343
353
// --------------------
@@ -346,9 +356,19 @@ void init_kinfam(pybind11::module &m)
346
356
py::class_<ChainFkSolverVel, SolverI> chain_fk_solver_vel (m, " ChainFkSolverVel" );
347
357
chain_fk_solver_vel.def (" JntToCart" , (int (ChainFkSolverVel::*)(const JntArrayVel&, FrameVel&, int )) &ChainFkSolverVel::JntToCart,
348
358
py::arg (" q_in" ), py::arg (" p_out" ), py::arg (" segmentNr" )=-1 );
349
- // Argument by reference doesn't work for container types
350
- // chain_fk_solver_vel.def("JntToCart", (int (ChainFkSolverVel::*)(const JntArrayVel&, std::vector<FrameVel>&, int)) &ChainFkSolverVel::JntToCart,
351
- // py::arg("q_in"), py::arg("p_out"), py::arg("segmentNr")=-1);
359
+ chain_fk_solver_vel.def (" JntToCart" , [](ChainFkSolverVel& self, const JntArrayVel& q_in, py::list& p_out, int segmentNr)
360
+ {
361
+ std::vector<FrameVel> temp;
362
+ temp.resize (p_out.size ());
363
+ int result = self.JntToCart (q_in, temp, segmentNr);
364
+ p_out.clear ();
365
+ for (const FrameVel& f : temp)
366
+ {
367
+ p_out.append (f);
368
+ }
369
+ return result;
370
+ },
371
+ py::arg (" q_in" ), py::arg (" p_out" ), py::arg (" segmentNr" )=-1 );
352
372
353
373
354
374
// ------------------------------
0 commit comments