SECObjectRelations.cpp
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package MemoryX::
17 * @author Mirko Waechter ( mirko.waechter at kit dot edu)
18 * @date 2013
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #include "SECObjectRelations.h"
24 
26 
27 #include "../../segment/ObjectClassMemorySegment.h"
28 #include "SECRelation.h"
29 
30 namespace memoryx
31 {
32 
34  {
35  }
36 
37  armarx::VariantDataClassPtr
38  SECObjectRelations::clone(const Ice::Current&) const
39  {
41 
42  for (SECRelationList::const_iterator it = relations.begin(); it != relations.end(); it++)
43  {
44  result->relations.push_back(SECRelationBasePtr::dynamicCast((*it)->ice_clone()));
45  }
46 
47  return result;
48  }
49 
52  {
53  return clone();
54  }
55 
57  SECObjectRelations::contains(const SECObjectRelationsBasePtr& other, const Ice::Current&) const
58  {
59  float matchingRelationCount = 0;
60 
61  for (SECRelationList::const_iterator itOther = other->relations.begin();
62  itOther != other->relations.end();
63  itOther++)
64  {
65  bool foundMatch = false;
66  SECRelationBasePtr otherRel = *itOther;
67 
68  for (SECRelationList::const_iterator it = relations.begin(); it != relations.end();
69  it++)
70  {
71  if (otherRel->isEqual(*it))
72  {
73  foundMatch = true;
74  break;
75  }
76  }
77 
78  if (foundMatch)
79  {
80  matchingRelationCount++;
81  }
82  }
83 
84  return matchingRelationCount / (float)relations.size();
85  }
86 
87  bool
88  SECObjectRelations::containsRelation(const SECRelationBasePtr& relation,
89  const Ice::Current&) const
90  {
91  for (SECRelationList::const_iterator it = relations.begin(); it != relations.end(); it++)
92  {
93  if (relation->isEqual(*it))
94  {
95  return true;
96  }
97  }
98 
99  return false;
100  }
101 
102  Ice::Int
103  SECObjectRelations::addRelations(const SECRelationList& newRelations, const Ice::Current&)
104  {
105  int insertCount = 0;
106 
107  for (unsigned int i = 0; i < newRelations.size(); i++)
108  {
109  SECRelationBasePtr rel = containsRelationBetweenObjects(newRelations.at(i)->objects1,
110  newRelations.at(i)->objects2);
111 
112  // ARMARX_VERBOSE_S << "Adding relation: " << newRelations.at(i)->output();
113  if (rel)
114  {
115  rel->setName(newRelations.at(i)->getName());
116  }
117  else
118  {
119  relations.push_back(newRelations.at(i));
120  insertCount++;
121  }
122  }
123 
124  return insertCount;
125  }
126 
127  bool
128  SECObjectRelations::addRelation(const SECRelationBasePtr& newRelation, const Ice::Current& c)
129  {
130  SECRelationList list;
131  list.push_back(newRelation);
132  return (addRelations(list) != 0);
133  }
134 
135  SECRelationBasePtr
136  SECObjectRelations::containsRelationBetweenObjects(const ObjectClassList& objects1,
137  const ObjectClassList& objects2,
138  const Ice::Current&) const
139  {
140  SECRelation relation("", objects1, objects2);
141 
142  for (SECRelationList::const_iterator it = relations.begin(); it != relations.end(); it++)
143  {
144  if (relation.hasEqualObjects(*it))
145  {
146  return *it;
147  }
148  }
149 
150  return NULL;
151  }
152 
153  ObjectClassList
154  SECObjectRelations::getObjectsInRelation(const SECRelationBasePtr& relation,
155  ObjectClassBasePtr object1)
156  {
157 
158  ObjectClassList result;
159 
160  for (SECRelationList::const_iterator it = relations.begin(); it != relations.end(); it++)
161  {
162  if ((*it)->getName() == relation->getName() &&
163  ObjectClassMemorySegment::ListContainsObject((*it)->objects1, object1))
164  {
165  result.insert(result.end(), (*it)->objects2.begin(), (*it)->objects2.end());
166  }
167  }
168 
169  return result;
170  }
171 
172  bool
173  SECObjectRelations::isEqual(const SECObjectRelations& compareRelations) const
174  {
175  bool result = true;
176 
177  for (const SECRelationBasePtr& relation : compareRelations.relations)
178  {
179  result &= this->containsRelation(relation);
180  }
181 
182  return result;
183  }
184 
185  std::string
186  SECObjectRelations::output(const Ice::Current&) const
187  {
188  std::stringstream result;
189 
190  for (size_t i = 0; i < relations.size(); i++)
191  {
192  result << "#" << i << ": " << relations.at(i)->output() << "\n";
193  }
194 
195  return result.str();
196  }
197 
198  Ice::Int
199  SECObjectRelations::getType(const Ice::Current&) const
200  {
202  }
203 
204  bool
205  SECObjectRelations::validate(const Ice::Current&)
206  {
207  return true;
208  }
209 
210  void
211  SECObjectRelations::serialize(const armarx::ObjectSerializerBasePtr& serializer,
212  const Ice::Current&) const
213  {
215  armarx::AbstractObjectSerializerPtr::dynamicCast(serializer);
216  std::vector<armarx::VariantBasePtr> variants;
217 
218  for (unsigned int i = 0; i < relations.size(); i++)
219  {
220  armarx::VariantPtr var = new armarx::Variant(relations.at(i));
221  variants.push_back(var);
222  }
223 
224  obj->setVariantArray("relations", variants);
225  }
226 
227  void
228  SECObjectRelations::deserialize(const armarx::ObjectSerializerBasePtr& serializer,
229  const Ice::Current&)
230  {
232  armarx::AbstractObjectSerializerPtr::dynamicCast(serializer);
233  std::vector<armarx::VariantPtr> variants;
234 
235  obj->getVariantArray("relations", variants);
236  relations.resize(variants.size());
237 
238  for (unsigned int i = 0; i < variants.size(); i++)
239  {
240 
241  relations.at(i) = armarx::VariantPtr::dynamicCast(variants.at(i))->get<SECRelation>();
242  }
243  }
244 } // namespace memoryx
armarx::Variant
The Variant class is described here: Variants.
Definition: Variant.h:223
memoryx::SECObjectRelations::validate
bool validate(const Ice::Current &c=Ice::emptyCurrent) override
Definition: SECObjectRelations.cpp:205
armarx::VariantType::Float
const VariantTypeId Float
Definition: Variant.h:919
memoryx::VariantType::SECObjectRelations
const armarx::VariantTypeId SECObjectRelations
Definition: SECObjectRelations.h:29
SECObjectRelations.h
list
list(APPEND SOURCES ${QT_RESOURCES}) set(COMPONENT_LIBS ArmarXGui ArmarXCoreObservers ArmarXCoreEigen3Variants PlotterController $
Definition: CMakeLists.txt:49
AbstractObjectSerializer.h
memoryx
VirtualRobot headers.
Definition: CommonPlacesTester.cpp:48
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
memoryx::ObjectClassMemorySegment::ListContainsObject
static bool ListContainsObject(const ObjectClassList &objects, ObjectClassBasePtr object)
Definition: ObjectClassMemorySegment.h:253
memoryx::SECObjectRelations::deserialize
void deserialize(const armarx::ObjectSerializerBasePtr &serializer, const Ice::Current &c=Ice::emptyCurrent) override
Definition: SECObjectRelations.cpp:228
memoryx::SECObjectRelations::isEqual
bool isEqual(const SECObjectRelations &relations) const
Definition: SECObjectRelations.cpp:173
IceInternal::Handle
Definition: forward_declarations.h:8
memoryx::SECRelation::hasEqualObjects
bool hasEqualObjects(const SECRelationBasePtr &other, const Ice::Current &c=Ice::emptyCurrent) override
Definition: SECRelation.cpp:79
memoryx::SECObjectRelations::contains
Ice::Float contains(const SECObjectRelationsBasePtr &other, const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:57
memoryx::SECObjectRelations::ice_clone
Ice::ObjectPtr ice_clone() const override
Definition: SECObjectRelations.cpp:51
memoryx::SECObjectRelations::getObjectsInRelation
ObjectClassList getObjectsInRelation(const SECRelationBasePtr &relation, ObjectClassBasePtr object1)
Definition: SECObjectRelations.cpp:154
memoryx::SECObjectRelations::SECObjectRelations
SECObjectRelations()
Definition: SECObjectRelations.cpp:33
memoryx::SECObjectRelations::getType
Ice::Int getType(const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:199
memoryx::SECRelation
Definition: SECRelation.h:36
memoryx::SECObjectRelations
Definition: SECObjectRelations.h:35
memoryx::SECObjectRelations::clone
armarx::VariantDataClassPtr clone(const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:38
float
#define float
Definition: 16_Level.h:22
memoryx::SECObjectRelations::serialize
void serialize(const armarx::ObjectSerializerBasePtr &serializer, const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:211
armarx::VariantType::Int
const VariantTypeId Int
Definition: Variant.h:917
memoryx::SECObjectRelations::output
std::string output(const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:186
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
memoryx::SECObjectRelations::containsRelationBetweenObjects
SECRelationBasePtr containsRelationBetweenObjects(const ObjectClassList &objects1, const ObjectClassList &objects2, const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:136
memoryx::SECObjectRelations::addRelation
bool addRelation(const SECRelationBasePtr &newRelation, const Ice::Current &c=Ice::emptyCurrent) override
Definition: SECObjectRelations.cpp:128
memoryx::SECObjectRelations::containsRelation
bool containsRelation(const SECRelationBasePtr &relation, const Ice::Current &c=Ice::emptyCurrent) const override
Definition: SECObjectRelations.cpp:88
memoryx::SECObjectRelations::addRelations
Ice::Int addRelations(const SECRelationList &newRelations, const Ice::Current &c=Ice::emptyCurrent) override
Definition: SECObjectRelations.cpp:103
SECRelation.h