Commit d8434c15 authored by Jesse Mapel's avatar Jesse Mapel Committed by jlaura
Browse files

Made framer inherit from settable ellipsoid (#228)

* Made framer inherit from settable ellipsoid

* Added radii tests
parent 9598b19b
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
#include <iostream>
#include <vector>
#include "RasterGM.h"
#include <SettableEllipsoid.h>
#include "CorrelationModel.h"
#include "Distortion.h"
#include "Utilities.h"
@@ -18,7 +19,7 @@
using json = nlohmann::json;


class UsgsAstroFrameSensorModel : public csm::RasterGM {
class UsgsAstroFrameSensorModel : public csm::RasterGM, virtual public csm::SettableEllipsoid {
  // UsgsAstroFramePlugin needs to access private members
  friend class UsgsAstroFramePlugin;

@@ -288,6 +289,16 @@ class UsgsAstroFrameSensorModel : public csm::RasterGM {
      //  If the argument state string is empty, the model remains unchanged.
      //<

      // Implement methods from the SettableEllipsoid class

      virtual csm::Ellipsoid getEllipsoid() const;
      //> This method returns the planetary ellipsoid.
      //<

      virtual void setEllipsoid(const csm::Ellipsoid &ellipsoid);
      //> This method sets the planetary ellipsoid.
      //<

    // IMPLEMENT GEOMETRICMODEL PURE VIRTUALS
    // See GeometricModel.h for documentation
    virtual csm::EcefCoord getReferencePoint() const;
+15 −0
Original line number Diff line number Diff line
@@ -1170,6 +1170,21 @@ std::vector<double> UsgsAstroFrameSensorModel::getCrossCovarianceMatrix(
}


csm::Ellipsoid UsgsAstroFrameSensorModel::getEllipsoid() const {
   MESSAGE_LOG(this->m_logger, "Accessing ellipsoid radii {} {}",
               m_majorAxis, m_minorAxis);
   return csm::Ellipsoid(m_majorAxis, m_minorAxis);
}


void UsgsAstroFrameSensorModel::setEllipsoid(const csm::Ellipsoid &ellipsoid) {
   MESSAGE_LOG(this->m_logger, "Setting ellipsoid radii {} {}",
               ellipsoid.getSemiMajorRadius(), ellipsoid.getSemiMinorRadius());
   m_majorAxis = ellipsoid.getSemiMajorRadius();
   m_minorAxis = ellipsoid.getSemiMinorRadius();
}


void UsgsAstroFrameSensorModel::calcRotationMatrix(
    double m[3][3]) const {
  MESSAGE_LOG(this->m_logger, "Calculating rotation matrix");
+14 −0
Original line number Diff line number Diff line
@@ -95,6 +95,20 @@ TEST_F(OrbitalFrameSensorModel, Center) {
   EXPECT_DOUBLE_EQ(groundPt.z, 0);
}

TEST_F(FrameSensorModel, Radii) {
   csm::Ellipsoid ellipsoid = sensorModel->getEllipsoid();
   EXPECT_DOUBLE_EQ(ellipsoid.getSemiMajorRadius(), 10);
   EXPECT_DOUBLE_EQ(ellipsoid.getSemiMinorRadius(), 10);
}

TEST_F(FrameSensorModel, SetRadii) {
   csm::Ellipsoid ellipsoid1(1000, 1500);
   sensorModel->setEllipsoid(ellipsoid1);
   csm::Ellipsoid ellipsoid2 = sensorModel->getEllipsoid();
   EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMajorRadius(), 1000);
   EXPECT_DOUBLE_EQ(ellipsoid2.getSemiMinorRadius(), 1500);
}

TEST_F(OrbitalFrameSensorModel, GroundPartials) {
   csm::EcefCoord groundPt(1000000.0, 0.0, 0.0);
   std::vector<double> partials = sensorModel->computeGroundPartials(groundPt);