diff Core/DicomParsing/FromDcmtkBridge.cpp @ 3195:880e4161c312

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 05 Feb 2019 20:44:26 +0100
parents 47ef29168698
children 7724ed267b5c
line wrap: on
line diff
--- a/Core/DicomParsing/FromDcmtkBridge.cpp	Tue Feb 05 18:34:27 2019 +0100
+++ b/Core/DicomParsing/FromDcmtkBridge.cpp	Tue Feb 05 20:44:26 2019 +0100
@@ -2253,7 +2253,7 @@
           }
           else
           {
-            visitor.VisitUnknown(parentTags, parentIndexes, tag, vr);
+            visitor.VisitNotSupported(parentTags, parentIndexes, tag, vr);
           }
 
           break;
@@ -2405,7 +2405,8 @@
             }
           }
 
-          visitor.VisitAttributes(parentTags, parentIndexes, tag, vr, values);
+          assert(vr == ValueRepresentation_AttributeTag);
+          visitor.VisitAttributes(parentTags, parentIndexes, tag, values);
           break;
         }
 
@@ -2437,7 +2438,7 @@
         case EVR_pixelItem:  // used internally for pixel items in a compressed image
         case EVR_PixelData:  // used internally for uncompressed pixeld data
         case EVR_OverlayData:  // used internally for overlay data
-          visitor.VisitUnknown(parentTags, parentIndexes, tag, vr);
+          visitor.VisitNotSupported(parentTags, parentIndexes, tag, vr);
           return;
 
 
@@ -2481,16 +2482,23 @@
       // etc. are not." The following dynamic_cast is thus OK.
       DcmSequenceOfItems& sequence = dynamic_cast<DcmSequenceOfItems&>(element);
 
-      std::vector<DicomTag> tags = parentTags;
-      std::vector<size_t> indexes = parentIndexes;
-      tags.push_back(tag);
-      indexes.push_back(0);
-
-      for (unsigned long i = 0; i < sequence.card(); i++)
+      if (sequence.card() == 0)
+      {
+        visitor.VisitEmptySequence(parentTags, parentIndexes, tag);
+      }
+      else
       {
-        indexes.back() = static_cast<size_t>(i);
-        DcmItem* child = sequence.getItem(i);
-        ApplyVisitorToDataset(*child, visitor, tags, indexes, encoding);
+        std::vector<DicomTag> tags = parentTags;
+        std::vector<size_t> indexes = parentIndexes;
+        tags.push_back(tag);
+        indexes.push_back(0);
+
+        for (unsigned long i = 0; i < sequence.card(); i++)
+        {
+          indexes.back() = static_cast<size_t>(i);
+          DcmItem* child = sequence.getItem(i);
+          ApplyVisitorToDataset(*child, visitor, tags, indexes, encoding);
+        }
       }
     }
   }