]> Creatis software - clitk.git/blobdiff - vv/vvROIActor.cxx
Put this tool in the tools menu (remove from experimental)
[clitk.git] / vv / vvROIActor.cxx
index 382edf9f788452d88d7ac2f39cc5b5fcaa4ce422..582b0782520be38a468adcf393ed2f7514dd34d4 100644 (file)
@@ -43,6 +43,7 @@ vvROIActor::vvROIActor()
   mIsSelected = false;
   mContourWidth = 1;
   mContourColor.resize(3);
+  m_modeBG = true;
 }
 //------------------------------------------------------------------------------
 
@@ -50,6 +51,8 @@ vvROIActor::vvROIActor()
 //------------------------------------------------------------------------------
 vvROIActor::~vvROIActor()
 {
+  for(uint i= 0; i<mImageContour.size(); i++) delete mImageContour[i];
+  for(uint i= 0; i<mOverlayActors.size(); i++) delete mOverlayActors[i];
 }
 //------------------------------------------------------------------------------
 
@@ -87,7 +90,7 @@ void vvROIActor::UpdateImage()
     mImageContour[i]->HideActors();
     delete mImageContour[i];
   }
-  Initialize();
+  Initialize(mIsVisible);
   Update(); // No Render
 }
 //------------------------------------------------------------------------------
@@ -142,11 +145,12 @@ bool vvROIActor::IsContourVisible() {
 
 
 //------------------------------------------------------------------------------
-void vvROIActor::Initialize() {
+void vvROIActor::Initialize(bool IsVisible) {
   if (mROI->GetImage()) {
     mImageContour.clear();
     mOverlayActors.clear();
-    for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
+    for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
+
       mImageContour.push_back(new vvImageContour);
       mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
       mImageContour[i]->SetImage(mROI->GetImage());
@@ -156,17 +160,27 @@ void vvROIActor::Initialize() {
       mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
       mImageContour[i]->SetLineWidth(mContourWidth);
       mImageContour[i]->SetPreserveMemoryModeEnabled(true);
+      //mImageContour[i]->SetPreserveMemoryModeEnabled(false); // SEG FAULT !!!
       mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
       mImageContour[i]->HideActors();
       
       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
-      mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
+
+      // BG or FG
+      if (m_modeBG) {
+       mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
+      }
+      else {
+       mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetForegroundValueLabelImage(), false);
+      }
+
+
       mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
                                   mROI->GetDisplayColor()[1],
                                   mROI->GetDisplayColor()[2]);
       mOverlayActors[i]->SetOpacity(mOpacity);
       mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
-      mOverlayActors[i]->Initialize();
+      mOverlayActors[i]->Initialize(IsVisible);
     }
 
     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
@@ -180,7 +194,7 @@ void vvROIActor::Initialize() {
 //------------------------------------------------------------------------------
 void vvROIActor::Update()
 {
-  for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
+  for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
   }
 }
@@ -261,15 +275,14 @@ double vvROIActor::GetOpacity()
 //------------------------------------------------------------------------------
 void vvROIActor::SetSelected(bool b)
 {
-  DD(" Not used yet");
   mIsSelected = b;
   if (b) {
-    for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
+    for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
       mImageContour[i]->SetLineWidth(3.0);
       mImageContour[i]->ShowActors();
     }
   } else {
-    for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
+    for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
       mImageContour[i]->HideActors();
     }
   }