src/vertexmap.cpp

Fri, 01 Jul 2022 23:51:16 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Fri, 01 Jul 2022 23:51:16 +0300
changeset 314
4642ba1218e8
parent 309
d862721d19a3
child 333
07e65a4c6611
permissions
-rw-r--r--

Added rudimentary cylinder extrusion into circle tool.
I really had to think which way the vectors are in this one

264
76a025db4948 Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 259
diff changeset
1 #include "src/vertexmap.h"
76a025db4948 Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 259
diff changeset
2 #include "src/gl/common.h"
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
3
259
c27612f0eac0 - Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 250
diff changeset
4 hash_t hashVertex(const glm::vec3& vec)
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
5 {
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
6 return qHash(glm::ivec3{
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
7 int(vec.x * 10000),
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
8 int(vec.y * 10000),
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
9 int(vec.z * 10000),
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
10 });
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
11 }
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
12
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
13 VertexMap::VertexMap(const Model *model) :
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
14 model{model}
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
15 {
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
16 connect(
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
17 model,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
18 &Model::dataChanged,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
19 this,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
20 &VertexMap::build
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
21 );
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
22 connect(
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
23 model,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 &Model::rowsInserted,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 this,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
26 &VertexMap::build
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
27 );
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
28 connect(
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
29 model,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
30 &Model::rowsRemoved,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
31 this,
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
32 &VertexMap::build
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
33 );
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
34 this->build();
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
35 }
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
36
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
37 struct Edge
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
38 {
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
39 const glm::vec3& a;
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
40 const glm::vec3& b;
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
41 };
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
42
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
43 inline void edges(const ModelElement& element, std::function<void(Edge&&)> fn)
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
44 {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
45 std::visit<void>(overloaded{
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
46 [fn](const Colored<LineSegment>& edge) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
47 fn(Edge{edge.p1, edge.p2});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
48 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
49 [fn](const Colored<Triangle>& triangle) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
50 fn(Edge{triangle.p1, triangle.p2});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
51 fn(Edge{triangle.p2, triangle.p3});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
52 fn(Edge{triangle.p3, triangle.p1});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
53 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
54 [fn](const Colored<Quadrilateral>& quad) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
55 fn(Edge{quad.p1, quad.p2});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
56 fn(Edge{quad.p2, quad.p3});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
57 fn(Edge{quad.p3, quad.p4});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
58 fn(Edge{quad.p4, quad.p1});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
59 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
60 [fn](const Colored<ConditionalEdge>& cedge) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
61 fn(Edge{cedge.p1, cedge.p2});
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
62 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
63 [](const ModelElement&&){}
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
64 }, element);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
65 }
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
66
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
67 inline void points(
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
68 const ModelElement& element,
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
69 std::function<void(const glm::vec3&)> fn)
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
70 {
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
71 std::visit<void>(overloaded{
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
72 [fn](const Colored<LineSegment>& edge) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
73 fn(edge.p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
74 fn(edge.p2);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
75 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
76 [fn](const Colored<Triangle>& triangle) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
77 fn(triangle.p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
78 fn(triangle.p2);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
79 fn(triangle.p3);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
80 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
81 [fn](const Colored<Quadrilateral>& quad) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
82 fn(quad.p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
83 fn(quad.p2);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
84 fn(quad.p3);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
85 fn(quad.p4);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
86 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
87 [fn](const Colored<ConditionalEdge>& cedge) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
88 fn(cedge.p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
89 fn(cedge.p2);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
90 fn(cedge.c1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
91 fn(cedge.c2);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
92 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
93 [](const ModelElement&&){}
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
94 }, element);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
95 }
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
96
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
97 template<typename R>
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
98 auto ifplanar(
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
99 const ModelElement& element,
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
100 std::function<R(const glm::vec3&, const glm::vec3&, const glm::vec3&)> fn
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
101 )
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
102 {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
103 return std::visit(overloaded{
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
104 [fn](const Triangle& triangle) -> std::optional<R> {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
105 return fn(triangle.p1, triangle.p2, triangle.p3);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
106 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
107 [fn](const Quadrilateral quad) -> std::optional<R> {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
108 return fn(quad.p1, quad.p2, quad.p3);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
109 },
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
110 [](const ModelElement&&) -> std::optional<R> {return {};}
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
111 }, element);
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
112 }
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
113
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
114 void VertexMap::build()
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
115 {
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
116 this->map.clear();
118
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
117 this->vertices.clear();
119
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
118 this->vertexHashes.clear();
250
2837b549e616 I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 200
diff changeset
119 for (std::size_t i = 0; i < this->model->size(); ++i)
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
120 {
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
121 const ModelElement& element = this->model->at(i);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
122 std::optional<glm::mat4> matrix = ifplanar<glm::mat4>(
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
123 element,
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
124 [](const glm::vec3& p1, const glm::vec3& p2, const glm::vec3& p3)
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
125 {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
126 const glm::vec3 a = glm::normalize(p2 - p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
127 const glm::vec3 b = glm::normalize(p3 - p1);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
128 const glm::vec3 c = glm::normalize(glm::cross(a, b));
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
129 const glm::vec3 d = glm::normalize(glm::cross(a, c));
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
130 return glm::mat4{{a, 0}, {-c, 0}, {d, 0}, {}};
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
131 });
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
132 points(element, [&](const glm::vec3 point) {
259
c27612f0eac0 - Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 250
diff changeset
133 const hash_t hash = hashVertex(point);
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
134 VertexInfo& info = this->map[hash];
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
135 info.point = point;
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
136 info.objects.insert(this->model->idAt(i));
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
137 if (matrix.has_value() and not info.transformSet)
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
138 {
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
139 info.transform = matrix.value();
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
140 info.transform[3] = {point, 1};
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
141 info.transformSet = true;
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
142 }
119
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
143 if (not this->vertexHashes.contains(hash))
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
144 {
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
145 this->vertexHashes.insert(hash);
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
146 this->vertices.push_back(point);
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
147 }
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
148 });
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
149 }
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
150 for (auto& pair : this->map)
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
151 {
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
152 auto& info = pair.second;
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
153 // If there's no transformation calculated yet, make up a simple one that at least
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
154 // contains translation.
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
155 if (not info.transformSet)
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
156 {
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
157 info.transform = glm::translate(glm::identity<glm::mat4>(), info.point);
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
158 info.transformSet = true;
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
159 }
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
160 float scale = 1.0f;
309
d862721d19a3 Fixed ModelId being used to identify both models and elements, added ElementId to identify elements
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 264
diff changeset
161 for (const ElementId objectId : info.objects)
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
162 {
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
163 const std::optional<int> index = model->find(objectId);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
164 if (index.has_value()) {
250
2837b549e616 I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 200
diff changeset
165 edges(this->model->at(unsigned_cast(index.value())), [&](Edge&& edge)
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
166 {
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
167 if (hashVertex(edge.a) == pair.first or hashVertex(edge.b) == pair.first)
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
168 {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
169 scale = std::min(scale, glm::length(edge.b - edge.a) / 3);
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
170 }
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
171 });
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
172 }
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
173 }
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
174 info.transform = glm::scale(info.transform, glm::vec3{scale, scale, scale});
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
175 }
118
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
176 Q_EMIT this->verticesChanged();
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
177 }
118
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
178
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
179 /**
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
180 * @brief Apply \c fn for all vertices in the map.
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
181 * @param fn
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
182 */
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
183 void VertexMap::apply(ApplyFunction fn) const
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
184 {
119
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
185 for (unsigned int i = 0; i < this->vertices.size(); i += 1)
118
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
186 {
119
Teemu Piippo <teemu@hecknology.net>
parents: 118
diff changeset
187 const glm::vec3& point = this->vertices[i];
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
188 fn(point, this->map.at(hashVertex(point)));
118
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
189 }
8e1c9f18ae15 Add vertex rendering
Teemu Piippo <teemu@hecknology.net>
parents: 117
diff changeset
190 }

mercurial