Follow this link to skip to the main content

claraty::Frame Class Reference

#include <frame.h>

Collaboration diagram for claraty::Frame:

Collaboration graph
[legend]
List of all members.

Frame querying

ME_Bodyget_body ()
std::string get_name ()
Transformget_transform ()
int get_type ()
void set_type (int type)
Transform get_absolute_transform ()
int _child_type (const char *child_name)

Public Types

enum  CHILD_TYPES { TRANSFORM, UNDEFINED }
enum  FRAME_TYPE { REFERENCE_FRAME, LOCAL_FRAME, UNDEFINED_FRAME }

Public Member Functions

Frame operators
Frameoperator= (const Frame &x)
Frame setting
void set_name (std::string name)
void set_type (std::string type)
void set_body (ME_Body *bdy)
void set (Transform transform)
Frame algorithms
Transform get_relative_transform (Frame &frame)

Private Attributes

Transform _transform
unsigned int _index
unsigned int _type
std::string _name
ME_Body_me_body

Friends

std::ostream & operator<< (std::ostream &os, Frame &frame)

Detailed Description

Frame class This class implenents the labeled Transform object.

Definition at line 48 of file frame.h.


Member Enumeration Documentation

Enumerator:
TRANSFORM 
UNDEFINED 

Definition at line 60 of file frame.h.

00060                    {
00061     TRANSFORM, 
00062     UNDEFINED
00063   };

Enumerator:
REFERENCE_FRAME 
LOCAL_FRAME 
UNDEFINED_FRAME 

Definition at line 65 of file frame.h.

00065                  {
00066     REFERENCE_FRAME,
00067     LOCAL_FRAME,
00068     UNDEFINED_FRAME
00069   };


Constructor & Destructor Documentation

claraty::Frame::Frame (  ) 

Default Constructor for a Frame object.

Definition at line 42 of file frame.cc.

00043 {
00044 }

claraty::Frame::Frame ( Transform trnsfrm,
int  indx,
int  typ,
std::string  nm,
ME_Body bdy 
)

Constructor for a Frame object with parameters specified

Definition at line 49 of file frame.cc.

References _index, _me_body, _name, _transform, and _type.

00051 {
00052   _transform = trnsfrm;
00053   _index     = indx;
00054   _type      = typ;
00055   _name      = nm;
00056   _me_body   = bdy;
00057 }

claraty::Frame::Frame ( const Frame frame  ) 

Copy constructor

Parameters:
[in] frame Reference to Frame to be copied.

Definition at line 67 of file frame.cc.

References _index, _me_body, _name, _transform, and _type.

00068 {
00069   _transform = frame._transform;
00070   _index     = frame._index;
00071   _type      = frame._type;
00072   _name      = frame._name;
00073   _me_body   = frame._me_body;
00074 }

claraty::Frame::~Frame (  )  [virtual]

Destructor for a ME_Body object.

Definition at line 81 of file frame.cc.

00082 {
00083 }

claraty::Frame::Frame (  ) 

Default Constructor for a Frame object.

Definition at line 42 of file frame.cc.

00043 {
00044 }

claraty::Frame::Frame ( Transform trnsfrm,
int  indx,
int  typ,
std::string  nm,
ME_Body bdy 
)

Constructor for a Frame object with parameters specified

Definition at line 49 of file frame.cc.

References _index, _me_body, _name, _transform, and _type.

00051 {
00052   _transform = trnsfrm;
00053   _index     = indx;
00054   _type      = typ;
00055   _name      = nm;
00056   _me_body   = bdy;
00057 }

claraty::Frame::Frame ( const Frame frame  ) 

Copy constructor

Parameters:
[in] frame Reference to Frame to be copied.

Definition at line 67 of file frame.cc.

References _index, _me_body, _name, _transform, and _type.

00068 {
00069   _transform = frame._transform;
00070   _index     = frame._index;
00071   _type      = frame._type;
00072   _name      = frame._name;
00073   _me_body   = frame._me_body;
00074 }

claraty::Frame::~Frame (  )  [virtual]

Destructor for a ME_Body object.

Definition at line 81 of file frame.cc.

00082 {
00083 }


Member Function Documentation

Frame & claraty::Frame::operator= ( const Frame x  ) 

Equals operator: sets the current position of an iterator to the current position of another iterator.

Parameters:
[in] x Reference to base iterator.
Returns:
Reference to base iterator class.

Definition at line 97 of file frame.cc.

References _index, _me_body, _name, _transform, and _type.

00098 {
00099   _transform = x._transform;
00100   _index     = x._index;
00101   _type      = x._type;
00102   _name      = x._name;
00103   _me_body   = x._me_body;
00104   return *this;
00105 }

