VisualObject.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2024 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <mrpt/core/optional_ref.h>
13 #include <mrpt/math/TBoundingBox.h>
14 #include <mrpt/opengl/COpenGLScene.h>
15 #include <mrpt/opengl/opengl_frwds.h>
16 #include <mrpt/poses/CPose3D.h>
17 #include <mvsim/Shape2p5.h>
18 #include <mvsim/basic_types.h>
19 
20 #include <cstdint>
21 #include <memory>
22 
23 namespace mvsim
24 {
25 class World;
26 
36 {
37  public:
39  World* parent, bool insertCustomVizIntoViz = true, bool insertCustomVizIntoPhysical = true);
40 
41  virtual ~VisualObject();
42 
47  virtual void guiUpdate(
48  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
49  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical);
50 
51  World* parent() { return world_; }
52  const World* parent() const { return world_; }
53 
54  void customVisualVisible(const bool visible);
55  bool customVisualVisible() const;
56 
59  const std::optional<Shape2p5>& collisionShape() const { return collisionShape_; }
60 
61  void showCollisionShape(bool show);
62 
63  static void FreeOpenGLResources();
64 
66  static double GeometryEpsilon;
67 
68  protected:
70  bool parseVisual(const rapidxml::xml_node<char>& rootNode);
71  bool parseVisual(const JointXMLnode<>& rootNode);
72 
74 
77  std::shared_ptr<mrpt::opengl::CSetOfObjects> glCustomVisual_;
78  std::shared_ptr<mrpt::opengl::CSetOfObjects> glCollision_;
79  int32_t glCustomVisualId_ = -1;
80 
81  const bool insertCustomVizIntoViz_ = true;
82  const bool insertCustomVizIntoPhysical_ = true;
83 
84  virtual void internalGuiUpdate(
85  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
86  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
87  bool childrenOnly = false) = 0;
88 
90  const mrpt::opengl::CRenderizable::Ptr& glModel, const mrpt::poses::CPose3D& modelPose = {},
91  const float modelScale = 1.0f, const std::string& modelName = "group",
92  const std::optional<std::string>& modelURI = std::nullopt,
93  const bool initialShowBoundingBox = false);
94 
95  void setCollisionShape(const Shape2p5& cs) { collisionShape_ = cs; }
96 
97  private:
98  std::optional<Shape2p5> collisionShape_;
99 
101  bool implParseVisual(const rapidxml::xml_node<char>& visual_node);
102 };
103 } // namespace mvsim
mvsim::VisualObject::parent
World * parent()
Definition: VisualObject.h:51
mvsim
Definition: Client.h:21
mvsim::VisualObject::insertCustomVizIntoPhysical_
const bool insertCustomVizIntoPhysical_
Definition: VisualObject.h:82
mvsim::VisualObject::world_
World * world_
Definition: VisualObject.h:73
mvsim::VisualObject::glCustomVisualId_
int32_t glCustomVisualId_
Definition: VisualObject.h:79
mvsim::JointXMLnode
Definition: basic_types.h:53
basic_types.h
mvsim::VisualObject::FreeOpenGLResources
static void FreeOpenGLResources()
Definition: VisualObject.cpp:153
mvsim::VisualObject::collisionShape_
std::optional< Shape2p5 > collisionShape_
Definition: VisualObject.h:98
mvsim::VisualObject::addCustomVisualization
void addCustomVisualization(const mrpt::opengl::CRenderizable::Ptr &glModel, const mrpt::poses::CPose3D &modelPose={}, const float modelScale=1.0f, const std::string &modelName="group", const std::optional< std::string > &modelURI=std::nullopt, const bool initialShowBoundingBox=false)
Definition: VisualObject.cpp:262
mvsim::VisualObject::implParseVisual
bool implParseVisual(const rapidxml::xml_node< char > &visual_node)
Called by parseVisual once per "visual" block.
Definition: VisualObject.cpp:185
mvsim::VisualObject::insertCustomVizIntoViz_
const bool insertCustomVizIntoViz_
Definition: VisualObject.h:81
mvsim::VisualObject::setCollisionShape
void setCollisionShape(const Shape2p5 &cs)
Definition: VisualObject.h:95
mvsim::VisualObject::guiUpdate
virtual void guiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical)
Definition: VisualObject.cpp:44
mvsim::VisualObject::VisualObject
VisualObject(World *parent, bool insertCustomVizIntoViz=true, bool insertCustomVizIntoPhysical=true)
Definition: VisualObject.cpp:32
mvsim::Shape2p5
Definition: Shape2p5.h:31
Shape2p5.h
mvsim::VisualObject::showCollisionShape
void showCollisionShape(bool show)
Definition: VisualObject.cpp:244
mvsim::VisualObject::GeometryEpsilon
static double GeometryEpsilon
Definition: VisualObject.h:66
mvsim::World
Definition: World.h:82
mvsim::VisualObject::collisionShape
const std::optional< Shape2p5 > & collisionShape() const
Definition: VisualObject.h:59
rapidxml::xml_node< char >
mvsim::VisualObject::parent
const World * parent() const
Definition: VisualObject.h:52
mvsim::VisualObject::~VisualObject
virtual ~VisualObject()
mvsim::VisualObject::glCollision_
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCollision_
Definition: VisualObject.h:78
mvsim::VisualObject::parseVisual
bool parseVisual(const rapidxml::xml_node< char > &rootNode)
Returns true if there is at least one <visual>...</visual> entry.
Definition: VisualObject.cpp:155
mvsim::VisualObject::internalGuiUpdate
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly=false)=0
mvsim::VisualObject::glCustomVisual_
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCustomVisual_
Definition: VisualObject.h:77
mvsim::VisualObject
Definition: VisualObject.h:35
mvsim::VisualObject::customVisualVisible
bool customVisualVisible() const
Definition: VisualObject.cpp:257


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08