IGSTK
/tmp/buildd/igstk-4.4.0/Source/igstkTrackerTool.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Image Guided Surgery Software Toolkit
00004   Module:    $RCSfile: igstkTrackerTool.h,v $
00005   Language:  C++
00006   Date:      $Date: 2008-11-17 20:12:26 $
00007   Version:   $Revision: 1.32 $
00008 
00009   Copyright (c) ISC  Insight Software Consortium.  All rights reserved.
00010   See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notices for more information.
00015 
00016 =========================================================================*/
00017 
00018 #ifndef __igstkTrackerTool_h
00019 #define __igstkTrackerTool_h
00020 
00021 #include "igstkObject.h"
00022 #include "igstkTransform.h"
00023 #include "igstkMacros.h"
00024 #include "igstkStateMachine.h"
00025 #include "igstkCoordinateSystemInterfaceMacros.h"
00026 
00027 
00028 namespace igstk
00029 {
00030 
00031 igstkEventMacro( TrackerToolEvent, StringEvent);
00032 igstkEventMacro( TrackerToolErrorEvent, IGSTKErrorWithStringEvent);
00033 igstkEventMacro( TrackerToolConfigurationEvent,TrackerToolEvent);
00034 igstkEventMacro( TrackerToolConfigurationErrorEvent,TrackerToolErrorEvent);
00035 
00036 igstkEventMacro( InvalidRequestToAttachTrackerToolErrorEvent,
00037                TrackerToolErrorEvent);
00038 
00039 igstkEventMacro( InvalidRequestToDetachTrackerToolErrorEvent,
00040                TrackerToolErrorEvent);
00041 
00042 igstkEventMacro( TrackerToolAttachmentToTrackerEvent,TrackerToolEvent);
00043 igstkEventMacro( TrackerToolAttachmentToTrackerErrorEvent,
00044                                                        TrackerToolErrorEvent);
00045 igstkEventMacro( TrackerToolDetachmentFromTrackerEvent,TrackerToolEvent);
00046 igstkEventMacro( TrackerToolDetachmentFromTrackerErrorEvent,
00047                                                        TrackerToolErrorEvent);
00048 igstkEventMacro( TrackerToolMadeTransitionToTrackedStateEvent,
00049                                                             TrackerToolEvent);
00050 igstkEventMacro( TrackerToolNotAvailableToBeTrackedEvent,TrackerToolEvent);
00051 igstkEventMacro( ToolTrackingStartedEvent,TrackerToolEvent);
00052 igstkEventMacro( ToolTrackingStoppedEvent,TrackerToolEvent);
00053 
00054 class Tracker;
00055 
00072 class TrackerTool : public Object
00073 {
00074 public:
00075 
00077   igstkStandardAbstractClassTraitsMacro( TrackerTool, Object )
00078 
00079 public:
00080 
00081   igstkFriendClassMacro( Tracker );
00082 
00083   typedef Tracker           TrackerType;
00084   typedef Transform         TransformType;
00085 
00087   igstkGetMacro( CalibrationTransform, TransformType );
00088 
00090   void SetCalibrationTransform( const TransformType & );
00091 
00093   igstkGetMacro( Updated, bool );
00094  
00096   virtual void RequestConfigure( void );
00097 
00100   virtual void RequestDetachFromTracker( );
00101 
00103   const std::string GetTrackerToolIdentifier( ) const;
00104 
00107   virtual void RequestAttachToTracker( TrackerType * );
00108 
00109 protected:
00110 
00111   TrackerTool(void);
00112 
00113   virtual ~TrackerTool(void);
00114 
00116   virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const; 
00117 
00119   void SetTrackerToolIdentifier( const std::string identifier );
00120 
00121 private:
00122 
00123   TrackerTool(const Self&);       //purposely not implemented
00124   void operator=(const Self&);    //purposely not implemented
00125 
00127   virtual void RequestReportTrackingStarted( );
00128 
00130   virtual void RequestReportTrackingStopped( );
00131 
00133   virtual void RequestReportTrackingToolNotAvailable( );
00134 
00136   virtual void RequestReportTrackingToolVisible( );
00137 
00139   void RequestReportSuccessfulTrackerToolAttachment();
00140 
00142   void RequestReportFailedTrackerToolAttachment();
00143 
00145   igstkGetMacro( RawTransform, TransformType );
00146 
00148   void SetRawTransform( const TransformType & );
00149 
00151   void SetCalibratedTransform( const TransformType & );
00152 
00154   igstkSetMacro( Updated, bool );
00155 
00158   virtual bool CheckIfTrackerToolIsConfigured( ) const = 0;
00159 
00161   igstkDeclareInputMacro( ConfigureTool );
00162   igstkDeclareInputMacro( ToolConfigurationSuccess );
00163   igstkDeclareInputMacro( ToolConfigurationFailure );
00164   igstkDeclareInputMacro( AttachToolToTracker );
00165   igstkDeclareInputMacro( TrackingStarted );
00166   igstkDeclareInputMacro( TrackingStopped );
00167   igstkDeclareInputMacro( TrackerToolNotAvailable );
00168   igstkDeclareInputMacro( TrackerToolVisible );
00169   igstkDeclareInputMacro( DetachTrackerToolFromTracker ); 
00170   igstkDeclareInputMacro( AttachmentToTrackerSuccess );
00171   igstkDeclareInputMacro( AttachmentToTrackerFailure );
00172   igstkDeclareInputMacro( DetachmentFromTrackerSuccess );
00173   igstkDeclareInputMacro( DetachmentFromTrackerFailure );
00174  
00176   igstkDeclareStateMacro( Idle );
00177   igstkDeclareStateMacro( AttemptingToConfigureTrackerTool );
00178   igstkDeclareStateMacro( Configured );
00179   igstkDeclareStateMacro( AttemptingToAttachTrackerToolToTracker );
00180   igstkDeclareStateMacro( Attached );
00181   igstkDeclareStateMacro( AttemptingToDetachTrackerToolFromTracker );
00182   igstkDeclareStateMacro( NotAvailable );
00183   igstkDeclareStateMacro( Tracked );
00184 
00186   void AttemptToConfigureProcessing( void );
00187 
00189   void AttemptToAttachTrackerToolToTrackerProcessing( void );
00190 
00192   void TrackerToolConfigurationSuccessProcessing( void );
00193 
00195   void TrackerToolConfigurationFailureProcessing( void );
00196 
00199   void TrackerToolAttachmentToTrackerSuccessProcessing( void );
00200 
00202   void TrackerToolAttachmentToTrackerFailureProcessing( void );
00203 
00205   void AttemptToDetachTrackerToolFromTrackerProcessing( void );
00206 
00209   void TrackerToolDetachmentFromTrackerSuccessProcessing( void );
00210 
00212   void TrackerToolDetachmentFromTrackerFailureProcessing( void );
00213 
00215   void ReportTrackerToolVisibleStateProcessing( void );
00216 
00218   void ReportTrackerToolNotAvailableProcessing( void );
00219 
00221   void ReportTrackingStartedProcessing( void );
00222 
00224   void ReportTrackingStoppedProcessing( void );
00225 
00227   void ReportInvalidRequestProcessing( void );
00228 
00230   void ReportInvalidRequestToAttachTrackerToolProcessing( void );
00231 
00233   void ReportInvalidRequestToDetachTrackerToolProcessing( void );
00234 
00236   void NoProcessing( void );
00237 
00239   TransformType                 m_CalibrationTransform; 
00240 
00242   TransformType                 m_CalibratedTransform; 
00243 
00245   TransformType                 m_RawTransform; 
00246 
00248   bool               m_Updated;
00249 
00251   std::string        m_TrackerToolIdentifier;
00252 
00254   Tracker        * m_TrackerToAttachTo;
00255 
00258   igstkCoordinateSystemClassInterfaceMacro();
00259 
00262   CoordinateSystem::Pointer   m_CalibrationCoordinateSystem;
00263 };
00264 
00265 std::ostream& operator<<(std::ostream& os, const TrackerTool& o);
00266 
00267 }
00268 
00269 #endif //__igstk_TrackerTool_h_