pinocchio  3.7.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
 
Loading...
Searching...
No Matches
base-visualizer.hpp
1//
2// Copyright (c) 2024-2025 INRIA
3//
4
5#ifndef __pinocchio_extra_base_visualizer_hpp__
6#define __pinocchio_extra_base_visualizer_hpp__
7
8#include "pinocchio/macros.hpp"
9#include "pinocchio/visualizers/config.hpp"
10#include "pinocchio/multibody/data.hpp"
11#include "pinocchio/multibody/geometry.hpp"
12
13#include <boost/optional.hpp>
14#include <utility>
15
16namespace pinocchio
17{
18 namespace visualizers
19 {
20 typedef PINOCCHIO_SCALAR_TYPE_DEFAULT Scalar;
21 PINOCCHIO_COMMON_TYPEDEF(PINOCCHIO_SCALAR_TYPE_DEFAULT, PINOCCHIO_OPTIONS_DEFAULT)
22
23 typedef Eigen::Ref<const VectorXs> ConstVectorRef;
24 typedef Eigen::Ref<const MatrixXs> ConstMatrixRef;
25
34 class PINOCCHIO_VISUALIZERS_DLLAPI BaseVisualizer
35 {
36 public:
37 typedef SE3::Matrix4 Matrix4;
38
54 const Model & model,
57 Data & data,
60
68 const Model & model,
70 const GeometryModel * collision_model = nullptr);
71
72 virtual ~BaseVisualizer();
73
75 virtual void initViewer()
76 {
77 }
78
80 virtual void loadViewerModel() = 0;
81
83 virtual void rebuildData();
84
87 virtual void display(const boost::optional<ConstVectorRef> & q = boost::none);
88
90 template<typename D>
91 void display(const Eigen::MatrixBase<D> & q)
92 {
93 boost::optional<ConstVectorRef> q_(q);
94 display(q_);
95 }
96
99 virtual void play(const std::vector<ConstVectorRef> & qs, Scalar dt);
100
101 void play(const ConstMatrixRef & qs, Scalar dt);
102
105 virtual bool forceRedraw()
106 {
107 return true;
108 }
109
111 virtual void setCameraTarget(const Eigen::Ref<const Vector3> & /*target*/)
112 {
113 }
114
116 virtual void setCameraPosition(const Eigen::Ref<const Vector3> & /*position*/)
117 {
118 }
119
121 virtual void setCameraPose(const Eigen::Ref<const Matrix4> & /*pose*/)
122 {
123 }
124
126 inline void setCameraPose(const SE3 & pose)
127 {
128 this->setCameraPose(pose.toHomogeneousMatrix());
129 }
130
133 virtual void setCameraZoom(Scalar /*value*/)
134 {
135 }
136
138 virtual void enableCameraControl(bool)
139 {
140 }
141
143 virtual void clean()
144 {
145 }
146
147 const Model & model() const
148 {
149 return m_model;
150 }
151
152 const GeometryModel & visualModel() const
153 {
154 return *m_visualModel;
155 }
156
157 const GeometryModel & collisionModel() const
158 {
159 PINOCCHIO_THROW(
160 hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
161 return *m_collisionModel;
162 }
163
164 bool hasCollisionModel() const
165 {
166 return m_collisionModel != nullptr;
167 }
168
170 bool hasExternalData() const
171 {
172 return !m_ownedData;
173 }
174
175 Data & data()
176 {
177 return *m_data;
178 }
179 const Data & data() const
180 {
181 return *m_data;
182 }
183
184 GeometryData & visualData()
185 {
186 return *m_visualData;
187 }
188 const GeometryData & visualData() const
189 {
190 return *m_visualData;
191 }
192
193 GeometryData & collisionData()
194 {
195 PINOCCHIO_THROW(
196 hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
197 return *m_collisionData;
198 }
199
200 const GeometryData & collisionData() const
201 {
202 PINOCCHIO_THROW(
203 hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
204 return *m_collisionData;
205 }
206
207 protected:
208 std::reference_wrapper<Model const> m_model;
209 GeometryModel const * m_visualModel;
210 GeometryModel const * m_collisionModel;
211
212 Data * m_data;
213 GeometryData * m_visualData;
214 GeometryData * m_collisionData;
215 bool m_ownedData;
216
218 virtual void displayPrecall()
219 {
220 }
221 virtual void displayImpl() = 0;
222
223 void destroyData();
224 };
225 } // namespace visualizers
226} // namespace pinocchio
227
228#endif // ifndef __pinocchio_extra_base_visualizer_hxx__
A base class for defining visualizers for Pinocchio in C++. This provides basic building blocks (a ba...
virtual void clean()
Delete all objects from the scene.
virtual void displayPrecall()
This method is called at the beginning of display().
virtual void initViewer()
Initialize the viewer.
virtual void setCameraTarget(const Eigen::Ref< const Vector3 > &)
Set the active camera target.
virtual void setCameraZoom(Scalar)
Set camera zoom level; what this means depends on the implementation (FOV zoom or moving forwards).
void setCameraPose(const SE3 &pose)
Set the active camera 6D pose.
BaseVisualizer(const Model &model, const GeometryModel &visual_model, const GeometryModel *collision_model=nullptr)
Class constructor which will create internally-managed data objects.
void display(const Eigen::MatrixBase< D > &q)
virtual void rebuildData()
Re-build data objects. Required if the models were modified.
virtual void setCameraPose(const Eigen::Ref< const Matrix4 > &)
Set the active camera 6D pose.
BaseVisualizer(const Model &model, const GeometryModel &visual_model, const GeometryModel *collision_model, Data &data, GeometryData &visual_data, GeometryData *collision_data)
Class constructor for borrowing external data.
virtual void play(const std::vector< ConstVectorRef > &qs, Scalar dt)
Play an entire trajectory, waiting for time dt between each keyframe.
virtual void setCameraPosition(const Eigen::Ref< const Vector3 > &)
Set the active camera position.
virtual bool forceRedraw()
Override this in child class when the scene has to be redrawn. Useful for play().
virtual void enableCameraControl(bool)
Enable/disable controlling the camera from keyboard and mouse.
bool hasExternalData() const
Whether the internal data pointers are borrowed (external), or owned.
virtual void loadViewerModel()=0
Load the Pinocchio model.
virtual void display(const boost::optional< ConstVectorRef > &q=boost::none)
Display configuration q (if an actual value is given) or update the Pinocchio frames.
Main pinocchio namespace.
Definition treeview.dox:11