poly-extrude 0.0.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/poly-extrude.js +132 -10
- package/dist/poly-extrude.js.map +1 -1
- package/dist/poly-extrude.min.js +2 -2
- package/dist/poly-extrude.mjs +132 -11
- package/index.js +2 -1
- package/package.json +1 -1
- package/readme.md +132 -35
- package/src/cylinder.js +89 -0
- package/src/polyline.js +10 -9
package/dist/poly-extrude.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* poly-extrude v0.0
|
2
|
+
* poly-extrude v0.2.0
|
3
3
|
*/
|
4
4
|
(function (global, factory) {
|
5
5
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
@@ -1107,28 +1107,30 @@
|
|
1107
1107
|
var idx0 = i * 3;
|
1108
1108
|
var _leftPoints$i = leftPoints[i],
|
1109
1109
|
x1 = _leftPoints$i[0],
|
1110
|
-
y1 = _leftPoints$i[1]
|
1110
|
+
y1 = _leftPoints$i[1],
|
1111
|
+
z1 = _leftPoints$i[2];
|
1111
1112
|
points[idx0] = x1;
|
1112
1113
|
points[idx0 + 1] = y1;
|
1113
|
-
points[idx0 + 2] = z; // top right
|
1114
|
+
points[idx0 + 2] = z + z1; // top right
|
1114
1115
|
|
1115
1116
|
var _rightPoints$i = rightPoints[i],
|
1116
1117
|
x2 = _rightPoints$i[0],
|
1117
|
-
y2 = _rightPoints$i[1]
|
1118
|
+
y2 = _rightPoints$i[1],
|
1119
|
+
z2 = _rightPoints$i[2];
|
1118
1120
|
var idx1 = len * 3 + idx0;
|
1119
1121
|
points[idx1] = x2;
|
1120
1122
|
points[idx1 + 1] = y2;
|
1121
|
-
points[idx1 + 2] = z; // bottom left
|
1123
|
+
points[idx1 + 2] = z + z2; // bottom left
|
1122
1124
|
|
1123
1125
|
var idx2 = len * 2 * 3 + idx0;
|
1124
1126
|
points[idx2] = x1;
|
1125
1127
|
points[idx2 + 1] = y1;
|
1126
|
-
points[idx2 + 2] =
|
1128
|
+
points[idx2 + 2] = z1; // bottom right
|
1127
1129
|
|
1128
1130
|
var idx3 = len * 2 * 3 + len * 3 + idx0;
|
1129
1131
|
points[idx3] = x2;
|
1130
1132
|
points[idx3 + 1] = y2;
|
1131
|
-
points[idx3 + 2] =
|
1133
|
+
points[idx3 + 2] = z2;
|
1132
1134
|
i++;
|
1133
1135
|
}
|
1134
1136
|
|
@@ -1182,7 +1184,7 @@
|
|
1182
1184
|
|
1183
1185
|
function addOneSideIndex(v1, v2) {
|
1184
1186
|
var idx = points.length / 3;
|
1185
|
-
points.push(v1[0], v1[1], z, v2[0], v2[1], z, v1[0], v1[1],
|
1187
|
+
points.push(v1[0], v1[1], z + v1[2], v2[0], v2[1], z + v2[2], v1[0], v1[1], v1[2], v2[0], v2[1], v2[2]);
|
1186
1188
|
var a = idx + 2,
|
1187
1189
|
b = idx + 3,
|
1188
1190
|
c = idx,
|
@@ -1311,13 +1313,14 @@
|
|
1311
1313
|
function calOffsetPoint(rad, radius, p) {
|
1312
1314
|
var x = p[0],
|
1313
1315
|
y = p[1];
|
1316
|
+
var z = p[2] || 0;
|
1314
1317
|
var x1 = Math.cos(rad) * radius,
|
1315
1318
|
y1 = Math.sin(rad) * radius;
|
1316
|
-
var p1 = [x + x1, y + y1];
|
1319
|
+
var p1 = [x + x1, y + y1, z];
|
1317
1320
|
var rad1 = rad += Math.PI;
|
1318
1321
|
var x2 = Math.cos(rad1) * radius,
|
1319
1322
|
y2 = Math.sin(rad1) * radius;
|
1320
|
-
var p2 = [x + x2, y + y2];
|
1323
|
+
var p2 = [x + x2, y + y2, z];
|
1321
1324
|
return [p1, p2];
|
1322
1325
|
}
|
1323
1326
|
|
@@ -1342,6 +1345,125 @@
|
|
1342
1345
|
return (y1 - y2) * x + (x2 - x1) * y + x1 * y2 - x2 * y1 > 0;
|
1343
1346
|
}
|
1344
1347
|
|
1348
|
+
function cylinder(point, options) {
|
1349
|
+
if (options === void 0) {
|
1350
|
+
options = {};
|
1351
|
+
}
|
1352
|
+
|
1353
|
+
options = Object.assign({}, {
|
1354
|
+
radius: 1,
|
1355
|
+
height: 2,
|
1356
|
+
radialSegments: 6
|
1357
|
+
}, options);
|
1358
|
+
var radialSegments = Math.round(Math.max(4, options.radialSegments));
|
1359
|
+
var _options = options,
|
1360
|
+
radius = _options.radius,
|
1361
|
+
height = _options.height;
|
1362
|
+
var aRad = 360 / radialSegments / 360 * Math.PI * 2;
|
1363
|
+
var circlePointsLen = radialSegments + 1;
|
1364
|
+
var points = new Float32Array(circlePointsLen * 3 * 2);
|
1365
|
+
var centerx = point[0],
|
1366
|
+
centery = point[1];
|
1367
|
+
var idx = 0,
|
1368
|
+
uIdx = 0;
|
1369
|
+
var offset = circlePointsLen * 3,
|
1370
|
+
uOffset = circlePointsLen * 2;
|
1371
|
+
var indices = [],
|
1372
|
+
uvs = [];
|
1373
|
+
|
1374
|
+
for (var i = -1; i < radialSegments; i++) {
|
1375
|
+
var rad = aRad * i;
|
1376
|
+
var x = Math.cos(rad) * radius + centerx,
|
1377
|
+
y = Math.sin(rad) * radius + centery; // bottom vertices
|
1378
|
+
|
1379
|
+
points[idx] = x;
|
1380
|
+
points[idx + 1] = y;
|
1381
|
+
points[idx + 2] = 0; // top vertices
|
1382
|
+
|
1383
|
+
points[idx + offset] = x;
|
1384
|
+
points[idx + 1 + offset] = y;
|
1385
|
+
points[idx + 2 + offset] = height;
|
1386
|
+
var u = 0,
|
1387
|
+
v = 0;
|
1388
|
+
u = 0.5 + x / radius / 2;
|
1389
|
+
v = 0.5 + y / radius / 2;
|
1390
|
+
uvs[uIdx] = u;
|
1391
|
+
uvs[uIdx + 1] = v;
|
1392
|
+
uvs[uIdx + uOffset] = u;
|
1393
|
+
uvs[uIdx + 1 + uOffset] = v;
|
1394
|
+
idx += 3;
|
1395
|
+
uIdx += 2;
|
1396
|
+
|
1397
|
+
if (i > 1) {
|
1398
|
+
// bottom indices
|
1399
|
+
indices.push(0, i - 1, i);
|
1400
|
+
}
|
1401
|
+
}
|
1402
|
+
|
1403
|
+
idx -= 3;
|
1404
|
+
points[idx] = points[0];
|
1405
|
+
points[idx + 1] = points[1];
|
1406
|
+
points[idx + 2] = points[2];
|
1407
|
+
var pointsLen = points.length;
|
1408
|
+
points[pointsLen - 3] = points[0];
|
1409
|
+
points[pointsLen - 2] = points[1];
|
1410
|
+
points[pointsLen - 1] = height;
|
1411
|
+
var indicesLen = indices.length; // top indices
|
1412
|
+
|
1413
|
+
for (var _i = 0; _i < indicesLen; _i++) {
|
1414
|
+
var index = indices[_i];
|
1415
|
+
indices.push(index + circlePointsLen);
|
1416
|
+
}
|
1417
|
+
|
1418
|
+
var sidePoints = new Float32Array((circlePointsLen * 3 * 2 - 6) * 2);
|
1419
|
+
var pIndex = -1;
|
1420
|
+
idx = circlePointsLen * 2;
|
1421
|
+
uIdx = 0;
|
1422
|
+
|
1423
|
+
for (var _i2 = 0, len = points.length / 2; _i2 < len - 3; _i2 += 3) {
|
1424
|
+
var x1 = points[_i2],
|
1425
|
+
y1 = points[_i2 + 1],
|
1426
|
+
x2 = points[_i2 + 3],
|
1427
|
+
y2 = points[_i2 + 4];
|
1428
|
+
sidePoints[++pIndex] = x1;
|
1429
|
+
sidePoints[++pIndex] = y1;
|
1430
|
+
sidePoints[++pIndex] = height;
|
1431
|
+
sidePoints[++pIndex] = x2;
|
1432
|
+
sidePoints[++pIndex] = y2;
|
1433
|
+
sidePoints[++pIndex] = height;
|
1434
|
+
sidePoints[++pIndex] = x1;
|
1435
|
+
sidePoints[++pIndex] = y1;
|
1436
|
+
sidePoints[++pIndex] = 0;
|
1437
|
+
sidePoints[++pIndex] = x2;
|
1438
|
+
sidePoints[++pIndex] = y2;
|
1439
|
+
sidePoints[++pIndex] = 0;
|
1440
|
+
var a = idx + 2,
|
1441
|
+
b = idx + 3,
|
1442
|
+
c = idx,
|
1443
|
+
d = idx + 1; // indices.push(a, c, b, c, d, b);
|
1444
|
+
|
1445
|
+
indices.push(c, a, d, a, b, d);
|
1446
|
+
idx += 4;
|
1447
|
+
var u1 = uIdx / circlePointsLen,
|
1448
|
+
u2 = (uIdx + 1) / circlePointsLen;
|
1449
|
+
uvs.push(u1, height / radius / 2, u2, height / radius / 2, u1, 0, u2, 0);
|
1450
|
+
uIdx++;
|
1451
|
+
}
|
1452
|
+
|
1453
|
+
var position = new Float32Array(points.length + sidePoints.length);
|
1454
|
+
position.set(points, 0);
|
1455
|
+
position.set(sidePoints, points.length);
|
1456
|
+
var normal = generateNormal(indices, position);
|
1457
|
+
return {
|
1458
|
+
points: points,
|
1459
|
+
indices: new Uint32Array(indices),
|
1460
|
+
position: position,
|
1461
|
+
normal: normal,
|
1462
|
+
uv: new Float32Array(uvs)
|
1463
|
+
};
|
1464
|
+
}
|
1465
|
+
|
1466
|
+
exports.cylinder = cylinder;
|
1345
1467
|
exports.expandLine = expandLine;
|
1346
1468
|
exports.extrudePolygons = extrudePolygons;
|
1347
1469
|
exports.extrudePolylines = extrudePolylines;
|