Program Listing for File cesium.h¶
↰ Return to documentation for file (interfaces/cesium.h)
#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 <crow.h>
#ifdef __GNUC__
# pragma GCC diagnostic pop
#endif
#ifdef __clang__
# pragma clang diagnostic pop
#endif
#include <Eigen/Dense>
#include <chrono>
#include <filesystem>
#include <mutex>
#include <nlohmann/json.hpp>
#include <string>
#include <thread>
#include <vector>
#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<int> 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<int>& 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<Entity> 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