]> Creatis software - clitk.git/blob - common/clitkDicomRT_ROI.cxx
Mathieu Malaterre :
[clitk.git] / common / clitkDicomRT_ROI.cxx
1 /*=========================================================================
2   Program:         vv http://www.creatis.insa-lyon.fr/rio/vv
3   Main authors :   XX XX XX
4
5   Authors belongs to:
6   - University of LYON           http://www.universite-lyon.fr/
7   - Léon Bérard cancer center    http://oncora1.lyon.fnclcc.fr
8   - CREATIS CNRS laboratory      http://www.creatis.insa-lyon.fr
9
10   This software is distributed WITHOUT ANY WARRANTY; without even
11   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12   PURPOSE.  See the copyright notices for more information.
13
14   It is distributed under dual licence
15   - BSD       http://www.opensource.org/licenses/bsd-license.php
16   - CeCILL-B  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17
18   =========================================================================*/
19
20 #include "clitkDicomRT_ROI.h"
21 #include <vtkSmartPointer.h>
22 #include <vtkAppendPolyData.h>
23
24 //--------------------------------------------------------------------
25 clitk::DicomRT_ROI::DicomRT_ROI()
26 {
27   mName = "NoName";
28   mNumber = -1;
29   mColor.resize(3);
30   mColor[0] = mColor[1] = mColor[2] = 0;
31   mMeshIsUpToDate = false;
32   mBackgroundValue = 0;
33   mForegroundValue = 1;
34   mZDelta = 0;
35 }
36 //--------------------------------------------------------------------
37
38
39 //--------------------------------------------------------------------
40 clitk::DicomRT_ROI::~DicomRT_ROI()
41 {
42 }
43 //--------------------------------------------------------------------
44
45
46 //--------------------------------------------------------------------
47 void clitk::DicomRT_ROI::SetDisplayColor(double r, double v, double b)
48 {
49   mColor.resize(3);
50   mColor[0] = r;
51   mColor[1] = v;
52   mColor[2] = b;
53 }
54 //--------------------------------------------------------------------
55
56
57 //--------------------------------------------------------------------
58 int clitk::DicomRT_ROI::GetROINumber() const
59 {
60   return mNumber;
61 }
62 //--------------------------------------------------------------------
63
64
65 //--------------------------------------------------------------------
66 const std::string & clitk::DicomRT_ROI::GetName() const
67 {
68   return mName;
69 }
70 //--------------------------------------------------------------------
71
72
73 //--------------------------------------------------------------------
74 const std::string & clitk::DicomRT_ROI::GetFilename() const
75 {
76   return mFilename;
77 }
78 //--------------------------------------------------------------------
79
80
81 //--------------------------------------------------------------------
82 const std::vector<double> & clitk::DicomRT_ROI::GetDisplayColor() const
83 {
84   return mColor;
85 }
86 //--------------------------------------------------------------------
87
88
89 //--------------------------------------------------------------------
90 void clitk::DicomRT_ROI::Print(std::ostream & os) const
91 {
92   os << "ROI " << mNumber << "\t" << mName
93      << "\t(" << mColor[0] << " " << mColor[1] << " " << mColor[2] << ")"
94      << "\t Contours = " << mListOfContours.size() << std::endl;
95 }
96 //--------------------------------------------------------------------
97
98
99 //--------------------------------------------------------------------
100 void clitk::DicomRT_ROI::SetBackgroundValueLabelImage(double bg)
101 {
102   mBackgroundValue = bg;
103 }
104 //--------------------------------------------------------------------
105
106
107 //--------------------------------------------------------------------
108 double clitk::DicomRT_ROI::GetBackgroundValueLabelImage() const
109 {
110   return mBackgroundValue;
111 }
112 //--------------------------------------------------------------------
113
114
115 //--------------------------------------------------------------------
116 void clitk::DicomRT_ROI::SetForegroundValueLabelImage(double bg)
117 {
118   mForegroundValue = bg;
119 }
120 //--------------------------------------------------------------------
121
122
123 //--------------------------------------------------------------------
124 double clitk::DicomRT_ROI::GetForegroundValueLabelImage() const
125 {
126   return mForegroundValue;
127 }
128 //--------------------------------------------------------------------
129
130
131 //--------------------------------------------------------------------
132 #if GDCM_MAJOR_VERSION == 2
133 #else
134 void clitk::DicomRT_ROI::Read(std::map<int, std::string> & rois, gdcm::SQItem * item)
135 {
136
137   // Change number if needed
138
139   // TODO
140
141   // ROI number [Referenced ROI Number]
142   mNumber = atoi(item->GetEntryValue(0x3006,0x0084).c_str());
143
144   // Retrieve ROI Name
145   mName = rois[mNumber];
146
147   // ROI Color [ROI Display Color]
148   mColor = clitk::parse_string<double>(item->GetEntryValue(0x3006,0x002a),'\\');
149
150   // Read contours [Contour Sequence]
151   gdcm::SeqEntry * contours=item->GetSeqEntry(0x3006,0x0040);
152   bool contour_processed=false;
153   bool delta_computed=false;
154   double last_z=0;
155   for(gdcm::SQItem* j=contours->GetFirstSQItem(); j!=0; j=contours->GetNextSQItem()) {
156     DicomRT_Contour::Pointer c = DicomRT_Contour::New();
157     bool b = c->Read(j);
158     if (b) {
159       mListOfContours.push_back(c);
160       if (contour_processed) {
161         double delta=c->GetZ() - last_z;
162         if (delta_computed)
163           assert(mZDelta == delta);
164         else
165           mZDelta = delta;
166       } else
167         contour_processed=true;
168       last_z=c->GetZ();
169     }
170   }
171 }
172 #endif
173 //--------------------------------------------------------------------
174
175
176 //--------------------------------------------------------------------
177 void clitk::DicomRT_ROI::SetImage(vvImage * image)
178 {
179   mImage = image;
180 }
181 //--------------------------------------------------------------------
182
183
184 //--------------------------------------------------------------------
185 vtkPolyData * clitk::DicomRT_ROI::GetMesh()
186 {
187   if (!mMeshIsUpToDate) {
188     ComputeMesh();
189   }
190   return mMesh;
191 }
192 //--------------------------------------------------------------------
193 clitk::DicomRT_Contour * clitk::DicomRT_ROI::GetContour(int n)
194 {
195   return mListOfContours[n];
196 }
197
198 //--------------------------------------------------------------------
199 void clitk::DicomRT_ROI::ComputeMesh()
200 {
201   vtkSmartPointer<vtkAppendPolyData> append = vtkSmartPointer<vtkAppendPolyData>::New();
202   for(unsigned int i=0; i<mListOfContours.size(); i++) {
203     append->AddInput(mListOfContours[i]->GetMesh());
204   }
205   append->Update();
206  
207   mMesh = vtkSmartPointer<vtkPolyData>::New();
208   mMesh->DeepCopy(append->GetOutput());
209   mMeshIsUpToDate = true;
210 }
211 //--------------------------------------------------------------------
212
213
214 //--------------------------------------------------------------------
215 void clitk::DicomRT_ROI::SetFromBinaryImage(vvImage * image, int n,
216                                             std::string name,
217                                             std::vector<double> color, 
218                                             std::string filename)
219 {
220
221   // ROI number [Referenced ROI Number]
222   mNumber = n;
223
224   // ROI Name
225   mName = name;
226   mFilename = filename;
227
228   // ROI Color [ROI Display Color]
229   mColor = color;
230
231   // No contours [Contour Sequence]
232   mListOfContours.clear();
233
234   // Set image
235   mImage = image;
236 }
237 //--------------------------------------------------------------------
238
239
240 //--------------------------------------------------------------------
241 vvImage * clitk::DicomRT_ROI::GetImage() const
242 {
243   return mImage;
244 }
245 //--------------------------------------------------------------------