]> Creatis software - clitk.git/commitdiff
fix crash due to clicking the reload button when we have a cropTool popup opened
authormaxime Pech <maxime.pech@insa-lyon.fr>
Thu, 26 May 2011 13:17:03 +0000 (15:17 +0200)
committermaxime Pech <maxime.pech@insa-lyon.fr>
Thu, 26 May 2011 13:17:03 +0000 (15:17 +0200)
vv/vvMainWindow.cxx
vv/vvSlicer.cxx
vv/vvSlicer.h
vv/vvToolCropImage.cxx

index 995d3dee38a3cd2671a852619c5183acaa4b2c65..5353b6d9d2558b0c7f6bb51a822285acb5d8d8e3 100644 (file)
@@ -1614,15 +1614,18 @@ void vvMainWindow::ReloadImage(QTreeWidgetItem* item, int column)
   int index = GetSlicerIndexFromItem(item);
   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
   QString role=item->data(1,Qt::UserRole).toString();
-  if ( role == "vector")
+  if ( role == "vector"){
     mSlicerManagers[index]->ReloadVF();
-  else if (role == "overlay")
+  }
+  else if (role == "overlay"){
     mSlicerManagers[index]->ReloadOverlay();
-  else if (role == "fusion")
+  }
+  else if (role == "fusion"){
     mSlicerManagers[index]->ReloadFusion();
-  else
+  }
+  else{
     mSlicerManagers[index]->Reload();
-
+  }
   // Update view and info
   ImageInfoChanged();
   mSlicerManagers[index]->Render();
index 47c2afdd591f03273e23e2a3cffc7079a511fbd6..6fd75df1a389ca8be8925bd103fb5866cbfda936 100644 (file)
 #include <vtkImageAccumulate.h>
 #include <vtkImageReslice.h>
 
-// template <class T, unsigned int dim>
-// void print_vector(const char* pmsg, T* pvec)
-// {
-//   std::cout << pmsg << ": ";
-//   for (unsigned int i = 0; i < dim; i++)
-//     std::cout << pvec[i] << " ";
-//   std::cout << std::endl;
-// }
-
-
 vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
 vtkStandardNewMacro(vvSlicer);
-
+static void copyExtent(int* in, int* to){
+ for(int i=0; i<6; ++i) to[i]=in[i]; 
+}
 //------------------------------------------------------------------------------
 vvSlicer::vvSlicer()
 {
   this->UnInstallPipeline();
   mImage = NULL;
+  mReducedExtent = new int[6];
   mCurrentTSlice = 0;
   mUseReducedExtent = false;
 
@@ -221,7 +214,7 @@ void vvSlicer::EnableReducedExtent(bool b)
 //------------------------------------------------------------------------------
 void vvSlicer::SetReducedExtent(int * ext)
 {
-  mReducedExtent = ext;
+  copyExtent(ext, mReducedExtent);
 }
 //------------------------------------------------------------------------------
 
@@ -299,6 +292,7 @@ vvSlicer::~vvSlicer()
   for (std::vector<vvMeshActor*>::iterator i=mSurfaceCutActors.begin();
        i!=mSurfaceCutActors.end(); i++)
     delete (*i);
+  delete [] mReducedExtent;
 }
 //------------------------------------------------------------------------------
 
@@ -771,8 +765,7 @@ void vvSlicer::AdjustResliceToSliceOrientation(vtkImageReslice *reslice)
 //------------------------------------------------------------------------------
 
 //----------------------------------------------------------------------------
