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();
42 //------------------------------------------------------------------------------
45 //------------------------------------------------------------------------------
46 vvROIActor::~vvROIActor()
49 //------------------------------------------------------------------------------
52 //------------------------------------------------------------------------------
53 void vvROIActor::SetROI(clitk::DicomRT_ROI * s)
57 //------------------------------------------------------------------------------
60 //------------------------------------------------------------------------------
61 void vvROIActor::SetSlicerManager(vvSlicerManager * s)
65 //------------------------------------------------------------------------------
68 //------------------------------------------------------------------------------
69 void vvROIActor::SetVisible(bool b)
72 if (!b) { // remove actor
73 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
74 mOverlayActors[i]->HideActors();
76 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
77 mOverlayActors[i]->ShowActors();
81 //------------------------------------------------------------------------------
84 //------------------------------------------------------------------------------
85 bool vvROIActor::IsVisible()
89 //------------------------------------------------------------------------------
92 //------------------------------------------------------------------------------
93 void vvROIActor::Initialize()
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));
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();
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)));
124 //------------------------------------------------------------------------------
127 //------------------------------------------------------------------------------
128 void vvROIActor::Update()
130 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
131 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
134 //------------------------------------------------------------------------------
137 //------------------------------------------------------------------------------
138 void vvROIActor::UpdateSlice(int slicer, int slices)
140 if (!mROI->GetImage()) return;
142 if (!mIsVisible) return;
144 if (!mSlicerManager) {
145 std::cerr << "Error. No mSlicerManager ?" << std::endl;
150 DD("vvROIActor::UpdateSlice");
153 DD(mROI->GetBackgroundValueLabelImage());
155 mImageContour[slicer]->update(1.0);//mROI->GetBackgroundValueLabelImage());
156 // mImageContour[slicer]->showActors();
160 mOverlayActors[slicer]->UpdateSlice(slicer, slices);
162 // Do not used the following line : TOO SLOW.
163 // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
165 //------------------------------------------------------------------------------
168 //------------------------------------------------------------------------------
169 // void vvROIActor::UpdateOpacity(double d) {
170 // if (d == mOpacity) return;
172 // for(unsigned int i=0; i<mOverlayActors.size(); i++) {
173 // mOverlayActors[i]->SetOpacity(d);
174 // mOverlayActors[i]->UpdateColor();
176 // mSlicerManager->Render();
178 //------------------------------------------------------------------------------
181 //------------------------------------------------------------------------------
182 void vvROIActor::SetOpacity(double d)
186 //------------------------------------------------------------------------------
189 //------------------------------------------------------------------------------
190 void vvROIActor::UpdateColor()
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();
200 //------------------------------------------------------------------------------
203 //------------------------------------------------------------------------------
204 double vvROIActor::GetOpacity()
208 //------------------------------------------------------------------------------
211 //------------------------------------------------------------------------------
212 void vvROIActor::SetSelected(bool b)
216 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
217 mImageContour[i]->SetLineWidth(3.0);
218 mImageContour[i]->showActors();
221 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
222 mImageContour[i]->hideActors();
226 //------------------------------------------------------------------------------