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);
44 //------------------------------------------------------------------------------
47 //------------------------------------------------------------------------------
48 vvROIActor::~vvROIActor()
51 //------------------------------------------------------------------------------
54 //------------------------------------------------------------------------------
55 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
59 //------------------------------------------------------------------------------
62 //------------------------------------------------------------------------------
63 void vvROIActor::SetContourWidth(int n) {
66 //------------------------------------------------------------------------------
69 //------------------------------------------------------------------------------
70 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
73 //------------------------------------------------------------------------------
76 //------------------------------------------------------------------------------
77 void vvROIActor::UpdateImage()
79 mOverlayActors.clear();
80 mImageContour.clear();
81 Initialize(mIsVisible);
82 Update(); // No Render
84 //------------------------------------------------------------------------------
87 //------------------------------------------------------------------------------
88 void vvROIActor::SetVisible(bool b)
91 if (!b) { // remove actor
92 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
93 mOverlayActors[i]->HideActors();
95 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
96 mOverlayActors[i]->ShowActors();
98 Update(); // No Render
100 //------------------------------------------------------------------------------
103 //------------------------------------------------------------------------------
104 void vvROIActor::SetContourVisible(bool b) {
105 mIsContourVisible = b;
106 if (!b) { // remove actor
107 for(unsigned int i= 0; i<mImageContour.size(); i++) {
108 mImageContour[i]->HideActors();
112 for(unsigned int i= 0; i<mImageContour.size(); i++) {
113 mImageContour[i]->ShowActors();
116 Update(); // No Render
118 //------------------------------------------------------------------------------
121 //------------------------------------------------------------------------------
122 bool vvROIActor::IsVisible() {
125 //------------------------------------------------------------------------------
128 //------------------------------------------------------------------------------
129 bool vvROIActor::IsContourVisible() {
130 return mIsContourVisible;
132 //------------------------------------------------------------------------------
135 //------------------------------------------------------------------------------
136 void vvROIActor::Initialize(bool IsVisible) {
137 if (mROI->GetImage()) {
138 mImageContour.clear();
139 mOverlayActors.clear();
140 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
142 mImageContour.push_back(vvImageContour::New());
143 mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
144 mImageContour[i]->SetImage(mROI->GetImage());
145 mContourColor[0] = mROI->GetDisplayColor()[0];
146 mContourColor[1] = mROI->GetDisplayColor()[1];
147 mContourColor[2] = mROI->GetDisplayColor()[2];
148 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
149 mImageContour[i]->SetLineWidth(mContourWidth);
150 mImageContour[i]->SetPreserveMemoryModeEnabled(true);
151 //mImageContour[i]->SetPreserveMemoryModeEnabled(false); // SEG FAULT !!!
152 mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
153 mImageContour[i]->HideActors();
155 mOverlayActors.push_back(vvBinaryImageOverlayActor::New());
159 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
162 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetForegroundValueLabelImage(), false);
166 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
167 mROI->GetDisplayColor()[1],
168 mROI->GetDisplayColor()[2]);
169 mOverlayActors[i]->SetOpacity(mOpacity);
170 mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
171 mOverlayActors[i]->Initialize(IsVisible);
174 connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
175 //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
176 connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
179 //------------------------------------------------------------------------------
182 //------------------------------------------------------------------------------
183 void vvROIActor::Update()
185 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
186 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
189 //------------------------------------------------------------------------------
192 //------------------------------------------------------------------------------
193 void vvROIActor::UpdateSlice(int slicer, int slices)
195 if (!mROI->GetImage()) return;
196 if ((!mIsVisible) && (!mIsContourVisible)) return;
197 if (!mSlicerManager) {
198 std::cerr << "Error. No mSlicerManager ?" << std::endl;
202 if (mIsContourVisible) {
203 mImageContour[slicer]->Update(mROI->GetBackgroundValueLabelImage()+1);
207 mOverlayActors[slicer]->UpdateSlice(slicer, slices);
209 //------------------------------------------------------------------------------
212 //------------------------------------------------------------------------------
213 void vvROIActor::SetOpacity(double d)
217 //------------------------------------------------------------------------------
220 //------------------------------------------------------------------------------
221 void vvROIActor::SetContourColor(double r, double v, double b) {
222 mContourColor[0] = r;
223 mContourColor[1] = v;
224 mContourColor[2] = b;
226 //------------------------------------------------------------------------------
229 //------------------------------------------------------------------------------
230 std::vector<double> & vvROIActor::GetContourColor() {
231 return mContourColor;
233 //------------------------------------------------------------------------------
236 //------------------------------------------------------------------------------
237 void vvROIActor::UpdateColor() {
238 for(unsigned int i=0; i<mOverlayActors.size(); i++) {
239 mOverlayActors[i]->SetOpacity(mOpacity);
240 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
241 mROI->GetDisplayColor()[1],
242 mROI->GetDisplayColor()[2]);
243 mOverlayActors[i]->UpdateColor();
245 for(unsigned int i=0; i<mImageContour.size(); i++) {
246 mImageContour[i]->SetLineWidth(mContourWidth);
247 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
248 if (mIsContourVisible)
249 mImageContour[i]->Update(mROI->GetBackgroundValueLabelImage()+1);
252 //------------------------------------------------------------------------------
255 //------------------------------------------------------------------------------
256 double vvROIActor::GetOpacity()
260 //------------------------------------------------------------------------------
263 //------------------------------------------------------------------------------
264 void vvROIActor::SetSelected(bool b)
268 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
269 mImageContour[i]->SetLineWidth(3.0);
270 mImageContour[i]->ShowActors();
273 for(int i=0; i<mSlicerManager->GetNumberOfSlicers(); i++) {
274 mImageContour[i]->HideActors();
278 //------------------------------------------------------------------------------