]> Creatis software - clitk.git/blobdiff - vv/vvToolProfile.cxx
Create the line iterator
[clitk.git] / vv / vvToolProfile.cxx
index 164b992d8e0de3c0f488135934cd9c037ec468e3..b9c34c9df672aa01fbc0999263112b85120b786c 100644 (file)
@@ -59,19 +59,25 @@ vvToolProfile::vvToolProfile(vvMainWindowBase * parent, Qt::WindowFlags f)
 { 
   // GUI Initialization
   Ui_vvToolProfile::setupUi(mToolWidget);
-  mInteractiveDisplayIsEnabled = mCheckBoxInteractiveDisplay->isChecked();
+  //mInteractiveDisplayIsEnabled = mCheckBoxInteractiveDisplay->isChecked();
 
   // Connect signals & slots
-  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)));
-  connect(mCheckBoxInteractiveDisplay, SIGNAL(toggled(bool)), this, SLOT(InteractiveDisplayToggled(bool)));
+  connect(mSelectPoint1Button, SIGNAL(clicked()), this, SLOT(selectPoint1()));
+  connect(mSelectPoint2Button, SIGNAL(clicked()), this, SLOT(selectPoint2()));
+  connect(mCancelPointsButton, SIGNAL(clicked()), this, SLOT(cancelPoints()));
+  connect(mComputeProfileButton, SIGNAL(clicked()), this, SLOT(computeProfile()));
 
   // Initialize some widget
-  mThresholdSlider1->SetText("");
-  mThresholdSlider2->SetText("");
-  mFGSlider->SetText("Foreground value");
-  mBGSlider->SetText("Background value");
+  //mThresholdSlider1->SetText("");
+  //mThresholdSlider2->SetText("");
+  //mFGSlider->SetText("Foreground value");
+  //mBGSlider->SetText("Background value");
+  
+  mPoint1 = NULL;
+  mPoint2 = NULL;
+  
+  point1Selected = false;
+  point2Selected = false;
 
   // Main filter
   mFilter = clitk::ProfileImageGenericFilter::New();
@@ -89,10 +95,112 @@ vvToolProfile::~vvToolProfile()
 //------------------------------------------------------------------------------
 
 
