X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvToolProfile.cxx;h=b9c34c9df672aa01fbc0999263112b85120b786c;hb=e01ff4c52156fd3827d8aed581a21cc236d9ac43;hp=164b992d8e0de3c0f488135934cd9c037ec468e3;hpb=ebc1acee802a4dd54c3ff05662d3c7087c7aa882;p=clitk.git diff --git a/vv/vvToolProfile.cxx b/vv/vvToolProfile.cxx index 164b992..b9c34c9 100644 --- a/vv/vvToolProfile.cxx +++ b/vv/vvToolProfile.cxx @@ -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; iGetImage()->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; iGetImage()->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; iHideActors(); @@ -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;iGetNumberOfSlicers(); i++) { mImageContour[i]->Update(v); } - mCurrentSlicerManager->Render(); + mCurrentSlicerManager->Render();*/ } //------------------------------------------------------------------------------