]> Creatis software - clitk.git/blob - vv/vvROIActor.cxx
- bug corrected
[clitk.git] / vv / vvROIActor.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
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
8
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.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ======================================================================-====*/
18
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>
32
33 //------------------------------------------------------------------------------
34 vvROIActor::vvROIActor() {
35   mImageContour.clear();
36   mOverlayActors.clear();
37   mIsVisible = true;
38 }
39 //------------------------------------------------------------------------------
40
41
42 //------------------------------------------------------------------------------
43 vvROIActor::~vvROIActor() {
44 }
45 //------------------------------------------------------------------------------
46
47
48 //------------------------------------------------------------------------------
49 void vvROIActor::SetROI(const clitk::DicomRT_ROI * s) {
50   mROI = s;
51 }
52 //------------------------------------------------------------------------------
53
54
55 //------------------------------------------------------------------------------
56 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
57   mSlicerManager = s;
58 }
59 //------------------------------------------------------------------------------
60
61
62 //------------------------------------------------------------------------------
63 void vvROIActor::SetVisible(bool b) {
64   mIsVisible = b;
65   if (!b) { // remove actor
66     for(unsigned int i= 0; i<mOverlayActors.size(); i++) 
67       mOverlayActors[i]->hideActors();
68   }
69   else {
70     for(unsigned int i= 0; i<mOverlayActors.size(); i++) 
71       mOverlayActors[i]->showActors();
72   }
73   Update();
74 }
75 //------------------------------------------------------------------------------
76
77
78 //------------------------------------------------------------------------------
79 bool vvROIActor::IsVisible() {
80   return mIsVisible;
81 }
82 //------------------------------------------------------------------------------
83
84
85 //------------------------------------------------------------------------------
86 void vvROIActor::Initialize() {
87   if (mROI->GetImage()) {
88     mImageContour.clear();
89     mOverlayActors.clear();
90     for(int i=0;i<mSlicerManager->NumberOfSlicers(); i++) {
91       mImageContour.push_back(new vvImageContour);
92       mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
93       mImageContour[i]->setImage(mROI->GetImage());
94       //      mImageContour[i]->setColor(1.0, 0.0, 0.0);
95       mImageContour[i]->setColor(mROI->GetDisplayColor()[0], 
96                                  mROI->GetDisplayColor()[1], 
97                                  mROI->GetDisplayColor()[2]);
98       mImageContour[i]->setPreserveMemoryModeEnabled(false);        
99       
100       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
101       mOverlayActors[i]->setImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
102       mOverlayActors[i]->setColor(mROI->GetDisplayColor()[0], 
103                                   mROI->GetDisplayColor()[1], 
104                                   mROI->GetDisplayColor()[2]);
105       mOverlayActors[i]->setSlicer(mSlicerManager->GetSlicer(i));
106       mOverlayActors[i]->initialize();
107     }
108     
109     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
110     //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
111     connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
112   }
113 }
114 //------------------------------------------------------------------------------
115
116
117 //------------------------------------------------------------------------------
118 void vvROIActor::Update() {
119   for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
120     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
121   }
122 }
123 //------------------------------------------------------------------------------
124
125
126 //------------------------------------------------------------------------------
127 void vvROIActor::UpdateSlice(int slicer, int slices) {
128   if (!mROI->GetImage())  return;
129   
130   if (!mIsVisible) return;
131
132   if (!mSlicerManager) {
133     std::cerr << "Error. No mSlicerManager ?" << std::endl;
134     exit(0);
135   }
136
137   // CONTOUR HERE 
138   // mImageContour[slicer]->update(1.0); 
139
140   // Refresh overlays
141   mOverlayActors[slicer]->update(slicer, slices);
142
143   // Do not used the following line : TOO SLOW.
144   // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render(); 
145 }
146 //------------------------------------------------------------------------------
147
148
149 //------------------------------------------------------------------------------
150 void vvROIActor::SetOpacity(double d) {
151   mOpacity = d; 
152   for(unsigned int i=0; mOverlayActors.size(); i++) {
153     mOverlayActors[i]->SetOpacity(d);
154   }
155 }
156 //------------------------------------------------------------------------------
157