poly-extrude 0.11.0 → 0.13.0

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,5 @@
1
1
  /*!
2
- * poly-extrude v0.11.0
2
+ * poly-extrude v0.13.0
3
3
  */
4
4
  (function (global, factory) {
5
5
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
@@ -1993,6 +1993,35 @@
1993
1993
 
1994
1994
  return points;
1995
1995
  }
1996
+ function calLineDistance(line) {
1997
+ var distance = 0;
1998
+
1999
+ for (var i = 0, len = line.length; i < len; i++) {
2000
+ var p1 = line[i],
2001
+ p2 = line[i + 1];
2002
+
2003
+ if (i === 0) {
2004
+ p1.distance = 0;
2005
+ }
2006
+
2007
+ if (p1 && p2) {
2008
+ var x1 = p1[0],
2009
+ y1 = p1[1],
2010
+ z1 = p1[2];
2011
+ var x2 = p2[0],
2012
+ y2 = p2[1],
2013
+ z2 = p2[2];
2014
+ var dx = x1 - x2,
2015
+ dy = y1 - y2,
2016
+ dz = (z1 || 0) - (z2 || 0);
2017
+ var dis = Math.sqrt(dx * dx + dy * dy + dz * dz);
2018
+ distance += dis;
2019
+ p2.distance = distance;
2020
+ }
2021
+ }
2022
+
2023
+ return distance;
2024
+ }
1996
2025
 
1997
2026
  function extrudePolygons(polygons, options) {
1998
2027
  options = Object.assign({}, {
@@ -2216,7 +2245,8 @@
2216
2245
  options = Object.assign({}, {
2217
2246
  depth: 2,
2218
2247
  lineWidth: 1,
2219
- bottomStickGround: false
2248
+ bottomStickGround: false,
2249
+ pathUV: false
2220
2250
  }, options);
2221
2251
  checkOptions(options);
2222
2252
  var results = lines.map(function (line) {
@@ -2240,7 +2270,9 @@
2240
2270
  lineWidth: 1,
2241
2271
  side: 'left',
2242
2272
  sideDepth: 0,
2243
- bottomStickGround: false
2273
+ bottomStickGround: false,
2274
+ pathUV: false,
2275
+ isSlope: true
2244
2276
  }, options);
2245
2277
  checkOptions(options);
2246
2278
  var _options = options,
@@ -2297,13 +2329,24 @@
2297
2329
  rz = depths[1];
2298
2330
  }
2299
2331
 
2300
- var points = [],
2301
- indices = [],
2302
- uv = [];
2303
2332
  var leftPoints = result.leftPoints,
2304
2333
  rightPoints = result.rightPoints;
2334
+ var line = result.line;
2335
+ var pathUV = options.pathUV;
2336
+
2337
+ if (pathUV) {
2338
+ calLineDistance(line);
2339
+
2340
+ for (var _i = 0, _len = line.length; _i < _len; _i++) {
2341
+ leftPoints[_i].distance = rightPoints[_i].distance = line[_i].distance;
2342
+ }
2343
+ }
2344
+
2305
2345
  var i = 0,
2306
2346
  len = leftPoints.length;
2347
+ var points = [],
2348
+ indices = [],
2349
+ uv = [];
2307
2350
 
2308
2351
  while (i < len) {
2309
2352
  // top left
@@ -2342,22 +2385,42 @@
2342
2385
 
2343
2386
  if (bottomStickGround) {
2344
2387
  points[idx3 + 2] = 0;
2388
+ } // generate path uv
2389
+
2390
+
2391
+ if (pathUV) {
2392
+ var p = line[i];
2393
+ var uvx = p.distance;
2394
+ var uIndex0 = i * 2;
2395
+ uv[uIndex0] = uvx;
2396
+ uv[uIndex0 + 1] = 1;
2397
+ var uIndex1 = len * 2 + uIndex0;
2398
+ uv[uIndex1] = uvx;
2399
+ uv[uIndex1 + 1] = 0;
2400
+ var uIndex2 = len * 2 * 2 + uIndex0;
2401
+ uv[uIndex2] = uvx;
2402
+ uv[uIndex2 + 1] = 1;
2403
+ var uIndex3 = len * 2 * 2 + len * 2 + uIndex0;
2404
+ uv[uIndex3] = uvx;
2405
+ uv[uIndex3 + 1] = 0;
2345
2406
  }
2346
2407
 
2347
2408
  i++;
2348
2409
  }
2349
2410
 
2350
- i = 0;
2351
- len = points.length;
2352
- var uIndex = uv.length - 1;
2411
+ if (!pathUV) {
2412
+ i = 0;
2413
+ len = points.length;
2414
+ var uIndex = uv.length - 1;
2353
2415
 
2354
- while (i < len) {
2355
- var x = points[i],
2356
- y = points[i + 1];
2357
- uv[++uIndex] = x;
2358
- uv[++uIndex] = y; // uvs.push(x, y);
2416
+ while (i < len) {
2417
+ var x = points[i],
2418
+ y = points[i + 1];
2419
+ uv[++uIndex] = x;
2420
+ uv[++uIndex] = y; // uvs.push(x, y);
2359
2421
 
2360
- i += 3;
2422
+ i += 3;
2423
+ }
2361
2424
  }
2362
2425
 
2363
2426
  i = 0;
@@ -2423,19 +2486,24 @@
2423
2486
  var bottomStickGround = options.bottomStickGround;
2424
2487
  var rings = [leftPoints, rightPoints];
2425
2488
  var depthsEnable = result.depths;
2489
+ var pathUV = options.pathUV;
2490
+ var lineWidth = options.lineWidth;
2426
2491
  var pIndex = points.length - 1;
2427
2492
  var iIndex = indices.length - 1;
2493
+ var uIndex = uv.length - 1;
2428
2494
 
2429
2495
  function addOneSideIndex(v1, v2) {
2430
2496
  var idx = points.length / 3; // let pIndex = points.length - 1;
2431
- // top
2497
+
2498
+ var v1Depth = depthsEnable ? v1.depth : z;
2499
+ var v2Depth = depthsEnable ? v2.depth : z; // top
2432
2500
 
2433
2501
  points[++pIndex] = v1[0];
2434
2502
  points[++pIndex] = v1[1];
2435
- points[++pIndex] = (depthsEnable ? v1.depth : z) + v1[2];
2503
+ points[++pIndex] = v1Depth + v1[2];
2436
2504
  points[++pIndex] = v2[0];
2437
2505
  points[++pIndex] = v2[1];
2438
- points[++pIndex] = (depthsEnable ? v2.depth : z) + v2[2]; // points.push(v1[0], v1[1], (depthsEnable ? v1.depth : z) + v1[2], v2[0], v2[1], (depthsEnable ? v2.depth : z) + v2[2]);
2506
+ points[++pIndex] = v2Depth + v2[2]; // points.push(v1[0], v1[1], (depthsEnable ? v1.depth : z) + v1[2], v2[0], v2[1], (depthsEnable ? v2.depth : z) + v2[2]);
2439
2507
  // bottom
2440
2508
 
2441
2509
  points[++pIndex] = v1[0];
@@ -2456,10 +2524,21 @@
2456
2524
  indices[++iIndex] = d;
2457
2525
  indices[++iIndex] = b; // index.push(a, c, b, c, d, b);
2458
2526
 
2459
- generateSideWallUV(uv, points, a, b, c, d);
2527
+ if (!pathUV) {
2528
+ generateSideWallUV(uv, points, a, b, c, d);
2529
+ } else {
2530
+ uv[++uIndex] = v1.distance;
2531
+ uv[++uIndex] = v1Depth / lineWidth;
2532
+ uv[++uIndex] = v2.distance;
2533
+ uv[++uIndex] = v2Depth / lineWidth;
2534
+ uv[++uIndex] = v1.distance;
2535
+ uv[++uIndex] = 0;
2536
+ uv[++uIndex] = v2.distance;
2537
+ uv[++uIndex] = 0;
2538
+ }
2460
2539
  }
2461
2540
 
2462
- for (var i = 0, _len = rings.length; i < _len; i++) {
2541
+ for (var i = 0, _len2 = rings.length; i < _len2; i++) {
2463
2542
  var ring = rings[i];
2464
2543
 
2465
2544
  if (i > 0) {
@@ -2483,9 +2562,9 @@
2483
2562
  var len = leftPoints.length;
2484
2563
  var vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];
2485
2564
 
2486
- for (var _i = 0; _i < vs.length; _i += 2) {
2487
- var _v = vs[_i],
2488
- _v2 = vs[_i + 1];
2565
+ for (var _i2 = 0; _i2 < vs.length; _i2 += 2) {
2566
+ var _v = vs[_i2],
2567
+ _v2 = vs[_i2 + 1];
2489
2568
  addOneSideIndex(_v, _v2);
2490
2569
  }
2491
2570
  }
@@ -2501,6 +2580,11 @@
2501
2580
  function expandLine(line, options) {
2502
2581
  // let preAngle = 0;
2503
2582
  var radius = options.lineWidth / 2;
2583
+
2584
+ if (options.isSlope) {
2585
+ radius *= 2;
2586
+ }
2587
+
2504
2588
  var points = [],
2505
2589
  leftPoints = [],
2506
2590
  rightPoints = [];
@@ -2582,7 +2666,8 @@
2582
2666
  return {
2583
2667
  offsetPoints: points,
2584
2668
  leftPoints: leftPoints,
2585
- rightPoints: rightPoints
2669
+ rightPoints: rightPoints,
2670
+ line: line
2586
2671
  };
2587
2672
  } // eslint-disable-next-line no-unused-vars
2588
2673
 
@@ -4574,6 +4659,79 @@
4574
4659
  };
4575
4660
  }
4576
4661
 
4662
+ function plane(width, height, devideW, devideH) {
4663
+ devideW = Math.max(1, devideW);
4664
+ devideH = Math.max(1, devideH);
4665
+ var dx = width / devideW,
4666
+ dy = height / devideH;
4667
+ var minX = -width / 2,
4668
+ maxY = height / 2,
4669
+ minY = -height / 2;
4670
+ var len = (devideW + 1) * (devideH + 1);
4671
+ var position = new Float32Array(len * 3),
4672
+ uv = new Float32Array(len * 2),
4673
+ normal = new Float32Array(len * 3),
4674
+ indices = new Uint32Array(len * 10);
4675
+ var index = 0,
4676
+ uIndex = 0,
4677
+ iIndex = 0;
4678
+
4679
+ for (var j = 0; j <= devideH; j++) {
4680
+ for (var i = 0; i <= devideW; i++) {
4681
+ var x = minX + dx * i;
4682
+ var y = maxY - dy * j;
4683
+ position[index] = x;
4684
+ position[index + 1] = y;
4685
+ position[index + 2] = 0;
4686
+ normal[index] = 0;
4687
+ normal[index + 1] = 0;
4688
+ normal[index + 2] = 1; // position.push(x, y, 0);
4689
+ // normal.push(0, 0, 1);
4690
+
4691
+ var uvx = (x - minX) / width,
4692
+ uvy = (y - minY) / height; // uv.push(uvx, uvy);
4693
+
4694
+ uv[uIndex] = uvx;
4695
+ uv[uIndex + 1] = uvy;
4696
+ index += 3;
4697
+ uIndex += 2;
4698
+
4699
+ if (i < devideW && j < devideH) {
4700
+ var a = j * (devideW + 1) + i,
4701
+ b = a + 1,
4702
+ c = (devideW + 1) * (j + 1) + i,
4703
+ d = c + 1;
4704
+ indices[iIndex] = a;
4705
+ indices[iIndex + 1] = c;
4706
+ indices[iIndex + 2] = b;
4707
+ indices[iIndex + 3] = c;
4708
+ indices[iIndex + 4] = d;
4709
+ indices[iIndex + 5] = b;
4710
+ iIndex += 6; // indexs.push(a, c, b, c, d, b);
4711
+ }
4712
+ }
4713
+ }
4714
+
4715
+ var indexArray = new Uint32Array(iIndex);
4716
+
4717
+ for (var _i = 0, _len = indexArray.length; _i < _len; _i++) {
4718
+ indexArray[_i] = indices[_i];
4719
+ } // for (let j = 0; j < devideH; j++) {
4720
+ // for (let i = 0; i < devideW; i++) {
4721
+ // const a = j * (devideW + 1) + i, b = a + 1, c = (devideW + 1) * (j + 1) + i, d = c + 1;
4722
+ // indexs.push(a, c, b, c, d, b);
4723
+ // }
4724
+ // }
4725
+
4726
+
4727
+ return {
4728
+ position: position,
4729
+ uv: uv,
4730
+ normal: normal,
4731
+ indices: indexArray
4732
+ };
4733
+ }
4734
+
4577
4735
  exports.cylinder = cylinder;
4578
4736
  exports.expandLine = expandLine;
4579
4737
  exports.expandPaths = expandPaths;
@@ -4582,8 +4740,8 @@
4582
4740
  exports.extrudePolylines = extrudePolylines;
4583
4741
  exports.extrudeSlopes = extrudeSlopes;
4584
4742
  exports.leftOnLine = leftOnLine;
4743
+ exports.plane = plane;
4585
4744
 
4586
4745
  Object.defineProperty(exports, '__esModule', { value: true });
4587
4746
 
4588
4747
  }));
4589
- //# sourceMappingURL=poly-extrude.js.map