]> Creatis software - clitk.git/blobdiff - vv/vvToolStructureSetManager.cxx
Error in loop for removing actors in destructor
[clitk.git] / vv / vvToolStructureSetManager.cxx
index 8c008adc18803f3faacefad4a9b8dff9ad8a6c89..2d50d8a6d0b8836020bf196012d8fed2220baf72 100644 (file)
@@ -69,7 +69,7 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
   mIsAllVisibleEnabled = false;
   mNumberOfVisibleROI = 0;
   mNumberOfVisibleContourROI = 0;
-  mDefaultLUTColor = vtkLookupTable::New();
+  mDefaultLUTColor = vtkSmartPointer<vtkLookupTable>::New();
   for(int i=0; i<mDefaultLUTColor->GetNumberOfTableValues(); i++) {
     double r = (rand()/(RAND_MAX+1.0));
     double v = (rand()/(RAND_MAX+1.0));
@@ -99,20 +99,8 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
 //------------------------------------------------------------------------------
 vvToolStructureSetManager::~vvToolStructureSetManager()
 {
+  disconnect(mTree, SIGNAL(itemSelectionChanged()), this, SLOT(SelectedItemChangedInTree()));
   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();
 }
 //------------------------------------------------------------------------------
 
@@ -185,7 +173,8 @@ void vvToolStructureSetManager::Open(int type) {
 
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::AddRoiInTreeWidget(clitk::DicomRT_ROI * roi, QTreeWidget * ww) {
-  QTreeWidgetItem * w = new QTreeWidgetItem(ww);
+  mTreeWidgetList.push_back(QSharedPointer<QTreeWidgetItem>(new QTreeWidgetItem(ww)));
+  QTreeWidgetItem * w = mTreeWidgetList.back().data();
   w->setText(0, QString("%1").arg(roi->GetROINumber()));
   w->setText(1, QString("%1").arg(roi->GetName().c_str()));
   QBrush brush(QColor(roi->GetDisplayColor()[0]*255, roi->GetDisplayColor()[1]*255, roi->GetDisplayColor()[2]*255));
@@ -202,7 +191,7 @@ void vvToolStructureSetManager::AddRoiInTreeWidget(clitk::DicomRT_ROI * roi, QTr
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::UpdateStructureSetInTreeWidget(int index, clitk::DicomRT_StructureSet * s) {
   // Insert ROI
-  const std::vector<clitk::DicomRT_ROI*> & rois = s->GetListOfROI();
+  const std::vector<clitk::DicomRT_ROI::Pointer> & rois = s->GetListOfROI();
   for(unsigned int i=0; i<rois.size(); i++) {
     if (mMapROIToTreeWidget.find(rois[i]) == mMapROIToTreeWidget.end())
       AddRoiInTreeWidget(rois[i], mTree); // replace mTree with ss if several SS
@@ -215,7 +204,7 @@ void vvToolStructureSetManager::UpdateStructureSetInTreeWidget(int index, clitk:
 int vvToolStructureSetManager::AddStructureSet(clitk::DicomRT_StructureSet * mStructureSet) {
   // Create actor for this SS
 
-  vvStructureSetActor * mStructureSetActor =  new vvStructureSetActor;
+  QSharedPointer<vvStructureSetActor> mStructureSetActor(new vvStructureSetActor);
   
   mStructureSetActor->SetStructureSet(mStructureSet);
   mStructureSetActor->SetSlicerManager(mCurrentSlicerManager);
@@ -235,7 +224,7 @@ void vvToolStructureSetManager::OpenBinaryImage()
   int index;
   if (mCurrentStructureSet == NULL) {
     if (mStructureSetsList.size() == 0) { // Create a default SS
-      clitk::DicomRT_StructureSet * mStructureSet = new clitk::DicomRT_StructureSet;
+      clitk::DicomRT_StructureSet::Pointer mStructureSet = clitk::DicomRT_StructureSet::New();
       index = AddStructureSet(mStructureSet);
     }
     else { // Get first SS
@@ -245,7 +234,7 @@ void vvToolStructureSetManager::OpenBinaryImage()
     index = mCurrentStructureSetIndex;
   }
   mCurrentStructureSet = mStructureSetsList[index];
-  mCurrentStructureSetActor = mStructureSetActorsList[index];
+  mCurrentStructureSetActor = mStructureSetActorsList[index].data();
   mCurrentStructureSetIndex = index;
   // Open images
   QString Extensions = "Images files ( *.mhd *.hdr *.his)";
@@ -258,25 +247,23 @@ void vvToolStructureSetManager::OpenBinaryImage()
   for(int i=0; i<filename.size(); i++) {
     // Open Image
     QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-    vvImageReader * mReader = new vvImageReader;
+    vvImageReader::Pointer reader = vvImageReader::New();
     std::vector<std::string> filenames;
     filenames.push_back(filename[i].toStdString());
-    mReader->SetInputFilenames(filenames);
-    mReader->Update(IMAGE);
+    reader->SetInputFilenames(filenames);
+    reader->Update(IMAGE);
     QApplication::restoreOverrideCursor();
 
-    if (mReader->GetLastError().size() != 0) {
+    if (reader->GetLastError().size() != 0) {
       std::cerr << "Error while reading " << filename[i].toStdString() << std::endl;
       QString error = "Cannot open file \n";
-      error += mReader->GetLastError().c_str();
+      error += reader->GetLastError().c_str();
       QMessageBox::information(this,tr("Reading problem"),error);
-      delete mReader;
       return;
     }
-    vvImage::Pointer binaryImage = mReader->GetOutput();
+    vvImage::Pointer binaryImage = reader->GetOutput();
     AddImage(binaryImage, filename[i].toStdString(), mBackgroundValueSpinBox->value());
     mOpenedBinaryImage.push_back(binaryImage);
-    delete mReader;
   }
   UpdateImage();
 }
@@ -307,7 +294,7 @@ void vvToolStructureSetManager::AddImage(vvImage * binaryImage, std::string file
   int index;
   if (mCurrentStructureSet == NULL) {
     if (mStructureSetsList.size() == 0) { // Create a default SS
-      clitk::DicomRT_StructureSet * mStructureSet = new clitk::DicomRT_StructureSet;
+      clitk::DicomRT_StructureSet::Pointer mStructureSet = clitk::DicomRT_StructureSet::New();
       index = AddStructureSet(mStructureSet);
     }
     else { // Get first SS
@@ -317,7 +304,7 @@ void vvToolStructureSetManager::AddImage(vvImage * binaryImage, std::string file
     index = mCurrentStructureSetIndex;
   }
   mCurrentStructureSet = mStructureSetsList[index];
-  mCurrentStructureSetActor = mStructureSetActorsList[index];
+  mCurrentStructureSetActor = mStructureSetActorsList[index].data();
   mCurrentStructureSetIndex = index;
 
   // Check Dimension
@@ -592,15 +579,15 @@ void vvToolStructureSetManager::ChangeContourWidth(int n) {
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::ReloadCurrentROI() {
   // Reload image
-  vvImageReader * mReader = new vvImageReader;
-  mReader->SetInputFilename(mCurrentROI->GetFilename());
-  mReader->Update(IMAGE);
-  if (mReader->GetLastError() != "") {
-    QMessageBox::information(mMainWindowBase, tr("Sorry, error. Could not reload"), mReader->GetLastError().c_str());
+  vvImageReader::Pointer reader = vvImageReader::New();
+  reader->SetInputFilename(mCurrentROI->GetFilename());
+  reader->Update(IMAGE);
+  if (reader->GetLastError() != "") {
+    QMessageBox::information(mMainWindowBase, tr("Sorry, error. Could not reload"), reader->GetLastError().c_str());
     return;
   }
   mCurrentROI->GetImage()->GetFirstVTKImageData()->ReleaseData();
-  mCurrentROI->SetImage(mReader->GetOutput());
+  mCurrentROI->SetImage(reader->GetOutput());
   
   // Update visu"
   mCurrentROIActor->UpdateImage();