src/model.h

changeset 232
8efa3a33172e
parent 218
63125c36de73
child 233
5509bec02c81
equal deleted inserted replaced
231:a9bf6bab5ea2 232:8efa3a33172e
45 QString code; 45 QString code;
46 }; 46 };
47 47
48 struct Empty {}; 48 struct Empty {};
49 49
50 struct CircularFraction
51 {
52 unsigned int segments;
53 unsigned int divisions;
54 };
55
56 constexpr bool operator<(const CircularFraction& p, const CircularFraction& q)
57 {
58 // a/b < c/d
59 // a < c * b / d
60 // a * d < c * b
61 return p.segments * q.divisions < q.segments / p.divisions;
62 }
63
64 struct CircularPrimitive
65 {
66 enum Type
67 {
68 Circle,
69 Disc,
70 Cylinder,
71 CylinderOpen,
72 CylinderClosed,
73 DiscNegative,
74 Chord,
75 } type;
76 static constexpr int NUM_TYPES = Chord + 1;
77 CircularFraction fraction;
78 glm::mat4 transformation;
79 };
80
81 struct CircleToolOptions
82 {
83 CircularFraction fraction;
84 CircularPrimitive::Type type;
85 };
86
50 using ModelElement = std::variant< 87 using ModelElement = std::variant<
51 Colored<SubfileReference>, 88 Colored<SubfileReference>,
52 Colored<LineSegment>, 89 Colored<LineSegment>,
53 Colored<Triangle>, 90 Colored<Triangle>,
54 Colored<Quadrilateral>, 91 Colored<Quadrilateral>,
55 Colored<ConditionalEdge>, 92 Colored<ConditionalEdge>,
93 Colored<CircularPrimitive>,
56 Comment, 94 Comment,
57 Empty, 95 Empty,
58 ParseError>; 96 ParseError>;
59 97
60 using PolygonElement = Colored<std::variant< 98 using PolygonElement = Colored<std::variant<
204 if (std::holds_alternative<T>(model[i])) { 242 if (std::holds_alternative<T>(model[i])) {
205 fn(std::get<T>(model[i])); 243 fn(std::get<T>(model[i]));
206 } 244 }
207 } 245 }
208 } 246 }
247
248 constexpr Colored<LineSegment> edge(const glm::vec3& p1, const glm::vec3& p2)
249 {
250 return Colored<LineSegment>{{.p1 = p1, .p2 = p2}, EDGE_COLOR};
251 }
252
253 constexpr Colored<Triangle> triangle(const glm::vec3& p1, const glm::vec3& p2, const glm::vec3& p3)
254 {
255 return Colored<Triangle>{{.p1 = p1, .p2 = p2, .p3 = p3}, MAIN_COLOR};
256 }
257
258 constexpr Colored<Quadrilateral> quadrilateral(
259 const glm::vec3& p1,
260 const glm::vec3& p2,
261 const glm::vec3& p3,
262 const glm::vec3& p4)
263 {
264 return Colored<Quadrilateral>{{.p1 = p1, .p2 = p2, .p3 = p3, .p4 = p4}, MAIN_COLOR};
265 }

mercurial