From 26bbfd8756d07eb73acbfe2fcfd77b3a4f3b52a9 Mon Sep 17 00:00:00 2001 From: dsarrut Date: Sun, 7 Feb 2010 12:00:57 +0000 Subject: [PATCH] binarize --- filters/clitkBinarizeImageGenericFilter.txx | 2 +- vv/CMakeLists.txt | 1 + vv/vvImageContour.cxx | 86 +- vv/vvImageContour.h | 33 +- vv/vvIntensityValueSlider.cxx | 9 +- vv/vvMainWindow.cxx | 5 +- vv/vvSlicer.cxx | 1600 ++++++++++--------- vv/vvToolBinarize.cxx | 241 +-- vv/vvToolBinarize.h | 25 +- 9 files changed, 946 insertions(+), 1056 deletions(-) diff --git a/filters/clitkBinarizeImageGenericFilter.txx b/filters/clitkBinarizeImageGenericFilter.txx index 56d85e9..835decc 100644 --- a/filters/clitkBinarizeImageGenericFilter.txx +++ b/filters/clitkBinarizeImageGenericFilter.txx @@ -24,7 +24,7 @@ namespace clitk ImageToImageGenericFilter("Binarize") { // InitializeImageType<2>(); InitializeImageType<3>(); - //InitializeImageType<4>(); + InitializeImageType<4>(); } //-------------------------------------------------------------------- diff --git a/vv/CMakeLists.txt b/vv/CMakeLists.txt index 9a051d0..1b76974 100644 --- a/vv/CMakeLists.txt +++ b/vv/CMakeLists.txt @@ -114,6 +114,7 @@ SET(vv_SRCS vvToolCreatorBase.cxx vvToolBinarize.cxx vvToolInputSelectorWidget.cxx + vvImageContour.cxx ) QT4_WRAP_CPP(vv_SRCS diff --git a/vv/vvImageContour.cxx b/vv/vvImageContour.cxx index ae6459c..63df2cb 100644 --- a/vv/vvImageContour.cxx +++ b/vv/vvImageContour.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvImageContour.cxx,v $ Language: C++ - Date: $Date: 2010/02/07 09:24:46 $ - Version: $Revision: 1.1 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.2 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2010 @@ -26,48 +26,81 @@ =========================================================================*/ #include "vvImageContour.h" +#include +#include +#include +#include +#include //------------------------------------------------------------------------------ vvImageContour::vvImageContour() { - mClipper = vtkImageClip::New(); - mSquares = vtkMarchingSquares::New(); - mSquaresMapper = vtkPolyDataMapper::New(); - mSquaresActor = vtkActor::New(); + mTSlice = -1; + mSlice = 0; } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ vvImageContour::~vvImageContour() { - + for (unsigned int i = 0; i < mSlicer->GetImage()->GetVTKImages().size(); i++) { + mSlicer->GetRenderer()->RemoveActor(mSquaresActorList[i]); + } + mSquaresActorList.clear(); + mSquaresList.clear(); + mClipperList.clear(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvImageContour::setSlicer(vvSlicer * slicer) { - mSlicer = slicer; - mClipper->SetInput(slicer->GetImage()->GetFirstVTKImageData()); - mSquares->SetInput(mClipper->GetOutput()); - mSquaresMapper->SetInput(mSquares->GetOutput()); - mSquaresMapper->ScalarVisibilityOff(); - mSquaresActor->SetMapper(mSquaresMapper); - mSquaresActor->GetProperty()->SetColor(1.0,0,0); - mSquaresActor->SetPickable(0); - mSlicer->GetRenderer()->AddActor(mSquaresActor1); - mSquares->Update(); + mSlicer = slicer; + + for (unsigned int numImage = 0; numImage < mSlicer->GetImage()->GetVTKImages().size(); numImage++) { + // DD(numImage); + vtkImageClip * mClipper = vtkImageClip::New(); + vtkMarchingSquares * mSquares = vtkMarchingSquares::New(); + vtkPolyDataMapper * mSquaresMapper = vtkPolyDataMapper::New(); + vtkActor * mSquaresActor = vtkActor::New(); + + mClipper->SetInput(mSlicer->GetImage()->GetVTKImages()[numImage]); + mSquares->SetInput(mClipper->GetOutput()); + mSquaresMapper->SetInput(mSquares->GetOutput()); + mSquaresMapper->ScalarVisibilityOff(); + mSquaresActor->SetMapper(mSquaresMapper); + mSquaresActor->GetProperty()->SetColor(1.0,0,0); + mSquaresActor->SetPickable(0); + mSquaresActor->VisibilityOff(); + mSlicer->GetRenderer()->AddActor(mSquaresActor); + + mSquaresActorList.push_back(mSquaresActor); + mSquaresList.push_back(mSquares); + mClipperList.push_back(mClipper); + + } + //mSquares->Update(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvImageContour::update() { - int slice = mSlicer->GetSlice(); - int tslice = mCurrentSliceManager->GetSlicer(0)->GetTSlice(); - DD(tslice); - DD(slice); +void vvImageContour::update(int value) { + mSlice = mSlicer->GetSlice(); + + // Only change actor visibility if tslice change + if (mTSlice != mSlicer->GetTSlice()) { + if (mTSlice != -1) + mSquaresActorList[mTSlice]->VisibilityOff(); + mTSlice = mSlicer->GetTSlice(); + mSquaresActorList[mTSlice]->VisibilityOn(); + } + + vtkMarchingSquares * mSquares = mSquaresList[mTSlice]; + vtkImageClip * mClipper = mClipperList[mTSlice]; + vtkActor * mSquaresActor = mSquaresActorList[mTSlice]; - // mClipper->SetInput(mCurrentSliceManager->GetSlicer(0)->GetInput()); + // Do it + mSquares->SetValue(0,value); int* extent = mSlicer->GetImageActor()->GetDisplayExtent(); mClipper->SetOutputWholeExtent(extent[0],extent[1],extent[2], @@ -82,7 +115,7 @@ void vvImageContour::update() { switch (i) { case 0: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[0] > mSlice) { mSquaresActor->SetPosition(1,0,0); // mSquaresActor2->SetPosition(1,0,0); @@ -94,7 +127,7 @@ void vvImageContour::update() { } break; case 2: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[1] > mSlice) { mSquaresActor->SetPosition(0,1,0); // mSquaresActor2->SetPosition(0,1,0); @@ -106,7 +139,7 @@ void vvImageContour::update() { } break; case 4: - if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > slice) + if (mSlicer->GetRenderer()->GetActiveCamera()->GetPosition()[2] > mSlice) { mSquaresActor->SetPosition(0,0,1); // mSquaresActor2->SetPosition(0,0,1); @@ -119,7 +152,6 @@ void vvImageContour::update() { break; } mSquares->Update(); - // mSquares2->Update(); } //------------------------------------------------------------------------------ diff --git a/vv/vvImageContour.h b/vv/vvImageContour.h index 36c0af8..0e9a943 100644 --- a/vv/vvImageContour.h +++ b/vv/vvImageContour.h @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvImageContour.h,v $ Language: C++ - Date: $Date: 2010/02/07 09:24:46 $ - Version: $Revision: 1.1 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.2 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2010 @@ -28,15 +28,15 @@ #ifndef VVIMAGECONTOUR_H #define VVIMAGECONTOUR_H -#include "vtkMarchingSquares.h" -#include "vtkImageClip.h" -#include "vtkMarchingCubes.h" -#include "vtkPolyData.h" -#include "vtkPolyDataMapper.h" -#include "vtkActor.h" -#include "vtkProperty.h" -#include "vtkRenderer.h" +#include +#include +#include +#include +#include +#include +#include +#include "clitkCommon.h" #include "vvSlicer.h" //------------------------------------------------------------------------------ @@ -48,16 +48,17 @@ class vvImageContour ~vvImageContour(); void setSlicer(vvSlicer * slicer); - vtkActor * getActor() { return mSquaresActor;} - void update(); + // vtkActor * getActor() { return mSquaresActor;} + void update(int value); protected: vvSlicer * mSlicer; + int mSlice; + int mTSlice; - vtkImageClip* mClipper; - vtkMarchingSquares* mSquares; - vtkPolyDataMapper* mSquaresMapper; - vtkActor* mSquaresActor; + std::vector mClipperList; + std::vector mSquaresList; + std::vector mSquaresActorList; }; // end class vvImageContour //------------------------------------------------------------------------------ diff --git a/vv/vvIntensityValueSlider.cxx b/vv/vvIntensityValueSlider.cxx index 11a5f58..82d9258 100644 --- a/vv/vvIntensityValueSlider.cxx +++ b/vv/vvIntensityValueSlider.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvIntensityValueSlider.cxx,v $ Language: C++ - Date: $Date: 2010/01/29 13:54:37 $ - Version: $Revision: 1.1 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.2 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2008 @@ -33,7 +33,10 @@ vvIntensityValueSlider::vvIntensityValueSlider(QWidget * parent, Qt::WindowFlags :QWidget(parent,f), Ui::vvIntensityValueSlider() { // GUI Initialization - setupUi(this); + setupUi(this); + mValue = 0; + SetMaximum(1000); + SetMinimum(-1000); // Connect signals & slots connect(mSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedFromSpinBox(double))); diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index 7e955c0..5473980 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvMainWindow.cxx,v $ Language: C++ - Date: $Date: 2010/02/07 08:49:41 $ - Version: $Revision: 1.8 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.9 $ Author : Pierre Seroul (pierre.seroul@gmail.com) Copyright (C) 200COLUMN_IMAGE_NAME @@ -2328,6 +2328,7 @@ void vvMainWindow::NOVerticalSliderChanged() { if (DataTree->topLevelItem(i)->data(COLUMN_UL_VIEW,Qt::CheckStateRole).toInt() > 1) { mSlicerManagers[i]->GetSlicer(0)->SetSlice(value); + // mSlicerManagers[i]->UpdateSlice(0); // <-- too much update... break; } } diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index 2b29e2f..35897dd 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -1,29 +1,28 @@ /*========================================================================= -Program: vv -Language: C++ -Author : Pierre Seroul (pierre.seroul@gmail.com) + Program: vv + Language: C++ + Author : Pierre Seroul (pierre.seroul@gmail.com) -Copyright (C) 2008 -Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr -CREATIS-LRMN 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 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. + 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. -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. + 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 . + You should have received a copy of the GNU General Public License + along with this program. If not, see . -=========================================================================*/ + =========================================================================*/ #include "vvSlicer.h" -#include "vvImage.h" #include "vvImage.h" #include "vvSlicerManagerCommand.h" #include "vvGlyphSource.h" @@ -77,681 +76,681 @@ vtkStandardNewMacro(vvSlicer); vvSlicer::vvSlicer() { - mImage = NULL; - mCurrentTSlice = 0; - - mCurrent[0] = -VTK_DOUBLE_MAX; - mCurrent[1] = -VTK_DOUBLE_MAX; - mCurrent[2] = -VTK_DOUBLE_MAX; - - mCursor[0] = -VTK_DOUBLE_MAX; - mCursor[1] = -VTK_DOUBLE_MAX; - mCursor[2] = -VTK_DOUBLE_MAX; - mCursor[3] = -VTK_DOUBLE_MAX; - - mSubSampling = 5; - mScale = 1; - mVFLog = 0; - - std::string text = "F1 = sagital; F2 = coronal; F3 = axial\n"; - text += "F5 = horizontal flip; F6 = vertical flip\n\n"; - text += "0,1,2,3,4,5 : preset windowing\n"; - text += "6,7,8,9 : preset colormap\n"; - text += "r : reset view\n"; - text += "l : reload image\n"; - text += "f : fly to mouse position\n"; - text += "g : go to cross hair position\n\n"; - text += "Up,down : change slice\n"; - text += "Left,right : change tenporal slice\n\n"; - text += "Scrollbar (or w/x) : zoom in/out\n"; - text += "left button : synchronize all views\n"; - text += "middle button : grab image\n"; - text += "right button : change windowing\n"; - - crossCursor = vtkCursor2D::New(); - crossCursor->AllOff(); - crossCursor->AxesOn(); - crossCursor->SetTranslationMode(1); - crossCursor->SetRadius(2); - - pdm = vtkPolyDataMapper2D::New(); - pdm->SetInput(crossCursor->GetOutput()); - - pdmA = vtkActor2D::New(); - pdmA->SetMapper(pdm); - pdmA->GetProperty()->SetColor(255,10,212); - pdmA->SetVisibility(0); - pdmA->SetPickable(0); - - ca = vtkCornerAnnotation::New(); - ca->GetTextProperty()->SetColor(255,10,212); - ca->SetVisibility(1); - mFileName = ""; - - mVF = NULL; - mOverlay = NULL; - mFusion = NULL; - mLandmarks = NULL; - - legend = vtkSmartPointer::New(); - //legend->SetTitle("test!"); - legend->SetPosition(0.82,0.18); - legend->SetWidth(0.1); - legend->SetVisibility(0); - legend->SetLabelFormat("%.1f"); - this->GetRenderer()->AddActor(legend); - - this->WindowLevel->Delete(); - this->WindowLevel = vvImageMapToWLColors::New(); - this->InstallPipeline(); + mImage = NULL; + mCurrentTSlice = 0; + + mCurrent[0] = -VTK_DOUBLE_MAX; + mCurrent[1] = -VTK_DOUBLE_MAX; + mCurrent[2] = -VTK_DOUBLE_MAX; + + mCursor[0] = -VTK_DOUBLE_MAX; + mCursor[1] = -VTK_DOUBLE_MAX; + mCursor[2] = -VTK_DOUBLE_MAX; + mCursor[3] = -VTK_DOUBLE_MAX; + + mSubSampling = 5; + mScale = 1; + mVFLog = 0; + + std::string text = "F1 = sagital; F2 = coronal; F3 = axial\n"; + text += "F5 = horizontal flip; F6 = vertical flip\n\n"; + text += "0,1,2,3,4,5 : preset windowing\n"; + text += "6,7,8,9 : preset colormap\n"; + text += "r : reset view\n"; + text += "l : reload image\n"; + text += "f : fly to mouse position\n"; + text += "g : go to cross hair position\n\n"; + text += "Up,down : change slice\n"; + text += "Left,right : change tenporal slice\n\n"; + text += "Scrollbar (or w/x) : zoom in/out\n"; + text += "left button : synchronize all views\n"; + text += "middle button : grab image\n"; + text += "right button : change windowing\n"; + + crossCursor = vtkCursor2D::New(); + crossCursor->AllOff(); + crossCursor->AxesOn(); + crossCursor->SetTranslationMode(1); + crossCursor->SetRadius(2); + + pdm = vtkPolyDataMapper2D::New(); + pdm->SetInput(crossCursor->GetOutput()); + + pdmA = vtkActor2D::New(); + pdmA->SetMapper(pdm); + pdmA->GetProperty()->SetColor(255,10,212); + pdmA->SetVisibility(0); + pdmA->SetPickable(0); + + ca = vtkCornerAnnotation::New(); + ca->GetTextProperty()->SetColor(255,10,212); + ca->SetVisibility(1); + mFileName = ""; + + mVF = NULL; + mOverlay = NULL; + mFusion = NULL; + mLandmarks = NULL; + + legend = vtkSmartPointer::New(); + //legend->SetTitle("test!"); + legend->SetPosition(0.82,0.18); + legend->SetWidth(0.1); + legend->SetVisibility(0); + legend->SetLabelFormat("%.1f"); + this->GetRenderer()->AddActor(legend); + + this->WindowLevel->Delete(); + this->WindowLevel = vvImageMapToWLColors::New(); + this->InstallPipeline(); } vtkImageMapToWindowLevelColors* vvSlicer::GetOverlayMapper() { - return mOverlayMapper.GetPointer(); + return mOverlayMapper.GetPointer(); } vtkImageActor* vvSlicer::GetOverlayActor() { - return mOverlayActor.GetPointer(); + return mOverlayActor.GetPointer(); } vtkImageMapToWindowLevelColors* vvSlicer::GetFusionMapper() { - return mFusionMapper.GetPointer(); + return mFusionMapper.GetPointer(); } vtkImageActor* vvSlicer::GetFusionActor() { - return mFusionActor.GetPointer(); + return mFusionActor.GetPointer(); } vtkActor* vvSlicer::GetVFActor() { - return mVFActor.GetPointer(); + return mVFActor.GetPointer(); } vtkCornerAnnotation* vvSlicer::GetAnnotation() { - return ca.GetPointer(); + return ca.GetPointer(); } void vvSlicer::AddContour(vvMesh::Pointer contour,bool propagate) { - mSurfaceCutActors.push_back(new vvMeshActor()); - if (propagate) - mSurfaceCutActors.back()->Init(contour,mCurrentTSlice,mVF); - else - mSurfaceCutActors.back()->Init(contour,mCurrentTSlice); - mSurfaceCutActors.back()->SetSlicingOrientation(SliceOrientation); - this->GetRenderer()->AddActor(mSurfaceCutActors.back()->GetActor()); + mSurfaceCutActors.push_back(new vvMeshActor()); + if (propagate) + mSurfaceCutActors.back()->Init(contour,mCurrentTSlice,mVF); + else + mSurfaceCutActors.back()->Init(contour,mCurrentTSlice); + mSurfaceCutActors.back()->SetSlicingOrientation(SliceOrientation); + this->GetRenderer()->AddActor(mSurfaceCutActors.back()->GetActor()); - SetContourSlice(); + SetContourSlice(); } void vvSlicer::ToggleContourSuperposition() { - for (std::vector::iterator i=mSurfaceCutActors.begin(); - i!=mSurfaceCutActors.end();i++) - (*i)->ToggleSuperposition(); + for (std::vector::iterator i=mSurfaceCutActors.begin(); + i!=mSurfaceCutActors.end();i++) + (*i)->ToggleSuperposition(); } void vvSlicer::SetCursorColor(int r,int g, int b) { - pdmA->GetProperty()->SetColor(r,g,b); + pdmA->GetProperty()->SetColor(r,g,b); } void vvSlicer::SetCursorVisibility(bool s) { - pdmA->SetVisibility(s); + pdmA->SetVisibility(s); } bool vvSlicer::GetCursorVisibility() { - return pdmA->GetVisibility(); + return pdmA->GetVisibility(); } vvSlicer::~vvSlicer() { - for (std::vector::iterator i=mSurfaceCutActors.begin(); - i!=mSurfaceCutActors.end();i++) - delete (*i); + for (std::vector::iterator i=mSurfaceCutActors.begin(); + i!=mSurfaceCutActors.end();i++) + delete (*i); } void vvSlicer::SetCurrentPosition(double x, double y, double z, int t) { - mCurrent[0] = x; - mCurrent[1] = y; - mCurrent[2] = z; - mCurrentTSlice = t; + mCurrent[0] = x; + mCurrent[1] = y; + mCurrent[2] = z; + mCurrentTSlice = t; } void vvSlicer::SetImage(vvImage::Pointer image) { - if (image->GetVTKImages().size()) + if (image->GetVTKImages().size()) { - mImage = image; - this->Superclass::SetInput(image->GetVTKImages()[0]); - this->UpdateDisplayExtent(); - mCurrentTSlice = 0; - ca->SetText(0,mFileName.c_str()); + mImage = image; + this->Superclass::SetInput(image->GetVTKImages()[0]); + this->UpdateDisplayExtent(); + mCurrentTSlice = 0; + ca->SetText(0,mFileName.c_str()); } } void vvSlicer::SetOverlay(vvImage::Pointer overlay) { - if (overlay->GetVTKImages().size()) + if (overlay->GetVTKImages().size()) { - mOverlay = overlay; + mOverlay = overlay; - if (!mOverlayMapper) - mOverlayMapper = vtkImageMapToWindowLevelColors::New(); - mOverlayMapper->SetInput(overlay->GetVTKImages()[0]); + if (!mOverlayMapper) + mOverlayMapper = vtkImageMapToWindowLevelColors::New(); + mOverlayMapper->SetInput(overlay->GetVTKImages()[0]); - if (!mOverlayActor) + if (!mOverlayActor) { - mOverlayActor = vtkImageActor::New(); - mOverlayActor->SetInput(mOverlayMapper->GetOutput()); - mOverlayActor->SetPickable(0); - mOverlayActor->SetVisibility(false); - mOverlayActor->SetOpacity(0.5); - this->UpdateDisplayExtent(); + mOverlayActor = vtkImageActor::New(); + mOverlayActor->SetInput(mOverlayMapper->GetOutput()); + mOverlayActor->SetPickable(0); + mOverlayActor->SetVisibility(false); + mOverlayActor->SetOpacity(0.5); + this->UpdateDisplayExtent(); } - //stupid but necessary : the Overlay need to be rendered before fusion - if (mFusionActor) + //stupid but necessary : the Overlay need to be rendered before fusion + if (mFusionActor) { - this->GetRenderer()->RemoveActor(mFusionActor); - this->GetRenderer()->AddActor(mOverlayActor); - this->GetRenderer()->AddActor(mFusionActor); + this->GetRenderer()->RemoveActor(mFusionActor); + this->GetRenderer()->AddActor(mOverlayActor); + this->GetRenderer()->AddActor(mFusionActor); } - else - this->GetRenderer()->AddActor(mOverlayActor); + else + this->GetRenderer()->AddActor(mOverlayActor); - //Synchronize slice - SetTSlice(mCurrentTSlice); + //Synchronize slice + SetTSlice(mCurrentTSlice); } } void vvSlicer::SetFusion(vvImage::Pointer fusion) { - if (fusion->GetVTKImages().size()) + if (fusion->GetVTKImages().size()) { - mFusion = fusion; + mFusion = fusion; - if (!mFusionMapper) - mFusionMapper = vtkImageMapToWindowLevelColors::New(); - mFusionMapper->SetInput(fusion->GetVTKImages()[0]); + if (!mFusionMapper) + mFusionMapper = vtkImageMapToWindowLevelColors::New(); + mFusionMapper->SetInput(fusion->GetVTKImages()[0]); - if (!mFusionActor) + if (!mFusionActor) { - mFusionActor = vtkImageActor::New(); - mFusionActor->SetInput(mFusionMapper->GetOutput()); - mFusionActor->SetPickable(0); - mFusionActor->SetVisibility(false); - mFusionActor->SetOpacity(0.7); - this->UpdateDisplayExtent(); - this->GetRenderer()->AddActor(mFusionActor); + mFusionActor = vtkImageActor::New(); + mFusionActor->SetInput(mFusionMapper->GetOutput()); + mFusionActor->SetPickable(0); + mFusionActor->SetVisibility(false); + mFusionActor->SetOpacity(0.7); + this->UpdateDisplayExtent(); + this->GetRenderer()->AddActor(mFusionActor); } - //Synchronize slice - SetTSlice(mCurrentTSlice); + //Synchronize slice + SetTSlice(mCurrentTSlice); } } void vvSlicer::SetActorVisibility(const std::string& actor_type, int overlay_index ,bool vis) { - if (actor_type == "vector") + if (actor_type == "vector") { - this->mVFActor->SetVisibility(vis); + this->mVFActor->SetVisibility(vis); } - if (actor_type == "overlay") + if (actor_type == "overlay") { - this->mOverlayActor->SetVisibility(vis); + this->mOverlayActor->SetVisibility(vis); } - if (actor_type == "fusion") + if (actor_type == "fusion") { - this->mFusionActor->SetVisibility(vis); + this->mFusionActor->SetVisibility(vis); } - if (actor_type == "contour") - this->mSurfaceCutActors[overlay_index]->GetActor()->SetVisibility(vis); - UpdateDisplayExtent(); + if (actor_type == "contour") + this->mSurfaceCutActors[overlay_index]->GetActor()->SetVisibility(vis); + UpdateDisplayExtent(); } void vvSlicer::SetVF(vvImage::Pointer vf) { - if (vf->GetVTKImages().size()) + if (vf->GetVTKImages().size()) { - mVF = vf; + mVF = vf; - if (!mAAFilter) + if (!mAAFilter) { - mAAFilter=vtkAssignAttribute::New(); - mVOIFilter = vtkExtractVOI::New(); - mVOIFilter->SetSampleRate(mSubSampling,mSubSampling,mSubSampling); + mAAFilter=vtkAssignAttribute::New(); + mVOIFilter = vtkExtractVOI::New(); + mVOIFilter->SetSampleRate(mSubSampling,mSubSampling,mSubSampling); } - mVOIFilter->SetInput(vf->GetVTKImages()[0]); - mAAFilter->SetInput(mVOIFilter->GetOutput()); - ///This tells VTK to use the scalar (pixel) data of the image to draw the little arrows - mAAFilter->Assign(vtkDataSetAttributes::SCALARS, vtkDataSetAttributes::VECTORS, vtkAssignAttribute::POINT_DATA); - - if (!mArrow) - mArrow = vvGlyphSource::New(); - mArrow->SetGlyphTypeToSpecificArrow(); - mArrow->SetScale(mScale); - mArrow->FilledOff(); - - // Glyph the gradient vector (with arrows) - if (!mGlyphFilter) - mGlyphFilter = vvGlyph2D::New(); - mGlyphFilter->SetInput(mAAFilter->GetOutput()); - mGlyphFilter->SetSource(mArrow->GetOutput()); - mGlyphFilter->ScalingOn(); - mGlyphFilter->SetScaleModeToScaleByVector(); - mGlyphFilter->OrientOn(); - mGlyphFilter->SetVectorModeToUseVector(); - mGlyphFilter->SetColorModeToColorByVector(); - - if (!mVFMapper) - mVFMapper = vtkPolyDataMapper::New(); - //mVFMapper->SetInputConnection(mGlyphFilter->GetOutputPort()); - mVFMapper->SetInput(mGlyphFilter->GetOutput()); - mVFMapper->ImmediateModeRenderingOn(); - - if (!mVFActor) - mVFActor = vtkActor::New(); - mVFActor->SetMapper(mVFMapper); - mVFActor->SetPickable(0); - this->UpdateDisplayExtent(); - this->GetRenderer()->AddActor(mVFActor); - - //Synchronize slice - SetTSlice(mCurrentTSlice); + mVOIFilter->SetInput(vf->GetVTKImages()[0]); + mAAFilter->SetInput(mVOIFilter->GetOutput()); + ///This tells VTK to use the scalar (pixel) data of the image to draw the little arrows + mAAFilter->Assign(vtkDataSetAttributes::SCALARS, vtkDataSetAttributes::VECTORS, vtkAssignAttribute::POINT_DATA); + + if (!mArrow) + mArrow = vvGlyphSource::New(); + mArrow->SetGlyphTypeToSpecificArrow(); + mArrow->SetScale(mScale); + mArrow->FilledOff(); + + // Glyph the gradient vector (with arrows) + if (!mGlyphFilter) + mGlyphFilter = vvGlyph2D::New(); + mGlyphFilter->SetInput(mAAFilter->GetOutput()); + mGlyphFilter->SetSource(mArrow->GetOutput()); + mGlyphFilter->ScalingOn(); + mGlyphFilter->SetScaleModeToScaleByVector(); + mGlyphFilter->OrientOn(); + mGlyphFilter->SetVectorModeToUseVector(); + mGlyphFilter->SetColorModeToColorByVector(); + + if (!mVFMapper) + mVFMapper = vtkPolyDataMapper::New(); + //mVFMapper->SetInputConnection(mGlyphFilter->GetOutputPort()); + mVFMapper->SetInput(mGlyphFilter->GetOutput()); + mVFMapper->ImmediateModeRenderingOn(); + + if (!mVFActor) + mVFActor = vtkActor::New(); + mVFActor->SetMapper(mVFMapper); + mVFActor->SetPickable(0); + this->UpdateDisplayExtent(); + this->GetRenderer()->AddActor(mVFActor); + + //Synchronize slice + SetTSlice(mCurrentTSlice); } } void vvSlicer::SetLandmarks(vvLandmarks* landmarks) { - mLandmarks = landmarks; - if (landmarks) + mLandmarks = landmarks; + if (landmarks) { - if (!mCross) - mCross = vtkCursor3D::New(); - mCross->SetFocalPoint(0.0,0.0,0.0); - mCross->SetModelBounds(-10,10,-10,10,-10,10); - mCross->AllOff(); - mCross->AxesOn(); - - if (!mLandGlyph) - mLandGlyph = vtkGlyph3D::New(); - mLandGlyph->SetSource(mCross->GetOutput()); - mLandGlyph->SetInput(landmarks->GetOutput()); - //mLandGlyph->SetIndexModeToScalar(); - mLandGlyph->SetRange(0,1); - mLandGlyph->ScalingOff(); - - mLandGlyph->SetColorModeToColorByScalar(); - - if (!mClipBox) - mClipBox = vtkBox::New(); - if (!mLandClipper) - mLandClipper = vtkClipPolyData::New(); - mLandClipper->InsideOutOn(); - mLandClipper->SetInput(mLandGlyph->GetOutput()); - mLandClipper->SetClipFunction(mClipBox); - - if (!mLandMapper) - mLandMapper = vtkPolyDataMapper::New(); - mLandMapper->SetInputConnection(mLandClipper->GetOutputPort()); - //mLandMapper->ScalarVisibilityOff(); - - if (!mLandActor) - mLandActor = vtkActor::New(); - mLandActor->SetMapper(mLandMapper); - mLandActor->GetProperty()->SetColor(255,10,212); - mLandActor->SetPickable(0); - mLandActor->SetVisibility(true); - this->UpdateDisplayExtent(); - this->GetRenderer()->AddActor(mLandActor); + if (!mCross) + mCross = vtkCursor3D::New(); + mCross->SetFocalPoint(0.0,0.0,0.0); + mCross->SetModelBounds(-10,10,-10,10,-10,10); + mCross->AllOff(); + mCross->AxesOn(); + + if (!mLandGlyph) + mLandGlyph = vtkGlyph3D::New(); + mLandGlyph->SetSource(mCross->GetOutput()); + mLandGlyph->SetInput(landmarks->GetOutput()); + //mLandGlyph->SetIndexModeToScalar(); + mLandGlyph->SetRange(0,1); + mLandGlyph->ScalingOff(); + + mLandGlyph->SetColorModeToColorByScalar(); + + if (!mClipBox) + mClipBox = vtkBox::New(); + if (!mLandClipper) + mLandClipper = vtkClipPolyData::New(); + mLandClipper->InsideOutOn(); + mLandClipper->SetInput(mLandGlyph->GetOutput()); + mLandClipper->SetClipFunction(mClipBox); + + if (!mLandMapper) + mLandMapper = vtkPolyDataMapper::New(); + mLandMapper->SetInputConnection(mLandClipper->GetOutputPort()); + //mLandMapper->ScalarVisibilityOff(); + + if (!mLandActor) + mLandActor = vtkActor::New(); + mLandActor->SetMapper(mLandMapper); + mLandActor->GetProperty()->SetColor(255,10,212); + mLandActor->SetPickable(0); + mLandActor->SetVisibility(true); + this->UpdateDisplayExtent(); + this->GetRenderer()->AddActor(mLandActor); } } //FIXME: this function leaks memory, we should fix it someday :) void vvSlicer::RemoveActor(const std::string& actor_type, int overlay_index) { - if (actor_type == "vector") + if (actor_type == "vector") { - Renderer->RemoveActor(mVFActor); - mGlyphFilter=NULL; - mVF = NULL; - mArrow = NULL; - mAAFilter=NULL; - mVOIFilter = NULL; - mVFMapper = NULL; - mVFActor = NULL; + Renderer->RemoveActor(mVFActor); + mGlyphFilter=NULL; + mVF = NULL; + mArrow = NULL; + mAAFilter=NULL; + mVOIFilter = NULL; + mVFMapper = NULL; + mVFActor = NULL; } - if (actor_type == "overlay") + if (actor_type == "overlay") { - Renderer->RemoveActor(mOverlayActor); - mOverlay = NULL; - mOverlayActor = NULL; - mOverlayMapper = NULL; + Renderer->RemoveActor(mOverlayActor); + mOverlay = NULL; + mOverlayActor = NULL; + mOverlayMapper = NULL; } - if (actor_type == "fusion") + if (actor_type == "fusion") { - Renderer->RemoveActor(mFusionActor); - mFusion = NULL; - mFusionActor = NULL; - mFusionMapper = NULL; + Renderer->RemoveActor(mFusionActor); + mFusion = NULL; + mFusionActor = NULL; + mFusionMapper = NULL; } - if (actor_type == "contour") + if (actor_type == "contour") { - Renderer->RemoveActor(this->mSurfaceCutActors[overlay_index]->GetActor()); - mSurfaceCutActors.erase(mSurfaceCutActors.begin()+overlay_index); + Renderer->RemoveActor(this->mSurfaceCutActors[overlay_index]->GetActor()); + mSurfaceCutActors.erase(mSurfaceCutActors.begin()+overlay_index); } } void vvSlicer::SetVFSubSampling(int sub) { - if (mVOIFilter) + if (mVOIFilter) { - mVOIFilter->SetSampleRate(mSubSampling,mSubSampling,mSubSampling); - mSubSampling = sub; + mVOIFilter->SetSampleRate(mSubSampling,mSubSampling,mSubSampling); + mSubSampling = sub; } - UpdateDisplayExtent(); - Render(); + UpdateDisplayExtent(); + Render(); } void vvSlicer::SetVFScale(int scale) { - mScale = scale; - if (mArrow) - mArrow->SetScale(mScale); - UpdateDisplayExtent(); - Render(); + mScale = scale; + if (mArrow) + mArrow->SetScale(mScale); + UpdateDisplayExtent(); + Render(); } void vvSlicer::SetVFLog(int log) { - mVFLog = log; - if (mGlyphFilter) + mVFLog = log; + if (mGlyphFilter) { - mGlyphFilter->SetUseLog(mVFLog); - mGlyphFilter->Modified(); + mGlyphFilter->SetUseLog(mVFLog); + mGlyphFilter->Modified(); } - UpdateDisplayExtent(); - Render(); + UpdateDisplayExtent(); + Render(); } void vvSlicer::SetTSlice(int t) { - if (t < 0) - t = 0; - else if ((unsigned int)t >= mImage->GetVTKImages().size()) - t = mImage->GetVTKImages().size() -1; - mCurrentTSlice = t; - this->SetInput(mImage->GetVTKImages()[t]); - if (mVF && mVFActor->GetVisibility()) + if (t < 0) + t = 0; + else if ((unsigned int)t >= mImage->GetVTKImages().size()) + t = mImage->GetVTKImages().size() -1; + mCurrentTSlice = t; + this->SetInput(mImage->GetVTKImages()[t]); + if (mVF && mVFActor->GetVisibility()) { - if (mVF->GetVTKImages().size() > (unsigned int)mCurrentTSlice) - mVOIFilter->SetInput(mVF->GetVTKImages()[mCurrentTSlice]); + if (mVF->GetVTKImages().size() > (unsigned int)mCurrentTSlice) + mVOIFilter->SetInput(mVF->GetVTKImages()[mCurrentTSlice]); } - if (mOverlay && mOverlayActor->GetVisibility()) + if (mOverlay && mOverlayActor->GetVisibility()) { - if (mOverlay->GetVTKImages().size() > (unsigned int)mCurrentTSlice) - mOverlayMapper->SetInput(mOverlay->GetVTKImages()[mCurrentTSlice]); + if (mOverlay->GetVTKImages().size() > (unsigned int)mCurrentTSlice) + mOverlayMapper->SetInput(mOverlay->GetVTKImages()[mCurrentTSlice]); } - if (mFusion && mFusionActor->GetVisibility()) + if (mFusion && mFusionActor->GetVisibility()) { - if (mFusion->GetVTKImages().size() > (unsigned int)mCurrentTSlice) - mFusionMapper->SetInput(mFusion->GetVTKImages()[mCurrentTSlice]); + if (mFusion->GetVTKImages().size() > (unsigned int)mCurrentTSlice) + mFusionMapper->SetInput(mFusion->GetVTKImages()[mCurrentTSlice]); } - if (mSurfaceCutActors.size() > 0) - for (std::vector::iterator i=mSurfaceCutActors.begin(); - i!=mSurfaceCutActors.end();i++) - (*i)->SetTimeSlice(mCurrentTSlice); - UpdateDisplayExtent(); + if (mSurfaceCutActors.size() > 0) + for (std::vector::iterator i=mSurfaceCutActors.begin(); + i!=mSurfaceCutActors.end();i++) + (*i)->SetTimeSlice(mCurrentTSlice); + UpdateDisplayExtent(); } int vvSlicer::GetTSlice() { - return mCurrentTSlice; + return mCurrentTSlice; } void vvSlicer::SetSliceOrientation(int orientation) { - //if 2D image, force to watch in Axial View - int extent[6]; - this->GetInput()->GetWholeExtent(extent); - if (extent[5]-extent[4] <= 2) - orientation=2; - - if (orientation < vtkImageViewer2::SLICE_ORIENTATION_YZ || - orientation > vtkImageViewer2::SLICE_ORIENTATION_XY) + //if 2D image, force to watch in Axial View + int extent[6]; + this->GetInput()->GetWholeExtent(extent); + if (extent[5]-extent[4] <= 2) + orientation=2; + + if (orientation < vtkImageViewer2::SLICE_ORIENTATION_YZ || + orientation > vtkImageViewer2::SLICE_ORIENTATION_XY) { - vtkErrorMacro("Error - invalid slice orientation " << orientation); - return; + vtkErrorMacro("Error - invalid slice orientation " << orientation); + return; } - this->SliceOrientation = orientation; + this->SliceOrientation = orientation; - // Update the viewer - int *range = this->GetSliceRange(); - if (range) - this->Slice = static_cast((range[0] + range[1]) * 0.5); + // Update the viewer + int *range = this->GetSliceRange(); + if (range) + this->Slice = static_cast((range[0] + range[1]) * 0.5); - this->UpdateOrientation(); - this->UpdateDisplayExtent(); + this->UpdateOrientation(); + this->UpdateDisplayExtent(); - if (this->Renderer && this->GetInput()) + if (this->Renderer && this->GetInput()) { - double scale = this->Renderer->GetActiveCamera()->GetParallelScale(); - this->Renderer->ResetCamera(); - this->Renderer->GetActiveCamera()->SetParallelScale(scale); + double scale = this->Renderer->GetActiveCamera()->GetParallelScale(); + this->Renderer->ResetCamera(); + this->Renderer->GetActiveCamera()->SetParallelScale(scale); } - SetContourSlice(); + SetContourSlice(); } //---------------------------------------------------------------------------- void vvSlicer::UpdateDisplayExtent() { - vtkImageData *input = this->GetInput(); - if (!input || !this->ImageActor) + vtkImageData *input = this->GetInput(); + if (!input || !this->ImageActor) { - return; + return; } - input->UpdateInformation(); - int *w_ext = input->GetWholeExtent(); + input->UpdateInformation(); + int *w_ext = input->GetWholeExtent(); - switch (this->SliceOrientation) + switch (this->SliceOrientation) { - case vtkImageViewer2::SLICE_ORIENTATION_XY: - this->ImageActor->SetDisplayExtent( - w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice); - if (mVF && mVFActor->GetVisibility()) - { - int vfExtent[6]; - ComputeVFDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,vfExtent); - mVOIFilter->SetVOI(vfExtent); - mGlyphFilter->SetOrientation(1,1,0); - mVFMapper->Update(); - // put the vector field between the image and the camera - if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) - mVFActor->SetPosition(0,0,ImageActor->GetBounds()[5]+2); - else - mVFActor->SetPosition(0,0,ImageActor->GetBounds()[4]-2); - } - if (mOverlay && mOverlayActor->GetVisibility()) - { - int overExtent[6]; - ComputeOverlayDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,overExtent); - mOverlayActor->SetDisplayExtent(overExtent); - if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) - mOverlayActor->SetPosition(0,0,1); - else - mOverlayActor->SetPosition(0,0,-1); - } - if (mFusion && mFusionActor->GetVisibility()) - { - int fusExtent[6]; - ComputeFusionDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,fusExtent); - mFusionActor->SetDisplayExtent(fusExtent); - if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) - mFusionActor->SetPosition(0,0,1.5); - else - mFusionActor->SetPosition(0,0,-1.5); - } - if (mLandActor) + case vtkImageViewer2::SLICE_ORIENTATION_XY: + this->ImageActor->SetDisplayExtent( + w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice); + if (mVF && mVFActor->GetVisibility()) + { + int vfExtent[6]; + ComputeVFDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,vfExtent); + mVOIFilter->SetVOI(vfExtent); + mGlyphFilter->SetOrientation(1,1,0); + mVFMapper->Update(); + // put the vector field between the image and the camera + if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) + mVFActor->SetPosition(0,0,ImageActor->GetBounds()[5]+2); + else + mVFActor->SetPosition(0,0,ImageActor->GetBounds()[4]-2); + } + if (mOverlay && mOverlayActor->GetVisibility()) + { + int overExtent[6]; + ComputeOverlayDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,overExtent); + mOverlayActor->SetDisplayExtent(overExtent); + if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) + mOverlayActor->SetPosition(0,0,1); + else + mOverlayActor->SetPosition(0,0,-1); + } + if (mFusion && mFusionActor->GetVisibility()) + { + int fusExtent[6]; + ComputeFusionDisplayedExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], this->Slice, this->Slice,fusExtent); + mFusionActor->SetDisplayExtent(fusExtent); + if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) + mFusionActor->SetPosition(0,0,1.5); + else + mFusionActor->SetPosition(0,0,-1.5); + } + if (mLandActor) + { + if (mClipBox) { - if (mClipBox) - { - double bounds [6]; - bounds[0] = ImageActor->GetBounds()[0]; - bounds[1] = ImageActor->GetBounds()[1]; - bounds[2] = ImageActor->GetBounds()[2]; - bounds[3] = ImageActor->GetBounds()[3]; - bounds[4] = ImageActor->GetBounds()[4]-(0.9/this->GetInput()->GetSpacing()[2]); - bounds[5] = ImageActor->GetBounds()[5]+(0.9/this->GetInput()->GetSpacing()[2]); - mClipBox->SetBounds(bounds); - UpdateLandmarks(); - } - if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) - mLandActor->SetPosition(0,0,1.5); - else - mLandActor->SetPosition(0,0,-1.5); + double bounds [6]; + bounds[0] = ImageActor->GetBounds()[0]; + bounds[1] = ImageActor->GetBounds()[1]; + bounds[2] = ImageActor->GetBounds()[2]; + bounds[3] = ImageActor->GetBounds()[3]; + bounds[4] = ImageActor->GetBounds()[4]-(0.9/this->GetInput()->GetSpacing()[2]); + bounds[5] = ImageActor->GetBounds()[5]+(0.9/this->GetInput()->GetSpacing()[2]); + mClipBox->SetBounds(bounds); + UpdateLandmarks(); } - break; + if (Renderer->GetActiveCamera()->GetPosition()[2] > this->Slice) + mLandActor->SetPosition(0,0,1.5); + else + mLandActor->SetPosition(0,0,-1.5); + } + break; - case vtkImageViewer2::SLICE_ORIENTATION_XZ: - this->ImageActor->SetDisplayExtent( - w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5]); - if (mVF && mVFActor->GetVisibility()) - { - int vfExtent[6]; - ComputeVFDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],vfExtent); - mVOIFilter->SetVOI(vfExtent); - mGlyphFilter->SetOrientation(1,0,1); - mVFMapper->Update(); - // put the vector field between the image aSpacingnd the camera - if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) - mVFActor->SetPosition(0,ImageActor->GetBounds()[3]+2,0); - else - mVFActor->SetPosition(0,ImageActor->GetBounds()[2]-2,0); - } - if (mOverlay && mOverlayActor->GetVisibility()) - { - int overExtent[6]; - ComputeOverlayDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],overExtent); - mOverlayActor->SetDisplayExtent(overExtent); - if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) - mOverlayActor->SetPosition(0,1,0); - else - mOverlayActor->SetPosition(0,-1,0); - } - if (mFusion && mFusionActor->GetVisibility()) - { - int fusExtent[6]; - ComputeFusionDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],fusExtent); - mFusionActor->SetDisplayExtent(fusExtent); - if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) - mFusionActor->SetPosition(0,1.5,0); - else - mFusionActor->SetPosition(0,-1.5,0); - } - if (mLandActor) + case vtkImageViewer2::SLICE_ORIENTATION_XZ: + this->ImageActor->SetDisplayExtent( + w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5]); + if (mVF && mVFActor->GetVisibility()) + { + int vfExtent[6]; + ComputeVFDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],vfExtent); + mVOIFilter->SetVOI(vfExtent); + mGlyphFilter->SetOrientation(1,0,1); + mVFMapper->Update(); + // put the vector field between the image aSpacingnd the camera + if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) + mVFActor->SetPosition(0,ImageActor->GetBounds()[3]+2,0); + else + mVFActor->SetPosition(0,ImageActor->GetBounds()[2]-2,0); + } + if (mOverlay && mOverlayActor->GetVisibility()) + { + int overExtent[6]; + ComputeOverlayDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],overExtent); + mOverlayActor->SetDisplayExtent(overExtent); + if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) + mOverlayActor->SetPosition(0,1,0); + else + mOverlayActor->SetPosition(0,-1,0); + } + if (mFusion && mFusionActor->GetVisibility()) + { + int fusExtent[6]; + ComputeFusionDisplayedExtent(w_ext[0], w_ext[1], this->Slice, this->Slice, w_ext[4], w_ext[5],fusExtent); + mFusionActor->SetDisplayExtent(fusExtent); + if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) + mFusionActor->SetPosition(0,1.5,0); + else + mFusionActor->SetPosition(0,-1.5,0); + } + if (mLandActor) + { + if (mClipBox) { - if (mClipBox) - { - double bounds [6]; - bounds[0] = ImageActor->GetBounds()[0]; - bounds[1] = ImageActor->GetBounds()[1]; - bounds[2] = ImageActor->GetBounds()[2]-(0.5/this->GetInput()->GetSpacing()[1]); - bounds[3] = ImageActor->GetBounds()[3]+(0.5/this->GetInput()->GetSpacing()[1]); - bounds[4] = ImageActor->GetBounds()[4]; - bounds[5] = ImageActor->GetBounds()[5]; - mClipBox->SetBounds(bounds); - UpdateLandmarks(); - } - if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) - mLandActor->SetPosition(0,1.5,0); - else - mLandActor->SetPosition(0,-1.5,0); + double bounds [6]; + bounds[0] = ImageActor->GetBounds()[0]; + bounds[1] = ImageActor->GetBounds()[1]; + bounds[2] = ImageActor->GetBounds()[2]-(0.5/this->GetInput()->GetSpacing()[1]); + bounds[3] = ImageActor->GetBounds()[3]+(0.5/this->GetInput()->GetSpacing()[1]); + bounds[4] = ImageActor->GetBounds()[4]; + bounds[5] = ImageActor->GetBounds()[5]; + mClipBox->SetBounds(bounds); + UpdateLandmarks(); } - break; + if (Renderer->GetActiveCamera()->GetPosition()[1] > this->Slice) + mLandActor->SetPosition(0,1.5,0); + else + mLandActor->SetPosition(0,-1.5,0); + } + break; - case vtkImageViewer2::SLICE_ORIENTATION_YZ: - this->ImageActor->SetDisplayExtent( - this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]); - if (mVF && mVFActor->GetVisibility()) - { - int vfExtent[6]; - ComputeVFDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],vfExtent); - mVOIFilter->SetVOI(vfExtent); - mGlyphFilter->SetOrientation(0,1,1); - mVFMapper->Update(); - // put the vector field between the image and the camera - if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) - mVFActor->SetPosition(ImageActor->GetBounds()[1]+2,0,0); - else - mVFActor->SetPosition(ImageActor->GetBounds()[0]-2,0,0); - } - if (mOverlay && mOverlayActor->GetVisibility()) - { - int overExtent[6]; - ComputeOverlayDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],overExtent); - mOverlayActor->SetDisplayExtent(overExtent); - if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) - mOverlayActor->SetPosition(1,0,0); - else - mOverlayActor->SetPosition(-1,0,0); - } - if (mFusion && mFusionActor->GetVisibility()) - { - int fusExtent[6]; - ComputeFusionDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],fusExtent); - mFusionActor->SetDisplayExtent(fusExtent); - if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) - mFusionActor->SetPosition(1.5,0,0); - else - mFusionActor->SetPosition(-1.5,0,0); - } - if (mLandActor) + case vtkImageViewer2::SLICE_ORIENTATION_YZ: + this->ImageActor->SetDisplayExtent( + this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]); + if (mVF && mVFActor->GetVisibility()) + { + int vfExtent[6]; + ComputeVFDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],vfExtent); + mVOIFilter->SetVOI(vfExtent); + mGlyphFilter->SetOrientation(0,1,1); + mVFMapper->Update(); + // put the vector field between the image and the camera + if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) + mVFActor->SetPosition(ImageActor->GetBounds()[1]+2,0,0); + else + mVFActor->SetPosition(ImageActor->GetBounds()[0]-2,0,0); + } + if (mOverlay && mOverlayActor->GetVisibility()) + { + int overExtent[6]; + ComputeOverlayDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],overExtent); + mOverlayActor->SetDisplayExtent(overExtent); + if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) + mOverlayActor->SetPosition(1,0,0); + else + mOverlayActor->SetPosition(-1,0,0); + } + if (mFusion && mFusionActor->GetVisibility()) + { + int fusExtent[6]; + ComputeFusionDisplayedExtent(this->Slice, this->Slice, w_ext[2], w_ext[3], w_ext[4], w_ext[5],fusExtent); + mFusionActor->SetDisplayExtent(fusExtent); + if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) + mFusionActor->SetPosition(1.5,0,0); + else + mFusionActor->SetPosition(-1.5,0,0); + } + if (mLandActor) + { + if (mClipBox) { - if (mClipBox) - { - double bounds [6]; - bounds[0] = ImageActor->GetBounds()[0]-(0.5/this->GetInput()->GetSpacing()[0]); - bounds[1] = ImageActor->GetBounds()[1]+(0.5/this->GetInput()->GetSpacing()[0]); - bounds[2] = ImageActor->GetBounds()[2]; - bounds[3] = ImageActor->GetBounds()[3]; - bounds[4] = ImageActor->GetBounds()[4]; - bounds[5] = ImageActor->GetBounds()[5]; - mClipBox->SetBounds(bounds); - UpdateLandmarks(); - } - if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) - mLandActor->SetPosition(1.5,0,0); - else - mLandActor->SetPosition(-1.5,0,0); + double bounds [6]; + bounds[0] = ImageActor->GetBounds()[0]-(0.5/this->GetInput()->GetSpacing()[0]); + bounds[1] = ImageActor->GetBounds()[1]+(0.5/this->GetInput()->GetSpacing()[0]); + bounds[2] = ImageActor->GetBounds()[2]; + bounds[3] = ImageActor->GetBounds()[3]; + bounds[4] = ImageActor->GetBounds()[4]; + bounds[5] = ImageActor->GetBounds()[5]; + mClipBox->SetBounds(bounds); + UpdateLandmarks(); } - break; + if (Renderer->GetActiveCamera()->GetPosition()[0] > this->Slice) + mLandActor->SetPosition(1.5,0,0); + else + mLandActor->SetPosition(-1.5,0,0); + } + break; } - // Figure out the correct clipping range + // Figure out the correct clipping range - if (this->Renderer) + if (this->Renderer) { - if (this->InteractorStyle && - this->InteractorStyle->GetAutoAdjustCameraClippingRange()) + if (this->InteractorStyle && + this->InteractorStyle->GetAutoAdjustCameraClippingRange()) { - this->Renderer->ResetCameraClippingRange(); + this->Renderer->ResetCameraClippingRange(); } - else + else { - vtkCamera *cam = this->Renderer->GetActiveCamera(); - if (cam) + vtkCamera *cam = this->Renderer->GetActiveCamera(); + if (cam) { - double bounds[6]; - this->ImageActor->GetBounds(bounds); - double spos = (double)bounds[this->SliceOrientation * 2]; - double cpos = (double)cam->GetPosition()[this->SliceOrientation]; - double range = fabs(spos - cpos); - double *spacing = input->GetSpacing(); - double avg_spacing = - ((double)spacing[0] + (double)spacing[1] + (double)spacing[2]) / 3.0; - cam->SetClippingRange( - range - avg_spacing * 3.0, range + avg_spacing * 3.0); + double bounds[6]; + this->ImageActor->GetBounds(bounds); + double spos = (double)bounds[this->SliceOrientation * 2]; + double cpos = (double)cam->GetPosition()[this->SliceOrientation]; + double range = fabs(spos - cpos); + double *spacing = input->GetSpacing(); + double avg_spacing = + ((double)spacing[0] + (double)spacing[1] + (double)spacing[2]) / 3.0; + cam->SetClippingRange( + range - avg_spacing * 3.0, range + avg_spacing * 3.0); } } } @@ -759,409 +758,446 @@ void vvSlicer::UpdateDisplayExtent() void vvSlicer::ComputeVFDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int vfExtent[6]) { - vtkImageData* image=this->GetInput(); - vfExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / - mVF->GetSpacing()[0]; - vfExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / - mVF->GetSpacing()[0]; - vfExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / - mVF->GetSpacing()[1]; - vfExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / - mVF->GetSpacing()[1]; - vfExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / - mVF->GetSpacing()[2]; - vfExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / - mVF->GetSpacing()[2]; - - ClipDisplayedExtent(vfExtent,mVOIFilter->GetInput()->GetWholeExtent()); + vtkImageData* image=this->GetInput(); + vfExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / + mVF->GetSpacing()[0]; + vfExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mVF->GetOrigin()[0]) / + mVF->GetSpacing()[0]; + vfExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / + mVF->GetSpacing()[1]; + vfExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mVF->GetOrigin()[1]) / + mVF->GetSpacing()[1]; + vfExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / + mVF->GetSpacing()[2]; + vfExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mVF->GetOrigin()[2]) / + mVF->GetSpacing()[2]; + + ClipDisplayedExtent(vfExtent,mVOIFilter->GetInput()->GetWholeExtent()); } void vvSlicer::ComputeOverlayDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int overExtent[6]) { - vtkImageData* image=this->GetInput(); - overExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / - mOverlay->GetSpacing()[0]; - overExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / - mOverlay->GetSpacing()[0]; - overExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / - mOverlay->GetSpacing()[1]; - overExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / - mOverlay->GetSpacing()[1]; - overExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / - mOverlay->GetSpacing()[2]; - overExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / - mOverlay->GetSpacing()[2]; - ClipDisplayedExtent(overExtent, mOverlayMapper->GetInput()->GetWholeExtent()); + vtkImageData* image=this->GetInput(); + overExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / + mOverlay->GetSpacing()[0]; + overExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mOverlay->GetOrigin()[0]) / + mOverlay->GetSpacing()[0]; + overExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / + mOverlay->GetSpacing()[1]; + overExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mOverlay->GetOrigin()[1]) / + mOverlay->GetSpacing()[1]; + overExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / + mOverlay->GetSpacing()[2]; + overExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mOverlay->GetOrigin()[2]) / + mOverlay->GetSpacing()[2]; + ClipDisplayedExtent(overExtent, mOverlayMapper->GetInput()->GetWholeExtent()); } void vvSlicer::ComputeFusionDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int fusExtent[6]) { - vtkImageData* image=this->GetInput(); - fusExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / - mFusion->GetSpacing()[0]; - fusExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / - mFusion->GetSpacing()[0]; - fusExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / - mFusion->GetSpacing()[1]; - fusExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / - mFusion->GetSpacing()[1]; - fusExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / - mFusion->GetSpacing()[2]; - fusExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / - mFusion->GetSpacing()[2]; - ClipDisplayedExtent(fusExtent, mFusionMapper->GetInput()->GetWholeExtent()); + vtkImageData* image=this->GetInput(); + fusExtent[0] = (( image->GetOrigin()[0] + x1*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / + mFusion->GetSpacing()[0]; + fusExtent[1] = (( image->GetOrigin()[0] + x2*image->GetSpacing()[0] ) - mFusion->GetOrigin()[0]) / + mFusion->GetSpacing()[0]; + fusExtent[2] = (( image->GetOrigin()[1] + y1*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / + mFusion->GetSpacing()[1]; + fusExtent[3] = (( image->GetOrigin()[1] + y2*image->GetSpacing()[1] ) - mFusion->GetOrigin()[1]) / + mFusion->GetSpacing()[1]; + fusExtent[4] = (( image->GetOrigin()[2] + z1*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / + mFusion->GetSpacing()[2]; + fusExtent[5] = (( image->GetOrigin()[2] + z2*image->GetSpacing()[2] ) - mFusion->GetOrigin()[2]) / + mFusion->GetSpacing()[2]; + ClipDisplayedExtent(fusExtent, mFusionMapper->GetInput()->GetWholeExtent()); } void vvSlicer::ClipDisplayedExtent(int extent[6], int refExtent[6]) { - bool out = false; - int maxBound = 6; + bool out = false; + int maxBound = 6; - //2D overlay on 3D image specific case - if (refExtent[4] == refExtent[5]) + //2D overlay on 3D image specific case + if (refExtent[4] == refExtent[5]) { - maxBound = 4; - extent[4] = refExtent[4]; - extent[5] = refExtent[5]; + maxBound = 4; + extent[4] = refExtent[4]; + extent[5] = refExtent[5]; } - for (int i = 0; i < maxBound; i = i+2) + for (int i = 0; i < maxBound; i = i+2) { - //if we are totally outside the image - if ( extent[i] > refExtent[i+1] || extent[i+1] < refExtent[i] ) + //if we are totally outside the image + if ( extent[i] > refExtent[i+1] || extent[i+1] < refExtent[i] ) { - out = true; - break; + out = true; + break; } - //crop to the limit of the image - extent[i] = (extent[i] > refExtent[i]) ? extent[i] : refExtent[i]; - extent[i] = (extent[i] < refExtent[i+1]) ? extent[i] : refExtent[i+1]; - extent[i+1] = (extent[i+1] > refExtent[i]) ? extent[i+1] : refExtent[i]; - extent[i+1] = (extent[i+1] < refExtent[i+1]) ? extent[i+1] : refExtent[i+1]; + //crop to the limit of the image + extent[i] = (extent[i] > refExtent[i]) ? extent[i] : refExtent[i]; + extent[i] = (extent[i] < refExtent[i+1]) ? extent[i] : refExtent[i+1]; + extent[i+1] = (extent[i+1] > refExtent[i]) ? extent[i+1] : refExtent[i]; + extent[i+1] = (extent[i+1] < refExtent[i+1]) ? extent[i+1] : refExtent[i+1]; } - if (out) - for (int i = 0; i < maxBound; i = i+2) - { - extent[i] = refExtent[i]; - extent[i+1] = refExtent[i]; - } + if (out) + for (int i = 0; i < maxBound; i = i+2) + { + extent[i] = refExtent[i]; + extent[i+1] = refExtent[i]; + } } void vvSlicer::UpdateOrientation() { - // Set the camera position - vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; - if (cam) + // Set the camera position + vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; + if (cam) { - switch (this->SliceOrientation) + switch (this->SliceOrientation) { - case vtkImageViewer2::SLICE_ORIENTATION_XY: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(0,0,-1); // -1 if medical ? - cam->SetViewUp(0,-1,0); - break; - - case vtkImageViewer2::SLICE_ORIENTATION_XZ: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(0,-1,0); // 1 if medical ? - cam->SetViewUp(0,0,1); - break; - - case vtkImageViewer2::SLICE_ORIENTATION_YZ: - cam->SetFocalPoint(0,0,0); - cam->SetPosition(-1,0,0); // -1 if medical ? - cam->SetViewUp(0,0,1); - break; + case vtkImageViewer2::SLICE_ORIENTATION_XY: + cam->SetFocalPoint(0,0,0); + cam->SetPosition(0,0,-1); // -1 if medical ? + cam->SetViewUp(0,-1,0); + break; + + case vtkImageViewer2::SLICE_ORIENTATION_XZ: + cam->SetFocalPoint(0,0,0); + cam->SetPosition(0,-1,0); // 1 if medical ? + cam->SetViewUp(0,0,1); + break; + + case vtkImageViewer2::SLICE_ORIENTATION_YZ: + cam->SetFocalPoint(0,0,0); + cam->SetPosition(-1,0,0); // -1 if medical ? + cam->SetViewUp(0,0,1); + break; } } } void vvSlicer::SetOpacity(double s) { - this->GetImageActor()->SetOpacity(s); + this->GetImageActor()->SetOpacity(s); } void vvSlicer::SetRenderWindow(int orientation, vtkRenderWindow * rw) { - this->Superclass::SetRenderWindow(rw); - this->SetupInteractor(rw->GetInteractor()); - ca->SetImageActor(this->GetImageActor()); - ca->SetWindowLevel(this->GetWindowLevel()); - ca->SetText(2, ""); - ca->SetText(3, "\n"); - - double bounds[6]; - double max = 65000; - - bounds[0] = -max; - bounds[1] = max; - bounds[2] = -max; - bounds[3] = max; - bounds[4] = -max; - bounds[5] = max; - - crossCursor->SetModelBounds(bounds); - this->GetRenderer()->AddActor(pdmA); - this->GetRenderer()->AddActor(ca); - this->GetRenderer()->ResetCamera(); - - //this is just a mapping between the labeling of the orientations presented to the user and - //the one used by vtk - SetSliceOrientation(2-(orientation%3)); - ResetCamera(); + this->Superclass::SetRenderWindow(rw); + this->SetupInteractor(rw->GetInteractor()); + ca->SetImageActor(this->GetImageActor()); + ca->SetWindowLevel(this->GetWindowLevel()); + ca->SetText(2, ""); + ca->SetText(3, "\n"); + + double bounds[6]; + double max = 65000; + + bounds[0] = -max; + bounds[1] = max; + bounds[2] = -max; + bounds[3] = max; + bounds[4] = -max; + bounds[5] = max; + + crossCursor->SetModelBounds(bounds); + this->GetRenderer()->AddActor(pdmA); + this->GetRenderer()->AddActor(ca); + this->GetRenderer()->ResetCamera(); + + //this is just a mapping between the labeling of the orientations presented to the user and + //the one used by vtk + SetSliceOrientation(2-(orientation%3)); + ResetCamera(); } void vvSlicer::ResetCamera() { - if (this->GetInput()) + if (this->GetInput()) { - double* input_bounds=this->GetInput()->GetBounds(); - double bmax=input_bounds[1]-input_bounds[0]; - if (bmax < input_bounds[3]-input_bounds[2]) bmax=input_bounds[3]-input_bounds[2]; - if (bmax < input_bounds[5]-input_bounds[4]) bmax=input_bounds[5]-input_bounds[4]; - this->GetRenderer()->ResetCamera(); - this->GetRenderer()->GetActiveCamera()->SetParallelScale(bmax/2); + double* input_bounds=this->GetInput()->GetBounds(); + double bmax=input_bounds[1]-input_bounds[0]; + if (bmax < input_bounds[3]-input_bounds[2]) bmax=input_bounds[3]-input_bounds[2]; + if (bmax < input_bounds[5]-input_bounds[4]) bmax=input_bounds[5]-input_bounds[4]; + this->GetRenderer()->ResetCamera(); + this->GetRenderer()->GetActiveCamera()->SetParallelScale(bmax/2); } } void vvSlicer::SetDisplayMode(bool i) { - this->GetImageActor()->SetVisibility(i); - this->GetAnnotation()->SetVisibility(i); - this->GetRenderer()->SetDraw(i); - if (mLandActor) - mLandActor->SetVisibility(i); - pdmA->SetVisibility(i); - if (i) - UpdateDisplayExtent(); + this->GetImageActor()->SetVisibility(i); + this->GetAnnotation()->SetVisibility(i); + this->GetRenderer()->SetDraw(i); + if (mLandActor) + mLandActor->SetVisibility(i); + pdmA->SetVisibility(i); + if (i) + UpdateDisplayExtent(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::FlipHorizontalView() { - vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; - if (cam) + vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; + if (cam) { - double *position = cam->GetPosition(); - switch (this->SliceOrientation) + double *position = cam->GetPosition(); + switch (this->SliceOrientation) { - case vtkImageViewer2::SLICE_ORIENTATION_XY: - cam->SetPosition(position[0],position[1],-position[2]); - break; + case vtkImageViewer2::SLICE_ORIENTATION_XY: + cam->SetPosition(position[0],position[1],-position[2]); + break; - case vtkImageViewer2::SLICE_ORIENTATION_XZ: - cam->SetPosition(position[0],-position[1],position[2]); - break; + case vtkImageViewer2::SLICE_ORIENTATION_XZ: + cam->SetPosition(position[0],-position[1],position[2]); + break; - case vtkImageViewer2::SLICE_ORIENTATION_YZ: - cam->SetPosition(-position[0],position[1],position[2]); - break; + case vtkImageViewer2::SLICE_ORIENTATION_YZ: + cam->SetPosition(-position[0],position[1],position[2]); + break; } - this->Renderer->ResetCameraClippingRange(); - this->UpdateDisplayExtent(); + this->Renderer->ResetCameraClippingRange(); + this->UpdateDisplayExtent(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::FlipVerticalView() { - vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; - if (cam) + vtkCamera *cam = this->Renderer ? this->Renderer->GetActiveCamera() : NULL; + if (cam) { - FlipHorizontalView(); - double *viewup = cam->GetViewUp(); - cam->SetViewUp(-viewup[0],-viewup[1],-viewup[2]); - this->UpdateDisplayExtent(); + FlipHorizontalView(); + double *viewup = cam->GetViewUp(); + cam->SetViewUp(-viewup[0],-viewup[1],-viewup[2]); + this->UpdateDisplayExtent(); } } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::SetColorWindow(double window) { - vtkLookupTable* LUT = static_cast(this->GetWindowLevel()->GetLookupTable()); - if ( LUT ) + vtkLookupTable* LUT = static_cast(this->GetWindowLevel()->GetLookupTable()); + if ( LUT ) { - double level = this->GetWindowLevel()->GetLevel(); - LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); - LUT->Build(); + double level = this->GetWindowLevel()->GetLevel(); + LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); + LUT->Build(); } - this->vtkImageViewer2::SetColorWindow(window); + this->vtkImageViewer2::SetColorWindow(window); } +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- void vvSlicer::SetColorLevel(double level) { - vtkLookupTable* LUT = static_cast(this->GetWindowLevel()->GetLookupTable()); - if ( LUT ) + vtkLookupTable* LUT = static_cast(this->GetWindowLevel()->GetLookupTable()); + if ( LUT ) { - double window = this->GetWindowLevel()->GetWindow(); - LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); - LUT->Build(); + double window = this->GetWindowLevel()->GetWindow(); + LUT->SetTableRange(level-fabs(window)/4,level+fabs(window)/4); + LUT->Build(); } - this->vtkImageViewer2::SetColorLevel(level); + this->vtkImageViewer2::SetColorLevel(level); } +//---------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------- void vvSlicer::Render() { - if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay && !this->mFusion) + if (this->GetWindowLevel()->GetLookupTable() && !this->mOverlay && !this->mFusion) { - legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable()); - legend->SetVisibility(1); + legend->SetLookupTable(this->GetWindowLevel()->GetLookupTable()); + legend->SetVisibility(1); } - else legend->SetVisibility(0); + else legend->SetVisibility(0); - if (ca->GetVisibility()) + if (ca->GetVisibility()) { - std::string worldPos = ""; - std::stringstream world1; - std::stringstream world2; - std::stringstream world3; - world1 << (int)mCurrent[0]; - world2 << (int)mCurrent[1]; - world3 << (int)mCurrent[2]; - double X = (mCurrent[0] - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; - double Y = (mCurrent[1] - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; - double Z = (mCurrent[2] - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; - - if (pdmA->GetVisibility()) + std::string worldPos = ""; + std::stringstream world1; + std::stringstream world2; + std::stringstream world3; + world1 << (int)mCurrent[0]; + world2 << (int)mCurrent[1]; + world3 << (int)mCurrent[2]; + double X = (mCurrent[0] - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; + double Y = (mCurrent[1] - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; + double Z = (mCurrent[2] - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; + + if (pdmA->GetVisibility()) { - double x = mCursor[0]; - double y = mCursor[1]; - double z = mCursor[2]; - double xCursor = (x - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; - double yCursor = (y - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; - double zCursor = (z - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; - - if (xCursor >= this->GetImageActor()->GetDisplayExtent()[0] && - xCursor < this->GetImageActor()->GetDisplayExtent()[1]+1 && - yCursor >= this->GetImageActor()->GetDisplayExtent()[2] && - yCursor < this->GetImageActor()->GetDisplayExtent()[3]+1 && - zCursor >= this->GetImageActor()->GetDisplayExtent()[4] && - zCursor < this->GetImageActor()->GetDisplayExtent()[5]+1 ) + double x = mCursor[0]; + double y = mCursor[1]; + double z = mCursor[2]; + double xCursor = (x - this->GetInput()->GetOrigin()[0])/this->GetInput()->GetSpacing()[0]; + double yCursor = (y - this->GetInput()->GetOrigin()[1])/this->GetInput()->GetSpacing()[1]; + double zCursor = (z - this->GetInput()->GetOrigin()[2])/this->GetInput()->GetSpacing()[2]; + + if (xCursor >= this->GetImageActor()->GetDisplayExtent()[0] && + xCursor < this->GetImageActor()->GetDisplayExtent()[1]+1 && + yCursor >= this->GetImageActor()->GetDisplayExtent()[2] && + yCursor < this->GetImageActor()->GetDisplayExtent()[3]+1 && + zCursor >= this->GetImageActor()->GetDisplayExtent()[4] && + zCursor < this->GetImageActor()->GetDisplayExtent()[5]+1 ) { - vtkRenderer * renderer = this->Renderer; - - renderer->WorldToView(x,y,z); - renderer->ViewToNormalizedViewport(x,y,z); - renderer->NormalizedViewportToViewport(x,y); - renderer->ViewportToNormalizedDisplay(x,y); - renderer->NormalizedDisplayToDisplay(x,y); - crossCursor->SetFocalPoint(x,y,z); + vtkRenderer * renderer = this->Renderer; + + renderer->WorldToView(x,y,z); + renderer->ViewToNormalizedViewport(x,y,z); + renderer->NormalizedViewportToViewport(x,y); + renderer->ViewportToNormalizedDisplay(x,y); + renderer->NormalizedDisplayToDisplay(x,y); + crossCursor->SetFocalPoint(x,y,z); } - else - crossCursor->SetFocalPoint(-1,-1,z); + else + crossCursor->SetFocalPoint(-1,-1,z); } - if (X >= this->GetInput()->GetWholeExtent()[0] && - X <= this->GetInput()->GetWholeExtent()[1] && - Y >= this->GetInput()->GetWholeExtent()[2] && - Y <= this->GetInput()->GetWholeExtent()[3] && - Z >= this->GetInput()->GetWholeExtent()[4] && - Z <= this->GetInput()->GetWholeExtent()[5]) + if (X >= this->GetInput()->GetWholeExtent()[0] && + X <= this->GetInput()->GetWholeExtent()[1] && + Y >= this->GetInput()->GetWholeExtent()[2] && + Y <= this->GetInput()->GetWholeExtent()[3] && + Z >= this->GetInput()->GetWholeExtent()[4] && + Z <= this->GetInput()->GetWholeExtent()[5]) { - std::stringstream pixel1; - std::stringstream pixel2; - std::stringstream pixel3; - std::stringstream temps; - pixel1 << (int)X; - pixel2 << (int)Y; - pixel3 << (int)Z; - temps << mCurrentTSlice; - double value = this->GetInput()->GetScalarComponentAsDouble( - (int)X, - (int)Y, - (int)Z,0); - - std::stringstream val; - val << value; - worldPos += "data value : " + val.str(); - worldPos += "\n mm : " + world1.str() + " " + world2.str() + " " + world3.str() + " " + temps.str(); - worldPos += "\n pixel : " + pixel1.str() + " " + pixel2.str() + " " + pixel3.str() + " " + temps.str(); + std::stringstream pixel1; + std::stringstream pixel2; + std::stringstream pixel3; + std::stringstream temps; + pixel1 << (int)X; + pixel2 << (int)Y; + pixel3 << (int)Z; + temps << mCurrentTSlice; + double value = this->GetInput()->GetScalarComponentAsDouble( + (int)X, + (int)Y, + (int)Z,0); + + std::stringstream val; + val << value; + worldPos += "data value : " + val.str(); + worldPos += "\n mm : " + world1.str() + " " + world2.str() + " " + world3.str() + " " + temps.str(); + worldPos += "\n pixel : " + pixel1.str() + " " + pixel2.str() + " " + pixel3.str() + " " + temps.str(); } - ca->SetText(1,worldPos.c_str()); + ca->SetText(1,worldPos.c_str()); } - if (mOverlay && mOverlayActor->GetVisibility()) + if (mOverlay && mOverlayActor->GetVisibility()) { - mOverlayMapper->SetWindow(this->GetColorWindow()); - mOverlayMapper->SetLevel(this->GetColorLevel()); - mOverlayMapper->Update(); + mOverlayMapper->SetWindow(this->GetColorWindow()); + mOverlayMapper->SetLevel(this->GetColorLevel()); + mOverlayMapper->Update(); } - if (mLandMapper) - UpdateLandmarks(); - //this->Superclass::Render(); - this->GetRenderWindow()->Render(); + if (mLandMapper) + UpdateLandmarks(); + //this->Superclass::Render(); + this->GetRenderWindow()->Render(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::UpdateCursorPosition() { - if (this->GetImageActor()->GetVisibility()) + if (this->GetImageActor()->GetVisibility()) { - pdmA->SetVisibility(true); - mCursor[0] = mCurrent[0]; - mCursor[1] = mCurrent[1]; - mCursor[2] = mCurrent[2]; - mCursor[3] = mCurrentTSlice; + pdmA->SetVisibility(true); + mCursor[0] = mCurrent[0]; + mCursor[1] = mCurrent[1]; + mCursor[2] = mCurrent[2]; + mCursor[3] = mCurrentTSlice; } } +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- void vvSlicer::UpdateLandmarks() { - vtkPolyData *pd = static_cast(mLandClipper->GetInput()); - if (pd->GetPoints()) + vtkPolyData *pd = static_cast(mLandClipper->GetInput()); + if (pd->GetPoints()) { - mLandGlyph->SetRange(0,1); - mLandGlyph->Modified(); - mLandGlyph->Update(); + mLandGlyph->SetRange(0,1); + mLandGlyph->Modified(); + mLandGlyph->Update(); - mClipBox->Modified(); - mLandClipper->Update(); - mLandMapper->Update(); + mClipBox->Modified(); + mLandClipper->Update(); + mLandMapper->Update(); } } +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- void vvSlicer::SetSlice(int slice) { - int *range = this->GetSliceRange(); - if (range) + int *range = this->GetSliceRange(); + if (range) { - if (slice < range[0]) + if (slice < range[0]) { - slice = range[0]; + slice = range[0]; } - else if (slice > range[1]) + else if (slice > range[1]) { - slice = range[1]; + slice = range[1]; } } - if (this->Slice == slice) + if (this->Slice == slice) { - return; + return; } - this->Slice = slice; - SetContourSlice(); - this->Modified(); - this->UpdateDisplayExtent(); - this->Render(); + this->Slice = slice; + SetContourSlice(); + this->Modified(); + this->UpdateDisplayExtent(); + this->Render(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::SetContourSlice() { - if (mSurfaceCutActors.size() > 0) - for (std::vector::iterator i=mSurfaceCutActors.begin(); - i!=mSurfaceCutActors.end();i++) - (*i)->SetCutSlice((this->Slice)*this->GetImage()->GetSpacing()[this->SliceOrientation]+ - this->GetImage()->GetOrigin()[this->SliceOrientation]); + if (mSurfaceCutActors.size() > 0) + for (std::vector::iterator i=mSurfaceCutActors.begin(); + i!=mSurfaceCutActors.end();i++) + (*i)->SetCutSlice((this->Slice)*this->GetImage()->GetSpacing()[this->SliceOrientation]+ + this->GetImage()->GetOrigin()[this->SliceOrientation]); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::ForceUpdateDisplayExtent() { - this->UpdateDisplayExtent(); + this->UpdateDisplayExtent(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- int* vvSlicer::GetDisplayExtent() { - return this->GetImageActor()->GetDisplayExtent(); + return this->GetImageActor()->GetDisplayExtent(); } +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- void vvSlicer::PrintSelf(ostream& os, vtkIndent indent) { - this->Superclass::PrintSelf(os, indent); + this->Superclass::PrintSelf(os, indent); } +//---------------------------------------------------------------------------- diff --git a/vv/vvToolBinarize.cxx b/vv/vvToolBinarize.cxx index 9a45d1c..d8fb488 100644 --- a/vv/vvToolBinarize.cxx +++ b/vv/vvToolBinarize.cxx @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvToolBinarize.cxx,v $ Language: C++ - Date: $Date: 2010/02/07 08:49:42 $ - Version: $Revision: 1.6 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.7 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2008 @@ -32,8 +32,9 @@ #include "clitkBinarizeImageGenericFilter.h" -#include "vtkImageActor.h" -#include "vtkCamera.h" +#include +#include +#include //------------------------------------------------------------------------------ // Create the tool and automagically (I like this word) insert it in @@ -66,13 +67,7 @@ vvToolBinarize::vvToolBinarize(QWidget * parent, Qt::WindowFlags f) connect(mCheckBoxUseBG, SIGNAL(toggled(bool)), this, SLOT(useFGBGtoggled(bool))); // VTK objects - /* - mClipper = vtkImageClip::New(); - mSquares1 = vtkMarchingSquares::New(); - mSquaresMapper1 = vtkPolyDataMapper::New(); - mSquaresActor1 = vtkActor::New(); - */ - mImageContour = new vvImageContour; + //mImageContour = new vvImageContour; //new vector of contours @@ -96,6 +91,7 @@ vvToolBinarize::vvToolBinarize(QWidget * parent, Qt::WindowFlags f) //------------------------------------------------------------------------------ vvToolBinarize::~vvToolBinarize() { + //delete mImageContour; } //------------------------------------------------------------------------------ @@ -114,7 +110,6 @@ void vvToolBinarize::enableLowerThan(bool b) { //------------------------------------------------------------------------------ void vvToolBinarize::useFGBGtoggled(bool) { - DD("ici"); if (!mCheckBoxUseBG->isChecked() && !mCheckBoxUseFG->isChecked()) mCheckBoxUseBG->toggle(); } @@ -131,6 +126,8 @@ void vvToolBinarize::InputIsSelected() { toolMainWidget->setEnabled(true); // Specific for this gui + mThresholdSlider1->SetValue(0); + mThresholdSlider2->SetValue(0); mThresholdSlider1->SetImage(mCurrentImage); mThresholdSlider2->SetImage(mCurrentImage); mFGSlider->SetImage(mCurrentImage); @@ -143,103 +140,26 @@ void vvToolBinarize::InputIsSelected() { mFGSlider->SetValue(1); mBGSlider->SetValue(0); - DD("VTK"); - DD(mCurrentSliceManager->NumberOfSlicers()); - // mClipper->SetInput(mCurrentSliceManager->GetSlicer(0)->GetInput()); - DD(mCurrentImage->GetFirstVTKImageData()); - // DD(mClipper); - DD(mCurrentSliceManager->GetSlicer(0)); - mImageContour->setSlicer(mCurrentSliceManager->GetSlicer(0)); - - /* - mClipper->SetInput(mCurrentImage->GetFirstVTKImageData()); - mSquares1->SetInput(mClipper->GetOutput()); - mSquaresMapper1->SetInput(mSquares1->GetOutput()); - mSquaresMapper1->ScalarVisibilityOff(); - mSquaresActor1->SetMapper(mSquaresMapper1); - mSquaresActor1->GetProperty()->SetColor(1.0,0,0); - mSquaresActor1->SetPickable(0); - mCurrentSliceManager->GetSlicer(0)->GetRenderer()->AddActor(mSquaresActor1); - mSquares1->Update(); - */ - - DD("VTK end"); - - // connect(mCurrentSliceManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int))); + // VTK objects for interactive display + for(int i=0;iNumberOfSlicers(); i++) { + mImageContour.push_back(new vvImageContour); + mImageContour[i]->setSlicer(mCurrentSliceManager->GetSlicer(i)); + } + valueChangedT1(mThresholdSlider1->GetValue()); connect(mCurrentSliceManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int))); - //connect(mCurrentSliceManager,SIGNAL(UpdateSliceRange(int,int,int,int,int)),this,SLOT(UpdateSlice(int, int))); - // connect(mCurrentSliceManager,SIGNAL(LandmarkAdded()),this,SLOT(InsertSeed())); - + connect(mCurrentSliceManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int))); + } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvToolBinarize::UpdateSlice(int slicer,int slices) { - - // A METTRE SUR TOUT LES SLICES ! PAS QUE 0 - - // !! signal update slice pas tjs quand move slicer ??? - - mImageContour->update(); - - // int slice = mCurrentSliceManager->GetSlicer(0)->GetSlice(); - // //int tslice = mCurrentSliceManager->GetSlicer(0)->GetTSlice(); - // mClipper->SetInput(mCurrentSliceManager->GetSlicer(0)->GetInput()); - // int* extent = mCurrentSliceManager->GetSlicer(0)->GetImageActor()->GetDisplayExtent(); - // mClipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],extent[4],extent[5]); - // int i; - // for (i = 0; i < 6;i = i+2) - // { - // if (extent[i] == extent[i+1]) - // { - // break; - // } - // } - - // switch (i) - // { - // case 0: - // if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[0] > slice) - // { - // mSquaresActor1->SetPosition(1,0,0); - // // mSquaresActor2->SetPosition(1,0,0); - // } - // else - // { - // mSquaresActor1->SetPosition(-1,0,0); - // // mSquaresActor2->SetPosition(-1,0,0); - // } - // break; - // case 2: - // if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[1] > slice) - // { - // mSquaresActor1->SetPosition(0,1,0); - // // mSquaresActor2->SetPosition(0,1,0); - // } - // else - // { - // mSquaresActor1->SetPosition(0,-1,0); - // // mSquaresActor2->SetPosition(0,-1,0); - // } - // break; - // case 4: - // if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[2] > slice) - // { - // mSquaresActor1->SetPosition(0,0,1); - // // mSquaresActor2->SetPosition(0,0,1); - // } - // else - // { - // mSquaresActor1->SetPosition(0,0,-1); - // // mSquaresActor2->SetPosition(0,0,-1); - // } - // break; - // } - // mSquares1->Update(); - // // mSquares2->Update(); - - mCurrentSliceManager->Render(); + DD(slicer); + for(int i=0;iNumberOfSlicers(); i++) { + mImageContour[i]->update(mThresholdSlider1->GetValue()); + } + mCurrentSliceManager->Render(); } //------------------------------------------------------------------------------ @@ -261,34 +181,17 @@ void vvToolBinarize::GetArgsInfoFromGUI() { mArgsInfo.lower_given = 0; bool inverseBGandFG = false; - // if (mRadioButtonGreaterThan->isChecked()) { // Greater Than (and Lower Than) - mArgsInfo.lower_given = 1; - mArgsInfo.lower_arg = mThresholdSlider1->GetValue(); - DD(mArgsInfo.lower_arg); - if (mRadioButtonLowerThan->isChecked()) { - mArgsInfo.upper_given = 1; - mArgsInfo.upper_arg = mThresholdSlider2->GetValue(); - if (mArgsInfo.upper_argGetValue(); + DD(mArgsInfo.lower_arg); + if (mRadioButtonLowerThan->isChecked()) { + mArgsInfo.upper_given = 1; + mArgsInfo.upper_arg = mThresholdSlider2->GetValue(); + if (mArgsInfo.upper_argisChecked()) { - // mArgsInfo.lower_given = 1; - // mArgsInfo.upper_given = 1; - // mArgsInfo.lower_arg = mThresholdSlider1->GetValue(); - // mArgsInfo.upper_arg = mThresholdSlider1->GetValue(); - // } - // else { - // mArgsInfo.lower_given = 1; - // mArgsInfo.upper_given = 1; - // mArgsInfo.lower_arg = mThresholdSlider1->GetValue(); - // mArgsInfo.upper_arg = mThresholdSlider1->GetValue(); - // inverseBGandFG = true; - // } - // } + } mArgsInfo.fg_arg = mFGSlider->GetValue(); mArgsInfo.bg_arg = mBGSlider->GetValue(); @@ -307,9 +210,6 @@ void vvToolBinarize::GetArgsInfoFromGUI() { } else mArgsInfo.mode_arg = (char*)"FG"; - // DD(mArgsInfo.useBG_flag); - // DD(mArgsInfo.useFG_flag); - mArgsInfo.verbose_flag = true; // Required (even if not used) @@ -324,16 +224,8 @@ void vvToolBinarize::GetArgsInfoFromGUI() { //------------------------------------------------------------------------------ void vvToolBinarize::apply() { - DD("Apply"); - GetArgsInfoFromGUI(); - DD(mArgsInfo.lower_arg); - // cmdline_parser2(argc, argv, &args_info, 1, 1, 0); - // if (args_info.config_given) - // cmdline_parser_configfile ("toto.config", &args_info, 0, 0, 1); - // else cmdline_parser(argc, argv, &args_info); - // Main filter clitk::BinarizeImageGenericFilter::Pointer filter = clitk::BinarizeImageGenericFilter::New(); @@ -343,8 +235,9 @@ void vvToolBinarize::apply() { // Output ??? vvImage::Pointer output = filter->GetOutputVVImage(); - DD(output->GetScalarTypeAsString()); - CREATOR(vvToolBinarize)->mMainWindow->AddImage(output,"toto.mhd"); + std::ostringstream osstream; + osstream << "Binarized_" << mCurrentSliceManager->GetSlicer(0)->GetFileName(); + CREATOR(vvToolBinarize)->mMainWindow->AddImage(output,osstream.str()); close(); } //------------------------------------------------------------------------------ @@ -360,69 +253,11 @@ void vvToolBinarize::valueChangedT2(double v) { //------------------------------------------------------------------------------ void vvToolBinarize::valueChangedT1(double v) { mThresholdSlider2->SetMinimum(v); - DD(v); int m1 = (int)lrint(v); - DD(m1); - int* extent = mCurrentSliceManager->GetSlicer(0)->GetImageActor()->GetDisplayExtent(); - mClipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],extent[4],extent[5]); - - -int slice = mCurrentSliceManager->GetSlicer(0)->GetSlice(); - - int i; -for (i = 0; i < 6;i = i+2) - { - if (extent[i] == extent[i+1]) - { - break; - } - } - switch (i) - { - case 0: - if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[0] > slice) - { - mSquaresActor1->SetPosition(1,0,0); - // mSquaresActor2->SetPosition(1,0,0); - } - else - { - mSquaresActor1->SetPosition(-1,0,0); - // mSquaresActor2->SetPosition(-1,0,0); - } - break; - case 2: - if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[1] > slice) - { - mSquaresActor1->SetPosition(0,1,0); - // mSquaresActor2->SetPosition(0,1,0); - } - else - { - mSquaresActor1->SetPosition(0,-1,0); - // mSquaresActor2->SetPosition(0,-1,0); - } - break; - case 4: - if (mCurrentSliceManager->GetSlicer(0)->GetRenderer()->GetActiveCamera()->GetPosition()[2] > slice) - { - mSquaresActor1->SetPosition(0,0,1); - // mSquaresActor2->SetPosition(0,0,1); - } - else - { - mSquaresActor1->SetPosition(0,0,-1); - // mSquaresActor2->SetPosition(0,0,-1); - } - break; - } - - - - - mSquares1->SetValue(0,m1); - mSquares1->Update(); + for(int i=0;iNumberOfSlicers(); i++) { + mImageContour[i]->update(m1); + } mCurrentSliceManager->Render(); } //------------------------------------------------------------------------------ diff --git a/vv/vvToolBinarize.h b/vv/vvToolBinarize.h index 50ca44b..a1bd7d5 100644 --- a/vv/vvToolBinarize.h +++ b/vv/vvToolBinarize.h @@ -3,8 +3,8 @@ Program: vv Module: $RCSfile: vvToolBinarize.h,v $ Language: C++ - Date: $Date: 2010/02/07 08:49:42 $ - Version: $Revision: 1.4 $ + Date: $Date: 2010/02/07 12:00:59 $ + Version: $Revision: 1.5 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2010 @@ -69,12 +69,8 @@ class vvToolBinarize: void GetArgsInfoFromGUI(); //----------------------------------------------------- - // public slots: -// void InputUpdate(); - public slots: void apply(); - // void InputChange(int index); void valueChangedT1(double v); void valueChangedT2(double v); void UpdateSlice(int slicer,int slices); @@ -84,23 +80,8 @@ class vvToolBinarize: protected: Ui::vvToolBinarize ui; - // std::vector mSlicerManagers; -// std::vector mSlicerManagersCompatible; -// vvImage::Pointer mCurrentImage; -// vvSlicerManager * mCurrentSliceManager; args_info_clitkBinarizeImage mArgsInfo; - - vtkImageClip* mClipper; - vtkMarchingSquares* mSquares1; - vtkPolyDataMapper* mSquaresMapper1; - vtkActor* mSquaresActor1; - - vvImageContour * mImageContour; - - /* vtkImageClip* mClipper; */ - /* vtkMarchingSquares* mSquares1; */ - /* vtkPolyDataMapper* mSquaresMapper1; */ - /* vtkActor* mSquaresActor1; */ + std::vector mImageContour; }; // end class vvToolBinarize //------------------------------------------------------------------------------ -- 2.47.1