diff Samples/Sdl/Loader.cpp @ 648:1088d4c4d78c

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 13 May 2019 17:19:04 +0200
parents 6af3099ed8da
children 970949ff868a
line wrap: on
line diff
--- a/Samples/Sdl/Loader.cpp	Mon May 13 17:03:46 2019 +0200
+++ b/Samples/Sdl/Loader.cpp	Mon May 13 17:19:04 2019 +0200
@@ -26,6 +26,7 @@
 #include "../../Framework/StoneInitialization.h"
 #include "../../Framework/Toolbox/GeometryToolbox.h"
 #include "../../Framework/Volumes/ImageBuffer3D.h"
+#include "../../Framework/Toolbox/SlicesSorter.h"
 
 // From Orthanc framework
 #include <Core/Compression/GzipCompressor.h>
@@ -1138,7 +1139,8 @@
 
 
 
-  class DicomInstanceParameters : public boost::noncopyable
+  class DicomInstanceParameters :
+    public Orthanc::IDynamicObject  /* to be used as a payload of SlicesSorter */
   {
   private:
     Orthanc::DicomImageInformation    imageInformation_;
@@ -1374,8 +1376,8 @@
 
       double distance;
 
-      return (OrthancStone::CoordinateSystem3D::GetDistance(distance, tmp, plan) &&
-              OrthancStone::LinearAlgebra::IsNear(distance, thickness_ / 2.0));
+      return (OrthancStone::CoordinateSystem3D::GetDistance(distance, tmp, plane) &&
+              distance <= thickness_ / 2.0);
     }
 
     bool IsColor() const
@@ -1491,9 +1493,19 @@
           Orthanc::DicomMap dicom;
           dicom.FromDicomAsJson(value[instances[i]]);
 
-          DicomInstanceParameters instance(dicom);
+          std::auto_ptr<DicomInstanceParameters> instance(new DicomInstanceParameters(dicom));
+
+          OrthancStone::CoordinateSystem3D geometry = instance->GetGeometry();
+          that_.slices_.AddSlice(geometry, instance.release());
+        }
 
+        if (!that_.slices_.Sort())
+        {
+          throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange,
+                                          "Cannot sort the 3D slices of a DICOM series");          
         }
+
+        printf("series sorted\n");
       }
     };
 
@@ -1529,7 +1541,7 @@
 
     bool                                        active_;
     std::auto_ptr<OrthancStone::ImageBuffer3D>  image_;
-
+    OrthancStone::SlicesSorter                  slices_;
 
   public:
     AxialVolumeOrthancLoader(OrthancStone::IObservable& oracle) :