pinocchio  3.9.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Loading...
Searching...
No Matches
visualizer-visitor.hpp
1//
2// Copyright (c) 2024-2025 INRIA
3//
4#ifndef __pinocchio_python_extra_extras_hpp__
5#define __pinocchio_python_extra_extras_hpp__
6
7#include "pinocchio/visualizers/base-visualizer.hpp"
8#include "pinocchio/bindings/python/fwd.hpp"
9
10#include <eigenpy/optional.hpp>
11#include <eigenpy/std-vector.hpp>
12
13namespace pinocchio
14{
15 namespace python
16 {
17 namespace bp = boost::python;
18
19 template<class Visualizer>
20 struct VisualizerPythonVisitor : bp::def_visitor<VisualizerPythonVisitor<Visualizer>>
21 {
22 typedef ::pinocchio::visualizers::BaseVisualizer Base;
23 static_assert(
24 std::is_base_of<Base, Visualizer>::value,
25 "Visualizer class must be derived from pinocchio::visualizers::BaseVisualizer.");
26
27 static void setCameraPose_proxy(Visualizer & vis, const Base::Matrix4 & pose)
28 {
29 vis.setCameraPose(pose);
30 }
31
32 static void setCameraPose_proxy2(Visualizer & vis, const SE3 & pose)
33 {
34 vis.setCameraPose(pose);
35 }
36
37 static void play_proxy(
38 Visualizer & vis, const std::vector<visualizers::VectorXs> & qs, context::Scalar dt)
39 {
40 std::vector<visualizers::ConstVectorRef> qs_;
41 qs_.reserve(qs.size());
42 for (size_t i = 0; i < qs.size(); i++)
43 {
44 qs_.emplace_back(qs[i]);
45 }
46 vis.play(qs_, dt);
47 }
48
49 static void
50 play_proxy2(Visualizer & vis, const visualizers::ConstMatrixRef & qs, context::Scalar dt)
51 {
52 vis.play(qs, dt);
53 }
54
55 template<class... PyArgs>
56 void visit(bp::class_<PyArgs...> & cl) const
57 {
58 using ::pinocchio::visualizers::ConstVectorRef;
59 eigenpy::OptionalConverter<ConstVectorRef, boost::optional>::registration();
60
61// convenience macro to use a lambda -- passing &Visualizer::<getter-fun> doesn't work
62#define DEF_PROP_PROXY(name) \
63 add_property( \
64 #name, \
65 bp::make_function( \
66 +[](Visualizer & v) -> auto & { return v.name(); }, bp::return_internal_reference<>()))
67
68 cl.def("initViewer", &Visualizer::initViewer)
69 .def("loadViewerModel", &Visualizer::loadViewerModel)
70 .def("rebuildData", &Visualizer::rebuildData)
71 .def(
72 "display", +[](Visualizer & v, const ConstVectorRef & q) { v.display(q); },
73 (bp::arg("self"), bp::arg("q") = boost::none))
74 .def("play", play_proxy, (bp::arg("self"), "qs", "dt"))
75 .def("play", play_proxy2, (bp::arg("self"), "qs", "dt"))
76 .def("setCameraTarget", &Visualizer::setCameraTarget, (bp::arg("self"), "target"))
77 .def("setCameraPosition", &Visualizer::setCameraPosition, (bp::arg("self"), "position"))
78 .def("setCameraPose", setCameraPose_proxy, (bp::arg("self"), "pose"))
79 .def("setCameraPose", setCameraPose_proxy2, (bp::arg("self"), "pose"))
80 .def("setCameraZoom", &Visualizer::setCameraZoom, (bp::arg("self"), "value"))
81 .def("clean", &Visualizer::clean, bp::arg("self"))
82 .def("hasExternalData", &Visualizer::hasExternalData)
83 .DEF_PROP_PROXY(model)
84 .DEF_PROP_PROXY(visualModel)
85 .DEF_PROP_PROXY(collisionModel)
86 .DEF_PROP_PROXY(data)
87 .DEF_PROP_PROXY(visualData)
88 .DEF_PROP_PROXY(collisionData);
89#undef DEF_PROP_PROXY
90 }
91 };
92
93 } // namespace python
94} // namespace pinocchio
95
96#endif // #ifndef __pinocchio_python_extra_extras_hpp__
Main pinocchio namespace.
Definition treeview.dox:11