src/geometry.h

changeset 200
ca23936b455b
parent 187
30204975694a
child 201
5d201ee4a9c3
--- 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<N, T, Q> anchor;
 	};
 
-	template<int N>
-	struct Polygon
-	{
-		std::array<glm::vec3, N> points;
-	};
-
-	template<int N>
-	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<int N>
+	struct PolygonType {};
+	template<>
+	struct PolygonType<2> { using type = LineSegment; };
+	template<>
+	struct PolygonType<3> { using type = Triangle; };
+	template<>
+	struct PolygonType<4> { using type = Quadrilateral; };
+	template<int N>
+	using Polygon = typename PolygonType<N>::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;

mercurial