Unravel Engine C++ Reference
Loading...
Searching...
No Matches
flip_shape.hpp
Go to the documentation of this file.
1#ifndef GENERATOR_FLIPSHAPE_HPP
2#define GENERATOR_FLIPSHAPE_HPP
3
4#include "edge.hpp"
5#include "transform_shape.hpp"
6
7namespace generator
8{
9
11template<typename shape_t>
13{
14private:
16 impl_t transform_shape_;
17
18public:
19 class edges_t
20 {
21 public:
23 {
24 edge_t edge = edges_.generate();
25 std::swap(edge.vertices[0], edge.vertices[1]);
26 return edge;
27 }
28
29 bool done() const noexcept
30 {
31 return edges_.done();
32 }
33
34 void next()
35 {
36 edges_.next();
37 }
38
39 private:
41
42 explicit edges_t(const transform_shape_t<shape_t>& shape) : edges_{shape.edges()}
43 {
44 }
45
46 friend class flip_shape_t;
47 };
48
50 flip_shape_t(shape_t shape)
51 : transform_shape_{std::move(shape),
52 [](shape_vertex_t& vertex)
53 {
54 vertex.tangent *= -1.0;
55 }}
56 {
57 }
58
59 edges_t edges() const noexcept
60 {
61 return edges_t{*this};
62 }
63
65
66 vertices_t vertices() const noexcept
67 {
68 return transform_shape_.vertices();
69 }
70};
71
72template<typename shape_t>
74{
75 return flip_shape_t<shape_t>{std::move(shape)};
76}
77} // namespace generator
78
79#endif
manifold_type type
gml::ivec2 vertices
Definition edge.hpp:12
bool done() const noexcept
Flips shape direction. Reverses edges and tangents.
typename impl_t::vertices_t vertices_t
edges_t edges() const noexcept
vertices_t vertices() const noexcept
flip_shape_t(shape_t shape)
Apply a mutator function to each vertex.
flip_shape_t< shape_t > flip_shape(shape_t shape)