src/vertexmap.cpp

Wed, 08 Jun 2022 19:33:00 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 08 Jun 2022 19:33:00 +0300
changeset 204
52e10e8d88cc
parent 200
ca23936b455b
child 250
2837b549e616
permissions
-rw-r--r--

Concentrate model editing into one coroutine inside main()

117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #include "vertexmap.h"
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
2 #include "gl/common.h"
117
121a40d5e34c Add vertex map
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
3
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
4 unsigned int hashVertex(const glm::vec3& vec)
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();
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
119 for (int 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) {
120
8c9fff699241 rework rendering of vertices
Teemu Piippo <teemu@hecknology.net>
parents: 119
diff changeset
133 const unsigned int hash = hashVertex(point);
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;
200
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
161 for (const ModelId 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()) {
ca23936b455b Giant refactor
Teemu Piippo <teemu@hecknology.net>
parents: 151
diff changeset
165 edges(this->model->at(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