NIREP

C:/Programs/source/NIREP/DisplayManager/NIREPvtkViewImage.h

00001 /*=========================================================================
00002 
00003 Program:   vtkINRIA3D
00004 Module:    $Id: NIREPvtkViewImage.h,v 1.7 2011/02/22 02:55:15 hawle Exp $
00005 Language:  C++
00006 Author:    $Author: hawle $
00007 Date:      $Date: 2011/02/22 02:55:15 $
00008 Version:   $Revision: 1.7 $
00009 
00010 Copyright (c) 2007 INRIA - Asclepios Project. All rights reserved.
00011 See Copyright.txt for details.
00012 
00013 This software is distributed WITHOUT ANY WARRANTY; without even
00014 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00015 PURPOSE.  See the above copyright notices for more information.
00016 
00017 =========================================================================*/
00018 
00019 //I have renamed this class from vtkViewImage to
00020 //NIREPvtkViewImage so that we can have our changes but
00021 //not have to have vtkINRIA3D in our source tree.
00022 //I made a slight change.  I changed the variable ScalarBar from being a 
00023 //vtkScalarBarActor* to a vtkScalarBarWidget*.  This meant that I needed to 
00024 //make the changes to the get and set functions.  As well, since I wanted 
00025 //to have vtkViewImage2D be the main class I pass around in NIREPDisplay, 
00026 //I had to pull vtkViewImage2D out of vtkINRIA3D and rename to NIREPvtkViewImage2D.
00027 //Jeffrey Hawley
00028 
00029 
00030 #ifndef _NIREPvtkViewImage_h_
00031 #define _NIREPvtkViewImage_h_
00032 
00033 #include "vtkINRIA3DConfigure.h"
00034 
00035 #include <vtkRenderingAddOn/vtkSynchronizedView.h>
00036 
00037 #include <vtkCommand.h>
00038 #include <vtkTransform.h>
00039 #include <vtkScalarBarActor.h>
00040 #include <vtkLookupTable.h>
00041 #include <vtkImageData.h>
00042 #include <vtkScalarBarWidget.h>
00043 
00044 #ifdef vtkINRIA3D_USE_ITK
00045 #include <itkImage.h>
00046 #endif
00047 
00048 #include <vector>
00049 
00050 class vtkScalarsToColors;
00051 class vtkImageData;
00052 class vtkImageBlend;
00053 
00054 class vtkColorTransferFunction;
00055 
00056 class vtkDataSet;
00057 class vtkProperty;
00058 class vtkMapper;
00059 class vtkActor;
00060 
00061 
00062 
00070 class VTK_RENDERINGADDON_EXPORT NIREPvtkViewImage : public vtkSynchronizedView
00071 {
00072 
00073  public:
00074 
00075   static NIREPvtkViewImage* New();
00076   vtkTypeRevisionMacro(NIREPvtkViewImage, vtkSynchronizedView);
00077 
00078   //BTX
00080   enum DirectionIds
00081   {
00082     X_ID,
00083     Y_ID,
00084     Z_ID,
00085     NB_DIRECTION_IDS  // The number of DirectionIds
00086   };
00087   //ETX
00088 
00089 
00090   //BTX
00093   enum PlanIds
00094   {
00095     SAGITTAL_ID,
00096     CORONAL_ID,
00097     AXIAL_ID,
00098     NB_PLAN_IDS  // The number of PlanIds
00099   };
00100   //ETX
00101 
00102 
00103   //BTX
00104   enum EventIds
00105   {
00106     ViewImagePositionChangeEvent=(vtkCommand::UserEvent+1),
00107     ViewImageWindowLevelChangeEvent,
00108     ViewImageZoomChangeEvent
00109   };
00110   //ETX
00111 
00112 
00113   //BTX
00114   enum
00115   {
00116     FullRange,
00117     UserDefinedPercentage
00118   };
00119   //ETX
00120 
00121 
00122   // General Get Methods about the image
00123 
00129   virtual double GetWholeMinPosition(unsigned int p_axis);
00130 
00131 
00135   virtual  double GetWholeMaxPosition(unsigned int p_axis);
00136 
00137 
00142   static unsigned int GetOrthogonalAxis(unsigned int p_plan);
00143   
00144 
00148   void GetVoxelCoordinates( double pos[3], int p_coordinates[3]);
00149 
00150 
00155   virtual void GetCurrentVoxelCoordinates(int p_coordinates[3]);
00156 
00157 
00161   virtual double GetCurrentPointDoubleValue ();
00162   
00163 
00167   vtkGetObjectMacro (Image, vtkImageData);
00168 
00169 
00173   vtkSetObjectMacro(Image, vtkImageData);
00174 
00175 
00176 #ifdef vtkINRIA3D_USE_ITK
00177 
00193   //BTX
00194   void SetITKImage (itk::Image<double, 3>::Pointer);
00195 
00196   void SetITKImage (itk::Image<float, 3>::Pointer);
00197 
00198   void SetITKImage (itk::Image<int, 3>::Pointer);
00199 
00200   void SetITKImage (itk::Image<unsigned int, 3>::Pointer);
00201 
00202   void SetITKImage (itk::Image<short, 3>::Pointer);
00203 
00204   void SetITKImage (itk::Image<unsigned short, 3>::Pointer);
00205 
00206   void SetITKImage (itk::Image<long, 3>::Pointer);
00207 
00208   void SetITKImage (itk::Image<unsigned long, 3>::Pointer);
00209 
00210   void SetITKImage (itk::Image<char, 3>::Pointer);
00211 
00212   void SetITKImage (itk::Image<unsigned char, 3>::Pointer);
00213 
00214   itk::ImageBase<3>* GetITKImage (void) const;
00215   //ETX
00216 #endif
00217 
00218 
00222   virtual void UpdatePosition(void) {};
00223 
00224   
00228   vtkSetObjectMacro (Transform, vtkTransform);
00229   vtkGetObjectMacro (Transform, vtkTransform);
00230 
00231 
00235   vtkGetObjectMacro (ScalarBar, vtkScalarBarWidget);
00236 
00237   
00241   void SetScalarBarVisibility (int v)
00242   { this->ScalarBar->GetScalarBarActor()->SetVisibility(v);
00243     this->Modified(); }
00244   int GetScalarBarVisibility (void) const
00245   { return this->ScalarBar->GetScalarBarActor()->GetVisibility(); }
00246   vtkBooleanMacro (ScalarBarVisibility, int);
00247   
00248   
00252   virtual void SetLookupTable (vtkScalarsToColors* lut)
00253   {
00254     this->LookupTable = lut;
00255     vtkScalarBarActor *temp = this->ScalarBar->GetScalarBarActor();
00256     this->ScalarBar->GetScalarBarActor()->SetLookupTable ( lut );
00257     this->Modified();
00258   }
00259   void SyncSetLookupTable (vtkScalarsToColors* lut);
00260   virtual vtkScalarsToColors* GetLookupTable (void) const
00261   { return this->LookupTable; }
00262 
00263   
00268   virtual void SetWindow (double win)
00269   {
00270     this->Window = win;
00271     this->InvokeEvent (NIREPvtkViewImage::ViewImageWindowLevelChangeEvent, NULL);
00272     this->Modified();
00273   }
00274   vtkGetMacro (Window, double);
00275   void SyncSetWindow(double w);
00276 
00277   
00281   virtual void StartWindowing (void){};
00282   void SyncStartWindowing (void);
00283 
00284 
00288   virtual void EndWindowing (void){};
00289   void SyncEndWindowing (void);
00290   
00295   virtual void SetLevel (double lev)
00296   {
00297     this->Level = lev;
00298     this->InvokeEvent (NIREPvtkViewImage::ViewImageWindowLevelChangeEvent, NULL);
00299     this->Modified();
00300   }
00301   vtkGetMacro (Level, double);
00302   void SyncSetLevel(double l);
00303   
00304 
00309   virtual void ResetWindowLevel();
00310   void SyncResetWindowLevel();
00311 
00312   
00316   virtual void SetWindowLevelFrom(NIREPvtkViewImage* p_view);
00317 
00318   
00323   virtual void SetZoom (double zoom)
00324   {
00325     this->Zoom = zoom;
00326     this->InvokeEvent (NIREPvtkViewImage::ViewImageZoomChangeEvent, NULL);
00327     this->Modified();
00328   }
00329   vtkGetMacro (Zoom, double);
00330   void SyncSetZoom (double factor);
00331 
00332 
00336   virtual void ResetZoom();
00337   void SyncResetZoom();
00338   
00339   
00344   virtual int GetSliceForPosition(const double pos[3], unsigned int p_orientation);
00345 
00346 
00350   virtual void GetPositionForSlice ( int slice, int orientation, double pos[3]);
00351 
00352   
00358   virtual void SetSlice (unsigned int p_orientation, int p_slice);
00359   virtual void SyncSetSlice (unsigned int p_orientation, int p_slice);
00360   virtual int GetSlice(unsigned int p_orientation);
00361 
00362   
00366   virtual void SetZSlice(int p_slice)
00367   { (void) p_slice; this->Modified(); }
00368   void SyncSetZSlice (int p_slice);
00369   // GetZSlice() ??
00370 
00371 
00375   virtual void SetCurrentPoint (const double p_point[3]);
00376   void SyncSetCurrentPoint(const double p_point[3]);
00377   
00378 
00382   void SetPosition (const double p_point[3] )
00383   { this->SetCurrentPoint ( p_point ); }
00384   void SyncSetPosition (const double p_point[3])
00385   { this->SyncSetCurrentPoint (p_point); }
00386 
00387 
00391   virtual const double* GetCurrentPoint() const
00392   { return CurrentPoint; }
00393   void GetCurrentPoint(double p_point[3]) const
00394   {
00395     p_point[0] = CurrentPoint[0];
00396     p_point[1] = CurrentPoint[1];
00397     p_point[2] = CurrentPoint[2];
00398   }
00399   
00400 
00405   virtual void ResetCurrentPoint();
00406   void SyncResetCurrentPoint();
00407 
00408 
00412   void SyncResetPosition()
00413   {
00414     this->SyncResetCurrentPoint();
00415   }
00416   
00417 
00421   virtual void Reset (void)
00422   {
00423     this->ResetWindowLevel();
00424     this->ResetCurrentPoint();
00425     this->ResetZoom();
00426   }
00427   void SyncReset();
00428   
00429 
00430 
00434   vtkSetMacro (LinkWindowLevel, int);
00435   vtkGetMacro (LinkWindowLevel, int);
00436 
00437 
00441   vtkSetMacro (LinkPosition, int);
00442   vtkGetMacro (LinkPosition, int);
00443 
00444   
00448   vtkSetMacro (LinkZoom, int);
00449   vtkGetMacro (LinkZoom, int);
00450 
00451 
00456   vtkSetMacro (Shift, double);
00457   vtkGetMacro (Shift, double);
00458 
00459   
00464   vtkSetMacro (Scale, double);
00465   vtkGetMacro (Scale, double);
00466 
00467 
00471   vtkSetMacro (Visibility, int);
00472   vtkGetMacro (Visibility, int);
00473   vtkBooleanMacro (Visibility, int);
00474   
00475 
00476   virtual void PrintSelf(ostream& os, vtkIndent indent);
00477 
00478 
00484   virtual void SetSizeData (const char* str);
00485   virtual const char* GetSizeData(void) const
00486   { return SizeData_str.c_str(); }
00487 
00488 
00492   virtual void SetSizeDataVisibility (int val);
00493   vtkBooleanMacro (SizeDataVisibility, int);
00494   vtkGetMacro (SizeDataVisibility, int);
00495 
00496 
00497   virtual void SetPatientNameData (const char* str);
00498   virtual const char* GetPatientNameData(void) const
00499   { return PatientNameData.c_str(); }
00500 
00501   virtual void SetStudyNameData (const char* str);
00502   virtual const char* GetStudyNameData(void) const
00503   { return StudyNameData.c_str(); }
00504 
00505   virtual void SetSerieNameData (const char* str);
00506   virtual const char* GetSerieNameData(void) const
00507   { return SerieNameData.c_str(); }
00508 
00509   
00517   virtual void SetMaskImage (vtkImageData* mask, vtkLookupTable* lut)
00518   {
00519     this->MaskImage = mask;
00520     this->MaskLUT   = lut;
00521     this->Modified();
00522   }
00523   void SyncSetMaskImage (vtkImageData* mask, vtkLookupTable* lut);
00524   vtkGetObjectMacro (MaskImage, vtkImageData);
00525   
00526   
00530   virtual void RemoveMaskImage (void){};
00531   void SyncRemoveMaskImage ();
00532   
00533 
00539   virtual void SetOverlappingImage (vtkImageData* image)
00540   { this->OverlappingImage = image; this->Modified(); }
00541   void SyncSetOverlappingImage (vtkImageData* image);
00542   vtkGetObjectMacro (OverlappingImage, vtkImageData);
00543 
00544   
00548   virtual void RemoveOverlappingImage (void){};
00549   void SyncRemoveOverlappingImage ();
00550   
00551   
00560   virtual vtkActor* AddDataSet (vtkDataSet* dataset, vtkProperty* property = NULL);
00561   vtkActor* SyncAddDataSet (vtkDataSet* dataset, vtkProperty* property = NULL);
00562   
00563   
00569   virtual void RemoveDataSet (vtkDataSet* dataset);
00570   void SyncRemoveDataSet (vtkDataSet* dataset);
00571   
00572 
00573   virtual void RemoveAllDataSet ();
00574   void SyncRemoveAllDataSet ();
00575   
00576 
00580   virtual bool HasDataSet (vtkDataSet* dataset);
00581 
00582 
00583   vtkDataSet* GetDataSet (unsigned int i);
00584   vtkDataSet* GetDataSetFromActor (vtkActor* actor);
00585   vtkActor* GetDataSetActor (unsigned int i);
00586   vtkActor* GetDataSetActor (vtkDataSet* dataset);
00587 
00588 
00595   virtual void ColorDataSetByArray(vtkDataSet* dataset, const char* arrayname, vtkColorTransferFunction* transfer);
00596   void SyncColorDataSetByArray(vtkDataSet* dataset, const char* arrayname, vtkColorTransferFunction* transfer);
00597 
00598   
00605   virtual void ModifyActors(vtkDataSet* dataset, bool cellColors);
00606   void SyncModifyActors(vtkDataSet* dataset, bool cellColors);
00607   
00608   
00618   void SetResetWindowLevelMode(const int& mode)
00619   {
00620     this->ResetWindowLevelMode = mode;
00621     this->Modified();
00622   }
00623 
00624   void SetResetWindowLevelModeToFullRange( void )
00625   {
00626     this->ResetWindowLevelMode = FullRange;
00627     this->Modified();
00628   }
00629 
00630   void SetResetWindowLevelModeToUserDefinedPercentage( void )
00631   {
00632     this->ResetWindowLevelMode = UserDefinedPercentage;
00633     this->Modified();
00634   }
00635 
00636 
00641   vtkSetMacro (WindowLevelPercentage, double);
00642   vtkGetMacro (WindowLevelPercentage, double);
00643 
00644 
00645  protected:
00646   NIREPvtkViewImage();
00647   ~NIREPvtkViewImage();
00648 
00649 
00650   // derived from vtkSynchronizedView
00651   virtual void Initialize(void);
00652   virtual void Uninitialize(void);
00653 
00654 
00656   virtual void RegisterImage (vtkImageData* image);
00657 
00658   //BTX
00659   std::vector<vtkDataSet*>      DataSetList;
00660   std::vector<vtkActor*>        DataSetActorList;
00661   //ETX
00662 
00663   vtkSetMacro (FirstImage, int);
00664   vtkGetMacro (FirstImage, int);
00665 
00666  private:
00667 
00669   vtkImageData*   Image;
00670   vtkImageData*   OverlappingImage;
00671 
00672   vtkImageData*   MaskImage;
00673   vtkLookupTable* MaskLUT;
00674 
00675   double          CurrentPoint[3];
00676 
00677   vtkTransform*   Transform;
00678   vtkScalarsToColors* LookupTable;
00679 
00680   //vtkScalarBarActor*  ScalarBar;
00681   vtkScalarBarWidget*  ScalarBar;
00682 
00683   int            LinkWindowLevel;
00684   int            LinkPosition;
00685   int            LinkZoom;
00686   int            LinkRender;
00687 
00688   int            Visibility;
00689   int            SizeDataVisibility;
00690 
00691   double          Scale;
00692   double          Shift;
00693 
00694   double          Window;
00695   double          Level;
00696   double          Zoom;
00697 
00698 #ifdef vtkINRIA3D_USE_ITK
00699 
00705   //BTX
00706   itk::ProcessObject::Pointer ImageConverter;
00707   itk::ImageBase<3>::Pointer  ITKImage;
00708   //ETX
00709 #endif
00710 
00711   //BTX
00712   std::string     SizeData_str;
00713   std::string     PatientNameData;
00714   std::string     StudyNameData;
00715   std::string     SerieNameData;
00716   //ETX
00717 
00718   int           ResetWindowLevelMode;
00719   double        WindowLevelPercentage;
00720 
00721   int FirstImage;
00722 
00723 };
00724 
00725 #endif /* _vtkViewImage_h_ */
00726 
00727   
00728 
 All Classes Functions Variables Typedefs Enumerations Enumerator