pinocchio  3.7.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
12namespace pinocchio
13{
14 namespace python
15 {
16 namespace bp = boost::python;
17
18 template<class Visualizer>
19 struct VisualizerPythonVisitor : bp::def_visitor<VisualizerPythonVisitor<Visualizer>>
20 {
22 typedef ::pinocchio::visualizers::ConstMatrixRef ConstMatrixRef;
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_proxy2(Visualizer & vis, const ConstMatrixRef & qs, context::Scalar dt)
38 {
39 vis.play(qs, dt);
40 }
41
42 template<class... PyArgs>
43 void visit(bp::class_<PyArgs...> & cl) const
44 {
45 using ::pinocchio::visualizers::ConstVectorRef;
46 eigenpy::OptionalConverter<ConstVectorRef, boost::optional>::registration();
47
48// convenience macro to use a lambda -- passing &Visualizer::<getter-fun> doesn't work
49#define DEF_PROP_PROXY(name) \
50 add_property( \
51 #name, \
52 bp::make_function( \
53 +[](Visualizer & v) -> auto & { return v.name(); }, bp::return_internal_reference<>()))
54
55 cl.def("initViewer", &Visualizer::initViewer)
56 .def("loadViewerModel", &Visualizer::loadViewerModel)
57 .def("rebuildData", &Visualizer::rebuildData)
58 .def(
59 "display", +[](Visualizer & v, const ConstVectorRef & q) { v.display(q); },
60 (bp::arg("self"), bp::arg("q") = boost::none))
61 .def("play", play_proxy2, (bp::arg("self"), "qs", "dt"))
62 .def("setCameraTarget", &Visualizer::setCameraTarget, (bp::arg("self"), "target"))
63 .def("setCameraPosition", &Visualizer::setCameraPosition, (bp::arg("self"), "position"))
64 .def("setCameraPose", setCameraPose_proxy, (bp::arg("self"), "pose"))
65 .def("setCameraPose", setCameraPose_proxy2, (bp::arg("self"), "pose"))
66 .def("setCameraZoom", &Visualizer::setCameraZoom, (bp::arg("self"), "value"))
67 .def("clean", &Visualizer::clean, bp::arg("self"))
68 .def("hasExternalData", &Visualizer::hasExternalData)
69 .DEF_PROP_PROXY(model)
70 .DEF_PROP_PROXY(visualModel)
71 .DEF_PROP_PROXY(collisionModel)
72 .DEF_PROP_PROXY(data)
73 .DEF_PROP_PROXY(visualData)
74 .DEF_PROP_PROXY(collisionData);
75#undef DEF_PROP_PROXY
76 }
77 };
78
79 } // namespace python
80} // namespace pinocchio
81
82#endif // #ifndef __pinocchio_python_extra_extras_hpp__
A base class for defining visualizers for Pinocchio in C++. This provides basic building blocks (a ba...
Main pinocchio namespace.
Definition treeview.dox:11