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.
- package/dist/poly-extrude.js +183 -25
- package/dist/poly-extrude.js.map +1 -1
- package/dist/poly-extrude.min.js +2 -2
- package/dist/poly-extrude.mjs +183 -25
- package/index.js +2 -1
- package/package.json +2 -2
- package/readme.md +29 -1
- package/src/plane.js +58 -0
- package/src/polyline.js +75 -18
- package/src/util.js +19 -0
package/dist/poly-extrude.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* poly-extrude v0.
|
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
|
-
|
2351
|
-
|
2352
|
-
|
2411
|
+
if (!pathUV) {
|
2412
|
+
i = 0;
|
2413
|
+
len = points.length;
|
2414
|
+
var uIndex = uv.length - 1;
|
2353
2415
|
|
2354
|
-
|
2355
|
-
|
2356
|
-
|
2357
|
-
|
2358
|
-
|
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
|
-
|
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
|
-
|
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] =
|
2503
|
+
points[++pIndex] = v1Depth + v1[2];
|
2436
2504
|
points[++pIndex] = v2[0];
|
2437
2505
|
points[++pIndex] = v2[1];
|
2438
|
-
points[++pIndex] =
|
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
|
-
|
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,
|
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
|
2487
|
-
var _v = vs[
|
2488
|
-
_v2 = vs[
|
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
|