X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicerManager.cxx;h=08ae8cb520d756d8e2bac1011f2fd6c7b5967ae1;hb=6303ae6a7cad09a470d497d7c62ccf351fbf7981;hp=c23c1207ba891e4848751ebdac85efa26a228c27;hpb=66c0b229be48fdbbe2d42bcb5fa461ab87461ae3;p=clitk.git diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index c23c120..08ae8cb 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" @@ -42,6 +40,8 @@ #include #include +#include + //---------------------------------------------------------------------------- vvSlicerManager::vvSlicerManager(int numberOfSlicers) { @@ -52,7 +52,7 @@ vvSlicerManager::vvSlicerManager(int numberOfSlicers) mFusionName = ""; mVFId = ""; mLastError = ""; - mType = UNDEFINEDIMAGETYPE; + mType = vvImageReader::UNDEFINEDIMAGETYPE; mColorMap = 0; mPreset = 0; mOverlayColor = 130; @@ -62,19 +62,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 +77,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; } @@ -112,16 +89,18 @@ void vvSlicerManager::SetFilename(std::string filename, int number) mFileName = filename; mFileName = vtksys::SystemTools::GetFilenameName(mFileName); mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName)); - // DD(mBaseFileName); 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)); + } + } //------------------------------------------------------------------------------ @@ -144,22 +123,50 @@ void vvSlicerManager::ToggleContourSuperposition() } //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +std::string vvSlicerManager::GetListOfAbsoluteFilePathInOneString(const std::string &actorType) +{ + vvImageReader *reader = NULL; + + if(actorType=="image") + reader = mReader; + else if(actorType=="overlay") + reader = mOverlayReader; + else if(actorType=="fusion") + reader = mFusionReader; + else if(actorType=="vector") + reader = mVectorReader; + + if(!reader) + return ""; + + std::string list; + for(unsigned int i=0; iGetInputFilenames().size(); i++){ + QFileInfo fileinfo(reader->GetInputFilenames()[i].c_str()); //Do not show the path + if(i) + list += '\n'; + list += fileinfo.absoluteFilePath().toStdString(); + } + return list; +} +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- -bool vvSlicerManager::SetImage(std::string filename, LoadedImageType type, int n) +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); + mReader->SetSlice(slice); // Only used for SLICED type mReader->Update(type); SetFilename(filename, n); // mFileName = vtksys::SystemTools::GetFilenameName(mFileName); //mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName)); - // DD(mBaseFileName); //mBaseFileNameNumber = n; if (mReader->GetLastError().size() == 0) { @@ -167,14 +174,12 @@ bool vvSlicerManager::SetImage(std::string filename, LoadedImageType type, int n for ( unsigned int i = 0; i < mSlicers.size(); i++) { mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); mSlicers[i]->SetImage(mReader->GetOutput()); - // DD(mSlicers[i]->GetFileName()); } } else { mLastError = mReader->GetLastError(); return false; } // if (n!=0) { - // // DD(mFileName); // mFileName.append("_"+clitk::toString(n)); // } return true; @@ -194,26 +199,25 @@ 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); mBaseFileName = vtksys::SystemTools::GetFilenameName(vtksys::SystemTools::GetFilenameWithoutLastExtension(mFileName)); - // DD(mBaseFileName); mBaseFileNameNumber = n; if (mReader->GetLastError().size() == 0) { @@ -227,9 +231,7 @@ bool vvSlicerManager::SetImages(std::vector filenames,LoadedImageTy return false; } if (n!=0) { - // DD(mFileName); mFileName.append("_"+clitk::toString(n)); - // DD(mFileName); } return true; } @@ -245,8 +247,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); @@ -273,8 +275,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); @@ -298,10 +300,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; @@ -319,10 +321,6 @@ bool vvSlicerManager::SetVF(vvImage::Pointer vf,std::string filename) return false; } if (vf->GetNumberOfDimensions() == 4) { - // DD(vf->GetSpacing()[3]); - // DD(mImage->GetSpacing()[3]); - // DD(vf->GetOrigin()[3]); - // DD(mImage->GetOrigin()[3]); if (vf->GetSpacing()[3] != mImage->GetSpacing()[3]) { mLastError = "Sorry, vector field time spacing cannot be different from time spacing of the reference image."; return false; @@ -342,35 +340,6 @@ bool vvSlicerManager::SetVF(vvImage::Pointer vf,std::string filename) //---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- -void vvSlicerManager::SetExtractedImage(std::string filename,vvImage::Pointer image, int slice) -{ - mFileName = filename; - mImage = vvImage::New(); - if (image->GetNumberOfDimensions() == 4) { - mImage->AddImage(image->GetVTKImages()[slice]); - for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - mSlicers[i]->SetImage(mImage); - } - } else { - vtkImageClip* clipper = vtkImageClip::New(); - int extent[6]; - image->GetVTKImages()[0]->GetWholeExtent(extent); - clipper->SetInput(image->GetVTKImages()[0]); - clipper->SetOutputWholeExtent(extent[0],extent[1],extent[2],extent[3],slice,slice); - clipper->Update(); - mImage->AddImage(clipper->GetOutput()); - for ( unsigned int i = 0; i < mSlicers.size(); i++) { - mSlicers[i]->SetFileName(vtksys::SystemTools::GetFilenameWithoutLastExtension(filename)); - mSlicers[i]->SetImage(mImage); - } - clipper->Delete(); - } -} -//---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- vvSlicer* vvSlicerManager::GetSlicer(int i) { @@ -442,6 +411,13 @@ void vvSlicerManager::LeftButtonReleaseEvent(int slicer) } //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +void vvSlicerManager::SetSliceOrientation(int slicer, int orientation) +{ + mSlicers[slicer]->SetSliceOrientation(orientation); + emit UpdateOrientation(slicer, orientation); +} +//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- void vvSlicerManager::SetTSlice(int slice) @@ -470,9 +446,7 @@ void vvSlicerManager::SetNextTSlice(int originating_slicer) t++; if (t > mSlicers[0]->GetTMax()) t = 0; - // DD("SetNextTSlice"); - // DD(originating_slicer); - // DD(t); + //std::cout << "vvSlicerManager::SetNextTSlice" << std::endl; emit UpdateTSlice(originating_slicer,t); } //---------------------------------------------------------------------------- @@ -485,6 +459,7 @@ void vvSlicerManager::SetPreviousTSlice(int originating_slicer) t--; if (t < 0) t = mSlicers[0]->GetTMax(); + //std::cout << "vvSlicerManager::SetPreviousTSlice" << std::endl; emit UpdateTSlice(originating_slicer,t); } //---------------------------------------------------------------------------- @@ -496,6 +471,10 @@ void vvSlicerManager::ToggleInterpolation() bool interpolate=!(mSlicers[0]->GetImageActor()->GetInterpolate()); for ( unsigned int i = 0; i < mSlicers.size(); i++) { mSlicers[i]->GetImageActor()->SetInterpolate(interpolate); + if (mSlicers[i]->GetOverlayActor()) + mSlicers[i]->GetOverlayActor()->SetInterpolate(interpolate); + if (mSlicers[i]->GetFusionActor()) + mSlicers[i]->GetFusionActor()->SetInterpolate(interpolate); } } //---------------------------------------------------------------------------- @@ -540,15 +519,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) { @@ -560,10 +539,6 @@ void vvSlicerManager::SetOpacity(int i, double factor) //---------------------------------------------------------------------------- void vvSlicerManager::UpdateViews(int current,int slicer) { - // DD("UpdateViews"); - // DD(current); - // DD(slicer); - double x = (mSlicers[slicer]->GetCurrentPosition()[0] - mSlicers[slicer]->GetInput()->GetOrigin()[0]) /mSlicers[slicer]->GetInput()->GetSpacing()[0]; double y = (mSlicers[slicer]->GetCurrentPosition()[1] - mSlicers[slicer]->GetInput()->GetOrigin()[1]) @@ -582,26 +557,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() @@ -621,28 +591,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; } - // DD("UpdateViews::"); - // DD(i); + + mSlicers[i]->Render(); + UpdateSlice(i); UpdateTSlice(i); } @@ -678,29 +643,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]; @@ -711,7 +676,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]; @@ -722,7 +687,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]; @@ -735,12 +700,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); } //---------------------------------------------------------------------------- @@ -767,9 +735,7 @@ double vvSlicerManager::GetColorLevel() //---------------------------------------------------------------------------- void vvSlicerManager::Render() { - // DD("vvSlicerManager::Render"); for ( unsigned int i = 0; i < mSlicers.size(); i++) { - // DD(i); mSlicers[i]->Render(); } } @@ -824,7 +790,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); @@ -837,15 +803,18 @@ void vvSlicerManager::ReloadVF() //---------------------------------------------------------------------------- void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_index) { - for (unsigned int i = 0; i < mSlicers.size(); i++) { + if (actor_type =="overlay") + mOverlayReader = NULL; + + if (actor_type =="fusion") + mFusionReader = NULL; + + 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; } } //---------------------------------------------------------------------------- @@ -854,7 +823,10 @@ void vvSlicerManager::RemoveActor(const std::string& actor_type, int overlay_ind //---------------------------------------------------------------------------- void vvSlicerManager::RemoveActors() { - ///This method leaks a few objects. See RemoveActor for what a correct implementation would look like + ///This method leaks a few objects. See RemoveActor for what a + ///correct implementation would look like + //DS -> probably due to the reader (now released in the + //RemoveActor() function. (I hope) for ( unsigned int i = 0; i < mSlicers.size(); i++) { mSlicers[i]->SetDisplayMode(0); mSlicers[i]->GetRenderer()->RemoveActor(mSlicers[i]->GetImageActor()); @@ -889,10 +861,8 @@ void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer) Y <= mSlicers[slicer]->GetInput()->GetWholeExtent()[3] && Z >= mSlicers[slicer]->GetInput()->GetWholeExtent()[4] && Z <= mSlicers[slicer]->GetInput()->GetWholeExtent()[5]) { - value = mSlicers[slicer]->GetInput()->GetScalarComponentAsDouble( - (int)floor(X), - (int)floor(Y), - (int)floor(Z),0); + value = this->GetScalarComponentAsDouble(mSlicers[slicer]->GetInput(), X, Y, Z); + if (mSlicers[slicer]->GetVFActor() && mSlicers[slicer]->GetVFActor()->GetVisibility()) { displayVec = 1; unsigned int currentTime = mSlicers[slicer]->GetTSlice(); @@ -907,53 +877,27 @@ void vvSlicerManager::UpdateInfoOnCursorPosition(int slicer) double Xvf = (x - vf->GetOrigin()[0])/ vf->GetSpacing()[0]; double Yvf = (y - vf->GetOrigin()[1])/ vf->GetSpacing()[1]; double Zvf = (z - vf->GetOrigin()[2])/ vf->GetSpacing()[2]; - xVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),0); - yVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),1); - zVec = vf->GetScalarComponentAsDouble( (int)floor(Xvf), (int)floor(Yvf), (int)floor(Zvf),2); + xVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 0); + yVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 1); + zVec = this->GetScalarComponentAsDouble( vf, Xvf, Yvf, Zvf, 2); valueVec = sqrt(xVec*xVec + yVec*yVec + zVec*zVec); } } if (mSlicers[slicer]->GetOverlayActor() && mSlicers[slicer]->GetOverlayActor()->GetVisibility()) { displayOver = 1; - double Xover = (x - mSlicers[slicer]->GetOverlay()->GetOrigin()[0]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[0]; - double Yover = (y - mSlicers[slicer]->GetOverlay()->GetOrigin()[1]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[1]; - double Zover = (z - mSlicers[slicer]->GetOverlay()->GetOrigin()[2]) - /mSlicers[slicer]->GetOverlay()->GetSpacing()[2]; - if (Xover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[0] && - Xover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[1] && - Yover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[2] && - Yover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[3] && - Zover >= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[4] && - Zover <= mSlicers[slicer]->GetOverlayMapper()->GetInput()->GetWholeExtent()[5]) { - valueOver = static_cast(mSlicers[slicer]->GetOverlayMapper()->GetInput())-> - GetScalarComponentAsDouble( - (int)floor(Xover), - (int)floor(Yover), - (int)floor(Zover),0); - } + vtkImageData *overlay = dynamic_cast(mSlicers[slicer]->GetOverlayMapper()->GetInput()); + double Xover = (x - overlay->GetOrigin()[0]) / overlay->GetSpacing()[0]; + double Yover = (y - overlay->GetOrigin()[1]) / overlay->GetSpacing()[1]; + double Zover = (z - overlay->GetOrigin()[2]) / overlay->GetSpacing()[2]; + valueOver = this->GetScalarComponentAsDouble(overlay, Xover, Yover, Zover); } if (mSlicers[slicer]->GetFusionActor() && mSlicers[slicer]->GetFusionActor()->GetVisibility()) { displayFus = 1; - double Xfus = (x - mSlicers[slicer]->GetFusion()->GetOrigin()[0]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[0]; - double Yfus = (y - mSlicers[slicer]->GetFusion()->GetOrigin()[1]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[1]; - double Zfus = (z - mSlicers[slicer]->GetFusion()->GetOrigin()[2]) - /mSlicers[slicer]->GetFusion()->GetSpacing()[2]; - if (Xfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[0] && - Xfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[1] && - Yfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[2] && - Yfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[3] && - Zfus >= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[4] && - Zfus <= mSlicers[slicer]->GetFusionMapper()->GetInput()->GetWholeExtent()[5]) { - valueFus = static_cast(mSlicers[slicer]->GetFusionMapper()->GetInput())-> - GetScalarComponentAsDouble( - (int)floor(Xfus), - (int)floor(Yfus), - (int)floor(Zfus),0); - } + vtkImageData *fusion = dynamic_cast(mSlicers[slicer]->GetFusionMapper()->GetInput()); + double Xover = (x - fusion->GetOrigin()[0]) / fusion->GetSpacing()[0]; + double Yover = (y - fusion->GetOrigin()[1]) / fusion->GetSpacing()[1]; + double Zover = (z - fusion->GetOrigin()[2]) / fusion->GetSpacing()[2]; + valueFus = this->GetScalarComponentAsDouble(fusion, Xover, Yover, Zover); } emit UpdatePosition(mSlicers[slicer]->GetCursorVisibility(), x,y,z,X,Y,Z,value); @@ -979,6 +923,13 @@ void vvSlicerManager::Activated() //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +void vvSlicerManager::Picked() +{ + emit currentPickedImageChanged(mId); +} +//---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- void vvSlicerManager::UpdateWindowLevel() { @@ -990,13 +941,11 @@ void vvSlicerManager::UpdateWindowLevel() //---------------------------------------------------------------------------- void vvSlicerManager::UpdateSlice(int slicer) { - // DD("vvSlicerManager::UpdateSlice emit UpdateSlice"); - // DD(slicer); - // DD(mSlicers[slicer]->GetSlice()); if (mPreviousSlice[slicer] == mSlicers[slicer]->GetSlice()) { //DD("============= NOTHING"); return; } + //std::cout << "vvSlicerManager::UpdateSlice " << slicer << " " << mSlicers[slicer]->GetSlice() << std::endl; emit UpdateSlice(slicer, mSlicers[slicer]->GetSlice()); mSlicers[slicer]->Render(); // DS <-- I add this, this could/must be the only Render ... mPreviousSlice[slicer] = mSlicers[slicer]->GetSlice(); @@ -1007,19 +956,18 @@ void vvSlicerManager::UpdateSlice(int slicer) //---------------------------------------------------------------------------- void vvSlicerManager::UpdateTSlice(int slicer) { - // DD("vvSlicerManager::UpdateTSlice emit UpdateTSlice"); - // DD(slicer); - // DD(mSlicers[slicer]->GetTSlice()); - // DD(mSlicers[slicer]->GetSlice()); - if (mPreviousSlice[slicer] == mSlicers[slicer]->GetSlice()) { - if (mPreviousTSlice[slicer] == mSlicers[slicer]->GetTSlice()) { + int slice = mSlicers[slicer]->GetSlice(); + int tslice = mSlicers[slicer]->GetTSlice(); + if (mPreviousSlice[slicer] == slice) { + if (mPreviousTSlice[slicer] == tslice) { // DD("************** NOTHING ***********"); return; } } - mPreviousSlice[slicer] = mSlicers[slicer]->GetSlice(); - mPreviousTSlice[slicer] = mSlicers[slicer]->GetTSlice(); - emit UpdateTSlice(slicer,mSlicers[slicer]->GetTSlice()); + mPreviousSlice[slicer] = slice; + mPreviousTSlice[slicer] = tslice; + //std::cout << "vvSlicerManager::UpdateTSlice " << slicer << " " << tslice << std::endl; + emit UpdateTSlice(slicer, tslice); } //---------------------------------------------------------------------------- @@ -1044,26 +992,18 @@ void vvSlicerManager::SetPreset(int preset) std::string component_type=mImage->GetScalarTypeAsITKString(); switch (preset) { case 0: - if (component_type == "unsigned_char") { - window = 255; - level = 127; - } else if (component_type == "short") { - window = 2000; - level = 0; - } else { - double range[2]; - mImage->GetScalarRange(range); - window = range[1] - range[0]; - level = (range[1] + range[0])* 0.5; - } + double range[2]; + mImage->GetScalarRange(range); + window = range[1] - range[0]; + level = (range[1] + range[0])* 0.5; break; case 1: window = 2000; level = 0; break; case 2: - window = 350; - level = 60; + window = 400; + level = 20; break; case 3: window = 1500; @@ -1109,14 +1049,6 @@ void vvSlicerManager::SetLocalColorWindowing(const int slicer) //---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- -void vvSlicerManager::SetColorMap() -{ - SetColorMap(mColorMap); -} -//---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- void vvSlicerManager::SetColorMap(int colormap) { @@ -1254,10 +1186,7 @@ void vvSlicerManager::AddLandmark(float x,float y,float z,float t) y_index <= mSlicers[0]->GetInput()->GetWholeExtent()[3] && z_index >= mSlicers[0]->GetInput()->GetWholeExtent()[4] && z_index <= mSlicers[0]->GetInput()->GetWholeExtent()[5]) { - double value = mSlicers[0]->GetInput()->GetScalarComponentAsDouble( - (int)x_index, - (int)y_index, - (int)z_index,0); + double value = this->GetScalarComponentAsDouble(mSlicers[0]->GetInput(), x_index, y_index, z_index); this->GetLandmarks()->AddLandmark(x,y,z,t,value); emit LandmarkAdded(); } @@ -1271,7 +1200,6 @@ void vvSlicerManager::PrevImage(int slicer) } //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- void vvSlicerManager::NextImage(int slicer) { @@ -1279,7 +1207,6 @@ void vvSlicerManager::NextImage(int slicer) } //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- void vvSlicerManager::VerticalSliderHasChanged(int slicer, int slice) { @@ -1287,3 +1214,11 @@ void vvSlicerManager::VerticalSliderHasChanged(int slicer, int slice) } //---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +double vvSlicerManager::GetScalarComponentAsDouble(vtkImageData *image, double X, double Y, double Z, int component) +{ + int ix, iy, iz; + return mSlicers[0]->GetScalarComponentAsDouble(image, X, Y, Z, ix, iy, iz, component); +} +//----------------------------------------------------------------------------