--- 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);