]> Creatis software - clitk.git/blobdiff - vv/vvToolBinarize.cxx
mechanism for hiding experimental stuff in vv
[clitk.git] / vv / vvToolBinarize.cxx
index 4f91d19d2c20165c87bd0e1c7acfa23ac26f33de..343350ce2731a40dcf2c95ecabfbeff21c2566ea 100644 (file)
@@ -3,8 +3,8 @@
   Program:   vv
   Module:    $RCSfile: vvToolBinarize.cxx,v $
   Language:  C++
-  Date:      $Date: 2010/03/01 15:38:09 $
-  Version:   $Revision: 1.10 $
+  Date:      $Date: 2010/03/17 11:22:18 $
+  Version:   $Revision: 1.12 $
   Author :   David Sarrut (david.sarrut@creatis.insa-lyon.fr)
 
   Copyright (C) 2008
@@ -64,8 +64,6 @@ vvToolBinarize::vvToolBinarize(vvMainWindowBase * parent, Qt::WindowFlags f)
   mInteractiveDisplayIsEnabled = mCheckBoxInteractiveDisplay->isChecked();
 
   // Connect signals & slots  
-  connect(mThresholdSlider1, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT1(double)));
-  connect(mThresholdSlider2, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT2(double)));
   connect(mRadioButtonLowerThan, SIGNAL(toggled(bool)), this, SLOT(enableLowerThan(bool)));
   connect(mCheckBoxUseFG, SIGNAL(toggled(bool)), this, SLOT(useFGBGtoggled(bool)));
   connect(mCheckBoxUseBG, SIGNAL(toggled(bool)), this, SLOT(useFGBGtoggled(bool)));
@@ -78,7 +76,10 @@ vvToolBinarize::vvToolBinarize(vvMainWindowBase * parent, Qt::WindowFlags f)
   mBGSlider->SetText("Background value");
 
   // Main filter 
-  mFilter = new clitk::BinarizeImageGenericFilter<args_info_clitkBinarizeImage>; //DS PUT IN BASECLASS ?
+  mFilter = new clitk::BinarizeImageGenericFilter<args_info_clitkBinarizeImage>;
+
+  // Set how many inputs are needed for this tool
+  AddInputSelector(mFilter);
 }
 //------------------------------------------------------------------------------
 
@@ -96,8 +97,11 @@ void vvToolBinarize::InteractiveDisplayToggled(bool b) {
     RemoveVTKObjects();
   }
   else {
-    for(unsigned int i=0; i<mImageContour.size(); i++)
+    for(unsigned int i=0; i<mImageContour.size(); i++) {
       mImageContour[i]->showActors();
+      if (mRadioButtonLowerThan->isChecked())
+        mImageContourLower[i]->showActors();
+    }
     if (mCurrentSlicerManager)
       mCurrentSlicerManager->Render();
   }
