.. _program_listing_file_interfaces_cesium.h: Program Listing for File cesium.h ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``interfaces/cesium.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once // Suppress warnings from crow third-party library #ifdef __GNUC__ # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wuninitialized" # pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif #ifdef __clang__ # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wuninitialized" #endif #include #ifdef __GNUC__ # pragma GCC diagnostic pop #endif #ifdef __clang__ # pragma clang diagnostic pop #endif #include #include #include #include #include #include #include #include #include "lupnt/core/constants.h" #include "lupnt/core/definitions.h" namespace lupnt { struct Entity { std::string id; std::string name; VecX times; MatX3 positions; std::vector color; std::string description; BodyId body_id; std::string initial_time_utc; int size; }; class CesiumViewer { public: CesiumViewer(int port = 8080, const std::string& host = "127.0.0.1"); ~CesiumViewer(); void Run(); void AddEntity(const VecX& times, const MatX3& positions, const std::string& entity_id = "Entity", const std::string& name = "Entity", const std::vector& color = {255, 0, 255}, const std::string& description = "Entity orbit", BodyId body_id = BodyId::MOON, int size = 5); void ClearEntities(); void Stop(); private: crow::SimpleApp app_; std::filesystem::path static_path_; std::string host_; int port_; std::vector entities_; std::mutex mutex_; std::thread server_thread_; bool running_ = false; void SetupRoutes(); std::string CreateCzmlDataForEntity(const Entity& entity); static std::chrono::system_clock::time_point ParseIso8601(const std::string& s); }; } // namespace lupnt