]> Creatis software - clitk.git/blob - vv/vvROIActor.cxx
- update function name (with Uppercase)
[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 {
36   mImageContour.clear();
37   mOverlayActors.clear();
38   mIsVisible = true;
39   mIsContourVisible = false;
40   mOpacity = 0.7;
41   mIsSelected = false;
42   mContourWidth = 2;
43   mContourColor.resize(3);
44 }
45 //------------------------------------------------------------------------------
46
47
48 //------------------------------------------------------------------------------
49 vvROIActor::~vvROIActor()
50 {
51 }
52 //------------------------------------------------------------------------------
53
54
55 //------------------------------------------------------------------------------
56 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
57 {
58   mROI = s;
59 }
60 //------------------------------------------------------------------------------
61
62
63 //------------------------------------------------------------------------------
64 void vvROIActor::SetContourWidth(int n) {
65   mContourWidth = n;
66 }
67 //------------------------------------------------------------------------------
68
69
70 //------------------------------------------------------------------------------
71 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
72   mSlicerManager = s;
73 }
74 //------------------------------------------------------------------------------
75
76
77 //------------------------------------------------------------------------------
78 void vvROIActor::SetVisible(bool b)
79 {
80   mIsVisible = b;
81   if (!b) { // remove actor
82     for(unsigned int i= 0; i<mOverlayActors.size(); i++)
83       mOverlayActors[i]->HideActors();
84   } else {
85     for(unsigned int i= 0; i<mOverlayActors.size(); i++)
86       mOverlayActors[i]->ShowActors();
87   }
88   Update();
89 }
90 //------------------------------------------------------------------------------
91
92
93 //------------------------------------------------------------------------------
94 void vvROIActor::SetContourVisible(bool b) {
95   mIsContourVisible = b;
96   if (!b) { // remove actor
97     for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
98       //      mOverlayActors[i]->HideActors();
99       mImageContour[i]->HideActors();
100     }
101   }
102   else {
103     for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
104       // mOverlayActors[i]->ShowActors();
105       mImageContour[i]->ShowActors();
106     }
107   }
108   Update();
109 }
110 //------------------------------------------------------------------------------
111
112
113 //------------------------------------------------------------------------------
114 bool vvROIActor::IsVisible() {
115   return mIsVisible;
116 }
117 //------------------------------------------------------------------------------
118
119
120 //------------------------------------------------------------------------------
121 bool vvROIActor::IsContourVisible() {
122   return mIsContourVisible;
123 }
124 //------------------------------------------------------------------------------
125
126
127 //------------------------------------------------------------------------------
128 void vvROIActor::Initialize() {
129   if (mROI->GetImage()) {
130     mImageContour.clear();
131     mOverlayActors.clear();
132     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
133       mImageContour.push_back(new vvImageContour);
134       mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
135       mImageContour[i]->SetImage(mROI->GetImage());
136       //mImageContour[i]->setColor(1.0, 0.0, 0.0);
137       mContourColor[0] = 1.0-mROI->GetDisplayColor()[0];
138       mContourColor[1] = 1.0-mROI->GetDisplayColor()[1];
139       mContourColor[2] = 1.0-mROI->GetDisplayColor()[2];
140       mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
141       mImageContour[i]->SetLineWidth(mContourWidth);
142       mImageContour[i]->SetPreserveMemoryModeEnabled(true);
143       mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
144       mImageContour[i]->HideActors();
145       
146       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
147       mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
148       mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
149                                   mROI->GetDisplayColor()[1],
150                                   mROI->GetDisplayColor()[2]);
151       mOverlayActors[i]->SetOpacity(mOpacity);
152       mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
153       mOverlayActors[i]->Initialize();
154     }
155
156     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
157     //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
158     connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
159   }
160 }
161 //------------------------------------------------------------------------------
162
163
164 //------------------------------------------------------------------------------
165 void vvROIActor::Update()
166 {
167   for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
168     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
169   }
170 }
171 //------------------------------------------------------------------------------
172
173
174 //------------------------------------------------------------------------------
175 void vvROIActor::UpdateSlice(int slicer, int slices)
176 {
177   if (!mROI->GetImage())  return;
178
179   if (!mIsVisible) return;
180
181   if (!mSlicerManager) {
182     std::cerr << "Error. No mSlicerManager ?" << std::endl;
183     exit(0);
184   }
185
186   // CONTOUR HERE 
187   //  DD("vvROIActor::UpdateSlice");
188   //DD(mROI->GetName());
189   //DD(mIsSelected);
190   //DD(mROI->GetBackgroundValueLabelImage());
191   if (mIsSelected) {
192     mImageContour[slicer]->Update(1.0);//mROI->GetBackgroundValueLabelImage()); 
193     //    mImageContour[slicer]->showActors();
194   }
195   if (mIsContourVisible) {
196     mImageContour[slicer]->SetLineWidth(mContourWidth);
197     mImageContour[slicer]->Update(mROI->GetBackgroundValueLabelImage()+1); 
198     //    mImageContour[slicer]->showActors();
199   }
200
201   // Refresh overlays
202   mOverlayActors[slicer]->UpdateSlice(slicer, slices);
203
204   // Do not used the following line : TOO SLOW.
205   // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
206 }
207 //------------------------------------------------------------------------------
208
209
210 //------------------------------------------------------------------------------
211 // void vvROIActor::UpdateOpacity(double d) {
212 //   if (d == mOpacity) return;
213 //   mOpacity = d;
214 //   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
215 //     mOverlayActors[i]->SetOpacity(d);
216 //     mOverlayActors[i]->UpdateColor();
217 //   }
218 //   mSlicerManager->Render();
219 // }
220 //------------------------------------------------------------------------------
221
222
223 //------------------------------------------------------------------------------
224 void vvROIActor::SetOpacity(double d)
225 {
226   mOpacity = d;
227 }
228 //------------------------------------------------------------------------------
229
230
231 //------------------------------------------------------------------------------
232 void vvROIActor::SetContourColor(double r, double v, double b) {
233   mContourColor[0] = r;
234   mContourColor[1] = v;
235   mContourColor[2] = b;  
236 }
237 //------------------------------------------------------------------------------
238
239
240 //------------------------------------------------------------------------------
241 std::vector<double> & vvROIActor::GetContourColor() { 
242   return mContourColor; 
243 }
244 //------------------------------------------------------------------------------
245
246
247 //------------------------------------------------------------------------------
248 void vvROIActor::UpdateColor() {
249   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
250     mOverlayActors[i]->SetOpacity(mOpacity);
251     mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
252                                 mROI->GetDisplayColor()[1],
253                                 mROI->GetDisplayColor()[2]);
254     mOverlayActors[i]->UpdateColor();
255   }
256   for(unsigned int i=0; i<mImageContour.size(); i++) {
257     mImageContour[i]->SetLineWidth(mContourWidth);
258     mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
259     mImageContour[i]->Update(mROI->GetBackgroundValueLabelImage()+1);
260   }
261 }
262 //------------------------------------------------------------------------------
263
264
265 //------------------------------------------------------------------------------
266 double vvROIActor::GetOpacity()
267 {
268   return mOpacity;
269 }
270 //------------------------------------------------------------------------------
271
272
273 //------------------------------------------------------------------------------
274 void vvROIActor::SetSelected(bool b)
275 {
276   mIsSelected = b;
277   if (b) {
278     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
279       mImageContour[i]->SetLineWidth(3.0);
280       mImageContour[i]->ShowActors();
281     }
282   } else {
283     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
284       mImageContour[i]->HideActors();
285     }
286   }
287 }
288 //------------------------------------------------------------------------------
289