VisualObject.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2023 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 
30 {
31  public:
33  World* parent, bool insertCustomVizIntoViz = true,
34  bool insertCustomVizIntoPhysical = true);
35 
36  virtual ~VisualObject();
37 
42  virtual void guiUpdate(
43  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
44  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical);
45 
46  World* parent() { return world_; }
47  const World* parent() const { return world_; }
48 
49  void customVisualVisible(const bool visible);
50  bool customVisualVisible() const;
51 
54  const std::optional<Shape2p5>& collisionShape() const
55  {
56  return collisionShape_;
57  }
58 
59  void showCollisionShape(bool show);
60 
61  static void FreeOpenGLResources();
62 
64  static double GeometryEpsilon;
65 
66  protected:
68  bool parseVisual(const rapidxml::xml_node<char>& rootNode);
69  bool parseVisual(const JointXMLnode<>& rootNode);
70 
72 
75  std::shared_ptr<mrpt::opengl::CSetOfObjects> glCustomVisual_;
76  std::shared_ptr<mrpt::opengl::CSetOfObjects> glCollision_;
77  int32_t glCustomVisualId_ = -1;
78 
79  const bool insertCustomVizIntoViz_ = true;
80  const bool insertCustomVizIntoPhysical_ = true;
81 
82  virtual void internalGuiUpdate(
83  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
84  const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
85  bool childrenOnly = false) = 0;
86 
88  const mrpt::opengl::CRenderizable::Ptr& glModel,
89  const mrpt::poses::CPose3D& modelPose = {},
90  const float modelScale = 1.0f, const std::string& modelName = "group",
91  const std::optional<std::string>& modelURI = std::nullopt,
92  const bool initialShowBoundingBox = false);
93 
94  void setCollisionShape(const Shape2p5& cs) { collisionShape_ = cs; }
95 
96  private:
97  std::optional<Shape2p5> collisionShape_;
98 
100  bool implParseVisual(const rapidxml::xml_node<char>& visual_node);
101 };
102 } // namespace mvsim
static double GeometryEpsilon
Definition: VisualObject.h:64
virtual void guiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical)
const bool insertCustomVizIntoPhysical_
Definition: VisualObject.h:80
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly=false)=0
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCustomVisual_
Definition: VisualObject.h:75
virtual ~VisualObject()
static void FreeOpenGLResources()
std::optional< Shape2p5 > collisionShape_
Definition: VisualObject.h:97
void showCollisionShape(bool show)
void setCollisionShape(const Shape2p5 &cs)
Definition: VisualObject.h:94
const bool insertCustomVizIntoViz_
Definition: VisualObject.h:79
VisualObject(World *parent, bool insertCustomVizIntoViz=true, bool insertCustomVizIntoPhysical=true)
bool customVisualVisible() const
int32_t glCustomVisualId_
Definition: VisualObject.h:77
const std::optional< Shape2p5 > & collisionShape() const
Definition: VisualObject.h:54
bool parseVisual(const rapidxml::xml_node< char > &rootNode)
Returns true if there is at least one <visual>...</visual> entry.
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)
bool implParseVisual(const rapidxml::xml_node< char > &visual_node)
Called by parseVisual once per "visual" block.
std::shared_ptr< mrpt::opengl::CSetOfObjects > glCollision_
Definition: VisualObject.h:76
const World * parent() const
Definition: VisualObject.h:47


mvsim
Author(s):
autogenerated on Tue Jul 4 2023 03:08:21