]> Creatis software - clitk.git/blob - vv/vvROIActor.cxx
Reformatted using new coding style
[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   mOpacity = 0.7;
40   mIsSelected = false;
41 }
42 //------------------------------------------------------------------------------
43
44
45 //------------------------------------------------------------------------------
46 vvROIActor::~vvROIActor()
47 {
48 }
49 //------------------------------------------------------------------------------
50
51
52 //------------------------------------------------------------------------------
53 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
54 {
55   mROI = s;
56 }
57 //------------------------------------------------------------------------------
58
59
60 //------------------------------------------------------------------------------
61 void vvROIActor::SetSlicerManager(vvSlicerManager * s)
62 {
63   mSlicerManager = s;
64 }
65 //------------------------------------------------------------------------------
66
67
68 //------------------------------------------------------------------------------
69 void vvROIActor::SetVisible(bool b)
70 {
71   mIsVisible = b;
72   if (!b) { // remove actor
73     for(unsigned int i= 0; i<mOverlayActors.size(); i++)
74       mOverlayActors[i]->HideActors();
75   } else {
76     for(unsigned int i= 0; i<mOverlayActors.size(); i++)
77       mOverlayActors[i]->ShowActors();
78   }
79   Update();
80 }
81 //------------------------------------------------------------------------------
82
83
84 //------------------------------------------------------------------------------
85 bool vvROIActor::IsVisible()
86 {
87   return mIsVisible;
88 }
89 //------------------------------------------------------------------------------
90
91
92 //------------------------------------------------------------------------------
93 void vvROIActor::Initialize()
94 {
95   if (mROI->GetImage()) {
96     mImageContour.clear();
97     mOverlayActors.clear();
98     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
99       mImageContour.push_back(new vvImageContour);
100       mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
101       mImageContour[i]->setImage(mROI->GetImage());
102       //mImageContour[i]->setColor(1.0, 0.0, 0.0);
103       mImageContour[i]->setColor(1.0-mROI->GetDisplayColor()[0],
104                                  1.0-mROI->GetDisplayColor()[1],
105                                  1.0-mROI->GetDisplayColor()[2]);
106       mImageContour[i]->setPreserveMemoryModeEnabled(true);
107       mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
108
109       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
110       mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
111       mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
112                                   mROI->GetDisplayColor()[1],
113                                   mROI->GetDisplayColor()[2]);
114       mOverlayActors[i]->SetOpacity(mOpacity);
115       mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
116       mOverlayActors[i]->Initialize();
117     }
118
119     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
120     //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
121     connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
122   }
123 }
124 //------------------------------------------------------------------------------
125
126
127 //------------------------------------------------------------------------------
128 void vvROIActor::Update()
129 {
130   for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
131     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
132   }
133 }
134 //------------------------------------------------------------------------------
135
136
137 //------------------------------------------------------------------------------
138 void vvROIActor::UpdateSlice(int slicer, int slices)
139 {
140   if (!mROI->GetImage())  return;
141
142   if (!mIsVisible) return;
143
144   if (!mSlicerManager) {
145     std::cerr << "Error. No mSlicerManager ?" << std::endl;
146     exit(0);
147   }
148
149   // CONTOUR HERE
150   DD("vvROIActor::UpdateSlice");
151   DD(mROI->GetName());
152   DD(mIsSelected);
153   DD(mROI->GetBackgroundValueLabelImage());
154   if (mIsSelected) {
155     mImageContour[slicer]->update(1.0);//mROI->GetBackgroundValueLabelImage());
156     //    mImageContour[slicer]->showActors();
157   }
158
159   // Refresh overlays
160   mOverlayActors[slicer]->UpdateSlice(slicer, slices);
161
162   // Do not used the following line : TOO SLOW.
163   // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
164 }
165 //------------------------------------------------------------------------------
166
167
168 //------------------------------------------------------------------------------
169 // void vvROIActor::UpdateOpacity(double d) {
170 //   if (d == mOpacity) return;
171 //   mOpacity = d;
172 //   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
173 //     mOverlayActors[i]->SetOpacity(d);
174 //     mOverlayActors[i]->UpdateColor();
175 //   }
176 //   mSlicerManager->Render();
177 // }
178 //------------------------------------------------------------------------------
179
180
181 //------------------------------------------------------------------------------
182 void vvROIActor::SetOpacity(double d)
183 {
184   mOpacity = d;
185 }
186 //------------------------------------------------------------------------------
187
188
189 //------------------------------------------------------------------------------
190 void vvROIActor::UpdateColor()
191 {
192   for(unsigned int i=0; i<mOverlayActors.size(); i++) {
193     mOverlayActors[i]->SetOpacity(mOpacity);
194     mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
195                                 mROI->GetDisplayColor()[1],
196                                 mROI->GetDisplayColor()[2]);
197     mOverlayActors[i]->UpdateColor();
198   }
199 }
200 //------------------------------------------------------------------------------
201
202
203 //------------------------------------------------------------------------------
204 double vvROIActor::GetOpacity()
205 {
206   return mOpacity;
207 }
208 //------------------------------------------------------------------------------
209
210
211 //------------------------------------------------------------------------------
212 void vvROIActor::SetSelected(bool b)
213 {
214   mIsSelected = b;
215   if (b) {
216     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
217       mImageContour[i]->SetLineWidth(3.0);
218       mImageContour[i]->showActors();
219     }
220   } else {
221     for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
222       mImageContour[i]->hideActors();
223     }
224   }
225 }
226 //------------------------------------------------------------------------------
227