diff OrthancStone/Sources/Toolbox/DicomStructureSet2.cpp @ 1834:126522623e20

replaced OrthancStone::DicomPath by new class Orthanc::DicomPath from orthanc framework
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 10 Jun 2021 12:07:04 +0200
parents 946eb7200b82
children f6eaf617d8e8
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/DicomStructureSet2.cpp	Mon Jun 07 18:47:10 2021 +0200
+++ b/OrthancStone/Sources/Toolbox/DicomStructureSet2.cpp	Thu Jun 10 12:07:04 2021 +0200
@@ -31,23 +31,24 @@
 #include <Toolbox.h>
 #include <DicomFormat/DicomTag.h>
 
-#include <FullOrthancDataset.h>
-#include <DicomDatasetReader.h>
+#include "DicomStructure2.h"
+#include "GenericToolbox.h"
+#include "OrthancDatasets/DicomDatasetReader.h"
 
 namespace OrthancStone
 {
-  static const OrthancPlugins::DicomTag DICOM_TAG_CONTOUR_GEOMETRIC_TYPE(0x3006, 0x0042);
-  static const OrthancPlugins::DicomTag DICOM_TAG_CONTOUR_IMAGE_SEQUENCE(0x3006, 0x0016);
-  static const OrthancPlugins::DicomTag DICOM_TAG_CONTOUR_SEQUENCE(0x3006, 0x0040);
-  static const OrthancPlugins::DicomTag DICOM_TAG_CONTOUR_DATA(0x3006, 0x0050);
-  static const OrthancPlugins::DicomTag DICOM_TAG_NUMBER_OF_CONTOUR_POINTS(0x3006, 0x0046);
-  static const OrthancPlugins::DicomTag DICOM_TAG_REFERENCED_SOP_INSTANCE_UID(0x0008, 0x1155);
-  static const OrthancPlugins::DicomTag DICOM_TAG_ROI_CONTOUR_SEQUENCE(0x3006, 0x0039);
-  static const OrthancPlugins::DicomTag DICOM_TAG_ROI_DISPLAY_COLOR(0x3006, 0x002a);
-  static const OrthancPlugins::DicomTag DICOM_TAG_ROI_NAME(0x3006, 0x0026);
-  static const OrthancPlugins::DicomTag DICOM_TAG_RT_ROI_INTERPRETED_TYPE(0x3006, 0x00a4);
-  static const OrthancPlugins::DicomTag DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE(0x3006, 0x0080);
-  static const OrthancPlugins::DicomTag DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE(0x3006, 0x0020);
+  static const Orthanc::DicomTag DICOM_TAG_CONTOUR_GEOMETRIC_TYPE(0x3006, 0x0042);
+  static const Orthanc::DicomTag DICOM_TAG_CONTOUR_IMAGE_SEQUENCE(0x3006, 0x0016);
+  static const Orthanc::DicomTag DICOM_TAG_CONTOUR_SEQUENCE(0x3006, 0x0040);
+  static const Orthanc::DicomTag DICOM_TAG_CONTOUR_DATA(0x3006, 0x0050);
+  static const Orthanc::DicomTag DICOM_TAG_NUMBER_OF_CONTOUR_POINTS(0x3006, 0x0046);
+  static const Orthanc::DicomTag DICOM_TAG_REFERENCED_SOP_INSTANCE_UID(0x0008, 0x1155);
+  static const Orthanc::DicomTag DICOM_TAG_ROI_CONTOUR_SEQUENCE(0x3006, 0x0039);
+  static const Orthanc::DicomTag DICOM_TAG_ROI_DISPLAY_COLOR(0x3006, 0x002a);
+  static const Orthanc::DicomTag DICOM_TAG_ROI_NAME(0x3006, 0x0026);
+  static const Orthanc::DicomTag DICOM_TAG_RT_ROI_INTERPRETED_TYPE(0x3006, 0x00a4);
+  static const Orthanc::DicomTag DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE(0x3006, 0x0080);
+  static const Orthanc::DicomTag DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE(0x3006, 0x0020);
 
   static inline uint8_t ConvertAndClipToByte(double v)
   {
@@ -66,21 +67,21 @@
   }
 
   static bool ReadDicomToVector(Vector& target,
-    const OrthancPlugins::IDicomDataset& dataset,
-    const OrthancPlugins::DicomPath& tag)
+                                const IDicomDataset& dataset,
+                                const Orthanc::DicomPath& tag)
   {
     std::string value;
     return (dataset.GetStringValue(value, tag) &&
-      GenericToolbox::FastParseVector(target, value));
+            GenericToolbox::FastParseVector(target, value));
   }
 
 
