IGSTK
igstkTransformObserver.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Image Guided Surgery Software Toolkit
4  Module: $RCSfile: igstkTransformObserver.h,v $
5  Language: C++
6  Date: $Date: 2011-01-18 21:40:17 $
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 #ifndef __igstkTransformObserver_h
18 #define __igstkTransformObserver_h
19 
20 #if defined(_MSC_VER)
21 // Warning about: identifier was truncated to '255' characters
22 // in the debug information (MVC6.0 Debug)
23 #pragma warning( disable : 4786 )
24 #endif
25 
26 #include "igstkTransform.h"
29 
30 namespace igstk
31 {
32 
33 class TransformObserver : public ::itk::Command
34 {
35 public:
37  igstkNewMacro( Self );
38 
39 protected:
41  {
42  m_GotTransform = false;
43  m_GotTransformNotAvailableMessage = false;
44  }
46 public:
47 
48  typedef CoordinateSystemTransformToEvent PositiveEventType;
49  typedef TransformNotAvailableEvent NegativeEventType;
50 
55 
56  void ObserveTransformEventsFrom( Object * objectToObserve )
57  {
58  if( objectToObserve )
59  {
60  objectToObserve->AddObserver( PositiveEventType(), this );
61  objectToObserve->AddObserver( NegativeEventType(), this );
62  }
63  }
64 
65  void Execute(itk::Object *caller, const itk::EventObject & event)
66  {
67  const itk::Object * constCaller = caller;
68  this->Execute( constCaller, event );
69  }
70 
71  void Execute(const itk::Object * itkNotUsed(caller),
72  const itk::EventObject & event)
73  {
74 
75  m_GotTransform = false;
76  m_GotTransformNotAvailableMessage = false;
77 
78  if( PositiveEventType().CheckEvent( &event ) )
79  {
80  const PositiveEventType * transformEvent =
81  dynamic_cast< const PositiveEventType *>( &event );
82  if( transformEvent )
83  {
84  m_TransformBetweenCoordinateSystems = transformEvent->Get();
85  this->m_Transform = m_TransformBetweenCoordinateSystems.GetTransform();
86  m_GotTransform = true;
87  m_GotTransformNotAvailableMessage = false;
88  }
89  }
90 
91  if( NegativeEventType().CheckEvent( &event ) )
92  {
93  const NegativeEventType * negativeEvent =
94  dynamic_cast< const NegativeEventType *>( &event );
95  if( negativeEvent )
96  {
97  m_GotTransform = false;
98  m_GotTransformNotAvailableMessage = true;
99  }
100  }
101  }
102 
103  bool GotTransform() const
104  {
105  return m_GotTransform;
106  }
107 
109  {
110  return m_GotTransformNotAvailableMessage;
111  }
112 
113  const Transform & GetTransform() const
114  {
115  return this->m_Transform;
116  }
117 
119  {
120  return m_TransformBetweenCoordinateSystems;
121  }
122 
123  void Clear()
124  {
125  this->m_GotTransform = false;
126  this->m_GotTransformNotAvailableMessage = false;
127  }
128 
129 private:
130 
131  PayloadType m_TransformBetweenCoordinateSystems;
132  Transform m_Transform;
133 
134  bool m_GotTransform;
135  bool m_GotTransformNotAvailableMessage;
136 };
137 
138 } // end namespace igstk
139 
140 #endif
Base class for all the IGSTK classes.
Definition: igstkObject.h:40
const Transform & GetTransform() const
Returns the computed transform.
igstkStandardClassBasicTraitsMacro(TransformObserver,::itk::Command)
bool GotTransformNotAvailableMessage() const
TransformNotAvailableEvent NegativeEventType
#define igstkNewMacro(x)
New Macro creates a new object of a class that is using SmartPointers.
Definition: igstkMacros.h:115
CoordinateSystemTransformToEvent PositiveEventType
void ObserveTransformEventsFrom(Object *objectToObserve)
A class representing a 3D Rigid transform.
const PayloadType & GetTransformBetweenCoordinateSystems() const
CoordinateSystemTransformToResult PayloadType
Payload contained in an event that returns a valid transform.
void Execute(itk::Object *caller, const itk::EventObject &event)
This class encapsulates the results of asking the coordinate reference system for a transform to anot...
void Execute(const itk::Object *itkNotUsed(caller), const itk::EventObject &event)
const Transform & GetTransform() const