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