Program Listing for File base-visualizer.hpp
↰ Return to documentation for file (include/pinocchio/visualizers/base-visualizer.hpp)
//
// Copyright (c) 2024-2025 INRIA
//
#ifndef __pinocchio_extra_base_visualizer_hpp__
#define __pinocchio_extra_base_visualizer_hpp__
#include "pinocchio/macros.hpp"
#include "pinocchio/visualizers/config.hpp"
#include "pinocchio/multibody/data.hpp"
#include "pinocchio/multibody/geometry.hpp"
#include <boost/optional.hpp>
#include <utility>
namespace pinocchio
{
namespace visualizers
{
typedef PINOCCHIO_SCALAR_TYPE_DEFAULT Scalar;
PINOCCHIO_COMMON_TYPEDEF(PINOCCHIO_SCALAR_TYPE_DEFAULT, PINOCCHIO_OPTIONS_DEFAULT)
typedef Eigen::Ref<const VectorXs> ConstVectorRef;
typedef Eigen::Ref<const MatrixXs> ConstMatrixRef;
class PINOCCHIO_VISUALIZERS_DLLAPI BaseVisualizer
{
public:
typedef SE3::Matrix4 Matrix4;
BaseVisualizer(
const Model & model,
const GeometryModel & visual_model,
const GeometryModel * collision_model,
Data & data,
GeometryData & visual_data,
GeometryData * collision_data);
BaseVisualizer(
const Model & model,
const GeometryModel & visual_model,
const GeometryModel * collision_model = nullptr);
virtual ~BaseVisualizer();
virtual void initViewer()
{
}
virtual void loadViewerModel() = 0;
virtual void rebuildData();
virtual void display(const boost::optional<ConstVectorRef> & q = boost::none);
template<typename D>
void display(const Eigen::MatrixBase<D> & q)
{
boost::optional<ConstVectorRef> q_(q);
display(q_);
}
virtual void play(const std::vector<ConstVectorRef> & qs, Scalar dt);
void play(const ConstMatrixRef & qs, Scalar dt);
virtual bool forceRedraw()
{
return true;
}
virtual void setCameraTarget(const Eigen::Ref<const Vector3> & /*target*/)
{
}
virtual void setCameraPosition(const Eigen::Ref<const Vector3> & /*position*/)
{
}
virtual void setCameraPose(const Eigen::Ref<const Matrix4> & /*pose*/)
{
}
inline void setCameraPose(const SE3 & pose)
{
this->setCameraPose(pose.toHomogeneousMatrix());
}
virtual void setCameraZoom(Scalar /*value*/)
{
}
virtual void enableCameraControl(bool)
{
}
virtual void clean()
{
}
const Model & model() const
{
return m_model;
}
const GeometryModel & visualModel() const
{
return *m_visualModel;
}
const GeometryModel & collisionModel() const
{
PINOCCHIO_THROW(
hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
return *m_collisionModel;
}
bool hasCollisionModel() const
{
return m_collisionModel != nullptr;
}
bool hasExternalData() const
{
return !m_ownedData;
}
Data & data()
{
return *m_data;
}
const Data & data() const
{
return *m_data;
}
GeometryData & visualData()
{
return *m_visualData;
}
const GeometryData & visualData() const
{
return *m_visualData;
}
GeometryData & collisionData()
{
PINOCCHIO_THROW(
hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
return *m_collisionData;
}
const GeometryData & collisionData() const
{
PINOCCHIO_THROW(
hasCollisionModel(), std::logic_error, "No collision model in the visualizer.");
return *m_collisionData;
}
protected:
std::reference_wrapper<Model const> m_model;
GeometryModel const * m_visualModel;
GeometryModel const * m_collisionModel;
Data * m_data;
GeometryData * m_visualData;
GeometryData * m_collisionData;
bool m_ownedData;
virtual void displayPrecall()
{
}
virtual void displayImpl() = 0;
void destroyData();
};
} // namespace visualizers
} // namespace pinocchio
#endif // ifndef __pinocchio_extra_base_visualizer_hxx__