IGSTK
|
00001 /*========================================================================= 00002 00003 Program: Image Guided Surgery Software Toolkit 00004 Module: $RCSfile: igstkReslicerPlaneSpatialObject.h,v $ 00005 Language: C++ 00006 Date: $Date: 2009-06-15 21:35:41 $ 00007 Version: $Revision: 1.2 $ 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 __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&); //purposely not implemented 00174 void operator=(const Self&); //purposely not implemented 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 // Event macro setup to receive the tool spatial object transform 00289 // with respect to the reference spatial object coordinate system 00290 igstkLoadedEventTransductionMacro( CoordinateSystemTransformTo, 00291 ToolTransformWRTImageCoordinateSystem ); 00292 00293 00294 // Tool transform with respect to the reference spatial object 00295 // coordinate system 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 } // end namespace igstk 00319 00320 #endif // __igstkReslicerPlaneSpatialObject_h