diff Samples/Sdl/Loader.cpp @ 735:c3bbb130abc4

removing dependencies in ImageBuffer3D
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 May 2019 16:15:06 +0200
parents e63c8b9b7b02
children fa5febe0f0c2
line wrap: on
line diff
--- a/Samples/Sdl/Loader.cpp	Tue May 21 15:20:04 2019 +0200
+++ b/Samples/Sdl/Loader.cpp	Tue May 21 16:15:06 2019 +0200
@@ -31,6 +31,7 @@
 #include "../../Framework/StoneInitialization.h"
 #include "../../Framework/Toolbox/GeometryToolbox.h"
 #include "../../Framework/Toolbox/SlicesSorter.h"
+#include "../../Framework/Toolbox/VolumeImageGeometry.h"
 #include "../../Framework/Volumes/ImageBuffer3D.h"
 
 // From Orthanc framework
@@ -1269,6 +1270,7 @@
   {
   private:
     std::auto_ptr<OrthancStone::ImageBuffer3D>  image_;
+    std::auto_ptr<OrthancStone::VolumeImageGeometry>  geometry_;
     std::vector<DicomInstanceParameters*>       slices_;
     uint64_t                                    revision_;
     std::vector<uint64_t>                       slicesRevision_;
@@ -1336,6 +1338,7 @@
     void Clear()
     {
       image_.reset();
+      geometry_.reset();
       
       for (size_t i = 0; i < slices_.size(); i++)
       {
@@ -1386,6 +1389,8 @@
                                         "Cannot sort the 3D slices of a DICOM series");          
       }
 
+      geometry_.reset(new OrthancStone::VolumeImageGeometry);
+
       if (slices.GetSlicesCount() == 0)
       {
         // Empty volume
@@ -1417,9 +1422,10 @@
                                                      parameters.GetImageInformation().GetHeight(),
                                                      slices.GetSlicesCount(), false /* don't compute range */));      
 
-        image_->GetGeometry().SetAxialGeometry(slices.GetSliceGeometry(0));
-        image_->GetGeometry().SetVoxelDimensions(parameters.GetPixelSpacingX(),
-                                                 parameters.GetPixelSpacingY(), spacingZ);
+        geometry_->SetSize(image_->GetWidth(), image_->GetHeight(), image_->GetDepth());
+        geometry_->SetAxialGeometry(slices.GetSliceGeometry(0));
+        geometry_->SetVoxelDimensions(parameters.GetPixelSpacingX(),
+                                      parameters.GetPixelSpacingY(), spacingZ);
       }
       
       image_->Clear();
@@ -1434,7 +1440,8 @@
 
     bool HasGeometry() const
     {
-      return (image_.get() != NULL);
+      return (image_.get() != NULL &&
+              geometry_.get() != NULL);
     }
 
     const OrthancStone::ImageBuffer3D& GetImage() const
@@ -1449,6 +1456,18 @@
       }
     }
 
+    const OrthancStone::VolumeImageGeometry& GetGeometry() const
+    {
+      if (!HasGeometry())
+      {
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
+      }
+      else
+      {
+        return *geometry_;
+      }
+    }
+
     size_t GetSlicesCount() const
     {
       if (!HasGeometry())
@@ -1834,7 +1853,7 @@
         return;
       }
 
-      const OrthancStone::VolumeImageGeometry& geometry = source_.GetVolume().GetImage().GetGeometry();
+      const OrthancStone::VolumeImageGeometry& geometry = source_.GetVolume().GetGeometry();
 
       OrthancStone::VolumeProjection projection;
       unsigned int sliceIndex;