From: dsarrut Date: Thu, 26 May 2011 06:55:24 +0000 (+0200) Subject: Do not segfault any more if a struct exist with no contours. Ok for GDCM1 and 2. X-Git-Tag: v1.3.0~338^2~11 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=0c188476ce13a5f3304ce53a420e082ef65972f5;p=clitk.git Do not segfault any more if a struct exist with no contours. Ok for GDCM1 and 2. --- diff --git a/common/clitkDicomRT_ROI.cxx b/common/clitkDicomRT_ROI.cxx index 25a2f43..ef463ce 100644 --- a/common/clitkDicomRT_ROI.cxx +++ b/common/clitkDicomRT_ROI.cxx @@ -163,6 +163,8 @@ void clitk::DicomRT_ROI::Read(std::map & rois, gdcm::Item cons gdcm::Tag tcsq(0x3006,0x0040); if( !nestedds.FindDataElement( tcsq ) ) { + std::cerr << "Warning. Could not read contour for structure <" << mName << ">, number" << mNumber << " ? I ignore it" << std::endl; + return; } const gdcm::DataElement& csq = nestedds.GetDataElement( tcsq ); gdcm::SmartPointer sqi2 = csq.GetValueAsSQ(); @@ -176,22 +178,22 @@ void clitk::DicomRT_ROI::Read(std::map & rois, gdcm::Item cons double last_z=0; for(unsigned int i = 0; i < nitems; ++i) { - const gdcm::Item & j = sqi2->GetItem(i+1); // Item start at #1 - DicomRT_Contour::Pointer c = DicomRT_Contour::New(); - bool b = c->Read(j); - if (b) { - mListOfContours.push_back(c); - if (contour_processed) { - double delta=c->GetZ() - last_z; - if (delta_computed) - assert(mZDelta == delta); - else - mZDelta = delta; - } else - contour_processed=true; - last_z=c->GetZ(); + const gdcm::Item & j = sqi2->GetItem(i+1); // Item start at #1 + DicomRT_Contour::Pointer c = DicomRT_Contour::New(); + bool b = c->Read(j); + if (b) { + mListOfContours.push_back(c); + if (contour_processed) { + double delta=c->GetZ() - last_z; + if (delta_computed) + assert(mZDelta == delta); + else + mZDelta = delta; + } else + contour_processed=true; + last_z=c->GetZ(); + } } - } } #else @@ -213,25 +215,30 @@ void clitk::DicomRT_ROI::Read(std::map & rois, gdcm::SQItem * // Read contours [Contour Sequence] gdcm::SeqEntry * contours=item->GetSeqEntry(0x3006,0x0040); - bool contour_processed=false; - bool delta_computed=false; - double last_z=0; - for(gdcm::SQItem* j=contours->GetFirstSQItem(); j!=0; j=contours->GetNextSQItem()) { - DicomRT_Contour::Pointer c = DicomRT_Contour::New(); - bool b = c->Read(j); - if (b) { - mListOfContours.push_back(c); - if (contour_processed) { - double delta=c->GetZ() - last_z; - if (delta_computed) - assert(mZDelta == delta); - else - mZDelta = delta; - } else - contour_processed=true; - last_z=c->GetZ(); + if (contours) { + bool contour_processed=false; + bool delta_computed=false; + double last_z=0; + for(gdcm::SQItem* j=contours->GetFirstSQItem(); j!=0; j=contours->GetNextSQItem()) { + DicomRT_Contour::Pointer c = DicomRT_Contour::New(); + bool b = c->Read(j); + if (b) { + mListOfContours.push_back(c); + if (contour_processed) { + double delta=c->GetZ() - last_z; + if (delta_computed) + assert(mZDelta == delta); + else + mZDelta = delta; + } else + contour_processed=true; + last_z=c->GetZ(); + } } } + else { + std::cerr << "Warning. Could not read contour for structure <" << mName << ">, number" << mNumber << " ? I ignore it" << std::endl; + } } #endif //--------------------------------------------------------------------