]> Creatis software - clitk.git/blobdiff - vv/vvToolStructureSetManager.cxx
Romulo: changed rounding of image resampling to floor() because, from a clinical...
[clitk.git] / vv / vvToolStructureSetManager.cxx
index 257f57e42578bae7471f79831c9dc791023cf2e7..8c008adc18803f3faacefad4a9b8dff9ad8a6c89 100644 (file)
@@ -70,7 +70,7 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
   mNumberOfVisibleROI = 0;
   mNumberOfVisibleContourROI = 0;
   mDefaultLUTColor = vtkLookupTable::New();
-  for(unsigned int i=0; i<mDefaultLUTColor->GetNumberOfTableValues(); i++) {
+  for(int i=0; i<mDefaultLUTColor->GetNumberOfTableValues(); i++) {
     double r = (rand()/(RAND_MAX+1.0));
     double v = (rand()/(RAND_MAX+1.0));
     double b = (rand()/(RAND_MAX+1.0));
@@ -86,7 +86,7 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
   }
   else {
     MustOpenDialogWhenCreated = false;
-    buttonBox->setEnabled(true);
+    mMainButtonBox->setEnabled(true);
     mCurrentSlicerManager = current;
     mCurrentImage = mCurrentSlicerManager->GetImage();
     mToolWidget->setEnabled(true);
@@ -100,6 +100,19 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
 vvToolStructureSetManager::~vvToolStructureSetManager()
 {
   m_NumberOfTool--;
+  mStructureSetActorsList.clear();
+  mMapROIToTreeWidget.clear();
+
+  /*
+  for(uint i=0; i<mStructureSetsList[0]->GetListOfROI().size();i++) {
+    DD(i);
+    DD(mStructureSetsList[0]->GetROI(i)->GetImage()->GetReferenceCount());
+    //    mStructureSetsList[0]->GetROI(i)->GetImage()->Delete();
+  }
+  */
+
+  mStructureSetsList.clear();
+  mOpenedBinaryImage.clear();
 }
 //------------------------------------------------------------------------------
 
@@ -108,10 +121,10 @@ vvToolStructureSetManager::~vvToolStructureSetManager()
 // STATIC
 void vvToolStructureSetManager::Initialize() {
   SetToolName("ROIManager");
-  SetToolMenuName("Display ROI");
-  SetToolIconFilename(":/common/icons/lung-overlay.png");
-  SetToolTip("Display ROI from label image.");
-  SetToolExperimental(true);
+  SetToolMenuName("Display ROI (binary image)");
+  SetToolIconFilename(":/common/icons/tool-roi.png");
+  SetToolTip("Display ROI from a binary image.");
+  SetToolExperimental(false);
 }
 //------------------------------------------------------------------------------
 
@@ -201,7 +214,9 @@ void vvToolStructureSetManager::UpdateStructureSetInTreeWidget(int index, clitk:
 //------------------------------------------------------------------------------
 int vvToolStructureSetManager::AddStructureSet(clitk::DicomRT_StructureSet * mStructureSet) {
   // Create actor for this SS
-  vvStructureSetActor * mStructureSetActor = new vvStructureSetActor;
+
+  vvStructureSetActor * mStructureSetActor =  new vvStructureSetActor;
+  
   mStructureSetActor->SetStructureSet(mStructureSet);
   mStructureSetActor->SetSlicerManager(mCurrentSlicerManager);
   // Insert in lists and get index
@@ -260,6 +275,8 @@ void vvToolStructureSetManager::OpenBinaryImage()
     }
     vvImage::Pointer binaryImage = mReader->GetOutput();
     AddImage(binaryImage, filename[i].toStdString(), mBackgroundValueSpinBox->value());
+    mOpenedBinaryImage.push_back(binaryImage);
+    delete mReader;
   }
   UpdateImage();
 }
@@ -275,7 +292,7 @@ void vvToolStructureSetManager::UpdateImage()
   for(unsigned int i=0; i<mLoadedROIIndex.size(); i++) {
     mCurrentStructureSetActor->GetROIActor(mLoadedROIIndex[i])->Update();
   }
-  for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
+  for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
     mCurrentSlicerManager->GetSlicer(i)->Render();
   }  
 }
@@ -283,7 +300,8 @@ void vvToolStructureSetManager::UpdateImage()
 
 
 //------------------------------------------------------------------------------
