.. _program_listing_file_fields2cover_utils_visualizer.h: Program Listing for File visualizer.h ===================================== |exhale_lsh| :ref:`Return to documentation for file ` (``fields2cover/utils/visualizer.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp //============================================================================= // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved // Author: Gonzalo Mier // BSD-3 License //============================================================================= #pragma once #ifndef FIELDS2COVER_UTILS_VISUALIZER_H_ #define FIELDS2COVER_UTILS_VISUALIZER_H_ #include #include #include #include "fields2cover/types.h" namespace f2c { class Visualizer { public: static double getLineWidth() {return 1.0;} static void plot(double x, double y, const std::vector& color = {}); static void plot(const F2CPoint& p, const std::vector& color = {}); static void plot( const F2CSwath& s, const std::vector& color = {}); static void plot(const F2CSwaths& s, const std::vector>& color = {}); static void plot(const F2CSwathsByCells& s, const std::vector>& color = {}); static void plot(const std::vector& vs, const std::vector>& color = {}); static void plot(const F2CLineString& line, const std::vector& color = {}); static void plot(const F2CLinearRing& ring, const std::vector& color = {}); static void plot(const F2CMultiPoint& multipoint, const std::vector& color = {}); static void plot(const F2CMultiLineString& multiline, const std::vector& color = {}); static void plot(const F2CCell& cell, const std::vector& color = {}); static void plot(const F2CCells& cells, const std::vector& color = {}); static void plot(const F2CRoute& route, const std::vector>& color = {}); static void plot(const std::vector& route, const std::vector>& color = {}); static void plot(const F2CPath& path, const std::vector>& color = {}); static void plot(const F2CField& field, const std::vector& color = {}); static void plotFilled(const F2CField& field, const std::vector& color = {}); static void plotFilled( const F2CLinearRing& ring, const std::vector& color); static void plotFilled(const F2CCell& cell, const std::vector& poly_color, const std::vector& holes_color); static void plotFilled(const F2CCells& cells, const std::vector& poly_color, const std::vector& holes_color); static void plotFilled(const F2CCell& cell, const std::vector& color); static void plotFilled(const F2CCells& cells, const std::vector& poly_color); static void plot(const std::vector& t, const std::vector& d, const std::vector& color); template static void plot(const std::vector& v_t, const std::vector& color); template static void plot( const std::vector& v_t, const std::vector>& color = {}); static void figure(); static void figure_size(unsigned int width, unsigned int height); static void axis_equal(); static void show(); static void save(const std::string& file); static void title(const std::string& text); static void xlim(double min, double max); static void ylim(double min, double max); private: template static std::vector data2vector(const T& t); static std::vector> getComponents( const std::vector& points); static std::vector linspace(double min, double max, size_t N); static std::vector> color_linspace( const std::vector& min, const std::vector& max, size_t N); }; template std::vector Visualizer::data2vector(const T& t) { if constexpr (std::is_same::value) { return std::vector{t}; } else { std::vector res; for (auto&& i : t) { auto v = data2vector(i); res.insert(res.end(), v.begin(), v.end()); } return res; } } template void Visualizer::plot( const std::vector& v_t, const std::vector& color) { if constexpr (std::is_same::value) { auto comp = getComponents(v_t); plot(comp[0], comp[1], color); } else if constexpr (std::is_same::value) { std::vector t(v_t.size()); std::iota(std::begin(t), std::end(t), 0.0); plot(t, v_t, color); } else { for (auto&& t : v_t) { plot(t, color); } } } } // namespace f2c #endif // FIELDS2COVER_UTILS_VISUALIZER_H_