00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __igstkUltrasoundImageSimulator_h
00018 #define __igstkUltrasoundImageSimulator_h
00019
00020 #include "igstkMacros.h"
00021 #include "igstkImageSpatialObject.h"
00022 #include "igstkUSImageObject.h"
00023 #include "igstkStateMachine.h"
00024
00025
00026 #include "vtkImageReslice.h"
00027 #include "itkVTKImageImport.h"
00028 #include "vtkImageExport.h"
00029
00030 namespace igstk
00031 {
00032
00033 namespace Friends
00034 {
00035
00047 class UltrasoundImageSimulatorToImageSpatialObject
00048 {
00049
00050 public:
00051 template < class TUltrasoundImageSimulator, class TImageSpatialObject >
00052 static void
00053 GetVTKImage( const TImageSpatialObject * imageSpatialObject,
00054 TUltrasoundImageSimulator * ultrasoundImageSimulator )
00055 {
00056 ultrasoundImageSimulator->SetImage(imageSpatialObject->GetVTKImageData());
00057 }
00058
00059 template < class TUltrasoundImageSimulator, class TImageSpatialObject >
00060 static void
00061 SetITKImage( const TUltrasoundImageSimulator * simulator,
00062 TImageSpatialObject * imageSpatialObject )
00063 {
00064 imageSpatialObject->RequestSetImage( simulator->GetITKImage() );
00065 }
00066
00067 };
00068
00069 }
00070
00071
00087 template < class TImageGeometricModel >
00088 class UltrasoundImageSimulator : public Object
00089 {
00090
00091 public:
00092
00094 igstkStandardTemplatedClassTraitsMacro(
00095 UltrasoundImageSimulator,Object)
00096
00097 public:
00098
00099 typedef TImageGeometricModel ImageGeometricModelType;
00100 typedef Transform TransformType;
00101
00102
00104 void RequestSetTransform( const TransformType & transform );
00105
00107 void RequestSetImageGeometricModel( const ImageGeometricModelType *
00108 imageGeometricObject );
00109
00111 void RequestReslice();
00112
00114 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
00115
00118 igstkFriendClassMacro( igstk::Friends::\
00119 UltrasoundImageSimulatorToImageSpatialObject );
00120
00122 void RequestGetImage();
00123
00125 igstkLoadedObjectEventMacro( ImageModifiedEvent, IGSTKEvent, USImageObject);
00126
00127 protected:
00128
00130 UltrasoundImageSimulator();
00131
00133 ~UltrasoundImageSimulator();
00134
00136 typedef typename ImageGeometricModelType::ConstPointer
00137 ImageGeometricModelConstPointer;
00138
00139 typedef typename ImageGeometricModelType::PointType PointType;
00140 typedef typename USImageObject::ImageType USImageType;
00141 typedef typename ImageGeometricModelType::ImageType MRImageType;
00142
00143 private:
00144
00145 UltrasoundImageSimulator(const Self&);
00146 void operator=(const Self&);
00147
00149 ImageGeometricModelConstPointer m_ImageGeometricModel;
00150 ImageGeometricModelConstPointer m_ImageGeometricModelToAdd;
00151
00153 vtkImageData * m_ImageData;
00154 vtkImageData * m_ReslicedImageData;
00155 vtkImageReslice * m_ImageReslice;
00156
00157 typedef itk::VTKImageImport<MRImageType> VTKImageImporterType;
00158
00159 typename VTKImageImporterType::Pointer m_VTKImageImporter;
00160
00161 TransformType m_Transform;
00162 TransformType m_TransformToBeSet;
00163
00164 USImageObject::Pointer m_USImage;
00165 USImageType::Pointer m_RescaledUSImage;
00166 vtkImageExport* m_VTKExporter;
00167
00169 void NoProcessing();
00170
00173 void SetImageGeometricModelProcessing();
00174
00176 void SetTransformProcessing();
00177
00179 void ResliceProcessing ();
00180
00183 void SetImage( const vtkImageData * image );
00184
00186 void ReportImageProcessing();
00187
00190 igstkObserverMacro( VTKImage, VTKImageModifiedEvent,
00191 EventHelperType::VTKImagePointerType);
00192
00193 private:
00194
00196 igstkDeclareInputMacro( ValidImageSpatialObject );
00197 igstkDeclareInputMacro( NullImageSpatialObject );
00198
00199 igstkDeclareInputMacro( ValidTransform );
00200 igstkDeclareInputMacro( InvalidTransform );
00201
00202 igstkDeclareInputMacro( EmptyImageSpatialObject );
00203 igstkDeclareInputMacro( ConnectVTKPipeline );
00204
00205 igstkDeclareInputMacro( Reslice );
00206 igstkDeclareInputMacro( GetImage );
00207
00209 igstkDeclareStateMacro( NullImageSpatialObject );
00210 igstkDeclareStateMacro( ValidImageSpatialObject );
00211
00212 igstkDeclareStateMacro( NullTransform );
00213 igstkDeclareStateMacro( ValidTransform );
00214
00215
00216 const USImageType * GetITKImage() const;
00217
00218 typename VTKImageObserver::Pointer m_VTKImageObserver;
00219
00220 };
00221
00222 }
00223
00224 #ifndef IGSTK_MANUAL_INSTANTIATION
00225 #include "igstkUltrasoundImageSimulator.txx"
00226 #endif
00227
00228
00229 #endif // __igstkUltrasoundImageSimulator_h