ARGoS  3
A parallel, multi-engine simulator for swarm robotics
positional_index.h
Go to the documentation of this file.
1 #ifndef POSITIONAL_INDEX_H
2 #define POSITIONAL_INDEX_H
3 
4 namespace argos {
5  class CVector2;
6  class CVector3;
7  class CRay3;
8 }
9 
10 #include <argos3/core/utility/configuration/base_configurable_resource.h>
11 #include <argos3/core/utility/datatypes/datatypes.h>
12 #include <argos3/core/utility/datatypes/set.h>
13 #include <argos3/core/utility/math/vector2.h>
14 #include <argos3/core/utility/math/vector3.h>
15 
16 #include <string>
17 
18 namespace argos {
19 
28  template<class ENTITY>
30 
31  public:
32 
59  class COperation {
60  public:
61  virtual ~COperation() {}
62  virtual bool operator()(ENTITY&) = 0;
63  };
64 
65  public:
66 
68  virtual ~CPositionalIndex() {}
69 
70  virtual void Init(TConfigurationNode& t_tree) = 0;
71  virtual void Reset() = 0;
72  virtual void Destroy() = 0;
73 
78  virtual void AddEntity(ENTITY& c_entity) = 0;
79 
84  virtual void RemoveEntity(ENTITY& c_entity) = 0;
85 
89  virtual void Update() = 0;
90 
96  virtual void GetEntitiesAt(CSet<ENTITY*>& c_entities,
97  const CVector3& c_position) const = 0;
98 
104  virtual void ForAllEntities(COperation& c_operation) = 0;
105 
113  virtual void ForEntitiesInSphereRange(const CVector3& c_center,
114  Real f_radius,
115  COperation& c_operation) = 0;
116 
125  virtual void ForEntitiesInBoxRange(const CVector3& c_center,
126  const CVector3& c_half_size,
127  COperation& c_operation) = 0;
128 
137  virtual void ForEntitiesInCircleRange(const CVector3& c_center,
138  Real f_radius,
139  COperation& c_operation) = 0;
140 
149  virtual void ForEntitiesInRectangleRange(const CVector3& c_center,
150  const CVector2& c_half_size,
151  COperation& c_operation) = 0;
152 
164  virtual void ForEntitiesAlongRay(const CRay3& c_ray,
165  COperation& c_operation,
166  bool b_stop_at_closest_match = false) = 0;
167 
168  };
169 
170 }
171 
172 #endif
argos::CBaseConfigurableResource
This class is the base of all XML-configurable ARGoS interface.
Definition: base_configurable_resource.h:23
argos
The namespace containing all the ARGoS related code.
Definition: ci_actuator.h:12
argos::CVector3
A 3D vector class.
Definition: vector3.h:29
argos::CPositionalIndex::COperation
The operation to perform on each entity found in range.
Definition: positional_index.h:59
argos::CPositionalIndex::Reset
virtual void Reset()=0
Resets the resource.
argos::CRay3
Definition: ray3.h:19
argos::TConfigurationNode
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
Definition: argos_configuration.h:27
argos::CPositionalIndex::Destroy
virtual void Destroy()=0
Undoes whatever was done by Init().
argos::CPositionalIndex::ForEntitiesInSphereRange
virtual void ForEntitiesInSphereRange(const CVector3 &c_center, Real f_radius, COperation &c_operation)=0
Executes an operation on all entities within the specified sphere range.
argos::CPositionalIndex::~CPositionalIndex
virtual ~CPositionalIndex()
Definition: positional_index.h:68
argos::CPositionalIndex::CPositionalIndex
CPositionalIndex()
Definition: positional_index.h:67
argos::CPositionalIndex::COperation::~COperation
virtual ~COperation()
Definition: positional_index.h:61
argos::CPositionalIndex::Init
virtual void Init(TConfigurationNode &t_tree)=0
Initializes the resource.
argos::CPositionalIndex::GetEntitiesAt
virtual void GetEntitiesAt(CSet< ENTITY * > &c_entities, const CVector3 &c_position) const =0
Puts the entities located at the given point in the passed buffer.
argos::CVector2
A 2D vector class.
Definition: vector2.h:25
argos::CPositionalIndex::ForEntitiesInRectangleRange
virtual void ForEntitiesInRectangleRange(const CVector3 &c_center, const CVector2 &c_half_size, COperation &c_operation)=0
Executes an operation on all entities within the specified rectangle range.
argos::CPositionalIndex::COperation::operator()
virtual bool operator()(ENTITY &)=0
argos::CPositionalIndex::ForEntitiesInCircleRange
virtual void ForEntitiesInCircleRange(const CVector3 &c_center, Real f_radius, COperation &c_operation)=0
Executes an operation on all entities within the specified circle range.
argos::CPositionalIndex::Update
virtual void Update()=0
Updates this positional index.
argos::CPositionalIndex
A data structure that contains positional entities.
Definition: positional_index.h:29
argos::CPositionalIndex::RemoveEntity
virtual void RemoveEntity(ENTITY &c_entity)=0
Removes an entity from this index.
argos::CPositionalIndex::ForAllEntities
virtual void ForAllEntities(COperation &c_operation)=0
Executes an operation on all the indexed entities.
Real
float Real
Collects all ARGoS code.
Definition: datatypes.h:39
argos::CSet< ENTITY * >
argos::CPositionalIndex::ForEntitiesAlongRay
virtual void ForEntitiesAlongRay(const CRay3 &c_ray, COperation &c_operation, bool b_stop_at_closest_match=false)=0
Executes an operation on all entities that intersect the given ray.
argos::CPositionalIndex::AddEntity
virtual void AddEntity(ENTITY &c_entity)=0
Adds an entity to this index.
argos::CPositionalIndex::ForEntitiesInBoxRange
virtual void ForEntitiesInBoxRange(const CVector3 &c_center, const CVector3 &c_half_size, COperation &c_operation)=0
Executes an operation on all entities within the specified box range.