diff Framework/Toolbox/GeometryToolbox.cpp @ 1477:5732edec7cbd

sorting frames in 3D
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 18 Jun 2020 15:48:59 +0200
parents 30deba7bc8e2
children
line wrap: on
line diff
--- a/Framework/Toolbox/GeometryToolbox.cpp	Wed Jun 17 18:21:26 2020 +0200
+++ b/Framework/Toolbox/GeometryToolbox.cpp	Thu Jun 18 15:48:59 2020 +0200
@@ -534,5 +534,39 @@
            boost::numeric::ublas::prod(k, k) / (1 + cosine));
 #endif
     }
+
+    
+    void ComputeNormalFromCosines(Vector& normal,
+                                  const Vector& cosines)
+    {
+      if (cosines.size() != 6)
+      {
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+      }
+      else
+      {
+        normal.resize(3);
+        normal[0] = cosines[1] * cosines[5] - cosines[2] * cosines[4];
+        normal[1] = cosines[2] * cosines[3] - cosines[0] * cosines[5];
+        normal[2] = cosines[0] * cosines[4] - cosines[1] * cosines[3];
+      }
+    }
+
+    
+    bool ComputeNormal(Vector& normal,
+                       const Orthanc::DicomMap& dicom)
+    {
+      Vector cosines;
+      if (LinearAlgebra::ParseVector(cosines, dicom, Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT) &&
+          cosines.size() == 6)
+      {
+        ComputeNormalFromCosines(normal, cosines);
+        return true;
+      }
+      else
+      {
+        return false;
+      }
+    }
   }
 }