IGSTK
|
00001 /*========================================================================= 00002 00003 Program: Image Guided Surgery Software Toolkit 00004 Module: $RCSfile: igstkImageResliceObjectRepresentation.h,v $ 00005 Language: C++ 00006 Date: $Date: 2011-02-09 10:13:37 $ 00007 Version: $Revision: 1.3 $ 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 __igstkImageResliceObjectRepresentation_h 00018 #define __igstkImageResliceObjectRepresentation_h 00019 00020 #include "igstkMacros.h" 00021 #include "igstkObjectRepresentation.h" 00022 #include "igstkImageSpatialObject.h" 00023 #include "igstkStateMachine.h" 00024 #include "igstkReslicerPlaneSpatialObject.h" 00025 00026 class vtkLookupTable; 00027 class vtkImageMapToColors; 00028 class vtkImageReslice; 00029 class vtkTexture; 00030 class vtkActor; 00031 class vtkPlaneSource; 00032 class vtkOutlineFilter; 00033 class vtkPlane; 00034 class vtkPolyData; 00035 class vtkCutter; 00036 class vtkSphereSource; 00037 class vtkProperty; 00038 class vtkImageMapToColors; 00039 00040 00041 namespace igstk 00042 { 00043 00044 #define VTK_NEAREST_RESLICE 0 00045 #define VTK_LINEAR_RESLICE 1 00046 #define VTK_CUBIC_RESLICE 2 00047 00054 template < class TImageSpatialObject > 00055 class ImageResliceObjectRepresentation : public ObjectRepresentation 00056 { 00057 00058 public: 00059 00061 igstkStandardTemplatedClassTraitsMacro( 00062 ImageResliceObjectRepresentation,ObjectRepresentation ) 00063 00064 public: 00065 00066 typedef TImageSpatialObject ImageSpatialObjectType; 00067 00068 typedef typename ImageSpatialObjectType::ConstPointer 00069 ImageSpatialObjectConstPointer; 00070 00071 typedef typename ImageSpatialObjectType::PointType PointType; 00072 00073 typedef ReslicerPlaneSpatialObject ReslicerPlaneType; 00074 00075 typedef ReslicerPlaneType::Pointer ReslicerPlanePointerType; 00076 00077 typedef ReslicerPlaneType::VectorType VectorType; 00078 00080 Pointer Copy() const; 00081 00082 void RequestSetReslicePlaneSpatialObject( const ReslicerPlaneType * 00083 planeSpatialObject); 00084 00086 void RequestSetImageSpatialObject( const ImageSpatialObjectType * 00087 ImageSpatialObject ); 00088 00090 void SetWindowLevel( double window, double level ); 00091 00093 void SetFrameColor(ColorScalarType r, ColorScalarType g, ColorScalarType b); 00094 00096 void SetRestrictPlaneToVolume(int value); 00097 00099 void SetTextureInterpolate(int value); 00100 00105 void SetResliceInterpolate(int value); 00106 00108 virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const; 00109 00110 00111 protected: 00112 00114 ImageResliceObjectRepresentation(); 00115 00117 ~ImageResliceObjectRepresentation(); 00118 00120 void DeleteActors(); 00121 00123 void CreateActors(); 00124 00126 ColorScalarType GetFrameRed() const; 00127 ColorScalarType GetFrameGreen() const; 00128 ColorScalarType GetFrameBlue() const; 00129 00132 virtual bool VerifyTimeStamp() const; 00133 00134 private: 00135 00136 ImageResliceObjectRepresentation(const Self&); 00137 void operator=(const Self&); //purposely not implemented 00138 00140 ImageSpatialObjectConstPointer m_ImageSpatialObject; 00141 ImageSpatialObjectConstPointer m_ImageSpatialObjectToAdd; 00142 00144 ReslicerPlanePointerType m_ReslicePlaneSpatialObjectToBeSet; 00145 ReslicerPlanePointerType m_ReslicePlaneSpatialObject; 00146 00148 vtkImageData *m_ImageData; 00149 vtkImageReslice *m_ImageReslicer; 00150 vtkMatrix4x4 *m_ResliceAxes; 00151 vtkActor *m_ImageActor; 00152 vtkProperty *m_PlaneProperty; 00153 vtkImageMapToColors *m_ColorMap; 00154 vtkTexture *m_Texture; 00155 vtkLookupTable *m_LookupTable; 00156 vtkPlaneSource *m_PlaneSource; 00157 vtkPlane *m_Plane; 00158 vtkImageData *m_Box; 00159 vtkCutter *m_Cutter; 00160 00161 00164 ColorScalarType m_FrameColor[3]; 00165 00166 int m_ResliceInterpolate; 00167 int m_TextureInterpolate; 00168 int m_RestrictPlaneToVolume; 00169 00171 double m_Level; 00172 double m_Window; 00173 00175 double m_ImageSpacing[3]; 00176 double m_ImageOrigin[3]; 00177 int m_ImageExtent[6]; 00178 double m_xbounds[2]; 00179 double m_ybounds[2]; 00180 double m_zbounds[2]; 00181 00183 virtual void UpdateRepresentationProcessing(); 00184 00186 void NoProcessing(); 00187 00189 void SetReslicePlaneSpatialObjectProcessing(); 00190 00193 void SetImageSpatialObjectProcessing(); 00194 00196 void ReportInvalidImageSpatialObjectProcessing( void ); 00197 00199 void ReportInvalidReslicePlaneSpatialObjectProcessing( void ); 00200 00202 void ReportInvalidRequestProcessing( void ); 00203 00205 void UpdatePlane(); 00206 00208 void GetVector1(double v1[3]); 00209 00211 void GetVector2(double v1[3]); 00212 00215 void SetImage( const vtkImageData * image ); 00216 00218 void ConnectVTKPipelineProcessing(); 00219 00222 igstkObserverMacro( VTKImage, VTKImageModifiedEvent, 00223 EventHelperType::VTKImagePointerType); 00224 00228 igstkObserverMacro( ReslicerPlaneCenter, 00229 ReslicerPlaneType::ReslicerPlaneCenterEvent, 00230 ReslicerPlaneType::VectorType); 00231 00232 typename ReslicerPlaneCenterObserver::Pointer m_ReslicerPlaneCenterObserver; 00233 00234 igstkObserverMacro( ReslicerPlaneNormal, 00235 ReslicerPlaneType::ReslicerPlaneNormalEvent, 00236 ReslicerPlaneType::VectorType); 00237 00238 typename ReslicerPlaneNormalObserver::Pointer m_ReslicerPlaneNormalObserver; 00239 00240 00242 igstkObserverMacro( ImageTransform, CoordinateSystemTransformToEvent, 00243 CoordinateSystemTransformToResult ); 00244 00245 typename VTKImageObserver::Pointer m_VTKImageObserver; 00246 00247 private: 00248 00250 igstkDeclareInputMacro( ValidImageSpatialObject ); 00251 igstkDeclareInputMacro( InValidImageSpatialObject ); 00252 igstkDeclareInputMacro( ValidReslicePlaneSpatialObject ); 00253 igstkDeclareInputMacro( InValidReslicePlaneSpatialObject ); 00254 igstkDeclareInputMacro( ConnectVTKPipeline ); 00255 00257 igstkDeclareStateMacro( Initial ); 00258 igstkDeclareStateMacro( ImageSpatialObjectSet ); 00259 igstkDeclareStateMacro( ReslicePlaneSpatialObjectSet ); 00260 }; 00261 00262 } // end namespace igstk 00263 00264 #ifndef IGSTK_MANUAL_INSTANTIATION 00265 #include "igstkImageResliceObjectRepresentation.txx" 00266 #endif 00267 00268 00269 #endif // __igstkImageResliceObjectRepresentation_h