IGSTK
igstkCrossHairSpatialObject.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Image Guided Surgery Software Toolkit
4  Module: $RCSfile: igstkCrossHairSpatialObject.h,v $
5  Language: C++
6  Date: $Date: 2010-11-16 04:43:41 $
7  Version: $Revision: 1.3 $
8 
9  Copyright (c) ISC Insight Software Consortium. All rights reserved.
10  See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 
18 #ifndef __igstkCrossHairSpatialObject_h
19 #define __igstkCrossHairSpatialObject_h
20 
21 #include "igstkMacros.h"
22 #include "igstkTransform.h"
23 #include "igstkSpatialObject.h"
24 #include "itkGroupSpatialObject.h"
25 #include "igstkStateMachine.h"
26 
27 namespace igstk
28 {
29 
43 {
44 
45 public:
46 
49 
50 
51  typedef igstk::Transform::PointType PointType;
52  typedef igstk::Transform::VectorType VectorType;
53 
55 
56  typedef SpatialObjectType::BoundingBoxType BoundingBoxType;
57  typedef SpatialObjectType::Pointer SpatialObjectPointerType;
58 
59 public:
60 
63 
65  bool IsInsideBounds();
66 
69 
71  void RequestSetToolSpatialObject( const SpatialObjectType * spatialObject );
72 
75  const SpatialObjectType * spatialObject );
76 
78  void RequestSetCursorPosition( PointType point);
79 
81  igstk::Transform GetToolTransform() const;
82 
84  double GetBoundingBoxDimensionByIndex(unsigned int index) const;
85 
86 protected:
87 
88  CrossHairSpatialObject( void );
89  ~CrossHairSpatialObject( void );
90 
92  virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
93 
94  igstkObserverMacro( ImageTransform, CoordinateSystemTransformToEvent,
96 
97 private:
98 
100  typedef itk::GroupSpatialObject<3> CrossHairSpatialObjectType;
101 
102  CrossHairSpatialObject(const Self&); //purposely not implemented
103  void operator=(const Self&); //purposely not implemented
104 
106  void SetCursorPositionProcessing( void );
107 
109  void AttemptSetCursorPositionProcessing( void );
110 
112  void AttemptSetBoundingBoxProviderSpatialObjectProcessing( void );
113 
115  void SetToolSpatialObjectProcessing( void );
116 
118  void SetBoundingBoxProviderSpatialObjectProcessing( void );
119 
121  void GetCrossHairPositionProcessing( void );
122 
124  void ReportInvalidToolSpatialObjectProcessing( void );
125 
127  void ReportInvalidBoundingBoxProviderSpatialObjectProcessing( void );
128 
130  void ReportInvalidCursorPositionProcessing( void );
131 
133  void ReportInvalidRequestProcessing( void );
134 
136  void RequestGetToolTransformWRTImageCoordinateSystemProcessing( void );
137 
139  void RequestUpdateToolTransformWRTImageCoordinateSystem();
140 
142  void ReceiveToolTransformWRTImageCoordinateSystemProcessing( void );
143 
144  CrossHairSpatialObjectType::Pointer m_CrossHairSpatialObject;
145 
146  PointType m_Position;
147 
149  double m_CursorPositionToBeSet[3];
150  double m_CursorPosition[3];
151  bool m_CursorPositionSetFlag;
152 
154  bool m_ToolSpatialObjectSet;
155  bool m_InsideBounds;
156  SpatialObjectPointerType m_ToolSpatialObjectToBeSet;
157  SpatialObjectPointerType m_ToolSpatialObject;
158 
160  SpatialObjectPointerType m_BoundingBoxProviderSpatialObjectToBeSet;
161  SpatialObjectPointerType m_BoundingBoxProviderSpatialObject;
162 
164  BoundingBoxType::ConstPointer m_BoundingBox;
165 
167  igstk::Transform m_ToolTransformWRTImageCoordinateSystem;
168 
170  igstkDeclareStateMacro( Initial );
171  igstkDeclareStateMacro( BoundingBoxProviderSpatialObjectSet );
172  igstkDeclareStateMacro( AttemptingToSetBoundingBoxProviderSpatialObject );
173  igstkDeclareStateMacro( AttemptingToSetCursorPosition );
174  igstkDeclareStateMacro( AttemptingToGetToolTransformWRTImageCoordinateSystem);
175 
177  igstkDeclareInputMacro( SetBoundingBoxProviderSpatialObject );
178  igstkDeclareInputMacro( ValidBoundingBoxProviderSpatialObject );
179  igstkDeclareInputMacro( InValidBoundingBoxProviderSpatialObject );
180  igstkDeclareInputMacro( ValidToolSpatialObject );
181  igstkDeclareInputMacro( InValidToolSpatialObject );
182  igstkDeclareInputMacro( SetCursorPosition );
183  igstkDeclareInputMacro( ValidCursorPosition );
184  igstkDeclareInputMacro( InValidCursorPosition );
185  igstkDeclareInputMacro( GetToolTransformWRTImageCoordinateSystem );
186  igstkDeclareInputMacro( ToolTransformWRTImageCoordinateSystem );
187  igstkDeclareInputMacro( GetCrossHairPosition );
188 
189  // Event macro setup to receive the tool spatial object transform
190  // with respect to the image coordinate system
191  igstkLoadedEventTransductionMacro( CoordinateSystemTransformTo,
192  ToolTransformWRTImageCoordinateSystem );
193 
194  igstkObserverConstObjectMacro( BoundingBox,
195  SpatialObjectType::BoundingBoxEvent,
196  SpatialObjectType::BoundingBoxType);
197 
198  inline
199  PointType
200  TransformToPoint( igstk::Transform transform )
201  {
202  PointType point;
203  for (unsigned int i=0; i<3; i++)
204  {
205  point[i] = transform.GetTranslation()[i];
206  }
207  return point;
208  }
209 
210 };
211 
212 } // end namespace igstk
213 
214 #endif // __igstkCrossHairSpatialObject_h