1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
3 Main authors : XX XX XX
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
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.
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
18 =========================================================================*/
20 #include "clitkDicomRT_ROI.h"
21 #include <vtkSmartPointer.h>
22 #include <vtkAppendPolyData.h>
24 //--------------------------------------------------------------------
25 clitk::DicomRT_ROI::DicomRT_ROI() {
29 mColor[0] = mColor[1] = mColor[2] = 0;
30 mMeshIsUpToDate = false;
32 //--------------------------------------------------------------------
35 //--------------------------------------------------------------------
36 clitk::DicomRT_ROI::~DicomRT_ROI() {
39 //--------------------------------------------------------------------
42 //--------------------------------------------------------------------
43 void clitk::DicomRT_ROI::SetDisplayColor(double r, double v, double b) {
49 //--------------------------------------------------------------------
52 //--------------------------------------------------------------------
53 int clitk::DicomRT_ROI::GetROINumber() const {
56 //--------------------------------------------------------------------
59 //--------------------------------------------------------------------
60 const std::string & clitk::DicomRT_ROI::GetName() const {
63 //--------------------------------------------------------------------
66 //--------------------------------------------------------------------
67 const std::vector<double> & clitk::DicomRT_ROI::GetDisplayColor() const {
70 //--------------------------------------------------------------------
73 //--------------------------------------------------------------------
74 void clitk::DicomRT_ROI::Print(std::ostream & os) const {
75 os << "ROI " << mNumber << "\t" << mName
76 << "\t(" << mColor[0] << " " << mColor[1] << " " << mColor[2] << ")"
77 << "\t Contours = " << mListOfContours.size() << std::endl;
79 //--------------------------------------------------------------------
82 //--------------------------------------------------------------------
83 void clitk::DicomRT_ROI::SetBackgroundValueLabelImage(double bg){
84 mBackgroundValue = bg;
86 //--------------------------------------------------------------------
89 //--------------------------------------------------------------------
90 double clitk::DicomRT_ROI::GetBackgroundValueLabelImage() const {
91 return mBackgroundValue;
93 //--------------------------------------------------------------------
96 //--------------------------------------------------------------------
97 void clitk::DicomRT_ROI::Read(std::map<int, std::string> & rois, gdcm::SQItem * item) {
99 // Change number if needed
103 // ROI number [Referenced ROI Number]
104 mNumber = atoi(item->GetEntryValue(0x3006,0x0084).c_str());
107 mName = rois[mNumber];
109 // ROI Color [ROI Display Color]
110 mColor = clitk::parse_string<double>(item->GetEntryValue(0x3006,0x002a),'\\');
112 // Read contours [Contour Sequence]
113 gdcm::SeqEntry * contours=item->GetSeqEntry(0x3006,0x0040);
114 for(gdcm::SQItem* j=contours->GetFirstSQItem();j!=0;j=contours->GetNextSQItem()) {
115 DicomRT_Contour * c = new DicomRT_Contour;
117 if (b) mListOfContours.push_back(c);
120 //--------------------------------------------------------------------
123 //--------------------------------------------------------------------
124 vtkPolyData * clitk::DicomRT_ROI::GetMesh() {
125 if (!mMeshIsUpToDate) {
130 //--------------------------------------------------------------------
133 //--------------------------------------------------------------------
134 void clitk::DicomRT_ROI::ComputeMesh() {
135 vtkAppendPolyData * append = vtkAppendPolyData::New();
136 for(unsigned int i=0; i<mListOfContours.size(); i++) {
137 append->AddInput(mListOfContours[i]->GetMesh());
140 mMesh = append->GetOutput();
141 mMeshIsUpToDate = true;
143 //--------------------------------------------------------------------
146 //--------------------------------------------------------------------
147 void clitk::DicomRT_ROI::SetFromBinaryImage(vvImage::Pointer image, int n,
149 std::vector<double> color) {
151 // ROI number [Referenced ROI Number]
157 // ROI Color [ROI Display Color]
160 // No contours [Contour Sequence]
161 mListOfContours.clear();
166 //--------------------------------------------------------------------
169 //--------------------------------------------------------------------
170 const vvImage::Pointer clitk::DicomRT_ROI::GetImage() const {
173 //--------------------------------------------------------------------