From bff1ada14bc0a3c42cdd9c99932da5a6b679dfb7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 22 Feb 2011 10:53:58 +0000 Subject: [PATCH] Changed the handling of erroneous dicom files so that the loading of a directory of dicom files is not abondonded when one or more erroneous files are encountered. --- src/osgPlugins/dicom/ReaderWriterDICOM.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/osgPlugins/dicom/ReaderWriterDICOM.cpp b/src/osgPlugins/dicom/ReaderWriterDICOM.cpp index 5c1f3786f..4cec450b6 100644 --- a/src/osgPlugins/dicom/ReaderWriterDICOM.cpp +++ b/src/osgPlugins/dicom/ReaderWriterDICOM.cpp @@ -576,13 +576,21 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter unsigned int totalNumSlices = 0; + typedef std::map ErrorMap; + ErrorMap errorMap; + for(Files::iterator itr = files.begin(); itr != files.end(); ++itr) { DcmFileFormat fileformat; - OFCondition status = fileformat.loadFile((*itr).c_str()); - if(!status.good()) return ReadResult::ERROR_IN_READING_FILE; + const std::string& dicom_filename = *itr; + OFCondition status = fileformat.loadFile(dicom_filename.c_str()); + if(!status.good()) + { + errorMap[dicom_filename] = ReadResult::ERROR_IN_READING_FILE; + continue; + } FileInfo fileInfo; fileInfo.filename = *itr; @@ -903,6 +911,16 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter } } + if (!errorMap.empty()) + { + for(ErrorMap::iterator itr = errorMap.begin(); + itr != errorMap.end(); + ++itr) + { + warning()<<"Error in reading file "<first<