comparison 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
comparison
equal deleted inserted replaced
1476:4db187d29731 1477:5732edec7cbd
532 r = (boost::numeric::ublas::identity_matrix<double>(3) + 532 r = (boost::numeric::ublas::identity_matrix<double>(3) +
533 k + 533 k +
534 boost::numeric::ublas::prod(k, k) / (1 + cosine)); 534 boost::numeric::ublas::prod(k, k) / (1 + cosine));
535 #endif 535 #endif
536 } 536 }
537
538
539 void ComputeNormalFromCosines(Vector& normal,
540 const Vector& cosines)
541 {
542 if (cosines.size() != 6)
543 {
544 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
545 }
546 else
547 {
548 normal.resize(3);
549 normal[0] = cosines[1] * cosines[5] - cosines[2] * cosines[4];
550 normal[1] = cosines[2] * cosines[3] - cosines[0] * cosines[5];
551 normal[2] = cosines[0] * cosines[4] - cosines[1] * cosines[3];
552 }
553 }
554
555
556 bool ComputeNormal(Vector& normal,
557 const Orthanc::DicomMap& dicom)
558 {
559 Vector cosines;
560 if (LinearAlgebra::ParseVector(cosines, dicom, Orthanc::DICOM_TAG_IMAGE_ORIENTATION_PATIENT) &&
561 cosines.size() == 6)
562 {
563 ComputeNormalFromCosines(normal, cosines);
564 return true;
565 }
566 else
567 {
568 return false;
569 }
570 }
537 } 571 }
538 } 572 }