Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  
igtlQuaternionTrackingDataMessage.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Open IGT Link Library
00004   Module:    $HeadURL: http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink2_beta/Source/igtlImgmetaMessage.h $
00005   Language:  C++
00006   Date:      $Date: 2009-12-16 23:58:02 -0500 (Wed, 16 Dec 2009) $
00007   Version:   $Revision: 5466 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010 
00011   This software is distributed WITHOUT ANY WARRANTY; without even
00012   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00013   PURPOSE.  See the above copyright notices for more information.
00014 
00015 =========================================================================*/
00016 
00017 #ifndef __igtlQuaternionTrackingDataMessage_h
00018 #define __igtlQuaternionTrackingDataMessage_h
00019 
00020 #include <vector>
00021 #include <string>
00022 
00023 #include "igtlObject.h"
00024 //#include "igtlMacros.h"
00025 #include "igtlMath.h"
00026 #include "igtlMessageBase.h"
00027 #include "igtlTypes.h"
00028 
00029 
00030 namespace igtl
00031 {
00032 
00033 class IGTLCommon_EXPORT QuaternionTrackingDataElement: public Object
00034 {
00035 public:
00036   typedef QuaternionTrackingDataElement  Self;
00037   typedef Object                         Superclass;
00038   typedef SmartPointer<Self>             Pointer;
00039   typedef SmartPointer<const Self>       ConstPointer;
00040 
00041   igtlTypeMacro(igtl::QuaternionTrackingDataElement, igtl::Object);
00042   igtlNewMacro(igtl::QuaternionTrackingDataElement);
00043 
00044   // Tracking data type
00045   enum {
00046     TYPE_TRACKER  = 1,  /* Tracker */
00047     TYPE_6D       = 2,  /* 6D instrument (regular instrument) */
00048     TYPE_3D       = 3,  /* 3D instrument (only tip of the instrument defined) */
00049     TYPE_5D       = 4,  /* 5D instrument (tip and handle are defined,
00050                            but not the normal vector) */
00051   };
00052 
00053 public:
00054   int           SetName(const char* name);
00055   const char*   GetName()                            { return this->m_Name.c_str(); };
00056 
00057   int           SetType(igtlUint8 type);
00058   igtlUint8     GetType()                            { return this->m_Type; };
00059 
00060   void SetPosition(float p[3]);
00061   void GetPosition(float p[3]);
00062 
00063   void SetPosition(float px, float py, float pz);
00064   void GetPosition(float* px, float* py, float* pz);
00065 
00066   void SetQuaternion(float q[4]);
00067   void GetQuaternion(float q[4]);
00068 
00069   void SetQuaternion(float qx, float qy, float qz, float w);
00070   void GetQuaternion(float* qx, float* qy, float* qz, float* w);
00071 
00072 protected:
00073   QuaternionTrackingDataElement();
00074   ~QuaternionTrackingDataElement();
00075 
00076 protected:
00077 
00078   std::string   m_Name;          /* Name / description (< 20 bytes) */
00079   igtlUint8     m_Type;          /* Tracking data type (TYPE_TRACKER, TYPE_6D, TYPE_3D, TYPE_5D) */
00080   igtlFloat32   m_position[3];   /* position (x, y, z) */
00081   igtlFloat32   m_quaternion[4]; /* orientation as quaternion (qx, qy, qz, w) */
00082 };
00083 
00084 
00085 class IGTLCommon_EXPORT StartQuaternionTrackingDataMessage: public MessageBase
00086 {
00087 
00088 public:
00089   typedef StartQuaternionTrackingDataMessage  Self;
00090   typedef MessageBase                         Superclass;
00091   typedef SmartPointer<Self>                  Pointer;
00092   typedef SmartPointer<const Self>            ConstPointer;
00093 
00094   igtlTypeMacro(igtl::StartQuaternionTrackingDataMessage, igtl::MessageBase);
00095   igtlNewMacro(igtl::StartQuaternionTrackingDataMessage);
00096 
00097 public:
00098   void         SetResolution(igtlInt32 res)  { this->m_Resolution = res; }; // ms
00099   igtlInt32    GetResolution()               { return this->m_Resolution; };
00100 
00101   int          SetCoordinateName(const char* name);
00102   const char*  GetCoordinateName()            { return this->m_CoordinateName.c_str(); };
00103 
00104 protected:
00105   StartQuaternionTrackingDataMessage();
00106   ~StartQuaternionTrackingDataMessage();
00107 
00108 protected:
00109   virtual int  GetBodyPackSize();
00110   virtual int  PackBody();
00111   virtual int  UnpackBody();
00112 
00113 protected:
00114   igtlInt32     m_Resolution;     /* Minimum time between two frames (ms). Use 0 for as fast as possible. */
00115   std::string   m_CoordinateName; /* Name of the coordinate system */
00116 
00117 };
00118 
00119 
00120 class IGTLCommon_EXPORT StopQuaternionTrackingDataMessage: public MessageBase
00121 {
00122 public:
00123   typedef StopQuaternionTrackingDataMessage  Self;
00124   typedef MessageBase                        Superclass;
00125   typedef SmartPointer<Self>                 Pointer;
00126   typedef SmartPointer<const Self>           ConstPointer;
00127 
00128   igtlTypeMacro(igtl::StopQuaternionTrackingDataMessage, igtl::MessageBase);
00129   igtlNewMacro(igtl::StopQuaternionTrackingDataMessage);
00130 
00131 protected:
00132   StopQuaternionTrackingDataMessage() : MessageBase() { this->m_DefaultBodyType  = "STP_QTDATA"; };
00133   ~StopQuaternionTrackingDataMessage() {};
00134 
00135 protected:
00136   virtual int  GetBodyPackSize() { return 0; };
00137   virtual int  PackBody()        { AllocatePack(); return 1; };
00138   virtual int  UnpackBody()      { return 1; };
00139 
00140 };
00141 
00142 
00143 class IGTLCommon_EXPORT RTSQuaternionTrackingDataMessage: public MessageBase
00144 {
00145 public:
00146   typedef RTSQuaternionTrackingDataMessage  Self;
00147   typedef MessageBase                       Superclass;
00148   typedef SmartPointer<Self>                Pointer;
00149   typedef SmartPointer<const Self>          ConstPointer;
00150 
00151   // Status type
00152   enum {
00153     STATUS_SUCCESS = 0,
00154     STATUS_ERROR = 1
00155   };
00156 
00157 
00158   igtlTypeMacro(igtl::RTSQuaternionTrackingDataMessage, igtl::MessageBase);
00159   igtlNewMacro(igtl::RTSQuaternionTrackingDataMessage);
00160 
00161   void          SetStatus(igtlUint8 status){ this->m_Status = status; }
00162   igtlUint8     GetStatus()                { return this->m_Status; };
00163 
00164 protected:
00165   RTSQuaternionTrackingDataMessage() : MessageBase(), m_Status(0) { this->m_DefaultBodyType  = "RTS_QTDATA"; };
00166   ~RTSQuaternionTrackingDataMessage() {};
00167 
00168   igtlUint8 m_Status;
00169 
00170 protected:
00171   virtual int  GetBodyPackSize();
00172   virtual int  PackBody();
00173   virtual int  UnpackBody();
00174 
00175 };
00176 
00177 
00178 class IGTLCommon_EXPORT QuaternionTrackingDataMessage: public MessageBase
00179 {
00180 public:
00181   typedef QuaternionTrackingDataMessage  Self;
00182   typedef MessageBase                    Superclass;
00183   typedef SmartPointer<Self>             Pointer;
00184   typedef SmartPointer<const Self>       ConstPointer;
00185 
00186   igtlTypeMacro(igtl::QuaternionTrackingDataMessage, igtl::MessageBase);
00187   igtlNewMacro(igtl::QuaternionTrackingDataMessage);
00188 
00189 public:
00190   int  AddQuaternionTrackingDataElement(QuaternionTrackingDataElement::Pointer& elem);
00191   void ClearQuaternionTrackingDataElements();
00192 
00193   int  GetNumberOfQuaternionTrackingDataElements();
00194   void GetQuaternionTrackingDataElement(int index, QuaternionTrackingDataElement::Pointer& elem);
00195 
00196 
00197 protected:
00198   QuaternionTrackingDataMessage();
00199   ~QuaternionTrackingDataMessage();
00200   
00201 protected:
00202 
00203   virtual int  GetBodyPackSize();
00204   virtual int  PackBody();
00205   virtual int  UnpackBody();
00206   
00207   std::vector<QuaternionTrackingDataElement::Pointer> m_QuaternionTrackingDataList;
00208   
00209 };
00210 
00211 
00212 } // namespace igtl
00213 
00214 #endif // _igtlQuaternionTrackingDataMessage_h
00215 
00216 
00217 
00218 

Generated at Wed Apr 27 2011 00:08:07 for OpenIGTLink by doxygen 1.7.4 written by Dimitri van Heesch, © 1997-2000