ME_Body * claraty::Frame::get_body (  ) 

Return name of body

Returns:
body name

Definition at line 159 of file frame.cc.

References _me_body.

Referenced by claraty::Mechanism_Model::_get_pre_order_body_index(), claraty::Mechanism_Model::get_body(), and get_relative_transform().

00160 {
00161   return _me_body;
00162 }

std::string claraty::Frame::get_name (  ) 

Return name of node

Returns:
node name

Definition at line 173 of file frame.cc.

References _name.

Referenced by claraty::ME_Body::make_reference_frame(), and claraty::operator<<().

00174 {
00175   return _name;
00176 }

Transform & claraty::Frame::get_transform (  ) 

int claraty::Frame::get_type (  ) 

Return frame type

Returns:
enum type

Definition at line 133 of file frame.cc.

References _type.

Referenced by claraty::Frame_IO::convert_to_internal_format(), claraty::Frame_IO::extract_from_parse_tree(), get_relative_transform(), and claraty::operator<<().

00134 {
00135   return _type; 
00136 }

void claraty::Frame::set_type ( int  type  ) 

Set frame type.

Parameters:
[in] type 

Definition at line 146 of file frame.cc.

References _type.

Referenced by claraty::ME_Body::create_frame(), claraty::Frame_IO::extract_from_parse_tree(), and claraty::ME_Body::set_reference_frame().

00147 {
00148   _type = type; 
00149 }

Transform claraty::Frame::get_absolute_transform (  ) 

Returns:
node transform wrt body reference frame

Definition at line 264 of file frame.cc.

References _me_body, _type, claraty::ME_Body::get_absolute_transform(), get_transform(), and REFERENCE_FRAME.

Referenced by claraty::Frame_IO::convert_to_internal_format(), claraty::ME_Body_IO::extract_from_parse_tree(), claraty::Mechanism_Model::get_frame_transform(), and claraty::Wheel_Locomotor_Model::map_mechanism_model_to_wheel_locomotor_model().

00265 {
00266   // If this frame is not on a body, return its local transform
00267   if (!_me_body)
00268     return get_transform();
00269 
00270   // If this frame is the reference frame of a body,
00271   // return the absolute body transform
00272   if(_type == REFERENCE_FRAME)
00273     return _me_body->get_absolute_transform();
00274 
00275   // If this frame is a local frame on a body,
00276   // return the body absolute transform times the frame transform
00277   else
00278     return _me_body->get_absolute_transform() * get_transform();
00279 }

Here is the call graph for this function:

int claraty::Frame::_child_type ( const char *  child_name  )  [private]

Return child enumeration type from child name.

Parameters:
[in] child_name 
Returns:
Child enumeration type.

Definition at line 117 of file frame.cc.

References TRANSFORM, and UNDEFINED.

00118 {
00119   if (strcmp(child_name, "Transform") == 0)
00120     return TRANSFORM;
00121   
00122   return UNDEFINED;     
00123 }

void claraty::Frame::set_name ( std::string  name  ) 

Returns:
node transform wrt body reference frame

Definition at line 201 of file frame.cc.

References _name.

Referenced by claraty::ME_Body::create_frame(), claraty::ME_Body_IO::extract_from_parse_tree(), and claraty::Frame_IO::extract_from_parse_tree().

00202 {
00203   _name = name;
00204 }

void claraty::Frame::set_type ( std::string  type  ) 

Returns:
node transform wrt body reference frame

Definition at line 229 of file frame.cc.

References _type, LOCAL_FRAME, REFERENCE_FRAME, and UNDEFINED_FRAME.

00230 {
00231   if (strcmp(type.c_str(), "reference") == 0)
00232     _type = REFERENCE_FRAME;
00233 
00234   else if (strcmp(type.c_str(), "local") == 0)
00235     _type = LOCAL_FRAME;
00236 
00237   else
00238     _type = UNDEFINED_FRAME;
00239   
00240 }

void claraty::Frame::set_body ( ME_Body bdy  ) 

Set body name

Returns:
node transform wrt body reference frame

Definition at line 215 of file frame.cc.

References _me_body.

Referenced by claraty::ME_Body::create_frame(), claraty::ME_Body_IO::extract_from_parse_tree(), and claraty::ME_Body::ME_Body().

00216 {
00217   _me_body = bdy;
00218 }

void claraty::Frame::set ( Transform  transform  ) 

Returns:
node transform wrt body reference frame

Definition at line 250 of file frame.cc.

References _transform.

