/** * @RDE_HEADER@ * TrajectoryGenerator * $Id$ * $HeadURL$ * $Author$ * Created by Norbert Thoden, SLTE, 2023-11-08 */ #pragma once #include "../logger.h" #include "trajectory_generator_vulcano.h" #include // Lts/DDS/Core/core.hpp for Core::GeoPosition #include #include #include #include #include #include #include // forward namespace ExerciseManagement { namespace Interface { class Dtc; } } // namespace ExerciseManagement namespace AssetManagement { namespace Interface { class Dtc; } } // namespace AssetManagement namespace AreaEffectSimulation { // version 1 using TrajectoryGeoPosition = std::vector; // version 2 using TrajectoryGeoPositionRelTime = std::vector; using QPoint3D = LtsUtils::QPoint3D; // // class TrajectoryGenerator // class TRAJECTORY_EXPORT TrajectoryGenerator : public QObject { public: /*QT_DEPRECATED*/ static TrajectoryGenerator *getInstance(int exerciseId, const std::shared_ptr &exmDtc, const std::shared_ptr &asmDtc); static TrajectoryGenerator *getInstance(); static void cleanup(); void initElevation(LtsElevation::LtsElevationManager *ltsElevationManager); LtsElevation::LtsElevationManager *getElevationManager(); bool hasElevationManager() const; ~TrajectoryGenerator() = default; /*! \name Ideal trajectory using Core::GeoPosition at return trajectory ... */ //@{ bool generateTrajectoryBiedziak(const LtsUtils::QPoint3D &originatorPosition_geo, const LtsUtils::QPoint3D &idealHit_geo, double elevation_angle_degree, // aka beta TrajectoryGeoPosition &trajectoryOut); //@} static bool generateTrajectoryVulcano(const QPoint3D &originatorPosition_geo, const QPoint3D &idealHit_geo, double v0, double betaRad, // Abschussgeschwindigkeit, -winkel ( betaRad ~ elevation_angle_degree double alphaRad, double tapTimeSec, // Fallwinkel, -geschwindigkeit, -zeit TrajectoryGeneratorVulcano::Options options, TrajectoryGeoPositionRelTime &trajectoryTimeAwareOut, Core::GeoPosition &idealTapAbsoluteGeoOut, QString *reasonOut); protected: /*! \name Ideal trajectory */ template bool generateTrajectoryBiedziak(const LtsUtils::QPoint3D &originatorPosition_geo, const LtsUtils::QPoint3D &impactPosition_geo, double elevation_angle_degree, CONT_T &trajectoryOut); protected: explicit TrajectoryGenerator(); public: // For UnitTest: friend class UnitTestTrajectoryHelper; // calculate the z-Values of the trajectory: static QVector trajectoryBiedziak(const double &distance, const double &heightOffset, double elevation_angle_degree, int steps = 72); static const QString string4poly(const QPair> &pair); LtsElevation::LtsElevationManager *m_ltsElevationManager{nullptr}; LOGGER_T m_logger; }; } // namespace AreaEffectSimulation