00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __igstkEvents_h
00018 #define __igstkEvents_h
00019
00023 #include "igstkTransform.h"
00024 #include "vtkImageData.h"
00025
00026 #include "vtkCamera.h"
00027
00028 namespace igstk
00029 {
00030 #define igstkEventMacro( classname, superclassname ) \
00031 itkEventMacro( classname, superclassname )
00032
00033 #define igstkLoadedEventMacro( name, superclass, payloadtype ) \
00034 class name : public superclass \
00035 { \
00036 public: \
00037 typedef name Self; \
00038 typedef superclass Superclass; \
00039 typedef payloadtype PayloadType; \
00040 name() {} \
00041 virtual ~name() {} \
00042 virtual const char * GetEventName() const { return #name; } \
00043 virtual bool CheckEvent(const ::itk::EventObject* e) const \
00044 { return dynamic_cast<const Self*>(e); } \
00045 virtual ::itk::EventObject* MakeObject() const \
00046 { return new Self; } \
00047 name(const Self&s) :superclass(s){}; \
00048 const PayloadType & Get() const \
00049 { return m_Payload; } \
00050 void Set( const payloadtype & _var ) \
00051 { m_Payload = _var; } \
00052 private: \
00053 void operator=(const Self&); \
00054 PayloadType m_Payload; \
00055 };
00056
00057 namespace EventHelperType
00058 {
00059 typedef itk::Point< double, 3 > PointType;
00060 typedef std::string StringType;
00061 typedef vtkImageData * VTKImagePointerType;
00062
00063 typedef vtkCamera * VTKCameraPointerType;
00064 typedef unsigned int UnsignedIntType;
00065 typedef signed int SignedIntType;
00066 typedef float FloatType;
00067 typedef double DoubleType;
00068 typedef struct {
00069 unsigned int minimum;
00070 unsigned int maximum;
00071 } IntegerBoundsType;
00072 typedef struct {
00073 double xmin;
00074 double xmax;
00075 double ymin;
00076 double ymax;
00077 double zmin;
00078 double zmax;
00079 } ImageBoundsType;
00080 typedef struct {
00081 unsigned int xmin;
00082 unsigned int xmax;
00083 unsigned int ymin;
00084 unsigned int ymax;
00085 unsigned int zmin;
00086 unsigned int zmax;
00087 } ImageExtentType;
00088 }
00089
00090 #define igstkLoadedObjectEventMacro( name, superclass, payloadtype ) \
00091 class name : public superclass \
00092 { \
00093 public: \
00094 typedef name Self; \
00095 typedef superclass Superclass; \
00096 typedef payloadtype PayloadType; \
00097 name() {} \
00098 virtual ~name() {} \
00099 virtual const char * GetEventName() const { return #name; } \
00100 virtual bool CheckEvent(const ::itk::EventObject* e) const \
00101 { return dynamic_cast<const Self*>(e); } \
00102 virtual ::itk::EventObject* MakeObject() const \
00103 { return new Self; } \
00104 name(const Self&s) :superclass(s){}; \
00105 PayloadType* Get() const\
00106 { return m_Payload.GetPointer(); } \
00107 void Set( payloadtype * _var ) \
00108 { m_Payload = _var; } \
00109 private: \
00110 void operator=(const Self&); \
00111 PayloadType::Pointer m_Payload; \
00112 };
00113
00114
00115 #define igstkLoadedConstObjectEventMacro( name, superclass, payloadtype ) \
00116 class name : public superclass \
00117 { \
00118 public: \
00119 typedef name Self; \
00120 typedef superclass Superclass; \
00121 typedef payloadtype PayloadType; \
00122 name() {} \
00123 virtual ~name() {} \
00124 virtual const char * GetEventName() const { return #name; } \
00125 virtual bool CheckEvent(const ::itk::EventObject* e) const \
00126 { return dynamic_cast<const Self*>(e); } \
00127 virtual ::itk::EventObject* MakeObject() const \
00128 { return new Self; } \
00129 name(const Self&s) :superclass(s){}; \
00130 const PayloadType* Get() const\
00131 { return m_Payload.GetPointer(); } \
00132 void Set( const payloadtype * _var ) \
00133 { m_Payload = _var; } \
00134 private: \
00135 void operator=(const Self&); \
00136 PayloadType::ConstPointer m_Payload; \
00137 };
00138
00139
00140 #define igstkLoadedTemplatedObjectEventMacro( name, superclass, payloadtype ) \
00141 class name : public superclass \
00142 { \
00143 public: \
00144 typedef name Self; \
00145 typedef superclass Superclass; \
00146 typedef payloadtype PayloadType; \
00147 name() {} \
00148 virtual ~name() {} \
00149 virtual const char * GetEventName() const { return #name; } \
00150 virtual bool CheckEvent(const ::itk::EventObject* e) const \
00151 { return dynamic_cast<const Self*>(e); } \
00152 virtual ::itk::EventObject* MakeObject() const \
00153 { return new Self; } \
00154 name(const Self&s) :superclass(s){}; \
00155 PayloadType * Get() const\
00156 { return m_Payload.GetPointer(); } \
00157 void Set( payloadtype * _var ) \
00158 { m_Payload = _var; } \
00159 private: \
00160 void operator=(const Self&); \
00161 typename PayloadType::Pointer m_Payload; \
00162 };
00163
00164 #define igstkLoadedTemplatedConstObjectEventMacro( name, superclass,\
00165 payloadtype ) \
00166 class name : public superclass \
00167 { \
00168 public: \
00169 typedef name Self; \
00170 typedef superclass Superclass; \
00171 typedef payloadtype PayloadType; \
00172 name() {} \
00173 virtual ~name() {} \
00174 virtual const char * GetEventName() const { return #name; } \
00175 virtual bool CheckEvent(const ::itk::EventObject* e) const \
00176 { return dynamic_cast<const Self*>(e); } \
00177 virtual ::itk::EventObject* MakeObject() const \
00178 { return new Self; } \
00179 name(const Self&s) :superclass(s){}; \
00180 const PayloadType * Get() const\
00181 { return m_Payload.GetPointer(); } \
00182 void Set( const payloadtype * _var ) \
00183 { m_Payload = _var; } \
00184 private: \
00185 void operator=(const Self&); \
00186 typename PayloadType::ConstPointer m_Payload; \
00187 };
00188
00189 igstkEventMacro( IGSTKEvent, itk::UserEvent );
00190 igstkEventMacro( IGSTKErrorEvent, IGSTKEvent );
00191 igstkEventMacro( PulseEvent, IGSTKEvent );
00192 igstkEventMacro( RefreshEvent, IGSTKEvent );
00193 igstkEventMacro( CompletedEvent, IGSTKEvent );
00194 igstkEventMacro( InputOutputErrorEvent, IGSTKErrorEvent );
00195 igstkEventMacro( InputOutputTimeoutEvent, IGSTKErrorEvent );
00196 igstkEventMacro( OpenPortErrorEvent, IGSTKErrorEvent );
00197 igstkEventMacro( ClosePortErrorEvent, IGSTKErrorEvent );
00198 igstkEventMacro( InvalidRequestErrorEvent, IGSTKErrorEvent );
00199 igstkEventMacro( TransformNotAvailableEvent, InvalidRequestErrorEvent );
00200 igstkEventMacro( TransformExpiredErrorEvent, TransformNotAvailableEvent );
00201
00202 igstkLoadedEventMacro( PointEvent, IGSTKEvent, EventHelperType::PointType );
00203 igstkLoadedEventMacro( LandmarkRegistrationErrorEvent, IGSTKErrorEvent,
00204 EventHelperType::DoubleType );
00205 igstkLoadedEventMacro( StringEvent, IGSTKEvent, EventHelperType::StringType );
00206 igstkLoadedEventMacro( UnsignedIntEvent, IGSTKEvent,
00207 EventHelperType::UnsignedIntType );
00208
00209 igstkLoadedEventMacro( IntegerBoundsEvent, IGSTKEvent,
00210 EventHelperType::IntegerBoundsType );
00211
00212 igstkLoadedEventMacro( ImageBoundsEvent, IGSTKEvent,
00213 EventHelperType::ImageBoundsType );
00214
00215 igstkLoadedEventMacro( ImageExtentEvent, IGSTKEvent,
00216 EventHelperType::ImageExtentType );
00217
00218 igstkLoadedEventMacro( VTKImageModifiedEvent, IGSTKEvent,
00219 EventHelperType::VTKImagePointerType );
00220
00221
00222
00223
00224 igstkLoadedEventMacro( VTKCameraModifiedEvent, IGSTKEvent,
00225 EventHelperType::VTKCameraPointerType );
00226
00227 igstkLoadedEventMacro( DoubleTypeEvent, IGSTKEvent,
00228 EventHelperType::DoubleType );
00229
00230 igstkLoadedEventMacro( IGSTKErrorWithStringEvent, IGSTKErrorEvent,
00231 EventHelperType::StringType );
00232
00233 igstkEventMacro( AxialSliceBoundsEvent, IntegerBoundsEvent );
00234 igstkEventMacro( SagittalSliceBoundsEvent, IntegerBoundsEvent );
00235 igstkEventMacro( CoronalSliceBoundsEvent, IntegerBoundsEvent );
00236 }
00237 #endif