]> Creatis software - clitk.git/commitdiff
- add opacity (seg fault)
authordsarrut <dsarrut>
Mon, 3 May 2010 06:55:30 +0000 (06:55 +0000)
committerdsarrut <dsarrut>
Mon, 3 May 2010 06:55:30 +0000 (06:55 +0000)
vv/vvBinaryImageOverlayActor.cxx
vv/vvBinaryImageOverlayActor.h
vv/vvROIActor.cxx
vv/vvROIActor.h
vv/vvToolStructureSetManager.cxx

index d69879c479100977df89f6bc6199b8605005b8b4..3a448ab708381b4f75a60bb34f61993de17d3b38 100644 (file)
@@ -37,6 +37,7 @@ vvBinaryImageOverlayActor::vvBinaryImageOverlayActor() {
   mAlpha = 0.6;
   mImage = 0;
   mSlicer = 0;
+  mColorLUT = vtkLookupTable::New();
 }
 //------------------------------------------------------------------------------
 
@@ -84,18 +85,15 @@ void vvBinaryImageOverlayActor::initialize() {
     DD(numImage);
 
     // how many intensity ? 
-    
-
     vtkImageMapToRGBA * mOverlayMapper = vtkImageMapToRGBA::New();
     mOverlayMapper->SetInput(mImage->GetVTKImages()[0]); // DS TODO : to change if it is 4D !!!
-    vtkLookupTable * lut = vtkLookupTable::New();
-    DD(lut->IsOpaque ());
-    lut->SetRange(0,1);
-    lut->SetNumberOfTableValues(2);
-    lut->SetTableValue(mBackgroundValue, 0, 0, 0, 0.0);   // BG
-    lut->SetTableValue(1, mColor[0], mColor[1], mColor[2], mAlpha); // FG
+    DD(mColorLUT->IsOpaque ());
+    mColorLUT->SetRange(0,1);
+    mColorLUT->SetNumberOfTableValues(2);
+    mColorLUT->SetTableValue(mBackgroundValue, 0, 0, 0, 0.0);   // BG
+    mColorLUT->SetTableValue(1, mColor[0], mColor[1], mColor[2], mAlpha); // FG
     DD(mColor[0]);
-    mOverlayMapper->SetLookupTable(lut);
+    mOverlayMapper->SetLookupTable(mColorLUT);
     
     vtkImageActor * mOverlayActor = vtkImageActor::New();
     mOverlayActor->SetInput(mOverlayMapper->GetOutput());
@@ -114,7 +112,21 @@ void vvBinaryImageOverlayActor::initialize() {
 //------------------------------------------------------------------------------
 void vvBinaryImageOverlayActor::SetOpacity(double d) {
   mAlpha = d;
-  // TODO !!lut->SetTableValue(1, mColor[0], mColor[1], mColor[2], mAlpha); // FG
+  mColorLUT->SetTableValue(1, mColor[0], mColor[1], mColor[2], mAlpha); // FG
+  for (unsigned int numImage = 0; numImage < mSlicer->GetImage()->GetVTKImages().size(); numImage++) {
+    DD(numImage);
+
+    // how many intensity ? 
+    vtkImageMapToRGBA * mOverlayMapper = mMapperList[numImage];
+    mOverlayMapper->SetLookupTable(mColorLUT);
+    
+    vtkImageActor * mOverlayActor = mImageActorList[numImage];
+    mOverlayActor->SetInput(mOverlayMapper->GetOutput());
+    //mOverlayActor->SetPickable(0);
+    //    mOverlayActor->SetVisibility(true);
+    //mOverlayActor->SetOpacity(1.0);
+  }
+  DD("end SetOpacity");
 }
 //------------------------------------------------------------------------------
 
index ccf08ef9bb0fffb90d32f53cc7652650f49e25d9..1d05760981e1b8a7cbf286b0566094230b6c2b8c 100644 (file)
@@ -55,7 +55,8 @@ class vvBinaryImageOverlayActor
   std::vector<double> mColor;
   double mAlpha;
   double mBackgroundValue;
-  
+  vtkLookupTable * mColorLUT;
+
   std::vector<vtkImageMapToRGBA *> mMapperList;
   std::vector<vtkImageActor*> mImageActorList;
 
index 13e906b881531fd888eecb0eacf6e1ec46dad442..77dc56a7a1a0afc4fb5968d6bfa1575827eeafcf 100644 (file)
@@ -35,6 +35,7 @@ vvROIActor::vvROIActor() {
   mImageContour.clear();
   mOverlayActors.clear();
   mIsVisible = true;
+  mOpacity = 0.7;
 }
 //------------------------------------------------------------------------------
 
@@ -102,6 +103,7 @@ void vvROIActor::Initialize() {
       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();
     }
@@ -148,10 +150,21 @@ void vvROIActor::UpdateSlice(int slicer, int slices) {
 
 //------------------------------------------------------------------------------
 void vvROIActor::SetOpacity(double d) {
+  if (d == mOpacity) return;
   mOpacity = d; 
-  for(unsigned int i=0; mOverlayActors.size(); i++) {
+  DD(mOpacity);
+  for(unsigned int i=0; i<mOverlayActors.size(); i++) {
+    DD(i);
     mOverlayActors[i]->SetOpacity(d);
   }
+  DD("end vvROIActor::SetOpacity");
+}
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+double vvROIActor::GetOpacity() {
+  return mOpacity;
 }
 //------------------------------------------------------------------------------
 
index afe7636acb91acf0be6c8b78abf2bd8846f08505..c3a60b9fa3e25c2ac5172ab13aa923c4a7be1fdb 100644 (file)
@@ -41,6 +41,7 @@ class vvROIActor: public QObject {
   void SetVisible(bool b);
   bool IsVisible();
   void SetOpacity(double x);
+  double GetOpacity();
 
 public slots:
   void UpdateSlice(int slicer, int slices);
index 5fcd2af961197a4c737f9fa0afac9da05e53a3c4..fc20be913ad39012cf7333f7b773bccf165f2e0c 100644 (file)
@@ -95,8 +95,7 @@ void vvToolStructureSetManager::InputIsSelected(vvSlicerManager *m) {
 
   connect(mTree, SIGNAL(itemSelectionChanged()), this, SLOT(selectedItemChangedInTree()));
   connect(mCheckBoxShow, SIGNAL(toggled(bool)), this, SLOT(visibleROIToggled(bool)));
-
-  //  TODO connect(mOpacitySlider, SIGNAL(valueChanged(int), this, SLOT(opacityChanged(int))));
+  connect(mOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(opacityChanged(int)));
 }
 //------------------------------------------------------------------------------
 
@@ -334,7 +333,7 @@ void vvToolStructureSetManager::selectedItemChangedInTree() {
   DD(actor);
   DD(actor->IsVisible());
   mCheckBoxShow->setChecked(actor->IsVisible());
-
+  mOpacitySlider->setValue((int)lrint(actor->GetOpacity()*100));
   //actor->SetSelected(true); // remove old selection
 
   DD("ici");
@@ -353,9 +352,15 @@ void vvToolStructureSetManager::visibleROIToggled(bool b) {
 
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::opacityChanged(int v) {
+  //  if (!mCurrentROIActor) return;
   DD(v);
   mCurrentROIActor->SetOpacity((double)v/100.0);
+  DD("ici");
   mCurrentROIActor->Update();
+  // Render !
+  //  for(int i=0; i<mCurrentSlicerManager->NumberOfSlicers(); i++) {
+    mCurrentSlicerManager->Render(); 
+    //}
 }
 //------------------------------------------------------------------------------