24#include <Eigen/Geometry>
28#include <ArmarXCore/interface/core/UserException.h>
36#define GRAPH_NODE_ATTR_SCENE memoryx::GraphNode::GRAPH_NODE_ATTR_SCENE
37#define GRAPH_NODE_ATTR_POSE "pose"
38#define GRAPH_NODE_ATTR_ADJ_NODES "adjacentNodes"
40memoryx::GraphNode::GraphNode()
44memoryx::GraphNode::GraphNode(
float x,
47 const std::string& nodeName,
48 const std::string& scene)
50 Eigen::AngleAxisf aa(alpha, Eigen::Vector3f(0, 0, 1));
51 Eigen::Matrix3f rot = aa.toRotationMatrix();
54 ::armarx::FramedPoseBasePtr{new ::armarx::FramedPose(
60memoryx::GraphNode::GraphNode(armarx::FramedPoseBasePtr pose,
61 const std::string& nodeName,
62 const std::string& scene)
79armarx::FramedPoseBasePtr
109memoryx::EntityRefBasePtr
114 if (i < 0 || i >= deg)
117 s <<
"Graph node: Access to adjacent node with index " << i <<
"! (outdegree is " << deg
119 throw armarx::IndexOutOfBoundsException{s.str()};
123 ->getClass<memoryx::EntityRefBase>();
126memoryx::EntityRefBasePtr
130 for (
int i = 0; i < nodes; ++i)
133 if (node->entityId == nodeId)
141memoryx::GraphNodeBaseList
144 memoryx::GraphNodeBaseList result;
146 for (
int i = 0; i < nodes; ++i)
149 auto graphNode = GraphNodeBasePtr::dynamicCast(nodeEntity->getEntity());
151 result.push_back(graphNode);
158 const Ice::Current&
c)
161 <<
": adding new adjacent node...";
163 if (!memoryx::GraphNodeBasePtr::dynamicCast(newAdjacentNode->getEntity(
c)))
165 std::stringstream s{};
166 s <<
"Expected " << memoryx::GraphNodeBase::ice_id(
c);
167 throw armarx::InvalidTypeException{s.str()};
186 for (
int i = 0; i < nodes; ++i)
189 if (node->entityId == nodeId)
201 Eigen::Matrix3f mat = armarx::QuaternionPtr::dynamicCast(
getPose()->orientation)->toEigen();
202 Eigen::Vector3f rpy = mat.eulerAngles(0, 1, 2);
209 return this->
clone();
#define GRAPH_NODE_ATTR_POSE
#define GRAPH_NODE_ATTR_SCENE
#define GRAPH_NODE_ATTR_ADJ_NODES
The Variant class is described here: Variants.
Attribute of MemoryX entities.
EntityAttributeBasePtr getAttribute(const ::std::string &attrName, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve attribute from entity.
void setName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) override
Set name of this entity.
virtual armarx::VariantPtr getAttributeValue(const ::std::string &attrName) const
Retrieve value of an attribute from entity.
::std::string getId(const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve id of this entity which is an integer in string representation.
void putAttribute(const ::memoryx::EntityAttributeBasePtr &attr, const ::Ice::Current &=Ice::emptyCurrent) override
Store attribute in entity.
::std::string getName(const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve name of this entity.
static const std::string GRAPH_NODE_ATTR_SCENE
memoryx::GraphNodeBaseList getAdjacentNodes(const Ice::Current &c=Ice::emptyCurrent) override
void setScene(const std::string &scene, const ::Ice::Current &=Ice::emptyCurrent) override
::memoryx::EntityRefBasePtr getAdjacentNodeById(const std::string &nodeId, const Ice::Current &c=Ice::emptyCurrent) override
void clearAdjacentNodes(const ::Ice::Current &=Ice::emptyCurrent) override
::armarx::FramedPoseBasePtr getPose(const ::Ice::Current &=Ice::emptyCurrent) const override
bool removeAdjacentNode(const std::string &nodeId, const Ice::Current &) override
GraphNodePtr clone(const Ice::Current &=Ice::emptyCurrent) const
Ice::ObjectPtr ice_clone() const override
int getOutdegree(const ::Ice::Current &=Ice::emptyCurrent) const override
float getYawAngle() const
void addAdjacentNode(const ::memoryx::EntityRefBasePtr &newAdjacentNode, const ::Ice::Current &c=Ice::emptyCurrent) override
::std::string getScene(const ::Ice::Current &=Ice::emptyCurrent) const override
void setPose(const ::armarx::FramedPoseBasePtr &pose, const ::Ice::Current &=Ice::emptyCurrent) override
::memoryx::EntityRefBasePtr getAdjacentNode(::Ice::Int i, const ::Ice::Current &=Ice::emptyCurrent) override
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
std::string const GlobalFrame
Variable of the global coordinate system.
This file offers overloads of toIce() and fromIce() functions for STL container types.
::IceInternal::Handle<::armarx::VariantBase > VariantBasePtr
IceInternal::Handle< GraphNode > GraphNodePtr