]> Creatis software - clitk.git/blobdiff - vv/vvROIActor.cxx
Merge branch 'VTK6_Qt5' into VTK6_Qt5_Overlay4D
[clitk.git] / vv / vvROIActor.cxx
index f4abf28fb9b4c785c08101264c0dd8bf311deee8..74d588328865cdfa27ca192a0d44daf5cdcb7a3d 100644 (file)
@@ -35,11 +35,17 @@ vvROIActor::vvROIActor()
 {
   mIsVisible = true;
   mIsContourVisible = false;
-  mOpacity = 0.7;
+  mOpacity = 0.5;
   mIsSelected = false;
   mContourWidth = 1;
   mContourColor.resize(3);
   m_modeBG = true;
+  mDepth = 1.0;
+  mROI = 0;
+  mSlicerManager = 0;
+  mContourColor[0] = 1;
+  mContourColor[1] = 1;
+  mContourColor[2] = 1;
 }
 //------------------------------------------------------------------------------
 
@@ -51,6 +57,24 @@ vvROIActor::~vvROIActor()
 //------------------------------------------------------------------------------
 
 
+//------------------------------------------------------------------------------
+void vvROIActor::RemoveActors()
+{
+  for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
+    mOverlayActors[i]->RemoveActors();
+  }
+
+  for(unsigned int i= 0; i<mImageContour.size(); i++) {
+    mImageContour[i]->RemoveActors();
+  }  
+  
+  Update(true);
+  mImageContour.clear();
+  mOverlayActors.clear();
+}
+//------------------------------------------------------------------------------
+
+
 //------------------------------------------------------------------------------
 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
 {
@@ -78,7 +102,7 @@ void vvROIActor::UpdateImage()
 {
   mOverlayActors.clear();
   mImageContour.clear();
-  Initialize(mIsVisible);
+  Initialize(mDepth, mIsVisible);
   Update(); // No Render
 }
 //------------------------------------------------------------------------------
@@ -133,23 +157,23 @@ bool vvROIActor::IsContourVisible() {
 
 
 //------------------------------------------------------------------------------
-void vvROIActor::Initialize(bool IsVisible) {
+void vvROIActor::Initialize(double depth, bool IsVisible) {
   if (mROI->GetImage()) {
     mImageContour.clear();
     mOverlayActors.clear();
+    mDepth = depth;
     for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
-
       mImageContour.push_back(vvImageContour::New());
       mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
       mImageContour[i]->SetImage(mROI->GetImage());
+      // Color of the contour is same of roi color
       mContourColor[0] = mROI->GetDisplayColor()[0];
       mContourColor[1] = mROI->GetDisplayColor()[1];
       mContourColor[2] = mROI->GetDisplayColor()[2];
       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]->SetDepth(mDepth+0.5);
       mImageContour[i]->HideActors();
       
       mOverlayActors.push_back(vvBinaryImageOverlayActor::New());
@@ -168,7 +192,8 @@ void vvROIActor::Initialize(bool IsVisible) {
                                   mROI->GetDisplayColor()[2]);
       mOverlayActors[i]->SetOpacity(mOpacity);
       mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
-      mOverlayActors[i]->Initialize(IsVisible);
+      mOverlayActors[i]->Initialize(IsVisible);      
+      mOverlayActors[i]->SetDepth(mDepth);
     }
 
     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
@@ -180,17 +205,32 @@ void vvROIActor::Initialize(bool IsVisible) {
 
 
 //------------------------------------------------------------------------------
-void vvROIActor::Update()
+void vvROIActor::SetDepth(double d)
+{
+  mDepth = d;
+  if (!mSlicerManager) return;
+  for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {  
+    mOverlayActors[i]->SetDepth(d);
+    mImageContour[i]->SetDepth(d+0.5);
+  }
+  Update(true);
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+void vvROIActor::Update(bool force)
 {
+  if (!mSlicerManager) return;
   for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
-    UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
+    UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice(), force);
   }
 }
 //------------------------------------------------------------------------------
 
 
 //------------------------------------------------------------------------------
-void vvROIActor::UpdateSlice(int slicer, int slices)
+void vvROIActor::UpdateSlice(int slicer, int slices, bool force)
 {
   if (!mROI->GetImage())  return;
   if ((!mIsVisible) && (!mIsContourVisible)) return; 
@@ -204,7 +244,7 @@ void vvROIActor::UpdateSlice(int slicer, int slices)
   }
 
   // Refresh overlays
-  mOverlayActors[slicer]->UpdateSlice(slicer, slices);
+  mOverlayActors[slicer]->UpdateSlice(slicer, slices, force);
 }
 //------------------------------------------------------------------------------
 
@@ -226,6 +266,14 @@ void vvROIActor::SetContourColor(double r, double v, double b) {
 //------------------------------------------------------------------------------
 
 
+//------------------------------------------------------------------------------
+void vvROIActor::SetOverlayColor(double r, double v, double b) {
+  if (mROI)
+    mROI->SetDisplayColor(r,v,b);
+}
+//------------------------------------------------------------------------------
+
+
 //------------------------------------------------------------------------------
 std::vector<double> & vvROIActor::GetContourColor() { 
   return mContourColor; 
@@ -233,6 +281,13 @@ std::vector<double> & vvROIActor::GetContourColor() {
 //------------------------------------------------------------------------------
 
 
+//------------------------------------------------------------------------------
+std::vector<double> & vvROIActor::GetOverlayColor() { 
+  return mROI->GetDisplayColor();
+}
+//------------------------------------------------------------------------------
+
+
 //------------------------------------------------------------------------------
 void vvROIActor::UpdateColor() {
   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
@@ -277,3 +332,21 @@ void vvROIActor::SetSelected(bool b)
 }
 //------------------------------------------------------------------------------
 
+
+//------------------------------------------------------------------------------
+void vvROIActor::CopyParameters(QSharedPointer<vvROIActor> roi)
+{
+  // Overlay
+  SetVisible(roi->IsVisible());
+  SetOpacity(roi->GetOpacity());
+  SetOverlayColor(roi->GetOverlayColor()[0], roi->GetOverlayColor()[1], roi->GetOverlayColor()[2]);
+
+  // Contour
+  SetContourVisible(roi->IsContourVisible());
+  SetContourWidth(roi->GetContourWidth());
+  SetContourColor(roi->GetContourColor()[0], roi->GetContourColor()[1], roi->GetContourColor()[2]);
+  
+  // Global
+  SetDepth(roi->GetDepth());
+}
+//------------------------------------------------------------------------------