00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __igstkCrossHairSpatialObject_h
00019 #define __igstkCrossHairSpatialObject_h
00020
00021 #include "igstkMacros.h"
00022 #include "igstkTransform.h"
00023 #include "igstkSpatialObject.h"
00024 #include "itkGroupSpatialObject.h"
00025 #include "igstkStateMachine.h"
00026
00027 namespace igstk
00028 {
00029
00042 class CrossHairSpatialObject : public SpatialObject
00043 {
00044
00045 public:
00046
00048 igstkStandardClassTraitsMacro( CrossHairSpatialObject, SpatialObject )
00049
00050
00051 typedef igstk::Transform::PointType PointType;
00052 typedef igstk::Transform::VectorType VectorType;
00053
00054 typedef SpatialObject SpatialObjectType;
00055
00056 typedef SpatialObjectType::BoundingBoxType BoundingBoxType;
00057 typedef SpatialObjectType::Pointer SpatialObjectPointerType;
00058
00059 public:
00060
00062 bool IsToolSpatialObjectSet();
00063
00065 bool IsInsideBounds();
00066
00068 void RequestGetCrossHairPosition();
00069
00071 void RequestSetToolSpatialObject( const SpatialObjectType * spatialObject );
00072
00074 void RequestSetBoundingBoxProviderSpatialObject(
00075 const SpatialObjectType * spatialObject );
00076
00078 void RequestSetCursorPosition( PointType point);
00079
00081 igstk::Transform GetToolTransform() const;
00082
00084 double GetBoundingBoxDimensionByIndex(unsigned int index) const;
00085
00086 protected:
00087
00088 CrossHairSpatialObject( void );
00089 ~CrossHairSpatialObject( void );
00090
00092 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00093
00094 igstkObserverMacro( ImageTransform, CoordinateSystemTransformToEvent,
00095 CoordinateSystemTransformToResult );
00096
00097 private:
00098
00100 typedef itk::GroupSpatialObject<3> CrossHairSpatialObjectType;
00101
00102 CrossHairSpatialObject(const Self&);
00103 void operator=(const Self&);
00104
00106 void SetCursorPositionProcessing( void );
00107
00109 void AttemptSetCursorPositionProcessing( void );
00110
00112 void AttemptSetBoundingBoxProviderSpatialObjectProcessing( void );
00113
00115 void SetToolSpatialObjectProcessing( void );
00116
00118 void SetBoundingBoxProviderSpatialObjectProcessing( void );
00119
00121 void GetCrossHairPositionProcessing( void );
00122
00124 void ReportInvalidToolSpatialObjectProcessing( void );
00125
00127 void ReportInvalidBoundingBoxProviderSpatialObjectProcessing( void );
00128
00130 void ReportInvalidCursorPositionProcessing( void );
00131
00133 void ReportInvalidRequestProcessing( void );
00134
00136 void RequestGetToolTransformWRTImageCoordinateSystemProcessing( void );
00137
00139 void RequestUpdateToolTransformWRTImageCoordinateSystem();
00140
00142 void ReceiveToolTransformWRTImageCoordinateSystemProcessing( void );
00143
00144 CrossHairSpatialObjectType::Pointer m_CrossHairSpatialObject;
00145
00146 PointType m_Position;
00147
00149 double m_CursorPositionToBeSet[3];
00150 double m_CursorPosition[3];
00151 bool m_CursorPositionSetFlag;
00152
00154 bool m_ToolSpatialObjectSet;
00155 bool m_InsideBounds;
00156 SpatialObjectPointerType m_ToolSpatialObjectToBeSet;
00157 SpatialObjectPointerType m_ToolSpatialObject;
00158
00160 SpatialObjectPointerType m_BoundingBoxProviderSpatialObjectToBeSet;
00161 SpatialObjectPointerType m_BoundingBoxProviderSpatialObject;
00162
00164 BoundingBoxType::ConstPointer m_BoundingBox;
00165
00167 igstk::Transform m_ToolTransformWRTImageCoordinateSystem;
00168
00170 igstkDeclareStateMacro( Initial );
00171 igstkDeclareStateMacro( BoundingBoxProviderSpatialObjectSet );
00172 igstkDeclareStateMacro( AttemptingToSetBoundingBoxProviderSpatialObject );
00173 igstkDeclareStateMacro( AttemptingToSetCursorPosition );
00174 igstkDeclareStateMacro( AttemptingToGetToolTransformWRTImageCoordinateSystem);
00175
00177 igstkDeclareInputMacro( SetBoundingBoxProviderSpatialObject );
00178 igstkDeclareInputMacro( ValidBoundingBoxProviderSpatialObject );
00179 igstkDeclareInputMacro( InValidBoundingBoxProviderSpatialObject );
00180 igstkDeclareInputMacro( ValidToolSpatialObject );
00181 igstkDeclareInputMacro( InValidToolSpatialObject );
00182 igstkDeclareInputMacro( SetCursorPosition );
00183 igstkDeclareInputMacro( ValidCursorPosition );
00184 igstkDeclareInputMacro( InValidCursorPosition );
00185 igstkDeclareInputMacro( GetToolTransformWRTImageCoordinateSystem );
00186 igstkDeclareInputMacro( ToolTransformWRTImageCoordinateSystem );
00187 igstkDeclareInputMacro( GetCrossHairPosition );
00188
00189
00190
00191 igstkLoadedEventTransductionMacro( CoordinateSystemTransformTo,
00192 ToolTransformWRTImageCoordinateSystem );
00193
00194 igstkObserverConstObjectMacro( BoundingBox,
00195 SpatialObjectType::BoundingBoxEvent,
00196 SpatialObjectType::BoundingBoxType);
00197
00198 inline
00199 PointType
00200 TransformToPoint( igstk::Transform transform )
00201 {
00202 PointType point;
00203 for (int i=0; i<3; i++)
00204 {
00205 point[i] = transform.GetTranslation()[i];
00206 }
00207 return point;
00208 }
00209
00210 };
00211
00212 }
00213
00214 #endif // __igstkCrossHairSpatialObject_h