Client.h
Go to the documentation of this file.
00001 
00002 //
00003 // Copyright (C) OMG Plc 2009.
00004 // All rights reserved.  This software is protected by copyright
00005 // law and international treaties.  No part of this software / document
00006 // may be reproduced or distributed in any form or by any means,
00007 // whether transiently or incidentally to some other use of this software,
00008 // without the written permission of the copyright owner.
00009 //
00011 #pragma once
00012 
00013 #ifdef WIN32
00014 
00015 #ifdef _EXPORTING
00016    #define CLASS_DECLSPEC    __declspec(dllexport)
00017 #else
00018    #define CLASS_DECLSPEC    __declspec(dllimport)
00019 #endif // _EXPORTING
00020 
00021 #elif defined( __GNUC__ )
00022 
00023 #if __GNUC__ < 4
00024     #error gcc 4 is required.
00025   #endif
00026   #define CLASS_DECLSPEC     __attribute__((visibility("default")))
00027 
00028 #else
00029 
00030 #define CLASS_DECLSPEC
00031 
00032 #endif
00033 
00034 #include <string>
00035 
00036 namespace ViconDataStreamSDK
00037 {
00038 namespace CPP
00039 {
00040 
00041 class IStringFactory
00042 {
00043 public:
00044   virtual char * AllocAndCopyString( const char * i_pSource ) = 0;
00045   virtual void FreeString( char * i_pString ) = 0;
00046 protected:
00047   virtual ~IStringFactory() {}
00048 };
00049 
00050 class String
00051 {
00052 public:
00053   // A string which we are not responsible for deallocating
00054   inline
00055   String( const char * i_pString = 0 )
00056   : m_pString( 0 )
00057   , m_pConstString( i_pString )
00058   , m_pStringFactory( 0 )
00059   {
00060   }
00061 
00062   // A string which we are not responsible for deallocating
00063   String( const std::string & i_rString )
00064   : m_pString( 0 )
00065   , m_pConstString( i_rString.c_str() )
00066   , m_pStringFactory( 0 )
00067   {
00068   }
00069 
00070   // Copy constructor
00071   inline
00072   String( const String & i_rString )
00073   {
00074     m_pConstString = i_rString.m_pConstString;
00075     m_pStringFactory = i_rString.m_pStringFactory;
00076     if( m_pStringFactory )
00077     {
00078       m_pString = m_pStringFactory->AllocAndCopyString( i_rString.m_pString );
00079     }
00080     else
00081     {
00082       m_pString = 0;
00083     }
00084   }
00085 
00086   inline
00087   ~String()
00088   {
00089     if( m_pStringFactory )
00090     {
00091       m_pStringFactory->FreeString( m_pString );
00092     }
00093   }
00094 
00095   // A string which we are responsible for deallocating
00096   inline
00097   void Set( const char * i_pString, IStringFactory & i_rStringFactory )
00098   {
00099     m_pString = i_rStringFactory.AllocAndCopyString( i_pString );
00100     m_pStringFactory = &i_rStringFactory;
00101     m_pConstString = 0;
00102   }
00103 
00104   inline
00105   operator std::string() const
00106   {
00107     if( m_pStringFactory )
00108     {
00109       return std::string( m_pString );
00110     }
00111     else
00112     {
00113       return std::string( m_pConstString );
00114     }
00115   }
00116 
00117 private:
00118         char     * m_pString;
00119   const char     * m_pConstString;
00120   IStringFactory * m_pStringFactory;
00121 };
00122 
00123 // Streaming operator for String
00124 inline std::ostream & operator<<( std::ostream & io_rStream, const String & i_rString )
00125 {
00126   io_rStream << std::string( i_rString );
00127   return io_rStream;
00128 }
00129 
00130 namespace Direction
00131 {
00132   enum Enum
00133   {
00134     Up,
00135     Down,
00136     Left,
00137     Right,
00138     Forward,
00139     Backward
00140   };
00141 }
00142 
00143 namespace StreamMode
00144 {
00145   enum Enum
00146   {
00147     ClientPull,
00148     ClientPullPreFetch,
00149     ServerPush
00150   };
00151 }
00152 
00153 namespace TimecodeStandard
00154 {
00155   enum Enum
00156   {
00157     None,
00158     PAL,
00159     NTSC,
00160     NTSCDrop,
00161     Film
00162   };
00163 }
00164 
00165 namespace DeviceType
00166 {
00167   enum Enum
00168   {
00169     Unknown,
00170     ForcePlate
00171   };
00172 }
00173 
00174 namespace Unit
00175 {
00176   enum Enum
00177   {
00178     Unknown,
00179     Volt,
00180     Newton,
00181     NewtonMeter,
00182     Meter
00183   };
00184 }
00185 
00186 namespace Result
00187 {
00188   enum Enum
00189   {
00190     Unknown,
00191     NotImplemented,
00192     Success,
00193     InvalidHostName,
00194     InvalidMulticastIP,
00195     ClientAlreadyConnected,
00196     ClientConnectionFailed,
00197     ServerAlreadyTransmittingMulticast,
00198     ServerNotTransmittingMulticast,
00199     NotConnected,
00200     NoFrame,
00201     InvalidIndex,
00202     InvalidSubjectName,
00203     InvalidSegmentName,
00204     InvalidMarkerName,
00205     InvalidDeviceName,
00206     InvalidDeviceOutputName,
00207     InvalidLatencySampleName,
00208     CoLinearAxes,
00209     LeftHandedAxes
00210   };
00211 }
00212 
00213   class Output_GetVersion
00214   {
00215   public:
00216     unsigned int Major;
00217     unsigned int Minor;
00218     unsigned int Point;
00219   };
00220 
00221   class Output_Connect
00222   {
00223   public:
00224     Result::Enum Result;
00225   };
00226 
00227   class Output_ConnectToMulticast
00228   {
00229   public:
00230     Result::Enum Result;
00231   };
00232 
00233   class Output_Disconnect
00234   {
00235   public:
00236     Result::Enum Result;
00237   };
00238 
00239   class Output_IsConnected
00240   {
00241   public:
00242     bool Connected;
00243   };
00244 
00245   class Output_StartTransmittingMulticast
00246   {
00247   public:
00248     Result::Enum Result;
00249   };
00250 
00251   class Output_StopTransmittingMulticast
00252   {
00253   public:
00254     Result::Enum Result;
00255   };
00256 
00257   class Output_EnableSegmentData
00258   {
00259   public:
00260     Result::Enum Result;
00261   };
00262 
00263   class Output_EnableMarkerData
00264   {
00265   public:
00266     Result::Enum Result;
00267   };
00268 
00269   class Output_EnableUnlabeledMarkerData
00270   {
00271   public:
00272     Result::Enum Result;
00273   };
00274 
00275   class Output_EnableDeviceData
00276   {
00277   public:
00278     Result::Enum Result;
00279   };
00280 
00281   class Output_DisableSegmentData
00282   {
00283   public:
00284     Result::Enum Result;
00285   };
00286 
00287   class Output_DisableMarkerData
00288   {
00289   public:
00290     Result::Enum Result;
00291   };
00292 
00293   class Output_DisableUnlabeledMarkerData
00294   {
00295   public:
00296     Result::Enum Result;
00297   };
00298 
00299   class Output_DisableDeviceData
00300   {
00301   public:
00302     Result::Enum Result;
00303   };
00304 
00305   class Output_IsSegmentDataEnabled
00306   {
00307   public:
00308     bool Enabled;
00309   };
00310 
00311   class Output_IsMarkerDataEnabled
00312   {
00313   public:
00314     bool Enabled;
00315   };
00316 
00317   class Output_IsUnlabeledMarkerDataEnabled
00318   {
00319   public:
00320     bool Enabled;
00321   };
00322 
00323   class Output_IsDeviceDataEnabled
00324   {
00325   public:
00326     bool Enabled;
00327   };
00328 
00329   class Output_SetStreamMode
00330   {
00331   public:
00332     Result::Enum Result;
00333   };
00334 
00335   class Output_SetAxisMapping
00336   {
00337   public:
00338     Result::Enum Result;
00339   };
00340 
00341   class Output_GetAxisMapping
00342   {
00343   public:
00344     Direction::Enum XAxis;
00345     Direction::Enum YAxis;
00346     Direction::Enum ZAxis;
00347   };
00348 
00349   class Output_GetFrame
00350   {
00351   public:
00352     Result::Enum Result;
00353   };
00354 
00355   class Output_GetFrameNumber
00356   {
00357   public:
00358     Result::Enum Result;
00359     unsigned int FrameNumber;
00360   };
00361 
00362   class Output_GetTimecode
00363   {
00364   public:
00365     Result::Enum           Result;
00366     unsigned int           Hours;
00367     unsigned int           Minutes;
00368     unsigned int           Seconds;
00369     unsigned int           Frames;
00370     unsigned int           SubFrame;
00371     bool                   FieldFlag;
00372     TimecodeStandard::Enum Standard;
00373     unsigned int           SubFramesPerFrame;
00374     unsigned int           UserBits;
00375   };
00376 
00377   class Output_GetLatencySampleCount
00378   {
00379   public:
00380     Result::Enum Result;
00381     unsigned int Count;
00382   };
00383 
00384   class Output_GetLatencySampleName
00385   {
00386   public:
00387     Result::Enum Result;
00388     String       Name;
00389   };
00390 
00391   class Output_GetLatencySampleValue
00392   {
00393   public:
00394     Result::Enum Result;
00395     double       Value;
00396   };
00397 
00398   class Output_GetLatencyTotal
00399   {
00400   public:
00401     Result::Enum Result;
00402     double       Total;
00403   };
00404 
00405   class Output_GetSubjectCount
00406   {
00407   public:
00408     Result::Enum Result;
00409     unsigned int SubjectCount;
00410   };
00411 
00412   class Output_GetSubjectName
00413   {
00414   public:
00415     Result::Enum Result;
00416     String       SubjectName;
00417   };
00418 
00419   class Output_GetSubjectRootSegmentName
00420   {
00421   public:
00422     Result::Enum Result;
00423     String       SegmentName;
00424   };
00425 
00426   class Output_GetSegmentChildCount
00427   {
00428   public:
00429     Result::Enum Result;
00430     unsigned int SegmentCount;
00431   };
00432 
00433   class Output_GetSegmentChildName
00434   {
00435   public:
00436     Result::Enum Result;
00437     String       SegmentName;
00438   };
00439 
00440   class Output_GetSegmentParentName
00441   {
00442   public:
00443     Result::Enum Result;
00444     String       SegmentName;
00445   };
00446 
00447   class Output_GetSegmentCount
00448   {
00449   public:
00450     Result::Enum Result;
00451     unsigned int SegmentCount;
00452   };
00453 
00454   class Output_GetSegmentName
00455   {
00456   public:
00457     Result::Enum Result;
00458     String       SegmentName;
00459   };
00460 
00461   class Output_GetSegmentStaticTranslation
00462   {
00463   public:
00464     Result::Enum Result;
00465     double       Translation[ 3 ];
00466   };
00467 
00468   class Output_GetSegmentStaticRotationHelical
00469   {
00470   public:
00471     Result::Enum Result;
00472     double       Rotation[ 3 ];
00473   };
00474 
00475   class Output_GetSegmentStaticRotationMatrix
00476   {
00477   public:
00478     Result::Enum Result;
00479     double       Rotation[ 9 ];
00480   };
00481 
00482   class Output_GetSegmentStaticRotationQuaternion
00483   {
00484   public:
00485     Result::Enum Result;
00486     double       Rotation[ 4 ];
00487   };
00488 
00489   class Output_GetSegmentStaticRotationEulerXYZ
00490   {
00491   public:
00492     Result::Enum Result;
00493     double       Rotation[ 3 ];
00494   };
00495 
00496   class Output_GetSegmentGlobalTranslation
00497   {
00498   public:
00499     Result::Enum Result;
00500     double       Translation[ 3 ];
00501     bool         Occluded;
00502   };
00503 
00504   class Output_GetSegmentGlobalRotationHelical
00505   {
00506   public:
00507     Result::Enum Result;
00508     double       Rotation[ 3 ];
00509     bool         Occluded;
00510   };
00511 
00512   class Output_GetSegmentGlobalRotationMatrix
00513   {
00514   public:
00515     Result::Enum Result;
00516     double       Rotation[ 9 ];
00517     bool         Occluded;
00518   };
00519 
00520   class Output_GetSegmentGlobalRotationQuaternion
00521   {
00522   public:
00523     Result::Enum Result;
00524     double       Rotation[ 4 ];
00525     bool         Occluded;
00526   };
00527 
00528   class Output_GetSegmentGlobalRotationEulerXYZ
00529   {
00530   public:
00531     Result::Enum Result;
00532     double       Rotation[ 3 ];
00533     bool         Occluded;
00534   };
00535 
00536   class Output_GetSegmentLocalTranslation
00537   {
00538   public:
00539     Result::Enum Result;
00540     double       Translation[ 3 ];
00541     bool         Occluded;
00542   };
00543 
00544   class Output_GetSegmentLocalRotationHelical
00545   {
00546   public:
00547     Result::Enum Result;
00548     double       Rotation[ 3 ];
00549     bool         Occluded;
00550   };
00551 
00552   class Output_GetSegmentLocalRotationMatrix
00553   {
00554   public:
00555     Result::Enum Result;
00556     double       Rotation[ 9 ];
00557     bool         Occluded;
00558   };
00559 
00560   class Output_GetSegmentLocalRotationQuaternion
00561   {
00562   public:
00563     Result::Enum Result;
00564     double       Rotation[ 4 ];
00565     bool         Occluded;
00566   };
00567 
00568   class Output_GetSegmentLocalRotationEulerXYZ
00569   {
00570   public:
00571     Result::Enum Result;
00572     double       Rotation[ 3 ];
00573     bool         Occluded;
00574   };
00575 
00576   class Output_GetMarkerCount
00577   {
00578   public:
00579     Result::Enum Result;
00580     unsigned int MarkerCount;
00581   };
00582 
00583   class Output_GetMarkerName
00584   {
00585   public:
00586     Result::Enum Result;
00587     String       MarkerName;
00588   };
00589 
00590   class Output_GetMarkerParentName
00591   {
00592   public:
00593     Result::Enum Result;
00594     String       SegmentName;
00595   };
00596 
00597   class Output_GetMarkerGlobalTranslation
00598   {
00599   public:
00600     Result::Enum Result;
00601     double       Translation[ 3 ];
00602     bool         Occluded;
00603   };
00604 
00605   class Output_GetUnlabeledMarkerCount
00606   {
00607   public:
00608     Result::Enum Result;
00609     unsigned int MarkerCount;
00610   };
00611 
00612   class Output_GetUnlabeledMarkerGlobalTranslation
00613   {
00614   public:
00615     Result::Enum Result;
00616     double       Translation[ 3 ];
00617   };
00618 
00619   class Output_GetDeviceCount
00620   {
00621   public:
00622     Result::Enum Result;
00623     unsigned int DeviceCount;
00624   };
00625 
00626   class Output_GetDeviceName
00627   {
00628   public:
00629     Result::Enum     Result;
00630     String           DeviceName;
00631     DeviceType::Enum DeviceType;
00632   };
00633 
00634   class Output_GetDeviceOutputCount
00635   {
00636   public:
00637     Result::Enum Result;
00638     unsigned int DeviceOutputCount;
00639   };
00640 
00641   class Output_GetDeviceOutputName
00642   {
00643   public:
00644     Result::Enum Result;
00645     String       DeviceOutputName;
00646     Unit::Enum   DeviceOutputUnit;
00647   };
00648 
00649   class Output_GetDeviceOutputValue
00650   {
00651   public:
00652     Result::Enum Result;
00653     double       Value;
00654     bool         Occluded;
00655   };
00656 
00657   class Output_GetForcePlateCount
00658   {
00659   public:
00660     Result::Enum Result;
00661     unsigned int ForcePlateCount;
00662   };
00663 
00664   class Output_GetGlobalForceVector
00665   {
00666   public:
00667     Result::Enum Result;
00668     double       ForceVector[ 3 ];
00669   };
00670 
00671   class Output_GetGlobalMomentVector
00672   {
00673   public:
00674     Result::Enum Result;
00675     double       MomentVector[ 3 ];
00676   };
00677 
00678   class Output_GetGlobalCentreOfPressure
00679   {
00680   public:
00681     Result::Enum Result;
00682     double       CentreOfPressure[ 3 ];
00683   };
00684 
00685   class ClientImpl;
00686 
00687   class CLASS_DECLSPEC Client
00688   {
00689   public:
00690     Client();
00691     ~Client();
00692 
00693     Output_GetVersion  GetVersion() const;
00694 
00695     Output_Connect     Connect( const String & HostName );
00696     Output_ConnectToMulticast ConnectToMulticast( const String & HostName, const String & MulticastIP );
00697     Output_Disconnect  Disconnect();
00698     Output_IsConnected IsConnected() const;
00699     Output_StartTransmittingMulticast StartTransmittingMulticast( const String & ServerIP,
00700                                                                   const String & MulticastIP );
00701 
00702     Output_StopTransmittingMulticast StopTransmittingMulticast();
00703 
00704     Output_EnableSegmentData         EnableSegmentData();
00705     Output_EnableMarkerData          EnableMarkerData();
00706     Output_EnableUnlabeledMarkerData EnableUnlabeledMarkerData();
00707     Output_EnableDeviceData          EnableDeviceData();
00708 
00709     Output_DisableSegmentData         DisableSegmentData();
00710     Output_DisableMarkerData          DisableMarkerData();
00711     Output_DisableUnlabeledMarkerData DisableUnlabeledMarkerData();
00712     Output_DisableDeviceData          DisableDeviceData();
00713 
00714     Output_IsSegmentDataEnabled         IsSegmentDataEnabled() const;
00715     Output_IsMarkerDataEnabled          IsMarkerDataEnabled() const;
00716     Output_IsUnlabeledMarkerDataEnabled IsUnlabeledMarkerDataEnabled() const;
00717     Output_IsDeviceDataEnabled          IsDeviceDataEnabled() const;
00718     
00719     Output_SetStreamMode SetStreamMode( const StreamMode::Enum Mode );
00720 
00721     Output_SetAxisMapping SetAxisMapping( const Direction::Enum XAxis, const Direction::Enum YAxis, const Direction::Enum ZAxis );
00722     Output_GetAxisMapping GetAxisMapping() const;
00723 
00724     Output_GetFrame GetFrame();
00725     Output_GetFrameNumber GetFrameNumber() const;
00726 
00727     Output_GetTimecode GetTimecode() const;
00728 
00729     Output_GetLatencySampleCount GetLatencySampleCount() const;
00730     Output_GetLatencySampleName  GetLatencySampleName( const unsigned int LatencySampleIndex ) const;
00731     Output_GetLatencySampleValue GetLatencySampleValue( const String & LatencySampleName ) const;
00732     Output_GetLatencyTotal       GetLatencyTotal() const;
00733 
00734     Output_GetSubjectCount GetSubjectCount() const;
00735     Output_GetSubjectName GetSubjectName( const unsigned int SubjectIndex ) const;
00736 
00737     Output_GetSubjectRootSegmentName GetSubjectRootSegmentName( const String & SubjectName ) const;
00738 
00739     Output_GetSegmentCount GetSegmentCount( const String  & SubjectName ) const;
00740     
00741     Output_GetSegmentName GetSegmentName( const String       & SubjectName,
00742                                           const unsigned int   SegmentIndex ) const;
00743 
00744     Output_GetSegmentChildCount GetSegmentChildCount( const String & SubjectName,
00745                                                       const String & SegmentName ) const;
00746 
00747     Output_GetSegmentChildName GetSegmentChildName( const String       & SubjectName,
00748                                                     const String       & SegmentName,
00749                                                     const unsigned int   SegmentIndex ) const;
00750 
00751     Output_GetSegmentParentName GetSegmentParentName( const String & SubjectName,
00752                                                       const String & SegmentName ) const;
00753 
00754     Output_GetSegmentStaticTranslation GetSegmentStaticTranslation( const String & SubjectName,
00755                                                                     const String & SegmentName ) const;
00756 
00757     Output_GetSegmentStaticRotationHelical GetSegmentStaticRotationHelical( const String & SubjectName,
00758                                                                             const String & SegmentName ) const;
00759 
00760     Output_GetSegmentStaticRotationMatrix GetSegmentStaticRotationMatrix( const String & SubjectName,
00761                                                                           const String & SegmentName ) const;
00762 
00763     Output_GetSegmentStaticRotationQuaternion GetSegmentStaticRotationQuaternion( const String & SubjectName,
00764                                                                                   const String & SegmentName ) const;
00765 
00766     Output_GetSegmentStaticRotationEulerXYZ GetSegmentStaticRotationEulerXYZ( const String & SubjectName,
00767                                                                               const String & SegmentName ) const;
00768 
00769     Output_GetSegmentGlobalTranslation GetSegmentGlobalTranslation( const String & SubjectName,
00770                                                                     const String & SegmentName ) const;
00771 
00772     Output_GetSegmentGlobalRotationHelical GetSegmentGlobalRotationHelical( const String & SubjectName,
00773                                                                             const String & SegmentName ) const;
00774 
00775     Output_GetSegmentGlobalRotationMatrix GetSegmentGlobalRotationMatrix( const String & SubjectName,
00776                                                                           const String & SegmentName ) const;
00777 
00778     Output_GetSegmentGlobalRotationQuaternion GetSegmentGlobalRotationQuaternion( const String & SubjectName,
00779                                                                                   const String & SegmentName ) const;
00780 
00781     Output_GetSegmentGlobalRotationEulerXYZ GetSegmentGlobalRotationEulerXYZ( const String & SubjectName,
00782                                                                               const String & SegmentName ) const;
00783 
00784     Output_GetSegmentLocalTranslation GetSegmentLocalTranslation( const String & SubjectName,
00785                                                                   const String & SegmentName ) const;
00786 
00787     Output_GetSegmentLocalRotationHelical GetSegmentLocalRotationHelical( const String & SubjectName,
00788                                                                           const String & SegmentName ) const;
00789 
00790     Output_GetSegmentLocalRotationMatrix GetSegmentLocalRotationMatrix( const String & SubjectName,
00791                                                                         const String & SegmentName ) const;
00792 
00793     Output_GetSegmentLocalRotationQuaternion GetSegmentLocalRotationQuaternion( const String & SubjectName,
00794                                                                                 const String & SegmentName ) const;
00795 
00796     Output_GetSegmentLocalRotationEulerXYZ GetSegmentLocalRotationEulerXYZ( const String & SubjectName,
00797                                                                             const String & SegmentName ) const;
00798 
00799     Output_GetMarkerCount GetMarkerCount( const String  & SubjectName ) const;
00800 
00801     Output_GetMarkerName GetMarkerName( const String & SubjectName,
00802                                         const unsigned int  MarkerIndex ) const;
00803 
00804     Output_GetMarkerParentName GetMarkerParentName( const String & SubjectName,
00805                                                     const String & MarkerName ) const;
00806 
00807     Output_GetMarkerGlobalTranslation GetMarkerGlobalTranslation( const String & SubjectName,
00808                                                                   const String & MarkerName ) const;
00809 
00810 
00811     Output_GetUnlabeledMarkerCount GetUnlabeledMarkerCount() const;
00812     
00813     Output_GetUnlabeledMarkerGlobalTranslation GetUnlabeledMarkerGlobalTranslation( const unsigned int MarkerIndex ) const;
00814 
00815     Output_GetDeviceCount GetDeviceCount() const;
00816     Output_GetDeviceName  GetDeviceName( const unsigned int DeviceIndex ) const;
00817 
00818     Output_GetDeviceOutputCount GetDeviceOutputCount( const String  & DeviceName ) const;
00819 
00820     Output_GetDeviceOutputName GetDeviceOutputName( const String  & DeviceName,
00821                                                     const unsigned int   DeviceOutputIndex ) const;
00822     
00823     Output_GetDeviceOutputValue GetDeviceOutputValue( const String & DeviceName,
00824                                                       const String & DeviceOutputName ) const;
00825 
00826     Output_GetForcePlateCount GetForcePlateCount() const;
00827 
00828     Output_GetGlobalForceVector GetGlobalForceVector( const unsigned int ForcePlateIndex ) const;
00829     Output_GetGlobalMomentVector GetGlobalMomentVector( const unsigned int ForcePlateIndex ) const;
00830     Output_GetGlobalCentreOfPressure GetGlobalCentreOfPressure( const unsigned int ForcePlateIndex ) const;
00831 
00832   private:
00833     ClientImpl * m_pClientImpl;
00834   };
00835 } // End of namespace CPP
00836 } // End of namespace ViconDataStreamSDK


vicon_bridge
Author(s): Markus Achtelik
autogenerated on Sun Oct 5 2014 23:47:38