- //----------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------
-#else
- mFile = new gdcm::File;
- mFile->SetFileName(filename.c_str());
- mFile->SetMaxSizeLoadEntry(16384); // Needed ...
- mFile->SetLoadMode(gdcm::LD_NOSHADOW); // don't load shadow tags (in order to save memory)
- mFile->Load();
-
- // Check file type
- //Verify if the file is a RT-Structure-Set dicom file
- if (!gdcm::Util::DicomStringEqual(mFile->GetEntryValue(0x0008,0x0016),"1.2.840.10008.5.1.4.1.1.481.3")) { //SOP clas UID
- std::cerr << "Error. the file " << filename
- << " is not a Dicom Struct ? (must have a SOP Class UID [0008|0016] = 1.2.840.10008.5.1.4.1.1.481.3 ==> [RT Structure Set Storage])"
- << std::endl;
- exit(0);
- }
- if (!gdcm::Util::DicomStringEqual(mFile->GetEntryValue(0x0008,0x0060),"RTSTRUCT")) { //SOP clas UID
- std::cerr << "Error. the file " << filename
- << " is not a Dicom Struct ? (must have 0x0008,0x0060 = RTSTRUCT [RT Structure Set Storage])"
- << std::endl;
- exit(0);
- }
-
- // Read global info
- mStudyID = mFile->GetValEntry(0x0020,0x0010)->GetValue();
- mStudyTime = mFile->GetValEntry(0x008,0x0020)->GetValue();
- mStudyDate = mFile->GetValEntry(0x008,0x0030)->GetValue();
- mLabel = mFile->GetValEntry(0x3006,0x002)->GetValue();
- if (!mFile->GetValEntry(0x3006,0x004)) {
- mName = "Anonymous";
- }
- else {
- mName = mFile->GetValEntry(0x3006,0x004)->GetValue();
- }
- mTime = mFile->GetValEntry(0x3006,0x009)->GetValue();
-
- //----------------------------------
- // Read all ROI Names and number
- // 0x3006,0x0020 = [ Structure Set ROI Sequence ]
- gdcm::SeqEntry * roi_seq=mFile->GetSeqEntry(0x3006,0x0020);
- assert(roi_seq); // TODO error message
- for (gdcm::SQItem* r=roi_seq->GetFirstSQItem(); r!=0; r=roi_seq->GetNextSQItem()) {
- std::string name = r->GetEntryValue(0x3006,0x0026); // 0x3006,0x0026 = [ROI Name]
- int nb = atoi(r->GetEntryValue(0x3006,0x0022).c_str()); // 0x3006,0x0022 = [ROI Number]
- // Check if such a number already exist
- if (mMapOfROIName.find(nb) != mMapOfROIName.end()) {
- std::cerr << "WARNING. A Roi already exist with the number "
- << nb << ". I replace." << std::endl;
- }
- // Add in map
- mMapOfROIName[nb] = name;
- }
-
- //----------------------------------
- // Read all ROI
- // 0x3006,0x0039 = [ ROI Contour Sequence ]
- gdcm::SeqEntry * roi_contour_seq=mFile->GetSeqEntry(0x3006,0x0039);
- assert(roi_contour_seq); // TODO error message
- int n=0;
- for (gdcm::SQItem* r=roi_contour_seq->GetFirstSQItem(); r!=0; r=roi_contour_seq->GetNextSQItem()) {
- DicomRT_ROI::Pointer roi = DicomRT_ROI::New();
- roi->Read(mMapOfROIName, r);
- mROIs[roi->GetROINumber()] = roi;
- n++;
- }
-
-#endif