diff -r 6988973515d2 -r ca23936b455b src/geometry.h --- a/src/geometry.h Wed May 25 20:36:34 2022 +0300 +++ b/src/geometry.h Mon Jun 06 22:01:22 2022 +0300 @@ -24,24 +24,44 @@ glm::vec anchor; }; - template - struct Polygon - { - std::array points; - }; - - template - struct Polygon2D - { - glm::vec2 points[N]; - }; - inline const glm::vec3 origin = {0, 0, 0}; inline const Plane XY = {{0, 0, 1}, origin}; inline const Plane XZ = {{0, 1, 0}, origin}; inline const Plane YZ = {{1, 0, 0}, origin}; - using Triangle = Polygon<3>; - using LineSegment2D = Polygon2D<2>; + + struct LineSegment + { + glm::vec3 p1, p2; + }; + struct Triangle + { + glm::vec3 p1, p2, p3; + }; + struct Quadrilateral + { + glm::vec3 p1, p2, p3, p4; + }; + struct ConditionalEdge + { + glm::vec3 p1, p2; + glm::vec3 c1, c2; + }; + struct LineSegment2D + { + glm::vec2 p1, p2; + }; + + // get polygon type from amount of points + template + struct PolygonType {}; + template<> + struct PolygonType<2> { using type = LineSegment; }; + template<> + struct PolygonType<3> { using type = Triangle; }; + template<> + struct PolygonType<4> { using type = Quadrilateral; }; + template + using Polygon = typename PolygonType::type; /** * @brief Computes a line from two points @@ -154,3 +174,4 @@ glm::vec3 pointOnCurve(const BezierCurve& curve, float t); glm::vec3 derivativeOnCurve(const BezierCurve& curve, float t); } +using namespace geom;