diff Framework/Toolbox/OrthancSeriesLoader.cpp @ 32:517c46f527cd

sync
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 19 Dec 2016 11:00:23 +0100
parents 9aace933cb64
children 6465fbd23bce
line wrap: on
line diff
--- a/Framework/Toolbox/OrthancSeriesLoader.cpp	Fri Dec 16 15:41:20 2016 +0100
+++ b/Framework/Toolbox/OrthancSeriesLoader.cpp	Mon Dec 19 11:00:23 2016 +0100
@@ -37,6 +37,7 @@
 #include "../../Resources/Orthanc/Core/Images/ImageProcessing.h"
 #include "../../Resources/Orthanc/Core/Logging.h"
 #include "../../Resources/Orthanc/Core/OrthancException.h"
+#include "../../Resources/Orthanc/Plugins/Samples/Common/FullOrthancDataset.h"
 #include "DicomFrameConverter.h"
 
 namespace OrthancStone
@@ -361,28 +362,33 @@
       geometry_.AddSlice(slices_->GetSlice(i).GetGeometry());
     }
 
-    std::auto_ptr<DicomDataset> dataset(new DicomDataset(orthanc_, slices_->GetSlice(0).GetInstanceId()));
-    if (!dataset->HasTag(DICOM_TAG_ROWS) ||
-        !dataset->HasTag(DICOM_TAG_COLUMNS))
+    std::string uri = "/instances/" + slices_->GetSlice(0).GetInstanceId() + "/tags";
+
+    OrthancPlugins::FullOrthancDataset dataset(orthanc_, uri);
+    OrthancPlugins::DicomDatasetReader reader(dataset);
+
+    if (!reader.GetUnsignedIntegerValue(width_, OrthancPlugins::DICOM_TAG_COLUMNS) ||
+        !reader.GetUnsignedIntegerValue(height_, OrthancPlugins::DICOM_TAG_ROWS))
     {
       throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentTag);
     }
 
     DicomFrameConverter converter;
-    converter.ReadParameters(*dataset);
-
+    converter.ReadParameters(dataset);
     format_ = converter.GetExpectedPixelFormat();
-    width_ = dataset->GetUnsignedIntegerValue(DICOM_TAG_COLUMNS);
-    height_ = dataset->GetUnsignedIntegerValue(DICOM_TAG_ROWS);
   }
     
 
-  DicomDataset* OrthancSeriesLoader::DownloadDicom(size_t index)
+  OrthancPlugins::IDicomDataset* OrthancSeriesLoader::DownloadDicom(size_t index)
   {
-    std::auto_ptr<DicomDataset> dataset(new DicomDataset(orthanc_, slices_->GetSlice(index).GetInstanceId()));
+    std::string uri = "/instances/" + slices_->GetSlice(index).GetInstanceId() + "/tags";
 
-    if (dataset->HasTag(DICOM_TAG_NUMBER_OF_FRAMES) &&
-        dataset->GetUnsignedIntegerValue(DICOM_TAG_NUMBER_OF_FRAMES) != 1)
+    std::auto_ptr<OrthancPlugins::IDicomDataset> dataset(new OrthancPlugins::FullOrthancDataset(orthanc_, uri));
+    OrthancPlugins::DicomDatasetReader reader(*dataset);
+
+    unsigned int frames;
+    if (reader.GetUnsignedIntegerValue(frames, OrthancPlugins::DICOM_TAG_NUMBER_OF_FRAMES) &&
+        frames != 1)
     {
       LOG(ERROR) << "One instance in this series has more than 1 frame";
       throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat);