diff OrthancCppClient/Series.cpp @ 502:ee33c7d0cda0 laaw

laaw runs correctly on the c++ api
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Jul 2013 09:32:03 +0200
parents ec19da4a1fe7
children 50d9660f960c
line wrap: on
line diff
--- a/OrthancCppClient/Series.cpp	Wed Jul 17 22:31:22 2013 +0200
+++ b/OrthancCppClient/Series.cpp	Thu Jul 18 09:32:03 2013 +0200
@@ -174,13 +174,17 @@
         return true;
       }
 
+      Instance& i1 = GetInstance(0);
+
       for (unsigned int i = 0; i < GetInstanceCount(); i++)
       {
-        if (GetInstance(0).GetTagAsString("Columns") != GetInstance(i).GetTagAsString("Columns") ||
-            GetInstance(0).GetTagAsString("Rows") != GetInstance(i).GetTagAsString("Rows") ||
-            GetInstance(0).GetTagAsString("ImageOrientationPatient") != GetInstance(i).GetTagAsString("ImageOrientationPatient") ||
-            GetInstance(0).GetTagAsString("SliceThickness") != GetInstance(i).GetTagAsString("SliceThickness") ||
-            GetInstance(0).GetTagAsString("PixelSpacing") != GetInstance(i).GetTagAsString("PixelSpacing"))
+        Instance& i2 = GetInstance(1);
+
+        if (std::string(i1.GetTagAsString("Columns")) != std::string(i2.GetTagAsString("Columns")) ||
+            std::string(i1.GetTagAsString("Rows")) != std::string(i2.GetTagAsString("Rows")) ||
+            std::string(i1.GetTagAsString("ImageOrientationPatient")) != std::string(i2.GetTagAsString("ImageOrientationPatient")) ||
+            std::string(i1.GetTagAsString("SliceThickness")) != std::string(i2.GetTagAsString("SliceThickness")) ||
+            std::string(i1.GetTagAsString("PixelSpacing")) != std::string(i2.GetTagAsString("PixelSpacing")))
         {
           return false;
         }              
@@ -229,6 +233,7 @@
     ReadSeries();
     status_ = Status3DImage_NotTested;
     url_ = std::string(connection_.GetOrthancUrl()) + "/series/" + id_;
+    isVoxelSizeRead_ = false;
 
     instances_.SetThreadCount(connection.GetThreadCount());
   }
@@ -274,15 +279,21 @@
       return GetInstance(0).GetTagAsInt("Rows");
   }
 
-  void Series::GetVoxelSize(float& sizeX, float& sizeY, float& sizeZ)
+  void Series::LoadVoxelSize()
   {
+    if (isVoxelSizeRead_)
+    {
+      return;
+    }
+
     Check3DImage();
 
     if (GetInstanceCount() == 0)
     {
-      sizeX = 0;
-      sizeY = 0;
-      sizeZ = 0;
+      // Empty image, use some default value
+      voxelSizeX_ = 1;
+      voxelSizeY_ = 1;
+      voxelSizeZ_ = 1;
     }
     else
     {
@@ -294,15 +305,17 @@
         std::string sy = s.substr(0, pos);
         std::string sx = s.substr(pos + 1);
 
-        sizeX = boost::lexical_cast<float>(sx);
-        sizeY = boost::lexical_cast<float>(sy);
-        sizeZ = GetInstance(0).GetTagAsFloat("SliceThickness");
+        voxelSizeX_ = boost::lexical_cast<float>(sx);
+        voxelSizeY_ = boost::lexical_cast<float>(sy);
+        voxelSizeZ_ = GetInstance(0).GetTagAsFloat("SliceThickness");
       }
       catch (boost::bad_lexical_cast)
       {
         throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
       }
     }
+
+    isVoxelSizeRead_ = true;
   }
 
 
@@ -426,4 +439,22 @@
     }
   }
 
+  float Series::GetVoxelSizeX()
+  {
+    LoadVoxelSize();
+    return voxelSizeX_;
+  }
+
+  float Series::GetVoxelSizeY()
+  {
+    LoadVoxelSize();
+    return voxelSizeY_;
+  }
+
+  float Series::GetVoxelSizeZ()
+  {
+    LoadVoxelSize();
+    return voxelSizeZ_;
+  }
+
 }