00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __igstkImageSpatialObject_h
00018 #define __igstkImageSpatialObject_h
00019
00020 #include "igstkSpatialObject.h"
00021
00022 #include "itkImageSpatialObject.h"
00023 #include "itkOrientedImage.h"
00024
00025 #include "itkVTKImageExport.h"
00026 #include "vtkImageImport.h"
00027 #include "vtkImageData.h"
00028
00029 namespace igstk
00030 {
00031
00032 namespace Friends
00033 {
00034 class ImageReaderToImageSpatialObject;
00035 class UltrasoundImageSimulatorToImageSpatialObject;
00036 }
00037
00038
00051 template < class TPixelType, unsigned int TDimension >
00052 class ImageSpatialObject
00053 : public SpatialObject
00054 {
00055
00056 public:
00057
00059 igstkStandardTemplatedClassTraitsMacro( ImageSpatialObject, SpatialObject )
00060
00061 public:
00062
00063 typedef itk::ImageSpatialObject< TDimension, TPixelType >
00064 ImageSpatialObjectType;
00065
00066 typedef typename itk::OrientedImage< TPixelType, TDimension > ImageType;
00067 typedef typename ImageType::ConstPointer ImageConstPointer;
00068 typedef typename ImageSpatialObjectType::PointType PointType;
00069 typedef typename ImageType::IndexType IndexType;
00070 typedef typename itk::ContinuousIndex< double, 3 > ContinuousIndexType;
00071
00073 virtual bool IsInside( const PointType & point ) const;
00074
00076 virtual void TransformIndexToPhysicalPoint ( const IndexType & index,
00077 PointType & point ) const;
00078
00080 virtual bool TransformPhysicalPointToIndex ( const PointType & point,
00081 IndexType & index ) const;
00082
00084 virtual bool TransformPhysicalPointToContinuousIndex (
00085 const PointType & point,
00086 ContinuousIndexType & index ) const;
00087
00089 virtual bool IsEmpty() const;
00090
00093 igstkFriendClassMacro( igstk::Friends::ImageReaderToImageSpatialObject );
00094
00097 igstkFriendClassMacro(
00098 igstk::Friends::UltrasoundImageSimulatorToImageSpatialObject );
00099
00102 void RequestGetITKImage();
00103 void RequestGetITKImage() const;
00104
00107 void RequestGetVTKImage();
00108 void RequestGetVTKImage() const;
00109
00112 void RequestGetImageExtent();
00113 void RequestGetImageExtent() const;
00114
00119 void RequestGetImageTransform();
00120 void RequestGetImageTransform() const;
00121
00123 igstkLoadedTemplatedConstObjectEventMacro( ITKImageModifiedEvent,
00124 IGSTKEvent, ImageType);
00125
00126 igstkEventMacro( ImageNotAvailableEvent, IGSTKErrorEvent );
00127
00128 protected:
00129
00133 virtual bool IsInternalTransformRequired();
00134
00138 virtual Transform GetInternalTransform() const;
00139
00140 ImageSpatialObject( void );
00141 ~ImageSpatialObject( void );
00142
00144 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00145
00146 private:
00147
00149 typename ImageSpatialObjectType::Pointer m_ImageSpatialObject;
00150
00152 void RequestSetImage( const ImageType * image );
00153
00155 igstkLoggerMacro();
00156
00157
00158 private:
00159
00162 ImageSpatialObject(const Self&);
00163 void operator=(const Self&);
00164
00165 private:
00166
00168 igstkDeclareInputMacro( ValidImage );
00169 igstkDeclareInputMacro( InvalidImage );
00170 igstkDeclareInputMacro( RequestITKImage );
00171 igstkDeclareInputMacro( RequestVTKImage );
00172 igstkDeclareInputMacro( RequestImageExtent );
00173 igstkDeclareInputMacro( RequestImageTransform );
00174
00176 igstkDeclareStateMacro( Initial );
00177 igstkDeclareStateMacro( ImageSet );
00178
00180 void SetImageProcessing();
00181 void ReportInvalidImageProcessing();
00182
00184 void ReportITKImageProcessing();
00185 void ReportVTKImageProcessing();
00186 void ReportImageExtentProcessing();
00187 void ReportImageNotAvailableProcessing();
00188
00192 void ReportImageTransformProcessing();
00193
00196 ImageConstPointer m_ImageToBeSet;
00197 ImageConstPointer m_Image;
00198
00201 typedef itk::VTKImageExport< ImageType > ITKExportFilterType;
00202 typedef vtkImageImport VTKImportFilterType;
00203
00204 typedef typename ITKExportFilterType::Pointer ITKExportFilterPointer;
00205 typedef VTKImportFilterType * VTKImportFilterPointer;
00206
00208 ITKExportFilterPointer m_ItkExporter;
00209 VTKImportFilterPointer m_VtkImporter;
00210
00211 Transform m_ImageTransform;
00212 CoordinateSystem::Pointer m_DICOMCoordinateSystem;
00213
00214 };
00215
00216 }
00217
00218 #ifndef IGSTK_MANUAL_INSTANTIATION
00219 #include "igstkImageSpatialObject.txx"
00220 #endif
00221
00222 #endif // __igstkImageSpatialObject_h