src/circularprimitive.h

changeset 379
8d88adffb779
parent 305
d891da20abca
--- a/src/circularprimitive.h	Tue Apr 11 22:51:47 2023 +0300
+++ b/src/circularprimitive.h	Wed Apr 12 01:53:42 2023 +0300
@@ -5,7 +5,7 @@
 #include "src/ldrawalgorithm.h"
 
 template<typename Fn>
-void rasterize(const CircularPrimitive& circ, Fn&& fn)
+void circular_element_to_polygons(const circular_primitive& circ, Fn&& fn)
 {
 	std::vector<ModelElement> result;
 	const auto xform = [&circ](const glm::vec2& p, float y){
@@ -14,19 +14,19 @@
 	const glm::vec3 primitiveOrigin = xform({0, 0}, 0);
 	const bool invertedMatrix = (glm::determinant(circ.transformation) < 0) != circ.inverted;
 	switch(circ.type) {
-	case CircularPrimitive::Circle:
+	case circular_primitive_type_e::circle:
 		ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
 		(const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
 			fn(LineSegment{xform(p1, 0), xform(p2, 0)}, EDGE_COLOR);
 		});
 		break;
-	case CircularPrimitive::Disc:
+	case circular_primitive_type_e::disc:
 		ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
 		(const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
 			fn(Triangle{primitiveOrigin, xform(p1, 0), xform(p2, 0)}, MAIN_COLOR);
 		});
 		break;
-	case CircularPrimitive::Cylinder:
+	case circular_primitive_type_e::cylinder:
 		ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
 		(const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
 			Quadrilateral quad{xform(p1, 1), xform(p2, 1), xform(p2, 0), xform(p1, 0)};
@@ -36,36 +36,36 @@
 			fn(quad, MAIN_COLOR);
 		});
 		break;
-	case CircularPrimitive::CylinderOpen:
-		rasterize(CircularPrimitive{
-			.type = CircularPrimitive::Cylinder,
+	case circular_primitive_type_e::cylinder_open:
+		circular_element_to_polygons(circular_primitive{
+			.type = circular_primitive_type_e::cylinder,
 			.fraction = circ.fraction,
 			.transformation = circ.transformation,
 		}, fn);
-		rasterize(CircularPrimitive{
-			.type = CircularPrimitive::Circle,
+		circular_element_to_polygons(circular_primitive{
+			.type = circular_primitive_type_e::circle,
 			.fraction = circ.fraction,
 			.transformation = circ.transformation,
 		}, fn);
-		rasterize(CircularPrimitive{
-			.type = CircularPrimitive::Circle,
+		circular_element_to_polygons(circular_primitive{
+			.type = circular_primitive_type_e::circle,
 			.fraction = circ.fraction,
 			.transformation = glm::translate(circ.transformation, {0, 1, 0}),
 		}, fn);
 		break;
-	case CircularPrimitive::CylinderClosed:
-		rasterize(CircularPrimitive{
-			.type = CircularPrimitive::CylinderOpen,
+	case circular_primitive_type_e::cylinder_closed:
+		circular_element_to_polygons(circular_primitive{
+			.type = circular_primitive_type_e::cylinder_open,
 			.fraction = circ.fraction,
 			.transformation = circ.transformation,
 		}, fn);
-		rasterize(CircularPrimitive{
-			.type = CircularPrimitive::Disc,
+		circular_element_to_polygons(circular_primitive{
+			.type = circular_primitive_type_e::disc,
 			.fraction = circ.fraction,
 			.transformation = circ.transformation,
 		}, fn);
 		break;
-	case CircularPrimitive::DiscNegative:
+	case circular_primitive_type_e::disc_negative:
 		{
 			unsigned int i = 0;
 			ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
@@ -82,7 +82,7 @@
 			});
 		}
 		break;
-	case CircularPrimitive::Chord:
+	case circular_primitive_type_e::chord:
 		for (unsigned int i = 1; i < circ.fraction.segments; ++i) {
 			const glm::vec2& p1 = ldraw::rimpoint(circ.fraction.divisions, i);
 			const glm::vec2& p2 = ldraw::rimpoint(circ.fraction.divisions, i + 1);

mercurial