poly-extrude 0.0.1 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/poly-extrude.js +97 -81
- package/dist/poly-extrude.js.map +1 -1
- package/dist/poly-extrude.min.js +2 -2
- package/dist/poly-extrude.mjs +97 -81
- package/package.json +7 -2
- package/src/polygon.js +12 -12
- package/src/polyline.js +21 -8
- package/src/util.js +27 -40
- package/.eslintignore +0 -12
- package/.eslintrc.js +0 -34
- package/.vscode/settings.json +0 -3
- package/babel.config.js +0 -12
- package/pnpm-lock.yaml +0 -3054
- package/rollup.config.js +0 -108
- package/test/buildings.html +0 -77
- package/test/data/a.png +0 -0
- package/test/data/building-texture-dark.jpg +0 -0
- package/test/data/building.geojson +0 -1118
- package/test/data/buildings-ny.geojson +0 -2845
- package/test/data/buildings.geojson +0 -1
- package/test/data/free-line.geojson +0 -1
- package/test/data/line.geojson +0 -1
- package/test/data/polygon.geojson +0 -1
- package/test/data/simple-hole.geojson +0 -1
- package/test/data/simple-line.geojson +0 -45
- package/test/data/simple.geojson +0 -1
- package/test/data/street.geojson +0 -1
- package/test/data//345/244/252/346/271/226.geojson +0 -8
- package/test/data//350/210/237/345/261/261/345/270/202.geojson +0 -1
- package/test/data//350/213/217/345/267/236.geojson +0 -1
- package/test/data//351/204/261/351/230/263/346/271/226.geojson +0 -1
- package/test/line-draw.html +0 -100
- package/test/line-uv.html +0 -69
- package/test/line.html +0 -56
- package/test/multi-polygon.html +0 -53
- package/test/ny-building.html +0 -67
- package/test/simple.html +0 -61
- package/test/street.html +0 -52
- package/test/util.js +0 -131
- package/test/uv.html +0 -77
package/dist/poly-extrude.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* poly-extrude v0.0.
|
2
|
+
* poly-extrude v0.0.4
|
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
|
|
@@ -906,10 +904,7 @@
|
|
906
904
|
});
|
907
905
|
var result = flatVertices(polygon, options);
|
908
906
|
result.polygon = polygon;
|
909
|
-
var time = 'earcut';
|
910
|
-
console.time(time);
|
911
907
|
var triangles = earcut$1(result.flatVertices, result.holes, 2);
|
912
|
-
console.timeEnd(time);
|
913
908
|
generateTopAndBottom$1(result, triangles);
|
914
909
|
generateSides$1(result, options);
|
915
910
|
result.position = new Float32Array(result.points);
|
@@ -957,29 +952,32 @@
|
|
957
952
|
|
958
953
|
for (var i = 0, len = polygon.length; i < len; i++) {
|
959
954
|
var ring = polygon[i];
|
955
|
+
var j = 0;
|
956
|
+
var len1 = ring.length;
|
960
957
|
|
961
|
-
|
958
|
+
while (j < len1) {
|
962
959
|
var v1 = ring[j];
|
963
960
|
var v2 = ring[j + 1];
|
964
961
|
|
965
962
|
if (j === len1 - 1) {
|
966
963
|
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
|
-
|
964
|
+
}
|
972
965
|
|
973
966
|
var idx = points.length / 3;
|
974
|
-
|
967
|
+
var x1 = v1[0],
|
968
|
+
y1 = v1[1],
|
969
|
+
x2 = v2[0],
|
970
|
+
y2 = v2[1];
|
971
|
+
points.push(x1, y1, 0, x2, y2, 0, x1, y1, z, x2, y2, z);
|
975
972
|
var a = idx,
|
976
973
|
b = idx + 1,
|
977
974
|
c = idx + 2,
|
978
975
|
d = idx + 3; // points.push(p3, p4, p1, p2);
|
979
976
|
|
980
|
-
index.push(a, c, b);
|
981
|
-
|
977
|
+
index.push(a, c, b, c, d, b); // index.push(c, d, b);
|
978
|
+
|
982
979
|
generateSideWallUV(uvs, points, a, b, c, d);
|
980
|
+
j++;
|
983
981
|
}
|
984
982
|
}
|
985
983
|
}
|
@@ -1018,7 +1016,10 @@
|
|
1018
1016
|
holes.push(idx0 / 2);
|
1019
1017
|
}
|
1020
1018
|
|
1021
|
-
|
1019
|
+
var j = 0;
|
1020
|
+
var len1 = ring.length;
|
1021
|
+
|
1022
|
+
while (j < len1) {
|
1022
1023
|
var c = ring[j];
|
1023
1024
|
var x = c[0],
|
1024
1025
|
y = c[1];
|
@@ -1038,6 +1039,7 @@
|
|
1038
1039
|
uvs[uOffset + idx2 + 1] = y;
|
1039
1040
|
idx1 += 3;
|
1040
1041
|
idx2 += 2;
|
1042
|
+
j++;
|
1041
1043
|
}
|
1042
1044
|
}
|
1043
1045
|
|
@@ -1078,8 +1080,10 @@
|
|
1078
1080
|
uvs = [];
|
1079
1081
|
var leftPoints = result.leftPoints,
|
1080
1082
|
rightPoints = result.rightPoints;
|
1083
|
+
var i = 0,
|
1084
|
+
len = leftPoints.length;
|
1081
1085
|
|
1082
|
-
|
1086
|
+
while (i < len) {
|
1083
1087
|
// top left
|
1084
1088
|
var idx0 = i * 3;
|
1085
1089
|
var _leftPoints$i = leftPoints[i],
|
@@ -1106,32 +1110,41 @@
|
|
1106
1110
|
points[idx3] = x2;
|
1107
1111
|
points[idx3 + 1] = y2;
|
1108
1112
|
points[idx3 + 2] = 0;
|
1113
|
+
i++;
|
1109
1114
|
}
|
1110
1115
|
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1116
|
+
i = 0;
|
1117
|
+
len = points.length;
|
1118
|
+
|
1119
|
+
while (i < len) {
|
1120
|
+
var x = points[i],
|
1121
|
+
y = points[i + 1];
|
1114
1122
|
uvs.push(x, y);
|
1123
|
+
i += 3;
|
1115
1124
|
}
|
1116
1125
|
|
1117
|
-
|
1126
|
+
i = 0;
|
1127
|
+
len = leftPoints.length;
|
1128
|
+
|
1129
|
+
while (i < len - 1) {
|
1118
1130
|
// top
|
1119
1131
|
// left1 left2 right1,right2
|
1120
|
-
var a1 =
|
1121
|
-
b1 =
|
1122
|
-
c1 = a1 +
|
1123
|
-
d1 = b1 +
|
1132
|
+
var a1 = i,
|
1133
|
+
b1 = i + 1,
|
1134
|
+
c1 = a1 + len,
|
1135
|
+
d1 = b1 + len;
|
1124
1136
|
index.push(a1, c1, b1);
|
1125
1137
|
index.push(c1, d1, b1); // bottom
|
1126
1138
|
// left1 left2 right1,right2
|
1127
1139
|
|
1128
|
-
var len2 =
|
1129
|
-
var a2 =
|
1140
|
+
var len2 = len * 2;
|
1141
|
+
var a2 = i + len2,
|
1130
1142
|
b2 = a2 + 1,
|
1131
|
-
c2 = a2 +
|
1132
|
-
d2 = b2 +
|
1143
|
+
c2 = a2 + len,
|
1144
|
+
d2 = b2 + len;
|
1133
1145
|
index.push(a2, c2, b2);
|
1134
1146
|
index.push(c2, d2, b2);
|
1147
|
+
i++;
|
1135
1148
|
}
|
1136
1149
|
|
1137
1150
|
result.index = index;
|
@@ -1154,14 +1167,12 @@
|
|
1154
1167
|
var a = idx,
|
1155
1168
|
b = idx + 1,
|
1156
1169
|
c = idx + 2,
|
1157
|
-
d = idx + 3;
|
1158
|
-
|
1159
|
-
index.push(a, c, b);
|
1160
|
-
index.push(c, d, b);
|
1170
|
+
d = idx + 3;
|
1171
|
+
index.push(a, c, b, c, d, b);
|
1161
1172
|
generateSideWallUV(uvs, points, a, b, c, d);
|
1162
1173
|
}
|
1163
1174
|
|
1164
|
-
for (var i = 0,
|
1175
|
+
for (var i = 0, _len = rings.length; i < _len; i++) {
|
1165
1176
|
var ring = rings[i];
|
1166
1177
|
|
1167
1178
|
if (i > 0) {
|
@@ -1171,19 +1182,23 @@
|
|
1171
1182
|
ring = ring.reverse();
|
1172
1183
|
}
|
1173
1184
|
|
1174
|
-
|
1185
|
+
var j = 0;
|
1186
|
+
var len1 = ring.length - 1;
|
1187
|
+
|
1188
|
+
while (j < len1) {
|
1175
1189
|
var v1 = ring[j];
|
1176
1190
|
var v2 = ring[j + 1];
|
1177
1191
|
addOneSideIndex(v1, v2);
|
1192
|
+
j++;
|
1178
1193
|
}
|
1179
1194
|
}
|
1180
1195
|
|
1181
1196
|
var len = leftPoints.length;
|
1182
1197
|
var vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];
|
1183
1198
|
|
1184
|
-
for (var
|
1185
|
-
var _v = vs[
|
1186
|
-
_v2 = vs[
|
1199
|
+
for (var _i = 0; _i < vs.length; _i += 2) {
|
1200
|
+
var _v = vs[_i],
|
1201
|
+
_v2 = vs[_i + 1];
|
1187
1202
|
addOneSideIndex(_v, _v2);
|
1188
1203
|
}
|
1189
1204
|
}
|
@@ -1204,8 +1219,9 @@
|
|
1204
1219
|
leftPoints = [],
|
1205
1220
|
rightPoints = [];
|
1206
1221
|
var len = line.length;
|
1222
|
+
var i = 0;
|
1207
1223
|
|
1208
|
-
|
1224
|
+
while (i < len - 1) {
|
1209
1225
|
var _p = line[i],
|
1210
1226
|
_p2 = line[i + 1];
|
1211
1227
|
var dy = _p2[1] - _p[1],
|
@@ -1243,6 +1259,8 @@
|
|
1243
1259
|
leftPoints.push(_op2);
|
1244
1260
|
rightPoints.push(_op);
|
1245
1261
|
}
|
1262
|
+
|
1263
|
+
i++;
|
1246
1264
|
}
|
1247
1265
|
|
1248
1266
|
var rAngle = preAngle;
|
@@ -1311,7 +1329,5 @@
|
|
1311
1329
|
|
1312
1330
|
Object.defineProperty(exports, '__esModule', { value: true });
|
1313
1331
|
|
1314
|
-
typeof console !== 'undefined' && console.log('poly-extrude v0.0.1');
|
1315
|
-
|
1316
1332
|
}));
|
1317
1333
|
//# sourceMappingURL=poly-extrude.js.map
|