]> Creatis software - clitk.git/blob - vv/vvROIActor.cxx
- display binary image as overlay
[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 }
38 //------------------------------------------------------------------------------
39
40
41 //------------------------------------------------------------------------------
42 vvROIActor::~vvROIActor() {
43 }
44 //------------------------------------------------------------------------------
45
46
47 //------------------------------------------------------------------------------
48 void vvROIActor::SetROI(const clitk::DicomRT_ROI * s) {
49   mROI = s;
50 }
51 //------------------------------------------------------------------------------
52
53
54 //------------------------------------------------------------------------------
55 void vvROIActor::SetSlicerManager(vvSlicerManager * s) {
56   mSlicerManager = s;
57 }
58 //------------------------------------------------------------------------------
59
60
61 //------------------------------------------------------------------------------
62 void vvROIActor::Initialize() {
63   if (mROI->GetImage()) {
64     mImageContour.clear();
65     mOverlayActors.clear();
66     for(int i=0;i<mSlicerManager->NumberOfSlicers(); i++) {
67       mImageContour.push_back(new vvImageContour);
68       mImageContour[i]->setSlicer(mSlicerManager->GetSlicer(i));
69       mImageContour[i]->setImage(mROI->GetImage());
70       //      mImageContour[i]->setColor(1.0, 0.0, 0.0);
71       mImageContour[i]->setColor(mROI->GetDisplayColor()[0], 
72                                  mROI->GetDisplayColor()[1], 
73                                  mROI->GetDisplayColor()[2]);
74       mImageContour[i]->setPreserveMemoryModeEnabled(false);        
75       
76       mOverlayActors.push_back(new vvBinaryImageOverlayActor);
77       mOverlayActors[i]->setImage(mROI->GetImage(), mROI->GetBackgroundValueLabelImage());
78       mOverlayActors[i]->setColor(mROI->GetDisplayColor()[0], 
79                                   mROI->GetDisplayColor()[1], 
80                                   mROI->GetDisplayColor()[2]);
81       mOverlayActors[i]->setSlicer(mSlicerManager->GetSlicer(i));
82       mOverlayActors[i]->initialize();
83     }
84     
85     connect(mSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
86     //connect(mSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
87     connect(mSlicerManager, SIGNAL(AVerticalSliderHasChanged(int, int)), SLOT(UpdateSlice(int, int)));
88   }
89 }
90 //------------------------------------------------------------------------------
91
92
93 //------------------------------------------------------------------------------
94 void vvROIActor::Update() {
95   for(int i=0; i<mSlicerManager->NumberOfSlicers(); i++) {
96     UpdateSlice(i, mSlicerManager->GetSlicer(i)->GetSlice());
97   }
98 }
99 //------------------------------------------------------------------------------
100
101
102 //------------------------------------------------------------------------------
103 void vvROIActor::UpdateSlice(int slicer, int slices) {
104    if (!mROI->GetImage())  return;
105
106   if (!mSlicerManager) {
107     std::cerr << "Error. No mSlicerManager ?" << std::endl;
108     exit(0);
109   }
110
111   // CONTOUR HERE 
112   // mImageContour[slicer]->update(1.0); 
113
114   // Refresh overlays
115   mOverlayActors[slicer]->update(slicer, slices);
116
117   // Do not used the following line : TOO SLOW.
118   // mSlicerManager->GetSlicer(slicer)->GetRenderWindow()->Render(); 
119 }
120 //------------------------------------------------------------------------------