poly-extrude 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { PolylineType } from "./type";
2
- import { mergeArray } from "./util";
2
+ import { mergeArray, pointDistance, pointEqual } from "./util";
3
+ import { Bezier } from 'bezier-js';
3
4
  //https://github.com/bbecquet/Leaflet.PolylineOffset/blob/master/leaflet.polylineoffset.js
4
5
 
5
6
  /**
@@ -230,4 +231,69 @@ export function polylineOffset(line: PolylineType, options: polylineOffsetOption
230
231
  result.push([x, y, z]);
231
232
  }
232
233
  return result;
234
+ }
235
+
236
+ type polylineRoundOptions = {
237
+ roundSize: number,
238
+ steps?: number;
239
+ }
240
+
241
+ export function polylineRound(line: PolylineType, options: polylineRoundOptions): PolylineType {
242
+ options = Object.assign({ roundSize: 0, steps: 10 }, options);
243
+ if (options.roundSize === 0) {
244
+ return line;
245
+ }
246
+ if (!line || line.length < 3) {
247
+ return line;
248
+ }
249
+ const len = line.length;
250
+ const { roundSize, steps } = options;
251
+
252
+ const points = [line[0]];
253
+ let pre = line[0];
254
+ let idx = 0;
255
+
256
+ for (let i = 1; i < len; i++) {
257
+ const p1 = line[i - 1], p2 = line[i], p3 = line[i + 1];
258
+ if (!p3 || !p1 || !p2) {
259
+ continue;
260
+ }
261
+ if (pointEqual(pre, p2)) {
262
+ continue;
263
+ }
264
+ const d1 = pointDistance(p2, p1), d2 = pointDistance(p2, p3);
265
+ if (d1 < roundSize || d2 < roundSize) {
266
+ pre = p2;
267
+ points[++idx] = p2;
268
+ continue;
269
+ }
270
+ const dx1 = p2[0] - p1[0], dy1 = p2[1] - p1[1];
271
+ const dx2 = p3[0] - p2[0], dy2 = p3[1] - p2[1];
272
+
273
+ const percent1 = (d1 - roundSize) / d1;
274
+ const percent2 = roundSize / d2;
275
+ const c1 = {
276
+ x: p1[0] + percent1 * dx1,
277
+ y: p1[1] + percent1 * dy1
278
+ };
279
+ const c2 = {
280
+ x: p2[0] + percent2 * dx2,
281
+ y: p2[1] + percent2 * dy2
282
+ };
283
+ const d3 = pointDistance([c1.x, c1.y], [c2.x, c2.y]);
284
+ if (d3 < roundSize / 10) {
285
+ pre = p2;
286
+ points[++idx] = p2;
287
+ continue;
288
+ }
289
+ const be = new Bezier([c1, { x: p2[0], y: p2[1] }, c2]);
290
+ const path = be.getLUT(steps);
291
+ for (let j = 0, len1 = path.length; j < len1; j++) {
292
+ const p = path[j];
293
+ points[++idx] = [p.x, p.y];
294
+ }
295
+ pre = p2;
296
+ }
297
+ points.push(line[len - 1]);
298
+ return points;
233
299
  }
package/src/util.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { Vector3 } from './math/Vector3';
2
2
  import { PolygonType, PolylineType, ResultType } from './type';
3
3
 
4
+ type Point = Array<number>;
5
+
4
6
  export function mergeArray(array1, array2) {
5
7
  let index = array1.length - 1;
6
8
  for (let i = 0, len = array2.length; i < len; i++) {
@@ -310,3 +312,13 @@ export function calLineDistance(line) {
310
312
  }
311
313
  return distance;
312
314
  }
315
+
316
+
317
+ export function pointEqual(p1: Point, p2: Point) {
318
+ return p1[0] === p2[0] && p1[1] === p2[1];
319
+ }
320
+
321
+ export function pointDistance(p1: Point, p2: Point) {
322
+ const dx = p2[0] - p1[0], dy = p2[1] - p1[1];
323
+ return Math.sqrt(dx * dx + dy * dy);
324
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"polylineoffset.js","sourceRoot":"","sources":["../src/polylineoffset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAcpC,SAAS,YAAY,CAAC,GAAU,EAAE,GAAU;IACxC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO;QACH,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;KACvB,CAAC;AACN,CAAC;AAED,SAAS,IAAI,CAAC,EAAS,EAAE,EAAS,EAAE,CAAQ;IACxC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC;IAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;AAC/B,CAAC;AAED;;;EAGE;AACF,SAAS,YAAY,CAAC,GAAU,EAAE,GAAU,EAAE,GAAU,EAAE,GAAU;IAChE,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,GAAG;YACN,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC9B,CAAC,EAAE,CAAC;SACP,CAAC;QACF,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG;YACN,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAC9B,CAAC,EAAE,CAAC;SACP,CAAC;QACF,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IAEb,CAAC;IAED,IAAI,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG;QACN,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,CAAC,EAAE,CAAC;KACP,CAAC;IACF,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,EAAS,EAAE,IAAY,EAAE,OAAe;IAC5D,OAAO;QACH,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAClC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAClC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;KACf,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,MAAM,EAAE,QAAgB;IAC7C,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QACD,CAAC,GAAG;YACA,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE,IAAI,CAAC;SACb,CAAC;QACF,CAAC,GAAG;YACA,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE,IAAI,CAAC;SACb,CAAA;QACD,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE7C,cAAc,CAAC,IAAI,CAAC;YAChB,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,EAAE;gBACJ,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC;gBACxC,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC;aAC3C;SACJ,CAAC,CAAC;IACP,CAAC;IACD,OAAO,cAAc,CAAC;AAG1B,CAAC;AAED;;EAEE;AACF,SAAS,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM;IAChC,8BAA8B;IAC9B,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC;SAC7B,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IACtC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEzC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACzC,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,CAAC;IACtB,OAAO;QACH,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACrB,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE;IAC1B,MAAM,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;EAEE;AACF,SAAS,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ;IACjC,sCAAsC;IACtC,sCAAsC;IACtC,IAAI,EAAE,CAAC,WAAW,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACzD,+DAA+D;IAC/D,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC5B,CAAC,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,4EAA4E;IAC5E,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,mDAAmD;IACnD,IAAI,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC/B,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;IAC/D,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;IAC7D,wDAAwD;IACxD,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QACxB,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACvB,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExD,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC;AAGD,SAAS,YAAY,CAAC,GAAiB,EAAE,OAA8B;IACnE,IAAI,cAAc,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,IAAkB,EAAE,OAA8B;IAC7E,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,SAAS;QACb,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}