Base.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 
18 #ifndef GAZEBO_PHYSICS_BASE_HH_
19 #define GAZEBO_PHYSICS_BASE_HH_
20 
21 #include <boost/enable_shared_from_this.hpp>
22 #include <optional>
23 #include <string>
24 #include <vector>
25 
26 #include <sdf/sdf.hh>
27 
28 #include "gazebo/common/URI.hh"
30 #include "gazebo/util/system.hh"
31 
32 namespace gazebo
33 {
35  namespace physics
36  {
40 
42  static std::string EntityTypename[] = {
43  "common",
44  "entity",
45  "model",
46  "actor",
47  "link",
48  "collision",
49  "light",
50  "visual",
51  "joint",
52  "ball",
53  "hinge2",
54  "hinge",
55  "slider",
56  "universal",
57  "shape",
58  "box",
59  "cylinder",
60  "heightmap",
61  "map",
62  "multiray",
63  "ray",
64  "plane",
65  "sphere",
66  "trimesh",
67  "polyline"
68  };
69 
72  class GZ_PHYSICS_VISIBLE Base : public boost::enable_shared_from_this<Base>
73  {
76  public: enum EntityType {
78  BASE = 0x00000000,
80  ENTITY = 0x00000001,
82  MODEL = 0x00000002,
84  LINK = 0x00000004,
86  COLLISION = 0x00000008,
88  LIGHT = 0x00000010,
90  VISUAL = 0x00000020,
91 
93  JOINT = 0x00000040,
95  BALL_JOINT = 0x00000080,
97  HINGE2_JOINT = 0x00000100,
99  HINGE_JOINT = 0x00000200,
101  SLIDER_JOINT = 0x00000400,
103  SCREW_JOINT = 0x00000800,
105  UNIVERSAL_JOINT = 0x00001000,
107  GEARBOX_JOINT = 0x00002000,
109  FIXED_JOINT = 0x00004000,
110 
112  ACTOR = 0x00008000,
113 
115  SHAPE = 0x00010000,
117  BOX_SHAPE = 0x00020000,
119  CYLINDER_SHAPE = 0x00040000,
121  HEIGHTMAP_SHAPE = 0x00080000,
123  MAP_SHAPE = 0x00100000,
125  MULTIRAY_SHAPE = 0x00200000,
127  RAY_SHAPE = 0x00400000,
129  PLANE_SHAPE = 0x00800000,
131  SPHERE_SHAPE = 0x01000000,
133  MESH_SHAPE = 0x02000000,
135  POLYLINE_SHAPE = 0x04000000,
136 
138  SENSOR_COLLISION = 0x10000000
139  };
140 
143  public: explicit Base(BasePtr _parent);
144 
146  public: virtual ~Base();
147 
150  public: virtual void Load(sdf::ElementPtr _sdf);
151 
153  public: virtual void Fini();
154 
156  public: virtual void Init() {}
157 
159  public: virtual void Reset();
160 
163  public: virtual void Reset(Base::EntityType _resetType);
164 
166  public: virtual void Update() {}
167 
171  public: virtual void UpdateParameters(sdf::ElementPtr _sdf);
172 
175  public: virtual void SetName(const std::string &_name);
176 
179  public: std::string GetName() const;
180 
183  public: uint32_t GetId() const;
184 
188  public: void SetSaveable(bool _v);
189 
193  public: bool GetSaveable() const;
194 
197  public: int GetParentId() const;
198 
201  public: void SetParent(BasePtr _parent);
202 
205  public: BasePtr GetParent() const;
206 
209  public: void AddChild(BasePtr _child);
210 
213  public: virtual void RemoveChild(unsigned int _id);
214 
216  public: void RemoveChildren();
217 
220  public: unsigned int GetChildCount() const;
221 
227  public: BasePtr GetById(unsigned int _id) const;
229 
233  public: BasePtr GetByName(const std::string &_name);
234 
238  public: BasePtr GetChild(unsigned int _i) const;
239 
243  public: BasePtr GetChild(const std::string &_name);
244 
247  public: void RemoveChild(const std::string &_name);
248 
251  public: void RemoveChild(physics::BasePtr _child);
252 
256  public: void AddType(EntityType _type);
257 
262  public: bool HasType(const EntityType &_t) const;
263 
266  public: unsigned int GetType() const;
267 
270  public: std::string TypeStr() const;
271 
278  public: std::string GetScopedName(bool _prependWorldName = false) const;
279 
286  public: common::URI URI() const;
287 
290  public: void Print(const std::string &_prefix);
291 
295  public: virtual bool SetSelected(bool _show);
296 
299  public: bool IsSelected() const;
300 
305  public: bool operator ==(const Base &_ent) const;
306 
310  public: void SetWorld(const WorldPtr &_newWorld);
311 
314  public: const WorldPtr &GetWorld() const;
315 
318  public: virtual const sdf::ElementPtr GetSDF();
319 
323  public: virtual std::optional<sdf::SemanticPose> SDFSemanticPose() const;
324 
331  public: ignition::math::Pose3d SDFPoseRelativeToParent() const;
332 
334  protected: virtual void RegisterIntrospectionItems();
335 
337  protected: virtual void UnregisterIntrospectionItems();
338 
342  protected: void ComputeScopedName();
343 
345  protected: sdf::ElementPtr sdf;
346 
348  protected: BasePtr parent;
349 
351  protected: Base_V children;
352 
354  protected: WorldPtr world;
355 
357  protected: std::vector<common::URI> introspectionItems;
358 
360  private: bool saveable;
361 
363  private: uint32_t id;
364 
366  private: unsigned int type;
367 
369  private: std::string typeStr;
370 
372  private: bool selected;
373 
375  private: std::string name;
376 
378  private: std::string scopedName;
379 
380  protected: friend class Entity;
381  };
383  }
384 }
385 #endif
default namespace for gazebo
A complete URI.
Definition: URI.hh:177
Base class for most physics classes.
Definition: Base.hh:73
unsigned int GetType() const
Get the full type definition.
BasePtr parent
Parent of this entity.
Definition: Base.hh:348
virtual bool SetSelected(bool _show)
Set whether this entity has been selected by the user through the gui.
bool IsSelected() const
True if the entity is selected by the user.
virtual std::optional< sdf::SemanticPose > SDFSemanticPose() const
Get the SDF SemanticPose object associated with the pose of this object.
std::string GetScopedName(bool _prependWorldName=false) const
Return the name of this entity with the model scope model1::...::modelN::entityName.
std::vector< common::URI > introspectionItems
All the introspection items regsitered for this.
Definition: Base.hh:357
virtual void Fini()
Finialize the object.
BasePtr GetByName(const std::string &_name)
Get by name.
void AddType(EntityType _type)
Add a type specifier.
void Print(const std::string &_prefix)
Print this object to screen via gzmsg.
virtual void Init()
Initialize the object.
Definition: Base.hh:156
BasePtr GetChild(unsigned int _i) const
Get a child by index.
void AddChild(BasePtr _child)
Add a child to this entity.
virtual void Reset()
Reset the object.
Base_V children
Children of this entity.
Definition: Base.hh:351
Base(BasePtr _parent)
Constructor.
virtual void SetName(const std::string &_name)
Set the name of the entity.
virtual void RemoveChild(unsigned int _id)
Remove a child from this entity.
virtual const sdf::ElementPtr GetSDF()
Get the SDF values for the object.
void RemoveChild(const std::string &_name)
Remove a child by name.
bool HasType(const EntityType &_t) const
Returns true if this object's type definition has the given type.
common::URI URI() const
Return the common::URI of this entity.
void SetParent(BasePtr _parent)
Set the parent.
void SetWorld(const WorldPtr &_newWorld)
Set the world this object belongs to.
virtual void RegisterIntrospectionItems()
Register items in the introspection service.
unsigned int GetChildCount() const
Get the number of children.
const WorldPtr & GetWorld() const
Get the World this object is in.
std::string GetName() const
Return the name of the entity.
sdf::ElementPtr sdf
The SDF values for this object.
Definition: Base.hh:345
ignition::math::Pose3d SDFPoseRelativeToParent() const
Get the SDF pose of the object according to the sdf 1.6 convention.
void RemoveChildren()
Remove all children.
void SetSaveable(bool _v)
Set whether the object should be "saved", when the user selects to save the world to xml.
BasePtr GetChild(const std::string &_name)
Get a child by name.
virtual ~Base()
Destructor.
int GetParentId() const
Return the ID of the parent.
void ComputeScopedName()
Compute the scoped name of this object based on its parents.
WorldPtr world
Pointer to the world.
Definition: Base.hh:354
virtual void Load(sdf::ElementPtr _sdf)
Load.
virtual void UnregisterIntrospectionItems()
Unregister items in the introspection service.
uint32_t GetId() const
Return the ID of this entity.
virtual void UpdateParameters(sdf::ElementPtr _sdf)
Update the parameters using new sdf values.
EntityType
Unique identifiers for all entity types.
Definition: Base.hh:76
void RemoveChild(physics::BasePtr _child)
Remove a child by pointer.
std::string TypeStr() const
Get the string name for the entity type.
virtual void Reset(Base::EntityType _resetType)
Calls recursive Reset on one of the Base::EntityType's.
bool GetSaveable() const
Get whether the object should be "saved", when the user selects to save the world to xml.
BasePtr GetParent() const
Get the parent.
virtual void Update()
Update the object.
Definition: Base.hh:166
Base class for all physics objects in Gazebo.
Definition: Entity.hh:53
static std::string EntityTypename[]
String names for the different entity types.
Definition: Base.hh:42
std::vector< BasePtr > Base_V
Definition: PhysicsTypes.hh:202
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:78
boost::shared_ptr< World > WorldPtr
Definition: PhysicsTypes.hh:90
Forward declarations for the common classes.
Definition: Animation.hh:27