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
boost::shared_ptr< World > WorldPtr
Definition: PhysicsTypes.hh:90
Forward declarations for the common classes.
Definition: Animation.hh:26
static std::string EntityTypename[]
String names for the different entity types.
Definition: Base.hh:42
BasePtr parent
Parent of this entity.
Definition: Base.hh:348
virtual void Update()
Update the object.
Definition: Base.hh:166
default namespace for gazebo
A complete URI.
Definition: URI.hh:176
std::vector< common::URI > introspectionItems
All the introspection items regsitered for this.
Definition: Base.hh:357
Base class for most physics classes.
Definition: Base.hh:72
virtual void Init()
Initialize the object.
Definition: Base.hh:156
Base_V children
Children of this entity.
Definition: Base.hh:351
Base class for all physics objects in Gazebo.
Definition: Entity.hh:52
WorldPtr world
Pointer to the world.
Definition: Base.hh:354
std::vector< BasePtr > Base_V
Definition: PhysicsTypes.hh:202
EntityType
Unique identifiers for all entity types.
Definition: Base.hh:76
sdf::ElementPtr sdf
The SDF values for this object.
Definition: Base.hh:345
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:78