@@ -107,8 +111,10 @@ void vvToolBinarize::InteractiveDisplayToggled(bool b) {
 
 //------------------------------------------------------------------------------
 void vvToolBinarize::RemoveVTKObjects() { 
-  for(unsigned int i=0; i<mImageContour.size(); i++)
+  for(unsigned int i=0; i<mImageContour.size(); i++) {
     mImageContour[i]->hideActors();
+    mImageContourLower[i]->hideActors();    
+  }
   if (mCurrentSlicerManager)
     mCurrentSlicerManager->Render();
 }
@@ -125,6 +131,7 @@ bool vvToolBinarize::close() {
 
 //------------------------------------------------------------------------------
 void vvToolBinarize::reject() { 
+  DD("vvToolBinarize::reject");
   RemoveVTKObjects();
   return vvToolWidgetBase::reject(); 
 }
@@ -135,9 +142,18 @@ void vvToolBinarize::reject() {
 void vvToolBinarize::enableLowerThan(bool b) {
   if (!b) {
     mThresholdSlider1->resetMaximum();
+    for(unsigned int i=0; i<mImageContour.size(); i++) {
+      mImageContourLower[i]->hideActors();    
+    }
+    mCurrentSlicerManager->Render();
   }
   else {
     valueChangedT1(mThresholdSlider1->GetValue());
+    valueChangedT2(mThresholdSlider2->GetValue());
+    for(unsigned int i=0; i<mImageContour.size(); i++) {
+      mImageContourLower[i]->showActors();    
+    }
+    mCurrentSlicerManager->Render();
   }
 }
 //------------------------------------------------------------------------------
@@ -152,6 +168,10 @@ void vvToolBinarize::useFGBGtoggled(bool) {
 
 
 //------------------------------------------------------------------------------
+// void vvToolBinarize::InputIsSelected(std::vector<vvSlicerManager *> & m) {
+//   DD("vvToolBinarize::InputIsSelected vector in binarize");
+//   DD(m.size());
+// }
 void vvToolBinarize::InputIsSelected(vvSlicerManager * m) {
   mCurrentSlicerManager = m;
 
@@ -169,13 +189,23 @@ void vvToolBinarize::InputIsSelected(vvSlicerManager * m) {
   mBGSlider->SetMinimum(mCurrentImage->GetFirstVTKImageData()->GetScalarTypeMin());
   mFGSlider->SetValue(1);
   mBGSlider->SetValue(0);
+  mFGSlider->SetSingleStep(1);
+  mBGSlider->SetSingleStep(1);
   
   // VTK objects for interactive display
   for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
     mImageContour.push_back(new vvImageContour);
     mImageContour[i]->setSlicer(mCurrentSlicerManager->GetSlicer(i));
+    mImageContour[i]->setColor(1.0, 0.0, 0.0);
+    mImageContourLower.push_back(new vvImageContour);
+    mImageContourLower[i]->setSlicer(mCurrentSlicerManager->GetSlicer(i));
+    mImageContourLower[i]->setColor(0.0, 0.0, 1.0);
   }
   valueChangedT1(mThresholdSlider1->GetValue());
+
+  connect(mThresholdSlider1, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT1(double)));
+  connect(mThresholdSlider2, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT2(double)));
+
   connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
   connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
 
@@ -189,6 +219,9 @@ void vvToolBinarize::UpdateSlice(int slicer,int slices) {
   if (!mCurrentSlicerManager) close();
   for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
     mImageContour[i]->update(mThresholdSlider1->GetValue());
+    if (mRadioButtonLowerThan->isChecked()) 
+      mImageContourLower[i]->update(mThresholdSlider2->GetValue());
+
   }
   mCurrentSlicerManager->Render(); 
 }
@@ -279,19 +312,28 @@ void vvToolBinarize::apply() {
 
 //------------------------------------------------------------------------------
 void vvToolBinarize::valueChangedT2(double v) {
-  if (mRadioButtonLowerThan->isChecked()) mThresholdSlider1->SetMaximum(v);
+  //  DD("valueChangedT2");
+  if (mRadioButtonLowerThan->isChecked()) {
+    mThresholdSlider1->SetMaximum(v);
+    if (!mInteractiveDisplayIsEnabled) return;
+    for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
+      mImageContourLower[i]->update(v);
+    }
+    mCurrentSlicerManager->Render();
+  }
 }
 //------------------------------------------------------------------------------
 
 
 //------------------------------------------------------------------------------
 void vvToolBinarize::valueChangedT1(double v) {
+  //  DD("valueChangedT1");
   if (!mCurrentSlicerManager) close();
   mThresholdSlider2->SetMinimum(v);
-  int m1 = (int)lrint(v);  
+  //  int m1 = (int)lrint(v);  
   if (!mInteractiveDisplayIsEnabled) return;
   for(int i=0;i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
-    mImageContour[i]->update(m1);
+    mImageContour[i]->update(v);
   }
   mCurrentSlicerManager->Render();
 }