X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fwxvtk%2Fsrc%2FwxvtkImageViewer2.cxx;h=0e96065b9a840aacc6934a110fbc50b21cc105e2;hb=8288a4327a437863a75f46bfb93d15669d6f311f;hp=e0fca3a565c3ee6ebad91f7d4253ac71b9ae7480;hpb=443fab11d4694575d7b826a384869d700d1b9036;p=bbtk.git diff --git a/packages/wxvtk/src/wxvtkImageViewer2.cxx b/packages/wxvtk/src/wxvtkImageViewer2.cxx index e0fca3a..0e96065 100644 --- a/packages/wxvtk/src/wxvtkImageViewer2.cxx +++ b/packages/wxvtk/src/wxvtkImageViewer2.cxx @@ -1,3 +1,30 @@ +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + /*========================================================================= Program: Visualization Toolkit @@ -26,7 +53,13 @@ #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" -vtkCxxRevisionMacro(wxvtkImageViewer2, "$Revision: 1.3 $"); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 +vtkCxxRevisionMacro(wxvtkImageViewer2, "$Revision: 1.8 $"); +#else + //... +#endif + vtkStandardNewMacro(wxvtkImageViewer2); //---------------------------------------------------------------------------- @@ -110,9 +143,9 @@ void wxvtkImageViewer2::SetupInteractor(vtkRenderWindowInteractor *arg) { this->Interactor->UnRegister(this); } - + this->Interactor = arg; - + if (this->Interactor) { this->Interactor->Register(this); @@ -140,9 +173,9 @@ void wxvtkImageViewer2::SetRenderWindow(vtkRenderWindow *arg) { this->RenderWindow->UnRegister(this); } - + this->RenderWindow = arg; - + if (this->RenderWindow) { this->RenderWindow->Register(this); @@ -165,9 +198,9 @@ void wxvtkImageViewer2::SetRenderer(vtkRenderer *arg) { this->Renderer->UnRegister(this); } - + this->Renderer = arg; - + if (this->Renderer) { this->Renderer->Register(this); @@ -178,13 +211,13 @@ void wxvtkImageViewer2::SetRenderer(vtkRenderer *arg) } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetSize(int a,int b) +void wxvtkImageViewer2::SetSize(int a,int b) { this->RenderWindow->SetSize(a, b); } //---------------------------------------------------------------------------- -int* wxvtkImageViewer2::GetSize() +int* wxvtkImageViewer2::GetSize() { return this->RenderWindow->GetSize(); } @@ -195,8 +228,15 @@ void wxvtkImageViewer2::GetSliceRange(int &min, int &max) vtkImageData *input = this->GetInput(); if (input) { + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 input->UpdateInformation(); int *w_ext = input->GetWholeExtent(); +#else + int *w_ext = input->GetExtent(); +#endif + min = w_ext[this->SliceOrientation * 2]; max = w_ext[this->SliceOrientation * 2 + 1]; } @@ -208,14 +248,21 @@ int* wxvtkImageViewer2::GetSliceRange() vtkImageData *input = this->GetInput(); if (input) { +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 input->UpdateInformation(); +printf("EED Warning wxvtkImageViewer2::GetSliceRange GetWholeExtent()[2] ??? /n"); return input->GetWholeExtent() + this->SliceOrientation * 2; +#else +printf("EED Warning wxvtkImageViewer2::GetSliceRange GetExtent()[2] ??? /n"); + return input->GetExtent() + this->SliceOrientation * 2; +#endif } return NULL; } //---------------------------------------------------------------------------- -int wxvtkImageViewer2::GetSliceMin() +int wxvtkImageViewer2::GetSliceMin() { int *range = this->GetSliceRange(); if (range) @@ -226,7 +273,7 @@ int wxvtkImageViewer2::GetSliceMin() } //---------------------------------------------------------------------------- -int wxvtkImageViewer2::GetSliceMax() +int wxvtkImageViewer2::GetSliceMax() { int *range = this->GetSliceRange(); if (range) @@ -273,7 +320,7 @@ void wxvtkImageViewer2::SetSliceOrientation(int orientation) vtkErrorMacro("Error - invalid slice orientation " << orientation); return; } - + if (this->SliceOrientation == orientation) { return; @@ -281,7 +328,7 @@ void wxvtkImageViewer2::SetSliceOrientation(int orientation) this->SliceOrientation = orientation; - // Update the viewer + // Update the viewer int *range = this->GetSliceRange(); if (range) @@ -310,26 +357,54 @@ void wxvtkImageViewer2::UpdateOrientation() vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; if (cam) { + +// EED 21 mars FLIP problem ..PLOP.. switch (this->SliceOrientation) - { - case wxvtkImageViewer2::SLICE_ORIENTATION_XY: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(0,0,1); // -1 if medical ? - cam->SetViewUp(0,1,0); - break; - - case wxvtkImageViewer2::SLICE_ORIENTATION_XZ: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(0,-1,0); // 1 if medical ? - cam->SetViewUp(0,0,1); - break; - - case wxvtkImageViewer2::SLICE_ORIENTATION_YZ: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(1,0,0); // -1 if medical ? - cam->SetViewUp(0,0,1); - break; + { + case wxvtkImageViewer2::SLICE_ORIENTATION_YZ: + cam->SetViewUp(0,0,1); + cam->SetPosition(1,0,0); // -1 if medical ? + cam->SetFocalPoint(0,0,0); + break; + + case wxvtkImageViewer2::SLICE_ORIENTATION_XZ: + cam->SetViewUp(0,0,1); + cam->SetPosition(0,-1,0); // 1 if medical ? + cam->SetFocalPoint(0,0,0); + break; + + case wxvtkImageViewer2::SLICE_ORIENTATION_XY: + cam->SetViewUp(0,-1,0); + cam->SetPosition(0,0,-1); + cam->SetFocalPoint(0,0,0); + break; } + +/* + switch (this->SliceOrientation) + { + case wxvtkImageViewer2::SLICE_ORIENTATION_YZ: + cam->SetViewUp(0,0,1); + cam->SetPosition(1,0,0); // -1 if medical ? + cam->SetFocalPoint(0,0,0); + break; + + case wxvtkImageViewer2::SLICE_ORIENTATION_XZ: + cam->SetViewUp(0,0,1); + cam->SetPosition(0,-1,0); // 1 if medical ? + cam->SetFocalPoint(0,0,0); + break; + + case wxvtkImageViewer2::SLICE_ORIENTATION_XY: + cam->SetViewUp(0,1,0); + cam->SetPosition(0,0,1); // -1 if medical ? + cam->SetFocalPoint(0,0,0); + break; + + + } +*/ + } } @@ -343,8 +418,13 @@ void wxvtkImageViewer2::UpdateDisplayExtent() } // std::cout << "--- wxvtkImageViewer2::UpdateDisplayExtent()"<UpdateInformation(); int *w_ext = input->GetWholeExtent(); +#else + int *w_ext = input->GetExtent(); +#endif // std::cout << "ext = " // <Renderer) { - if (this->InteractorStyle && + if (this->InteractorStyle && this->InteractorStyle->GetAutoAdjustCameraClippingRange()) { this->Renderer->ResetCameraClippingRange(); - } - else - { + } else { vtkCamera *cam = this->Renderer->GetActiveCamera(); if (cam) { @@ -400,66 +478,66 @@ void wxvtkImageViewer2::UpdateDisplayExtent() double cpos = cam->GetPosition()[this->SliceOrientation]; double range = fabs(spos - cpos); double *spacing = input->GetSpacing(); - double avg_spacing = + double avg_spacing = //(spacing[0] + spacing[1] + spacing[2]) / 3.0; spacing[2]; // JPR?? cam->SetClippingRange( range - avg_spacing * 3.0, range + avg_spacing * 3.0); - } - } - } + } // if cam + } // if InteractorStyle + } // if Renderer } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetPosition(int a,int b) +void wxvtkImageViewer2::SetPosition(int a,int b) { this->RenderWindow->SetPosition(a, b); } //---------------------------------------------------------------------------- -int* wxvtkImageViewer2::GetPosition() +int* wxvtkImageViewer2::GetPosition() { return this->RenderWindow->GetPosition(); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetDisplayId(void *a) +void wxvtkImageViewer2::SetDisplayId(void *a) { this->RenderWindow->SetDisplayId(a); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetWindowId(void *a) +void wxvtkImageViewer2::SetWindowId(void *a) { this->RenderWindow->SetWindowId(a); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetParentId(void *a) +void wxvtkImageViewer2::SetParentId(void *a) { this->RenderWindow->SetParentId(a); } //---------------------------------------------------------------------------- -double wxvtkImageViewer2::GetColorWindow() +double wxvtkImageViewer2::GetColorWindow() { return this->WindowLevel->GetWindow(); } //---------------------------------------------------------------------------- -double wxvtkImageViewer2::GetColorLevel() +double wxvtkImageViewer2::GetColorLevel() { return this->WindowLevel->GetLevel(); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetColorWindow(double s) +void wxvtkImageViewer2::SetColorWindow(double s) { this->WindowLevel->SetWindow(s); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetColorLevel(double s) +void wxvtkImageViewer2::SetColorLevel(double s) { this->WindowLevel->SetLevel(s); } @@ -469,9 +547,9 @@ class wxvtkImageViewer2Callback : public vtkCommand { public: static wxvtkImageViewer2Callback *New() { return new wxvtkImageViewer2Callback; } - - void Execute(vtkObject *caller, - unsigned long event, + + void Execute(vtkObject *caller, + unsigned long event, void *vtkNotUsed(callData)) { if (this->IV->GetInput() == NULL) @@ -483,10 +561,17 @@ public: if (event == vtkCommand::ResetWindowLevelEvent) { + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 this->IV->GetInput()->UpdateInformation(); this->IV->GetInput()->SetUpdateExtent (this->IV->GetInput()->GetWholeExtent()); this->IV->GetInput()->Update(); +#else + //... +#endif + double *range = this->IV->GetInput()->GetScalarRange(); this->IV->SetColorWindow(range[1] - range[0]); this->IV->SetColorLevel(0.5 * (range[1] + range[0])); @@ -502,25 +587,25 @@ public: this->InitialLevel = this->IV->GetColorLevel(); return; } - + // Adjust the window level here - vtkInteractorStyleImage *isi = + vtkInteractorStyleImage *isi = static_cast(caller); int *size = this->IV->GetRenderWindow()->GetSize(); double window = this->InitialWindow; double level = this->InitialLevel; - + // Compute normalized delta - double dx = 4.0 * - (isi->GetWindowLevelCurrentPosition()[0] - + double dx = 4.0 * + (isi->GetWindowLevelCurrentPosition()[0] - isi->GetWindowLevelStartPosition()[0]) / size[0]; - double dy = 4.0 * - (isi->GetWindowLevelStartPosition()[1] - + double dy = 4.0 * + (isi->GetWindowLevelStartPosition()[1] - isi->GetWindowLevelCurrentPosition()[1]) / size[1]; - + // Scale by current values if (fabs(window) > 0.01) @@ -539,24 +624,24 @@ public: { dy = dy * (level < 0 ? -0.01 : 0.01); } - + // Abs so that direction does not flip - if (window < 0.0) + if (window < 0.0) { dx = -1*dx; } - if (level < 0.0) + if (level < 0.0) { dy = -1*dy; } - + // Compute new window level double newWindow = dx + window; double newLevel; newLevel = level - dy; - + // Stay away from zero and really if (fabs(newWindow) < 0.01) @@ -567,12 +652,12 @@ public: { newLevel = 0.01*(newLevel < 0 ? -1 : 1); } - + this->IV->SetColorWindow(newWindow); this->IV->SetColorLevel(newLevel); this->IV->Render(); } - + wxvtkImageViewer2 *IV; double InitialWindow; double InitialLevel; @@ -601,7 +686,7 @@ void wxvtkImageViewer2::InstallPipeline() vtkCommand::ResetWindowLevelEvent, cbk); cbk->Delete(); } - + this->Interactor->SetInteractorStyle(this->InteractorStyle); this->Interactor->SetRenderWindow(this->RenderWindow); } @@ -613,7 +698,13 @@ void wxvtkImageViewer2::InstallPipeline() if (this->ImageActor && this->WindowLevel) { +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 this->ImageActor->SetInput(this->WindowLevel->GetOutput()); +#else + this->WindowLevel->Update(); + this->ImageActor->SetInputData(this->WindowLevel->GetOutput()); +#endif } } @@ -622,7 +713,12 @@ void wxvtkImageViewer2::UnInstallPipeline() { if (this->ImageActor) { +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 this->ImageActor->SetInput(NULL); +#else + this->ImageActor->SetInputData(NULL); +#endif } if (this->Renderer && this->ImageActor) @@ -650,20 +746,27 @@ void wxvtkImageViewer2::Render() // Initialize the size if not set yet vtkImageData *input = this->GetInput(); - if (this->RenderWindow->GetSize()[0] == 0 && + if (this->RenderWindow->GetSize()[0] == 0 && input) { - + + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 input->UpdateInformation(); int *w_ext = input->GetWholeExtent(); +#else + int *w_ext = input->GetExtent(); +#endif + int xs = 0, ys = 0; - + // std::cout << "wxvtkImageViewer2::Render ext = " // <SliceOrientation) { case wxvtkImageViewer2::SLICE_ORIENTATION_XY: @@ -697,7 +800,7 @@ void wxvtkImageViewer2::Render() this->Renderer->GetActiveCamera()->SetParallelScale( xs < 150 ? 75 : (xs - 1 ) / 2.0); } - this->FirstRender = 0; + this->FirstRender = 0; } } @@ -708,7 +811,7 @@ void wxvtkImageViewer2::Render() } //---------------------------------------------------------------------------- -const char* wxvtkImageViewer2::GetWindowName() +const char* wxvtkImageViewer2::GetWindowName() { return this->RenderWindow->GetWindowName(); } @@ -726,22 +829,28 @@ int wxvtkImageViewer2::GetOffScreenRendering() } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetInput(vtkImageData *in) +void wxvtkImageViewer2::SetInput(vtkImageData *in) { // std::cout << "### wxvtkImageViewer2::SetInput"<WindowLevel->SetInput(in); +#else + this->WindowLevel->SetInputData(in); +#endif + this->UpdateDisplayExtent(); // LG 03/12/08 // FirstRender = 1; } //---------------------------------------------------------------------------- vtkImageData* wxvtkImageViewer2::GetInput() -{ +{ return vtkImageData::SafeDownCast(this->WindowLevel->GetInput()); } //---------------------------------------------------------------------------- -void wxvtkImageViewer2::SetInputConnection(vtkAlgorithmOutput* input) +void wxvtkImageViewer2::SetInputConnection(vtkAlgorithmOutput* input) { this->WindowLevel->SetInputConnection(input); this->UpdateDisplayExtent();