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 ======================================================================-====*/
20 #include "vvROIActor.h"
21 #include "vvImageContour.h"
22 #include "vvSlicerManager.h"
23 #include "vvBinaryImageOverlayActor.h"
26 #include <vtkImageActor.h>
27 #include <vtkCamera.h>
28 #include <vtkRenderer.h>
29 #include <vtkMarchingSquares.h>
30 #include <vtkImageClip.h>
31 #include <vtkImageData.h>
32 #include <vtkPolyDataMapper.h>
33 #include <vtkProperty.h>
35 //------------------------------------------------------------------------------
36 vvROIActor::vvROIActor()
38 mImageContour.clear();
39 mOverlayActors.clear();
41 mIsContourVisible = false;
45 mContourColor.resize(3);
47 //------------------------------------------------------------------------------
50 //------------------------------------------------------------------------------
51 vvROIActor::~vvROIActor()
54 //------------------------------------------------------------------------------
57 //------------------------------------------------------------------------------
58 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
62 //------------------------------------------------------------------------------
65 //------------------------------------------------------------------------------
66 void vvROIActor::SetContourWidth(int n) {
69 //------------------------------------------------------------------------------
72 //------------------------------------------------------------------------------
73 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
76 //------------------------------------------------------------------------------
79 //------------------------------------------------------------------------------
80 void vvROIActor::UpdateImage()
82 for(unsigned int i= 0; i<mOverlayActors.size(); i++) {
83 mOverlayActors[i]->HideActors();
84 delete mOverlayActors[i];
86 for(unsigned int i= 0; i<mImageContour.size(); i++) {
87 mImageContour[i]->HideActors();
88 delete mImageContour[i];
91 Update(); // No Render
93 //------------------------------------------------------------------------------
96 //------------------------------------------------------------------------------
97 void vvROIActor::SetVisible(bool b)
100 if (!b) { // remove actor
101 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
102 mOverlayActors[i]->HideActors();
104 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
105 mOverlayActors[i]->ShowActors();
107 Update(); // No Render
109 //------------------------------------------------------------------------------
112 //------------------------------------------------------------------------------
113 void vvROIActor::SetContourVisible(bool b) {
114 mIsContourVisible = b;
115 if (!b) { // remove actor
116 for(unsigned int i= 0; i<mImageContour.size(); i++) {
117 mImageContour[i]->HideActors();
121 for(unsigned int i= 0; i<mImageContour.size(); i++) {
122 mImageContour[i]->ShowActors();
125 Update(); // No Render
127 //------------------------------------------------------------------------------
130 //------------------------------------------------------------------------------
131 bool vvROIActor::IsVisible() {
134 //------------------------------------------------------------------------------
137 //------------------------------------------------------------------------------
138 bool vvROIActor::IsContourVisible() {
139 return mIsContourVisible;
141 //------------------------------------------------------------------------------
144 //------------------------------------------------------------------------------
145 void vvROIActor::Initialize() {
146 if (mROI->GetImage()) {
147 mImageContour.clear();
148 mOverlayActors.clear();
149 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
150 mImageContour.push_back(new vvImageContour);
151 mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
152 mImageContour[i]->SetImage(mROI->GetImage());
153 mContourColor[0] = mROI->GetDisplayColor()[0];
154 mContourColor[1] = mROI->GetDisplayColor()[1];
155 mContourColor[2] = mROI->GetDisplayColor()[2];
156 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
157 mImageContour[i]->SetLineWidth(mContourWidth);
158 mImageContour[i]->SetPreserveMemoryModeEnabled(true);
159 mImageContour[i]->SetSlicer(mSlicerManager->GetSlicer(i));
160 mImageContour[i]->HideActors();
162 mOverlayActors.push_back(new vvBinaryImageOverlayActor);
163 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
164 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
165 mROI->GetDisplayColor()[1],
166 mROI->GetDisplayColor()[2]);
167 mOverlayActors[i]->SetOpacity(mOpacity);
168 mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
169 mOverlayActors[i]->Initialize();
172 connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
173 //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
174 connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
177 //------------------------------------------------------------------------------
180 //------------------------------------------------------------------------------
181 void vvROIActor::Update()
183 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
184 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
187 //------------------------------------------------------------------------------
190 //------------------------------------------------------------------------------
191 void vvROIActor::UpdateSlice(int slicer, int slices)
193 if (!mROI->GetImage()) return;
194 if ((!mIsVisible) && (!mIsContourVisible)) return;
195 if (!mSlicerManager) {
196 std::cerr << "Error. No mSlicerManager ?" << std::endl;
200 if (mIsContourVisible) {
201 mImageContour[slicer]->Update(mROI->GetBackgroundValueLabelImage()+1);
205 mOverlayActors[slicer]->UpdateSlice(slicer, slices);
207 //------------------------------------------------------------------------------
210 //------------------------------------------------------------------------------
211 void vvROIActor::SetOpacity(double d)
215 //------------------------------------------------------------------------------
218 //------------------------------------------------------------------------------
219 void vvROIActor::SetContourColor(double r, double v, double b) {
220 mContourColor[0] = r;
221 mContourColor[1] = v;
222 mContourColor[2] = b;
224 //------------------------------------------------------------------------------
227 //------------------------------------------------------------------------------
228 std::vector<double> & vvROIActor::GetContourColor() {
229 return mContourColor;
231 //------------------------------------------------------------------------------
234 //------------------------------------------------------------------------------
235 void vvROIActor::UpdateColor() {
236 for(unsigned int i=0; i<mOverlayActors.size(); i++) {
237 mOverlayActors[i]->SetOpacity(mOpacity);
238 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
239 mROI->GetDisplayColor()[1],
240 mROI->GetDisplayColor()[2]);
241 mOverlayActors[i]->UpdateColor();
243 for(unsigned int i=0; i<mImageContour.size(); i++) {
244 mImageContour[i]->SetLineWidth(mContourWidth);
245 mImageContour[i]->SetColor(mContourColor[0], mContourColor[1], mContourColor[2]);
246 if (mIsContourVisible)
247 mImageContour[i]->Update(mROI->GetBackgroundValueLabelImage()+1);
250 //------------------------------------------------------------------------------
253 //------------------------------------------------------------------------------
254 double vvROIActor::GetOpacity()
258 //------------------------------------------------------------------------------
261 //------------------------------------------------------------------------------
262 void vvROIActor::SetSelected(bool b)
267 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
268 mImageContour[i]->SetLineWidth(3.0);
269 mImageContour[i]->ShowActors();
272 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
273 mImageContour[i]->HideActors();
277 //------------------------------------------------------------------------------