Tulip  5.7.0
Large graphs analysis and drawing
GlSimpleEntity.h
1 /*
2  *
3  * This file is part of Tulip (https://tulip.labri.fr)
4  *
5  * Authors: David Auber and the Tulip development Team
6  * from LaBRI, University of Bordeaux
7  *
8  * Tulip is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation, either version 3
11  * of the License, or (at your option) any later version.
12  *
13  * Tulip is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  */
19 
20 #ifndef Tulip_GLSIMPLEENTITY_H
21 #define Tulip_GLSIMPLEENTITY_H
22 
23 #include <vector>
24 
25 #include <tulip/GlEntity.h>
26 #include <tulip/Coord.h>
27 #include <tulip/GlSceneVisitor.h>
28 #include <tulip/BoundingBox.h>
29 
30 namespace tlp {
31 
32 class GlComposite;
33 class Camera;
34 
35 /**
36  * @ingroup OpenGL
37  * @brief Base class for all Tulip OpenGL entities
38  *
39  * Other Tulip entities inherit for this class.
40  *
41  * You don't have to create a GlSimpleEntity, you have to use GlLine, GlRect or GlSphere for example
42  * @see Gl2DRect
43  * @see GlPolygon
44  * @see GlAxis
45  * @see GlBezierCurve
46  * @see GlBox
47  * @see GlCatmullRomCurve
48  * @see GlCircle
49  * @see GlComplexPolygon
50  * @see GlGrid
51  * @see GlHexagon
52  * @see GlLabel
53  * @see GlSphere
54  * @see GlPentagon
55  * @see GlTriangle
56  * @see GlOpenUniformCubicBSpline
57  *
58  * To GlSimpleEntity manipulation :
59  * @see GlLayer
60  * @see GlScene
61  */
62 class TLP_GL_SCOPE GlSimpleEntity : public GlEntity {
63 
64 public:
65  /**
66  * @brief Constructor
67  */
68  GlSimpleEntity() : visible(true), stencil(0xFFFF) {}
69 
70  /**
71  * @brief Destructor
72  */
73  ~GlSimpleEntity() override;
74 
75  /**
76  * @brief Set if entity is visible
77  */
78  virtual void setVisible(bool visible);
79  /**
80  * @brief Return if entity is visible
81  */
82  bool isVisible() const {
83  return visible;
84  }
85  /**
86  * @brief Set stencil number of the entity
87  *
88  * Stencil is an OpenGl system to ensure that other entity can't be displayed above this entity;
89  * it's a "guaranteed visibility" system.
90  * A small number causes a guaranteed visibility
91  * Default value in Tulip is 0xFFFF (greater integer)
92  * And when we have stencil on entity value is 0x2
93  */
94  virtual void setStencil(int stencil) {
95  this->stencil = stencil;
96  }
97  /**
98  * @brief Return stencil number of entity
99  *
100  * @see setStencil()
101  */
102  int getStencil() {
103  return stencil;
104  }
105 
106  /**
107  * @brief Draw function
108  *
109  * @warning You don't have to call this function, the Tulip OpenGL engine call it.
110  */
111  virtual void draw(float lod, Camera *camera) = 0;
112 
113  /**
114  * @brief Return the entity boundingbox
115  *
116  * @warning You don't have to call this function, the Tulip OpenGL engine call it.
117  */
119  return boundingBox;
120  }
121 
122  /**
123  * @brief Save the entity in outString (in XML format)
124  *
125  * @warning You don't have to call this function, the Tulip OpenGL engine call it.
126  */
127  virtual void getXML(std::string &outString) = 0;
128 
129  /**
130  * @brief Load entity with inString (in XML format)
131  *
132  * @warning You don't have to call this function, the Tulip OpenGL engine call it.
133  */
134  virtual void setWithXML(const std::string &inString, unsigned int &currentPosition) = 0;
135 
136  ///@cond DOXYGEN_HIDDEN
137 
138  /**
139  * @brief Accept visitor function
140  */
141  void acceptVisitor(GlSceneVisitor *visitor) override {
142  visitor->visit(this);
143  }
144 
145  /**
146  * Add a parent to this entity
147  */
148  void addParent(GlComposite *composite);
149 
150  /**
151  * remove a parent to this entity
152  */
153  void removeParent(GlComposite *composite);
154 
155  /**
156  * virtual function : Translate entity of vector translation
157  */
158  virtual void translate(const Coord &) {}
159 
160  GlComposite *getParent() const {
161  if (parents.empty())
162  return nullptr;
163 
164  return parents[0];
165  }
166 
167  ///@endcond
168 
169 protected:
170  bool visible;
171  int stencil;
172 
173  BoundingBox boundingBox;
174 
175  std::vector<GlComposite *> parents;
176 };
177 } // namespace tlp
178 
179 #endif // Tulip_GLSIMPLEENTITY_H
tlp::GlSimpleEntity::GlSimpleEntity
GlSimpleEntity()
Constructor.
Definition: GlSimpleEntity.h:68
tlp::GlSimpleEntity::getBoundingBox
virtual BoundingBox getBoundingBox()
Return the entity boundingbox.
Definition: GlSimpleEntity.h:118
tlp::GlSimpleEntity
Base class for all Tulip OpenGL entities.
Definition: GlSimpleEntity.h:62
tlp::GlSimpleEntity::getStencil
int getStencil()
Return stencil number of entity.
Definition: GlSimpleEntity.h:102
tlp::BoundingBox
This class represents the 3D bounding box of an object. It is mostly used to determine whether or not...
Definition: BoundingBox.h:67
tlp
Definition: AbstractProperty.h:34
tlp::GlSimpleEntity::isVisible
bool isVisible() const
Return if entity is visible.
Definition: GlSimpleEntity.h:82
tlp::Camera
Tulip OpenGL camera object.
Definition: Camera.h:47
tlp::GlSimpleEntity::setStencil
virtual void setStencil(int stencil)
Set stencil number of the entity.
Definition: GlSimpleEntity.h:94