INSTINCT Code Coverage Report


Directory: src/
File: util/ImPlot.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 0 50 0.0%
Functions: 0 5 0.0%
Branches: 0 58 0.0%

Line Branch Exec Source
1 /// This file is part of INSTINCT, the INS Toolkit for Integrated
2 /// Navigation Concepts and Training by the Institute of Navigation of
3 /// the University of Stuttgart, Germany.
4 ///
5 /// This Source Code Form is subject to the terms of the Mozilla Public
6 /// License, v. 2.0. If a copy of the MPL was not distributed with this
7 /// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9 #include "ImPlot.hpp"
10
11 #include <filesystem>
12
13 #include "internal/FlowManager.hpp"
14 #include "util/Json.hpp"
15 #include "util/Logger.hpp"
16
17 #ifdef IMGUI_IMPL_OPENGL_LOADER_GL3W
18 #ifdef __APPLE__
19 #define GL_SILENCE_DEPRECATION
20 #include <OpenGL/gl.h>
21 #else
22 #include <GL/gl.h>
23 #endif
24 #define STB_IMAGE_WRITE_IMPLEMENTATION
25 #include "stb_image_write.h"
26 #endif
27
28 void NAV::loadImPlotStyleFromConfigFile(const char* path, ImPlotStyle& imPlotStyle)
29 {
30 std::filesystem::path filepath = flow::GetConfigPath();
31 if (std::filesystem::path inputPath{ path };
32 inputPath.is_relative())
33 {
34 filepath /= inputPath;
35 }
36 else
37 {
38 filepath = inputPath;
39 }
40 std::ifstream filestream(filepath);
41
42 if (!filestream.good())
43 {
44 LOG_ERROR("The ImPlot style config file could not be loaded: {}", filepath.string());
45 }
46 else
47 {
48 json j;
49 filestream >> j;
50
51 if (j.contains("implot") && j.at("implot").contains("style"))
52 {
53 j.at("implot").at("style").get_to(imPlotStyle);
54 LOG_DEBUG("Loaded ImPlot style from file {}", path);
55 }
56 }
57 }
58
59 #ifdef IMGUI_IMPL_OPENGL_LOADER_GL3W
60
61 NAV::ImGuiScreenshotImageBuf::ImGuiScreenshotImageBuf(int x, int y, size_t w, size_t h)
62 : Width(w), Height(h), Data(Width * Height * 4, 0)
63 {
64 glPixelStorei(GL_PACK_ALIGNMENT, 1);
65 glReadPixels(x, y, static_cast<int>(w), static_cast<int>(h), GL_RGBA, GL_UNSIGNED_BYTE, Data.data());
66 RemoveAlpha();
67 FlipVertical();
68 }
69
70 void NAV::ImGuiScreenshotImageBuf::SaveFile(const char* filename)
71 {
72 stbi_write_png(filename, static_cast<int>(Width),
73 static_cast<int>(Height),
74 4,
75 Data.data(),
76 static_cast<int>(Width * 4));
77 }
78
79 void NAV::ImGuiScreenshotImageBuf::RemoveAlpha()
80 {
81 uint32_t* p = Data.data();
82 auto n = static_cast<int>(Width * Height);
83 while (n-- > 0)
84 {
85 *p |= 0xFF000000;
86 p++;
87 }
88 }
89
90 void NAV::ImGuiScreenshotImageBuf::FlipVertical()
91 {
92 size_t comp = 4;
93 size_t stride = Width * comp;
94 std::vector<unsigned char> line_tmp(stride);
95 auto* line_a = reinterpret_cast<unsigned char*>(Data.data());
96 auto* line_b = reinterpret_cast<unsigned char*>(Data.data()) + (stride * (Height - 1));
97 while (line_a < line_b)
98 {
99 memcpy(line_tmp.data(), line_a, stride);
100 memcpy(line_a, line_b, stride);
101 memcpy(line_b, line_tmp.data(), stride);
102 line_a += stride;
103 line_b -= stride;
104 }
105 }
106
107 #endif
108