IGSTK
|
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