1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://www.centreleonberard.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
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.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
20 #include "vvROIActor.h"
21 #include "vvSlicerManager.h"
24 #include <vtkImageActor.h>
25 #include <vtkCamera.h>
26 #include <vtkRenderer.h>
27 #include <vtkMarchingSquares.h>
28 #include <vtkImageClip.h>
29 #include <vtkImageData.h>
30 #include <vtkPolyDataMapper.h>
31 #include <vtkProperty.h>
33 //------------------------------------------------------------------------------
34 vvROIActor::vvROIActor()
37 mIsContourVisible = false;
41 mContourColor.resize(3);
50 //------------------------------------------------------------------------------
53 //------------------------------------------------------------------------------
54 vvROIActor::~vvROIActor()
57 //------------------------------------------------------------------------------
60 //------------------------------------------------------------------------------
61 void vvROIActor::RemoveActors()
63 for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
64 mOverlayActors[i]->RemoveActors();
67 for(unsigned int i= 0; i<mImageContour.size(); i++) {
68 mImageContour[i]->RemoveActors();
72 //mImageContour.clear();
73 //mOverlayActors.clear();
75 //------------------------------------------------------------------------------
78 //------------------------------------------------------------------------------
79 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
83 //------------------------------------------------------------------------------
86 //------------------------------------------------------------------------------
87 void vvROIActor::SetContourWidth(int n)
91 //------------------------------------------------------------------------------
94 //------------------------------------------------------------------------------
95 void vvROIActor::SetSlicerManager(vvSlicerManager * s)
99 //------------------------------------------------------------------------------
102 //------------------------------------------------------------------------------
103 void vvROIActor::UpdateImage()
105 mOverlayActors.clear();
106 mImageContour.clear();
107 Initialize(mDepth, mIsVisible);
108 Update(); // No Render
110 //------------------------------------------------------------------------------
113 //------------------------------------------------------------------------------
114 void vvROIActor::SetVisible(bool b)
117 if (!b) { // remove actor
118 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
119 mOverlayActors[i]->HideActors();
121 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
122 mOverlayActors[i]->ShowActors();
124 //Update(); // No Render
126 //------------------------------------------------------------------------------
129 //------------------------------------------------------------------------------
130 void vvROIActor::SetContourVisible(bool b)
132 mIsContourVisible = b;
133 if (!b) { // remove actor
134 for(unsigned int i= 0; i<mImageContour.size(); i++) {
135 mImageContour[i]->HideActors();
139 for(unsigned int i= 0; i<mImageContour.size(); i++) {
140 mImageContour[i]->ShowActors();
143 //Update(); // No Render
145 //------------------------------------------------------------------------------
148 //------------------------------------------------------------------------------
149 bool vvROIActor::IsVisible()
153 //------------------------------------------------------------------------------
156 //------------------------------------------------------------------------------
157 bool vvROIActor::IsContourVisible()
159 return mIsContourVisible;
161 //------------------------------------------------------------------------------
164 //------------------------------------------------------------------------------
165 void vvROIActor::Initialize(double depth, bool IsVisible)
167 if (mROI->GetImage()) {
168 mImageContour.clear();
169 mOverlayActors.clear();
171 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
172 mImageContour.push_back(vvImageContour::New());
173 mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
174 mImageContour[i]->SetImage(mROI->GetImage());
175 // Color of the contour is same of roi color
176 mContourColor[0] = mROI->GetDisplayColor()[0];
177 mContourColor[1] = mROI->GetDisplayColor()[1];
178 mContourColor[2] = mROI->GetDisplayColor()[2];
179 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
180 mImageContour[i]->SetLineWidth(mContourWidth);
181 mImageContour[i]->SetPreserveMemoryModeEnabled(true);
182 mImageContour[i]->SetDepth(mDepth+0.5);
183 mImageContour[i]->ShowActors();
185 mOverlayActors.push_back(vvBinaryImageOverlayActor::New());
189 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
191 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetForegroundValueLabelImage(), false);
195 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
196 mROI->GetDisplayColor()[1],
197 mROI->GetDisplayColor()[2]);
198 mOverlayActors[i]->SetOpacity(mOpacity);
199 mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
200 mOverlayActors[i]->Initialize(IsVisible);
201 mOverlayActors[i]->SetDepth(mDepth);
203 connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
204 connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int,int)),this,SLOT(UpdateSlice(int, int, int)));
205 connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
208 //------------------------------------------------------------------------------
211 //------------------------------------------------------------------------------
212 void vvROIActor::SetDepth(double d)
215 if (!mSlicerManager) return;
216 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
217 mOverlayActors[i]->SetDepth(d);
218 mImageContour[i]->SetDepth(d+0.5);
222 //------------------------------------------------------------------------------
225 //------------------------------------------------------------------------------
226 void vvROIActor::Update(bool force)
228 if (!mSlicerManager) return;
229 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
230 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice(), force);
233 //------------------------------------------------------------------------------
236 //------------------------------------------------------------------------------
237 void vvROIActor::UpdateSlice(int slicer, int slices, int force)
239 if (!mROI->GetImage()) return;
240 if ((!mIsVisible) && (!mIsContourVisible)) return;
241 if (!mSlicerManager) {
242 std::cerr << "Error. No mSlicerManager ?" << std::endl;
246 if (mIsContourVisible) {
247 mImageContour[slicer]->Update(mROI->GetBackgroundValueLabelImage()+1);
252 mOverlayActors[slicer]->UpdateSlice(slicer, slices, force);
254 //mSlicerManager->GetSlicer(slicer)->Render();
256 //------------------------------------------------------------------------------
259 //------------------------------------------------------------------------------
260 void vvROIActor::SetOpacity(double d)
264 //------------------------------------------------------------------------------
267 //------------------------------------------------------------------------------
268 void vvROIActor::SetContourColor(double r, double v, double b)
270 mContourColor[0] = r;
271 mContourColor[1] = v;
272 mContourColor[2] = b;
274 //------------------------------------------------------------------------------
277 //------------------------------------------------------------------------------
278 void vvROIActor::SetOverlayColor(double r, double v, double b)
281 mROI->SetDisplayColor(r,v,b);
283 //------------------------------------------------------------------------------
286 //------------------------------------------------------------------------------
287 std::vector<double> & vvROIActor::GetContourColor()
289 return mContourColor;
291 //------------------------------------------------------------------------------
294 //------------------------------------------------------------------------------
295 std::vector<double> & vvROIActor::GetOverlayColor()
297 return mROI->GetDisplayColor();
299 //------------------------------------------------------------------------------
302 //------------------------------------------------------------------------------
303 void vvROIActor::UpdateColor()
305 for(unsigned int i=0; i<mOverlayActors.size(); i++) {
306 mOverlayActors[i]->SetOpacity(mOpacity);
307 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
308 mROI->GetDisplayColor()[1],
309 mROI->GetDisplayColor()[2]);
310 mOverlayActors[i]->UpdateColor();
312 for(unsigned int i=0; i<mImageContour.size(); i++) {
313 mImageContour[i]->SetLineWidth(mContourWidth);
314 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
315 if (mIsContourVisible)
316 mImageContour[i]->Update(mROI->GetBackgroundValueLabelImage()+1);
319 //------------------------------------------------------------------------------
322 //------------------------------------------------------------------------------
323 double vvROIActor::GetOpacity()
327 //------------------------------------------------------------------------------
330 //------------------------------------------------------------------------------
331 void vvROIActor::SetSelected(bool b)
335 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
336 mImageContour[i]->SetLineWidth(3.0);
337 mImageContour[i]->ShowActors();
340 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
341 mImageContour[i]->HideActors();
345 //------------------------------------------------------------------------------
348 //------------------------------------------------------------------------------
349 void vvROIActor::CopyParameters(QSharedPointer<vvROIActor> roi)
352 SetVisible(roi->IsVisible());
353 SetOpacity(roi->GetOpacity());
354 SetOverlayColor(roi->GetOverlayColor()[0], roi->GetOverlayColor()[1], roi->GetOverlayColor()[2]);
357 SetContourVisible(roi->IsContourVisible());
358 SetContourWidth(roi->GetContourWidth());
359 SetContourColor(roi->GetContourColor()[0], roi->GetContourColor()[1], roi->GetContourColor()[2]);
362 SetDepth(roi->GetDepth());
364 //------------------------------------------------------------------------------