-void vvToolStructureSetManager::AddImage(vvImage::Pointer binaryImage, std::string filename, double BG, bool m_modeBG) 
+void vvToolStructureSetManager::AddImage(vvImage * binaryImage, std::string filename, 
+                                         double BG, bool m_modeBG) 
 {
   // Check current structure set
   int index;
@@ -359,7 +377,6 @@ bool vvToolStructureSetManager::close()
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::closeEvent(QCloseEvent *event) 
 {
-  // DD("vvToolStructureSetManager::closeEvent()");
   std::vector<vvSlicerManager*>::iterator iter = std::find(mListOfInputs.begin(), mListOfInputs.end(), mCurrentSlicerManager);
   if (iter != mListOfInputs.end()) mListOfInputs.erase(iter);
   
@@ -371,7 +388,6 @@ void vvToolStructureSetManager::closeEvent(QCloseEvent *event)
   if (mCurrentSlicerManager != 0) mCurrentSlicerManager->Render();
   if (mCurrentStructureSetActor) {
     for(int i=0; i<mCurrentStructureSetActor->GetNumberOfROIs(); i++) {
-      // DD(i);
       mCurrentStructureSetActor->GetROIList()[i]->SetVisible(false);
       mCurrentStructureSetActor->GetROIList()[i]->SetContourVisible(false);
       delete mCurrentStructureSetActor->GetROIList()[i];
@@ -583,11 +599,7 @@ void vvToolStructureSetManager::ReloadCurrentROI() {
     QMessageBox::information(mMainWindowBase, tr("Sorry, error. Could not reload"), mReader->GetLastError().c_str());
     return;
   }
-  //  delete mCurrentROI->GetImage();
-  // DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetDataReleased());
-//   DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetReferenceCount());
   mCurrentROI->GetImage()->GetFirstVTKImageData()->ReleaseData();
-  // DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetDataReleased());
   mCurrentROI->SetImage(mReader->GetOutput());
   
   // Update visu"
@@ -600,8 +612,6 @@ void vvToolStructureSetManager::ReloadCurrentROI() {
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::CheckInputList(std::vector<vvSlicerManager*> & l, int & index) 
 {
-  DD("TODO CheckInputList");
-
   for(unsigned int i=0; i<l.size(); i++) {
     std::vector<vvSlicerManager*>::iterator iter = std::find(mListOfInputs.begin(), mListOfInputs.end(), l[i]);
     if (iter != mListOfInputs.end()) {
@@ -617,46 +627,22 @@ void vvToolStructureSetManager::CheckInputList(std::vector<vvSlicerManager*> & l
 
 //------------------------------------------------------------------------------
 // STATIC
-vvToolStructureSetManager * vvToolStructureSetManager::AddImage(vvSlicerManager * m, vvImage::Pointer image, double BG, bool m_modeBG)
+vvToolStructureSetManager * vvToolStructureSetManager::AddImage(vvSlicerManager * m, std::string name, vvImage::Pointer image, double BG, bool m_modeBG)
 {
-  //  DD("static AddImage");
-  //DD(mListOfInputs.size());
-  
+  // If the tool is open for this vvSlicerManager, use it and return
   if (mListOfOpenTool[m]) {
-    DD("found");
     vvToolStructureSetManager * tool = mListOfOpenTool[m];
-    tool->AddImage(image, "bidon.mhd", BG, m_modeBG);
+    tool->AddImage(image, name, BG, m_modeBG);
     tool->UpdateImage();
-    //    tool->show();
     return tool;
   }
-  else {
-    DD("not found");
-  }
 
-  std::vector<vvSlicerManager*>::iterator iter = 
-    std::find(mListOfInputs.begin(), mListOfInputs.end(), m);
-  if (iter != mListOfInputs.end()) {
-    DD("found");
-    DD("TODO");
-    
-  }
-  else {
-    DD("not found");
-
-    // mMainWindowBase instead of NULL, should be static ?
-    
-    vvToolStructureSetManager * tool = new vvToolStructureSetManager
-      (CREATOR(vvToolStructureSetManager)->GetMainWindow(), Qt::Dialog, m);
-    
-    // WARNING : load list of image and selec -> to change to force mCurrentSlicerManager
-
-    //    tool->InputIsSelected();
-    tool->AddImage(image, "bidon.mhd", BG, m_modeBG);
-    tool->UpdateImage();
-    tool->show();
-    return tool;
-  }
-  return NULL;
+  // If the tool is not open, create it
+  vvToolStructureSetManager * tool = new vvToolStructureSetManager
+    (CREATOR(vvToolStructureSetManager)->GetMainWindow(), Qt::Dialog, m);
+  tool->AddImage(image, name, BG, m_modeBG);
+  tool->UpdateImage();
+  tool->show();
+  return tool;
 }
 //------------------------------------------------------------------------------