@loaders.gl/terrain 3.3.0-alpha.5 → 3.3.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +10 -24
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/decode-quantized-mesh.js +18 -65
- package/dist/es5/lib/decode-quantized-mesh.js.map +1 -1
- package/dist/es5/lib/delatin/index.js +46 -104
- package/dist/es5/lib/delatin/index.js.map +1 -1
- package/dist/es5/lib/helpers/skirt.js +12 -20
- package/dist/es5/lib/helpers/skirt.js.map +1 -1
- package/dist/es5/lib/parse-quantized-mesh.js +22 -39
- package/dist/es5/lib/parse-quantized-mesh.js.map +1 -1
- package/dist/es5/lib/parse-terrain.js +23 -57
- package/dist/es5/lib/parse-terrain.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/quantized-mesh-loader.js +0 -2
- package/dist/es5/quantized-mesh-loader.js.map +1 -1
- package/dist/es5/terrain-loader.js +1 -2
- package/dist/es5/terrain-loader.js.map +1 -1
- package/dist/es5/workers/quantized-mesh-worker.js +0 -2
- package/dist/es5/workers/quantized-mesh-worker.js.map +1 -1
- package/dist/es5/workers/terrain-worker.js +0 -2
- package/dist/es5/workers/terrain-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/index.js +7 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/decode-quantized-mesh.js +6 -40
- package/dist/esm/lib/decode-quantized-mesh.js.map +1 -1
- package/dist/esm/lib/delatin/index.js +18 -98
- package/dist/esm/lib/delatin/index.js.map +1 -1
- package/dist/esm/lib/helpers/skirt.js +16 -19
- package/dist/esm/lib/helpers/skirt.js.map +1 -1
- package/dist/esm/lib/parse-quantized-mesh.js +2 -6
- package/dist/esm/lib/parse-quantized-mesh.js.map +1 -1
- package/dist/esm/lib/parse-terrain.js +6 -19
- package/dist/esm/lib/parse-terrain.js.map +1 -1
- package/dist/esm/lib/utils/version.js +2 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/quantized-mesh-loader.js +1 -0
- package/dist/esm/quantized-mesh-loader.js.map +1 -1
- package/dist/esm/terrain-loader.js +2 -0
- package/dist/esm/terrain-loader.js.map +1 -1
- package/dist/esm/workers/quantized-mesh-worker.js.map +1 -1
- package/dist/esm/workers/terrain-worker.js.map +1 -1
- package/dist/lib/parse-quantized-mesh.js +5 -1
- package/dist/quantized-mesh-worker.js +1 -1
- package/dist/terrain-worker.js +1 -1
- package/package.json +4 -4
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
10
|
var Delatin = function () {
|
|
15
11
|
function Delatin(data, width) {
|
|
16
12
|
var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : width;
|
|
@@ -20,6 +16,7 @@ var Delatin = function () {
|
|
|
20
16
|
this.height = height;
|
|
21
17
|
this.coords = [];
|
|
22
18
|
this.triangles = [];
|
|
19
|
+
|
|
23
20
|
this._halfedges = [];
|
|
24
21
|
this._candidates = [];
|
|
25
22
|
this._queueIndices = [];
|
|
@@ -31,76 +28,79 @@ var Delatin = function () {
|
|
|
31
28
|
this._rmsSum = 0;
|
|
32
29
|
var x1 = width - 1;
|
|
33
30
|
var y1 = height - 1;
|
|
34
|
-
|
|
35
31
|
var p0 = this._addPoint(0, 0);
|
|
36
|
-
|
|
37
32
|
var p1 = this._addPoint(x1, 0);
|
|
38
|
-
|
|
39
33
|
var p2 = this._addPoint(0, y1);
|
|
40
|
-
|
|
41
34
|
var p3 = this._addPoint(x1, y1);
|
|
42
35
|
|
|
43
36
|
var t0 = this._addTriangle(p3, p0, p2, -1, -1, -1);
|
|
44
|
-
|
|
45
37
|
this._addTriangle(p0, p3, p1, t0, -1, -1);
|
|
46
|
-
|
|
47
38
|
this._flush();
|
|
48
39
|
}
|
|
49
40
|
|
|
50
41
|
(0, _createClass2.default)(Delatin, [{
|
|
51
42
|
key: "run",
|
|
52
|
-
value:
|
|
43
|
+
value:
|
|
44
|
+
function run() {
|
|
53
45
|
var maxError = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
|
54
|
-
|
|
55
46
|
while (this.getMaxError() > maxError) {
|
|
56
47
|
this.refine();
|
|
57
48
|
}
|
|
58
49
|
}
|
|
50
|
+
|
|
59
51
|
}, {
|
|
60
52
|
key: "refine",
|
|
61
|
-
value:
|
|
53
|
+
value:
|
|
54
|
+
function refine() {
|
|
62
55
|
this._step();
|
|
63
|
-
|
|
64
56
|
this._flush();
|
|
65
57
|
}
|
|
58
|
+
|
|
66
59
|
}, {
|
|
67
60
|
key: "getMaxError",
|
|
68
|
-
value:
|
|
61
|
+
value:
|
|
62
|
+
function getMaxError() {
|
|
69
63
|
return this._errors[0];
|
|
70
64
|
}
|
|
65
|
+
|
|
71
66
|
}, {
|
|
72
67
|
key: "getRMSD",
|
|
73
|
-
value:
|
|
68
|
+
value:
|
|
69
|
+
function getRMSD() {
|
|
74
70
|
return this._rmsSum > 0 ? Math.sqrt(this._rmsSum / (this.width * this.height)) : 0;
|
|
75
71
|
}
|
|
72
|
+
|
|
76
73
|
}, {
|
|
77
74
|
key: "heightAt",
|
|
78
|
-
value:
|
|
75
|
+
value:
|
|
76
|
+
function heightAt(x, y) {
|
|
79
77
|
return this.data[this.width * y + x];
|
|
80
78
|
}
|
|
79
|
+
|
|
81
80
|
}, {
|
|
82
81
|
key: "_flush",
|
|
83
|
-
value:
|
|
82
|
+
value:
|
|
83
|
+
function _flush() {
|
|
84
84
|
var coords = this.coords;
|
|
85
|
-
|
|
86
85
|
for (var i = 0; i < this._pendingLen; i++) {
|
|
87
86
|
var t = this._pending[i];
|
|
88
87
|
var a = 2 * this.triangles[t * 3 + 0];
|
|
89
88
|
var b = 2 * this.triangles[t * 3 + 1];
|
|
90
89
|
var c = 2 * this.triangles[t * 3 + 2];
|
|
91
|
-
|
|
92
90
|
this._findCandidate(coords[a], coords[a + 1], coords[b], coords[b + 1], coords[c], coords[c + 1], t);
|
|
93
91
|
}
|
|
94
|
-
|
|
95
92
|
this._pendingLen = 0;
|
|
96
93
|
}
|
|
94
|
+
|
|
97
95
|
}, {
|
|
98
96
|
key: "_findCandidate",
|
|
99
|
-
value:
|
|
97
|
+
value:
|
|
98
|
+
function _findCandidate(p0x, p0y, p1x, p1y, p2x, p2y, t) {
|
|
100
99
|
var minX = Math.min(p0x, p1x, p2x);
|
|
101
100
|
var minY = Math.min(p0y, p1y, p2y);
|
|
102
101
|
var maxX = Math.max(p0x, p1x, p2x);
|
|
103
102
|
var maxY = Math.max(p0y, p1y, p2y);
|
|
103
|
+
|
|
104
104
|
var w00 = orient(p1x, p1y, p2x, p2y, minX, minY);
|
|
105
105
|
var w01 = orient(p2x, p2y, p0x, p0y, minX, minY);
|
|
106
106
|
var w02 = orient(p0x, p0y, p1x, p1y, minX, minY);
|
|
@@ -110,42 +110,38 @@ var Delatin = function () {
|
|
|
110
110
|
var b12 = p1x - p2x;
|
|
111
111
|
var a20 = p0y - p2y;
|
|
112
112
|
var b20 = p2x - p0x;
|
|
113
|
+
|
|
113
114
|
var a = orient(p0x, p0y, p1x, p1y, p2x, p2y);
|
|
114
115
|
var z0 = this.heightAt(p0x, p0y) / a;
|
|
115
116
|
var z1 = this.heightAt(p1x, p1y) / a;
|
|
116
117
|
var z2 = this.heightAt(p2x, p2y) / a;
|
|
118
|
+
|
|
117
119
|
var maxError = 0;
|
|
118
120
|
var mx = 0;
|
|
119
121
|
var my = 0;
|
|
120
122
|
var rms = 0;
|
|
121
|
-
|
|
122
123
|
for (var y = minY; y <= maxY; y++) {
|
|
123
124
|
var dx = 0;
|
|
124
|
-
|
|
125
125
|
if (w00 < 0 && a12 !== 0) {
|
|
126
126
|
dx = Math.max(dx, Math.floor(-w00 / a12));
|
|
127
127
|
}
|
|
128
|
-
|
|
129
128
|
if (w01 < 0 && a20 !== 0) {
|
|
130
129
|
dx = Math.max(dx, Math.floor(-w01 / a20));
|
|
131
130
|
}
|
|
132
|
-
|
|
133
131
|
if (w02 < 0 && a01 !== 0) {
|
|
134
132
|
dx = Math.max(dx, Math.floor(-w02 / a01));
|
|
135
133
|
}
|
|
136
|
-
|
|
137
134
|
var w0 = w00 + a12 * dx;
|
|
138
135
|
var w1 = w01 + a20 * dx;
|
|
139
136
|
var w2 = w02 + a01 * dx;
|
|
140
137
|
var wasInside = false;
|
|
141
|
-
|
|
142
138
|
for (var x = minX + dx; x <= maxX; x++) {
|
|
143
139
|
if (w0 >= 0 && w1 >= 0 && w2 >= 0) {
|
|
144
140
|
wasInside = true;
|
|
141
|
+
|
|
145
142
|
var z = z0 * w0 + z1 * w1 + z2 * w2;
|
|
146
143
|
var dz = Math.abs(z - this.heightAt(x, y));
|
|
147
144
|
rms += dz * dz;
|
|
148
|
-
|
|
149
145
|
if (dz > maxError) {
|
|
150
146
|
maxError = dz;
|
|
151
147
|
mx = x;
|
|
@@ -154,17 +150,14 @@ var Delatin = function () {
|
|
|
154
150
|
} else if (wasInside) {
|
|
155
151
|
break;
|
|
156
152
|
}
|
|
157
|
-
|
|
158
153
|
w0 += a12;
|
|
159
154
|
w1 += a20;
|
|
160
155
|
w2 += a01;
|
|
161
156
|
}
|
|
162
|
-
|
|
163
157
|
w00 += b12;
|
|
164
158
|
w01 += b20;
|
|
165
159
|
w02 += b01;
|
|
166
160
|
}
|
|
167
|
-
|
|
168
161
|
if (mx === p0x && my === p0y || mx === p1x && my === p1y || mx === p2x && my === p2y) {
|
|
169
162
|
maxError = 0;
|
|
170
163
|
}
|
|
@@ -175,11 +168,12 @@ var Delatin = function () {
|
|
|
175
168
|
|
|
176
169
|
this._queuePush(t, maxError, rms);
|
|
177
170
|
}
|
|
171
|
+
|
|
178
172
|
}, {
|
|
179
173
|
key: "_step",
|
|
180
|
-
value:
|
|
174
|
+
value:
|
|
175
|
+
function _step() {
|
|
181
176
|
var t = this._queuePop();
|
|
182
|
-
|
|
183
177
|
var e0 = t * 3 + 0;
|
|
184
178
|
var e1 = t * 3 + 1;
|
|
185
179
|
var e2 = t * 3 + 2;
|
|
@@ -194,9 +188,7 @@ var Delatin = function () {
|
|
|
194
188
|
var cy = this.coords[2 * p2 + 1];
|
|
195
189
|
var px = this._candidates[2 * t];
|
|
196
190
|
var py = this._candidates[2 * t + 1];
|
|
197
|
-
|
|
198
191
|
var pn = this._addPoint(px, py);
|
|
199
|
-
|
|
200
192
|
if (orient(ax, ay, bx, by, px, py) === 0) {
|
|
201
193
|
this._handleCollinear(pn, e0);
|
|
202
194
|
} else if (orient(bx, by, cx, cy, px, py) === 0) {
|
|
@@ -207,35 +199,35 @@ var Delatin = function () {
|
|
|
207
199
|
var h0 = this._halfedges[e0];
|
|
208
200
|
var h1 = this._halfedges[e1];
|
|
209
201
|
var h2 = this._halfedges[e2];
|
|
210
|
-
|
|
211
202
|
var t0 = this._addTriangle(p0, p1, pn, h0, -1, -1, e0);
|
|
212
|
-
|
|
213
203
|
var t1 = this._addTriangle(p1, p2, pn, h1, -1, t0 + 1);
|
|
214
|
-
|
|
215
204
|
var t2 = this._addTriangle(p2, p0, pn, h2, t0 + 2, t1 + 1);
|
|
216
|
-
|
|
217
205
|
this._legalize(t0);
|
|
218
|
-
|
|
219
206
|
this._legalize(t1);
|
|
220
|
-
|
|
221
207
|
this._legalize(t2);
|
|
222
208
|
}
|
|
223
209
|
}
|
|
210
|
+
|
|
224
211
|
}, {
|
|
225
212
|
key: "_addPoint",
|
|
226
|
-
value:
|
|
213
|
+
value:
|
|
214
|
+
function _addPoint(x, y) {
|
|
227
215
|
var i = this.coords.length >> 1;
|
|
228
216
|
this.coords.push(x, y);
|
|
229
217
|
return i;
|
|
230
218
|
}
|
|
219
|
+
|
|
231
220
|
}, {
|
|
232
221
|
key: "_addTriangle",
|
|
233
|
-
value:
|
|
222
|
+
value:
|
|
223
|
+
function _addTriangle(a, b, c, ab, bc, ca) {
|
|
234
224
|
var e = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this.triangles.length;
|
|
235
225
|
var t = e / 3;
|
|
226
|
+
|
|
236
227
|
this.triangles[e + 0] = a;
|
|
237
228
|
this.triangles[e + 1] = b;
|
|
238
229
|
this.triangles[e + 2] = c;
|
|
230
|
+
|
|
239
231
|
this._halfedges[e + 0] = ab;
|
|
240
232
|
this._halfedges[e + 1] = bc;
|
|
241
233
|
this._halfedges[e + 2] = ca;
|
|
@@ -243,11 +235,9 @@ var Delatin = function () {
|
|
|
243
235
|
if (ab >= 0) {
|
|
244
236
|
this._halfedges[ab] = e + 0;
|
|
245
237
|
}
|
|
246
|
-
|
|
247
238
|
if (bc >= 0) {
|
|
248
239
|
this._halfedges[bc] = e + 1;
|
|
249
240
|
}
|
|
250
|
-
|
|
251
241
|
if (ca >= 0) {
|
|
252
242
|
this._halfedges[ca] = e + 2;
|
|
253
243
|
}
|
|
@@ -256,18 +246,19 @@ var Delatin = function () {
|
|
|
256
246
|
this._candidates[2 * t + 1] = 0;
|
|
257
247
|
this._queueIndices[t] = -1;
|
|
258
248
|
this._rms[t] = 0;
|
|
249
|
+
|
|
259
250
|
this._pending[this._pendingLen++] = t;
|
|
251
|
+
|
|
260
252
|
return e;
|
|
261
253
|
}
|
|
262
254
|
}, {
|
|
263
255
|
key: "_legalize",
|
|
264
256
|
value: function _legalize(a) {
|
|
265
|
-
var b = this._halfedges[a];
|
|
266
257
|
|
|
258
|
+
var b = this._halfedges[a];
|
|
267
259
|
if (b < 0) {
|
|
268
260
|
return;
|
|
269
261
|
}
|
|
270
|
-
|
|
271
262
|
var a0 = a - a % 3;
|
|
272
263
|
var b0 = b - b % 3;
|
|
273
264
|
var al = a0 + (a + 1) % 3;
|
|
@@ -279,31 +270,25 @@ var Delatin = function () {
|
|
|
279
270
|
var pl = this.triangles[al];
|
|
280
271
|
var p1 = this.triangles[bl];
|
|
281
272
|
var coords = this.coords;
|
|
282
|
-
|
|
283
273
|
if (!inCircle(coords[2 * p0], coords[2 * p0 + 1], coords[2 * pr], coords[2 * pr + 1], coords[2 * pl], coords[2 * pl + 1], coords[2 * p1], coords[2 * p1 + 1])) {
|
|
284
274
|
return;
|
|
285
275
|
}
|
|
286
|
-
|
|
287
276
|
var hal = this._halfedges[al];
|
|
288
277
|
var har = this._halfedges[ar];
|
|
289
278
|
var hbl = this._halfedges[bl];
|
|
290
279
|
var hbr = this._halfedges[br];
|
|
291
|
-
|
|
292
280
|
this._queueRemove(a0 / 3);
|
|
293
|
-
|
|
294
281
|
this._queueRemove(b0 / 3);
|
|
295
|
-
|
|
296
282
|
var t0 = this._addTriangle(p0, p1, pl, -1, hbl, hal, a0);
|
|
297
|
-
|
|
298
283
|
var t1 = this._addTriangle(p1, p0, pr, t0, har, hbr, b0);
|
|
299
|
-
|
|
300
284
|
this._legalize(t0 + 1);
|
|
301
|
-
|
|
302
285
|
this._legalize(t1 + 2);
|
|
303
286
|
}
|
|
287
|
+
|
|
304
288
|
}, {
|
|
305
289
|
key: "_handleCollinear",
|
|
306
|
-
value:
|
|
290
|
+
value:
|
|
291
|
+
function _handleCollinear(pn, a) {
|
|
307
292
|
var a0 = a - a % 3;
|
|
308
293
|
var al = a0 + (a + 1) % 3;
|
|
309
294
|
var ar = a0 + (a + 2) % 3;
|
|
@@ -313,76 +298,55 @@ var Delatin = function () {
|
|
|
313
298
|
var hal = this._halfedges[al];
|
|
314
299
|
var har = this._halfedges[ar];
|
|
315
300
|
var b = this._halfedges[a];
|
|
316
|
-
|
|
317
301
|
if (b < 0) {
|
|
318
302
|
var _t = this._addTriangle(pn, p0, pr, -1, har, -1, a0);
|
|
319
|
-
|
|
320
303
|
var _t2 = this._addTriangle(p0, pn, pl, _t, -1, hal);
|
|
321
|
-
|
|
322
304
|
this._legalize(_t + 1);
|
|
323
|
-
|
|
324
305
|
this._legalize(_t2 + 2);
|
|
325
|
-
|
|
326
306
|
return;
|
|
327
307
|
}
|
|
328
|
-
|
|
329
308
|
var b0 = b - b % 3;
|
|
330
309
|
var bl = b0 + (b + 2) % 3;
|
|
331
310
|
var br = b0 + (b + 1) % 3;
|
|
332
311
|
var p1 = this.triangles[bl];
|
|
333
312
|
var hbl = this._halfedges[bl];
|
|
334
313
|
var hbr = this._halfedges[br];
|
|
335
|
-
|
|
336
314
|
this._queueRemove(b0 / 3);
|
|
337
|
-
|
|
338
315
|
var t0 = this._addTriangle(p0, pr, pn, har, -1, -1, a0);
|
|
339
|
-
|
|
340
316
|
var t1 = this._addTriangle(pr, p1, pn, hbr, -1, t0 + 1, b0);
|
|
341
|
-
|
|
342
317
|
var t2 = this._addTriangle(p1, pl, pn, hbl, -1, t1 + 1);
|
|
343
|
-
|
|
344
318
|
var t3 = this._addTriangle(pl, p0, pn, hal, t0 + 2, t2 + 1);
|
|
345
|
-
|
|
346
319
|
this._legalize(t0);
|
|
347
|
-
|
|
348
320
|
this._legalize(t1);
|
|
349
|
-
|
|
350
321
|
this._legalize(t2);
|
|
351
|
-
|
|
352
322
|
this._legalize(t3);
|
|
353
323
|
}
|
|
324
|
+
|
|
354
325
|
}, {
|
|
355
326
|
key: "_queuePush",
|
|
356
|
-
value:
|
|
327
|
+
value:
|
|
328
|
+
|
|
329
|
+
function _queuePush(t, error, rms) {
|
|
357
330
|
var i = this._queue.length;
|
|
358
331
|
this._queueIndices[t] = i;
|
|
359
|
-
|
|
360
332
|
this._queue.push(t);
|
|
361
|
-
|
|
362
333
|
this._errors.push(error);
|
|
363
|
-
|
|
364
334
|
this._rmsSum += rms;
|
|
365
|
-
|
|
366
335
|
this._queueUp(i);
|
|
367
336
|
}
|
|
368
337
|
}, {
|
|
369
338
|
key: "_queuePop",
|
|
370
339
|
value: function _queuePop() {
|
|
371
340
|
var n = this._queue.length - 1;
|
|
372
|
-
|
|
373
341
|
this._queueSwap(0, n);
|
|
374
|
-
|
|
375
342
|
this._queueDown(0, n);
|
|
376
|
-
|
|
377
343
|
return this._queuePopBack();
|
|
378
344
|
}
|
|
379
345
|
}, {
|
|
380
346
|
key: "_queuePopBack",
|
|
381
347
|
value: function _queuePopBack() {
|
|
382
348
|
var t = this._queue.pop();
|
|
383
|
-
|
|
384
349
|
this._errors.pop();
|
|
385
|
-
|
|
386
350
|
this._rmsSum -= this._rms[t];
|
|
387
351
|
this._queueIndices[t] = -1;
|
|
388
352
|
return t;
|
|
@@ -391,29 +355,22 @@ var Delatin = function () {
|
|
|
391
355
|
key: "_queueRemove",
|
|
392
356
|
value: function _queueRemove(t) {
|
|
393
357
|
var i = this._queueIndices[t];
|
|
394
|
-
|
|
395
358
|
if (i < 0) {
|
|
396
359
|
var it = this._pending.indexOf(t);
|
|
397
|
-
|
|
398
360
|
if (it !== -1) {
|
|
399
361
|
this._pending[it] = this._pending[--this._pendingLen];
|
|
400
362
|
} else {
|
|
401
363
|
throw new Error('Broken triangulation (something went wrong).');
|
|
402
364
|
}
|
|
403
|
-
|
|
404
365
|
return;
|
|
405
366
|
}
|
|
406
|
-
|
|
407
367
|
var n = this._queue.length - 1;
|
|
408
|
-
|
|
409
368
|
if (n !== i) {
|
|
410
369
|
this._queueSwap(i, n);
|
|
411
|
-
|
|
412
370
|
if (!this._queueDown(i, n)) {
|
|
413
371
|
this._queueUp(i);
|
|
414
372
|
}
|
|
415
373
|
}
|
|
416
|
-
|
|
417
374
|
this._queuePopBack();
|
|
418
375
|
}
|
|
419
376
|
}, {
|
|
@@ -438,16 +395,12 @@ var Delatin = function () {
|
|
|
438
395
|
key: "_queueUp",
|
|
439
396
|
value: function _queueUp(j0) {
|
|
440
397
|
var j = j0;
|
|
441
|
-
|
|
442
398
|
while (true) {
|
|
443
399
|
var i = j - 1 >> 1;
|
|
444
|
-
|
|
445
400
|
if (i === j || !this._queueLess(j, i)) {
|
|
446
401
|
break;
|
|
447
402
|
}
|
|
448
|
-
|
|
449
403
|
this._queueSwap(i, j);
|
|
450
|
-
|
|
451
404
|
j = i;
|
|
452
405
|
}
|
|
453
406
|
}
|
|
@@ -455,42 +408,31 @@ var Delatin = function () {
|
|
|
455
408
|
key: "_queueDown",
|
|
456
409
|
value: function _queueDown(i0, n) {
|
|
457
410
|
var i = i0;
|
|
458
|
-
|
|
459
411
|
while (true) {
|
|
460
412
|
var j1 = 2 * i + 1;
|
|
461
|
-
|
|
462
413
|
if (j1 >= n || j1 < 0) {
|
|
463
414
|
break;
|
|
464
415
|
}
|
|
465
|
-
|
|
466
416
|
var j2 = j1 + 1;
|
|
467
417
|
var j = j1;
|
|
468
|
-
|
|
469
418
|
if (j2 < n && this._queueLess(j2, j1)) {
|
|
470
419
|
j = j2;
|
|
471
420
|
}
|
|
472
|
-
|
|
473
421
|
if (!this._queueLess(j, i)) {
|
|
474
422
|
break;
|
|
475
423
|
}
|
|
476
|
-
|
|
477
424
|
this._queueSwap(i, j);
|
|
478
|
-
|
|
479
425
|
i = j;
|
|
480
426
|
}
|
|
481
|
-
|
|
482
427
|
return i > i0;
|
|
483
428
|
}
|
|
484
429
|
}]);
|
|
485
430
|
return Delatin;
|
|
486
431
|
}();
|
|
487
|
-
|
|
488
432
|
exports.default = Delatin;
|
|
489
|
-
|
|
490
433
|
function orient(ax, ay, bx, by, cx, cy) {
|
|
491
434
|
return (bx - cx) * (ay - cy) - (by - cy) * (ax - cx);
|
|
492
435
|
}
|
|
493
|
-
|
|
494
436
|
function inCircle(ax, ay, bx, by, cx, cy, px, py) {
|
|
495
437
|
var dx = ax - px;
|
|
496
438
|
var dy = ay - py;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/delatin/index.ts"],"names":["Delatin","data","width","height","coords","triangles","_halfedges","_candidates","_queueIndices","_queue","_errors","_rms","_pending","_pendingLen","_rmsSum","x1","y1","p0","_addPoint","p1","p2","p3","t0","_addTriangle","_flush","maxError","getMaxError","refine","_step","Math","sqrt","x","y","i","t","a","b","c","_findCandidate","p0x","p0y","p1x","p1y","p2x","p2y","minX","min","minY","maxX","max","maxY","w00","orient","w01","w02","a01","b01","a12","b12","a20","b20","z0","heightAt","z1","z2","mx","my","rms","dx","floor","w0","w1","w2","wasInside","z","dz","abs","_queuePush","_queuePop","e0","e1","e2","ax","ay","bx","by","cx","cy","px","py","pn","_handleCollinear","h0","h1","h2","t1","t2","_legalize","length","push","ab","bc","ca","e","a0","b0","al","ar","bl","br","pr","pl","inCircle","hal","har","hbl","hbr","_queueRemove","t3","error","_queueUp","n","_queueSwap","_queueDown","_queuePopBack","pop","it","indexOf","Error","j","pi","pj","j0","_queueLess","i0","j1","j2","dy","ex","ey","fx","fy","ap","bp","cp"],"mappings":"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","sourcesContent":["// ISC License\n\n// Copyright(c) 2019, Michael Fogleman, Vladimir Agafonkin\n\n// Permission to use, copy, modify, and / or distribute this software for any purpose\n// with or without fee is hereby granted, provided that the above copyright notice\n// and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS.IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n// OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n// THIS SOFTWARE.\n\n// @ts-nocheck\n\n/* eslint-disable complexity, max-params, max-statements, max-depth, no-constant-condition */\nexport default class Delatin {\n constructor(data, width, height = width) {\n this.data = data; // height data\n this.width = width;\n this.height = height;\n\n this.coords = []; // vertex coordinates (x, y)\n this.triangles = []; // mesh triangle indices\n\n // additional triangle data\n this._halfedges = [];\n this._candidates = [];\n this._queueIndices = [];\n\n this._queue = []; // queue of added triangles\n this._errors = [];\n this._rms = [];\n this._pending = []; // triangles pending addition to queue\n this._pendingLen = 0;\n\n this._rmsSum = 0;\n\n const x1 = width - 1;\n const y1 = height - 1;\n const p0 = this._addPoint(0, 0);\n const p1 = this._addPoint(x1, 0);\n const p2 = this._addPoint(0, y1);\n const p3 = this._addPoint(x1, y1);\n\n // add initial two triangles\n const t0 = this._addTriangle(p3, p0, p2, -1, -1, -1);\n this._addTriangle(p0, p3, p1, t0, -1, -1);\n this._flush();\n }\n\n // refine the mesh until its maximum error gets below the given one\n run(maxError = 1) {\n while (this.getMaxError() > maxError) {\n this.refine();\n }\n }\n\n // refine the mesh with a single point\n refine() {\n this._step();\n this._flush();\n }\n\n // max error of the current mesh\n getMaxError() {\n return this._errors[0];\n }\n\n // root-mean-square deviation of the current mesh\n getRMSD() {\n return this._rmsSum > 0 ? Math.sqrt(this._rmsSum / (this.width * this.height)) : 0;\n }\n\n // height value at a given position\n heightAt(x, y) {\n return this.data[this.width * y + x];\n }\n\n // rasterize and queue all triangles that got added or updated in _step\n _flush() {\n const coords = this.coords;\n for (let i = 0; i < this._pendingLen; i++) {\n const t = this._pending[i];\n // rasterize triangle to find maximum pixel error\n const a = 2 * this.triangles[t * 3 + 0];\n const b = 2 * this.triangles[t * 3 + 1];\n const c = 2 * this.triangles[t * 3 + 2];\n this._findCandidate(\n coords[a],\n coords[a + 1],\n coords[b],\n coords[b + 1],\n coords[c],\n coords[c + 1],\n t\n );\n }\n this._pendingLen = 0;\n }\n\n // rasterize a triangle, find its max error, and queue it for processing\n _findCandidate(p0x, p0y, p1x, p1y, p2x, p2y, t) {\n // triangle bounding box\n const minX = Math.min(p0x, p1x, p2x);\n const minY = Math.min(p0y, p1y, p2y);\n const maxX = Math.max(p0x, p1x, p2x);\n const maxY = Math.max(p0y, p1y, p2y);\n\n // forward differencing variables\n let w00 = orient(p1x, p1y, p2x, p2y, minX, minY);\n let w01 = orient(p2x, p2y, p0x, p0y, minX, minY);\n let w02 = orient(p0x, p0y, p1x, p1y, minX, minY);\n const a01 = p1y - p0y;\n const b01 = p0x - p1x;\n const a12 = p2y - p1y;\n const b12 = p1x - p2x;\n const a20 = p0y - p2y;\n const b20 = p2x - p0x;\n\n // pre-multiplied z values at vertices\n const a = orient(p0x, p0y, p1x, p1y, p2x, p2y);\n const z0 = this.heightAt(p0x, p0y) / a;\n const z1 = this.heightAt(p1x, p1y) / a;\n const z2 = this.heightAt(p2x, p2y) / a;\n\n // iterate over pixels in bounding box\n let maxError = 0;\n let mx = 0;\n let my = 0;\n let rms = 0;\n for (let y = minY; y <= maxY; y++) {\n // compute starting offset\n let dx = 0;\n if (w00 < 0 && a12 !== 0) {\n dx = Math.max(dx, Math.floor(-w00 / a12));\n }\n if (w01 < 0 && a20 !== 0) {\n dx = Math.max(dx, Math.floor(-w01 / a20));\n }\n if (w02 < 0 && a01 !== 0) {\n dx = Math.max(dx, Math.floor(-w02 / a01));\n }\n\n let w0 = w00 + a12 * dx;\n let w1 = w01 + a20 * dx;\n let w2 = w02 + a01 * dx;\n\n let wasInside = false;\n\n for (let x = minX + dx; x <= maxX; x++) {\n // check if inside triangle\n if (w0 >= 0 && w1 >= 0 && w2 >= 0) {\n wasInside = true;\n\n // compute z using barycentric coordinates\n const z = z0 * w0 + z1 * w1 + z2 * w2;\n const dz = Math.abs(z - this.heightAt(x, y));\n rms += dz * dz;\n if (dz > maxError) {\n maxError = dz;\n mx = x;\n my = y;\n }\n } else if (wasInside) {\n break;\n }\n\n w0 += a12;\n w1 += a20;\n w2 += a01;\n }\n\n w00 += b12;\n w01 += b20;\n w02 += b01;\n }\n\n if ((mx === p0x && my === p0y) || (mx === p1x && my === p1y) || (mx === p2x && my === p2y)) {\n maxError = 0;\n }\n\n // update triangle metadata\n this._candidates[2 * t] = mx;\n this._candidates[2 * t + 1] = my;\n this._rms[t] = rms;\n\n // add triangle to priority queue\n this._queuePush(t, maxError, rms);\n }\n\n // process the next triangle in the queue, splitting it with a new point\n _step() {\n // pop triangle with highest error from priority queue\n const t = this._queuePop();\n\n const e0 = t * 3 + 0;\n const e1 = t * 3 + 1;\n const e2 = t * 3 + 2;\n\n const p0 = this.triangles[e0];\n const p1 = this.triangles[e1];\n const p2 = this.triangles[e2];\n\n const ax = this.coords[2 * p0];\n const ay = this.coords[2 * p0 + 1];\n const bx = this.coords[2 * p1];\n const by = this.coords[2 * p1 + 1];\n const cx = this.coords[2 * p2];\n const cy = this.coords[2 * p2 + 1];\n const px = this._candidates[2 * t];\n const py = this._candidates[2 * t + 1];\n\n const pn = this._addPoint(px, py);\n\n if (orient(ax, ay, bx, by, px, py) === 0) {\n this._handleCollinear(pn, e0);\n } else if (orient(bx, by, cx, cy, px, py) === 0) {\n this._handleCollinear(pn, e1);\n } else if (orient(cx, cy, ax, ay, px, py) === 0) {\n this._handleCollinear(pn, e2);\n } else {\n const h0 = this._halfedges[e0];\n const h1 = this._halfedges[e1];\n const h2 = this._halfedges[e2];\n\n const t0 = this._addTriangle(p0, p1, pn, h0, -1, -1, e0);\n const t1 = this._addTriangle(p1, p2, pn, h1, -1, t0 + 1);\n const t2 = this._addTriangle(p2, p0, pn, h2, t0 + 2, t1 + 1);\n\n this._legalize(t0);\n this._legalize(t1);\n this._legalize(t2);\n }\n }\n\n // add coordinates for a new vertex\n _addPoint(x, y) {\n const i = this.coords.length >> 1;\n this.coords.push(x, y);\n return i;\n }\n\n // add or update a triangle in the mesh\n _addTriangle(a, b, c, ab, bc, ca, e = this.triangles.length) {\n const t = e / 3; // new triangle index\n\n // add triangle vertices\n this.triangles[e + 0] = a;\n this.triangles[e + 1] = b;\n this.triangles[e + 2] = c;\n\n // add triangle halfedges\n this._halfedges[e + 0] = ab;\n this._halfedges[e + 1] = bc;\n this._halfedges[e + 2] = ca;\n\n // link neighboring halfedges\n if (ab >= 0) {\n this._halfedges[ab] = e + 0;\n }\n if (bc >= 0) {\n this._halfedges[bc] = e + 1;\n }\n if (ca >= 0) {\n this._halfedges[ca] = e + 2;\n }\n\n // init triangle metadata\n this._candidates[2 * t + 0] = 0;\n this._candidates[2 * t + 1] = 0;\n this._queueIndices[t] = -1;\n this._rms[t] = 0;\n\n // add triangle to pending queue for later rasterization\n this._pending[this._pendingLen++] = t;\n\n // return first halfedge index\n return e;\n }\n\n _legalize(a) {\n // if the pair of triangles doesn't satisfy the Delaunay condition\n // (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n // then do the same check/flip recursively for the new pair of triangles\n //\n // pl pl\n // /||\\ / \\\n // al/ || \\bl al/ \\a\n // / || \\ / \\\n // / a||b \\ flip /___ar___\\\n // p0\\ || /p1 => p0\\---bl---/p1\n // \\ || / \\ /\n // ar\\ || /br b\\ /br\n // \\||/ \\ /\n // pr pr\n\n const b = this._halfedges[a];\n\n if (b < 0) {\n return;\n }\n\n const a0 = a - (a % 3);\n const b0 = b - (b % 3);\n const al = a0 + ((a + 1) % 3);\n const ar = a0 + ((a + 2) % 3);\n const bl = b0 + ((b + 2) % 3);\n const br = b0 + ((b + 1) % 3);\n const p0 = this.triangles[ar];\n const pr = this.triangles[a];\n const pl = this.triangles[al];\n const p1 = this.triangles[bl];\n const coords = this.coords;\n\n if (\n !inCircle(\n coords[2 * p0],\n coords[2 * p0 + 1],\n coords[2 * pr],\n coords[2 * pr + 1],\n coords[2 * pl],\n coords[2 * pl + 1],\n coords[2 * p1],\n coords[2 * p1 + 1]\n )\n ) {\n return;\n }\n\n const hal = this._halfedges[al];\n const har = this._halfedges[ar];\n const hbl = this._halfedges[bl];\n const hbr = this._halfedges[br];\n\n this._queueRemove(a0 / 3);\n this._queueRemove(b0 / 3);\n\n const t0 = this._addTriangle(p0, p1, pl, -1, hbl, hal, a0);\n const t1 = this._addTriangle(p1, p0, pr, t0, har, hbr, b0);\n\n this._legalize(t0 + 1);\n this._legalize(t1 + 2);\n }\n\n // handle a case where new vertex is on the edge of a triangle\n _handleCollinear(pn, a) {\n const a0 = a - (a % 3);\n const al = a0 + ((a + 1) % 3);\n const ar = a0 + ((a + 2) % 3);\n const p0 = this.triangles[ar];\n const pr = this.triangles[a];\n const pl = this.triangles[al];\n const hal = this._halfedges[al];\n const har = this._halfedges[ar];\n\n const b = this._halfedges[a];\n\n if (b < 0) {\n const t0 = this._addTriangle(pn, p0, pr, -1, har, -1, a0);\n const t1 = this._addTriangle(p0, pn, pl, t0, -1, hal);\n this._legalize(t0 + 1);\n this._legalize(t1 + 2);\n return;\n }\n\n const b0 = b - (b % 3);\n const bl = b0 + ((b + 2) % 3);\n const br = b0 + ((b + 1) % 3);\n const p1 = this.triangles[bl];\n const hbl = this._halfedges[bl];\n const hbr = this._halfedges[br];\n\n this._queueRemove(b0 / 3);\n\n const t0 = this._addTriangle(p0, pr, pn, har, -1, -1, a0);\n const t1 = this._addTriangle(pr, p1, pn, hbr, -1, t0 + 1, b0);\n const t2 = this._addTriangle(p1, pl, pn, hbl, -1, t1 + 1);\n const t3 = this._addTriangle(pl, p0, pn, hal, t0 + 2, t2 + 1);\n\n this._legalize(t0);\n this._legalize(t1);\n this._legalize(t2);\n this._legalize(t3);\n }\n\n // priority queue methods\n\n _queuePush(t, error, rms) {\n const i = this._queue.length;\n this._queueIndices[t] = i;\n this._queue.push(t);\n this._errors.push(error);\n this._rmsSum += rms;\n this._queueUp(i);\n }\n\n _queuePop() {\n const n = this._queue.length - 1;\n this._queueSwap(0, n);\n this._queueDown(0, n);\n return this._queuePopBack();\n }\n\n _queuePopBack() {\n const t = this._queue.pop();\n this._errors.pop();\n this._rmsSum -= this._rms[t];\n this._queueIndices[t] = -1;\n return t;\n }\n\n _queueRemove(t) {\n const i = this._queueIndices[t];\n if (i < 0) {\n const it = this._pending.indexOf(t);\n if (it !== -1) {\n this._pending[it] = this._pending[--this._pendingLen];\n } else {\n throw new Error('Broken triangulation (something went wrong).');\n }\n return;\n }\n const n = this._queue.length - 1;\n if (n !== i) {\n this._queueSwap(i, n);\n if (!this._queueDown(i, n)) {\n this._queueUp(i);\n }\n }\n this._queuePopBack();\n }\n\n _queueLess(i, j) {\n return this._errors[i] > this._errors[j];\n }\n\n _queueSwap(i, j) {\n const pi = this._queue[i];\n const pj = this._queue[j];\n this._queue[i] = pj;\n this._queue[j] = pi;\n this._queueIndices[pi] = j;\n this._queueIndices[pj] = i;\n const e = this._errors[i];\n this._errors[i] = this._errors[j];\n this._errors[j] = e;\n }\n\n _queueUp(j0) {\n let j = j0;\n while (true) {\n const i = (j - 1) >> 1;\n if (i === j || !this._queueLess(j, i)) {\n break;\n }\n this._queueSwap(i, j);\n j = i;\n }\n }\n\n _queueDown(i0, n) {\n let i = i0;\n while (true) {\n const j1 = 2 * i + 1;\n if (j1 >= n || j1 < 0) {\n break;\n }\n const j2 = j1 + 1;\n let j = j1;\n if (j2 < n && this._queueLess(j2, j1)) {\n j = j2;\n }\n if (!this._queueLess(j, i)) {\n break;\n }\n this._queueSwap(i, j);\n i = j;\n }\n return i > i0;\n }\n}\n\nfunction orient(ax, ay, bx, by, cx, cy) {\n return (bx - cx) * (ay - cy) - (by - cy) * (ax - cx);\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) - dy * (ex * cp - bp * fx) + ap * (ex * fy - ey * fx) < 0;\n}\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Delatin","data","width","height","coords","triangles","_halfedges","_candidates","_queueIndices","_queue","_errors","_rms","_pending","_pendingLen","_rmsSum","x1","y1","p0","_addPoint","p1","p2","p3","t0","_addTriangle","_flush","maxError","getMaxError","refine","_step","Math","sqrt","x","y","i","t","a","b","c","_findCandidate","p0x","p0y","p1x","p1y","p2x","p2y","minX","min","minY","maxX","max","maxY","w00","orient","w01","w02","a01","b01","a12","b12","a20","b20","z0","heightAt","z1","z2","mx","my","rms","dx","floor","w0","w1","w2","wasInside","z","dz","abs","_queuePush","_queuePop","e0","e1","e2","ax","ay","bx","by","cx","cy","px","py","pn","_handleCollinear","h0","h1","h2","t1","t2","_legalize","length","push","ab","bc","ca","e","a0","b0","al","ar","bl","br","pr","pl","inCircle","hal","har","hbl","hbr","_queueRemove","t3","error","_queueUp","n","_queueSwap","_queueDown","_queuePopBack","pop","it","indexOf","Error","j","pi","pj","j0","_queueLess","i0","j1","j2","dy","ex","ey","fx","fy","ap","bp","cp"],"sources":["../../../../src/lib/delatin/index.ts"],"sourcesContent":["// ISC License\n\n// Copyright(c) 2019, Michael Fogleman, Vladimir Agafonkin\n\n// Permission to use, copy, modify, and / or distribute this software for any purpose\n// with or without fee is hereby granted, provided that the above copyright notice\n// and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n// FITNESS.IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS\n// OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF\n// THIS SOFTWARE.\n\n// @ts-nocheck\n\n/* eslint-disable complexity, max-params, max-statements, max-depth, no-constant-condition */\nexport default class Delatin {\n constructor(data, width, height = width) {\n this.data = data; // height data\n this.width = width;\n this.height = height;\n\n this.coords = []; // vertex coordinates (x, y)\n this.triangles = []; // mesh triangle indices\n\n // additional triangle data\n this._halfedges = [];\n this._candidates = [];\n this._queueIndices = [];\n\n this._queue = []; // queue of added triangles\n this._errors = [];\n this._rms = [];\n this._pending = []; // triangles pending addition to queue\n this._pendingLen = 0;\n\n this._rmsSum = 0;\n\n const x1 = width - 1;\n const y1 = height - 1;\n const p0 = this._addPoint(0, 0);\n const p1 = this._addPoint(x1, 0);\n const p2 = this._addPoint(0, y1);\n const p3 = this._addPoint(x1, y1);\n\n // add initial two triangles\n const t0 = this._addTriangle(p3, p0, p2, -1, -1, -1);\n this._addTriangle(p0, p3, p1, t0, -1, -1);\n this._flush();\n }\n\n // refine the mesh until its maximum error gets below the given one\n run(maxError = 1) {\n while (this.getMaxError() > maxError) {\n this.refine();\n }\n }\n\n // refine the mesh with a single point\n refine() {\n this._step();\n this._flush();\n }\n\n // max error of the current mesh\n getMaxError() {\n return this._errors[0];\n }\n\n // root-mean-square deviation of the current mesh\n getRMSD() {\n return this._rmsSum > 0 ? Math.sqrt(this._rmsSum / (this.width * this.height)) : 0;\n }\n\n // height value at a given position\n heightAt(x, y) {\n return this.data[this.width * y + x];\n }\n\n // rasterize and queue all triangles that got added or updated in _step\n _flush() {\n const coords = this.coords;\n for (let i = 0; i < this._pendingLen; i++) {\n const t = this._pending[i];\n // rasterize triangle to find maximum pixel error\n const a = 2 * this.triangles[t * 3 + 0];\n const b = 2 * this.triangles[t * 3 + 1];\n const c = 2 * this.triangles[t * 3 + 2];\n this._findCandidate(\n coords[a],\n coords[a + 1],\n coords[b],\n coords[b + 1],\n coords[c],\n coords[c + 1],\n t\n );\n }\n this._pendingLen = 0;\n }\n\n // rasterize a triangle, find its max error, and queue it for processing\n _findCandidate(p0x, p0y, p1x, p1y, p2x, p2y, t) {\n // triangle bounding box\n const minX = Math.min(p0x, p1x, p2x);\n const minY = Math.min(p0y, p1y, p2y);\n const maxX = Math.max(p0x, p1x, p2x);\n const maxY = Math.max(p0y, p1y, p2y);\n\n // forward differencing variables\n let w00 = orient(p1x, p1y, p2x, p2y, minX, minY);\n let w01 = orient(p2x, p2y, p0x, p0y, minX, minY);\n let w02 = orient(p0x, p0y, p1x, p1y, minX, minY);\n const a01 = p1y - p0y;\n const b01 = p0x - p1x;\n const a12 = p2y - p1y;\n const b12 = p1x - p2x;\n const a20 = p0y - p2y;\n const b20 = p2x - p0x;\n\n // pre-multiplied z values at vertices\n const a = orient(p0x, p0y, p1x, p1y, p2x, p2y);\n const z0 = this.heightAt(p0x, p0y) / a;\n const z1 = this.heightAt(p1x, p1y) / a;\n const z2 = this.heightAt(p2x, p2y) / a;\n\n // iterate over pixels in bounding box\n let maxError = 0;\n let mx = 0;\n let my = 0;\n let rms = 0;\n for (let y = minY; y <= maxY; y++) {\n // compute starting offset\n let dx = 0;\n if (w00 < 0 && a12 !== 0) {\n dx = Math.max(dx, Math.floor(-w00 / a12));\n }\n if (w01 < 0 && a20 !== 0) {\n dx = Math.max(dx, Math.floor(-w01 / a20));\n }\n if (w02 < 0 && a01 !== 0) {\n dx = Math.max(dx, Math.floor(-w02 / a01));\n }\n\n let w0 = w00 + a12 * dx;\n let w1 = w01 + a20 * dx;\n let w2 = w02 + a01 * dx;\n\n let wasInside = false;\n\n for (let x = minX + dx; x <= maxX; x++) {\n // check if inside triangle\n if (w0 >= 0 && w1 >= 0 && w2 >= 0) {\n wasInside = true;\n\n // compute z using barycentric coordinates\n const z = z0 * w0 + z1 * w1 + z2 * w2;\n const dz = Math.abs(z - this.heightAt(x, y));\n rms += dz * dz;\n if (dz > maxError) {\n maxError = dz;\n mx = x;\n my = y;\n }\n } else if (wasInside) {\n break;\n }\n\n w0 += a12;\n w1 += a20;\n w2 += a01;\n }\n\n w00 += b12;\n w01 += b20;\n w02 += b01;\n }\n\n if ((mx === p0x && my === p0y) || (mx === p1x && my === p1y) || (mx === p2x && my === p2y)) {\n maxError = 0;\n }\n\n // update triangle metadata\n this._candidates[2 * t] = mx;\n this._candidates[2 * t + 1] = my;\n this._rms[t] = rms;\n\n // add triangle to priority queue\n this._queuePush(t, maxError, rms);\n }\n\n // process the next triangle in the queue, splitting it with a new point\n _step() {\n // pop triangle with highest error from priority queue\n const t = this._queuePop();\n\n const e0 = t * 3 + 0;\n const e1 = t * 3 + 1;\n const e2 = t * 3 + 2;\n\n const p0 = this.triangles[e0];\n const p1 = this.triangles[e1];\n const p2 = this.triangles[e2];\n\n const ax = this.coords[2 * p0];\n const ay = this.coords[2 * p0 + 1];\n const bx = this.coords[2 * p1];\n const by = this.coords[2 * p1 + 1];\n const cx = this.coords[2 * p2];\n const cy = this.coords[2 * p2 + 1];\n const px = this._candidates[2 * t];\n const py = this._candidates[2 * t + 1];\n\n const pn = this._addPoint(px, py);\n\n if (orient(ax, ay, bx, by, px, py) === 0) {\n this._handleCollinear(pn, e0);\n } else if (orient(bx, by, cx, cy, px, py) === 0) {\n this._handleCollinear(pn, e1);\n } else if (orient(cx, cy, ax, ay, px, py) === 0) {\n this._handleCollinear(pn, e2);\n } else {\n const h0 = this._halfedges[e0];\n const h1 = this._halfedges[e1];\n const h2 = this._halfedges[e2];\n\n const t0 = this._addTriangle(p0, p1, pn, h0, -1, -1, e0);\n const t1 = this._addTriangle(p1, p2, pn, h1, -1, t0 + 1);\n const t2 = this._addTriangle(p2, p0, pn, h2, t0 + 2, t1 + 1);\n\n this._legalize(t0);\n this._legalize(t1);\n this._legalize(t2);\n }\n }\n\n // add coordinates for a new vertex\n _addPoint(x, y) {\n const i = this.coords.length >> 1;\n this.coords.push(x, y);\n return i;\n }\n\n // add or update a triangle in the mesh\n _addTriangle(a, b, c, ab, bc, ca, e = this.triangles.length) {\n const t = e / 3; // new triangle index\n\n // add triangle vertices\n this.triangles[e + 0] = a;\n this.triangles[e + 1] = b;\n this.triangles[e + 2] = c;\n\n // add triangle halfedges\n this._halfedges[e + 0] = ab;\n this._halfedges[e + 1] = bc;\n this._halfedges[e + 2] = ca;\n\n // link neighboring halfedges\n if (ab >= 0) {\n this._halfedges[ab] = e + 0;\n }\n if (bc >= 0) {\n this._halfedges[bc] = e + 1;\n }\n if (ca >= 0) {\n this._halfedges[ca] = e + 2;\n }\n\n // init triangle metadata\n this._candidates[2 * t + 0] = 0;\n this._candidates[2 * t + 1] = 0;\n this._queueIndices[t] = -1;\n this._rms[t] = 0;\n\n // add triangle to pending queue for later rasterization\n this._pending[this._pendingLen++] = t;\n\n // return first halfedge index\n return e;\n }\n\n _legalize(a) {\n // if the pair of triangles doesn't satisfy the Delaunay condition\n // (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n // then do the same check/flip recursively for the new pair of triangles\n //\n // pl pl\n // /||\\ / \\\n // al/ || \\bl al/ \\a\n // / || \\ / \\\n // / a||b \\ flip /___ar___\\\n // p0\\ || /p1 => p0\\---bl---/p1\n // \\ || / \\ /\n // ar\\ || /br b\\ /br\n // \\||/ \\ /\n // pr pr\n\n const b = this._halfedges[a];\n\n if (b < 0) {\n return;\n }\n\n const a0 = a - (a % 3);\n const b0 = b - (b % 3);\n const al = a0 + ((a + 1) % 3);\n const ar = a0 + ((a + 2) % 3);\n const bl = b0 + ((b + 2) % 3);\n const br = b0 + ((b + 1) % 3);\n const p0 = this.triangles[ar];\n const pr = this.triangles[a];\n const pl = this.triangles[al];\n const p1 = this.triangles[bl];\n const coords = this.coords;\n\n if (\n !inCircle(\n coords[2 * p0],\n coords[2 * p0 + 1],\n coords[2 * pr],\n coords[2 * pr + 1],\n coords[2 * pl],\n coords[2 * pl + 1],\n coords[2 * p1],\n coords[2 * p1 + 1]\n )\n ) {\n return;\n }\n\n const hal = this._halfedges[al];\n const har = this._halfedges[ar];\n const hbl = this._halfedges[bl];\n const hbr = this._halfedges[br];\n\n this._queueRemove(a0 / 3);\n this._queueRemove(b0 / 3);\n\n const t0 = this._addTriangle(p0, p1, pl, -1, hbl, hal, a0);\n const t1 = this._addTriangle(p1, p0, pr, t0, har, hbr, b0);\n\n this._legalize(t0 + 1);\n this._legalize(t1 + 2);\n }\n\n // handle a case where new vertex is on the edge of a triangle\n _handleCollinear(pn, a) {\n const a0 = a - (a % 3);\n const al = a0 + ((a + 1) % 3);\n const ar = a0 + ((a + 2) % 3);\n const p0 = this.triangles[ar];\n const pr = this.triangles[a];\n const pl = this.triangles[al];\n const hal = this._halfedges[al];\n const har = this._halfedges[ar];\n\n const b = this._halfedges[a];\n\n if (b < 0) {\n const t0 = this._addTriangle(pn, p0, pr, -1, har, -1, a0);\n const t1 = this._addTriangle(p0, pn, pl, t0, -1, hal);\n this._legalize(t0 + 1);\n this._legalize(t1 + 2);\n return;\n }\n\n const b0 = b - (b % 3);\n const bl = b0 + ((b + 2) % 3);\n const br = b0 + ((b + 1) % 3);\n const p1 = this.triangles[bl];\n const hbl = this._halfedges[bl];\n const hbr = this._halfedges[br];\n\n this._queueRemove(b0 / 3);\n\n const t0 = this._addTriangle(p0, pr, pn, har, -1, -1, a0);\n const t1 = this._addTriangle(pr, p1, pn, hbr, -1, t0 + 1, b0);\n const t2 = this._addTriangle(p1, pl, pn, hbl, -1, t1 + 1);\n const t3 = this._addTriangle(pl, p0, pn, hal, t0 + 2, t2 + 1);\n\n this._legalize(t0);\n this._legalize(t1);\n this._legalize(t2);\n this._legalize(t3);\n }\n\n // priority queue methods\n\n _queuePush(t, error, rms) {\n const i = this._queue.length;\n this._queueIndices[t] = i;\n this._queue.push(t);\n this._errors.push(error);\n this._rmsSum += rms;\n this._queueUp(i);\n }\n\n _queuePop() {\n const n = this._queue.length - 1;\n this._queueSwap(0, n);\n this._queueDown(0, n);\n return this._queuePopBack();\n }\n\n _queuePopBack() {\n const t = this._queue.pop();\n this._errors.pop();\n this._rmsSum -= this._rms[t];\n this._queueIndices[t] = -1;\n return t;\n }\n\n _queueRemove(t) {\n const i = this._queueIndices[t];\n if (i < 0) {\n const it = this._pending.indexOf(t);\n if (it !== -1) {\n this._pending[it] = this._pending[--this._pendingLen];\n } else {\n throw new Error('Broken triangulation (something went wrong).');\n }\n return;\n }\n const n = this._queue.length - 1;\n if (n !== i) {\n this._queueSwap(i, n);\n if (!this._queueDown(i, n)) {\n this._queueUp(i);\n }\n }\n this._queuePopBack();\n }\n\n _queueLess(i, j) {\n return this._errors[i] > this._errors[j];\n }\n\n _queueSwap(i, j) {\n const pi = this._queue[i];\n const pj = this._queue[j];\n this._queue[i] = pj;\n this._queue[j] = pi;\n this._queueIndices[pi] = j;\n this._queueIndices[pj] = i;\n const e = this._errors[i];\n this._errors[i] = this._errors[j];\n this._errors[j] = e;\n }\n\n _queueUp(j0) {\n let j = j0;\n while (true) {\n const i = (j - 1) >> 1;\n if (i === j || !this._queueLess(j, i)) {\n break;\n }\n this._queueSwap(i, j);\n j = i;\n }\n }\n\n _queueDown(i0, n) {\n let i = i0;\n while (true) {\n const j1 = 2 * i + 1;\n if (j1 >= n || j1 < 0) {\n break;\n }\n const j2 = j1 + 1;\n let j = j1;\n if (j2 < n && this._queueLess(j2, j1)) {\n j = j2;\n }\n if (!this._queueLess(j, i)) {\n break;\n }\n this._queueSwap(i, j);\n i = j;\n }\n return i > i0;\n }\n}\n\nfunction orient(ax, ay, bx, by, cx, cy) {\n return (bx - cx) * (ay - cy) - (by - cy) * (ax - cx);\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) - dy * (ex * cp - bp * fx) + ap * (ex * fy - ey * fx) < 0;\n}\n"],"mappings":"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"}
|