00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __igstkReslicerPlaneSpatialObject_h
00019 #define __igstkReslicerPlaneSpatialObject_h
00020
00021 #include "igstkMacros.h"
00022 #include "igstkTransform.h"
00023 #include "igstkSpatialObject.h"
00024 #include "igstkStateMachine.h"
00025
00026
00027 namespace igstk
00028 {
00029
00063 class ReslicerPlaneSpatialObject : public SpatialObject
00064 {
00065
00066 public:
00067
00069 igstkStandardClassTraitsMacro( ReslicerPlaneSpatialObject, SpatialObject )
00070
00071 public:
00072
00074 typedef SpatialObject BoundingBoxProviderSpatialObjectType;
00075 typedef BoundingBoxProviderSpatialObjectType::ConstPointer
00076 BoundingBoxProviderSpatialObjectConstPointer;
00077
00078 typedef SpatialObject ToolSpatialObjectType;
00079 typedef ToolSpatialObjectType::Pointer ToolSpatialObjectPointer;
00080
00081 typedef igstk::Transform::VectorType VectorType;
00082 typedef igstk::Transform::VersorType VersorType;
00083
00084 igstkLoadedEventMacro( ToolTipPositionEvent, IGSTKEvent, VectorType );
00085 igstkLoadedEventMacro( ReslicerPlaneNormalEvent, IGSTKEvent, VectorType );
00086 igstkLoadedEventMacro( ReslicerPlaneCenterEvent, IGSTKEvent, VectorType );
00087
00089 enum ReslicingMode
00090 {
00091 Orthogonal,
00092 OffOrthogonal,
00093 Oblique
00094 };
00095
00097 enum OrientationType
00098 {
00099 Axial,
00100 Sagittal,
00101 Coronal,
00102 OffAxial,
00103 OffSagittal,
00104 OffCoronal,
00105 PlaneOrientationWithZAxesNormal,
00106 PlaneOrientationWithXAxesNormal,
00107 PlaneOrientationWithYAxesNormal
00108 };
00109
00111 void RequestSetReslicingMode( ReslicingMode reslicingMode );
00112
00114 void RequestSetOrientationType( OrientationType orientationType );
00115
00117 void RequestSetBoundingBoxProviderSpatialObject( const
00118 BoundingBoxProviderSpatialObjectType * boundingBoxProviderSpatialObject );
00119
00124 void RequestSetToolSpatialObject( const ToolSpatialObjectType *
00125 toolSpatialObject );
00126
00128 void RequestSetCursorPosition( const double *point);
00129
00131 void RequestGetToolPosition();
00132
00134 void RequestGetReslicingPlaneParameters();
00135
00137 void RequestComputeReslicingPlane();
00138
00140 OrientationType GetOrientationType() const;
00141
00143 ReslicingMode GetReslicingMode() const;
00144
00147 void RequestUpdateToolTransformWRTImageCoordinateSystem();
00148
00150 igstk::Transform GetToolTransform() const;
00151
00153 VectorType GetToolPosition() const;
00154
00156 bool IsToolSpatialObjectSet();
00157
00159 igstkLoggerMacro();
00160
00161 protected:
00162
00164 ReslicerPlaneSpatialObject( void );
00165
00167 ~ReslicerPlaneSpatialObject( void );
00168
00170 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00171
00172 private:
00173 ReslicerPlaneSpatialObject(const Self&);
00174 void operator=(const Self&);
00175
00177 igstkDeclareInputMacro( SetBoundingBoxProviderSpatialObject );
00178 igstkDeclareInputMacro( ValidReslicingMode );
00179 igstkDeclareInputMacro( InValidReslicingMode );
00180 igstkDeclareInputMacro( ValidOrientationType );
00181 igstkDeclareInputMacro( InValidOrientationType );
00182 igstkDeclareInputMacro( ValidBoundingBoxProviderSpatialObject );
00183 igstkDeclareInputMacro( InValidBoundingBoxProviderSpatialObject );
00184 igstkDeclareInputMacro( ValidToolSpatialObject );
00185 igstkDeclareInputMacro( InValidToolSpatialObject );
00186 igstkDeclareInputMacro( SetCursorPosition );
00187 igstkDeclareInputMacro( ValidCursorPosition );
00188 igstkDeclareInputMacro( InValidCursorPosition );
00189 igstkDeclareInputMacro( GetToolPosition );
00190 igstkDeclareInputMacro( GetReslicingPlaneParameters );
00191 igstkDeclareInputMacro( GetToolTransformWRTImageCoordinateSystem );
00192 igstkDeclareInputMacro( ToolTransformWRTImageCoordinateSystem );
00193 igstkDeclareInputMacro( ComputeReslicePlane );
00194
00196 igstkDeclareStateMacro( Initial );
00197 igstkDeclareStateMacro( ReslicingModeSet );
00198 igstkDeclareStateMacro( OrientationTypeSet );
00199 igstkDeclareStateMacro( BoundingBoxProviderSpatialObjectSet );
00200 igstkDeclareStateMacro( AttemptingToSetCursorPosition );
00201 igstkDeclareStateMacro( AttemptingToSetBoundingBoxProviderSpatialObject );
00202 igstkDeclareStateMacro( AttemptingToGetToolTransformWRTImageCoordinateSystem);
00203
00205 void NoProcessing();
00206
00208 void SetOrientationTypeProcessing( void );
00209
00211 void SetReslicingModeProcessing( void );
00212
00214 void AttemptSetBoundingBoxProviderSpatialObjectProcessing();
00215
00217 void AttemptSetCursorPositionProcessing( void );
00218 void SetCursorPositionProcessing( void );
00219
00221 void ComputeReslicePlaneProcessing();
00222
00224 void SetBoundingBoxProviderSpatialObjectProcessing( void );
00225
00227 void SetToolSpatialObjectProcessing( void );
00228
00230 void ReportInvalidReslicingModeProcessing( void );
00231
00233 void ReportInvalidOrientationTypeProcessing( void );
00234
00236 void ReportInvalidBoundingBoxProviderSpatialObjectProcessing( void );
00237
00239 void ReportInvalidToolSpatialObjectProcessing( void );
00240
00242 void ReportInvalidCursorPositionProcessing( void );
00243
00245 void ReportInvalidRequestProcessing( void );
00246
00249 void RequestGetToolTransformWRTImageCoordinateSystemProcessing( void );
00250
00253 void ReceiveToolTransformWRTImageCoordinateSystemProcessing( void );
00254
00256 void ReportToolPositionProcessing( void );
00257
00259 void ReportReslicingPlaneParametersProcessing( void );
00260
00262 void ComputeOrthogonalReslicingPlane();
00263 void ComputeObliqueReslicingPlane();
00264 void ComputeOffOrthogonalReslicingPlane();
00265
00267 ReslicingMode m_ReslicingModeToBeSet;
00268 ReslicingMode m_ReslicingMode;
00269
00271 OrientationType m_OrientationTypeToBeSet;
00272 OrientationType m_OrientationType;
00273
00275 BoundingBoxProviderSpatialObjectConstPointer
00276 m_BoundingBoxProviderSpatialObjectToBeSet;
00277 BoundingBoxProviderSpatialObjectConstPointer
00278 m_BoundingBoxProviderSpatialObject;
00279
00281 ToolSpatialObjectPointer m_ToolSpatialObjectToBeSet;
00282 ToolSpatialObjectPointer m_ToolSpatialObject;
00283
00285 VectorType m_PlaneNormal;
00286 VectorType m_PlaneCenter;
00287
00288
00289
00290 igstkLoadedEventTransductionMacro( CoordinateSystemTransformTo,
00291 ToolTransformWRTImageCoordinateSystem );
00292
00293
00294
00295
00296 igstk::Transform m_ToolTransformWRTImageCoordinateSystem;
00297
00299 igstkObserverObjectMacro( BoundingBox, SpatialObject::BoundingBoxEvent,
00300 SpatialObject::BoundingBoxType);
00301
00303 double m_CursorPositionToBeSet[3];
00304 double m_CursorPosition[3];
00305 bool m_CursorPositionSetFlag;
00306
00307 VectorType m_ToolPosition;
00308
00309 double m_Bounds[6];
00310
00311 BoundingBoxType::Pointer m_BoundingBox;
00312
00314 bool m_ToolSpatialObjectSet;
00315
00316 };
00317
00318 }
00319
00320 #endif // __igstkReslicerPlaneSpatialObject_h