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();
39 //------------------------------------------------------------------------------
42 //------------------------------------------------------------------------------
43 vvROIActor::~vvROIActor() {
45 //------------------------------------------------------------------------------
48 //------------------------------------------------------------------------------
49 void vvROIActor::SetROI(const clitk::DicomRT_ROI * s) {
52 //------------------------------------------------------------------------------
55 //------------------------------------------------------------------------------
56 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
59 //------------------------------------------------------------------------------
62 //------------------------------------------------------------------------------
63 void vvROIActor::SetVisible(bool b) {
65 if (!b) { // remove actor
66 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
67 mOverlayActors[i]->hideActors();
70 for(unsigned int i= 0; i<mOverlayActors.size(); i++)
71 mOverlayActors[i]->showActors();
75 //------------------------------------------------------------------------------
78 //------------------------------------------------------------------------------
79 bool vvROIActor::IsVisible() {
82 //------------------------------------------------------------------------------
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);
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();
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)));
114 //------------------------------------------------------------------------------
117 //------------------------------------------------------------------------------
118 void vvROIActor::Update() {
119 for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
120 UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
123 //------------------------------------------------------------------------------
126 //------------------------------------------------------------------------------
127 void vvROIActor::UpdateSlice(int slicer, int slices) {
128 if (!mROI->GetImage()) return;
130 if (!mIsVisible) return;
132 if (!mSlicerManager) {
133 std::cerr << "Error. No mSlicerManager ?" << std::endl;
138 // mImageContour[slicer]->update(1.0);
141 mOverlayActors[slicer]->update(slicer, slices);
143 // Do not used the following line : TOO SLOW.
144 // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render();
146 //------------------------------------------------------------------------------
149 //------------------------------------------------------------------------------
150 void vvROIActor::SetOpacity(double d) {
152 for(unsigned int i=0; mOverlayActors.size(); i++) {
153 mOverlayActors[i]->SetOpacity(d);
156 //------------------------------------------------------------------------------