X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvSlicerManagerCommand.cxx;h=ac806ae517a379d3fa252c88ae6fd2fc1210a320;hb=a2df2b8fbe6e9e78ab861e899e6b6c0a7f80588d;hp=6e3298b792cff082320e4440123b9bbfed087cd4;hpb=0a85e47a06c7d046d06a4645b724c4e81b19998d;p=clitk.git diff --git a/vv/vvSlicerManagerCommand.cxx b/vv/vvSlicerManagerCommand.cxx index 6e3298b..ac806ae 100644 --- a/vv/vvSlicerManagerCommand.cxx +++ b/vv/vvSlicerManagerCommand.cxx @@ -1,41 +1,35 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Language: C++ - Author : Pierre Seroul (pierre.seroul@gmail.com) + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr - Copyright (C) 2008 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - CREATIS-LRMN http://www.creatis.insa-lyon.fr + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. + It is distributed under dual licence - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - =========================================================================*/ + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +======================================================================-====*/ #include "vvSlicerManagerCommand.h" #include "vvSlicerManager.h" -#include "vtkTextProperty.h" -#include "vtkRenderer.h" -#include "vtkImageActor.h" -#include "vtkRenderWindowInteractor.h" -#include "vtkPropPicker.h" -#include "vtkCamera.h" -#include "vtkImageMapToWindowLevelColors.h" -#include "vtkLookupTable.h" -#include "vtkMath.h" -#include "vtkAbstractPropPicker.h" -#include "vtkAssemblyPath.h" -#include "vtkCornerAnnotation.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include "vvSlicer.h" @@ -44,382 +38,392 @@ #include //------------------------------------------------------------------------------ -vvSlicerManagerCallback::vvSlicerManagerCallback() +vvSlicerManagerCommand::vvSlicerManagerCommand() { - mStartSlicer = -1; + mStartSlicer = -1; + mSlicerNumber=-1; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //return the num of the current slicer if visible (-1 else) -int vvSlicerManagerCallback::FindSlicerNumber(vtkRenderWindow* renwin) +int vvSlicerManagerCommand::FindSlicerNumber(vtkRenderWindow* renwin) { - int result=-1; - for (int i = 0; i < SM->NumberOfSlicers(); i++) - { - if (SM->GetSlicer(i)->GetRenderWindow() == renwin - && SM->GetSlicer(i)->GetRenderer()->GetDraw()) - { - // DD(i); - result=i; - } - } - return result; + int rvalue; + if (renwin != SM->GetSlicer(mSlicerNumber)->GetRenderWindow() || + !SM->GetSlicer(mSlicerNumber)->GetRenderer()->GetDraw()) + rvalue = -1; + else rvalue = mSlicerNumber; + //std::cerr << this << ":" << mSlicerNumber << ": " << rvalue << endl; + return rvalue; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvSlicerManagerCallback::Execute(vtkObject *caller, - unsigned long event, - void *vtkNotUsed(callData)) +void vvSlicerManagerCommand::Execute(vtkObject *caller, + unsigned long event, + void *vtkNotUsed(callData)) { - //KeyPress event - vvInteractorStyleNavigator *isi = - dynamic_cast(caller); - if (isi) + //KeyPress event + vvInteractorStyleNavigator *isi = + dynamic_cast(caller); + if (isi) { - double x = isi->GetInteractor()->GetEventPosition()[0]; - double y = isi->GetInteractor()->GetEventPosition()[1]; - double z; + double x = isi->GetInteractor()->GetEventPosition()[0]; + double y = isi->GetInteractor()->GetEventPosition()[1]; + double z; - int VisibleInWindow = this->FindSlicerNumber(isi->GetInteractor()->GetRenderWindow()); - vtkRenderer* renderer=NULL; - if (VisibleInWindow>-1) - renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); - newLandmark = false; + int VisibleInWindow = this->FindSlicerNumber(isi->GetInteractor()->GetRenderWindow()); + vtkRenderer* renderer=NULL; + if (VisibleInWindow>-1) + renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); + newLandmark = false; - if (event == vtkCommand::StartPickEvent && VisibleInWindow == -1) + if (event == vtkCommand::StartPickEvent && VisibleInWindow == -1) { - for (int i = 0; i < this->SM->NumberOfSlicers(); i++) + for (int i = 0; i < this->SM->NumberOfSlicers(); i++) { - if (this->SM->GetSlicer(i)->GetCursorVisibility()) + if (this->SM->GetSlicer(i)->GetCursorVisibility()) { - this->SM->GetSlicer(i)->SetCursorVisibility(0); - this->SM->GetSlicer(i)->Render(); + this->SM->GetSlicer(i)->SetCursorVisibility(0); + this->SM->GetSlicer(i)->Render(); } } } - if ( VisibleInWindow > -1 ) + if ( VisibleInWindow > -1 ) { - if (event == vtkCommand::KeyPressEvent) + if (event == vtkCommand::KeyPressEvent) { - std::string KeyPress = isi->GetInteractor()->GetKeySym(); - if (KeyPress == "f" || KeyPress == "F") + std::string KeyPress = isi->GetInteractor()->GetKeySym(); + if (KeyPress == "Tab") + { + if(isi->GetInteractor()->GetShiftKey()) + this->SM->PrevImage(VisibleInWindow); + else + this->SM->NextImage(VisibleInWindow); + return; + } + if (KeyPress == "f" || KeyPress == "F") + { + FlyToPosition(isi->GetInteractor(),this->SM->GetSlicer(VisibleInWindow)); + return; + } + if (KeyPress == "w") { - FlyToPosition(isi->GetInteractor(),this->SM->GetSlicer(VisibleInWindow)); + this->SM->SetLocalColorWindowing(VisibleInWindow); + return; } - if (KeyPress == "0") + if (KeyPress == "0") { - this->SM->SetPreset(0); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(0); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "1") + if (KeyPress == "1") { - this->SM->SetPreset(1); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(1); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "2") + if (KeyPress == "2") { - this->SM->SetPreset(2); - this->SM->UpdateWindowLevel(); + this->SM->SetPreset(2); + this->SM->UpdateWindowLevel(); - return; + return; } - if (KeyPress == "3") + if (KeyPress == "3") { - this->SM->SetPreset(3); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(3); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "4") + if (KeyPress == "4") { - this->SM->SetPreset(4); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(4); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "5") + if (KeyPress == "5") { - this->SM->SetPreset(5); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(5); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "6") + if (KeyPress == "6") { - this->SM->SetColorMap(0); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetColorMap(0); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "7") + if (KeyPress == "7") { - this->SM->SetColorMap(1); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetColorMap(1); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "8") + if (KeyPress == "8") { - this->SM->SetColorMap(2); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetColorMap(2); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "9") + if (KeyPress == "9") { - this->SM->SetColorMap(3); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetColorMap(3); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "equal") //keycodes are in vtkWin32RenderWindowInteractor + if (KeyPress == "equal") //keycodes are in vtkWin32RenderWindowInteractor { - this->SM->SetPreset(7); - //this->SM->SetColorMap(1); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetPreset(7); + //this->SM->SetColorMap(1); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "minus") + if (KeyPress == "minus") { - std::cout << "KeyPress : - " << std::endl; - this->SM->SetColorWindow(-this->SM->GetColorWindow()); - this->SM->SetColorMap(-1); - this->SM->UpdateWindowLevel(); - return; + this->SM->SetColorWindow(-this->SM->GetColorWindow()); + this->SM->SetColorMap(-1); + this->SM->UpdateWindowLevel(); + return; } - if (KeyPress == "u") + if (KeyPress == "c") { - this->SM->ToggleContourSuperposition(); - this->SM->Render(); - return; + this->SM->ToggleContourSuperposition(); + this->SM->Render(); + return; } - if (KeyPress == "i") + if (KeyPress == "l") { - this->SM->ToggleInterpolation(); - this->SM->Render(); - return; + this->SM->ToggleInterpolation(); + this->SM->Render(); + return; } - if (KeyPress == "h") + if (KeyPress == "h") { - this->SM->SetCursorVisibility(0); - this->SM->Render(); - return; + this->SM->SetCursorVisibility(0); + this->SM->Render(); + return; } - if (KeyPress == "l") + if (KeyPress == "u") { - this->SM->Reload(); - this->SM->Render(); - return; + this->SM->Reload(); + this->SM->Render(); + return; } - if (KeyPress == "r" || KeyPress=="R") + if (KeyPress == "r" || KeyPress=="R") { - this->SM->GetSlicer(VisibleInWindow)->ResetCamera(); - this->SM->GetSlicer(VisibleInWindow)->Render(); - return; + this->SM->GetSlicer(VisibleInWindow)->ResetCamera(); + this->SM->GetSlicer(VisibleInWindow)->Render(); + return; } - if (KeyPress == "g") + if (KeyPress == "g") { - double* cursorPos = this->SM->GetSlicer(VisibleInWindow)->GetCursorPosition(); - this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition( - cursorPos[0],cursorPos[1],cursorPos[2],cursorPos[3]); - this->SM->UpdateViews(1,VisibleInWindow); - this->SM->UpdateLinked(VisibleInWindow); - return; + double* cursorPos = this->SM->GetSlicer(VisibleInWindow)->GetCursorPosition(); + this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition( + cursorPos[0],cursorPos[1],cursorPos[2],cursorPos[3]); + this->SM->UpdateViews(1,VisibleInWindow); + this->SM->UpdateLinked(VisibleInWindow); + return; } - if (KeyPress == "F5") + if (KeyPress == "F5") { - this->SM->GetSlicer(VisibleInWindow)->FlipHorizontalView(); - this->SM->GetSlicer(VisibleInWindow)->Render(); - return; + this->SM->GetSlicer(VisibleInWindow)->FlipHorizontalView(); + this->SM->GetSlicer(VisibleInWindow)->Render(); + return; } - if (KeyPress == "F6") + if (KeyPress == "F6") { - this->SM->GetSlicer(VisibleInWindow)->FlipVerticalView(); - this->SM->GetSlicer(VisibleInWindow)->Render(); - return; + this->SM->GetSlicer(VisibleInWindow)->FlipVerticalView(); + this->SM->GetSlicer(VisibleInWindow)->Render(); + return; } - if (KeyPress == "Up") + if (KeyPress == "Up") { - this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()+1); - this->SM->UpdateSlice(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()+1); + this->SM->UpdateSlice(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - if (KeyPress == "Down") + if (KeyPress == "Down") { - this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()-1); - this->SM->UpdateSlice(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()-1); + this->SM->UpdateSlice(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - if (KeyPress == "space") + if (KeyPress == "space") { - newLandmark = true; + newLandmark = true; } - if (KeyPress == "Left") - this->SM->SetPreviousTSlice(VisibleInWindow); - if (KeyPress == "Right") - this->SM->SetNextTSlice(VisibleInWindow); + if (KeyPress == "Left") + this->SM->SetPreviousTSlice(VisibleInWindow); + if (KeyPress == "Right") + this->SM->SetNextTSlice(VisibleInWindow); - if (KeyPress == "F1") + if (KeyPress == "F2") { - this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Sagital\n"); - this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(0); - this->SM->UpdateSliceRange(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Sagital\n"); + this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(0); + this->SM->UpdateSliceRange(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - if (KeyPress == "F2") + if (KeyPress == "F3") { - this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Coronal\n"); - this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(1); - this->SM->UpdateSliceRange(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Coronal\n"); + this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(1); + this->SM->UpdateSliceRange(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - if (KeyPress == "F3") + if (KeyPress == "F4") { - this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Axial\n"); - this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(2); - this->SM->UpdateSliceRange(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetText(2,"Axial\n"); + this->SM->GetSlicer(VisibleInWindow)->SetSliceOrientation(2); + this->SM->UpdateSliceRange(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } } - //All type of mouse events - if (event == vtkCommand::LeaveEvent) + //All type of mouse events + if (event == vtkCommand::LeaveEvent) { - this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, - -VTK_DOUBLE_MAX,this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); - this->SM->GetSlicer(VisibleInWindow)->Render(); - return; + this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, + -VTK_DOUBLE_MAX,this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); + this->SM->GetSlicer(VisibleInWindow)->Render(); + return; } - if (event == vtkCommand::StartWindowLevelEvent) + if (event == vtkCommand::StartWindowLevelEvent) { - mStartSlicer = -1; - this->InitialWindow = this->SM->GetColorWindow(); - this->InitialLevel = this->SM->GetColorLevel(); + mStartSlicer = -1; + this->InitialWindow = this->SM->GetColorWindow(); + this->InitialLevel = this->SM->GetColorLevel(); - if (VisibleInWindow > -1) + if (VisibleInWindow > -1) { - mStartSlicer = VisibleInWindow; + mStartSlicer = VisibleInWindow; } - return; + return; } - if (event == vtkCommand::EndWindowLevelEvent) + if (event == vtkCommand::EndWindowLevelEvent) { - mStartSlicer = -1; + mStartSlicer = -1; } } - if (VisibleInWindow > -1) + if (VisibleInWindow > -1) { - this->SM->Activated(); - //if(!this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->GetVisibility()) - this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetVisibility(1); + this->SM->Activated(); + //if(!this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->GetVisibility()) + this->SM->GetSlicer(VisibleInWindow)->GetAnnotation()->SetVisibility(1); - if (event == vtkCommand::MouseWheelForwardEvent && !isi->GetInteractor()->GetControlKey()) + if (event == vtkCommand::MouseWheelForwardEvent && !isi->GetInteractor()->GetControlKey()) { - this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()+1); - this->SM->UpdateSlice(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()+1); + this->SM->UpdateSlice(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - else if (event == vtkCommand::MouseWheelForwardEvent && isi->GetInteractor()->GetControlKey()) + else if (event == vtkCommand::MouseWheelForwardEvent && isi->GetInteractor()->GetControlKey()) { - double factor = 2; - this->Dolly(pow((double)1.1, factor),isi->GetInteractor()); + double factor = 2; + this->Dolly(pow((double)1.1, factor),isi->GetInteractor()); } - else if (event == vtkCommand::MouseWheelBackwardEvent && !isi->GetInteractor()->GetControlKey()) + else if (event == vtkCommand::MouseWheelBackwardEvent && !isi->GetInteractor()->GetControlKey()) { - this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()-1); - this->SM->UpdateSlice(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->GetSlicer(VisibleInWindow)->SetSlice(this->SM->GetSlicer(VisibleInWindow)->GetSlice()-1); + this->SM->UpdateSlice(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - else if (event == vtkCommand::MouseWheelBackwardEvent && isi->GetInteractor()->GetControlKey()) + else if (event == vtkCommand::MouseWheelBackwardEvent && isi->GetInteractor()->GetControlKey()) { - double factor = -2; - this->Dolly(pow((double)1.1, factor),isi->GetInteractor()); + double factor = -2; + this->Dolly(pow((double)1.1, factor),isi->GetInteractor()); } - double xWorld=0; double yWorld=0; double zWorld=0; - - //Move into World Coordinate - renderer->DisplayToNormalizedDisplay(x,y); - renderer->NormalizedDisplayToViewport(x,y); - renderer->ViewportToNormalizedViewport(x,y); - renderer->NormalizedViewportToView(x,y,z); - renderer->ViewToWorld(x,y,z); - switch (this->SM->GetSlicer(VisibleInWindow)->GetSliceOrientation()) + double xWorld=0; double yWorld=0; double zWorld=0; + + //Move into World Coordinate + renderer->DisplayToNormalizedDisplay(x,y); + renderer->NormalizedDisplayToViewport(x,y); + renderer->ViewportToNormalizedViewport(x,y); + renderer->NormalizedViewportToView(x,y,z); + renderer->ViewToWorld(x,y,z); + switch (this->SM->GetSlicer(VisibleInWindow)->GetSliceOrientation()) { - case vtkImageViewer2::SLICE_ORIENTATION_XY: - xWorld = x; - yWorld = y; - zWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[2] + - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[2]; - break; - - case vtkImageViewer2::SLICE_ORIENTATION_XZ: - xWorld = x; - yWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[1] + - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[1]; - zWorld = z; - break; - - case vtkImageViewer2::SLICE_ORIENTATION_YZ: - xWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[0] + - this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[0]; - yWorld = y; - zWorld = z; - break; + case vtkImageViewer2::SLICE_ORIENTATION_XY: + xWorld = x; + yWorld = y; + zWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[2] + + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[2]; + break; + + case vtkImageViewer2::SLICE_ORIENTATION_XZ: + xWorld = x; + yWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[1] + + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[1]; + zWorld = z; + break; + + case vtkImageViewer2::SLICE_ORIENTATION_YZ: + xWorld = this->SM->GetSlicer(VisibleInWindow)->GetSlice()* + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetSpacing()[0] + + this->SM->GetSlicer(VisibleInWindow)->GetInput()->GetOrigin()[0]; + yWorld = y; + zWorld = z; + break; } - this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(xWorld,yWorld,zWorld, - this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); - if (newLandmark) + this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(xWorld,yWorld,zWorld, + this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); + if (newLandmark) { - this->SM->AddLandmark(xWorld,yWorld,zWorld, - this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); - this->SM->GetSlicer(VisibleInWindow)->UpdateLandmarks(); - this->SM->Render(); + this->SM->AddLandmark(xWorld,yWorld,zWorld, + this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); + this->SM->GetSlicer(VisibleInWindow)->UpdateLandmarks(); + this->SM->Render(); } - if (event == vtkCommand::PickEvent || event == vtkCommand::StartPickEvent) + if (event == vtkCommand::PickEvent || event == vtkCommand::StartPickEvent) { - this->SM->UpdateViews(1,VisibleInWindow); - this->SM->UpdateLinked(VisibleInWindow); - this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); + this->SM->UpdateViews(1,VisibleInWindow); + this->SM->UpdateLinked(VisibleInWindow); + this->SM->UpdateInfoOnCursorPosition(VisibleInWindow); } - else + else { - this->SM->GetSlicer(VisibleInWindow)->Render(); + this->SM->GetSlicer(VisibleInWindow)->Render(); } - //this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, - //-VTK_DOUBLE_MAX,this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); - //this->SM->GetSlicer(VisibleInWindow)->Render(); + //this->SM->GetSlicer(VisibleInWindow)->SetCurrentPosition(-VTK_DOUBLE_MAX,-VTK_DOUBLE_MAX, + //-VTK_DOUBLE_MAX,this->SM->GetSlicer(VisibleInWindow)->GetTSlice()); + //this->SM->GetSlicer(VisibleInWindow)->Render(); } - if (event == vtkCommand::WindowLevelEvent && mStartSlicer > -1) + if (event == vtkCommand::WindowLevelEvent && mStartSlicer > -1) { - this->SM->GetSlicer(mStartSlicer)->GetAnnotation()->SetVisibility(1); - // Adjust the window level here - int *size = isi->GetInteractor()->GetRenderWindow()->GetSize(); - double window = this->InitialWindow; - double level = this->InitialLevel; - double range[2]; - this->SM->GetImage()->GetScalarRange(range); - - // Compute normalized delta - double dx = static_cast(isi->GetWindowLevelCurrentPosition()[0] - - isi->GetWindowLevelStartPosition()[0]) / size[0]; - double dy = static_cast(isi->GetWindowLevelStartPosition()[1] - - isi->GetWindowLevelCurrentPosition()[1]) / size[1]; - //Window is exponential in nature, use exponential to avoid falling into negative numbers - dx = std::exp(1.0 * (dx*fabs(dx) + dx)) ; //Quadratic behavior for more reactive interface - dy = 0.15 * (dy*fabs(dy) + dy) * (range[1]-range[0]);//Quadratic behavior for more reactive interface - - this->SM->SetColorWindow(window*dx); - this->SM->SetColorLevel(level-dy); - this->SM->SetPreset(6); - this->SM->UpdateWindowLevel(); - this->SM->Render(); - return; + this->SM->GetSlicer(mStartSlicer)->GetAnnotation()->SetVisibility(1); + // Adjust the window level here + int *size = isi->GetInteractor()->GetRenderWindow()->GetSize(); + double window = this->InitialWindow; + double level = this->InitialLevel; + double range[2]; + this->SM->GetImage()->GetScalarRange(range); + + // Compute normalized delta + double dx = static_cast(isi->GetWindowLevelCurrentPosition()[0] - + isi->GetWindowLevelStartPosition()[0]) / size[0]; + double dy = static_cast(isi->GetWindowLevelStartPosition()[1] - + isi->GetWindowLevelCurrentPosition()[1]) / size[1]; + //Window is exponential in nature, use exponential to avoid falling into negative numbers + dx = std::exp(1.0 * (dx*fabs(dx) + dx)) ; //Quadratic behavior for more reactive interface + dy = 0.15 * (dy*fabs(dy) + dy) * (range[1]-range[0]);//Quadratic behavior for more reactive interface + + this->SM->SetColorWindow(window*dx); + this->SM->SetColorLevel(level-dy); + this->SM->SetPreset(6); + this->SM->UpdateWindowLevel(); + this->SM->Render(); + return; } } } @@ -427,149 +431,149 @@ void vvSlicerManagerCallback::Execute(vtkObject *caller, //------------------------------------------------------------------------------ -void vvSlicerManagerCallback::Dolly(double factor, vtkRenderWindowInteractor *interactor) +void vvSlicerManagerCommand::Dolly(double factor, vtkRenderWindowInteractor *interactor) { - int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow()); - vtkRenderer* renderer; - if (VisibleInWindow>-1) - renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); - else + int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow()); + vtkRenderer* renderer; + if (VisibleInWindow>-1) + renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); + else { - return; + return; } - double viewFocus[4],viewPoint[4],motionVector[3], focalDepth; - double oldPos[3], newPos[3], distance[2]; - vtkCamera *camera = renderer->GetActiveCamera(); - camera->GetFocalPoint(viewFocus); - - renderer->SetWorldPoint(viewFocus[0], viewFocus[0], viewFocus[0], 1.0); - renderer->WorldToDisplay(); - renderer->GetDisplayPoint(viewFocus); - - focalDepth = viewFocus[2]; - - oldPos[0] = renderer->GetCenter()[0]; - oldPos[1] = renderer->GetCenter()[1]; - oldPos[2] = focalDepth; - - distance[0] = 1/factor* - (interactor->GetEventPosition()[0]-renderer->GetCenter()[0]); - distance[1] = 1/factor* - (interactor->GetEventPosition()[1]-renderer->GetCenter()[1]); - - newPos[0] = interactor->GetEventPosition()[0] - distance[0]; - newPos[1] = interactor->GetEventPosition()[1] - distance[1]; - newPos[2] = focalDepth; - - renderer->DisplayToNormalizedDisplay(oldPos[0],oldPos[1]); - renderer->NormalizedDisplayToViewport(oldPos[0],oldPos[1]); - renderer->ViewportToNormalizedViewport(oldPos[0],oldPos[1]); - renderer->NormalizedViewportToView(oldPos[0],oldPos[1],oldPos[2]); - renderer->ViewToWorld(oldPos[0],oldPos[1],oldPos[2]); - - renderer->DisplayToNormalizedDisplay(newPos[0],newPos[1]); - renderer->NormalizedDisplayToViewport(newPos[0],newPos[1]); - renderer->ViewportToNormalizedViewport(newPos[0],newPos[1]); - renderer->NormalizedViewportToView(newPos[0],newPos[1],newPos[2]); - renderer->ViewToWorld(newPos[0],newPos[1],newPos[2]); - - motionVector[0] = newPos[0] - oldPos[0]; - motionVector[1] = newPos[1] - oldPos[1]; - motionVector[2] = newPos[2] - oldPos[2]; - - camera->GetFocalPoint(viewFocus); - camera->GetPosition(viewPoint); - camera->SetFocalPoint(motionVector[0] + viewFocus[0], - motionVector[1] + viewFocus[1], - motionVector[2] + viewFocus[2]); - - camera->SetPosition(motionVector[0] + viewPoint[0], - motionVector[1] + viewPoint[1], - motionVector[2] + viewPoint[2]); - - if (camera->GetParallelProjection()) + double viewFocus[4],viewPoint[4],motionVector[3], focalDepth; + double oldPos[3], newPos[3], distance[2]; + vtkCamera *camera = renderer->GetActiveCamera(); + camera->GetFocalPoint(viewFocus); + + renderer->SetWorldPoint(viewFocus[0], viewFocus[0], viewFocus[0], 1.0); + renderer->WorldToDisplay(); + renderer->GetDisplayPoint(viewFocus); + + focalDepth = viewFocus[2]; + + oldPos[0] = renderer->GetCenter()[0]; + oldPos[1] = renderer->GetCenter()[1]; + oldPos[2] = focalDepth; + + distance[0] = 1/factor* + (interactor->GetEventPosition()[0]-renderer->GetCenter()[0]); + distance[1] = 1/factor* + (interactor->GetEventPosition()[1]-renderer->GetCenter()[1]); + + newPos[0] = interactor->GetEventPosition()[0] - distance[0]; + newPos[1] = interactor->GetEventPosition()[1] - distance[1]; + newPos[2] = focalDepth; + + renderer->DisplayToNormalizedDisplay(oldPos[0],oldPos[1]); + renderer->NormalizedDisplayToViewport(oldPos[0],oldPos[1]); + renderer->ViewportToNormalizedViewport(oldPos[0],oldPos[1]); + renderer->NormalizedViewportToView(oldPos[0],oldPos[1],oldPos[2]); + renderer->ViewToWorld(oldPos[0],oldPos[1],oldPos[2]); + + renderer->DisplayToNormalizedDisplay(newPos[0],newPos[1]); + renderer->NormalizedDisplayToViewport(newPos[0],newPos[1]); + renderer->ViewportToNormalizedViewport(newPos[0],newPos[1]); + renderer->NormalizedViewportToView(newPos[0],newPos[1],newPos[2]); + renderer->ViewToWorld(newPos[0],newPos[1],newPos[2]); + + motionVector[0] = newPos[0] - oldPos[0]; + motionVector[1] = newPos[1] - oldPos[1]; + motionVector[2] = newPos[2] - oldPos[2]; + + camera->GetFocalPoint(viewFocus); + camera->GetPosition(viewPoint); + camera->SetFocalPoint(motionVector[0] + viewFocus[0], + motionVector[1] + viewFocus[1], + motionVector[2] + viewFocus[2]); + + camera->SetPosition(motionVector[0] + viewPoint[0], + motionVector[1] + viewPoint[1], + motionVector[2] + viewPoint[2]); + + if (camera->GetParallelProjection()) { - camera->SetParallelScale(camera->GetParallelScale() / factor); + camera->SetParallelScale(camera->GetParallelScale() / factor); } - else + else { - camera->Dolly(factor); + camera->Dolly(factor); } - if (interactor->GetLightFollowCamera()) + if (interactor->GetLightFollowCamera()) { - renderer->UpdateLightsGeometryToFollowCamera(); + renderer->UpdateLightsGeometryToFollowCamera(); } - renderer->ResetCameraClippingRange(); - //interactor->Render(); + renderer->ResetCameraClippingRange(); + //interactor->Render(); } -void vvSlicerManagerCallback::FlyToPosition(vtkRenderWindowInteractor *interactor,vvSlicer* slicer) +void vvSlicerManagerCommand::FlyToPosition(vtkRenderWindowInteractor *interactor,vvSlicer* slicer) { - double flyFrom[3], flyTo[3]; - double d[3], focalPt[3], position[3], positionFrom[3]; - int i, j; - int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow()); - vtkRenderer* renderer=NULL; - if (VisibleInWindow>-1) - renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); - else - return; - - interactor->GetPicker()->Pick(interactor->GetEventPosition()[0], - interactor->GetEventPosition()[1], 0.0, - renderer); - - vtkAssemblyPath *path=NULL; - vtkAbstractPropPicker *picker; - if ( (picker=vtkAbstractPropPicker::SafeDownCast(interactor->GetPicker()))) + double flyFrom[3], flyTo[3]; + double d[3], focalPt[3], position[3], positionFrom[3]; + int i, j; + int VisibleInWindow = this->FindSlicerNumber(interactor->GetRenderWindow()); + vtkRenderer* renderer=NULL; + if (VisibleInWindow>-1) + renderer=this->SM->GetSlicer(VisibleInWindow)->GetRenderer(); + else + return; + + interactor->GetPicker()->Pick(interactor->GetEventPosition()[0], + interactor->GetEventPosition()[1], 0.0, + renderer); + + vtkAssemblyPath *path=NULL; + vtkAbstractPropPicker *picker; + if ( (picker=vtkAbstractPropPicker::SafeDownCast(interactor->GetPicker()))) { - path = picker->GetPath(); + path = picker->GetPath(); } - if ( path != NULL ) + if ( path != NULL ) { - flyTo[0] = picker->GetPickPosition()[0]; - flyTo[1] = picker->GetPickPosition()[1]; - flyTo[2] = picker->GetPickPosition()[2]; - renderer->GetActiveCamera()->GetFocalPoint(flyFrom); - renderer->GetActiveCamera()->GetPosition(positionFrom); + flyTo[0] = picker->GetPickPosition()[0]; + flyTo[1] = picker->GetPickPosition()[1]; + flyTo[2] = picker->GetPickPosition()[2]; + renderer->GetActiveCamera()->GetFocalPoint(flyFrom); + renderer->GetActiveCamera()->GetPosition(positionFrom); - switch (slicer->GetSliceOrientation()) + switch (slicer->GetSliceOrientation()) { case vtkImageViewer2::SLICE_ORIENTATION_XY: - flyTo[2] = flyFrom[2]; - break; + flyTo[2] = flyFrom[2]; + break; case vtkImageViewer2::SLICE_ORIENTATION_XZ: - flyTo[1] = flyFrom[1]; - break; + flyTo[1] = flyFrom[1]; + break; case vtkImageViewer2::SLICE_ORIENTATION_YZ: - flyTo[0] = flyFrom[0]; - break; + flyTo[0] = flyFrom[0]; + break; } - for (i=0; i<3; i++) + for (i=0; i<3; i++) { - d[i] = flyTo[i] - flyFrom[i]; + d[i] = flyTo[i] - flyFrom[i]; } - double distance = vtkMath::Normalize(d); - double delta = distance/15; + double distance = vtkMath::Normalize(d); + double delta = distance/15; - for (i=1; i<=15; i++) + for (i=1; i<=15; i++) { - for (j=0; j<3; j++) + for (j=0; j<3; j++) { - focalPt[j] = flyFrom[j] + d[j]*i*delta; - position[j] = positionFrom[j] + d[j]*i*delta; + focalPt[j] = flyFrom[j] + d[j]*i*delta; + position[j] = positionFrom[j] + d[j]*i*delta; } - renderer->GetActiveCamera()->SetFocalPoint(focalPt); - renderer->GetActiveCamera()->SetPosition(position); - renderer->GetActiveCamera()->Dolly(0.3/15 + 1.0); - renderer->ResetCameraClippingRange(); - interactor->Render(); + renderer->GetActiveCamera()->SetFocalPoint(focalPt); + renderer->GetActiveCamera()->SetPosition(position); + renderer->GetActiveCamera()->Dolly(0.3/15 + 1.0); + renderer->ResetCameraClippingRange(); + interactor->Render(); } } }