X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkDicomRT_ROI.cxx;fp=tools%2FclitkDicomRT_ROI.cxx;h=d140398e50b7e9d7f1ba36c50b654f27019d5e08;hb=b7ecfab842d12fb1623660e74b859c609293beb3;hp=0000000000000000000000000000000000000000;hpb=8adbd489ccd1f941b1fd6e04c4c2c71b3e22efc6;p=clitk.git diff --git a/tools/clitkDicomRT_ROI.cxx b/tools/clitkDicomRT_ROI.cxx new file mode 100644 index 0000000..d140398 --- /dev/null +++ b/tools/clitkDicomRT_ROI.cxx @@ -0,0 +1,117 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + Main authors : XX XX XX + + Authors belongs to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + - BSD http://www.opensource.org/licenses/bsd-license.php + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + + =========================================================================*/ + +#include "clitkDicomRT_ROI.h" +#include +#include + +//-------------------------------------------------------------------- +clitk::DicomRT_ROI::DicomRT_ROI() { + mName = "NoName"; + mNumber = -1; + mColor.resize(3); + mColor[0] = mColor[1] = mColor[2] = 0; + mMeshIsUpToDate = false; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +clitk::DicomRT_ROI::~DicomRT_ROI() { + +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +int clitk::DicomRT_ROI::GetROINumber() const { + return mNumber; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +const std::string & clitk::DicomRT_ROI::GetName() const { + return mName; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +const std::vector & clitk::DicomRT_ROI::GetDisplayColor() const { + return mColor; +} +//-------------------------------------------------------------------- + + + +//-------------------------------------------------------------------- +void clitk::DicomRT_ROI::Print(std::ostream & os) const { + os << "ROI " << mNumber << "\t" << mName + << "\t(" << mColor[0] << " " << mColor[1] << " " << mColor[2] << ")" + << "\t Contours = " << mListOfContours.size() << std::endl; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::DicomRT_ROI::Read(std::map & rois, gdcm::SQItem * item) { + + // ROI number [Referenced ROI Number] + mNumber = atoi(item->GetEntryValue(0x3006,0x0084).c_str()); + + // Retrieve ROI Name + mName = rois[mNumber]; + + // ROI Color [ROI Display Color] + mColor = clitk::parse_string(item->GetEntryValue(0x3006,0x002a),'\\'); + + // Read contours [Contour Sequence] + gdcm::SeqEntry * contours=item->GetSeqEntry(0x3006,0x0040); + for(gdcm::SQItem* j=contours->GetFirstSQItem();j!=0;j=contours->GetNextSQItem()) { + DicomRT_Contour * c = new DicomRT_Contour; + bool b = c->Read(j); + if (b) mListOfContours.push_back(c); + } +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +vtkPolyData * clitk::DicomRT_ROI::GetMesh() { + if (!mMeshIsUpToDate) { + ComputeMesh(); + } + return mMesh; +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +void clitk::DicomRT_ROI::ComputeMesh() { + vtkAppendPolyData * append = vtkAppendPolyData::New(); + for(unsigned int i=0; iAddInput(mListOfContours[i]->GetMesh()); + } + append->Update(); + mMesh = append->GetOutput(); + mMeshIsUpToDate = true; +} +//-------------------------------------------------------------------- +