X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvToolROIManager.cxx;h=7f544a5e31f8d1493b21fa080daa66ca1f4bc845;hb=a56f215a4841302d682fba51ad71e831aa501460;hp=d8bc827a17307cffa31e501c9d22978d2beb9d60;hpb=5312281fb385245fff3d64693e1549ffc27206e4;p=clitk.git diff --git a/vv/vvToolROIManager.cxx b/vv/vvToolROIManager.cxx index d8bc827..7f544a5 100644 --- a/vv/vvToolROIManager.cxx +++ b/vv/vvToolROIManager.cxx @@ -22,6 +22,8 @@ #include "vvROIActor.h" #include "vvSlicer.h" #include "vvROIActor.h" +#include "vvMeshReader.h" +#include "vvStructSelector.h" // Qt #include @@ -71,6 +73,10 @@ vvToolROIManager::vvToolROIManager(vvMainWindowBase * parent, Qt::WindowFlags f) setAttribute(Qt::WA_DeleteOnClose); mTree->clear(); mTree->header()->resizeSection(0, 30); + mGroupBoxROI->setEnabled(false); + + // Temporary disable "Load dicom" button + frame_4->hide(); // Set default LUT mDefaultLUTColor = vtkSmartPointer::New(); @@ -96,6 +102,7 @@ vvToolROIManager::vvToolROIManager(vvMainWindowBase * parent, Qt::WindowFlags f) connect(parent, SIGNAL(SelectedImageHasChanged(vvSlicerManager *)), this, SLOT(SelectedImageHasChanged(vvSlicerManager *))); connect(mOpenBinaryButton, SIGNAL(clicked()), this, SLOT(OpenBinaryImage())); + connect(mOpenDicomButton, SIGNAL(clicked()), this, SLOT(OpenDicomImage())); connect(mTree, SIGNAL(itemSelectionChanged()), this, SLOT(SelectedItemChangedInTree())); connect(mCheckBoxShow, SIGNAL(toggled(bool)), this, SLOT(VisibleROIToggled(bool))); connect(mOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(OpacityChanged(int))); @@ -115,7 +122,6 @@ vvToolROIManager::vvToolROIManager(vvMainWindowBase * parent, Qt::WindowFlags f) //------------------------------------------------------------------------------ vvToolROIManager::~vvToolROIManager() { - std::cout << "vvToolROIManager::~vvToolROIManager()" << std::endl; } //------------------------------------------------------------------------------ @@ -160,7 +166,6 @@ void vvToolROIManager::InputIsSelected(vvSlicerManager *m) //------------------------------------------------------------------------------ void vvToolROIManager::AnImageIsBeingClosed(vvSlicerManager * m) { - DD("AnImageIsBeingClosed"); if (m == mSlicerManager) { close(); return; @@ -172,7 +177,8 @@ void vvToolROIManager::AnImageIsBeingClosed(vvSlicerManager * m) //------------------------------------------------------------------------------ void vvToolROIManager::close() { - DD("close"); + // Update to delete actors + UpdateAllContours(); QWidget::close(); } //------------------------------------------------------------------------------ @@ -180,7 +186,6 @@ void vvToolROIManager::close() //------------------------------------------------------------------------------ void vvToolROIManager::SelectedImageHasChanged(vvSlicerManager * m) { - DD("SelectedImageHasChanged"); if (m != mSlicerManager) hide(); else { show(); @@ -230,6 +235,45 @@ void vvToolROIManager::OpenBinaryImage() //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvToolROIManager::OpenDicomImage() +{ + DD("OpenDicomImage"); + QString Extensions = "Dicom Files ( *.dcm RS*)"; + Extensions += ";;All Files (*)"; + QString file = QFileDialog::getOpenFileName(this,tr("Merge Images"), + mMainWindow->GetInputPathName(), + Extensions); + if (file.isNull()) return; + + // AddDCStructContour(index, file); + vvMeshReader reader; + reader.SetFilename(file.toStdString()); + vvStructSelector selector; + selector.SetStructures(reader.GetROINames()); + // selector.EnablePropagationCheckBox(); FIXME Disable + + // FIXME : change text -> allow to save binary image + + if (selector.exec()) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + reader.SetSelectedItems(selector.getSelectedItems()); + reader.SetImage(mSlicerManager->GetImage()); + reader.Update(); + + // std::vector contours=reader.GetOutput(); + // for (std::vector::iterator i=contours.begin(); + // i!=contours.end(); i++) + // AddContour(index,*i,selector.PropagationEnabled()); + QApplication::restoreOverrideCursor(); + } + + + +} +//------------------------------------------------------------------------------ + + //------------------------------------------------------------------------------ void vvToolROIManager::AddImage(vvImage * binaryImage, std::string filename, double BG, bool modeBG) @@ -352,7 +396,6 @@ void vvToolROIManager::UpdateAllROIStatus() { //------------------------------------------------------------------------------ void vvToolROIManager::SelectedItemChangedInTree() { - // Search which roi is selected QList l = mTree->selectedItems(); if (l.size() == 0) { @@ -368,9 +411,12 @@ void vvToolROIManager::SelectedItemChangedInTree() { mGroupBoxROI->setEnabled(false); return; } + if (w == NULL) return; clitk::DicomRT_ROI * roi = mMapTreeWidgetToROI[w]; + if (roi == NULL) return; // sometimes it is called while there is no roi anymore // Get selected roi actor - QSharedPointer actor = mROIActorsList[roi->GetROINumber()]; + int n = roi->GetROINumber(); + QSharedPointer actor = mROIActorsList[n]; mCurrentROI = roi; mCurrentROIActor = actor; @@ -414,6 +460,8 @@ void vvToolROIManager::SelectedItemChangedInTree() { QString values = QString("%1, %2, %3").arg(color.red()).arg(color.green()).arg(color.blue()); mROInameLabel->setStyleSheet("QLabel { background-color: rgb("+values+"); }"); + + mGroupBoxROI->setEnabled(true); // is this needed ? // actor->Update(); // Final rendering @@ -491,6 +539,7 @@ void vvToolROIManager::AllVisibleContourROIToggled(bool b) { //------------------------------------------------------------------------------ void vvToolROIManager::ChangeColor() { + if (mCurrentROIActor == NULL) return; QColor color; color.setRgbF(mCurrentROIActor->GetROI()->GetDisplayColor()[0], mCurrentROIActor->GetROI()->GetDisplayColor()[1], @@ -513,6 +562,7 @@ void vvToolROIManager::ChangeColor() { //------------------------------------------------------------------------------ void vvToolROIManager::ChangeContourColor() { + if (mCurrentROIActor == NULL) return; QColor color; color.setRgbF(mCurrentROIActor->GetContourColor()[0], mCurrentROIActor->GetContourColor()[1], @@ -527,6 +577,7 @@ void vvToolROIManager::ChangeContourColor() { //------------------------------------------------------------------------------ void vvToolROIManager::ChangeContourWidth(int n) { + if (mCurrentROIActor == NULL) return; mCurrentROIActor->SetContourWidth(n); mCurrentROIActor->UpdateColor(); mSlicerManager->Render(); @@ -536,6 +587,7 @@ void vvToolROIManager::ChangeContourWidth(int n) { //------------------------------------------------------------------------------ void vvToolROIManager::ChangeDepth(int n) { + if (mCurrentROIActor == NULL) return; mCurrentROIActor->SetDepth(n); mCurrentROIActor->UpdateImage(); mSlicerManager->Render(); @@ -548,6 +600,14 @@ void vvToolROIManager::ChangeDepth(int n) { //------------------------------------------------------------------------------ void vvToolROIManager::ReloadCurrentROI() { + + // Remove all contours/overlay first + bool visible = mCurrentROIActor->IsVisible(); + bool cvisible = mCurrentROIActor->IsContourVisible(); + mCurrentROIActor->SetVisible(false); + mCurrentROIActor->SetContourVisible(false); + mSlicerManager->Render(); + // Reload image vvImageReader::Pointer reader = vvImageReader::New(); reader->SetInputFilename(mCurrentROI->GetFilename()); @@ -557,11 +617,14 @@ void vvToolROIManager::ReloadCurrentROI() { reader->GetLastError().c_str()); return; } - mCurrentROI->GetImage()->GetFirstVTKImageData()->ReleaseData(); + + mCurrentROI->GetImage()->Reset();//GetFirstVTKImageData()->ReleaseData(); mCurrentROI->SetImage(reader->GetOutput()); - // Update visu" + // Update visu mCurrentROIActor->UpdateImage(); + mCurrentROIActor->SetVisible(visible); + mCurrentROIActor->SetContourVisible(cvisible); mSlicerManager->Render(); } //------------------------------------------------------------------------------