changeset 2180:356ae7ad47e4

fix
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 26 Nov 2024 14:39:09 +0100 (3 months ago)
parents dd08f4f17a7a
children eae006bfeea6
files OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp OrthancStone/Sources/Toolbox/OrthancDatasets/DicomWebDataset.cpp
diffstat 2 files changed, 61 insertions(+), 60 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp	Tue Nov 26 14:02:04 2024 +0100
+++ b/OrthancStone/Sources/Toolbox/DicomInstanceParameters.cpp	Tue Nov 26 14:39:09 2024 +0100
@@ -290,7 +290,7 @@
 
     if (dataset.GetSequenceSize(size, Orthanc::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE)))
     {
-      data_.perFrameWindowing_.resize(data_.numberOfFrames_);
+      data_.perFrameWindowing_.reserve(data_.numberOfFrames_);
 
       // This corresponds to "ParsedDicomFile::GetDefaultWindowing()"
       for (size_t i = 0; i < size; i++)
@@ -308,7 +308,7 @@
                                                             DICOM_TAG_FRAME_VOI_LUT_SEQUENCE_ATTRIBUTE, 0,
                                                             Orthanc::DICOM_TAG_WINDOW_WIDTH)))
         {
-          data_.perFrameWindowing_[i] = Windowing(center, width);
+          data_.perFrameWindowing_.push_back(Windowing(center, width));
         }
       }
     }
--- a/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomWebDataset.cpp	Tue Nov 26 14:02:04 2024 +0100
+++ b/OrthancStone/Sources/Toolbox/OrthancDatasets/DicomWebDataset.cpp	Tue Nov 26 14:39:09 2024 +0100
@@ -138,65 +138,66 @@
       return false;
     }
     else if (value->type() == Json::arrayValue &&
-             value->size() == 1u &&
-             (*value) [0].type() == Json::stringValue && (
-               // This is the list of all the string value representations:
-               // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html
-               vr == "AE" ||
-               vr == "AS" ||
-               vr == "CS" ||
-               vr == "DA" ||
-               vr == "DS" ||
-               vr == "DT" ||
-               vr == "IS" ||
-               vr == "LO" ||
-               vr == "LT" ||
-               vr == "SH" ||
-               vr == "ST" ||
-               vr == "TM" ||
-               vr == "UC" ||
-               vr == "UI" ||
-               vr == "UR" ||
-               vr == "UT"))
+             value->size() == 1u)
     {
-      result = (*value) [0].asString();
-      return true;
-    }
-    else if (value->type() == Json::arrayValue &&
-             value->size() == 1u &&
-             vr == "PN" &&
-             (*value) [0].type() == Json::objectValue &&
-             (*value) [0].isMember(ALPHABETIC) &&
-             (*value) [0][ALPHABETIC].type() == Json::stringValue)
-    {
-      result = (*value) [0][ALPHABETIC].asString();
-      return true;
-    }
-    else if (value->type() == Json::arrayValue &&
-             value->size() == 1u &&
-             (vr == "FD" || vr == "FL") &&
-             (*value) [0].isDouble())
-    {
-      result = boost::lexical_cast<std::string>((*value) [0].asDouble());
-      return true;
-    }
-    else if (value->type() == Json::arrayValue &&
-             value->size() == 1u &&
-             (vr == "UL" ||
-              vr == "US") &&
-             (*value) [0].isUInt64())
-    {
-      result = boost::lexical_cast<std::string>((*value) [0].asUInt64());
-      return true;
-    }
-    else if (value->type() == Json::arrayValue &&
-             value->size() == 1u &&
-             (vr == "SL" ||
-              vr == "SS") &&
-             (*value) [0].isInt64())
-    {
-      result = boost::lexical_cast<std::string>((*value) [0].asInt64());
-      return true;
+      if ((*value) [0].type() == Json::stringValue && (
+            // This is the list of all the string value representations:
+            // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html
+            vr == "AE" ||
+            vr == "AS" ||
+            vr == "CS" ||
+            vr == "DA" ||
+            vr == "DT" ||
+            vr == "LO" ||
+            vr == "LT" ||
+            vr == "SH" ||
+            vr == "ST" ||
+            vr == "TM" ||
+            vr == "UC" ||
+            vr == "UI" ||
+            vr == "UR" ||
+            vr == "UT"))
+      {
+        result = (*value) [0].asString();
+        return true;
+      }
+      else if (vr == "PN" &&
+               (*value) [0].type() == Json::objectValue &&
+               (*value) [0].isMember(ALPHABETIC) &&
+               (*value) [0][ALPHABETIC].type() == Json::stringValue)
+      {
+        result = (*value) [0][ALPHABETIC].asString();
+        return true;
+      }
+      else if ((vr == "DS" ||
+                vr == "FD" ||
+                vr == "FL") &&
+               (*value) [0].isDouble())
+      {
+        result = boost::lexical_cast<std::string>((*value) [0].asDouble());
+        return true;
+      }
+      else if ((vr == "UL" ||
+                vr == "US" ||
+                vr == "UV") &&
+               (*value) [0].isUInt64())
+      {
+        result = boost::lexical_cast<std::string>((*value) [0].asUInt64());
+        return true;
+      }
+      else if ((vr == "IS" ||
+                vr == "SL" ||
+                vr == "SS" ||
+                vr == "SV") &&
+               (*value) [0].isInt64())
+      {
+        result = boost::lexical_cast<std::string>((*value) [0].asInt64());
+        return true;
+      }
+      else
+      {
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, "Unsupported value representation: " + vr);
+      }
     }
     else if (value->type() == Json::arrayValue &&
              vr == "SQ")