tag_medium.cpp
Go to the documentation of this file.
1 
7 #include "tag_medium.h"
8 #include <argos3/core/simulator/simulator.h>
9 #include <argos3/core/simulator/space/space.h>
10 #include <argos3/core/simulator/space/positional_indices/grid.h>
11 #include <argos3/core/utility/configuration/argos_exception.h>
12 #include <argos3/core/utility/logging/argos_log.h>
13 
14 namespace argos {
15 
16  /****************************************/
17  /****************************************/
18 
20  try {
21  CMedium::Init(t_tree);
22  /* Get the positional index method */
23  std::string strPosIndexMethod("grid");
24  GetNodeAttributeOrDefault(t_tree, "index", strPosIndexMethod, strPosIndexMethod);
25  /* Get the arena center and size */
26  CVector3 cArenaCenter;
27  CVector3 cArenaSize;
28  TConfigurationNode& tArena = GetNode(CSimulator::GetInstance().GetConfigurationRoot(), "arena");
29  GetNodeAttribute(tArena, "size", cArenaSize);
30  GetNodeAttributeOrDefault(tArena, "center", cArenaCenter, cArenaCenter);
31  /* Create the positional index for tag entities */
32  if(strPosIndexMethod == "grid") {
33  size_t punGridSize[3];
34  if(!NodeAttributeExists(t_tree, "grid_size")) {
35  punGridSize[0] = static_cast<size_t>(cArenaSize.GetX());
36  punGridSize[1] = static_cast<size_t>(cArenaSize.GetY());
37  punGridSize[2] = static_cast<size_t>(cArenaSize.GetZ());
38  }
39  else {
40  std::string strPosGridSize;
41  GetNodeAttribute(t_tree, "grid_size", strPosGridSize);
42  ParseValues<size_t>(strPosGridSize, 3, punGridSize, ',');
43  }
45  cArenaCenter - cArenaSize * 0.5f, cArenaCenter + cArenaSize * 0.5f,
46  punGridSize[0], punGridSize[1], punGridSize[2]);
47  m_pcTagEntityGridUpdateOperation = new CTagEntityGridUpdater(*pcGrid);
48  pcGrid->SetUpdateEntityOperation(m_pcTagEntityGridUpdateOperation);
49  m_pcTagEntityIndex = pcGrid;
50  }
51  else {
52  THROW_ARGOSEXCEPTION("Unknown method \"" << strPosIndexMethod << "\" for the positional index.");
53  }
54  }
55  catch(CARGoSException& ex) {
56  THROW_ARGOSEXCEPTION_NESTED("Error in initialization of the tag medium", ex);
57  }
58  }
59 
60  /****************************************/
61  /****************************************/
62 
64  Update();
65  }
66 
67  /****************************************/
68  /****************************************/
69 
71  m_pcTagEntityIndex->Reset();
72  }
73 
74  /****************************************/
75  /****************************************/
76 
78  delete m_pcTagEntityIndex;
79  if(m_pcTagEntityGridUpdateOperation != nullptr) {
80  delete m_pcTagEntityGridUpdateOperation;
81  }
82  }
83 
84  /****************************************/
85  /****************************************/
86 
88  m_pcTagEntityIndex->Update();
89  }
90 
91  /****************************************/
92  /****************************************/
93 
95  m_pcTagEntityIndex->AddEntity(c_entity);
96  m_pcTagEntityIndex->Update();
97  }
98 
99  /****************************************/
100  /****************************************/
101 
103  m_pcTagEntityIndex->RemoveEntity(c_entity);
104  m_pcTagEntityIndex->Update();
105  }
106 
107  /****************************************/
108  /****************************************/
109 
111  "tag",
112  "Michael Allwright [allsey87@gmail.com]",
113  "1.0",
114  "Manages tag entities.",
115  "This medium is required to manage the tag entities, so that the\n"
116  "associated camera sensors can find them. If you use a camera sensor, you\n"
117  "must add this medium the sensors XML configuration.\n\n"
118  "REQUIRED XML CONFIGURATION\n\n"
119  "<tag id=\"qrcodes\" />\n\n"
120  "OPTIONAL XML CONFIGURATION\n\n"
121  "None for the time being\n",
122  "Under development"
123  );
124 
125  /****************************************/
126  /****************************************/
127 
128 }
#define THROW_ARGOSEXCEPTION_NESTED(message, nested)
This macro throws an ARGoS exception with the passed message and nesting the passed exception.
#define THROW_ARGOSEXCEPTION(message)
This macro throws an ARGoS exception with the passed message.
The namespace containing all the ARGoS related code.
Definition: ci_actuator.h:12
REGISTER_MEDIUM(CDirectionalLEDMedium, "directional_led", "Michael Allwright [allsey87@gmail.com]", "1.0", "Manages directional LED entities.", "This medium is required to manage the directional LED entities, so that\n" "the associated camera sensors can find them. If you use a camera sensor,\n" "you must add this medium the sensors XML configuration.\n\n" "REQUIRED XML CONFIGURATION\n\n" "<directional_led id=\"led\" />\n\n" "OPTIONAL XML CONFIGURATION\n\n" "None for the time being\n", "Under development")
TConfigurationNode & GetNode(TConfigurationNode &t_node, const std::string &str_tag)
Given a tree root node, returns the first of its child nodes with the wanted name.
bool NodeAttributeExists(TConfigurationNode &t_node, const std::string &str_attribute)
Returns true if the specified attribute of a node exists.
void GetNodeAttributeOrDefault(TConfigurationNode &t_node, const std::string &str_attribute, T &t_buffer, const T &t_default)
Returns the value of a node's attribute, or the passed default value.
ticpp::Element TConfigurationNode
The ARGoS configuration XML node.
void GetNodeAttribute(TConfigurationNode &t_node, const std::string &str_attribute, T &t_buffer)
Returns the value of a node's attribute.
virtual void Init(TConfigurationNode &t_tree)
Initialized the medium.
Definition: medium.cpp:16
static CSimulator & GetInstance()
Returns the instance to the CSimulator class.
Definition: simulator.cpp:78
void SetUpdateEntityOperation(CEntityOperation *pc_operation)
Definition: grid_impl.h:907
The exception that wraps all errors in ARGoS.
A 3D vector class.
Definition: vector3.h:31
Real GetX() const
Returns the x coordinate of this vector.
Definition: vector3.h:105
Real GetY() const
Returns the y coordinate of this vector.
Definition: vector3.h:121
Real GetZ() const
Returns the z coordinate of this vector.
Definition: vector3.h:137
virtual void Destroy()
Undoes whatever was done by Init().
Definition: tag_medium.cpp:77
void AddEntity(CTagEntity &c_entity)
Adds the specified entity to the list of managed entities.
Definition: tag_medium.cpp:94
virtual void Reset()
Resets the resource.
Definition: tag_medium.cpp:70
virtual void Update()
Updates the state of this medium.
Definition: tag_medium.cpp:87
void RemoveEntity(CTagEntity &c_entity)
Removes the specified entity from the list of managed entities.
Definition: tag_medium.cpp:102
virtual void PostSpaceInit()
Executes extra initialization activities after the space has been initialized.
Definition: tag_medium.cpp:63
virtual void Init(TConfigurationNode &t_tree)
Initialized the medium.
Definition: tag_medium.cpp:19