-int * vvSlicer::GetExtent()
-{
+int * vvSlicer::GetExtent(){
   int *w_ext;
   if (mUseReducedExtent) {
     w_ext = mReducedExtent;
@@ -801,13 +794,7 @@ void vvSlicer::UpdateDisplayExtent()
 
   // Local copy of extent
   int w_ext[6];
-  for(unsigned int i=0; i<6; i++){
-    if (mUseReducedExtent)
-      w_ext[i] = mReducedExtent[i];
-    else  
-      w_ext[i] = input->GetWholeExtent()[i];
-  }
-
+  copyExtent(GetExtent(), w_ext);
   // Set slice value
   w_ext[ this->SliceOrientation*2   ] = this->Slice;
   w_ext[ this->SliceOrientation*2+1 ] = this->Slice;
index 0246723ad1b69837694dccc6fd1b32b39cc13730..95ec75e80438d4b5d4e6185f2bca504fc31c09fb 100644 (file)
@@ -166,7 +166,11 @@ public:
   virtual void SetColorWindow(double s);
   virtual void SetColorLevel(double s);
 
-    
+  /**
+   * When it is enabled, beware of a call to GetExtent.
+   * we must have setted mReducedExtent otherwhise random values
+   * are returned by GetExtent
+   * */
   void EnableReducedExtent(bool b);
   void SetReducedExtent(int * ext);
 
index 41bb0ce7fc6304c0b01700101a5a1931c69d3c90..9d6d891bbadd2bafe01892278c72ffc2f1d09738 100644 (file)
@@ -55,12 +55,6 @@ vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f):
 
   // GUI Initialization
   Ui_vvToolCropImage::setupUi(mToolWidget);
-  // mTLabel2->setHidden(false);
-  // tminSlider->setHidden(false);
-  // tmaxSlider->setHidden(false);
-  // spin_tmin->setHidden(false);
-  // spin_tmax->setHidden(false);
-  // mLabelTimeCropping->setHidden(false);
   mTLabel1->setHidden(true);
   mTLabel2->setHidden(true);
   tminSlider->setHidden(true);
@@ -80,6 +74,10 @@ vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f):
   mSliders[zmax]=zmaxSlider;
   mSliders[tmin]=tminSlider;
   mSliders[tmax]=tmaxSlider;
+  
+  // Record initial extend
+  mReducedExtent = new int[6];
+  mInitialExtent = new int[6];
 }
 //------------------------------------------------------------------------------
 
@@ -87,7 +85,8 @@ vvToolCropImage::vvToolCropImage(vvMainWindowBase * parent, Qt::WindowFlags f):
 //------------------------------------------------------------------------------
 vvToolCropImage::~vvToolCropImage()
 {
-
+  delete [] mReducedExtent;
+  delete [] mInitialExtent;
 }
 //------------------------------------------------------------------------------
 
@@ -96,11 +95,13 @@ vvToolCropImage::~vvToolCropImage()
 void vvToolCropImage::closeEvent(QCloseEvent *event)
 {
   if(mCurrentSlicerManager){
-    // Reset extends
-    for(int i=0; i<mExtentSize; i++) mReducedExtent[i] = mInitialExtent[i];
-      UpdateExtent();
+//     Reset extends
+    for(int i=0; i<mExtentSize; i++){
+      mReducedExtent[i] = mInitialExtent[i];
+    }
+    UpdateExtent();
   }
-  event->accept();
+  vvToolWidgetBase::closeEvent(event);
 }
 //------------------------------------------------------------------------------
 
@@ -173,16 +174,17 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer)
     spin_zmax->setHidden(true);
   }
 
-  // Record initial extend
-  mReducedExtent = new int[mExtentSize];
-  mInitialExtent = new int[mExtentSize];
-  mReducedExtent = mCurrentSlicerManager->GetImage()->GetFirstVTKImageData()->GetWholeExtent();
-  for(int i=0; i<mExtentSize; i++) mInitialExtent[i] = mReducedExtent[i];
+  int *a = mCurrentImage->GetFirstVTKImageData()->GetWholeExtent();
+  for(int i=0; i<6; i++){
+    mInitialExtent[i] = a[i];
+    mReducedExtent[i] = a[i];
+  }
   for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
     mCurrentSlicerManager->GetSlicer(i)->EnableReducedExtent(true);
+    mCurrentSlicerManager->GetSlicer(i)->SetReducedExtent(mInitialExtent);
   }
 
-  // Set initial sliders values
+//   Set initial sliders values
   std::vector<int> imsize = mCurrentSlicerManager->GetImage()->GetSize();
   for(int dim=0; dim<slicer->GetDimension() && dim<3; ++dim){
     mSliders[dim*2]->setMaximum(imsize[dim]-1);
@@ -215,14 +217,6 @@ void vvToolCropImage::InputIsSelected(vvSlicerManager * slicer)
     signalMapper->setMapping(mSliders[i], i);
     connect(mSliders[i], SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
   }
-  
-  
-  
-
-  //  connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateExtent()));
-  //connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateExtent()));
-
-  //  connect(mIntensitySlider, SIGNAL(valueChanged(double)), this, SLOT(autoCropValueChanged(double)));
   UpdateExtent();
 }
 //------------------------------------------------------------------------------