X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicerManager.cxx;h=a44889fd92b3f6e98e8816197d5eb315e42499c3;hb=f57924a2649534451ac1ae5a2bdc63e0b6a0092d;hp=7bc8d5829e3d64ebe8ebbea29bfc0581f1677b5c;hpb=a30d8dd30db9b6f4b67101e712f28c0b2a0227bf;p=clitk.git diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index 7bc8d58..a44889f 100644 --- a/vv/vvSlicerManager.cxx +++ b/vv/vvSlicerManager.cxx @@ -22,8 +22,6 @@ #include "vvSlicerManagerCommand.h" #include "vvInteractorStyleNavigator.h" #include "vvLandmarks.h" -#include "vvImageReader.h" -#include "vvImageReader.h" #include "vvMesh.h" #include "vvImageMapToWLColors.h" #include "vvBlendImageActor.h" @@ -52,7 +50,7 @@ vvSlicerManager::vvSlicerManager(int numberOfSlicers) mFusionName = ""; mVFId = ""; mLastError = ""; - mType = UNDEFINEDIMAGETYPE; + mType = vvImageReader::UNDEFINEDIMAGETYPE; mColorMap = 0; mPreset = 0; mOverlayColor = 130; @@ -62,19 +60,12 @@ vvSlicerManager::vvSlicerManager(int numberOfSlicers) mFusionWindow = 1000; mFusionLevel = 1000; - mReader = NULL; - mImage = NULL; - mVF=NULL; - mVectorReader = NULL; - mOverlayReader = NULL; - mFusionReader = NULL; mLandmarks = NULL; mLinkedId.resize(0); - for ( int i = 0; i < numberOfSlicers; i++) { - vvSlicer *slicer = vvSlicer::New(); - mSlicers.push_back(slicer); - } + for ( int i = 0; i < numberOfSlicers; i++) + mSlicers.push_back(vtkSmartPointer::New()); + mPreviousSlice.resize(numberOfSlicers); mPreviousTSlice.resize(numberOfSlicers); } @@ -84,22 +75,6 @@ vvSlicerManager::vvSlicerManager(int numberOfSlicers) //---------------------------------------------------------------------------- vvSlicerManager::~vvSlicerManager() { - for ( unsigned int i = 0; i < mSlicers.size(); i++) { - if (mSlicers[i] != NULL) - mSlicers[i]->Delete(); - } - if (mReader) { - delete mReader; - } - if (mVectorReader) { - delete mVectorReader; - } - if (mOverlayReader) { - delete mOverlayReader; - } - if (mFusionReader) { - delete mFusionReader; - } if (mLandmarks) delete mLandmarks; } @@ -114,13 +89,16 @@ void vvSlicerManager::SetFilename(std::string filename, int number) mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName)); mBaseFileNameNumber = number; - for(unsigned int i=0; iSetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - } - + mFileName = mBaseFileName; if (number != 0) { mFileName.append("_"+clitk::toString(number)); } + mFileName.append(vtksys::SystemTools::GetFilenameLastExtension(filename)); + + for(unsigned int i=0; iSetFileName(mFileName);//vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); + } + } //------------------------------------------------------------------------------ @@ -145,11 +123,11 @@ void vvSlicerManager::ToggleContourSuperposition() //---------------------------------------------------------------------------- -bool vvSlicerManager::SetImage(std::string filename, LoadedImageType type, int n, unsigned int slice) +bool vvSlicerManager::SetImage(std::string filename, vvImageReader::LoadedImageType type, int n, unsigned int slice) { mType = type; - if (mReader == NULL) - mReader = new vvImageReader; + if (mReader.IsNull()) + mReader = vvImageReader::New(); std::vector filenames; filenames.push_back(filename); mReader->SetInputFilenames(filenames); @@ -191,21 +169,21 @@ void vvSlicerManager::SetImage(vvImage::Pointer image) //---------------------------------------------------------------------------- -bool vvSlicerManager::SetImages(std::vector filenames,LoadedImageType type, int n) +bool vvSlicerManager::SetImages(std::vector filenames, vvImageReader::LoadedImageType type, int n) { mType = type; std::string fileWithoutExtension = vtksys::SystemTools::GetFilenameWithoutExtension(filenames[0]); - if (type == DICOM) + if (type == vvImageReader::DICOM) fileWithoutExtension += "_dicom"; - else if (type == MERGED) + else if (type == vvImageReader::MERGED) fileWithoutExtension += "_merged"; - else if (type == MERGEDWITHTIME) + else if (type == vvImageReader::MERGEDWITHTIME) fileWithoutExtension += "_merged_wt"; mFileName = vtksys::SystemTools::GetFilenameName(mFileName); mFileName = fileWithoutExtension + vtksys::SystemTools::GetFilenameExtension(filenames[0]); - if (mReader == NULL) - mReader = new vvImageReader; + if (mReader.IsNull()) + mReader = vvImageReader::New(); mReader->SetInputFilenames(filenames); mReader->Update(type); @@ -239,8 +217,8 @@ bool vvSlicerManager::SetOverlay(std::string filename,int dim, std::string compo mLastError = " Overlay dimension cannot be greater then reference image!"; return false; } - if (mOverlayReader == NULL) - mOverlayReader = new vvImageReader; + if (mOverlayReader.IsNull()) + mOverlayReader = vvImageReader::New(); std::vector filenames; filenames.push_back(filename); mOverlayReader->SetInputFilenames(filenames); @@ -267,8 +245,8 @@ bool vvSlicerManager::SetFusion(std::string filename,int dim, std::string compon mLastError = " Overlay dimension cannot be greater then reference image!"; return false; } - if (mFusionReader == NULL) - mFusionReader = new vvImageReader; + if (mFusionReader.IsNull()) + mFusionReader = vvImageReader::New(); std::vector filenames; filenames.push_back(filename); mFusionReader->SetInputFilenames(filenames); @@ -292,10 +270,10 @@ bool vvSlicerManager::SetFusion(std::string filename,int dim, std::string compon //---------------------------------------------------------------------------- bool vvSlicerManager::SetVF(std::string filename) { - if (mVectorReader == NULL) - mVectorReader = new vvImageReader; + if (mVectorReader.IsNull()) + mVectorReader = vvImageReader::New(); mVectorReader->SetInputFilename(filename); - mVectorReader->Update(VECTORFIELD); + mVectorReader->Update(vvImageReader::VECTORFIELD); if (mVectorReader->GetLastError().size() != 0) { mLastError = mVectorReader->GetLastError(); return false; @@ -502,15 +480,15 @@ void vvSlicerManager::SetColorLevel(double s) //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- -void vvSlicerManager::SetCursorVisibility(int s) +void vvSlicerManager::SetCursorAndCornerAnnotationVisibility(int s) { for ( unsigned int i = 0; i < mSlicers.size(); i++) { mSlicers[i]->SetCursorVisibility(s); + mSlicers[i]->SetCornerAnnotationVisibility(s); } } //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- void vvSlicerManager::SetOpacity(int i, double factor) { @@ -540,26 +518,21 @@ void vvSlicerManager::UpdateViews(int current,int slicer) switch (mSlicers[slicer]->GetSliceOrientation()) { case vtkImageViewer2::SLICE_ORIENTATION_XY: - if (mSlicers[slicer]->GetSlice() == (int)floor(z)) - mSlicers[slicer]->Render(); - else + if (mSlicers[slicer]->GetSlice() != (int)floor(z)) mSlicers[slicer]->SetSlice((int)floor(z)); break; case vtkImageViewer2::SLICE_ORIENTATION_XZ: - if (mSlicers[slicer]->GetSlice() == (int)floor(y)) - mSlicers[slicer]->Render(); - else + if (mSlicers[slicer]->GetSlice() != (int)floor(y)) mSlicers[slicer]->SetSlice((int)floor(y)); break; case vtkImageViewer2::SLICE_ORIENTATION_YZ: - if (mSlicers[slicer]->GetSlice() == (int)floor(x)) - mSlicers[slicer]->Render(); - else + if (mSlicers[slicer]->GetSlice() != (int)floor(x)) mSlicers[slicer]->SetSlice((int)floor(x)); break; } + mSlicers[slicer]->Render(); for ( unsigned int i = 0; i < mSlicers.size(); i++) { if (i != (unsigned int)slicer && mSlicers[i]->GetImageActor()->GetVisibility() @@ -579,26 +552,23 @@ void vvSlicerManager::UpdateViews(int current,int slicer) } switch (mSlicers[i]->GetSliceOrientation()) { case vtkImageViewer2::SLICE_ORIENTATION_XY: - if (mSlicers[i]->GetSlice() == (int)floor(z)) - mSlicers[i]->Render(); - else + if (mSlicers[i]->GetSlice() != (int)floor(z)) mSlicers[i]->SetSlice((int)floor(z)); break; case vtkImageViewer2::SLICE_ORIENTATION_XZ: - if (mSlicers[i]->GetSlice() == (int)floor(y)) - mSlicers[i]->Render(); - else + if (mSlicers[i]->GetSlice() != (int)floor(y)) mSlicers[i]->SetSlice((int)floor(y)); break; case vtkImageViewer2::SLICE_ORIENTATION_YZ: - if (mSlicers[i]->GetSlice() == (int)floor(x)) - mSlicers[i]->Render(); - else + if (mSlicers[i]->GetSlice() != (int)floor(x)) mSlicers[i]->SetSlice((int)floor(x)); break; } + + mSlicers[i]->Render(); + UpdateSlice(i); UpdateTSlice(i); } @@ -634,29 +604,29 @@ void vvSlicerManager::UpdateLinked(int slicer) //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- -void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate) +void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *refSlicer, bool bPropagate) { + vtkCamera *refCam = refSlicer->GetRenderer()->GetActiveCamera(); + double refPosition[3], refFocal[3]; + refCam->GetPosition(refPosition); + refCam->GetFocalPoint(refFocal); + for ( unsigned int i = 0; i < mSlicers.size(); i++) { - vtkCamera *camera = mSlicers[i] ->GetRenderer()->GetActiveCamera(); - vtkCamera *refCam = slicer->GetRenderer()->GetActiveCamera(); + vtkCamera *camera = mSlicers[i]->GetRenderer()->GetActiveCamera(); camera->SetParallelScale(refCam->GetParallelScale()); double position[3], focal[3]; camera->GetPosition(position); camera->GetFocalPoint(focal); - double refPosition[3], refFocal[3]; - refCam->GetPosition(refPosition); - refCam->GetFocalPoint(refFocal); - - if(slicer->GetSliceOrientation()==mSlicers[i]->GetSliceOrientation()) { + if(refSlicer->GetSliceOrientation()==mSlicers[i]->GetSliceOrientation()) { for(int i=0; i<3; i++) { position[i] = refPosition[i]; focal[i] = refFocal[i]; } } - if(slicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { + if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { position[0] = refPosition[0]; focal[0] = refFocal[0]; @@ -667,7 +637,7 @@ void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate) } } - if(slicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { + if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XZ) { if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { position[2] = refPosition[2]; focal[2] = refFocal[2]; @@ -678,7 +648,7 @@ void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate) } } - if(slicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { + if(refSlicer->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_YZ) { if(mSlicers[i]->GetSliceOrientation()==vtkImageViewer2::SLICE_ORIENTATION_XY) { position[1] = refPosition[1]; focal[1] = refFocal[1]; @@ -691,12 +661,15 @@ void vvSlicerManager::UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate) camera->SetFocalPoint(focal); camera->SetPosition(position); - - if(bPropagate) - for (std::list::const_iterator i = mLinkedId.begin(); i != mLinkedId.end(); i++) - emit UpdateLinkedNavigation(*i, this); + + //Fix for bug #243 + mSlicers[i]->ForceUpdateDisplayExtent(); } + Render(); + if(bPropagate) + for (std::list::const_iterator i = mLinkedId.begin(); i != mLinkedId.end(); i++) + emit UpdateLinkedNavigation(*i, this, refSlicer); } //---------------------------------------------------------------------------- @@ -778,7 +751,7 @@ void vvSlicerManager::ReloadOverlay() //---------------------------------------------------------------------------- void vvSlicerManager::ReloadVF() { - mVectorReader->Update(VECTORFIELD); //deletes the old images through the VF::Init() function + mVectorReader->Update(vvImageReader::VECTORFIELD); //deletes the old images through the VF::Init() function mVF=mVectorReader->GetOutput(); for ( unsigned int i = 0; i < mSlicers.size(); i++) { mSlicers[i]->SetVF(mVF); @@ -791,25 +764,18 @@ void vvSlicerManager::ReloadVF() //---------------------------------------------------------------------------- void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_index) { - if (actor_type =="overlay") { - delete mOverlayReader; + if (actor_type =="overlay") mOverlayReader = NULL; - } - if (actor_type =="fusion") { - delete mFusionReader; + if (actor_type =="fusion") mFusionReader = NULL; - } - for (unsigned int i = 0; i < mSlicers.size(); i++) { + for (unsigned int i = 0; i < mSlicers.size(); i++) mSlicers[i]->RemoveActor(actor_type,overlay_index); - } + if (actor_type=="vector") { mVF=NULL; - if (mVectorReader) { - delete mVectorReader; - mVectorReader=NULL; - } + mVectorReader=NULL; } } //---------------------------------------------------------------------------- @@ -936,6 +902,13 @@ void vvSlicerManager::Activated() //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +void vvSlicerManager::Picked() +{ + emit currentPickedImageChanged(mId); +} +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- void vvSlicerManager::UpdateWindowLevel() {