]> Creatis software - clitk.git/blob - vv/vvROIActor.cxx
- add opacity (seg fault)
[clitk.git] / vv / vvROIActor.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ======================================================================-====*/
18
19 #include "vvROIActor.h"
20 #include "vvImageContour.h"
21 #include "vvSlicerManager.h"
22 #include "vvBinaryImageOverlayActor.h"
23 #include <vtkImageActor.h>
24 #include <vtkCamera.h>
25 #include <vtkRenderer.h>
26 //#include <vtkRenderWindow.h>
27 #include <vtkMarchingSquares.h>
28 #include <vtkImageClip.h>
29 #include <vtkImageData.h>
30 #include <vtkPolyDataMapper.h>
31 #include <vtkProperty.h>
32
33 //------------------------------------------------------------------------------
34 vvROIActor::vvROIActor() {
35   mImageContour.clear();
36   mOverlayActors.clear();
37   mIsVisible = true;
38   mOpacity = 0.7;
39 }
40 //------------------------------------------------------------------------------
41
42
43 //------------------------------------------------------------------------------
44 vvROIActor::~vvROIActor() {
45 }
46 //------------------------------------------------------------------------------
47
48
49 //------------------------------------------------------------------------------
50 void vvROIActor::SetROI(const clitk::DicomRT_ROI * s) {
51   mROI = s;
52 }
53 //------------------------------------------------------------------------------
54
55
56 //------------------------------------------------------------------------------
57 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
58   mSlicerManager = s;
59 }
60 //------------------------------------------------------------------------------
61
62
63 //------------------------------------------------------------------------------
64 void vvROIActor::SetVisible(bool b) {
65   mIsVisible = b;
66   if (!b) { // remove actor
67     for(unsigned int i= 0; i<mOverlayActors.size(); i++) 
68       mOverlayActors[i]->hideActors();
69   }
70   else {
71     for(unsigned int i= 0; i<mOverlayActors.size(); i++) 
72       mOverlayActors[i]->showActors();
73   }
74   Update();
75 }
76 //------------------------------------------------------------------------------
77
78
79 //------------------------------------------------------------------------------
80 bool vvROIActor::IsVisible() {
81   return mIsVisible;
82 }
83 //------------------------------------------------------------------------------
84
85
86 //------------------------------------------------------------------------------
87 void vvROIActor::Initialize() {
88   if (mROI->GetImage()) {
89     mImageContour.clear();
90     mOverlayActors.clear();
91     for(int i=0;i<mSlicerManager->NumberOfSlicers(); i++) {
92       mImageContour.push_back(new vvImageContour);
93       mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
94       mImageContour[i]->setImage(mROI->GetImage());
95       //      mImageContour[i]->setColor(1.0, 0.0, 0.0);
96       mImageContour[i]->setColor(mROI->GetDisplayColor()[0], 
97                                  mROI->GetDisplayColor()[1], 
98                                  mROI->GetDisplayColor()[2]);
99       mImageContour[i]->setPreserveMemoryModeEnabled(false);        
100       
101       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
102       mOverlayActors[i]->setImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
103       mOverlayActors[i]->setColor(mROI->GetDisplayColor()[0], 
104                                   mROI->GetDisplayColor()[1], 
105                                   mROI->GetDisplayColor()[2]);
106       mOverlayActors[i]->SetOpacity(mOpacity);
107       mOverlayActors[i]->setSlicer(mSlicerManager->GetSlicer(i));
108       mOverlayActors[i]->initialize();
109     }
110     
111     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
112     //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
113     connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
114   }
115 }
116 //------------------------------------------------------------------------------
117
118
119 //------------------------------------------------------------------------------
120 void vvROIActor::Update() {
121   for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
122     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
123   }
124 }
125 //------------------------------------------------------------------------------
126
127
128 //------------------------------------------------------------------------------
129 void vvROIActor::UpdateSlice(int slicer, int slices) {
130   if (!mROI->GetImage())  return;
131   
132   if (!mIsVisible) return;
133
134   if (!mSlicerManager) {
135     std::cerr << "Error. No mSlicerManager ?" << std::endl;
136     exit(0);
137   }
138
139   // CONTOUR HERE 
140   // mImageContour[slicer]->update(1.0); 
141
142   // Refresh overlays
143   mOverlayActors[slicer]->update(slicer, slices);
144
145   // Do not used the following line : TOO SLOW.
146   // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render(); 
147 }
148 //------------------------------------------------------------------------------
149
150
151 //------------------------------------------------------------------------------
152 void vvROIActor::SetOpacity(double d) {
153   if (d == mOpacity) return;
154   mOpacity = d; 
155   DD(mOpacity);
156   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
157     DD(i);
158     mOverlayActors[i]->SetOpacity(d);
159   }
160   DD("end vvROIActor::SetOpacity");
161 }
162 //------------------------------------------------------------------------------
163
164
165 //------------------------------------------------------------------------------
166 double vvROIActor::GetOpacity() {
167   return mOpacity;
168 }
169 //------------------------------------------------------------------------------
170