+//------------------------------------------------------------------------------
+void vvToolProfile::selectPoint1()
+{
+  QString position = "";
+  point1Selected = false;
+  if(mCurrentSlicerManager) {
+      if(mCurrentSlicerManager->GetSelectedSlicer() != -1) {
+          double *pos;
+          int *index;
+          pos = new double [mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+          index = new int [mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+          
+          for (int i=0; i<mCurrentSlicerManager->GetImage()->GetNumberOfDimensions(); ++i) {
+            pos[i] = mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetCursorPosition()[i];
+            index[i] = (int) (pos[i] - mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetInput()->GetOrigin()[i])/mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetInput()->GetSpacing()[i];
+            
+            position += QString::number(pos[i],'f',1) + " ";
+            mPoint1[i] = index[i];
+          }
+          point1Selected = true;
+      }
+  }
+  mPosPoint1Label->setText(position);
+  isPointsSelected();
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvToolProfile::selectPoint2()
+{
+  QString position = "";
+  point2Selected = false;
+  if(mCurrentSlicerManager) {
+      if(mCurrentSlicerManager->GetSelectedSlicer() != -1) {
+          double *pos;
+          int *index;
+          pos = new double [mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+          index = new int [mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+          
+          for (int i=0; i<mCurrentSlicerManager->GetImage()->GetNumberOfDimensions(); ++i) {
+            pos[i] = mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetCursorPosition()[i];
+            index[i] = (int) (pos[i] - mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetInput()->GetOrigin()[i])/mCurrentSlicerManager->GetSlicer(mCurrentSlicerManager->GetSelectedSlicer())->GetInput()->GetSpacing()[i];
+            
+            position += QString::number(pos[i],'f',1) + " ";
+            mPoint2[i] = index[i];
+          }
+          point2Selected = true;
+      }
+  }
+  mPosPoint2Label->setText(position);
+  isPointsSelected();
+}
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+bool vvToolProfile::isPointsSelected()
+{
+  if (point1Selected && point2Selected)
+      mComputeProfileButton->setEnabled(true);
+  else
+      mComputeProfileButton->setEnabled(false);
+  
+  return (point1Selected && point2Selected);
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvToolProfile::computeProfile()
+{
+    if (!mCurrentSlicerManager) close();
+
+    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+    GetArgsInfoFromGUI();
+    
+    // Main filter
+    clitk::ProfileImageGenericFilter::Pointer filter = clitk::ProfileImageGenericFilter::New();
+    filter->SetInputVVImage(mCurrentImage);
+    filter->SetArgsInfo(mArgsInfo);
+    filter->Update();
+    
+    QApplication::restoreOverrideCursor();
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvToolProfile::cancelPoints()
+{ 
+  QString position = "";
+  mPosPoint1Label->setText(position);
+  mPosPoint2Label->setText(position);
+  point1Selected = false;
+  point2Selected = false;
+  mComputeProfileButton->setEnabled(false);
+  isPointsSelected();
+}
+//------------------------------------------------------------------------------
+
+
 //------------------------------------------------------------------------------
 void vvToolProfile::InteractiveDisplayToggled(bool b)
 { 
-  mInteractiveDisplayIsEnabled = b;
+  /*mInteractiveDisplayIsEnabled = b;
   if (!mInteractiveDisplayIsEnabled) {
     RemoveVTKObjects();
   } else {
@@ -103,7 +211,7 @@ void vvToolProfile::InteractiveDisplayToggled(bool b)
     }
     if (mCurrentSlicerManager)
       mCurrentSlicerManager->Render();
-  }
+  }*/  
 }
 //------------------------------------------------------------------------------
 
@@ -144,6 +252,8 @@ void vvToolProfile::reject()
 { 
   // DD("vvToolProfile::reject");
   RemoveVTKObjects();
+  delete [] mPoint1;
+  delete [] mPoint2;
   return vvToolWidgetBase::reject();
 }
 //------------------------------------------------------------------------------
@@ -152,7 +262,7 @@ void vvToolProfile::reject()
 //------------------------------------------------------------------------------
 void vvToolProfile::enableLowerThan(bool b)
 { 
-  if (!b) {
+  /*if (!b) {
     mThresholdSlider1->resetMaximum();
     for(unsigned int i=0; i<mImageContour.size(); i++) {
       mImageContourLower[i]->HideActors();    
@@ -165,7 +275,7 @@ void vvToolProfile::enableLowerThan(bool b)
       mImageContourLower[i]->ShowActors();    
     }
     mCurrentSlicerManager->Render();
-  }
+  }*/
 }
 //------------------------------------------------------------------------------
 
@@ -188,13 +298,18 @@ void vvToolProfile::InputIsSelected(vvSlicerManager * m)
 { 
   mCurrentSlicerManager = m;
 
+  mPoint1 = new int[mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+  mPoint2 = new int[mCurrentSlicerManager->GetImage()->GetNumberOfDimensions()];
+  
+  mComputeProfileButton->setEnabled(false);
+
   // Specific for this gui
-  mThresholdSlider1->SetValue(0);
-  mThresholdSlider2->SetValue(0);
-  mThresholdSlider1->SetImage(mCurrentImage);
-  mThresholdSlider2->SetImage(mCurrentImage);
-  mFGSlider->SetImage(mCurrentImage);
-  mBGSlider->SetImage(mCurrentImage);
+  //mThresholdSlider1->SetValue(0);
+  //mThresholdSlider2->SetValue(0);
+  //mThresholdSlider1->SetImage(mCurrentImage);
+  //mThresholdSlider2->SetImage(mCurrentImage);
+  //mFGSlider->SetImage(mCurrentImage);
+  //mBGSlider->SetImage(mCurrentImage);
   //  DD(mCurrentSlicerManager->GetFileName().c_str());
   //  mFGSlider->SetMaximum(mCurrentImage->GetFirstVTKImageData()->GetScalarTypeMax());
   //   mFGSlider->SetMinimum(mCurrentImage->GetFirstVTKImageData()->GetScalarTypeMin());
@@ -202,7 +317,7 @@ void vvToolProfile::InputIsSelected(vvSlicerManager * m)
   //   mBGSlider->SetMinimum(mCurrentImage->GetFirstVTKImageData()->GetScalarTypeMin());
 
   // Output is uchar ...
-  mFGSlider->SetMaximum(255);
+  /*mFGSlider->SetMaximum(255);
   mFGSlider->SetMinimum(0);
   mBGSlider->SetMaximum(255);
   mBGSlider->SetMinimum(0);
@@ -223,18 +338,18 @@ void vvToolProfile::InputIsSelected(vvSlicerManager * m)
     mImageContourLower[i]->SetColor(0.0, 0.0, 1.0);
     mImageContourLower[i]->SetDepth(100); // to be in front of (whe used with ROI tool)
   }
-  valueChangedT1(mThresholdSlider1->GetValue());
+  //valueChangedT1(mThresholdSlider1->GetValue());
 
-  connect(mThresholdSlider1, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT1(double)));
-  connect(mThresholdSlider2, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT2(double)));
+  //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)));
+  //connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
+  //connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
   
-  connect(mCurrentSlicerManager,SIGNAL(UpdateOrientation(int,int)),this,SLOT(UpdateOrientation(int, int)));
+  //connect(mCurrentSlicerManager,SIGNAL(UpdateOrientation(int,int)),this,SLOT(UpdateOrientation(int, int)));
 
   //  connect(mCurrentSlicerManager, SIGNAL(LeftButtonReleaseSignal(int)), SLOT(LeftButtonReleaseEvent(int)));
-  InteractiveDisplayToggled(mInteractiveDisplayIsEnabled);
+  InteractiveDisplayToggled(mInteractiveDisplayIsEnabled); */
 }
 //------------------------------------------------------------------------------
 
@@ -267,11 +382,11 @@ void vvToolProfile::UpdateSlice(int slicer,int slices)
 //------------------------------------------------------------------------------
 void vvToolProfile::Update(int slicer)
 { 
-  if (!mInteractiveDisplayIsEnabled) return;
+  //if (!mInteractiveDisplayIsEnabled) return;
   if (!mCurrentSlicerManager) close();
-  mImageContour[slicer]->Update(mThresholdSlider1->GetValue());
-  if (mRadioButtonLowerThan->isChecked()) 
-    mImageContourLower[slicer]->Update(mThresholdSlider2->GetValue());
+  //mImageContour[slicer]->Update(mThresholdSlider1->GetValue());
+  //if (mRadioButtonLowerThan->isChecked()) 
+  //  mImageContourLower[slicer]->Update(mThresholdSlider2->GetValue());
 }
 //------------------------------------------------------------------------------
 
@@ -290,10 +405,10 @@ void vvToolProfile::GetArgsInfoFromGUI()
      DD(good);
   */
   cmdline_parser_clitkProfileImage_init(&mArgsInfo); // Initialisation to default
-  bool inverseBGandFG = false;
+  //bool inverseBGandFG = false;
 
-  mArgsInfo.lower_given = 1;
-  mArgsInfo.lower_arg = mThresholdSlider1->GetValue();
+  //mArgsInfo.lower_given = 1;
+  /*mArgsInfo.lower_arg = mThresholdSlider1->GetValue();
   if (mRadioButtonLowerThan->isChecked()) {
     mArgsInfo.upper_given = 1;
     mArgsInfo.upper_arg = mThresholdSlider2->GetValue();
@@ -317,15 +432,20 @@ void vvToolProfile::GetArgsInfoFromGUI()
     if (mCheckBoxUseFG->isChecked()) mArgsInfo.mode_arg = (char*)"both";
     else mArgsInfo.mode_arg = (char*)"BG";
   } else mArgsInfo.mode_arg = (char*)"FG";
-
+*/
   mArgsInfo.verbose_flag = false;
+  
+  mArgsInfo.point1_arg = mPoint1;
+  mArgsInfo.point2_arg = mPoint2;
+  mArgsInfo.point1_given = mCurrentSlicerManager->GetImage()->GetNumberOfDimensions();
+  mArgsInfo.point2_given = mCurrentSlicerManager->GetImage()->GetNumberOfDimensions();
+  
+  // Required (even if not used)
+  mArgsInfo.input_given = 0;
+  mArgsInfo.output_given = 0;
 
-  // // Required (even if not used)
-  // mArgsInfo.input_given = 0;
-  // mArgsInfo.output_given = 0;
-
-  // mArgsInfo.input_arg = new char;
-  // mArgsInfo.output_arg = new char;
+  mArgsInfo.input_arg = new char;
+  mArgsInfo.output_arg = new char;
 }
 //------------------------------------------------------------------------------
 
@@ -359,7 +479,7 @@ void vvToolProfile::apply()
 //------------------------------------------------------------------------------
 void vvToolProfile::valueChangedT2(double v)
 { 
-  //  DD("valueChangedT2");
+  /*//  DD("valueChangedT2");
   if (mRadioButtonLowerThan->isChecked()) {
     mThresholdSlider1->SetMaximum(v);
     if (!mInteractiveDisplayIsEnabled) return;
@@ -367,7 +487,7 @@ void vvToolProfile::valueChangedT2(double v)
       mImageContourLower[i]->Update(v);
     }
     mCurrentSlicerManager->Render();
-  }
+  }*/
 }
 //------------------------------------------------------------------------------
 
@@ -375,7 +495,7 @@ void vvToolProfile::valueChangedT2(double v)
 //------------------------------------------------------------------------------
 void vvToolProfile::valueChangedT1(double v)
 { 
-  //  DD("valueChangedT1");
+  /*//  DD("valueChangedT1");
   if (!mCurrentSlicerManager) close();
   mThresholdSlider2->SetMinimum(v);
   //  int m1 = (int)lrint(v);
@@ -383,6 +503,6 @@ void vvToolProfile::valueChangedT1(double v)
   for(int i=0;i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
     mImageContour[i]->Update(v);
   }
-  mCurrentSlicerManager->Render();
+  mCurrentSlicerManager->Render();*/
 }
 //------------------------------------------------------------------------------