-  void DicomPathToString(std::string& s, const OrthancPlugins::DicomPath& dicomPath)
+  void DicomPathToString(std::string& s, const Orthanc::DicomPath& dicomPath)
   {
     std::stringstream tmp;
     for (size_t i = 0; i < dicomPath.GetPrefixLength(); ++i)
     {
-      OrthancPlugins::DicomTag tag = dicomPath.GetPrefixTag(i);
+      Orthanc::DicomTag tag = dicomPath.GetPrefixTag(i);
 
       // We use this other object to be able to use GetMainTagsName
       // and Format
@@ -88,13 +89,13 @@
       size_t index = dicomPath.GetPrefixIndex(i);
       tmp << tag2.GetMainTagsName() << " (" << tag2.Format() << ") [" << index << "] / ";
     }
-    const OrthancPlugins::DicomTag& tag = dicomPath.GetFinalTag();
+    const Orthanc::DicomTag& tag = dicomPath.GetFinalTag();
     Orthanc::DicomTag tag2(tag.GetGroup(), tag.GetElement());
     tmp << tag2.GetMainTagsName() << " (" << tag2.Format() << ")";
     s = tmp.str();
   }
 
-  std::ostream& operator<<(std::ostream& s, const OrthancPlugins::DicomPath& dicomPath)
+  std::ostream& operator<<(std::ostream& s, const Orthanc::DicomPath& dicomPath)
   {
     std::string tmp;
     DicomPathToString(tmp, dicomPath);
@@ -114,7 +115,7 @@
 
   }
 
-  void DicomStructureSet2::SetContents(const OrthancPlugins::FullOrthancDataset& tags)
+  void DicomStructureSet2::SetContents(const FullOrthancDataset& tags)
   {
     FillStructuresFromDataset(tags);
     ComputeDependentProperties();
@@ -128,9 +129,9 @@
     }
   }
 
-  void DicomStructureSet2::FillStructuresFromDataset(const OrthancPlugins::FullOrthancDataset& tags)
+  void DicomStructureSet2::FillStructuresFromDataset(const FullOrthancDataset& tags)
   {
-    OrthancPlugins::DicomDatasetReader reader(tags);
+    DicomDatasetReader reader(tags);
 
     // a few sanity checks
     size_t count = 0, tmp = 0;
@@ -138,11 +139,11 @@
     //  DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE (0x3006, 0x0080);
     //  DICOM_TAG_ROI_CONTOUR_SEQUENCE         (0x3006, 0x0039);
     //  DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE   (0x3006, 0x0020);
-    if (!tags.GetSequenceSize(count, DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE) ||
-      !tags.GetSequenceSize(tmp, DICOM_TAG_ROI_CONTOUR_SEQUENCE) ||
-      tmp != count ||
-      !tags.GetSequenceSize(tmp, DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE) ||
-      tmp != count)
+    if (!tags.GetSequenceSize(count, Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE)) ||
+        !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_ROI_CONTOUR_SEQUENCE)) ||
+        tmp != count ||
+        !tags.GetSequenceSize(tmp, Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE)) ||
+        tmp != count)
     {
       throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
     }
@@ -157,21 +158,21 @@
     {
       // (0x3006, 0x0080)[i]/(0x3006, 0x00a4)
       structures_[i].interpretation_ = reader.GetStringValue
-      (OrthancPlugins::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i,
-        DICOM_TAG_RT_ROI_INTERPRETED_TYPE),
-        "No interpretation");
+        (Orthanc::DicomPath(DICOM_TAG_RT_ROI_OBSERVATIONS_SEQUENCE, i,
+                            DICOM_TAG_RT_ROI_INTERPRETED_TYPE),
+         "No interpretation");
 
       // (0x3006, 0x0020)[i]/(0x3006, 0x0026)
       structures_[i].name_ = reader.GetStringValue
