@loaders.gl/terrain 3.2.12 → 3.3.0-alpha.10

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.
Files changed (54) hide show
  1. package/dist/es5/bundle.js +0 -1
  2. package/dist/es5/bundle.js.map +1 -1
  3. package/dist/es5/index.js +10 -24
  4. package/dist/es5/index.js.map +1 -1
  5. package/dist/es5/lib/decode-quantized-mesh.js +18 -65
  6. package/dist/es5/lib/decode-quantized-mesh.js.map +1 -1
  7. package/dist/es5/lib/delatin/index.js +46 -104
  8. package/dist/es5/lib/delatin/index.js.map +1 -1
  9. package/dist/es5/lib/helpers/skirt.js +12 -20
  10. package/dist/es5/lib/helpers/skirt.js.map +1 -1
  11. package/dist/es5/lib/parse-quantized-mesh.js +22 -39
  12. package/dist/es5/lib/parse-quantized-mesh.js.map +1 -1
  13. package/dist/es5/lib/parse-terrain.js +23 -57
  14. package/dist/es5/lib/parse-terrain.js.map +1 -1
  15. package/dist/es5/lib/utils/version.js +1 -1
  16. package/dist/es5/lib/utils/version.js.map +1 -1
  17. package/dist/es5/quantized-mesh-loader.js +0 -2
  18. package/dist/es5/quantized-mesh-loader.js.map +1 -1
  19. package/dist/es5/terrain-loader.js +1 -2
  20. package/dist/es5/terrain-loader.js.map +1 -1
  21. package/dist/es5/workers/quantized-mesh-worker.js +0 -2
  22. package/dist/es5/workers/quantized-mesh-worker.js.map +1 -1
  23. package/dist/es5/workers/terrain-worker.js +0 -2
  24. package/dist/es5/workers/terrain-worker.js.map +1 -1
  25. package/dist/esm/bundle.js +1 -1
  26. package/dist/esm/bundle.js.map +1 -1
  27. package/dist/esm/index.js +7 -2
  28. package/dist/esm/index.js.map +1 -1
  29. package/dist/esm/lib/decode-quantized-mesh.js +6 -40
  30. package/dist/esm/lib/decode-quantized-mesh.js.map +1 -1
  31. package/dist/esm/lib/delatin/index.js +18 -98
  32. package/dist/esm/lib/delatin/index.js.map +1 -1
  33. package/dist/esm/lib/helpers/skirt.js +16 -19
  34. package/dist/esm/lib/helpers/skirt.js.map +1 -1
  35. package/dist/esm/lib/parse-quantized-mesh.js +2 -6
  36. package/dist/esm/lib/parse-quantized-mesh.js.map +1 -1
  37. package/dist/esm/lib/parse-terrain.js +6 -19
  38. package/dist/esm/lib/parse-terrain.js.map +1 -1
  39. package/dist/esm/lib/utils/version.js +2 -1
  40. package/dist/esm/lib/utils/version.js.map +1 -1
  41. package/dist/esm/quantized-mesh-loader.js +1 -0
  42. package/dist/esm/quantized-mesh-loader.js.map +1 -1
  43. package/dist/esm/terrain-loader.js +2 -0
  44. package/dist/esm/terrain-loader.js.map +1 -1
  45. package/dist/esm/workers/quantized-mesh-worker.js.map +1 -1
  46. package/dist/esm/workers/terrain-worker.js.map +1 -1
  47. package/dist/lib/decode-quantized-mesh.d.ts +1 -1
  48. package/dist/lib/decode-quantized-mesh.d.ts.map +1 -1
  49. package/dist/lib/helpers/skirt.d.ts +1 -1
  50. package/dist/lib/helpers/skirt.d.ts.map +1 -1
  51. package/dist/lib/parse-quantized-mesh.js +5 -1
  52. package/dist/quantized-mesh-worker.js +1 -1
  53. package/dist/terrain-worker.js +1 -1
  54. 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: function run() {
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: function refine() {
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: function getMaxError() {
61
+ value:
62
+ function getMaxError() {
69
63
  return this._errors[0];
70
64
  }
65
+
71
66
  }, {
72
67
  key: "getRMSD",
73
- value: function getRMSD() {
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: function heightAt(x, y) {
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: function _flush() {
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: function _findCandidate(p0x, p0y, p1x, p1y, p2x, p2y, t) {
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: function _step() {
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: function _addPoint(x, y) {
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: function _addTriangle(a, b, c, ab, bc, ca) {
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: function _handleCollinear(pn, a) {
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: function _queuePush(t, error, rms) {
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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"}