Tue, 28 Jun 2022 11:51:17 +0300
- Add CMake build type to about page and window title
- Use locale-dependant short date format in window title and long format in about page
- Move version definition into project() call
- Renamed the c++ macros to match CMake variable names
#pragma once #include "src/basics.h" #include "src/model.h" namespace ldraw { /// Determines how quadrilaterals are split into triangles enum class Diagonal { Diagonal_13, Diagonal_24 }; std::pair<Triangle, Triangle> splitTriangles( const Quadrilateral& q, ldraw::Diagonal diagonal); std::vector<ModelAction> makeUnofficial(const Model *model); constexpr float circleAngle(unsigned int divisions, unsigned int i) { constexpr float ofs = 0.5 * pi; float factor = -2.0f * pi / static_cast<float>(divisions); return static_cast<float>(i) * factor + ofs; } constexpr glm::vec2 rimpoint(unsigned int divisions, unsigned int i) { const float angle = circleAngle(divisions, i); return glm::vec2{std::sin(angle), std::cos(angle)}; } template<typename Fn> void circleAngles(unsigned int segments, unsigned int divisions, Fn&& fn) { for (unsigned int i = 0; i < segments; i += 1) { const float a1 = circleAngle(divisions, i - 1); const float a2 = circleAngle(divisions, i); const float a3 = circleAngle(divisions, i + 1); fn(a1, a2, a3); } } template<typename Fn> void circle(unsigned int segments, unsigned int divisions, Fn&& fn) { circleAngles(segments, divisions, [&fn]( const float a1, const float a2, const float a3 ){ fn( glm::vec2{std::sin(a1), std::cos(a1)}, glm::vec2{std::sin(a2), std::cos(a2)}, glm::vec2{std::sin(a3), std::cos(a3)} ); }); } } ModelElement inverted(const ModelElement &element);