src/circularprimitive.h

changeset 305
d891da20abca
parent 264
76a025db4948
child 379
8d88adffb779
equal deleted inserted replaced
304:5d280bceb713 305:d891da20abca
15 const bool invertedMatrix = (glm::determinant(circ.transformation) < 0) != circ.inverted; 15 const bool invertedMatrix = (glm::determinant(circ.transformation) < 0) != circ.inverted;
16 switch(circ.type) { 16 switch(circ.type) {
17 case CircularPrimitive::Circle: 17 case CircularPrimitive::Circle:
18 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&] 18 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
19 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){ 19 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
20 fn(edge(xform(p1, 0), xform(p2, 0))); 20 fn(LineSegment{xform(p1, 0), xform(p2, 0)}, EDGE_COLOR);
21 }); 21 });
22 break; 22 break;
23 case CircularPrimitive::Disc: 23 case CircularPrimitive::Disc:
24 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&] 24 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
25 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){ 25 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
26 fn(triangle(primitiveOrigin, xform(p1, 0), xform(p2, 0))); 26 fn(Triangle{primitiveOrigin, xform(p1, 0), xform(p2, 0)}, MAIN_COLOR);
27 }); 27 });
28 break; 28 break;
29 case CircularPrimitive::Cylinder: 29 case CircularPrimitive::Cylinder:
30 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&] 30 ldraw::circle(circ.fraction.segments, circ.fraction.divisions, [&]
31 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){ 31 (const glm::vec2&, const glm::vec2& p1, const glm::vec2& p2){
32 Colored<Quadrilateral> quad = quadrilateral(xform(p1, 1), xform(p2, 1), xform(p2, 0), xform(p1, 0)); 32 Quadrilateral quad{xform(p1, 1), xform(p2, 1), xform(p2, 0), xform(p1, 0)};
33 if (invertedMatrix) { 33 if (invertedMatrix) {
34 std::swap(quad.p2, quad.p4); 34 std::swap(quad.p2, quad.p4);
35 } 35 }
36 fn(quad); 36 fn(quad, MAIN_COLOR);
37 }); 37 });
38 break; 38 break;
39 case CircularPrimitive::CylinderOpen: 39 case CircularPrimitive::CylinderOpen:
40 rasterize(CircularPrimitive{ 40 rasterize(CircularPrimitive{
41 .type = CircularPrimitive::Cylinder, 41 .type = CircularPrimitive::Cylinder,
75 {-1, +1}, 75 {-1, +1},
76 {-1, -1}, 76 {-1, -1},
77 {+1, -1}, 77 {+1, -1},
78 }; 78 };
79 const glm::vec2& corner = corners[i * 4 / circ.fraction.divisions]; 79 const glm::vec2& corner = corners[i * 4 / circ.fraction.divisions];
80 fn(triangle(xform(p2, 0), xform(p1, 0), xform(corner, 0))); 80 fn(Triangle{xform(p2, 0), xform(p1, 0), xform(corner, 0)}, MAIN_COLOR);
81 ++i; 81 ++i;
82 }); 82 });
83 } 83 }
84 break; 84 break;
85 case CircularPrimitive::Chord: 85 case CircularPrimitive::Chord:
86 for (unsigned int i = 1; i < circ.fraction.segments; ++i) { 86 for (unsigned int i = 1; i < circ.fraction.segments; ++i) {
87 const glm::vec2& p1 = ldraw::rimpoint(circ.fraction.divisions, i); 87 const glm::vec2& p1 = ldraw::rimpoint(circ.fraction.divisions, i);
88 const glm::vec2& p2 = ldraw::rimpoint(circ.fraction.divisions, i + 1); 88 const glm::vec2& p2 = ldraw::rimpoint(circ.fraction.divisions, i + 1);
89 fn(triangle(xform(p2, 0), xform(p1, 0), xform({1, 0}, 0))); 89 fn(Triangle{xform(p2, 0), xform(p1, 0), xform({1, 0}, 0)}, MAIN_COLOR);
90 } 90 }
91 break; 91 break;
92 } 92 }
93 } 93 }

mercurial