poly-extrude 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * poly-extrude v0.0.8
2
+ * poly-extrude v0.0.9
3
3
  */
4
4
  (function (global, factory) {
5
5
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
@@ -38,10 +38,10 @@
38
38
 
39
39
 
40
40
  invSize = Math.max(maxX - minX, maxY - minY);
41
- invSize = invSize !== 0 ? 1 / invSize : 0;
41
+ invSize = invSize !== 0 ? 32767 / invSize : 0;
42
42
  }
43
43
 
44
- earcutLinked(outerNode, triangles, dim, minX, minY, invSize);
44
+ earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);
45
45
  return triangles;
46
46
  } // create a circular doubly linked list from polygon points in the specified winding order
47
47
 
@@ -105,9 +105,9 @@
105
105
 
106
106
  if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {
107
107
  // cut off the triangle
108
- triangles.push(prev.i / dim);
109
- triangles.push(ear.i / dim);
110
- triangles.push(next.i / dim);
108
+ triangles.push(prev.i / dim | 0);
109
+ triangles.push(ear.i / dim | 0);
110
+ triangles.push(next.i / dim | 0);
111
111
  removeNode(ear); // skipping the next vertex leads to less sliver triangles
112
112
 
113
113
  ear = next.next;
@@ -141,10 +141,21 @@
141
141
  if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
142
142
  // now make sure we don't have other points inside the potential ear
143
143
 
144
- var p = ear.next.next;
145
-
146
- while (p !== ear.prev) {
147
- if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
144
+ var ax = a.x,
145
+ bx = b.x,
146
+ cx = c.x,
147
+ ay = a.y,
148
+ by = b.y,
149
+ cy = c.y; // triangle bbox; min & max are calculated like this for speed
150
+
151
+ var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx,
152
+ y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy,
153
+ x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx,
154
+ y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy;
155
+ var p = c.next;
156
+
157
+ while (p !== a) {
158
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
148
159
  p = p.next;
149
160
  }
150
161
 
@@ -156,34 +167,40 @@
156
167
  b = ear,
157
168
  c = ear.next;
158
169
  if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
159
- // triangle bbox; min & max are calculated like this for speed
160
170
 
161
- var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x,
162
- minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y,
163
- maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x,
164
- maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y; // z-order range for the current triangle bbox;
171
+ var ax = a.x,
172
+ bx = b.x,
173
+ cx = c.x,
174
+ ay = a.y,
175
+ by = b.y,
176
+ cy = c.y; // triangle bbox; min & max are calculated like this for speed
177
+
178
+ var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx,
179
+ y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy,
180
+ x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx,
181
+ y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; // z-order range for the current triangle bbox;
165
182
 
166
- var minZ = zOrder(minTX, minTY, minX, minY, invSize),
167
- maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);
183
+ var minZ = zOrder(x0, y0, minX, minY, invSize),
184
+ maxZ = zOrder(x1, y1, minX, minY, invSize);
168
185
  var p = ear.prevZ,
169
186
  n = ear.nextZ; // look for points inside the triangle in both directions
170
187
 
171
188
  while (p && p.z >= minZ && n && n.z <= maxZ) {
172
- if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
189
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
173
190
  p = p.prevZ;
174
- if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
191
+ if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
175
192
  n = n.nextZ;
176
193
  } // look for remaining points in decreasing z-order
177
194
 
178
195
 
179
196
  while (p && p.z >= minZ) {
180
- if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
197
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
181
198
  p = p.prevZ;
182
199
  } // look for remaining points in increasing z-order
183
200
 
184
201
 
185
202
  while (n && n.z <= maxZ) {
186
- if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
203
+ if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
187
204
  n = n.nextZ;
188
205
  }
189
206
 
@@ -199,9 +216,9 @@
199
216
  b = p.next.next;
200
217
 
201
218
  if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
202
- triangles.push(a.i / dim);
203
- triangles.push(p.i / dim);
204
- triangles.push(b.i / dim); // remove two nodes involved
219
+ triangles.push(a.i / dim | 0);
220
+ triangles.push(p.i / dim | 0);
221
+ triangles.push(b.i / dim | 0); // remove two nodes involved
205
222
 
206
223
  removeNode(p);
207
224
  removeNode(p.next);
@@ -230,8 +247,8 @@
230
247
  a = filterPoints(a, a.next);
231
248
  c = filterPoints(c, c.next); // run earcut on each half
232
249
 
233
- earcutLinked(a, triangles, dim, minX, minY, invSize);
234
- earcutLinked(c, triangles, dim, minX, minY, invSize);
250
+ earcutLinked(a, triangles, dim, minX, minY, invSize, 0);
251
+ earcutLinked(c, triangles, dim, minX, minY, invSize, 0);
235
252
  return;
236
253
  }
237
254
 
@@ -263,7 +280,6 @@
263
280
 
264
281
  for (i = 0; i < queue.length; i++) {
265
282
  outerNode = eliminateHole(queue[i], outerNode);
266
- outerNode = filterPoints(outerNode, outerNode.next);
267
283
  }
268
284
 
269
285
  return outerNode;
@@ -283,10 +299,8 @@
283
299
 
284
300
  var bridgeReverse = splitPolygon(bridge, hole); // filter collinear points around the cuts
285
301
 
286
- var filteredBridge = filterPoints(bridge, bridge.next);
287
- filterPoints(bridgeReverse, bridgeReverse.next); // Check if input node was removed by the filtering
288
-
289
- return outerNode === bridge ? filteredBridge : outerNode;
302
+ filterPoints(bridgeReverse, bridgeReverse.next);
303
+ return filterPoints(bridge, bridge.next);
290
304
  } // David Eberly's algorithm for finding a bridge between hole and outer polygon
291
305
 
292
306
 
@@ -304,22 +318,15 @@
304
318
 
305
319
  if (x <= hx && x > qx) {
306
320
  qx = x;
307
-
308
- if (x === hx) {
309
- if (hy === p.y) return p;
310
- if (hy === p.next.y) return p.next;
311
- }
312
-
313
321
  m = p.x < p.next.x ? p : p.next;
322
+ if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint
314
323
  }
315
324
  }
316
325
 
317
326
  p = p.next;
318
327
  } while (p !== outerNode);
319
328
 
320
- if (!m) return null;
321
- if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint
322
- // look for points inside the triangle of hole point, segment intersection and endpoint;
329
+ if (!m) return null; // look for points inside the triangle of hole point, segment intersection and endpoint;
323
330
  // if there are no points found, we have a valid connection;
324
331
  // otherwise choose the point of the minimum angle with the ray as connection point
325
332
 
@@ -356,7 +363,7 @@
356
363
  var p = start;
357
364
 
358
365
  do {
359
- if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);
366
+ if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);
360
367
  p.prevZ = p.prev;
361
368
  p.nextZ = p.next;
362
369
  p = p.next;
@@ -428,8 +435,8 @@
428
435
 
429
436
  function zOrder(x, y, minX, minY, invSize) {
430
437
  // coords are transformed into non-negative 15-bit integer range
431
- x = 32767 * (x - minX) * invSize;
432
- y = 32767 * (y - minY) * invSize;
438
+ x = (x - minX) * invSize | 0;
439
+ y = (y - minY) * invSize | 0;
433
440
  x = (x | x << 8) & 0x00FF00FF;
434
441
  x = (x | x << 4) & 0x0F0F0F0F;
435
442
  x = (x | x << 2) & 0x33333333;
@@ -456,7 +463,7 @@
456
463
 
457
464
 
458
465
  function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
459
- return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
466
+ return (cx - px) * (ay - py) >= (ax - px) * (cy - py) && (ax - px) * (by - py) >= (bx - px) * (ay - py) && (bx - px) * (cy - py) >= (cx - px) * (by - py);
460
467
  } // check if a diagonal between two polygon nodes is valid (lies in polygon interior)
461
468
 
462
469
 
@@ -589,7 +596,7 @@
589
596
  this.prev = null;
590
597
  this.next = null; // z-order curve value
591
598
 
592
- this.z = null; // previous and next nodes in z-order
599
+ this.z = 0; // previous and next nodes in z-order
593
600
 
594
601
  this.prevZ = null;
595
602
  this.nextZ = null; // indicates whether this is a steiner point