Referenced by claraty::ME_Body_IO::extract_from_parse_tree().

00251 {
00252   _transform = transform;
00253 
00254 }

Transform claraty::Frame::get_relative_transform ( Frame frame  ) 

Update the position kinematics of the node

Parameters:
[in] frame The name of another frame.
Returns:
ME_Transform of this Frame wrt another frame

Definition at line 290 of file frame.cc.

References _me_body, get_body(), claraty::ME_Body::get_relative_transform(), get_transform(), get_type(), claraty::inverse(), REFERENCE_FRAME, and claraty::Trans< T, Rotation_Type >::relative_to().

Referenced by claraty::Mechanism_Model::get_frame_transform().

00291 {
00292   // if the frames are on the same body,
00293   // get their relative positions without traversing across bodies
00294   if (frame.get_body() == _me_body)
00295     {
00296       // if the reference is a reference frame
00297       if (frame.get_type() == Frame::REFERENCE_FRAME)
00298         {
00299           if (get_type() != Frame::REFERENCE_FRAME)
00300             return get_transform();
00301           else
00302             return Transform(); // if both are reference frames return
00303                                 // identity
00304         }
00305       // if this is a reference frame
00306       else if (get_type() == Frame::REFERENCE_FRAME)
00307         {
00308           return inverse(frame.get_transform());
00309         }
00310       // neither are reference frames
00311       else
00312         {
00313           return get_transform().relative_to(frame.get_transform());
00314         }
00315     }
00316   // The frames are not on the same body
00317   else
00318     {
00319       Transform body_relative =
00320         _me_body->get_relative_transform(*(frame.get_body()));
00321       // if the reference is a reference frame
00322       if (frame.get_type() == Frame::REFERENCE_FRAME)
00323         {
00324           if (get_type() != Frame::REFERENCE_FRAME)
00325             {
00326               return body_relative * get_transform();
00327             }
00328           else
00329             {
00330               return body_relative;              
00331             }
00332         }
00333       // if this is a reference frame
00334       else if (get_type() == Frame::REFERENCE_FRAME)
00335         {
00336           return inverse(frame.get_transform()) * body_relative;
00337         }
00338       // neither are reference frames
00339       else
00340         {
00341           return inverse(frame.get_transform())
00342             * body_relative * get_transform();
00343         }
00344     }
00345 }

Here is the call graph for this function:


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
Frame frame 
) [friend]

Output to ostream

Parameters:
[out] os ostream to put output on.
[in] frame Frame object to be output.
Returns:
ostream with output on it.

Definition at line 356 of file frame.cc.

00357 {
00358   std::string spacing = "";
00359   std::string child_spacing = "";
00360   spacing.append(XML_Out::get_indentation_space(), ' ');
00361   child_spacing.append(XML_Out::get_indentation_space()
00362                        + XML_Out::get_tab_space(), ' ');
00363 
00364   os << spacing;
00365   os << "<Frame ";
00366   os << "name = \""     << frame.get_name() << "\" ";
00367   os << "parent = \"\"";
00368   os << "type = "
00369      << (frame.get_type() == Frame::REFERENCE_FRAME ? "\"reference\"" : "\"local\" ");
00370   
00371   os << ">\n";
00372   os << child_spacing;
00373   os << "<Transform>\n";
00374   XML_Out::increment_indentation_level();
00375   XML_Out::increment_indentation_level();
00376   os << XML_Out::enable << frame.get_transform()  
00377      << XML_Out::disable;
00378   XML_Out::decrement_indentation_level();
00379   XML_Out::decrement_indentation_level();
00380   os << child_spacing;
00381   os << "</Transform>\n";
00382   
00383   os << spacing;
00384   os << "</Frame> \n";
00385   
00386 
00387   return os;
00388 }  


Member Data Documentation

The frame's transform

Definition at line 102 of file frame.h.

Referenced by Frame(), get_transform(), operator=(), and set().

unsigned int claraty::Frame::_index [private]

Index of frame on the body

Definition at line 103 of file frame.h.

Referenced by Frame(), and operator=().

unsigned int claraty::Frame::_type [private]

Frame type

Definition at line 104 of file frame.h.

Referenced by Frame(), get_absolute_transform(), get_type(), operator=(), and set_type().

std::string claraty::Frame::_name [private]

Frame name

Definition at line 105 of file frame.h.

Referenced by Frame(), get_name(), operator=(), and set_name().

Body that this frame is on

Definition at line 106 of file frame.h.

Referenced by Frame(), get_absolute_transform(), get_body(), get_relative_transform(), operator=(), and set_body().


The documentation for this class was generated from the following files: