poly-extrude 0.0.2 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|