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() {
35 mImageContour.clear();
36 mOverlayActors.clear();
41 //------------------------------------------------------------------------------
44 //------------------------------------------------------------------------------
45 vvROIActor::~vvROIActor() {
47 //------------------------------------------------------------------------------
50 //------------------------------------------------------------------------------
51 void vvROIActor::SetROI(clitk::DicomRT_ROI * s) {
54 //------------------------------------------------------------------------------
57 //------------------------------------------------------------------------------
58 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
61 //------------------------------------------------------------------------------
64 //------------------------------------------------------------------------------
65 void vvROIActor::SetVisible(bool b) {
67 if (!b) { // remove actor
68 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
69 mOverlayActors[i]->HideActors();
72 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
73 mOverlayActors[i]->ShowActors();
77 //------------------------------------------------------------------------------
80 //------------------------------------------------------------------------------
81 bool vvROIActor::IsVisible() {
84 //------------------------------------------------------------------------------
87 //------------------------------------------------------------------------------
88 void vvROIActor::Initialize() {
89 if (mROI->GetImage()) {
90 mImageContour.clear();
91 mOverlayActors.clear();
92 for(int i=0;i<mSlicerManager->NumberOfSlicers(); i++) {
93 mImageContour.push_back(new vvImageContour);
94 mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
95 mImageContour[i]->setImage(mROI->GetImage());
96 //mImageContour[i]->setColor(1.0, 0.0, 0.0);
97 mImageContour[i]->setColor(1.0-mROI->GetDisplayColor()[0],
98 1.0-mROI->GetDisplayColor()[1],
99 1.0-mROI->GetDisplayColor()[2]);
100 mImageContour[i]->setPreserveMemoryModeEnabled(true);
101 mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
103 mOverlayActors.push_back(new vvBinaryImageOverlayActor);
104 mOverlayActors[i]->SetImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
105 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
106 mROI->GetDisplayColor()[1],
107 mROI->GetDisplayColor()[2]);
108 mOverlayActors[i]->SetOpacity(mOpacity);
109 mOverlayActors[i]->SetSlicer(mSlicerManager->GetSlicer(i));
110 mOverlayActors[i]->Initialize();
113 connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
114 //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
115 connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
118 //------------------------------------------------------------------------------
121 //------------------------------------------------------------------------------
122 void vvROIActor::Update() {
123 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
124 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
127 //------------------------------------------------------------------------------
130 //------------------------------------------------------------------------------
131 void vvROIActor::UpdateSlice(int slicer, int slices) {
132 if (!mROI->GetImage()) return;
134 if (!mIsVisible) return;
136 if (!mSlicerManager) {
137 std::cerr << "Error. No mSlicerManager ?" << std::endl;
142 DD("vvROIActor::UpdateSlice");
145 DD(mROI->GetBackgroundValueLabelImage());
147 mImageContour[slicer]->update(1.0);//mROI->GetBackgroundValueLabelImage());
148 // mImageContour[slicer]->showActors();
152 mOverlayActors[slicer]->UpdateSlice(slicer, slices);
154 // Do not used the following line : TOO SLOW.
155 // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
157 //------------------------------------------------------------------------------
160 //------------------------------------------------------------------------------
161 // void vvROIActor::UpdateOpacity(double d) {
162 // if (d == mOpacity) return;
164 // for(unsigned int i=0; i<mOverlayActors.size(); i++) {
165 // mOverlayActors[i]->SetOpacity(d);
166 // mOverlayActors[i]->UpdateColor();
168 // mSlicerManager->Render();
170 //------------------------------------------------------------------------------
173 //------------------------------------------------------------------------------
174 void vvROIActor::SetOpacity(double d) {
177 //------------------------------------------------------------------------------
180 //------------------------------------------------------------------------------
181 void vvROIActor::UpdateColor() {
182 for(unsigned int i=0; i<mOverlayActors.size(); i++) {
183 mOverlayActors[i]->SetOpacity(mOpacity);
184 mOverlayActors[i]->SetColor(mROI->GetDisplayColor()[0],
185 mROI->GetDisplayColor()[1],
186 mROI->GetDisplayColor()[2]);
187 mOverlayActors[i]->UpdateColor();
190 //------------------------------------------------------------------------------
193 //------------------------------------------------------------------------------
194 double vvROIActor::GetOpacity() {
197 //------------------------------------------------------------------------------
200 //------------------------------------------------------------------------------
201 void vvROIActor::SetSelected(bool b) {
204 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
205 mImageContour[i]->SetLineWidth(3.0);
206 mImageContour[i]->showActors();
210 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
211 mImageContour[i]->hideActors();
215 //------------------------------------------------------------------------------