File indexing completed on 2025-12-15 09:42:32
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include <array>
0012 #include <filesystem>
0013 #include <string_view>
0014
0015 namespace Acts {
0016
0017
0018
0019 struct Color {
0020
0021 Color() = default;
0022
0023 Color(const Color&) = default;
0024
0025 Color(Color&&) = default;
0026
0027
0028 Color& operator=(const Color&) = default;
0029
0030
0031 Color& operator=(Color&&) = default;
0032
0033
0034
0035
0036
0037 constexpr Color(int r, int g, int b) : rgb{r, g, b} {}
0038
0039
0040
0041 constexpr explicit Color(std::array<int, 3> values) : rgb(values) {}
0042
0043
0044
0045 constexpr explicit Color(std::array<double, 3> values) {
0046 rgb[0] = static_cast<int>(values[0] * 255);
0047 rgb[1] = static_cast<int>(values[1] * 255);
0048 rgb[2] = static_cast<int>(values[2] * 255);
0049 }
0050
0051
0052
0053
0054
0055 constexpr Color(double r, double g, double b)
0056 : Color{std::array<double, 3>{r, g, b}} {}
0057
0058 private:
0059 constexpr static int hexToInt(std::string_view hex) {
0060 constexpr auto hexCharToInt = [](char c) {
0061 if (c >= '0' && c <= '9') {
0062 return c - '0';
0063 } else if (c >= 'a' && c <= 'f') {
0064 return c - 'a' + 10;
0065 } else if (c >= 'A' && c <= 'F') {
0066 return c - 'A' + 10;
0067 } else {
0068 throw std::invalid_argument("Invalid hex character");
0069 }
0070 };
0071
0072 int value = 0;
0073 for (char c : hex) {
0074 value = (value << 4) + hexCharToInt(c);
0075 }
0076 return value;
0077 };
0078
0079 public:
0080
0081
0082 constexpr explicit Color(std::string_view hex) {
0083 if (hex[0] == '#' && hex.size() == 7) {
0084 rgb[0] = hexToInt(hex.substr(1, 2));
0085 rgb[1] = hexToInt(hex.substr(3, 2));
0086 rgb[2] = hexToInt(hex.substr(5, 2));
0087 } else {
0088 throw std::invalid_argument{
0089 "Invalid hex color format. Expected format: #RRGGBB"};
0090 }
0091 }
0092
0093
0094
0095
0096 int operator[](unsigned int i) const { return rgb.at(i); }
0097
0098
0099
0100
0101 int& operator[](unsigned int i) { return rgb.at(i); }
0102
0103
0104
0105
0106
0107 friend bool operator==(const Color& lhs, const Color& rhs) = default;
0108
0109
0110
0111
0112 friend std::ostream& operator<<(std::ostream& os, const Color& color) {
0113 os << "[" << color.rgb[0] << ", " << color.rgb[1] << ", " << color.rgb[2]
0114 << "]";
0115 return os;
0116 }
0117
0118
0119 std::array<int, 3> rgb{};
0120 };
0121
0122
0123 constexpr Color s_defaultSurfaceColor{"#0000aa"};
0124
0125 constexpr Color s_defaultPortalColor{"#308c48"};
0126
0127 constexpr Color s_defaultVolumColor{"#ffaa00"};
0128
0129
0130
0131 struct ViewConfig {
0132
0133 bool visible = true;
0134
0135 Color color = {250, 0, 0};
0136
0137 double offset = 0.1;
0138
0139 double lineThickness = 0.15;
0140
0141 double surfaceThickness = 0.15;
0142
0143 unsigned int quarterSegments = 72;
0144
0145 bool triangulate = false;
0146
0147 std::filesystem::path outputName = std::filesystem::path("");
0148 };
0149
0150 static const ViewConfig s_viewSurface = {.color = {170, 170, 170}};
0151 static const ViewConfig s_viewPortal = {.color = Color{"#308c48"}};
0152 static const ViewConfig s_viewSensitive = {.color = {0, 180, 240}};
0153 static const ViewConfig s_viewPassive = {.color = {240, 280, 0}};
0154 static const ViewConfig s_viewVolume = {.color = {220, 220, 0}};
0155 static const ViewConfig s_viewGrid = {.color = {220, 0, 0}};
0156 static const ViewConfig s_viewLine = {.color = {0, 0, 220}};
0157
0158 }