Mercurial > hg > orthanc-stone
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; + } + } } }