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://oncora1.lyon.fnclcc.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 ======================================================================-====*/
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>
33 //------------------------------------------------------------------------------
34 vvROIActor::vvROIActor()
36 mImageContour.clear();
37 mOverlayActors.clear();
39 mIsContourVisible = false;
43 mContourColor.resize(3);
45 //------------------------------------------------------------------------------
48 //------------------------------------------------------------------------------
49 vvROIActor::~vvROIActor()
52 //------------------------------------------------------------------------------
55 //------------------------------------------------------------------------------
56 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
60 //------------------------------------------------------------------------------
63 //------------------------------------------------------------------------------
64 void vvROIActor::SetContourWidth(int n) {
67 //------------------------------------------------------------------------------
70 //------------------------------------------------------------------------------
71 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
74 //------------------------------------------------------------------------------
77 //------------------------------------------------------------------------------
78 void vvROIActor::SetVisible(bool b)
81 if (!b) { // remove actor
82 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
83 mOverlayActors[i]->HideActors();
85 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
86 mOverlayActors[i]->ShowActors();
90 //------------------------------------------------------------------------------
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();
103 for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
104 // mOverlayActors[i]->ShowActors();
105 mImageContour[i]->ShowActors();
110 //------------------------------------------------------------------------------
113 //------------------------------------------------------------------------------
114 bool vvROIActor::IsVisible() {
117 //------------------------------------------------------------------------------
120 //------------------------------------------------------------------------------
121 bool vvROIActor::IsContourVisible() {
122 return mIsContourVisible;
124 //------------------------------------------------------------------------------
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();
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();
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)));
161 //------------------------------------------------------------------------------
164 //------------------------------------------------------------------------------
165 void vvROIActor::Update()
167 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
168 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
171 //------------------------------------------------------------------------------
174 //------------------------------------------------------------------------------
175 void vvROIActor::UpdateSlice(int slicer, int slices)
177 if (!mROI->GetImage()) return;
179 if (!mIsVisible) return;
181 if (!mSlicerManager) {
182 std::cerr << "Error. No mSlicerManager ?" << std::endl;
187 // DD("vvROIActor::UpdateSlice");
188 //DD(mROI->GetName());
190 //DD(mROI->GetBackgroundValueLabelImage());
192 mImageContour[slicer]->Update(1.0);//mROI->GetBackgroundValueLabelImage());
193 // mImageContour[slicer]->showActors();
195 if (mIsContourVisible) {
196 mImageContour[slicer]->SetLineWidth(mContourWidth);
197 mImageContour[slicer]->Update(mROI->GetBackgroundValueLabelImage()+1);
198 // mImageContour[slicer]->showActors();
202 mOverlayActors[slicer]->UpdateSlice(slicer, slices);
204 // Do not used the following line : TOO SLOW.
205 // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
207 //------------------------------------------------------------------------------
210 //------------------------------------------------------------------------------
211 // void vvROIActor::UpdateOpacity(double d) {
212 // if (d == mOpacity) return;
214 // for(unsigned int i=0; i<mOverlayActors.size(); i++) {
215 // mOverlayActors[i]->SetOpacity(d);
216 // mOverlayActors[i]->UpdateColor();
218 // mSlicerManager->Render();
220 //------------------------------------------------------------------------------
223 //------------------------------------------------------------------------------
224 void vvROIActor::SetOpacity(double d)
228 //------------------------------------------------------------------------------
231 //------------------------------------------------------------------------------
232 void vvROIActor::SetContourColor(double r, double v, double b) {
233 mContourColor[0] = r;
234 mContourColor[1] = v;
235 mContourColor[2] = b;
237 //------------------------------------------------------------------------------
240 //------------------------------------------------------------------------------
241 std::vector<double> & vvROIActor::GetContourColor() {
242 return mContourColor;
244 //------------------------------------------------------------------------------
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();
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);
262 //------------------------------------------------------------------------------
265 //------------------------------------------------------------------------------
266 double vvROIActor::GetOpacity()
270 //------------------------------------------------------------------------------
273 //------------------------------------------------------------------------------
274 void vvROIActor::SetSelected(bool b)
278 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
279 mImageContour[i]->SetLineWidth(3.0);
280 mImageContour[i]->ShowActors();
283 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
284 mImageContour[i]->HideActors();
288 //------------------------------------------------------------------------------