Skip to content

File Viewer.hpp

File List > astrea > trace > trace > platforms > vehicles > Viewer.hpp

Go to the documentation of this file

#pragma once

#include <string>

#include <astro/astro.fwd.hpp>
#include <astro/platforms/vehicles/Spacecraft.hpp>
#include <astro/state/State.hpp>
#include <astro/state/orbital_data_formats/instances/GeneralPerturbations.hpp>
#include <astro/time/Date.hpp>
#include <astro/types/typedefs.hpp>

#include <trace/platforms/AccessObject.hpp>
#include <trace/platforms/sensors/Sensor.hpp>

namespace astrea {
namespace trace {

class Viewer : public astro::Spacecraft, public AccessObject, public SensorPlatform {

  public:
    Viewer() = default;

    Viewer(const astro::GeneralPerturbations& gp, const astro::AstrodynamicsSystem& system) :
        Spacecraft(gp, system),
        AccessObject()
    {
    }

    ~Viewer() = default;

    std::size_t get_id() const { return Spacecraft::get_id(); }

    std::string get_name() const { return Spacecraft::get_name(); }

    Mass get_mass() const override { return Spacecraft::get_mass(); }

    astro::RadiusVector<astro::frames::earth::icrf> get_inertial_position(const astro::Date& date) const
    {
        return Spacecraft::get_inertial_position(date);
    }

    astro::VelocityVector<astro::frames::earth::icrf> get_inertial_velocity(const astro::Date& date) const
    {
        return Spacecraft::get_inertial_velocity(date);
    }

    // This is so stupid. Why C++ standards committee
    using SensorPlatform::attach_payload;
    using SensorPlatform::get_payloads;
    using Spacecraft::attach_payload;
    using Spacecraft::get_payloads;
};

} // namespace trace
} // namespace astrea