poly-extrude 0.0.2 → 0.0.5
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 +128 -100
- package/dist/poly-extrude.js.map +1 -1
- package/dist/poly-extrude.min.js +2 -2
- package/dist/poly-extrude.mjs +128 -100
- package/package.json +1 -1
- package/src/polygon.js +36 -25
- package/src/polyline.js +21 -8
- package/src/util.js +24 -37
package/dist/poly-extrude.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* poly-extrude v0.0.
|
2
|
+
* poly-extrude v0.0.5
|
3
3
|
*/
|
4
4
|
(function (global, factory) {
|
5
5
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
@@ -731,8 +731,9 @@
|
|
731
731
|
var n = [];
|
732
732
|
var len = indices.length;
|
733
733
|
var normals = new Float32Array(position.length);
|
734
|
+
var f = 0;
|
734
735
|
|
735
|
-
|
736
|
+
while (f < len) {
|
736
737
|
// const i1 = indices[f++] * 3;
|
737
738
|
// const i2 = indices[f++] * 3;
|
738
739
|
// const i3 = indices[f++] * 3;
|
@@ -747,30 +748,30 @@
|
|
747
748
|
i3 = c * 3;
|
748
749
|
v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);
|
749
750
|
v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);
|
750
|
-
v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);
|
751
|
-
// pB.fromBufferAttribute(positionAttribute, vB);
|
752
|
-
// pC.fromBufferAttribute(positionAttribute, vC);
|
753
|
-
// cb.subVectors(pC, pB);
|
754
|
-
// ab.subVectors(pA, pB);
|
755
|
-
// cb.cross(ab);
|
756
|
-
|
751
|
+
v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);
|
757
752
|
v3Sub(v32, p3, p2);
|
758
753
|
v3Sub(v21, p1, p2);
|
759
754
|
v3Cross(n, v32, v21); // Already be weighted by the triangle area
|
760
755
|
|
761
|
-
for (var
|
762
|
-
normals[i1 +
|
763
|
-
normals[i2 +
|
764
|
-
normals[i3 +
|
756
|
+
for (var _i = 0; _i < 3; _i++) {
|
757
|
+
normals[i1 + _i] += n[_i];
|
758
|
+
normals[i2 + _i] += n[_i];
|
759
|
+
normals[i3 + _i] += n[_i];
|
765
760
|
}
|
761
|
+
|
762
|
+
f += 3;
|
766
763
|
}
|
767
764
|
|
768
|
-
|
769
|
-
|
765
|
+
var i = 0;
|
766
|
+
var l = normals.length;
|
767
|
+
|
768
|
+
while (i < l) {
|
769
|
+
v3Set(n, normals[i], normals[i + 1], normals[i + 2]);
|
770
770
|
v3Normalize(n, n);
|
771
|
-
normals[
|
772
|
-
normals[
|
773
|
-
normals[
|
771
|
+
normals[i] = n[0] || 0;
|
772
|
+
normals[i + 1] = n[1] || 0;
|
773
|
+
normals[i + 2] = n[2] || 0;
|
774
|
+
i += 3;
|
774
775
|
}
|
775
776
|
|
776
777
|
return normals;
|
@@ -819,11 +820,14 @@
|
|
819
820
|
result.position.set(_position, pOffset);
|
820
821
|
result.normal.set(normal, pOffset);
|
821
822
|
result.uv.set(uv, uvOffset);
|
823
|
+
var j = 0;
|
824
|
+
var len1 = _indices.length;
|
822
825
|
|
823
|
-
|
826
|
+
while (j < len1) {
|
824
827
|
var pIndex = _indices[j] + pCount;
|
825
828
|
result.indices[iIdx] = pIndex;
|
826
829
|
iIdx++;
|
830
|
+
j++;
|
827
831
|
}
|
828
832
|
|
829
833
|
uvOffset += uv.length;
|
@@ -841,39 +845,33 @@
|
|
841
845
|
} // https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736
|
842
846
|
|
843
847
|
function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {
|
844
|
-
var
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
var
|
849
|
-
var
|
850
|
-
var
|
851
|
-
var
|
852
|
-
var
|
853
|
-
var
|
854
|
-
var
|
855
|
-
var
|
848
|
+
var idx1 = indexA * 3,
|
849
|
+
idx2 = indexB * 3,
|
850
|
+
idx3 = indexC * 3,
|
851
|
+
idx4 = indexD * 3;
|
852
|
+
var a_x = vertices[idx1];
|
853
|
+
var a_y = vertices[idx1 + 1];
|
854
|
+
var a_z = vertices[idx1 + 2];
|
855
|
+
var b_x = vertices[idx2];
|
856
|
+
var b_y = vertices[idx2 + 1];
|
857
|
+
var b_z = vertices[idx2 + 2];
|
858
|
+
var c_x = vertices[idx3];
|
859
|
+
var c_y = vertices[idx3 + 1];
|
860
|
+
var c_z = vertices[idx3 + 2];
|
861
|
+
var d_x = vertices[idx4];
|
862
|
+
var d_y = vertices[idx4 + 1];
|
863
|
+
var d_z = vertices[idx4 + 2];
|
856
864
|
|
857
865
|
if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {
|
858
866
|
uvs.push(a_x, 1 - a_z);
|
859
867
|
uvs.push(b_x, 1 - b_z);
|
860
868
|
uvs.push(c_x, 1 - c_z);
|
861
|
-
uvs.push(d_x, 1 - d_z);
|
862
|
-
// new Vector2(a_x, 1 - a_z),
|
863
|
-
// new Vector2(b_x, 1 - b_z),
|
864
|
-
// new Vector2(c_x, 1 - c_z),
|
865
|
-
// new Vector2(d_x, 1 - d_z)
|
866
|
-
// ];
|
869
|
+
uvs.push(d_x, 1 - d_z);
|
867
870
|
} else {
|
868
871
|
uvs.push(a_y, 1 - a_z);
|
869
872
|
uvs.push(b_y, 1 - b_z);
|
870
873
|
uvs.push(c_y, 1 - c_z);
|
871
|
-
uvs.push(d_y, 1 - d_z);
|
872
|
-
// new Vector2(a_y, 1 - a_z),
|
873
|
-
// new Vector2(b_y, 1 - b_z),
|
874
|
-
// new Vector2(c_y, 1 - c_z),
|
875
|
-
// new Vector2(d_y, 1 - d_z)
|
876
|
-
// ];
|
874
|
+
uvs.push(d_y, 1 - d_z);
|
877
875
|
}
|
878
876
|
}
|
879
877
|
|
@@ -882,34 +880,26 @@
|
|
882
880
|
depth: 2
|
883
881
|
}, options);
|
884
882
|
var results = polygons.map(function (polygon) {
|
885
|
-
|
886
|
-
|
887
|
-
|
883
|
+
for (var i = 0, len = polygon.length; i < len; i++) {
|
884
|
+
var ring = polygon[i];
|
885
|
+
valiateRing(ring);
|
888
886
|
|
889
|
-
|
890
|
-
|
891
|
-
|
887
|
+
if (i === 0) {
|
888
|
+
if (!isClockwise(ring)) {
|
889
|
+
polygon[i] = ring.reverse();
|
890
|
+
}
|
891
|
+
} else if (isClockwise(ring)) {
|
892
|
+
polygon[i] = ring.reverse();
|
892
893
|
}
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
var _ring$ = ring[0],
|
897
|
-
x1 = _ring$[0],
|
898
|
-
y1 = _ring$[1],
|
899
|
-
_ring = ring[len - 1],
|
900
|
-
x2 = _ring[0],
|
901
|
-
y2 = _ring[1];
|
902
|
-
|
903
|
-
if (x1 === x2 && y1 === y2) {
|
904
|
-
ring.splice(len - 1, 1);
|
894
|
+
|
895
|
+
if (isClosedRing(ring)) {
|
896
|
+
ring.splice(ring.length - 1, 1);
|
905
897
|
}
|
906
|
-
}
|
898
|
+
}
|
899
|
+
|
907
900
|
var result = flatVertices(polygon, options);
|
908
901
|
result.polygon = polygon;
|
909
|
-
var time = 'earcut';
|
910
|
-
console.time(time);
|
911
902
|
var triangles = earcut$1(result.flatVertices, result.holes, 2);
|
912
|
-
console.timeEnd(time);
|
913
903
|
generateTopAndBottom$1(result, triangles);
|
914
904
|
generateSides$1(result, options);
|
915
905
|
result.position = new Float32Array(result.points);
|
@@ -957,29 +947,32 @@
|
|
957
947
|
|
958
948
|
for (var i = 0, len = polygon.length; i < len; i++) {
|
959
949
|
var ring = polygon[i];
|
950
|
+
var j = 0;
|
951
|
+
var len1 = ring.length;
|
960
952
|
|
961
|
-
|
953
|
+
while (j < len1) {
|
962
954
|
var v1 = ring[j];
|
963
955
|
var v2 = ring[j + 1];
|
964
956
|
|
965
957
|
if (j === len1 - 1) {
|
966
958
|
v2 = ring[0];
|
967
|
-
}
|
968
|
-
// p2 = [v2[0], v2[1], options.depth],
|
969
|
-
// p3 = [v1[0], v1[1], 0],
|
970
|
-
// p4 = [v2[0], v2[1], 0];
|
971
|
-
|
959
|
+
}
|
972
960
|
|
973
961
|
var idx = points.length / 3;
|
974
|
-
|
962
|
+
var x1 = v1[0],
|
963
|
+
y1 = v1[1],
|
964
|
+
x2 = v2[0],
|
965
|
+
y2 = v2[1];
|
966
|
+
points.push(x1, y1, 0, x2, y2, 0, x1, y1, z, x2, y2, z);
|
975
967
|
var a = idx,
|
976
968
|
b = idx + 1,
|
977
969
|
c = idx + 2,
|
978
970
|
d = idx + 3; // points.push(p3, p4, p1, p2);
|
979
971
|
|
980
|
-
index.push(a, c, b);
|
981
|
-
|
972
|
+
index.push(a, c, b, c, d, b); // index.push(c, d, b);
|
973
|
+
|
982
974
|
generateSideWallUV(uvs, points, a, b, c, d);
|
975
|
+
j++;
|
983
976
|
}
|
984
977
|
}
|
985
978
|
}
|
@@ -1018,7 +1011,10 @@
|
|
1018
1011
|
holes.push(idx0 / 2);
|
1019
1012
|
}
|
1020
1013
|
|
1021
|
-
|
1014
|
+
var j = 0;
|
1015
|
+
var len1 = ring.length;
|
1016
|
+
|
1017
|
+
while (j < len1) {
|
1022
1018
|
var c = ring[j];
|
1023
1019
|
var x = c[0],
|
1024
1020
|
y = c[1];
|
@@ -1038,6 +1034,7 @@
|
|
1038
1034
|
uvs[uOffset + idx2 + 1] = y;
|
1039
1035
|
idx1 += 3;
|
1040
1036
|
idx2 += 2;
|
1037
|
+
j++;
|
1041
1038
|
}
|
1042
1039
|
}
|
1043
1040
|
|
@@ -1050,6 +1047,23 @@
|
|
1050
1047
|
};
|
1051
1048
|
}
|
1052
1049
|
|
1050
|
+
function valiateRing(ring) {
|
1051
|
+
if (!isClosedRing(ring)) {
|
1052
|
+
ring.push(ring[0]);
|
1053
|
+
}
|
1054
|
+
}
|
1055
|
+
|
1056
|
+
function isClosedRing(ring) {
|
1057
|
+
var len = ring.length;
|
1058
|
+
var _ring$ = ring[0],
|
1059
|
+
x1 = _ring$[0],
|
1060
|
+
y1 = _ring$[1],
|
1061
|
+
_ring = ring[len - 1],
|
1062
|
+
x2 = _ring[0],
|
1063
|
+
y2 = _ring[1];
|
1064
|
+
return x1 === x2 && y1 === y2;
|
1065
|
+
}
|
1066
|
+
|
1053
1067
|
function extrudePolylines(lines, options) {
|
1054
1068
|
options = Object.assign({}, {
|
1055
1069
|
depth: 2,
|
@@ -1078,8 +1092,10 @@
|
|
1078
1092
|
uvs = [];
|
1079
1093
|
var leftPoints = result.leftPoints,
|
1080
1094
|
rightPoints = result.rightPoints;
|
1095
|
+
var i = 0,
|
1096
|
+
len = leftPoints.length;
|
1081
1097
|
|
1082
|
-
|
1098
|
+
while (i < len) {
|
1083
1099
|
// top left
|
1084
1100
|
var idx0 = i * 3;
|
1085
1101
|
var _leftPoints$i = leftPoints[i],
|
@@ -1106,32 +1122,41 @@
|
|
1106
1122
|
points[idx3] = x2;
|
1107
1123
|
points[idx3 + 1] = y2;
|
1108
1124
|
points[idx3 + 2] = 0;
|
1125
|
+
i++;
|
1109
1126
|
}
|
1110
1127
|
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1128
|
+
i = 0;
|
1129
|
+
len = points.length;
|
1130
|
+
|
1131
|
+
while (i < len) {
|
1132
|
+
var x = points[i],
|
1133
|
+
y = points[i + 1];
|
1114
1134
|
uvs.push(x, y);
|
1135
|
+
i += 3;
|
1115
1136
|
}
|
1116
1137
|
|
1117
|
-
|
1138
|
+
i = 0;
|
1139
|
+
len = leftPoints.length;
|
1140
|
+
|
1141
|
+
while (i < len - 1) {
|
1118
1142
|
// top
|
1119
1143
|
// left1 left2 right1,right2
|
1120
|
-
var a1 =
|
1121
|
-
b1 =
|
1122
|
-
c1 = a1 +
|
1123
|
-
d1 = b1 +
|
1144
|
+
var a1 = i,
|
1145
|
+
b1 = i + 1,
|
1146
|
+
c1 = a1 + len,
|
1147
|
+
d1 = b1 + len;
|
1124
1148
|
index.push(a1, c1, b1);
|
1125
1149
|
index.push(c1, d1, b1); // bottom
|
1126
1150
|
// left1 left2 right1,right2
|
1127
1151
|
|
1128
|
-
var len2 =
|
1129
|
-
var a2 =
|
1152
|
+
var len2 = len * 2;
|
1153
|
+
var a2 = i + len2,
|
1130
1154
|
b2 = a2 + 1,
|
1131
|
-
c2 = a2 +
|
1132
|
-
d2 = b2 +
|
1155
|
+
c2 = a2 + len,
|
1156
|
+
d2 = b2 + len;
|
1133
1157
|
index.push(a2, c2, b2);
|
1134
1158
|
index.push(c2, d2, b2);
|
1159
|
+
i++;
|
1135
1160
|
}
|
1136
1161
|
|
1137
1162
|
result.index = index;
|
@@ -1154,14 +1179,12 @@
|
|
1154
1179
|
var a = idx,
|
1155
1180
|
b = idx + 1,
|
1156
1181
|
c = idx + 2,
|
1157
|
-
d = idx + 3;
|
1158
|
-
|
1159
|
-
index.push(a, c, b);
|
1160
|
-
index.push(c, d, b);
|
1182
|
+
d = idx + 3;
|
1183
|
+
index.push(a, c, b, c, d, b);
|
1161
1184
|
generateSideWallUV(uvs, points, a, b, c, d);
|
1162
1185
|
}
|
1163
1186
|
|
1164
|
-
for (var i = 0,
|
1187
|
+
for (var i = 0, _len = rings.length; i < _len; i++) {
|
1165
1188
|
var ring = rings[i];
|
1166
1189
|
|
1167
1190
|
if (i > 0) {
|
@@ -1171,19 +1194,23 @@
|
|
1171
1194
|
ring = ring.reverse();
|
1172
1195
|
}
|
1173
1196
|
|
1174
|
-
|
1197
|
+
var j = 0;
|
1198
|
+
var len1 = ring.length - 1;
|
1199
|
+
|
1200
|
+
while (j < len1) {
|
1175
1201
|
var v1 = ring[j];
|
1176
1202
|
var v2 = ring[j + 1];
|
1177
1203
|
addOneSideIndex(v1, v2);
|
1204
|
+
j++;
|
1178
1205
|
}
|
1179
1206
|
}
|
1180
1207
|
|
1181
1208
|
var len = leftPoints.length;
|
1182
1209
|
var vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];
|
1183
1210
|
|
1184
|
-
for (var
|
1185
|
-
var _v = vs[
|
1186
|
-
_v2 = vs[
|
1211
|
+
for (var _i = 0; _i < vs.length; _i += 2) {
|
1212
|
+
var _v = vs[_i],
|
1213
|
+
_v2 = vs[_i + 1];
|
1187
1214
|
addOneSideIndex(_v, _v2);
|
1188
1215
|
}
|
1189
1216
|
}
|
@@ -1204,8 +1231,9 @@
|
|
1204
1231
|
leftPoints = [],
|
1205
1232
|
rightPoints = [];
|
1206
1233
|
var len = line.length;
|
1234
|
+
var i = 0;
|
1207
1235
|
|
1208
|
-
|
1236
|
+
while (i < len - 1) {
|
1209
1237
|
var _p = line[i],
|
1210
1238
|
_p2 = line[i + 1];
|
1211
1239
|
var dy = _p2[1] - _p[1],
|
@@ -1243,6 +1271,8 @@
|
|
1243
1271
|
leftPoints.push(_op2);
|
1244
1272
|
rightPoints.push(_op);
|
1245
1273
|
}
|
1274
|
+
|
1275
|
+
i++;
|
1246
1276
|
}
|
1247
1277
|
|
1248
1278
|
var rAngle = preAngle;
|
@@ -1311,7 +1341,5 @@
|
|
1311
1341
|
|
1312
1342
|
Object.defineProperty(exports, '__esModule', { value: true });
|
1313
1343
|
|
1314
|
-
typeof console !== 'undefined' && console.log('poly-extrude v0.0.2');
|
1315
|
-
|
1316
1344
|
}));
|
1317
1345
|
//# sourceMappingURL=poly-extrude.js.map
|