@@ -1 +1 @@
1
- {"version":3,"file":"poly-extrude.js","sources":["../node_modules/.pnpm/earcut@2.2.3/node_modules/earcut/src/earcut.js","../src/util.js","../src/polygon.js","../src/polyline.js"],"sourcesContent":["'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 1 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim);\n triangles.push(ear.i / dim);\n triangles.push(next.i / dim);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var p = ear.next.next;\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim);\n triangles.push(p.i / dim);\n triangles.push(b.i / dim);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize);\n earcutLinked(c, triangles, dim, minX, minY, invSize);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n outerNode = filterPoints(outerNode, outerNode.next);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n var filteredBridge = filterPoints(bridge, bridge.next);\n filterPoints(bridgeReverse, bridgeReverse.next);\n\n // Check if input node was removed by the filtering\n return outerNode === bridge ? filteredBridge : outerNode;\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n if (x === hx) {\n if (hy === p.y) return p;\n if (hy === p.next.y) return p.next;\n }\n m = p.x < p.next.x ? p : p.next;\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize;\n y = 32767 * (y - minY) * invSize;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = null;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/**\r\n * https://github.com/Turfjs/turf/blob/master/packages/turf-boolean-clockwise/index.ts\r\n * @param {*} ring\r\n * @returns\r\n */\r\nexport function isClockwise(ring) {\r\n let sum = 0;\r\n let i = 1;\r\n let prev;\r\n let cur;\r\n const len = ring.length;\r\n\r\n while (i < len) {\r\n prev = cur || ring[0];\r\n cur = ring[i];\r\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\r\n i++;\r\n }\r\n return sum > 0;\r\n}\r\n\r\nfunction v3Sub(out, v1, v2) {\r\n out[0] = v1[0] - v2[0];\r\n out[1] = v1[1] - v2[1];\r\n out[2] = v1[2] - v2[2];\r\n return out;\r\n}\r\n\r\nfunction v3Normalize(out, v) {\r\n const x = v[0];\r\n const y = v[1];\r\n const z = v[2];\r\n const d = Math.sqrt(x * x + y * y + z * z) || 1;\r\n out[0] = x / d;\r\n out[1] = y / d;\r\n out[2] = z / d;\r\n return out;\r\n}\r\n\r\nfunction v3Cross(out, v1, v2) {\r\n const ax = v1[0], ay = v1[1], az = v1[2],\r\n bx = v2[0], by = v2[1], bz = v2[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\nexport function generateNormal(indices, position) {\r\n\r\n function v3Set(p, a, b, c) {\r\n p[0] = a; p[1] = b; p[2] = c;\r\n }\r\n\r\n const p1 = [];\r\n const p2 = [];\r\n const p3 = [];\r\n\r\n const v21 = [];\r\n const v32 = [];\r\n\r\n const n = [];\r\n\r\n const len = indices.length;\r\n const normals = new Float32Array(position.length);\r\n let f = 0;\r\n while (f < len) {\r\n\r\n // const i1 = indices[f++] * 3;\r\n // const i2 = indices[f++] * 3;\r\n // const i3 = indices[f++] * 3;\r\n // const i1 = indices[f];\r\n // const i2 = indices[f + 1];\r\n // const i3 = indices[f + 2];\r\n const a = indices[f], b = indices[f + 1], c = indices[f + 2];\r\n const i1 = a * 3, i2 = b * 3, i3 = c * 3;\r\n\r\n v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);\r\n v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);\r\n v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);\r\n\r\n v3Sub(v32, p3, p2);\r\n v3Sub(v21, p1, p2);\r\n v3Cross(n, v32, v21);\r\n // Already be weighted by the triangle area\r\n for (let i = 0; i < 3; i++) {\r\n normals[i1 + i] += n[i];\r\n normals[i2 + i] += n[i];\r\n normals[i3 + i] += n[i];\r\n }\r\n f += 3;\r\n }\r\n\r\n let i = 0;\r\n const l = normals.length;\r\n while (i < l) {\r\n v3Set(n, normals[i], normals[i + 1], normals[i + 2]);\r\n v3Normalize(n, n);\r\n normals[i] = n[0] || 0;\r\n normals[i + 1] = n[1] || 0;\r\n normals[i + 2] = n[2] || 0;\r\n i += 3;\r\n }\r\n\r\n return normals;\r\n}\r\n\r\nexport function merge(results) {\r\n if (results.length === 1) {\r\n const result = {\r\n position: results[0].position,\r\n normal: results[0].normal,\r\n uv: results[0].uv,\r\n indices: results[0].indices,\r\n results\r\n };\r\n return result;\r\n }\r\n let plen = 0, ilen = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices } = results[i];\r\n plen += position.length;\r\n ilen += indices.length;\r\n }\r\n const result = {\r\n position: new Float32Array(plen),\r\n normal: new Float32Array(plen),\r\n uv: new Float32Array(plen / 3 * 2),\r\n indices: new Uint32Array(ilen),\r\n results\r\n };\r\n let pOffset = 0, pCount = 0, iIdx = 0, uvOffset = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices, normal, uv } = results[i];\r\n result.position.set(position, pOffset);\r\n result.normal.set(normal, pOffset);\r\n result.uv.set(uv, uvOffset);\r\n let j = 0;\r\n const len1 = indices.length;\r\n while (j < len1) {\r\n const pIndex = indices[j] + pCount;\r\n result.indices[iIdx] = pIndex;\r\n iIdx++;\r\n j++;\r\n }\r\n uvOffset += uv.length;\r\n pOffset += position.length;\r\n pCount += position.length / 3;\r\n }\r\n return result;\r\n}\r\n\r\nexport function radToDeg(rad) {\r\n return rad * 180 / Math.PI;\r\n}\r\n\r\nexport function degToRad(angle) {\r\n return angle / 180 * Math.PI;\r\n}\r\n\r\n// https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736\r\nexport function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {\r\n\r\n const idx1 = indexA * 3, idx2 = indexB * 3, idx3 = indexC * 3, idx4 = indexD * 3;\r\n const a_x = vertices[idx1];\r\n const a_y = vertices[idx1 + 1];\r\n const a_z = vertices[idx1 + 2];\r\n const b_x = vertices[idx2];\r\n const b_y = vertices[idx2 + 1];\r\n const b_z = vertices[idx2 + 2];\r\n const c_x = vertices[idx3];\r\n const c_y = vertices[idx3 + 1];\r\n const c_z = vertices[idx3 + 2];\r\n const d_x = vertices[idx4];\r\n const d_y = vertices[idx4 + 1];\r\n const d_z = vertices[idx4 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {\r\n\r\n uvs.push(a_x, 1 - a_z);\r\n uvs.push(b_x, 1 - b_z);\r\n uvs.push(c_x, 1 - c_z);\r\n uvs.push(d_x, 1 - d_z);\r\n } else {\r\n uvs.push(a_y, 1 - a_z);\r\n uvs.push(b_y, 1 - b_z);\r\n uvs.push(c_y, 1 - c_z);\r\n uvs.push(d_y, 1 - d_z);\r\n }\r\n\r\n}\r\n","\r\nimport earcut from 'earcut';\r\nimport { generateNormal, generateSideWallUV, isClockwise, merge } from './util';\r\n\r\nexport function extrudePolygons(polygons, options) {\r\n options = Object.assign({}, { depth: 2 }, options);\r\n const results = polygons.map(polygon => {\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n validateRing(ring);\r\n if (i === 0) {\r\n if (!isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n } else if (isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n if (isClosedRing(ring)) {\r\n ring.splice(ring.length - 1, 1);\r\n }\r\n }\r\n const result = flatVertices(polygon, options);\r\n result.polygon = polygon;\r\n const triangles = earcut(result.flatVertices, result.holes, 2);\r\n generateTopAndBottom(result, triangles);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.polygons = polygons;\r\n return result;\r\n\r\n}\r\n\r\nfunction generateTopAndBottom(result, triangles) {\r\n const index = [];\r\n const { count } = result;\r\n for (let i = 0, len = triangles.length; i < len; i += 3) {\r\n // top\r\n const a = triangles[i], b = triangles[i + 1], c = triangles[i + 2];\r\n index[i] = a;\r\n index[i + 1] = b;\r\n index[i + 2] = c;\r\n // bottom\r\n const idx = len + i;\r\n const a1 = count + a, b1 = count + b, c1 = count + c;\r\n index[idx] = a1;\r\n index[idx + 1] = b1;\r\n index[idx + 2] = c1;\r\n }\r\n result.index = index;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, polygon, uvs } = result;\r\n const z = options.depth;\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n let v2 = ring[j + 1];\r\n if (j === len1 - 1) {\r\n v2 = ring[0];\r\n }\r\n const idx = points.length / 3;\r\n const x1 = v1[0], y1 = v1[1], x2 = v2[0], y2 = v2[1];\r\n points.push(x1, y1, z, x2, y2, z, x1, y1, 0, x2, y2, 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // points.push(p3, p4, p1, p2);\r\n index.push(a, c, b, c, d, b);\r\n // index.push(c, d, b);\r\n\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n j++;\r\n }\r\n }\r\n}\r\n\r\nfunction calPolygonPointsCount(polygon) {\r\n let count = 0;\r\n let i = 0;\r\n const len = polygon.length;\r\n while (i < len) {\r\n count += (polygon[i].length);\r\n i++;\r\n }\r\n return count;\r\n}\r\n\r\nfunction flatVertices(polygon, options) {\r\n const count = calPolygonPointsCount(polygon);\r\n const len = polygon.length;\r\n const holes = [], flatVertices = new Float32Array(count * 2), points = [], uvs = [];\r\n const pOffset = count * 3, uOffset = count * 2;\r\n const z = options.depth;\r\n\r\n let idx0 = 0, idx1 = 0, idx2 = 0;\r\n for (let i = 0; i < len; i++) {\r\n const ring = polygon[i];\r\n if (i > 0) {\r\n holes.push(idx0 / 2);\r\n }\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const c = ring[j];\r\n const x = c[0], y = c[1];\r\n\r\n flatVertices[idx0++] = x;\r\n flatVertices[idx0++] = y;\r\n\r\n // top vertices\r\n points[idx1] = x;\r\n points[idx1 + 1] = y;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom vertices\r\n points[pOffset + idx1] = x;\r\n points[pOffset + idx1 + 1] = y;\r\n points[pOffset + idx1 + 2] = 0;\r\n\r\n uvs[idx2] = x;\r\n uvs[idx2 + 1] = y;\r\n\r\n uvs[uOffset + idx2] = x;\r\n uvs[uOffset + idx2 + 1] = y;\r\n\r\n idx1 += 3;\r\n idx2 += 2;\r\n j++;\r\n }\r\n }\r\n return {\r\n flatVertices,\r\n holes,\r\n points,\r\n count,\r\n uvs\r\n };\r\n\r\n}\r\n\r\nfunction validateRing(ring) {\r\n if (!isClosedRing(ring)) {\r\n ring.push(ring[0]);\r\n }\r\n}\r\n\r\nfunction isClosedRing(ring) {\r\n const len = ring.length;\r\n const [x1, y1] = ring[0], [x2, y2] = ring[len - 1];\r\n return (x1 === x2 && y1 === y2);\r\n}\r\n","import { degToRad, generateNormal, generateSideWallUV, merge, radToDeg } from './util';\r\n\r\nexport function extrudePolylines(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1 }, options);\r\n const results = lines.map(line => {\r\n const result = expandLine(line, options);\r\n result.line = line;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nfunction generateTopAndBottom(result, options) {\r\n const z = options.depth;\r\n const points = [], index = [], uvs = [];\r\n const { leftPoints, rightPoints } = result;\r\n let i = 0, len = leftPoints.length;\r\n while (i < len) {\r\n // top left\r\n const idx0 = i * 3;\r\n const [x1, y1] = leftPoints[i];\r\n points[idx0] = x1;\r\n points[idx0 + 1] = y1;\r\n points[idx0 + 2] = z;\r\n\r\n // top right\r\n const [x2, y2] = rightPoints[i];\r\n const idx1 = len * 3 + idx0;\r\n points[idx1] = x2;\r\n points[idx1 + 1] = y2;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom left\r\n const idx2 = (len * 2) * 3 + idx0;\r\n points[idx2] = x1;\r\n points[idx2 + 1] = y1;\r\n points[idx2 + 2] = 0;\r\n\r\n // bottom right\r\n const idx3 = (len * 2) * 3 + len * 3 + idx0;\r\n points[idx3] = x2;\r\n points[idx3 + 1] = y2;\r\n points[idx3 + 2] = 0;\r\n\r\n i++;\r\n }\r\n i = 0;\r\n len = points.length;\r\n while (i < len) {\r\n const x = points[i], y = points[i + 1];\r\n uvs.push(x, y);\r\n i += 3;\r\n }\r\n i = 0;\r\n len = leftPoints.length;\r\n while (i < len - 1) {\r\n // top\r\n // left1 left2 right1,right2\r\n const a1 = i, b1 = i + 1, c1 = a1 + len, d1 = b1 + len;\r\n index.push(a1, c1, b1);\r\n index.push(c1, d1, b1);\r\n\r\n // bottom\r\n // left1 left2 right1,right2\r\n const len2 = len * 2;\r\n const a2 = i + len2, b2 = a2 + 1, c2 = a2 + len, d2 = b2 + len;\r\n index.push(a2, c2, b2);\r\n index.push(c2, d2, b2);\r\n i++;\r\n }\r\n result.index = index;\r\n result.points = points;\r\n result.uvs = uvs;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, leftPoints, rightPoints, uvs } = result;\r\n const z = options.depth;\r\n const rings = [leftPoints, rightPoints];\r\n\r\n function addOneSideIndex(v1, v2) {\r\n const idx = points.length / 3;\r\n points.push(v1[0], v1[1], z, v2[0], v2[1], z, v1[0], v1[1], 0, v2[0], v2[1], 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n index.push(a, c, b, c, d, b);\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n }\r\n\r\n for (let i = 0, len = rings.length; i < len; i++) {\r\n let ring = rings[i];\r\n if (i > 0) {\r\n ring = ring.map(p => {\r\n return p;\r\n });\r\n ring = ring.reverse();\r\n }\r\n let j = 0;\r\n const len1 = ring.length - 1;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n const v2 = ring[j + 1];\r\n addOneSideIndex(v1, v2);\r\n j++;\r\n }\r\n }\r\n const len = leftPoints.length;\r\n const vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];\r\n for (let i = 0; i < vs.length; i += 2) {\r\n const v1 = vs[i], v2 = vs[i + 1];\r\n addOneSideIndex(v1, v2);\r\n }\r\n}\r\n\r\nconst TEMPV1 = { x: 0, y: 0 }, TEMPV2 = { x: 0, y: 0 };\r\n\r\nexport function expandLine(line, options) {\r\n let preAngle = 0;\r\n const radius = options.lineWidth / 2;\r\n const points = [], leftPoints = [], rightPoints = [];\r\n const len = line.length;\r\n let i = 0;\r\n while (i < len - 1) {\r\n const p1 = line[i],\r\n p2 = line[i + 1];\r\n const dy = p2[1] - p1[1],\r\n dx = p2[0] - p1[0];\r\n let rAngle = 0;\r\n const rad = Math.atan(dy / dx);\r\n const angle = radToDeg(rad);\r\n preAngle = angle;\r\n if (i === 0) {\r\n rAngle = angle;\r\n rAngle -= 90;\r\n } else {\r\n const p0 = line[i - 1];\r\n TEMPV1.x = p0[0] - p1[0];\r\n TEMPV1.y = p0[1] - p1[1];\r\n TEMPV2.x = p2[0] - p1[0];\r\n TEMPV2.y = p2[1] - p1[1];\r\n const vAngle = getAngle(TEMPV1, TEMPV2);\r\n rAngle = angle - vAngle / 2;\r\n }\r\n const rRad = degToRad(rAngle);\r\n const [op1, op2] = calOffsetPoint(rRad, radius, p1);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n i++;\r\n }\r\n let rAngle = preAngle;\r\n rAngle -= 90;\r\n const rRad = degToRad(rAngle);\r\n const p1 = line[len - 2];\r\n const p2 = line[len - 1];\r\n const [op1, op2] = calOffsetPoint(rRad, radius, p2);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n\r\n return { offsetPoints: points, leftPoints, rightPoints };\r\n}\r\n\r\nfunction calOffsetPoint(rad, radius, p) {\r\n const [x, y] = p;\r\n const x1 = Math.cos(rad) * radius, y1 = Math.sin(rad) * radius;\r\n const p1 = [x + x1, y + y1];\r\n const rad1 = rad += Math.PI;\r\n const x2 = Math.cos(rad1) * radius, y2 = Math.sin(rad1) * radius;\r\n const p2 = [x + x2, y + y2];\r\n return [p1, p2];\r\n}\r\n\r\nconst getAngle = ({ x: x1, y: y1 }, { x: x2, y: y2 }) => {\r\n const dot = x1 * x2 + y1 * y2;\r\n const det = x1 * y2 - y1 * x2;\r\n const angle = Math.atan2(det, dot) / Math.PI * 180;\r\n return (angle + 360) % 360;\r\n};\r\n\r\nfunction leftOnLine(p, p1, p2) {\r\n const [x1, y1] = p1;\r\n const [x2, y2] = p2;\r\n const [x, y] = p;\r\n return (y1 - y2) * x + (x2 - x1) * y + x1 * y2 - x2 * y1 > 0;\r\n}\r\n"],"names":["earcutModule","exports","earcut","earcut_1","data","holeIndices","dim","hasHoles","length","outerLen","outerNode","linkedList","triangles","next","prev","minX","minY","maxX","maxY","x","y","invSize","eliminateHoles","i","Math","max","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","p","again","steiner","area","ear","pass","indexCurve","stop","isEarHashed","isEar","push","cureLocalIntersections","splitEarcut","a","b","c","pointInTriangle","minTX","minTY","maxTX","maxTY","minZ","zOrder","maxZ","prevZ","n","nextZ","z","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","len","list","getLeftmost","sort","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","filteredBridge","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","abs","sectorContainsSector","sortLinked","q","e","tail","numMerges","pSize","qSize","inSize","leftmost","ax","ay","bx","by","cx","cy","px","py","intersectsPolygon","middleInside","r","p1","p2","q1","q2","o1","sign","o2","o3","o4","onSegment","min","num","inside","a2","Node","b2","an","bp","deviation","polygonArea","trianglesArea","sum","j","flatten","result","vertices","holes","dimensions","holeIndex","d","isClockwise","ring","cur","v3Sub","out","v1","v2","v3Normalize","v","sqrt","v3Cross","az","bz","generateNormal","indices","position","v3Set","p3","v21","v32","normals","Float32Array","f","i1","i2","i3","l","merge","results","normal","uv","plen","ilen","Uint32Array","pOffset","pCount","iIdx","uvOffset","set","len1","pIndex","radToDeg","rad","PI","degToRad","angle","generateSideWallUV","uvs","indexA","indexB","indexC","indexD","idx1","idx2","idx3","idx4","a_x","a_y","a_z","b_x","b_y","b_z","c_x","c_y","c_z","d_x","d_y","d_z","extrudePolygons","polygons","options","Object","assign","depth","map","polygon","validateRing","reverse","isClosedRing","splice","flatVertices","generateTopAndBottom","generateSides","points","index","count","idx","a1","b1","c1","x1","y1","x2","y2","calPolygonPointsCount","uOffset","idx0","extrudePolylines","lines","lineWidth","line","expandLine","leftPoints","rightPoints","d1","len2","c2","d2","rings","addOneSideIndex","vs","TEMPV1","TEMPV2","preAngle","radius","dy","dx","rAngle","atan","p0","vAngle","getAngle","rRad","calOffsetPoint","op1","op2","leftOnLine","offsetPoints","cos","sin","rad1","dot","det","atan2"],"mappings":"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"}
1
+ {"version":3,"file":"poly-extrude.js","sources":["../node_modules/.pnpm/earcut@2.2.4/node_modules/earcut/src/earcut.js","../src/util.js","../src/polygon.js","../src/polyline.js"],"sourcesContent":["'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","/**\r\n * https://github.com/Turfjs/turf/blob/master/packages/turf-boolean-clockwise/index.ts\r\n * @param {*} ring\r\n * @returns\r\n */\r\nexport function isClockwise(ring) {\r\n let sum = 0;\r\n let i = 1;\r\n let prev;\r\n let cur;\r\n const len = ring.length;\r\n\r\n while (i < len) {\r\n prev = cur || ring[0];\r\n cur = ring[i];\r\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\r\n i++;\r\n }\r\n return sum > 0;\r\n}\r\n\r\nfunction v3Sub(out, v1, v2) {\r\n out[0] = v1[0] - v2[0];\r\n out[1] = v1[1] - v2[1];\r\n out[2] = v1[2] - v2[2];\r\n return out;\r\n}\r\n\r\nfunction v3Normalize(out, v) {\r\n const x = v[0];\r\n const y = v[1];\r\n const z = v[2];\r\n const d = Math.sqrt(x * x + y * y + z * z) || 1;\r\n out[0] = x / d;\r\n out[1] = y / d;\r\n out[2] = z / d;\r\n return out;\r\n}\r\n\r\nfunction v3Cross(out, v1, v2) {\r\n const ax = v1[0], ay = v1[1], az = v1[2],\r\n bx = v2[0], by = v2[1], bz = v2[2];\r\n\r\n out[0] = ay * bz - az * by;\r\n out[1] = az * bx - ax * bz;\r\n out[2] = ax * by - ay * bx;\r\n return out;\r\n}\r\n\r\nexport function generateNormal(indices, position) {\r\n\r\n function v3Set(p, a, b, c) {\r\n p[0] = a; p[1] = b; p[2] = c;\r\n }\r\n\r\n const p1 = [];\r\n const p2 = [];\r\n const p3 = [];\r\n\r\n const v21 = [];\r\n const v32 = [];\r\n\r\n const n = [];\r\n\r\n const len = indices.length;\r\n const normals = new Float32Array(position.length);\r\n let f = 0;\r\n while (f < len) {\r\n\r\n // const i1 = indices[f++] * 3;\r\n // const i2 = indices[f++] * 3;\r\n // const i3 = indices[f++] * 3;\r\n // const i1 = indices[f];\r\n // const i2 = indices[f + 1];\r\n // const i3 = indices[f + 2];\r\n const a = indices[f], b = indices[f + 1], c = indices[f + 2];\r\n const i1 = a * 3, i2 = b * 3, i3 = c * 3;\r\n\r\n v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);\r\n v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);\r\n v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);\r\n\r\n v3Sub(v32, p3, p2);\r\n v3Sub(v21, p1, p2);\r\n v3Cross(n, v32, v21);\r\n // Already be weighted by the triangle area\r\n for (let i = 0; i < 3; i++) {\r\n normals[i1 + i] += n[i];\r\n normals[i2 + i] += n[i];\r\n normals[i3 + i] += n[i];\r\n }\r\n f += 3;\r\n }\r\n\r\n let i = 0;\r\n const l = normals.length;\r\n while (i < l) {\r\n v3Set(n, normals[i], normals[i + 1], normals[i + 2]);\r\n v3Normalize(n, n);\r\n normals[i] = n[0] || 0;\r\n normals[i + 1] = n[1] || 0;\r\n normals[i + 2] = n[2] || 0;\r\n i += 3;\r\n }\r\n\r\n return normals;\r\n}\r\n\r\nexport function merge(results) {\r\n if (results.length === 1) {\r\n const result = {\r\n position: results[0].position,\r\n normal: results[0].normal,\r\n uv: results[0].uv,\r\n indices: results[0].indices,\r\n results\r\n };\r\n return result;\r\n }\r\n let plen = 0, ilen = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices } = results[i];\r\n plen += position.length;\r\n ilen += indices.length;\r\n }\r\n const result = {\r\n position: new Float32Array(plen),\r\n normal: new Float32Array(plen),\r\n uv: new Float32Array(plen / 3 * 2),\r\n indices: new Uint32Array(ilen),\r\n results\r\n };\r\n let pOffset = 0, pCount = 0, iIdx = 0, uvOffset = 0;\r\n for (let i = 0, len = results.length; i < len; i++) {\r\n const { position, indices, normal, uv } = results[i];\r\n result.position.set(position, pOffset);\r\n result.normal.set(normal, pOffset);\r\n result.uv.set(uv, uvOffset);\r\n let j = 0;\r\n const len1 = indices.length;\r\n while (j < len1) {\r\n const pIndex = indices[j] + pCount;\r\n result.indices[iIdx] = pIndex;\r\n iIdx++;\r\n j++;\r\n }\r\n uvOffset += uv.length;\r\n pOffset += position.length;\r\n pCount += position.length / 3;\r\n }\r\n return result;\r\n}\r\n\r\nexport function radToDeg(rad) {\r\n return rad * 180 / Math.PI;\r\n}\r\n\r\nexport function degToRad(angle) {\r\n return angle / 180 * Math.PI;\r\n}\r\n\r\n// https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736\r\nexport function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {\r\n\r\n const idx1 = indexA * 3, idx2 = indexB * 3, idx3 = indexC * 3, idx4 = indexD * 3;\r\n const a_x = vertices[idx1];\r\n const a_y = vertices[idx1 + 1];\r\n const a_z = vertices[idx1 + 2];\r\n const b_x = vertices[idx2];\r\n const b_y = vertices[idx2 + 1];\r\n const b_z = vertices[idx2 + 2];\r\n const c_x = vertices[idx3];\r\n const c_y = vertices[idx3 + 1];\r\n const c_z = vertices[idx3 + 2];\r\n const d_x = vertices[idx4];\r\n const d_y = vertices[idx4 + 1];\r\n const d_z = vertices[idx4 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {\r\n\r\n uvs.push(a_x, 1 - a_z);\r\n uvs.push(b_x, 1 - b_z);\r\n uvs.push(c_x, 1 - c_z);\r\n uvs.push(d_x, 1 - d_z);\r\n } else {\r\n uvs.push(a_y, 1 - a_z);\r\n uvs.push(b_y, 1 - b_z);\r\n uvs.push(c_y, 1 - c_z);\r\n uvs.push(d_y, 1 - d_z);\r\n }\r\n\r\n}\r\n","\r\nimport earcut from 'earcut';\r\nimport { generateNormal, generateSideWallUV, isClockwise, merge } from './util';\r\n\r\nexport function extrudePolygons(polygons, options) {\r\n options = Object.assign({}, { depth: 2 }, options);\r\n const results = polygons.map(polygon => {\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n validateRing(ring);\r\n if (i === 0) {\r\n if (!isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n } else if (isClockwise(ring)) {\r\n polygon[i] = ring.reverse();\r\n }\r\n if (isClosedRing(ring)) {\r\n ring.splice(ring.length - 1, 1);\r\n }\r\n }\r\n const result = flatVertices(polygon, options);\r\n result.polygon = polygon;\r\n const triangles = earcut(result.flatVertices, result.holes, 2);\r\n generateTopAndBottom(result, triangles);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.polygons = polygons;\r\n return result;\r\n\r\n}\r\n\r\nfunction generateTopAndBottom(result, triangles) {\r\n const index = [];\r\n const { count } = result;\r\n for (let i = 0, len = triangles.length; i < len; i += 3) {\r\n // top\r\n const a = triangles[i], b = triangles[i + 1], c = triangles[i + 2];\r\n index[i] = a;\r\n index[i + 1] = b;\r\n index[i + 2] = c;\r\n // bottom\r\n const idx = len + i;\r\n const a1 = count + a, b1 = count + b, c1 = count + c;\r\n index[idx] = a1;\r\n index[idx + 1] = b1;\r\n index[idx + 2] = c1;\r\n }\r\n result.index = index;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, polygon, uvs } = result;\r\n const z = options.depth;\r\n for (let i = 0, len = polygon.length; i < len; i++) {\r\n const ring = polygon[i];\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n let v2 = ring[j + 1];\r\n if (j === len1 - 1) {\r\n v2 = ring[0];\r\n }\r\n const idx = points.length / 3;\r\n const x1 = v1[0], y1 = v1[1], x2 = v2[0], y2 = v2[1];\r\n points.push(x1, y1, z, x2, y2, z, x1, y1, 0, x2, y2, 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n // points.push(p3, p4, p1, p2);\r\n index.push(a, c, b, c, d, b);\r\n // index.push(c, d, b);\r\n\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n j++;\r\n }\r\n }\r\n}\r\n\r\nfunction calPolygonPointsCount(polygon) {\r\n let count = 0;\r\n let i = 0;\r\n const len = polygon.length;\r\n while (i < len) {\r\n count += (polygon[i].length);\r\n i++;\r\n }\r\n return count;\r\n}\r\n\r\nfunction flatVertices(polygon, options) {\r\n const count = calPolygonPointsCount(polygon);\r\n const len = polygon.length;\r\n const holes = [], flatVertices = new Float32Array(count * 2), points = [], uvs = [];\r\n const pOffset = count * 3, uOffset = count * 2;\r\n const z = options.depth;\r\n\r\n let idx0 = 0, idx1 = 0, idx2 = 0;\r\n for (let i = 0; i < len; i++) {\r\n const ring = polygon[i];\r\n if (i > 0) {\r\n holes.push(idx0 / 2);\r\n }\r\n let j = 0;\r\n const len1 = ring.length;\r\n while (j < len1) {\r\n const c = ring[j];\r\n const x = c[0], y = c[1];\r\n\r\n flatVertices[idx0++] = x;\r\n flatVertices[idx0++] = y;\r\n\r\n // top vertices\r\n points[idx1] = x;\r\n points[idx1 + 1] = y;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom vertices\r\n points[pOffset + idx1] = x;\r\n points[pOffset + idx1 + 1] = y;\r\n points[pOffset + idx1 + 2] = 0;\r\n\r\n uvs[idx2] = x;\r\n uvs[idx2 + 1] = y;\r\n\r\n uvs[uOffset + idx2] = x;\r\n uvs[uOffset + idx2 + 1] = y;\r\n\r\n idx1 += 3;\r\n idx2 += 2;\r\n j++;\r\n }\r\n }\r\n return {\r\n flatVertices,\r\n holes,\r\n points,\r\n count,\r\n uvs\r\n };\r\n\r\n}\r\n\r\nfunction validateRing(ring) {\r\n if (!isClosedRing(ring)) {\r\n ring.push(ring[0]);\r\n }\r\n}\r\n\r\nfunction isClosedRing(ring) {\r\n const len = ring.length;\r\n const [x1, y1] = ring[0], [x2, y2] = ring[len - 1];\r\n return (x1 === x2 && y1 === y2);\r\n}\r\n","import { degToRad, generateNormal, generateSideWallUV, merge, radToDeg } from './util';\r\n\r\nexport function extrudePolylines(lines, options) {\r\n options = Object.assign({}, { depth: 2, lineWidth: 1 }, options);\r\n const results = lines.map(line => {\r\n const result = expandLine(line, options);\r\n result.line = line;\r\n generateTopAndBottom(result, options);\r\n generateSides(result, options);\r\n result.position = new Float32Array(result.points);\r\n result.indices = new Uint32Array(result.index);\r\n result.uv = new Float32Array(result.uvs);\r\n result.normal = generateNormal(result.indices, result.position);\r\n return result;\r\n });\r\n const result = merge(results);\r\n result.lines = lines;\r\n return result;\r\n}\r\n\r\nfunction generateTopAndBottom(result, options) {\r\n const z = options.depth;\r\n const points = [], index = [], uvs = [];\r\n const { leftPoints, rightPoints } = result;\r\n let i = 0, len = leftPoints.length;\r\n while (i < len) {\r\n // top left\r\n const idx0 = i * 3;\r\n const [x1, y1] = leftPoints[i];\r\n points[idx0] = x1;\r\n points[idx0 + 1] = y1;\r\n points[idx0 + 2] = z;\r\n\r\n // top right\r\n const [x2, y2] = rightPoints[i];\r\n const idx1 = len * 3 + idx0;\r\n points[idx1] = x2;\r\n points[idx1 + 1] = y2;\r\n points[idx1 + 2] = z;\r\n\r\n // bottom left\r\n const idx2 = (len * 2) * 3 + idx0;\r\n points[idx2] = x1;\r\n points[idx2 + 1] = y1;\r\n points[idx2 + 2] = 0;\r\n\r\n // bottom right\r\n const idx3 = (len * 2) * 3 + len * 3 + idx0;\r\n points[idx3] = x2;\r\n points[idx3 + 1] = y2;\r\n points[idx3 + 2] = 0;\r\n\r\n i++;\r\n }\r\n i = 0;\r\n len = points.length;\r\n while (i < len) {\r\n const x = points[i], y = points[i + 1];\r\n uvs.push(x, y);\r\n i += 3;\r\n }\r\n i = 0;\r\n len = leftPoints.length;\r\n while (i < len - 1) {\r\n // top\r\n // left1 left2 right1,right2\r\n const a1 = i, b1 = i + 1, c1 = a1 + len, d1 = b1 + len;\r\n index.push(a1, c1, b1);\r\n index.push(c1, d1, b1);\r\n\r\n // bottom\r\n // left1 left2 right1,right2\r\n const len2 = len * 2;\r\n const a2 = i + len2, b2 = a2 + 1, c2 = a2 + len, d2 = b2 + len;\r\n index.push(a2, c2, b2);\r\n index.push(c2, d2, b2);\r\n i++;\r\n }\r\n result.index = index;\r\n result.points = points;\r\n result.uvs = uvs;\r\n}\r\n\r\nfunction generateSides(result, options) {\r\n const { points, index, leftPoints, rightPoints, uvs } = result;\r\n const z = options.depth;\r\n const rings = [leftPoints, rightPoints];\r\n\r\n function addOneSideIndex(v1, v2) {\r\n const idx = points.length / 3;\r\n points.push(v1[0], v1[1], z, v2[0], v2[1], z, v1[0], v1[1], 0, v2[0], v2[1], 0);\r\n const a = idx + 2, b = idx + 3, c = idx, d = idx + 1;\r\n index.push(a, c, b, c, d, b);\r\n generateSideWallUV(uvs, points, a, b, c, d);\r\n }\r\n\r\n for (let i = 0, len = rings.length; i < len; i++) {\r\n let ring = rings[i];\r\n if (i > 0) {\r\n ring = ring.map(p => {\r\n return p;\r\n });\r\n ring = ring.reverse();\r\n }\r\n let j = 0;\r\n const len1 = ring.length - 1;\r\n while (j < len1) {\r\n const v1 = ring[j];\r\n const v2 = ring[j + 1];\r\n addOneSideIndex(v1, v2);\r\n j++;\r\n }\r\n }\r\n const len = leftPoints.length;\r\n const vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];\r\n for (let i = 0; i < vs.length; i += 2) {\r\n const v1 = vs[i], v2 = vs[i + 1];\r\n addOneSideIndex(v1, v2);\r\n }\r\n}\r\n\r\nconst TEMPV1 = { x: 0, y: 0 }, TEMPV2 = { x: 0, y: 0 };\r\n\r\nexport function expandLine(line, options) {\r\n let preAngle = 0;\r\n const radius = options.lineWidth / 2;\r\n const points = [], leftPoints = [], rightPoints = [];\r\n const len = line.length;\r\n let i = 0;\r\n while (i < len - 1) {\r\n const p1 = line[i],\r\n p2 = line[i + 1];\r\n const dy = p2[1] - p1[1],\r\n dx = p2[0] - p1[0];\r\n let rAngle = 0;\r\n const rad = Math.atan(dy / dx);\r\n const angle = radToDeg(rad);\r\n preAngle = angle;\r\n if (i === 0) {\r\n rAngle = angle;\r\n rAngle -= 90;\r\n } else {\r\n const p0 = line[i - 1];\r\n TEMPV1.x = p0[0] - p1[0];\r\n TEMPV1.y = p0[1] - p1[1];\r\n TEMPV2.x = p2[0] - p1[0];\r\n TEMPV2.y = p2[1] - p1[1];\r\n const vAngle = getAngle(TEMPV1, TEMPV2);\r\n rAngle = angle - vAngle / 2;\r\n }\r\n const rRad = degToRad(rAngle);\r\n const [op1, op2] = calOffsetPoint(rRad, radius, p1);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n i++;\r\n }\r\n let rAngle = preAngle;\r\n rAngle -= 90;\r\n const rRad = degToRad(rAngle);\r\n const p1 = line[len - 2];\r\n const p2 = line[len - 1];\r\n const [op1, op2] = calOffsetPoint(rRad, radius, p2);\r\n points.push(op1, op2);\r\n if (leftOnLine(op1, p1, p2)) {\r\n leftPoints.push(op1);\r\n rightPoints.push(op2);\r\n } else {\r\n leftPoints.push(op2);\r\n rightPoints.push(op1);\r\n }\r\n\r\n return { offsetPoints: points, leftPoints, rightPoints };\r\n}\r\n\r\nfunction calOffsetPoint(rad, radius, p) {\r\n const [x, y] = p;\r\n const x1 = Math.cos(rad) * radius, y1 = Math.sin(rad) * radius;\r\n const p1 = [x + x1, y + y1];\r\n const rad1 = rad += Math.PI;\r\n const x2 = Math.cos(rad1) * radius, y2 = Math.sin(rad1) * radius;\r\n const p2 = [x + x2, y + y2];\r\n return [p1, p2];\r\n}\r\n\r\nconst getAngle = ({ x: x1, y: y1 }, { x: x2, y: y2 }) => {\r\n const dot = x1 * x2 + y1 * y2;\r\n const det = x1 * y2 - y1 * x2;\r\n const angle = Math.atan2(det, dot) / Math.PI * 180;\r\n return (angle + 360) % 360;\r\n};\r\n\r\nfunction leftOnLine(p, p1, p2) {\r\n const [x1, y1] = p1;\r\n const [x2, y2] = p2;\r\n const [x, y] = p;\r\n return (y1 - y2) * x + (x2 - x1) * y + x1 * y2 - x2 * y1 > 0;\r\n}\r\n"],"names":["earcutModule","exports","earcut","earcut_1","data","holeIndices","dim","hasHoles","length","outerLen","outerNode","linkedList","triangles","next","prev","minX","minY","maxX","maxY","x","y","invSize","eliminateHoles","i","Math","max","earcutLinked","start","end","clockwise","last","signedArea","insertNode","equals","removeNode","filterPoints","p","again","steiner","area","ear","pass","indexCurve","stop","isEarHashed","isEar","push","cureLocalIntersections","splitEarcut","a","b","c","ax","bx","cx","ay","by","cy","x0","y0","x1","y1","pointInTriangle","minZ","zOrder","maxZ","prevZ","n","nextZ","z","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","len","list","getLeftmost","sort","compareX","eliminateHole","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","Infinity","m","mx","my","tanMin","tan","abs","sectorContainsSector","sortLinked","q","e","tail","numMerges","pSize","qSize","inSize","leftmost","px","py","intersectsPolygon","middleInside","r","p1","p2","q1","q2","o1","sign","o2","o3","o4","onSegment","min","num","inside","a2","Node","b2","an","bp","deviation","polygonArea","trianglesArea","sum","j","flatten","result","vertices","holes","dimensions","holeIndex","d","isClockwise","ring","cur","v3Sub","out","v1","v2","v3Normalize","v","sqrt","v3Cross","az","bz","generateNormal","indices","position","v3Set","p3","v21","v32","normals","Float32Array","f","i1","i2","i3","l","merge","results","normal","uv","plen","ilen","Uint32Array","pOffset","pCount","iIdx","uvOffset","set","len1","pIndex","radToDeg","rad","PI","degToRad","angle","generateSideWallUV","uvs","indexA","indexB","indexC","indexD","idx1","idx2","idx3","idx4","a_x","a_y","a_z","b_x","b_y","b_z","c_x","c_y","c_z","d_x","d_y","d_z","extrudePolygons","polygons","options","Object","assign","depth","map","polygon","validateRing","reverse","isClosedRing","splice","flatVertices","generateTopAndBottom","generateSides","points","index","count","idx","a1","b1","c1","x2","y2","calPolygonPointsCount","uOffset","idx0","extrudePolylines","lines","lineWidth","line","expandLine","leftPoints","rightPoints","d1","len2","c2","d2","rings","addOneSideIndex","vs","TEMPV1","TEMPV2","preAngle","radius","dy","dx","rAngle","atan","p0","vAngle","getAngle","rRad","calOffsetPoint","op1","op2","leftOnLine","offsetPoints","cos","sin","rad1","dot","det","atan2"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  /*!
2
- * poly-extrude v0.0.8
2
+ * poly-extrude v0.0.9
3
3
  */
4
- !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).polyextrude=n.polyextrude||{})}(this,(function(n){"use strict";var e={exports:{}};function t(n,e,t){t=t||2;var x,u,a,v,h,p,y,c=e&&e.length,d=c?e[0]*t:n.length,g=r(n,0,d,t,!0),Z=[];if(!g||g.next===g.prev)return Z;if(c&&(g=function(n,e,t,o){var x,u,a,v=[];for(x=0,u=e.length;x<u;x++)(a=r(n,e[x]*o,x<u-1?e[x+1]*o:n.length,o,!1))===a.next&&(a.steiner=!0),v.push(l(a));for(v.sort(f),x=0;x<v.length;x++)t=i(t=s(v[x],t),t.next);return t}(n,e,g,t)),n.length>80*t){x=a=n[0],u=v=n[1];for(var w=t;w<d;w+=t)(h=n[w])<x&&(x=h),(p=n[w+1])<u&&(u=p),h>a&&(a=h),p>v&&(v=p);y=0!==(y=Math.max(a-x,v-u))?1/y:0}return o(g,Z,t,x,u,y),Z}function r(n,e,t,r,i){var o,x;if(i===F(n,e,t,r)>0)for(o=e;o<t;o+=r)x=P(o,n[o],n[o+1],x);else for(o=t-r;o>=e;o-=r)x=P(o,n[o],n[o+1],x);return x&&g(x,x.next)&&(A(x),x=x.next),x}function i(n,e){if(!n)return n;e||(e=n);var t,r=n;do{if(t=!1,r.steiner||!g(r,r.next)&&0!==d(r.prev,r,r.next))r=r.next;else{if(A(r),(r=e=r.prev)===r.next)break;t=!0}}while(t||r!==e);return e}function o(n,e,t,r,f,s,h){if(n){!h&&s&&function(n,e,t,r){var i=n;do{null===i.z&&(i.z=p(i.x,i.y,e,t,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==n);i.prevZ.nextZ=null,i.prevZ=null,function(n){var e,t,r,i,o,x,u,a,v=1;do{for(t=n,n=null,o=null,x=0;t;){for(x++,r=t,u=0,e=0;e<v&&(u++,r=r.nextZ);e++);for(a=v;u>0||a>0&&r;)0!==u&&(0===a||!r||t.z<=r.z)?(i=t,t=t.nextZ,u--):(i=r,r=r.nextZ,a--),o?o.nextZ=i:n=i,i.prevZ=o,o=i;t=r}o.nextZ=null,v*=2}while(x>1)}(i)}(n,r,f,s);for(var l,y,c=n;n.prev!==n.next;)if(l=n.prev,y=n.next,s?u(n,r,f,s):x(n))e.push(l.i/t),e.push(n.i/t),e.push(y.i/t),A(n),n=y.next,c=y.next;else if((n=y)===c){h?1===h?o(n=a(i(n),e,t),e,t,r,f,s,2):2===h&&v(n,e,t,r,f,s):o(i(n),e,t,r,f,s,1);break}}}function x(n){var e=n.prev,t=n,r=n.next;if(d(e,t,r)>=0)return!1;for(var i=n.next.next;i!==n.prev;){if(y(e.x,e.y,t.x,t.y,r.x,r.y,i.x,i.y)&&d(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function u(n,e,t,r){var i=n.prev,o=n,x=n.next;if(d(i,o,x)>=0)return!1;for(var u=i.x<o.x?i.x<x.x?i.x:x.x:o.x<x.x?o.x:x.x,a=i.y<o.y?i.y<x.y?i.y:x.y:o.y<x.y?o.y:x.y,v=i.x>o.x?i.x>x.x?i.x:x.x:o.x>x.x?o.x:x.x,f=i.y>o.y?i.y>x.y?i.y:x.y:o.y>x.y?o.y:x.y,s=p(u,a,e,t,r),h=p(v,f,e,t,r),l=n.prevZ,c=n.nextZ;l&&l.z>=s&&c&&c.z<=h;){if(l!==n.prev&&l!==n.next&&y(i.x,i.y,o.x,o.y,x.x,x.y,l.x,l.y)&&d(l.prev,l,l.next)>=0)return!1;if(l=l.prevZ,c!==n.prev&&c!==n.next&&y(i.x,i.y,o.x,o.y,x.x,x.y,c.x,c.y)&&d(c.prev,c,c.next)>=0)return!1;c=c.nextZ}for(;l&&l.z>=s;){if(l!==n.prev&&l!==n.next&&y(i.x,i.y,o.x,o.y,x.x,x.y,l.x,l.y)&&d(l.prev,l,l.next)>=0)return!1;l=l.prevZ}for(;c&&c.z<=h;){if(c!==n.prev&&c!==n.next&&y(i.x,i.y,o.x,o.y,x.x,x.y,c.x,c.y)&&d(c.prev,c,c.next)>=0)return!1;c=c.nextZ}return!0}function a(n,e,t){var r=n;do{var o=r.prev,x=r.next.next;!g(o,x)&&Z(o,r,r.next,x)&&m(o,x)&&m(x,o)&&(e.push(o.i/t),e.push(r.i/t),e.push(x.i/t),A(r),A(r.next),r=n=x),r=r.next}while(r!==n);return i(r)}function v(n,e,t,r,x,u){var a=n;do{for(var v=a.next.next;v!==a.prev;){if(a.i!==v.i&&c(a,v)){var f=b(a,v);return a=i(a,a.next),f=i(f,f.next),o(a,e,t,r,x,u),void o(f,e,t,r,x,u)}v=v.next}a=a.next}while(a!==n)}function f(n,e){return n.x-e.x}function s(n,e){var t=function(n,e){var t,r=e,i=n.x,o=n.y,x=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var u=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(u<=i&&u>x){if(x=u,u===i){if(o===r.y)return r;if(o===r.next.y)return r.next}t=r.x<r.next.x?r:r.next}}r=r.next}while(r!==e);if(!t)return null;if(i===x)return t;var a,v=t,f=t.x,s=t.y,p=1/0;r=t;do{i>=r.x&&r.x>=f&&i!==r.x&&y(o<s?i:x,o,f,s,o<s?x:i,o,r.x,r.y)&&(a=Math.abs(o-r.y)/(i-r.x),m(r,n)&&(a<p||a===p&&(r.x>t.x||r.x===t.x&&h(t,r)))&&(t=r,p=a)),r=r.next}while(r!==v);return t}(n,e);if(!t)return e;var r=b(t,n),o=i(t,t.next);return i(r,r.next),e===t?o:e}function h(n,e){return d(n.prev,n,e.prev)<0&&d(e.next,n,n.next)<0}function p(n,e,t,r,i){return(n=1431655765&((n=858993459&((n=252645135&((n=16711935&((n=32767*(n-t)*i)|n<<8))|n<<4))|n<<2))|n<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function l(n){var e=n,t=n;do{(e.x<t.x||e.x===t.x&&e.y<t.y)&&(t=e),e=e.next}while(e!==n);return t}function y(n,e,t,r,i,o,x,u){return(i-x)*(e-u)-(n-x)*(o-u)>=0&&(n-x)*(r-u)-(t-x)*(e-u)>=0&&(t-x)*(o-u)-(i-x)*(r-u)>=0}function c(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!function(n,e){var t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&Z(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}(n,e)&&(m(n,e)&&m(e,n)&&function(n,e){var t=n,r=!1,i=(n.x+e.x)/2,o=(n.y+e.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==n);return r}(n,e)&&(d(n.prev,n,e.prev)||d(n,e.prev,e))||g(n,e)&&d(n.prev,n,n.next)>0&&d(e.prev,e,e.next)>0)}function d(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function g(n,e){return n.x===e.x&&n.y===e.y}function Z(n,e,t,r){var i=M(d(n,e,t)),o=M(d(n,e,r)),x=M(d(t,r,n)),u=M(d(t,r,e));return i!==o&&x!==u||(!(0!==i||!w(n,t,e))||(!(0!==o||!w(n,r,e))||(!(0!==x||!w(t,n,r))||!(0!==u||!w(t,e,r)))))}function w(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function M(n){return n>0?1:n<0?-1:0}function m(n,e){return d(n.prev,n,n.next)<0?d(n,e,n.next)>=0&&d(n,n.prev,e)>=0:d(n,e,n.prev)<0||d(n,n.next,e)<0}function b(n,e){var t=new z(n.i,n.x,n.y),r=new z(e.i,e.x,e.y),i=n.next,o=e.prev;return n.next=e,e.prev=n,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r}function P(n,e,t,r){var i=new z(n,e,t);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function A(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function z(n,e,t){this.i=n,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function F(n,e,t,r){for(var i=0,o=e,x=t-r;o<t;o+=r)i+=(n[x]-n[o])*(n[o+1]+n[x+1]),x=o;return i}e.exports=t,e.exports.default=t,t.deviation=function(n,e,t,r){var i=e&&e.length,o=i?e[0]*t:n.length,x=Math.abs(F(n,0,o,t));if(i)for(var u=0,a=e.length;u<a;u++){var v=e[u]*t,f=u<a-1?e[u+1]*t:n.length;x-=Math.abs(F(n,v,f,t))}var s=0;for(u=0;u<r.length;u+=3){var h=r[u]*t,p=r[u+1]*t,l=r[u+2]*t;s+=Math.abs((n[h]-n[l])*(n[p+1]-n[h+1])-(n[h]-n[p])*(n[l+1]-n[h+1]))}return 0===x&&0===s?0:Math.abs((s-x)/x)},t.flatten=function(n){for(var e=n[0][0].length,t={vertices:[],holes:[],dimensions:e},r=0,i=0;i<n.length;i++){for(var o=0;o<n[i].length;o++)for(var x=0;x<e;x++)t.vertices.push(n[i][o][x]);i>0&&(r+=n[i-1].length,t.holes.push(r))}return t};var j=e.exports;function I(n){for(var e,t,r=0,i=1,o=n.length;i<o;)e=t||n[0],r+=((t=n[i])[0]-e[0])*(t[1]+e[1]),i++;return r>0}function O(n,e,t){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n}function U(n,e){var t=e[0],r=e[1],i=e[2],o=Math.sqrt(t*t+r*r+i*i)||1;return n[0]=t/o,n[1]=r/o,n[2]=i/o,n}function k(n,e){function t(n,e,t,r){n[0]=e,n[1]=t,n[2]=r}for(var r,i,o,x,u,a,v,f,s,h=[],p=[],l=[],y=[],c=[],d=[],g=n.length,Z=new Float32Array(e.length),w=0;w<g;){var M=3*n[w],m=3*n[w+1],b=3*n[w+2];t(h,e[M],e[M+1],e[M+2]),t(p,e[m],e[m+1],e[m+2]),t(l,e[b],e[b+1],e[b+2]),O(c,l,p),O(y,h,p),r=d,o=y,x=void 0,u=void 0,a=void 0,v=void 0,f=void 0,s=void 0,x=(i=c)[0],u=i[1],a=i[2],v=o[0],f=o[1],s=o[2],r[0]=u*s-a*f,r[1]=a*v-x*s,r[2]=x*f-u*v;for(var P=0;P<3;P++)Z[M+P]+=d[P],Z[m+P]+=d[P],Z[b+P]+=d[P];w+=3}for(var A=0,z=Z.length;A<z;)t(d,Z[A],Z[A+1],Z[A+2]),U(d,d),Z[A]=d[0]||0,Z[A+1]=d[1]||0,Z[A+2]=d[2]||0,A+=3;return Z}function T(n){if(1===n.length)return{position:n[0].position,normal:n[0].normal,uv:n[0].uv,indices:n[0].indices,results:n};for(var e=0,t=0,r=0,i=n.length;r<i;r++){var o=n[r],x=o.position,u=o.indices;e+=x.length,t+=u.length}for(var a={position:new Float32Array(e),normal:new Float32Array(e),uv:new Float32Array(e/3*2),indices:new Uint32Array(t),results:n},v=0,f=0,s=0,h=0,p=0,l=n.length;p<l;p++){var y=n[p],c=y.position,d=y.indices,g=y.normal,Z=y.uv;a.position.set(c,v),a.normal.set(g,v),a.uv.set(Z,h);for(var w=0,M=d.length;w<M;){var m=d[w]+f;a.indices[s]=m,s++,w++}h+=Z.length,v+=c.length,f+=c.length/3}return a}function V(n){return 180*n/Math.PI}function W(n){return n/180*Math.PI}function _(n,e,t,r,i,o){var x=3*t,u=3*r,a=3*i,v=3*o,f=e[x],s=e[x+1],h=e[x+2],p=e[u],l=e[u+1],y=e[u+2],c=e[a],d=e[a+1],g=e[a+2],Z=e[v],w=e[v+1],M=e[v+2];Math.abs(s-l)<Math.abs(f-p)?(n.push(f,1-h),n.push(p,1-y),n.push(c,1-g),n.push(Z,1-M)):(n.push(s,1-h),n.push(l,1-y),n.push(d,1-g),n.push(w,1-M))}function q(n){L(n)||n.push(n[0])}function L(n){var e=n.length,t=n[0],r=t[0],i=t[1],o=n[e-1],x=o[0],u=o[1];return r===x&&i===u}var B={x:0,y:0},C={x:0,y:0};function D(n,e){for(var t=0,r=e.lineWidth/2,i=[],o=[],x=[],u=n.length,a=0;a<u-1;){var v=n[a],f=n[a+1],s=f[1]-v[1],h=f[0]-v[0],p=0,l=V(Math.atan(s/h));if(t=l,0===a)p=l,p-=90;else{var y=n[a-1];B.x=y[0]-v[0],B.y=y[1]-v[1],C.x=f[0]-v[0],C.y=f[1]-v[1],p=l-G(B,C)/2}var c=E(W(p),r,v),d=c[0],g=c[1];i.push(d,g),H(d,v,f)?(o.push(d),x.push(g)):(o.push(g),x.push(d)),a++}var Z=t,w=W(Z-=90),M=n[u-2],m=n[u-1],b=E(w,r,m),P=b[0],A=b[1];return i.push(P,A),H(P,M,m)?(o.push(P),x.push(A)):(o.push(A),x.push(P)),{offsetPoints:i,leftPoints:o,rightPoints:x}}function E(n,e,t){var r=t[0],i=t[1],o=[r+Math.cos(n)*e,i+Math.sin(n)*e],x=n+=Math.PI;return[o,[r+Math.cos(x)*e,i+Math.sin(x)*e]]}var G=function(n,e){var t=n.x,r=n.y,i=e.x,o=e.y,x=t*i+r*o,u=t*o-r*i;return(Math.atan2(u,x)/Math.PI*180+360)%360};function H(n,e,t){var r=e[0],i=e[1],o=t[0],x=t[1];return(i-x)*n[0]+(o-r)*n[1]+r*x-o*i>0}n.expandLine=D,n.extrudePolygons=function(n,e){e=Object.assign({},{depth:2},e);var t=n.map((function(n){for(var t=0,r=n.length;t<r;t++){var i=n[t];q(i),0===t?I(i)||(n[t]=i.reverse()):I(i)&&(n[t]=i.reverse()),L(i)&&i.splice(i.length-1,1)}var o=function(n,e){for(var t=function(n){var e=0,t=0,r=n.length;for(;t<r;)e+=n[t].length,t++;return e}(n),r=n.length,i=[],o=new Float32Array(2*t),x=[],u=[],a=3*t,v=2*t,f=e.depth,s=0,h=0,p=0,l=0;l<r;l++){var y=n[l];l>0&&i.push(s/2);for(var c=0,d=y.length;c<d;){var g=y[c],Z=g[0],w=g[1];o[s++]=Z,o[s++]=w,x[h]=Z,x[h+1]=w,x[h+2]=f,x[a+h]=Z,x[a+h+1]=w,x[a+h+2]=0,u[p]=Z,u[p+1]=w,u[v+p]=Z,u[v+p+1]=w,h+=3,p+=2,c++}}return{flatVertices:o,holes:i,points:x,count:t,uvs:u}}(n,e);return o.polygon=n,function(n,e){for(var t=[],r=n.count,i=0,o=e.length;i<o;i+=3){var x=e[i],u=e[i+1],a=e[i+2];t[i]=x,t[i+1]=u,t[i+2]=a;var v=o+i,f=r+x,s=r+u,h=r+a;t[v]=f,t[v+1]=s,t[v+2]=h}n.index=t}(o,j(o.flatVertices,o.holes,2)),function(n,e){for(var t=n.points,r=n.index,i=n.polygon,o=n.uvs,x=e.depth,u=0,a=i.length;u<a;u++)for(var v=i[u],f=0,s=v.length;f<s;){var h=v[f],p=v[f+1];f===s-1&&(p=v[0]);var l=t.length/3,y=h[0],c=h[1],d=p[0],g=p[1];t.push(y,c,x,d,g,x,y,c,0,d,g,0);var Z=l+2,w=l+3,M=l,m=l+1;r.push(Z,M,w,M,m,w),_(o,t,Z,w,M,m),f++}}(o,e),o.position=new Float32Array(o.points),o.indices=new Uint32Array(o.index),o.uv=new Float32Array(o.uvs),o.normal=k(o.indices,o.position),o})),r=T(t);return r.polygons=n,r},n.extrudePolylines=function(n,e){e=Object.assign({},{depth:2,lineWidth:1},e);var t=n.map((function(n){var t=D(n,e);return t.line=n,function(n,e){var t=e.depth,r=[],i=[],o=[],x=n.leftPoints,u=n.rightPoints,a=0,v=x.length;for(;a<v;){var f=3*a,s=x[a],h=s[0],p=s[1];r[f]=h,r[f+1]=p,r[f+2]=t;var l=u[a],y=l[0],c=l[1],d=3*v+f;r[d]=y,r[d+1]=c,r[d+2]=t;var g=2*v*3+f;r[g]=h,r[g+1]=p,r[g+2]=0;var Z=2*v*3+3*v+f;r[Z]=y,r[Z+1]=c,r[Z+2]=0,a++}a=0,v=r.length;for(;a<v;){var w=r[a],M=r[a+1];o.push(w,M),a+=3}a=0,v=x.length;for(;a<v-1;){var m=a,b=a+1,P=m+v,A=b+v;i.push(m,P,b),i.push(P,A,b);var z=a+2*v,F=z+1,j=z+v,I=F+v;i.push(z,j,F),i.push(j,I,F),a++}n.index=i,n.points=r,n.uvs=o}(t,e),function(n,e){var t=n.points,r=n.index,i=n.leftPoints,o=n.rightPoints,x=n.uvs,u=e.depth,a=[i,o];function v(n,e){var i=t.length/3;t.push(n[0],n[1],u,e[0],e[1],u,n[0],n[1],0,e[0],e[1],0);var o=i+2,a=i+3,v=i,f=i+1;r.push(o,v,a,v,f,a),_(x,t,o,a,v,f)}for(var f=0,s=a.length;f<s;f++){var h=a[f];f>0&&(h=(h=h.map((function(n){return n}))).reverse());for(var p=0,l=h.length-1;p<l;){v(h[p],h[p+1]),p++}}for(var y=i.length,c=[o[0],i[0],i[y-1],o[y-1]],d=0;d<c.length;d+=2){v(c[d],c[d+1])}}(t,e),t.position=new Float32Array(t.points),t.indices=new Uint32Array(t.index),t.uv=new Float32Array(t.uvs),t.normal=k(t.indices,t.position),t})),r=T(t);return r.lines=n,r},Object.defineProperty(n,"__esModule",{value:!0})}));
4
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).polyextrude=n.polyextrude||{})}(this,(function(n){"use strict";var e={exports:{}};function t(n,e,t){t=t||2;var i,u,x,a,v,h,l,y=e&&e.length,c=y?e[0]*t:n.length,d=r(n,0,c,t,!0),g=[];if(!d||d.next===d.prev)return g;if(y&&(d=function(n,e,t,i){var o,u,x,a=[];for(o=0,u=e.length;o<u;o++)(x=r(n,e[o]*i,o<u-1?e[o+1]*i:n.length,i,!1))===x.next&&(x.steiner=!0),a.push(p(x));for(a.sort(f),o=0;o<a.length;o++)t=s(a[o],t);return t}(n,e,d,t)),n.length>80*t){i=x=n[0],u=a=n[1];for(var Z=t;Z<c;Z+=t)(v=n[Z])<i&&(i=v),(h=n[Z+1])<u&&(u=h),v>x&&(x=v),h>a&&(a=h);l=0!==(l=Math.max(x-i,a-u))?32767/l:0}return o(d,g,t,i,u,l,0),g}function r(n,e,t,r,i){var o,u;if(i===F(n,e,t,r)>0)for(o=e;o<t;o+=r)u=P(o,n[o],n[o+1],u);else for(o=t-r;o>=e;o-=r)u=P(o,n[o],n[o+1],u);return u&&g(u,u.next)&&(A(u),u=u.next),u}function i(n,e){if(!n)return n;e||(e=n);var t,r=n;do{if(t=!1,r.steiner||!g(r,r.next)&&0!==d(r.prev,r,r.next))r=r.next;else{if(A(r),(r=e=r.prev)===r.next)break;t=!0}}while(t||r!==e);return e}function o(n,e,t,r,f,s,h){if(n){!h&&s&&function(n,e,t,r){var i=n;do{0===i.z&&(i.z=l(i.x,i.y,e,t,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==n);i.prevZ.nextZ=null,i.prevZ=null,function(n){var e,t,r,i,o,u,x,a,v=1;do{for(t=n,n=null,o=null,u=0;t;){for(u++,r=t,x=0,e=0;e<v&&(x++,r=r.nextZ);e++);for(a=v;x>0||a>0&&r;)0!==x&&(0===a||!r||t.z<=r.z)?(i=t,t=t.nextZ,x--):(i=r,r=r.nextZ,a--),o?o.nextZ=i:n=i,i.prevZ=o,o=i;t=r}o.nextZ=null,v*=2}while(u>1)}(i)}(n,r,f,s);for(var p,y,c=n;n.prev!==n.next;)if(p=n.prev,y=n.next,s?x(n,r,f,s):u(n))e.push(p.i/t|0),e.push(n.i/t|0),e.push(y.i/t|0),A(n),n=y.next,c=y.next;else if((n=y)===c){h?1===h?o(n=a(i(n),e,t),e,t,r,f,s,2):2===h&&v(n,e,t,r,f,s):o(i(n),e,t,r,f,s,1);break}}}function u(n){var e=n.prev,t=n,r=n.next;if(d(e,t,r)>=0)return!1;for(var i=e.x,o=t.x,u=r.x,x=e.y,a=t.y,v=r.y,f=i<o?i<u?i:u:o<u?o:u,s=x<a?x<v?x:v:a<v?a:v,h=i>o?i>u?i:u:o>u?o:u,l=x>a?x>v?x:v:a>v?a:v,p=r.next;p!==e;){if(p.x>=f&&p.x<=h&&p.y>=s&&p.y<=l&&y(i,x,o,a,u,v,p.x,p.y)&&d(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function x(n,e,t,r){var i=n.prev,o=n,u=n.next;if(d(i,o,u)>=0)return!1;for(var x=i.x,a=o.x,v=u.x,f=i.y,s=o.y,h=u.y,p=x<a?x<v?x:v:a<v?a:v,c=f<s?f<h?f:h:s<h?s:h,g=x>a?x>v?x:v:a>v?a:v,Z=f>s?f>h?f:h:s>h?s:h,w=l(p,c,e,t,r),M=l(g,Z,e,t,r),m=n.prevZ,b=n.nextZ;m&&m.z>=w&&b&&b.z<=M;){if(m.x>=p&&m.x<=g&&m.y>=c&&m.y<=Z&&m!==i&&m!==u&&y(x,f,a,s,v,h,m.x,m.y)&&d(m.prev,m,m.next)>=0)return!1;if(m=m.prevZ,b.x>=p&&b.x<=g&&b.y>=c&&b.y<=Z&&b!==i&&b!==u&&y(x,f,a,s,v,h,b.x,b.y)&&d(b.prev,b,b.next)>=0)return!1;b=b.nextZ}for(;m&&m.z>=w;){if(m.x>=p&&m.x<=g&&m.y>=c&&m.y<=Z&&m!==i&&m!==u&&y(x,f,a,s,v,h,m.x,m.y)&&d(m.prev,m,m.next)>=0)return!1;m=m.prevZ}for(;b&&b.z<=M;){if(b.x>=p&&b.x<=g&&b.y>=c&&b.y<=Z&&b!==i&&b!==u&&y(x,f,a,s,v,h,b.x,b.y)&&d(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function a(n,e,t){var r=n;do{var o=r.prev,u=r.next.next;!g(o,u)&&Z(o,r,r.next,u)&&m(o,u)&&m(u,o)&&(e.push(o.i/t|0),e.push(r.i/t|0),e.push(u.i/t|0),A(r),A(r.next),r=n=u),r=r.next}while(r!==n);return i(r)}function v(n,e,t,r,u,x){var a=n;do{for(var v=a.next.next;v!==a.prev;){if(a.i!==v.i&&c(a,v)){var f=b(a,v);return a=i(a,a.next),f=i(f,f.next),o(a,e,t,r,u,x,0),void o(f,e,t,r,u,x,0)}v=v.next}a=a.next}while(a!==n)}function f(n,e){return n.x-e.x}function s(n,e){var t=function(n,e){var t,r=e,i=n.x,o=n.y,u=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var x=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(x<=i&&x>u&&(u=x,t=r.x<r.next.x?r:r.next,x===i))return t}r=r.next}while(r!==e);if(!t)return null;var a,v=t,f=t.x,s=t.y,l=1/0;r=t;do{i>=r.x&&r.x>=f&&i!==r.x&&y(o<s?i:u,o,f,s,o<s?u:i,o,r.x,r.y)&&(a=Math.abs(o-r.y)/(i-r.x),m(r,n)&&(a<l||a===l&&(r.x>t.x||r.x===t.x&&h(t,r)))&&(t=r,l=a)),r=r.next}while(r!==v);return t}(n,e);if(!t)return e;var r=b(t,n);return i(r,r.next),i(t,t.next)}function h(n,e){return d(n.prev,n,e.prev)<0&&d(e.next,n,n.next)<0}function l(n,e,t,r,i){return(n=1431655765&((n=858993459&((n=252645135&((n=16711935&((n=(n-t)*i|0)|n<<8))|n<<4))|n<<2))|n<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-r)*i|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function p(n){var e=n,t=n;do{(e.x<t.x||e.x===t.x&&e.y<t.y)&&(t=e),e=e.next}while(e!==n);return t}function y(n,e,t,r,i,o,u,x){return(i-u)*(e-x)>=(n-u)*(o-x)&&(n-u)*(r-x)>=(t-u)*(e-x)&&(t-u)*(o-x)>=(i-u)*(r-x)}function c(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!function(n,e){var t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&Z(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}(n,e)&&(m(n,e)&&m(e,n)&&function(n,e){var t=n,r=!1,i=(n.x+e.x)/2,o=(n.y+e.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==n);return r}(n,e)&&(d(n.prev,n,e.prev)||d(n,e.prev,e))||g(n,e)&&d(n.prev,n,n.next)>0&&d(e.prev,e,e.next)>0)}function d(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function g(n,e){return n.x===e.x&&n.y===e.y}function Z(n,e,t,r){var i=M(d(n,e,t)),o=M(d(n,e,r)),u=M(d(t,r,n)),x=M(d(t,r,e));return i!==o&&u!==x||(!(0!==i||!w(n,t,e))||(!(0!==o||!w(n,r,e))||(!(0!==u||!w(t,n,r))||!(0!==x||!w(t,e,r)))))}function w(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function M(n){return n>0?1:n<0?-1:0}function m(n,e){return d(n.prev,n,n.next)<0?d(n,e,n.next)>=0&&d(n,n.prev,e)>=0:d(n,e,n.prev)<0||d(n,n.next,e)<0}function b(n,e){var t=new z(n.i,n.x,n.y),r=new z(e.i,e.x,e.y),i=n.next,o=e.prev;return n.next=e,e.prev=n,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r}function P(n,e,t,r){var i=new z(n,e,t);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function A(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function z(n,e,t){this.i=n,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function F(n,e,t,r){for(var i=0,o=e,u=t-r;o<t;o+=r)i+=(n[u]-n[o])*(n[o+1]+n[u+1]),u=o;return i}e.exports=t,e.exports.default=t,t.deviation=function(n,e,t,r){var i=e&&e.length,o=i?e[0]*t:n.length,u=Math.abs(F(n,0,o,t));if(i)for(var x=0,a=e.length;x<a;x++){var v=e[x]*t,f=x<a-1?e[x+1]*t:n.length;u-=Math.abs(F(n,v,f,t))}var s=0;for(x=0;x<r.length;x+=3){var h=r[x]*t,l=r[x+1]*t,p=r[x+2]*t;s+=Math.abs((n[h]-n[p])*(n[l+1]-n[h+1])-(n[h]-n[l])*(n[p+1]-n[h+1]))}return 0===u&&0===s?0:Math.abs((s-u)/u)},t.flatten=function(n){for(var e=n[0][0].length,t={vertices:[],holes:[],dimensions:e},r=0,i=0;i<n.length;i++){for(var o=0;o<n[i].length;o++)for(var u=0;u<e;u++)t.vertices.push(n[i][o][u]);i>0&&(r+=n[i-1].length,t.holes.push(r))}return t};var j=e.exports;function I(n){for(var e,t,r=0,i=1,o=n.length;i<o;)e=t||n[0],r+=((t=n[i])[0]-e[0])*(t[1]+e[1]),i++;return r>0}function O(n,e,t){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n}function U(n,e){var t=e[0],r=e[1],i=e[2],o=Math.sqrt(t*t+r*r+i*i)||1;return n[0]=t/o,n[1]=r/o,n[2]=i/o,n}function k(n,e){function t(n,e,t,r){n[0]=e,n[1]=t,n[2]=r}for(var r,i,o,u,x,a,v,f,s,h=[],l=[],p=[],y=[],c=[],d=[],g=n.length,Z=new Float32Array(e.length),w=0;w<g;){var M=3*n[w],m=3*n[w+1],b=3*n[w+2];t(h,e[M],e[M+1],e[M+2]),t(l,e[m],e[m+1],e[m+2]),t(p,e[b],e[b+1],e[b+2]),O(c,p,l),O(y,h,l),r=d,o=y,u=void 0,x=void 0,a=void 0,v=void 0,f=void 0,s=void 0,u=(i=c)[0],x=i[1],a=i[2],v=o[0],f=o[1],s=o[2],r[0]=x*s-a*f,r[1]=a*v-u*s,r[2]=u*f-x*v;for(var P=0;P<3;P++)Z[M+P]+=d[P],Z[m+P]+=d[P],Z[b+P]+=d[P];w+=3}for(var A=0,z=Z.length;A<z;)t(d,Z[A],Z[A+1],Z[A+2]),U(d,d),Z[A]=d[0]||0,Z[A+1]=d[1]||0,Z[A+2]=d[2]||0,A+=3;return Z}function T(n){if(1===n.length)return{position:n[0].position,normal:n[0].normal,uv:n[0].uv,indices:n[0].indices,results:n};for(var e=0,t=0,r=0,i=n.length;r<i;r++){var o=n[r],u=o.position,x=o.indices;e+=u.length,t+=x.length}for(var a={position:new Float32Array(e),normal:new Float32Array(e),uv:new Float32Array(e/3*2),indices:new Uint32Array(t),results:n},v=0,f=0,s=0,h=0,l=0,p=n.length;l<p;l++){var y=n[l],c=y.position,d=y.indices,g=y.normal,Z=y.uv;a.position.set(c,v),a.normal.set(g,v),a.uv.set(Z,h);for(var w=0,M=d.length;w<M;){var m=d[w]+f;a.indices[s]=m,s++,w++}h+=Z.length,v+=c.length,f+=c.length/3}return a}function V(n){return 180*n/Math.PI}function W(n){return n/180*Math.PI}function _(n,e,t,r,i,o){var u=3*t,x=3*r,a=3*i,v=3*o,f=e[u],s=e[u+1],h=e[u+2],l=e[x],p=e[x+1],y=e[x+2],c=e[a],d=e[a+1],g=e[a+2],Z=e[v],w=e[v+1],M=e[v+2];Math.abs(s-p)<Math.abs(f-l)?(n.push(f,1-h),n.push(l,1-y),n.push(c,1-g),n.push(Z,1-M)):(n.push(s,1-h),n.push(p,1-y),n.push(d,1-g),n.push(w,1-M))}function q(n){L(n)||n.push(n[0])}function L(n){var e=n.length,t=n[0],r=t[0],i=t[1],o=n[e-1],u=o[0],x=o[1];return r===u&&i===x}var B={x:0,y:0},C={x:0,y:0};function D(n,e){for(var t=0,r=e.lineWidth/2,i=[],o=[],u=[],x=n.length,a=0;a<x-1;){var v=n[a],f=n[a+1],s=f[1]-v[1],h=f[0]-v[0],l=0,p=V(Math.atan(s/h));if(t=p,0===a)l=p,l-=90;else{var y=n[a-1];B.x=y[0]-v[0],B.y=y[1]-v[1],C.x=f[0]-v[0],C.y=f[1]-v[1],l=p-G(B,C)/2}var c=E(W(l),r,v),d=c[0],g=c[1];i.push(d,g),H(d,v,f)?(o.push(d),u.push(g)):(o.push(g),u.push(d)),a++}var Z=t,w=W(Z-=90),M=n[x-2],m=n[x-1],b=E(w,r,m),P=b[0],A=b[1];return i.push(P,A),H(P,M,m)?(o.push(P),u.push(A)):(o.push(A),u.push(P)),{offsetPoints:i,leftPoints:o,rightPoints:u}}function E(n,e,t){var r=t[0],i=t[1],o=[r+Math.cos(n)*e,i+Math.sin(n)*e],u=n+=Math.PI;return[o,[r+Math.cos(u)*e,i+Math.sin(u)*e]]}var G=function(n,e){var t=n.x,r=n.y,i=e.x,o=e.y,u=t*i+r*o,x=t*o-r*i;return(Math.atan2(x,u)/Math.PI*180+360)%360};function H(n,e,t){var r=e[0],i=e[1],o=t[0],u=t[1];return(i-u)*n[0]+(o-r)*n[1]+r*u-o*i>0}n.expandLine=D,n.extrudePolygons=function(n,e){e=Object.assign({},{depth:2},e);var t=n.map((function(n){for(var t=0,r=n.length;t<r;t++){var i=n[t];q(i),0===t?I(i)||(n[t]=i.reverse()):I(i)&&(n[t]=i.reverse()),L(i)&&i.splice(i.length-1,1)}var o=function(n,e){for(var t=function(n){var e=0,t=0,r=n.length;for(;t<r;)e+=n[t].length,t++;return e}(n),r=n.length,i=[],o=new Float32Array(2*t),u=[],x=[],a=3*t,v=2*t,f=e.depth,s=0,h=0,l=0,p=0;p<r;p++){var y=n[p];p>0&&i.push(s/2);for(var c=0,d=y.length;c<d;){var g=y[c],Z=g[0],w=g[1];o[s++]=Z,o[s++]=w,u[h]=Z,u[h+1]=w,u[h+2]=f,u[a+h]=Z,u[a+h+1]=w,u[a+h+2]=0,x[l]=Z,x[l+1]=w,x[v+l]=Z,x[v+l+1]=w,h+=3,l+=2,c++}}return{flatVertices:o,holes:i,points:u,count:t,uvs:x}}(n,e);return o.polygon=n,function(n,e){for(var t=[],r=n.count,i=0,o=e.length;i<o;i+=3){var u=e[i],x=e[i+1],a=e[i+2];t[i]=u,t[i+1]=x,t[i+2]=a;var v=o+i,f=r+u,s=r+x,h=r+a;t[v]=f,t[v+1]=s,t[v+2]=h}n.index=t}(o,j(o.flatVertices,o.holes,2)),function(n,e){for(var t=n.points,r=n.index,i=n.polygon,o=n.uvs,u=e.depth,x=0,a=i.length;x<a;x++)for(var v=i[x],f=0,s=v.length;f<s;){var h=v[f],l=v[f+1];f===s-1&&(l=v[0]);var p=t.length/3,y=h[0],c=h[1],d=l[0],g=l[1];t.push(y,c,u,d,g,u,y,c,0,d,g,0);var Z=p+2,w=p+3,M=p,m=p+1;r.push(Z,M,w,M,m,w),_(o,t,Z,w,M,m),f++}}(o,e),o.position=new Float32Array(o.points),o.indices=new Uint32Array(o.index),o.uv=new Float32Array(o.uvs),o.normal=k(o.indices,o.position),o})),r=T(t);return r.polygons=n,r},n.extrudePolylines=function(n,e){e=Object.assign({},{depth:2,lineWidth:1},e);var t=n.map((function(n){var t=D(n,e);return t.line=n,function(n,e){var t=e.depth,r=[],i=[],o=[],u=n.leftPoints,x=n.rightPoints,a=0,v=u.length;for(;a<v;){var f=3*a,s=u[a],h=s[0],l=s[1];r[f]=h,r[f+1]=l,r[f+2]=t;var p=x[a],y=p[0],c=p[1],d=3*v+f;r[d]=y,r[d+1]=c,r[d+2]=t;var g=2*v*3+f;r[g]=h,r[g+1]=l,r[g+2]=0;var Z=2*v*3+3*v+f;r[Z]=y,r[Z+1]=c,r[Z+2]=0,a++}a=0,v=r.length;for(;a<v;){var w=r[a],M=r[a+1];o.push(w,M),a+=3}a=0,v=u.length;for(;a<v-1;){var m=a,b=a+1,P=m+v,A=b+v;i.push(m,P,b),i.push(P,A,b);var z=a+2*v,F=z+1,j=z+v,I=F+v;i.push(z,j,F),i.push(j,I,F),a++}n.index=i,n.points=r,n.uvs=o}(t,e),function(n,e){var t=n.points,r=n.index,i=n.leftPoints,o=n.rightPoints,u=n.uvs,x=e.depth,a=[i,o];function v(n,e){var i=t.length/3;t.push(n[0],n[1],x,e[0],e[1],x,n[0],n[1],0,e[0],e[1],0);var o=i+2,a=i+3,v=i,f=i+1;r.push(o,v,a,v,f,a),_(u,t,o,a,v,f)}for(var f=0,s=a.length;f<s;f++){var h=a[f];f>0&&(h=(h=h.map((function(n){return n}))).reverse());for(var l=0,p=h.length-1;l<p;){v(h[l],h[l+1]),l++}}for(var y=i.length,c=[o[0],i[0],i[y-1],o[y-1]],d=0;d<c.length;d+=2){v(c[d],c[d+1])}}(t,e),t.position=new Float32Array(t.points),t.indices=new Uint32Array(t.index),t.uv=new Float32Array(t.uvs),t.normal=k(t.indices,t.position),t})),r=T(t);return r.lines=n,r},Object.defineProperty(n,"__esModule",{value:!0})}));
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * poly-extrude v0.0.8
2
+ * poly-extrude v0.0.9
3
3
  */
4
4
  var earcut$2 = {exports: {}};
5
5
 
@@ -32,10 +32,10 @@ function earcut(data, holeIndices, dim) {
32
32
 
33
33
 
34
34
  invSize = Math.max(maxX - minX, maxY - minY);
35
- invSize = invSize !== 0 ? 1 / invSize : 0;
35
+ invSize = invSize !== 0 ? 32767 / invSize : 0;
36
36
  }
37
37
 
38
- earcutLinked(outerNode, triangles, dim, minX, minY, invSize);
38
+ earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);
39
39
  return triangles;
40
40
  } // create a circular doubly linked list from polygon points in the specified winding order
41
41
 
@@ -99,9 +99,9 @@ function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {
99
99
 
100
100
  if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {
101
101
  // cut off the triangle
102
- triangles.push(prev.i / dim);
103
- triangles.push(ear.i / dim);
104
- triangles.push(next.i / dim);
102
+ triangles.push(prev.i / dim | 0);
103
+ triangles.push(ear.i / dim | 0);
104
+ triangles.push(next.i / dim | 0);
105
105
  removeNode(ear); // skipping the next vertex leads to less sliver triangles
106
106
 
107
107
  ear = next.next;
@@ -135,10 +135,21 @@ function isEar(ear) {
135
135
  if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
136
136
  // now make sure we don't have other points inside the potential ear
137
137
 
138
- var p = ear.next.next;
139
-
140
- while (p !== ear.prev) {
141
- if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
138
+ var ax = a.x,
139
+ bx = b.x,
140
+ cx = c.x,
141
+ ay = a.y,
142
+ by = b.y,
143
+ cy = c.y; // triangle bbox; min & max are calculated like this for speed
144
+
145
+ var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx,
146
+ y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy,
147
+ x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx,
148
+ y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy;
149
+ var p = c.next;
150
+
151
+ while (p !== a) {
152
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
142
153
  p = p.next;
143
154
  }
144
155
 
@@ -150,34 +161,40 @@ function isEarHashed(ear, minX, minY, invSize) {
150
161
  b = ear,
151
162
  c = ear.next;
152
163
  if (area(a, b, c) >= 0) return false; // reflex, can't be an ear
153
- // triangle bbox; min & max are calculated like this for speed
154
164
 
155
- var minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x,
156
- minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y,
157
- maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x,
158
- maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y; // z-order range for the current triangle bbox;
165
+ var ax = a.x,
166
+ bx = b.x,
167
+ cx = c.x,
168
+ ay = a.y,
169
+ by = b.y,
170
+ cy = c.y; // triangle bbox; min & max are calculated like this for speed
171
+
172
+ var x0 = ax < bx ? ax < cx ? ax : cx : bx < cx ? bx : cx,
173
+ y0 = ay < by ? ay < cy ? ay : cy : by < cy ? by : cy,
174
+ x1 = ax > bx ? ax > cx ? ax : cx : bx > cx ? bx : cx,
175
+ y1 = ay > by ? ay > cy ? ay : cy : by > cy ? by : cy; // z-order range for the current triangle bbox;
159
176
 
160
- var minZ = zOrder(minTX, minTY, minX, minY, invSize),
161
- maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);
177
+ var minZ = zOrder(x0, y0, minX, minY, invSize),
178
+ maxZ = zOrder(x1, y1, minX, minY, invSize);
162
179
  var p = ear.prevZ,
163
180
  n = ear.nextZ; // look for points inside the triangle in both directions
164
181
 
165
182
  while (p && p.z >= minZ && n && n.z <= maxZ) {
166
- if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
183
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
167
184
  p = p.prevZ;
168
- if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
185
+ if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
169
186
  n = n.nextZ;
170
187
  } // look for remaining points in decreasing z-order
171
188
 
172
189
 
173
190
  while (p && p.z >= minZ) {
174
- if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
191
+ if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;
175
192
  p = p.prevZ;
176
193
  } // look for remaining points in increasing z-order
177
194
 
178
195
 
179
196
  while (n && n.z <= maxZ) {
180
- if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
197
+ if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;
181
198
  n = n.nextZ;
182
199
  }
183
200
 
@@ -193,9 +210,9 @@ function cureLocalIntersections(start, triangles, dim) {
193
210
  b = p.next.next;
194
211
 
195
212
  if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {
196
- triangles.push(a.i / dim);
197
- triangles.push(p.i / dim);
198
- triangles.push(b.i / dim); // remove two nodes involved
213
+ triangles.push(a.i / dim | 0);
214
+ triangles.push(p.i / dim | 0);
215
+ triangles.push(b.i / dim | 0); // remove two nodes involved
199
216
 
200
217
  removeNode(p);
201
218
  removeNode(p.next);
@@ -224,8 +241,8 @@ function splitEarcut(start, triangles, dim, minX, minY, invSize) {
224
241
  a = filterPoints(a, a.next);
225
242
  c = filterPoints(c, c.next); // run earcut on each half
226
243
 
227
- earcutLinked(a, triangles, dim, minX, minY, invSize);
228
- earcutLinked(c, triangles, dim, minX, minY, invSize);
244
+ earcutLinked(a, triangles, dim, minX, minY, invSize, 0);
245
+ earcutLinked(c, triangles, dim, minX, minY, invSize, 0);
229
246
  return;
230
247
  }
231
248
 
@@ -257,7 +274,6 @@ function eliminateHoles(data, holeIndices, outerNode, dim) {
257
274
 
258
275
  for (i = 0; i < queue.length; i++) {
259
276
  outerNode = eliminateHole(queue[i], outerNode);
260
- outerNode = filterPoints(outerNode, outerNode.next);
261
277
  }
262
278
 
263
279
  return outerNode;
@@ -277,10 +293,8 @@ function eliminateHole(hole, outerNode) {
277
293
 
278
294
  var bridgeReverse = splitPolygon(bridge, hole); // filter collinear points around the cuts
279
295
 
280
- var filteredBridge = filterPoints(bridge, bridge.next);
281
- filterPoints(bridgeReverse, bridgeReverse.next); // Check if input node was removed by the filtering
282
-
283
- return outerNode === bridge ? filteredBridge : outerNode;
296
+ filterPoints(bridgeReverse, bridgeReverse.next);
297
+ return filterPoints(bridge, bridge.next);
284
298
  } // David Eberly's algorithm for finding a bridge between hole and outer polygon
285
299
 
286
300
 
@@ -298,22 +312,15 @@ function findHoleBridge(hole, outerNode) {
298
312
 
299
313
  if (x <= hx && x > qx) {
300
314
  qx = x;
301
-
302
- if (x === hx) {
303
- if (hy === p.y) return p;
304
- if (hy === p.next.y) return p.next;
305
- }
306
-
307
315
  m = p.x < p.next.x ? p : p.next;
316
+ if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint
308
317
  }
309
318
  }
310
319
 
311
320
  p = p.next;
312
321
  } while (p !== outerNode);
313
322
 
314
- if (!m) return null;
315
- if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint
316
- // look for points inside the triangle of hole point, segment intersection and endpoint;
323
+ if (!m) return null; // look for points inside the triangle of hole point, segment intersection and endpoint;
317
324
  // if there are no points found, we have a valid connection;
318
325
  // otherwise choose the point of the minimum angle with the ray as connection point
319
326
 
@@ -350,7 +357,7 @@ function indexCurve(start, minX, minY, invSize) {
350
357
  var p = start;
351
358
 
352
359
  do {
353
- if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);
360
+ if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);
354
361
  p.prevZ = p.prev;
355
362
  p.nextZ = p.next;
356
363
  p = p.next;
@@ -422,8 +429,8 @@ function sortLinked(list) {
422
429
 
423
430
  function zOrder(x, y, minX, minY, invSize) {
424
431
  // coords are transformed into non-negative 15-bit integer range
425
- x = 32767 * (x - minX) * invSize;
426
- y = 32767 * (y - minY) * invSize;
432
+ x = (x - minX) * invSize | 0;
433
+ y = (y - minY) * invSize | 0;
427
434
  x = (x | x << 8) & 0x00FF00FF;
428
435
  x = (x | x << 4) & 0x0F0F0F0F;
429
436
  x = (x | x << 2) & 0x33333333;
@@ -450,7 +457,7 @@ function getLeftmost(start) {
450
457
 
451
458
 
452
459
  function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {
453
- return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;
460
+ return (cx - px) * (ay - py) >= (ax - px) * (cy - py) && (ax - px) * (by - py) >= (bx - px) * (ay - py) && (bx - px) * (cy - py) >= (cx - px) * (by - py);
454
461
  } // check if a diagonal between two polygon nodes is valid (lies in polygon interior)
455
462
 
456
463
 
@@ -583,7 +590,7 @@ function Node(i, x, y) {
583
590
  this.prev = null;
584
591
  this.next = null; // z-order curve value
585
592
 
586
- this.z = null; // previous and next nodes in z-order
593
+ this.z = 0; // previous and next nodes in z-order
587
594
 
588
595
  this.prevZ = null;
589
596
  this.nextZ = null; // indicates whether this is a steiner point
package/package.json CHANGED
@@ -1,47 +1,47 @@
1
- {
2
- "name": "poly-extrude",
3
- "version": "0.0.8",
4
- "description": "",
5
- "main": "dist/poly-extrude.js",
6
- "module": "dist/poly-extrude.mjs",
7
- "scripts": {
8
- "test": "echo \"Error: no test specified\" && exit 1",
9
- "lint": "eslint src/**/*.js",
10
- "build": "npm run lint && cross-env NODE_ENV=dev rollup -c"
11
- },
12
- "repository": {
13
- "type": "git",
14
- "url": "git+https://github.com/deyihu/poly-extrude.git"
15
- },
16
- "author": "",
17
- "license": "ISC",
18
- "bugs": {
19
- "url": "https://github.com/deyihu/poly-extrude/issues"
20
- },
21
- "homepage": "https://github.com/deyihu/poly-extrude#readme",
22
- "devDependencies": {
23
- "@babel/core": "^7.17.5",
24
- "@babel/preset-env": "^7.16.11",
25
- "@rollup/plugin-babel": "^5.3.0",
26
- "@rollup/plugin-commonjs": "^21.0.1",
27
- "@rollup/plugin-json": "^4.1.0",
28
- "@rollup/plugin-node-resolve": "^13.1.3",
29
- "cross-env": "^5.1.4",
30
- "eslint": "^6.2.2",
31
- "eslint-config-standard": "^14.1.0",
32
- "eslint-plugin-import": "^2.18.2",
33
- "eslint-plugin-node": "^10.0.0",
34
- "eslint-plugin-promise": "^4.2.1",
35
- "eslint-plugin-standard": "^4.0.1",
36
- "rollup": "^2.64.0",
37
- "rollup-plugin-terser": "^7.0.2"
38
- },
39
- "dependencies": {
40
- "earcut": "^2.2.3"
41
- },
42
- "files": [
43
- "dist/",
44
- "src/",
45
- "index.js"
46
- ]
47
- }
1
+ {
2
+ "name": "poly-extrude",
3
+ "version": "0.0.9",
4
+ "description": "",
5
+ "main": "dist/poly-extrude.js",
6
+ "module": "dist/poly-extrude.mjs",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1",
9
+ "lint": "eslint src/**/*.js",
10
+ "build": "npm run lint && cross-env NODE_ENV=dev rollup -c"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/deyihu/poly-extrude.git"
15
+ },
16
+ "author": "",
17
+ "license": "ISC",
18
+ "bugs": {
19
+ "url": "https://github.com/deyihu/poly-extrude/issues"
20
+ },
21
+ "homepage": "https://github.com/deyihu/poly-extrude#readme",
22
+ "devDependencies": {
23
+ "@babel/core": "^7.17.5",
24
+ "@babel/preset-env": "^7.16.11",
25
+ "@rollup/plugin-babel": "^5.3.0",
26
+ "@rollup/plugin-commonjs": "^21.0.1",
27
+ "@rollup/plugin-json": "^4.1.0",
28
+ "@rollup/plugin-node-resolve": "^13.1.3",
29
+ "cross-env": "^5.1.4",
30
+ "eslint": "^6.2.2",
31
+ "eslint-config-standard": "^14.1.0",
32
+ "eslint-plugin-import": "^2.18.2",
33
+ "eslint-plugin-node": "^10.0.0",
34
+ "eslint-plugin-promise": "^4.2.1",
35
+ "eslint-plugin-standard": "^4.0.1",
36
+ "rollup": "^2.64.0",
37
+ "rollup-plugin-terser": "^7.0.2"
38
+ },
39
+ "dependencies": {
40
+ "earcut": "^2.2.4"
41
+ },
42
+ "files": [
43
+ "dist/",
44
+ "src/",
45
+ "index.js"
46
+ ]
47
+ }
package/readme.md CHANGED
@@ -31,7 +31,7 @@ pnpm i poly-extrude
31
31
  ### ESM
32
32
 
33
33
  ```js
34
- import {extrudePolygons,extrudePolyline} from 'poly-extrude';
34
+ import {extrudePolygons,extrudePolylines} from 'poly-extrude';
35
35
  const polygons=[
36
36
  //polygon
37
37
  [
@@ -57,7 +57,7 @@ pnpm i poly-extrude
57
57
  [[x,y],[x,y],...........],
58
58
  ];
59
59
 
60
- const result = extrudePolyline(polylines,{depth:2,lineWidth:2});
60
+ const result = extrudePolylines(polylines,{depth:2,lineWidth:2});
61
61
  const {positon,normal,uv,indices}=result;
62
62
  //do something
63
63
  ```
@@ -93,7 +93,7 @@ pnpm i poly-extrude
93
93
  [[x,y],[x,y],...........],
94
94
  ];
95
95
 
96
- const result = polyextrude.extrudePolyline(polylines,{depth:2,lineWidth:2});
96
+ const result = polyextrude.extrudePolylines(polylines,{depth:2,lineWidth:2});
97
97
  const {positon,normal,uv,indices}=result;
98
98
  //do something
99
99
  </script>