EnvironmentalPrimitive.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::Core
17* @author Peter Kaiser <peter dot kaiser at kit dot edu>
18* @date 2014
19* @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20* GNU General Public License
21*/
22
24
25#include <SimoxUtility/algorithm/string/string_tools.h>
26
29
31
32namespace memoryx
33{
35 const std::string& id,
36 const std::string& shape) :
37 Entity()
38 {
39 setName(name);
40 setId(id);
41 setShape(shape);
42 }
43
44 std::string
45 EnvironmentalPrimitive::getShape(const Ice::Current& c) const
46 {
47 return getAttributeValue("shape")->getString();
48 }
49
50 armarx::Vector3BasePtr
52 {
53 return getAttributeValue("dimensionsOBB")->getClass<armarx::Vector3Base>();
54 }
55
56 void
57 memoryx::EnvironmentalPrimitive::setOBBDimensions(const armarx::Vector3BasePtr& dimensions,
58 const Ice::Current&)
59 {
60 putAttribute("dimensionsOBB", dimensions);
61 }
62
63 armarx::FramedPoseBasePtr
65 {
66 return getAttributeValue("pose")->getClass<armarx::FramedPoseBase>();
67 }
68
69 void
70 memoryx::EnvironmentalPrimitive::setPose(const armarx::FramedPoseBasePtr& pose,
71 const Ice::Current&)
72 {
73 putAttribute("pose", pose);
74 }
75
76 PointList
78 {
79 auto entity = getAttribute("graspPoints");
80 if (!entity || entity->size() <= 0)
81 {
82 return PointList();
83 }
84
85 Eigen::MatrixXf m = armarx::VariantPtr::dynamicCast(entity->getValueAt(0))
86 ->getClass<armarx::MatrixFloat>()
87 ->toEigen();
88
89 PointList result;
90 result.reserve(m.cols());
91
92 for (unsigned int i = 0; i < m.cols(); i++)
93 {
94 result.push_back(new armarx::Vector3(Eigen::Vector3f(m.block<3, 1>(0, i))));
95 }
96
97 return result;
98 }
99
100 void
101 EnvironmentalPrimitive::setGraspPoints(const PointList& graspPoints, const Ice::Current& c)
102 {
103 Eigen::MatrixXf m(3, graspPoints.size());
104
105 for (unsigned int i = 0; i < graspPoints.size(); i++)
106 {
107 m.block<3, 1>(0, i) = armarx::Vector3Ptr::dynamicCast(graspPoints[i])->toEigen();
108 }
109
110 armarx::MatrixFloatBasePtr matrix(new armarx::MatrixFloat(m));
111
113 variant->set<armarx::MatrixFloat>(matrix);
114
115 EntityAttributeBasePtr entity = new EntityAttribute("graspPoints");
116 entity->addValue(variant);
117 putAttribute(entity);
118 }
119
120 PointList
122 {
123 auto entity = getAttribute("inliers");
124 if (!entity || entity->size() <= 0)
125 {
126 return PointList();
127 }
128
129 Eigen::MatrixXf m = armarx::VariantPtr::dynamicCast(entity->getValueAt(0))
130 ->getClass<armarx::MatrixFloat>()
131 ->toEigen();
132
133 PointList result;
134 result.reserve(m.cols());
135
136 for (unsigned int i = 0; i < m.cols(); i++)
137 {
138 result.push_back(new armarx::Vector3(Eigen::Vector3f(m.block<3, 1>(0, i))));
139 }
140
141 return result;
142 }
143
144 void
145 EnvironmentalPrimitive::setInliers(const PointList& inliers, const Ice::Current& c)
146 {
147 Eigen::MatrixXf m(3, inliers.size());
148
149 for (unsigned int i = 0; i < inliers.size(); i++)
150 {
151 m.block<3, 1>(0, i) = armarx::Vector3Ptr::dynamicCast(inliers[i])->toEigen();
152 }
153
154 armarx::MatrixFloatBasePtr matrix(new armarx::MatrixFloat(m));
155
157 variant->set<armarx::MatrixFloat>(matrix);
158
159 EntityAttributeBasePtr entity = new EntityAttribute("inliers");
160 entity->addValue(variant);
161 putAttribute(entity);
162 }
163
164 float
166 {
167 return getAttributeValue("probability")->getFloat();
168 }
169
170 void
171 memoryx::EnvironmentalPrimitive::setProbability(float probability, const Ice::Current&)
172 {
173 putAttribute("probability", probability);
174 }
175
176 float
178 {
179 return getAttributeValue("circularityprobability")->getFloat();
180 }
181
182 void
184 const Ice::Current&)
185 {
186 putAttribute("circularityprobability", probability);
187 }
188
189 float
191 {
192 return getAttributeValue("length")->getFloat();
193 }
194
195 void
196 memoryx::EnvironmentalPrimitive::setLength(float length, const Ice::Current&)
197 {
198 putAttribute("length", length);
199 }
200
201 int
202 EnvironmentalPrimitive::getLabel(const Ice::Current& c) const
203 {
204 return getAttributeValue("label")->getInt();
205 }
206
207 void
208 EnvironmentalPrimitive::setLabel(int label, const Ice::Current& c)
209 {
210 putAttribute("label", label);
211 }
212
213 armarx::TimestampBasePtr
215 {
216 return getAttributeValue("time")->getClass<armarx::TimestampBase>();
217 }
218
219 void
220 memoryx::EnvironmentalPrimitive::setTime(const armarx::TimestampBasePtr& time,
221 const Ice::Current&)
222 {
223 putAttribute("time", time);
224 }
225
226 armarx::MatrixFloatBasePtr
227 EnvironmentalPrimitive::getSampling(const Ice::Current& c) const
228 {
229 auto entity = getAttribute("sampling");
230 if (!entity || entity->size() <= 0)
231 {
232 return armarx::MatrixFloatBasePtr(new armarx::MatrixFloat(4, 0));
233 }
234
235 return armarx::VariantPtr::dynamicCast(entity->getValueAt(0))
236 ->getClass<armarx::MatrixFloat>();
237 }
238
239 void
240 EnvironmentalPrimitive::setSampling(const armarx::MatrixFloatBasePtr& sampling,
241 const Ice::Current& c)
242 {
244 variant->set<armarx::MatrixFloat>(sampling);
245
246 EntityAttributeBasePtr entity = new EntityAttribute("sampling");
247 entity->addValue(variant);
248 putAttribute(entity);
249 }
250
251 Ice::ObjectPtr
253 {
254 return this->clone();
255 }
256
258 EnvironmentalPrimitive::clone(const Ice::Current& c) const
259 {
261 return ret;
262 }
263
264 void
265 EnvironmentalPrimitive::setShape(const std::string& shape, const Ice::Current& c)
266 {
267 putAttribute("shape", shape);
268 }
269
270 memoryx::PlanePrimitive::PlanePrimitive(const std::string& name, const std::string& id) :
271 EnvironmentalPrimitive(name, id, "plane")
272 {
273 }
274
275 memoryx::PlanePrimitive::PlanePrimitive(std::vector<float>& coeffs) :
276 EnvironmentalPrimitive("", "", "plane")
277 {
278 armarx::Vector3BasePtr planeNormal = new armarx::Vector3(coeffs[0], coeffs[1], coeffs[2]);
279 setPlaneNormal(planeNormal);
280 setPlaneDistance(coeffs[3]);
281 }
282
283 armarx::Vector3BasePtr
285 {
286 return getAttributeValue("normal")->getClass<armarx::Vector3Base>();
287 }
288
289 void
290 memoryx::PlanePrimitive::setPlaneNormal(const armarx::Vector3BasePtr& normal,
291 const Ice::Current&)
292 {
293 putAttribute("normal", normal);
294 }
295
296 float
298 {
299 return getAttributeValue("distance")->getFloat();
300 }
301
302 void
304 {
305 putAttribute("distance", distance);
306 }
307
308 Ice::ObjectPtr
310 {
311 return this->clone();
312 }
313
315 memoryx::PlanePrimitive::clone(const Ice::Current&) const
316 {
317 PlanePrimitivePtr ret = new PlanePrimitive(*this);
318 return ret;
319 }
320
321 memoryx::SpherePrimitive::SpherePrimitive(const std::string& name, const std::string& id) :
322 EnvironmentalPrimitive(name, id, "sphere")
323 {
324 }
325
326 memoryx::SpherePrimitive::SpherePrimitive(std::vector<float>& coeffs) :
327 EnvironmentalPrimitive("", "", "sphere")
328 {
329 setSphereCenter(new armarx::Vector3(coeffs[0], coeffs[1], coeffs[2]));
330 setSphereRadius(coeffs[3]);
331 }
332
333 armarx::Vector3BasePtr
334 SpherePrimitive::getSphereCenter(const Ice::Current& c) const
335 {
336 return getAttributeValue("center")->getClass<armarx::Vector3Base>();
337 }
338
339 void
340 SpherePrimitive::setSphereCenter(const armarx::Vector3BasePtr& center, const Ice::Current& c)
341 {
342 putAttribute("center", center);
343 }
344
345 float
346 SpherePrimitive::getSphereRadius(const Ice::Current& c) const
347 {
348 return getAttributeValue("radius")->getFloat();
349 }
350
351 void
352 SpherePrimitive::setSphereRadius(float radius, const Ice::Current& c)
353 {
354 putAttribute("radius", radius);
355 }
356
357 Ice::ObjectPtr
359 {
360 return this->clone();
361 }
362
364 memoryx::SpherePrimitive::clone(const Ice::Current&) const
365 {
366 SpherePrimitivePtr ret = new SpherePrimitive(*this);
367 return ret;
368 }
369
370 memoryx::CylinderPrimitive::CylinderPrimitive(const std::string& name, const std::string& id) :
371 EnvironmentalPrimitive(name, id, "cylinder")
372 {
373 }
374
376 EnvironmentalPrimitive("", "", "cylinder")
377 {
378 Eigen::Vector3f base;
379 base << coeffs[0], coeffs[1], coeffs[2];
380
381 Eigen::Vector3f direction;
382 direction << coeffs[3], coeffs[4], coeffs[5];
383
385 setCylinderAxisDirection(new armarx::Vector3(direction.normalized()));
386 setCylinderRadius(coeffs[6]);
387 setLength(direction.norm());
388 }
389
390 armarx::Vector3BasePtr
391 CylinderPrimitive::getCylinderPoint(const Ice::Current& c) const
392 {
393 return getAttributeValue("point")->getClass<armarx::Vector3Base>();
394 }
395
396 void
397 CylinderPrimitive::setCylinderPoint(const armarx::Vector3BasePtr& point, const Ice::Current& c)
398 {
399 putAttribute("point", point);
400 }
401
402 armarx::Vector3BasePtr
404 {
405 return getAttributeValue("axis")->getClass<armarx::Vector3Base>();
406 }
407
408 void
409 CylinderPrimitive::setCylinderAxisDirection(const armarx::Vector3BasePtr& axis,
410 const Ice::Current& c)
411 {
412 putAttribute("axis", axis);
413 }
414
415 float
416 CylinderPrimitive::getCylinderRadius(const Ice::Current& c) const
417 {
418 return getAttributeValue("radius")->getFloat();
419 }
420
421 void
422 CylinderPrimitive::setCylinderRadius(float radius, const Ice::Current& c)
423 {
424 putAttribute("radius", radius);
425 }
426
427 Ice::ObjectPtr
429 {
430 return this->clone();
431 }
432
434 memoryx::CylinderPrimitive::clone(const Ice::Current&) const
435 {
437 return ret;
438 }
439
440 ConePrimitive::ConePrimitive(const std::string& name, const std::string& id) :
441 EnvironmentalPrimitive(name, id, "cone")
442 {
443 }
444
445 ConePrimitive::ConePrimitive(std::vector<float>& coeffs) :
446 EnvironmentalPrimitive("", "", "cone")
447 {
448 setConeApex(new armarx::Vector3(coeffs[0], coeffs[1], coeffs[2]));
449 setConeAxisDirection(new armarx::Vector3(coeffs[3], coeffs[4], coeffs[5]));
450 setConeOpeningAngle(coeffs[6]);
451 }
452
453 armarx::Vector3BasePtr
454 ConePrimitive::getConeApex(const Ice::Current& c) const
455 {
456 return getAttributeValue("apex")->getClass<armarx::Vector3Base>();
457 }
458
459 void
460 ConePrimitive::setConeApex(const armarx::Vector3BasePtr& apex, const Ice::Current& c)
461 {
462 putAttribute("apex", apex);
463 }
464
465 armarx::Vector3BasePtr
466 ConePrimitive::getConeAxisDirection(const Ice::Current& c) const
467 {
468 return getAttributeValue("axis")->getClass<armarx::Vector3Base>();
469 }
470
471 void
472 ConePrimitive::setConeAxisDirection(const armarx::Vector3BasePtr& axis, const Ice::Current& c)
473 {
474 putAttribute("axis", axis);
475 }
476
477 float
478 ConePrimitive::getConeOpeningAngle(const Ice::Current&) const
479 {
480 return getAttributeValue("angle")->getFloat();
481 }
482
483 void
484 ConePrimitive::setConeOpeningAngle(float angle, const Ice::Current& c)
485 {
486 putAttribute("angle", angle);
487 }
488
489 Ice::ObjectPtr
491 {
492 return this->clone();
493 }
494
496 ConePrimitive::clone(const Ice::Current& c) const
497 {
498 ConePrimitivePtr ret = new ConePrimitive(*this);
499 return ret;
500 }
501
502 BoxPrimitive::BoxPrimitive(const std::string& name, const std::string& id) :
503 EnvironmentalPrimitive(name, id, "box")
504 {
505 }
506
507 memoryx::EntityRefList
508 BoxPrimitive::getBoxSides(const Ice::Current& c) const
509 {
510 memoryx::EntityRefList result;
511 EntityAttributeBasePtr attribute = getAttribute("sides");
512 for (int i = 0; i < attribute->size(); i++)
513 {
514 armarx::VariantPtr value = armarx::VariantPtr::dynamicCast(attribute->getValueAt(i));
515 result.push_back(value->get<EntityRefBase>());
516 }
517 return result;
518 }
519
520 void
521 BoxPrimitive::setBoxSides(const memoryx::EntityRefList& sides, const Ice::Current& c)
522 {
523 EntityAttributePtr attribute = new EntityAttribute("sides");
524 for (memoryx::EntityRefBasePtr ref : sides)
525 {
526 attribute->addValue(new armarx::Variant(ref));
527 }
528 putAttribute(attribute);
529 }
530
531 Ice::ObjectPtr
533 {
534 return this->clone();
535 }
536
538 BoxPrimitive::clone(const Ice::Current& c) const
539 {
540 BoxPrimitivePtr ret = new BoxPrimitive(*this);
541 return ret;
542 }
543
545 const std::string& id) :
546 EnvironmentalPrimitive(name, id, "structure")
547 {
548 }
549
550 memoryx::EntityRefList
551 HigherSemanticStructure::getPrimitives(const Ice::Current& c) const
552 {
553 memoryx::EntityRefList result;
554 EntityAttributeBasePtr attribute = getAttribute("primitives");
555 for (int i = 0; i < attribute->size(); i++)
556 {
557 armarx::VariantPtr value = armarx::VariantPtr::dynamicCast(attribute->getValueAt(i));
558 result.push_back(value->get<EntityRefBase>());
559 }
560 return result;
561 }
562
563 void
564 HigherSemanticStructure::setPrimitives(const memoryx::EntityRefList& primitives,
565 const Ice::Current& c)
566 {
567 EntityAttributePtr attribute = new EntityAttribute("primitives");
568 for (memoryx::EntityRefBasePtr ref : primitives)
569 {
570 attribute->addValue(new armarx::Variant(ref));
571 }
572 putAttribute(attribute);
573 }
574
575 void
576 HigherSemanticStructure::setLabels(const Ice::StringSeq& labels, const Ice::Current& c)
577 {
578 return putAttribute("labels", simox::alg::join(labels, ","));
579 }
580
581 Ice::StringSeq
582 HigherSemanticStructure::getLabels(const Ice::Current&) const
583 {
584 std::string attrValue = getAttributeValue("labels")->getString();
585 std::vector<std::string> labels = armarx::Split(attrValue, ",");
586 return labels;
587 }
588
589 Ice::ObjectPtr
591 {
592 return this->clone();
593 }
594
596 HigherSemanticStructure::clone(const Ice::Current& c) const
597 {
599 return ret;
600 }
601} // namespace memoryx
constexpr T c
The MatrixFloat class.
The Variant class is described here: Variants.
Definition Variant.h:224
The Vector3 class.
Definition Pose.h:113
BoxPrimitive(const std::string &name="", const std::string &id="")
BoxPrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
Ice::ObjectPtr ice_clone() const override
EntityRefList getBoxSides(const Ice::Current &c=Ice::emptyCurrent) const override
void setBoxSides(const EntityRefList &sides, const Ice::Current &c=Ice::emptyCurrent) override
ConePrimitive(const std::string &name="", const std::string &id="")
armarx::Vector3BasePtr getConeApex(const Ice::Current &c=Ice::emptyCurrent) const override
void setConeApex(const armarx::Vector3BasePtr &apex, const Ice::Current &c=Ice::emptyCurrent) override
void setConeOpeningAngle(float angle, const Ice::Current &c=Ice::emptyCurrent) override
armarx::Vector3BasePtr getConeAxisDirection(const Ice::Current &c=Ice::emptyCurrent) const override
Ice::ObjectPtr ice_clone() const override
float getConeOpeningAngle(const Ice::Current &) const override
ConePrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
void setConeAxisDirection(const armarx::Vector3BasePtr &axis, const Ice::Current &c=Ice::emptyCurrent) override
CylinderPrimitive(const std::string &name="", const std::string &id="")
void setCylinderPoint(const armarx::Vector3BasePtr &point, const Ice::Current &c=Ice::emptyCurrent) override
CylinderPrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
float getCylinderRadius(const Ice::Current &c=Ice::emptyCurrent) const override
armarx::Vector3BasePtr getCylinderAxisDirection(const Ice::Current &c=Ice::emptyCurrent) const override
Ice::ObjectPtr ice_clone() const override
armarx::Vector3BasePtr getCylinderPoint(const Ice::Current &c=Ice::emptyCurrent) const override
void setCylinderAxisDirection(const armarx::Vector3BasePtr &axis, const Ice::Current &c=Ice::emptyCurrent) override
void setCylinderRadius(float radius, const Ice::Current &c=Ice::emptyCurrent) override
Attribute of MemoryX entities.
void setId(const ::std::string &id, const ::Ice::Current &=Ice::emptyCurrent) override
Set id of this entity.
Definition Entity.cpp:174
EntityAttributeBasePtr getAttribute(const ::std::string &attrName, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve attribute from entity.
Definition Entity.cpp:311
void setName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) override
Set name of this entity.
Definition Entity.cpp:188
Entity(const Entity &source)
Definition Entity.cpp:34
virtual armarx::VariantPtr getAttributeValue(const ::std::string &attrName) const
Retrieve value of an attribute from entity.
Definition Entity.cpp:327
void putAttribute(const ::memoryx::EntityAttributeBasePtr &attr, const ::Ice::Current &=Ice::emptyCurrent) override
Store attribute in entity.
Definition Entity.cpp:347
void setTime(const armarx::TimestampBasePtr &time, const Ice::Current &c=Ice::emptyCurrent) override
PointList getGraspPoints(const Ice::Current &c=Ice::emptyCurrent) const override
void setLabel(int label, const Ice::Current &c=Ice::emptyCurrent) override
PointList getInliers(const Ice::Current &c=Ice::emptyCurrent) const override
void setOBBDimensions(const armarx::Vector3BasePtr &dimensions, const Ice::Current &c=Ice::emptyCurrent) override
void setGraspPoints(const PointList &graspPoints, const Ice::Current &c=Ice::emptyCurrent) override
void setSampling(const armarx::MatrixFloatBasePtr &sampling, const Ice::Current &c=Ice::emptyCurrent) override
void setInliers(const PointList &inliers, const Ice::Current &c=Ice::emptyCurrent) override
void setCircularityProbability(float probability, const Ice::Current &c=Ice::emptyCurrent) override
EnvironmentalPrimitive(const std::string &name="", const std::string &id="", const std::string &shape="")
void setLength(float length, const Ice::Current &c=Ice::emptyCurrent) override
float getCircularityProbability(const Ice::Current &c=Ice::emptyCurrent) const override
std::string getShape(const Ice::Current &c=Ice::emptyCurrent) const override
void setShape(const std::string &shape, const Ice::Current &c=Ice::emptyCurrent) override
float getProbability(const Ice::Current &c=Ice::emptyCurrent) const override
int getLabel(const Ice::Current &c=Ice::emptyCurrent) const override
armarx::FramedPoseBasePtr getPose(const Ice::Current &c=Ice::emptyCurrent) const override
EnvironmentalPrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
void setProbability(float probability, const Ice::Current &c=Ice::emptyCurrent) override
Ice::ObjectPtr ice_clone() const override
float getLength(const Ice::Current &c=Ice::emptyCurrent) const override
void setPose(const armarx::FramedPoseBasePtr &pose, const Ice::Current &c=Ice::emptyCurrent) override
armarx::TimestampBasePtr getTime(const Ice::Current &c=Ice::emptyCurrent) const override
armarx::MatrixFloatBasePtr getSampling(const Ice::Current &c=Ice::emptyCurrent) const override
armarx::Vector3BasePtr getOBBDimensions(const Ice::Current &c=Ice::emptyCurrent) const override
Ice::StringSeq getLabels(const Ice::Current &c=Ice::emptyCurrent) const override
EntityRefList getPrimitives(const Ice::Current &c=Ice::emptyCurrent) const override
void setPrimitives(const EntityRefList &primitives, const Ice::Current &c=Ice::emptyCurrent) override
void setLabels(const Ice::StringSeq &labels, const Ice::Current &c=Ice::emptyCurrent) override
Ice::ObjectPtr ice_clone() const override
HigherSemanticStructurePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
HigherSemanticStructure(const std::string &name="", const std::string &id="")
PlanePrimitive(const std::string &name="", const std::string &id="")
armarx::Vector3BasePtr getPlaneNormal(const Ice::Current &c=Ice::emptyCurrent) const override
void setPlaneDistance(float distance, const Ice::Current &c=Ice::emptyCurrent) override
PlanePrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
Ice::ObjectPtr ice_clone() const override
float getPlaneDistance(const Ice::Current &c=Ice::emptyCurrent) const override
void setPlaneNormal(const armarx::Vector3BasePtr &normal, const Ice::Current &c=Ice::emptyCurrent) override
SpherePrimitivePtr clone(const Ice::Current &c=Ice::emptyCurrent) const
void setSphereRadius(float radius, const Ice::Current &c=Ice::emptyCurrent) override
armarx::Vector3BasePtr getSphereCenter(const Ice::Current &c=Ice::emptyCurrent) const override
SpherePrimitive(const std::string &name="", const std::string &id="")
Ice::ObjectPtr ice_clone() const override
void setSphereCenter(const armarx::Vector3BasePtr &center, const Ice::Current &c=Ice::emptyCurrent) override
float getSphereRadius(const Ice::Current &c=Ice::emptyCurrent) const override
std::vector< std::string > Split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
IceInternal::Handle< Variant > VariantPtr
Definition Variant.h:41
VirtualRobot headers.
IceInternal::Handle< SpherePrimitive > SpherePrimitivePtr
IceInternal::Handle< EntityAttribute > EntityAttributePtr
Typedef of EntityAttributePtr as IceInternal::Handle<EntityAttribute> for convenience.
IceInternal::Handle< HigherSemanticStructure > HigherSemanticStructurePtr
IceInternal::Handle< PlanePrimitive > PlanePrimitivePtr
IceInternal::Handle< ConePrimitive > ConePrimitivePtr
IceInternal::Handle< EnvironmentalPrimitive > EnvironmentalPrimitivePtr
IceInternal::Handle< BoxPrimitive > BoxPrimitivePtr
IceInternal::Handle< CylinderPrimitive > CylinderPrimitivePtr
double distance(const Point &a, const Point &b)
Definition point.hpp:95
double angle(const Point &a, const Point &b, const Point &c)
Definition point.hpp:109