-      (OrthancPlugins::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i,
-        DICOM_TAG_ROI_NAME),
-        "No name");
+        (Orthanc::DicomPath(DICOM_TAG_STRUCTURE_SET_ROI_SEQUENCE, i,
+                            DICOM_TAG_ROI_NAME),
+         "No name");
 
       Vector color;
       // (0x3006, 0x0039)[i]/(0x3006, 0x002a)
-      if (ReadDicomToVector(color, tags, OrthancPlugins::DicomPath(
-        DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, DICOM_TAG_ROI_DISPLAY_COLOR)) 
-        && color.size() == 3)
+      if (ReadDicomToVector(color, tags, Orthanc::DicomPath(
+                              DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, DICOM_TAG_ROI_DISPLAY_COLOR)) 
+          && color.size() == 3)
       {
         structures_[i].red_   = ConvertAndClipToByte(color[0]);
         structures_[i].green_ = ConvertAndClipToByte(color[1]);
@@ -187,46 +188,46 @@
       size_t countSlices;
       //  DICOM_TAG_ROI_CONTOUR_SEQUENCE          (0x3006, 0x0039);
       //  DICOM_TAG_CONTOUR_SEQUENCE              (0x3006, 0x0040);
-      if (!tags.GetSequenceSize(countSlices, OrthancPlugins::DicomPath(
-        DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, DICOM_TAG_CONTOUR_SEQUENCE)))
+      if (!tags.GetSequenceSize(countSlices, Orthanc::DicomPath(
+                                  DICOM_TAG_ROI_CONTOUR_SEQUENCE, i, DICOM_TAG_CONTOUR_SEQUENCE)))
       {
         LOG(WARNING) << "DicomStructureSet2::SetContents | structure \"" << structures_[i].name_ << "\" has no slices!";
         countSlices = 0;
       }
 
       LOG(INFO) << "New RT structure: \"" << structures_[i].name_
-        << "\" with interpretation \"" << structures_[i].interpretation_
-        << "\" containing " << countSlices << " slices (color: "
-        << static_cast<int>(structures_[i].red_) << ","
+                << "\" with interpretation \"" << structures_[i].interpretation_
+                << "\" containing " << countSlices << " slices (color: "
+                << static_cast<int>(structures_[i].red_) << ","
         << static_cast<int>(structures_[i].green_) << ","
         << static_cast<int>(structures_[i].blue_) << ")";
 
       // These temporary variables avoid allocating many vectors in the loop below
       
       // (0x3006, 0x0039)[i]/(0x3006, 0x0040)[0]/(0x3006, 0x0046)
-      OrthancPlugins::DicomPath countPointsPath(
+      Orthanc::DicomPath countPointsPath(
         DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
         DICOM_TAG_CONTOUR_SEQUENCE, 0,
         DICOM_TAG_NUMBER_OF_CONTOUR_POINTS);
 
-      OrthancPlugins::DicomPath geometricTypePath(
+      Orthanc::DicomPath geometricTypePath(
         DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
         DICOM_TAG_CONTOUR_SEQUENCE, 0,
         DICOM_TAG_CONTOUR_GEOMETRIC_TYPE);
 
-      OrthancPlugins::DicomPath imageSequencePath(
+      Orthanc::DicomPath imageSequencePath(
         DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
         DICOM_TAG_CONTOUR_SEQUENCE, 0,
         DICOM_TAG_CONTOUR_IMAGE_SEQUENCE);
 
       // (3006,0039)[i] / (0x3006, 0x0040)[0] / (0x3006, 0x0016)[0] / (0x0008, 0x1155)
-      OrthancPlugins::DicomPath referencedInstancePath(
+      Orthanc::DicomPath referencedInstancePath(
         DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
         DICOM_TAG_CONTOUR_SEQUENCE, 0,
         DICOM_TAG_CONTOUR_IMAGE_SEQUENCE, 0,
         DICOM_TAG_REFERENCED_SOP_INSTANCE_UID);
 
-      OrthancPlugins::DicomPath contourDataPath(
+      Orthanc::DicomPath contourDataPath(
         DICOM_TAG_ROI_CONTOUR_SEQUENCE, i,
         DICOM_TAG_CONTOUR_SEQUENCE, 0,
         DICOM_TAG_CONTOUR_DATA);
@@ -272,7 +273,7 @@
 
         Vector points;
         if (!GenericToolbox::FastParseVector(points, slicesData) ||
-          points.size() != 3 * countPoints)
+            points.size() != 3 * countPoints)
         {
           throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);
         }