IGSTK
/tmp/buildd/igstk-4.4.0/Source/igstkUltrasoundImageSimulator.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Image Guided Surgery Software Toolkit
00004   Module:    $RCSfile: igstkUltrasoundImageSimulator.h,v $
00005   Language:  C++
00006   Date:      $Date: 2008-02-11 01:41:51 $
00007   Version:   $Revision: 1.4 $
00008 
00009   Copyright (c) ISC  Insight Software Consortium.  All rights reserved.
00010   See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00014      PURPOSE.  See the above copyright notices for more information.
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 }; // end of UltrasoundImageSimulatorToImageSpatialObject class
00068 
00069 } // end of Friend namespace
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&);   // purposely not implemented
00146   void operator=(const Self&);             // purposely not implemented
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   // FIXME : This must be replaced with StateMachine logic
00216   const USImageType * GetITKImage() const;
00217 
00218   typename VTKImageObserver::Pointer m_VTKImageObserver;
00219 
00220 };
00221 
00222 } // end namespace igstk
00223 
00224 #ifndef IGSTK_MANUAL_INSTANTIATION
00225 #include "igstkUltrasoundImageSimulator.txx"
00226 #endif
00227 
00228 
00229 #endif // __igstkUltrasoundImageSimulator_h