]> Creatis software - clitk.git/blobdiff - vv/vvToolROIManager.cxx
Add RemoveActors
[clitk.git] / vv / vvToolROIManager.cxx
index bfddaf923d3e486e8a940488ff8c31f2dea4322a..7f544a5e31f8d1493b21fa080daa66ca1f4bc845 100644 (file)
@@ -73,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<vtkLookupTable>::New();
@@ -118,7 +122,6 @@ vvToolROIManager::vvToolROIManager(vvMainWindowBase * parent, Qt::WindowFlags f)
 //------------------------------------------------------------------------------
 vvToolROIManager::~vvToolROIManager()
 {
-  std::cout << "vvToolROIManager::~vvToolROIManager()" << std::endl;
 }
 //------------------------------------------------------------------------------
 
@@ -163,7 +166,6 @@ void vvToolROIManager::InputIsSelected(vvSlicerManager *m)
 //------------------------------------------------------------------------------
 void vvToolROIManager::AnImageIsBeingClosed(vvSlicerManager * m)
 {
-  DD("AnImageIsBeingClosed");
   if (m == mSlicerManager) { 
     close();
     return;
@@ -175,7 +177,8 @@ void vvToolROIManager::AnImageIsBeingClosed(vvSlicerManager * m)
 //------------------------------------------------------------------------------
 void vvToolROIManager::close()
 {
-  DD("close");
+  // Update to delete actors
+  UpdateAllContours();
   QWidget::close();
 }
 //------------------------------------------------------------------------------
@@ -183,7 +186,6 @@ void vvToolROIManager::close()
 
 //------------------------------------------------------------------------------
 void vvToolROIManager::SelectedImageHasChanged(vvSlicerManager * m) {
-  DD("SelectedImageHasChanged");
   if (m != mSlicerManager) hide(); 
   else {
     show();
@@ -394,7 +396,6 @@ void vvToolROIManager::UpdateAllROIStatus() {
 
 //------------------------------------------------------------------------------
 void vvToolROIManager::SelectedItemChangedInTree() {
-  
   // Search which roi is selected
   QList<QTreeWidgetItem *> l = mTree->selectedItems();
   if (l.size() == 0) {
@@ -410,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<vvROIActor> actor = mROIActorsList[roi->GetROINumber()];
+  int n = roi->GetROINumber();
+  QSharedPointer<vvROIActor> actor = mROIActorsList[n];
   mCurrentROI = roi;
   mCurrentROIActor = actor;
 
@@ -456,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
@@ -533,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],
@@ -555,6 +562,7 @@ void vvToolROIManager::ChangeColor() {
 
 //------------------------------------------------------------------------------
 void vvToolROIManager::ChangeContourColor() {
+  if (mCurrentROIActor == NULL) return;
   QColor color;
   color.setRgbF(mCurrentROIActor->GetContourColor()[0], 
                mCurrentROIActor->GetContourColor()[1], 
@@ -569,6 +577,7 @@ void vvToolROIManager::ChangeContourColor() {
 
 //------------------------------------------------------------------------------
 void vvToolROIManager::ChangeContourWidth(int n) {
+  if (mCurrentROIActor == NULL) return;
   mCurrentROIActor->SetContourWidth(n);
   mCurrentROIActor->UpdateColor();
   mSlicerManager->Render();
@@ -578,6 +587,7 @@ void vvToolROIManager::ChangeContourWidth(int n) {
 
 //------------------------------------------------------------------------------
 void vvToolROIManager::ChangeDepth(int n) {
+  if (mCurrentROIActor == NULL) return;
   mCurrentROIActor->SetDepth(n);
   mCurrentROIActor->UpdateImage();
   mSlicerManager->Render();
@@ -590,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());
@@ -599,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();    
 }
 //------------------------------------------------------------------------------