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.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* poly-extrude v0.0.
|
2
|
+
* poly-extrude v0.0.4
|
3
3
|
*/
|
4
4
|
var earcut$2 = {exports: {}};
|
5
5
|
|
@@ -725,8 +725,9 @@ function generateNormal(indices, position) {
|
|
725
725
|
var n = [];
|
726
726
|
var len = indices.length;
|
727
727
|
var normals = new Float32Array(position.length);
|
728
|
+
var f = 0;
|
728
729
|
|
729
|
-
|
730
|
+
while (f < len) {
|
730
731
|
// const i1 = indices[f++] * 3;
|
731
732
|
// const i2 = indices[f++] * 3;
|
732
733
|
// const i3 = indices[f++] * 3;
|
@@ -741,30 +742,30 @@ function generateNormal(indices, position) {
|
|
741
742
|
i3 = c * 3;
|
742
743
|
v3Set(p1, position[i1], position[i1 + 1], position[i1 + 2]);
|
743
744
|
v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);
|
744
|
-
v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);
|
745
|
-
// pB.fromBufferAttribute(positionAttribute, vB);
|
746
|
-
// pC.fromBufferAttribute(positionAttribute, vC);
|
747
|
-
// cb.subVectors(pC, pB);
|
748
|
-
// ab.subVectors(pA, pB);
|
749
|
-
// cb.cross(ab);
|
750
|
-
|
745
|
+
v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);
|
751
746
|
v3Sub(v32, p3, p2);
|
752
747
|
v3Sub(v21, p1, p2);
|
753
748
|
v3Cross(n, v32, v21); // Already be weighted by the triangle area
|
754
749
|
|
755
|
-
for (var
|
756
|
-
normals[i1 +
|
757
|
-
normals[i2 +
|
758
|
-
normals[i3 +
|
750
|
+
for (var _i = 0; _i < 3; _i++) {
|
751
|
+
normals[i1 + _i] += n[_i];
|
752
|
+
normals[i2 + _i] += n[_i];
|
753
|
+
normals[i3 + _i] += n[_i];
|
759
754
|
}
|
755
|
+
|
756
|
+
f += 3;
|
760
757
|
}
|
761
758
|
|
762
|
-
|
763
|
-
|
759
|
+
var i = 0;
|
760
|
+
var l = normals.length;
|
761
|
+
|
762
|
+
while (i < l) {
|
763
|
+
v3Set(n, normals[i], normals[i + 1], normals[i + 2]);
|
764
764
|
v3Normalize(n, n);
|
765
|
-
normals[
|
766
|
-
normals[
|
767
|
-
normals[
|
765
|
+
normals[i] = n[0] || 0;
|
766
|
+
normals[i + 1] = n[1] || 0;
|
767
|
+
normals[i + 2] = n[2] || 0;
|
768
|
+
i += 3;
|
768
769
|
}
|
769
770
|
|
770
771
|
return normals;
|
@@ -813,11 +814,14 @@ function merge(results) {
|
|
813
814
|
result.position.set(_position, pOffset);
|
814
815
|
result.normal.set(normal, pOffset);
|
815
816
|
result.uv.set(uv, uvOffset);
|
817
|
+
var j = 0;
|
818
|
+
var len1 = _indices.length;
|
816
819
|
|
817
|
-
|
820
|
+
while (j < len1) {
|
818
821
|
var pIndex = _indices[j] + pCount;
|
819
822
|
result.indices[iIdx] = pIndex;
|
820
823
|
iIdx++;
|
824
|
+
j++;
|
821
825
|
}
|
822
826
|
|
823
827
|
uvOffset += uv.length;
|
@@ -835,39 +839,33 @@ function degToRad(angle) {
|
|
835
839
|
} // https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736
|
836
840
|
|
837
841
|
function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {
|
838
|
-
var
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
var
|
843
|
-
var
|
844
|
-
var
|
845
|
-
var
|
846
|
-
var
|
847
|
-
var
|
848
|
-
var
|
849
|
-
var
|
842
|
+
var idx1 = indexA * 3,
|
843
|
+
idx2 = indexB * 3,
|
844
|
+
idx3 = indexC * 3,
|
845
|
+
idx4 = indexD * 3;
|
846
|
+
var a_x = vertices[idx1];
|
847
|
+
var a_y = vertices[idx1 + 1];
|
848
|
+
var a_z = vertices[idx1 + 2];
|
849
|
+
var b_x = vertices[idx2];
|
850
|
+
var b_y = vertices[idx2 + 1];
|
851
|
+
var b_z = vertices[idx2 + 2];
|
852
|
+
var c_x = vertices[idx3];
|
853
|
+
var c_y = vertices[idx3 + 1];
|
854
|
+
var c_z = vertices[idx3 + 2];
|
855
|
+
var d_x = vertices[idx4];
|
856
|
+
var d_y = vertices[idx4 + 1];
|
857
|
+
var d_z = vertices[idx4 + 2];
|
850
858
|
|
851
859
|
if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {
|
852
860
|
uvs.push(a_x, 1 - a_z);
|
853
861
|
uvs.push(b_x, 1 - b_z);
|
854
862
|
uvs.push(c_x, 1 - c_z);
|
855
|
-
uvs.push(d_x, 1 - d_z);
|
856
|
-
// new Vector2(a_x, 1 - a_z),
|
857
|
-
// new Vector2(b_x, 1 - b_z),
|
858
|
-
// new Vector2(c_x, 1 - c_z),
|
859
|
-
// new Vector2(d_x, 1 - d_z)
|
860
|
-
// ];
|
863
|
+
uvs.push(d_x, 1 - d_z);
|
861
864
|
} else {
|
862
865
|
uvs.push(a_y, 1 - a_z);
|
863
866
|
uvs.push(b_y, 1 - b_z);
|
864
867
|
uvs.push(c_y, 1 - c_z);
|
865
|
-
uvs.push(d_y, 1 - d_z);
|
866
|
-
// new Vector2(a_y, 1 - a_z),
|
867
|
-
// new Vector2(b_y, 1 - b_z),
|
868
|
-
// new Vector2(c_y, 1 - c_z),
|
869
|
-
// new Vector2(d_y, 1 - d_z)
|
870
|
-
// ];
|
868
|
+
uvs.push(d_y, 1 - d_z);
|
871
869
|
}
|
872
870
|
}
|
873
871
|
|
@@ -900,10 +898,7 @@ function extrudePolygons(polygons, options) {
|
|
900
898
|
});
|
901
899
|
var result = flatVertices(polygon, options);
|
902
900
|
result.polygon = polygon;
|
903
|
-
var time = 'earcut';
|
904
|
-
console.time(time);
|
905
901
|
var triangles = earcut$1(result.flatVertices, result.holes, 2);
|
906
|
-
console.timeEnd(time);
|
907
902
|
generateTopAndBottom$1(result, triangles);
|
908
903
|
generateSides$1(result, options);
|
909
904
|
result.position = new Float32Array(result.points);
|
@@ -951,29 +946,32 @@ function generateSides$1(result, options) {
|
|
951
946
|
|
952
947
|
for (var i = 0, len = polygon.length; i < len; i++) {
|
953
948
|
var ring = polygon[i];
|
949
|
+
var j = 0;
|
950
|
+
var len1 = ring.length;
|
954
951
|
|
955
|
-
|
952
|
+
while (j < len1) {
|
956
953
|
var v1 = ring[j];
|
957
954
|
var v2 = ring[j + 1];
|
958
955
|
|
959
956
|
if (j === len1 - 1) {
|
960
957
|
v2 = ring[0];
|
961
|
-
}
|
962
|
-
// p2 = [v2[0], v2[1], options.depth],
|
963
|
-
// p3 = [v1[0], v1[1], 0],
|
964
|
-
// p4 = [v2[0], v2[1], 0];
|
965
|
-
|
958
|
+
}
|
966
959
|
|
967
960
|
var idx = points.length / 3;
|
968
|
-
|
961
|
+
var x1 = v1[0],
|
962
|
+
y1 = v1[1],
|
963
|
+
x2 = v2[0],
|
964
|
+
y2 = v2[1];
|
965
|
+
points.push(x1, y1, 0, x2, y2, 0, x1, y1, z, x2, y2, z);
|
969
966
|
var a = idx,
|
970
967
|
b = idx + 1,
|
971
968
|
c = idx + 2,
|
972
969
|
d = idx + 3; // points.push(p3, p4, p1, p2);
|
973
970
|
|
974
|
-
index.push(a, c, b);
|
975
|
-
|
971
|
+
index.push(a, c, b, c, d, b); // index.push(c, d, b);
|
972
|
+
|
976
973
|
generateSideWallUV(uvs, points, a, b, c, d);
|
974
|
+
j++;
|
977
975
|
}
|
978
976
|
}
|
979
977
|
}
|
@@ -1012,7 +1010,10 @@ function flatVertices(polygon, options) {
|
|
1012
1010
|
holes.push(idx0 / 2);
|
1013
1011
|
}
|
1014
1012
|
|
1015
|
-
|
1013
|
+
var j = 0;
|
1014
|
+
var len1 = ring.length;
|
1015
|
+
|
1016
|
+
while (j < len1) {
|
1016
1017
|
var c = ring[j];
|
1017
1018
|
var x = c[0],
|
1018
1019
|
y = c[1];
|
@@ -1032,6 +1033,7 @@ function flatVertices(polygon, options) {
|
|
1032
1033
|
uvs[uOffset + idx2 + 1] = y;
|
1033
1034
|
idx1 += 3;
|
1034
1035
|
idx2 += 2;
|
1036
|
+
j++;
|
1035
1037
|
}
|
1036
1038
|
}
|
1037
1039
|
|
@@ -1072,8 +1074,10 @@ function generateTopAndBottom(result, options) {
|
|
1072
1074
|
uvs = [];
|
1073
1075
|
var leftPoints = result.leftPoints,
|
1074
1076
|
rightPoints = result.rightPoints;
|
1077
|
+
var i = 0,
|
1078
|
+
len = leftPoints.length;
|
1075
1079
|
|
1076
|
-
|
1080
|
+
while (i < len) {
|
1077
1081
|
// top left
|
1078
1082
|
var idx0 = i * 3;
|
1079
1083
|
var _leftPoints$i = leftPoints[i],
|
@@ -1100,32 +1104,41 @@ function generateTopAndBottom(result, options) {
|
|
1100
1104
|
points[idx3] = x2;
|
1101
1105
|
points[idx3 + 1] = y2;
|
1102
1106
|
points[idx3 + 2] = 0;
|
1107
|
+
i++;
|
1103
1108
|
}
|
1104
1109
|
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1110
|
+
i = 0;
|
1111
|
+
len = points.length;
|
1112
|
+
|
1113
|
+
while (i < len) {
|
1114
|
+
var x = points[i],
|
1115
|
+
y = points[i + 1];
|
1108
1116
|
uvs.push(x, y);
|
1117
|
+
i += 3;
|
1109
1118
|
}
|
1110
1119
|
|
1111
|
-
|
1120
|
+
i = 0;
|
1121
|
+
len = leftPoints.length;
|
1122
|
+
|
1123
|
+
while (i < len - 1) {
|
1112
1124
|
// top
|
1113
1125
|
// left1 left2 right1,right2
|
1114
|
-
var a1 =
|
1115
|
-
b1 =
|
1116
|
-
c1 = a1 +
|
1117
|
-
d1 = b1 +
|
1126
|
+
var a1 = i,
|
1127
|
+
b1 = i + 1,
|
1128
|
+
c1 = a1 + len,
|
1129
|
+
d1 = b1 + len;
|
1118
1130
|
index.push(a1, c1, b1);
|
1119
1131
|
index.push(c1, d1, b1); // bottom
|
1120
1132
|
// left1 left2 right1,right2
|
1121
1133
|
|
1122
|
-
var len2 =
|
1123
|
-
var a2 =
|
1134
|
+
var len2 = len * 2;
|
1135
|
+
var a2 = i + len2,
|
1124
1136
|
b2 = a2 + 1,
|
1125
|
-
c2 = a2 +
|
1126
|
-
d2 = b2 +
|
1137
|
+
c2 = a2 + len,
|
1138
|
+
d2 = b2 + len;
|
1127
1139
|
index.push(a2, c2, b2);
|
1128
1140
|
index.push(c2, d2, b2);
|
1141
|
+
i++;
|
1129
1142
|
}
|
1130
1143
|
|
1131
1144
|
result.index = index;
|
@@ -1148,14 +1161,12 @@ function generateSides(result, options) {
|
|
1148
1161
|
var a = idx,
|
1149
1162
|
b = idx + 1,
|
1150
1163
|
c = idx + 2,
|
1151
|
-
d = idx + 3;
|
1152
|
-
|
1153
|
-
index.push(a, c, b);
|
1154
|
-
index.push(c, d, b);
|
1164
|
+
d = idx + 3;
|
1165
|
+
index.push(a, c, b, c, d, b);
|
1155
1166
|
generateSideWallUV(uvs, points, a, b, c, d);
|
1156
1167
|
}
|
1157
1168
|
|
1158
|
-
for (var i = 0,
|
1169
|
+
for (var i = 0, _len = rings.length; i < _len; i++) {
|
1159
1170
|
var ring = rings[i];
|
1160
1171
|
|
1161
1172
|
if (i > 0) {
|
@@ -1165,19 +1176,23 @@ function generateSides(result, options) {
|
|
1165
1176
|
ring = ring.reverse();
|
1166
1177
|
}
|
1167
1178
|
|
1168
|
-
|
1179
|
+
var j = 0;
|
1180
|
+
var len1 = ring.length - 1;
|
1181
|
+
|
1182
|
+
while (j < len1) {
|
1169
1183
|
var v1 = ring[j];
|
1170
1184
|
var v2 = ring[j + 1];
|
1171
1185
|
addOneSideIndex(v1, v2);
|
1186
|
+
j++;
|
1172
1187
|
}
|
1173
1188
|
}
|
1174
1189
|
|
1175
1190
|
var len = leftPoints.length;
|
1176
1191
|
var vs = [rightPoints[0], leftPoints[0], leftPoints[len - 1], rightPoints[len - 1]];
|
1177
1192
|
|
1178
|
-
for (var
|
1179
|
-
var _v = vs[
|
1180
|
-
_v2 = vs[
|
1193
|
+
for (var _i = 0; _i < vs.length; _i += 2) {
|
1194
|
+
var _v = vs[_i],
|
1195
|
+
_v2 = vs[_i + 1];
|
1181
1196
|
addOneSideIndex(_v, _v2);
|
1182
1197
|
}
|
1183
1198
|
}
|
@@ -1198,8 +1213,9 @@ function expandLine(line, options) {
|
|
1198
1213
|
leftPoints = [],
|
1199
1214
|
rightPoints = [];
|
1200
1215
|
var len = line.length;
|
1216
|
+
var i = 0;
|
1201
1217
|
|
1202
|
-
|
1218
|
+
while (i < len - 1) {
|
1203
1219
|
var _p = line[i],
|
1204
1220
|
_p2 = line[i + 1];
|
1205
1221
|
var dy = _p2[1] - _p[1],
|
@@ -1237,6 +1253,8 @@ function expandLine(line, options) {
|
|
1237
1253
|
leftPoints.push(_op2);
|
1238
1254
|
rightPoints.push(_op);
|
1239
1255
|
}
|
1256
|
+
|
1257
|
+
i++;
|
1240
1258
|
}
|
1241
1259
|
|
1242
1260
|
var rAngle = preAngle;
|
@@ -1301,5 +1319,3 @@ function leftOnLine(p, p1, p2) {
|
|
1301
1319
|
}
|
1302
1320
|
|
1303
1321
|
export { extrudePolygons, extrudePolylines };
|
1304
|
-
|
1305
|
-
typeof console !== 'undefined' && console.log('poly-extrude v0.0.1');
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "poly-extrude",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.4",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/poly-extrude.js",
|
6
6
|
"module": "dist/poly-extrude.mjs",
|
@@ -38,5 +38,10 @@
|
|
38
38
|
},
|
39
39
|
"dependencies": {
|
40
40
|
"earcut": "^2.2.3"
|
41
|
-
}
|
41
|
+
},
|
42
|
+
"files": [
|
43
|
+
"dist/",
|
44
|
+
"src/",
|
45
|
+
"index.js"
|
46
|
+
]
|
42
47
|
}
|
package/src/polygon.js
CHANGED
@@ -22,10 +22,7 @@ export function extrudePolygons(polygons, options) {
|
|
22
22
|
});
|
23
23
|
const result = flatVertices(polygon, options);
|
24
24
|
result.polygon = polygon;
|
25
|
-
const time = 'earcut';
|
26
|
-
console.time(time);
|
27
25
|
const triangles = earcut(result.flatVertices, result.holes, 2);
|
28
|
-
console.timeEnd(time);
|
29
26
|
generateTopAndBottom(result, triangles);
|
30
27
|
generateSides(result, options);
|
31
28
|
result.position = new Float32Array(result.points);
|
@@ -64,24 +61,24 @@ function generateSides(result, options) {
|
|
64
61
|
const z = options.depth;
|
65
62
|
for (let i = 0, len = polygon.length; i < len; i++) {
|
66
63
|
const ring = polygon[i];
|
67
|
-
|
64
|
+
let j = 0;
|
65
|
+
const len1 = ring.length;
|
66
|
+
while (j < len1) {
|
68
67
|
const v1 = ring[j];
|
69
68
|
let v2 = ring[j + 1];
|
70
69
|
if (j === len1 - 1) {
|
71
70
|
v2 = ring[0];
|
72
71
|
}
|
73
|
-
// const p1 = [v1[0], v1[1], options.depth],
|
74
|
-
// p2 = [v2[0], v2[1], options.depth],
|
75
|
-
// p3 = [v1[0], v1[1], 0],
|
76
|
-
// p4 = [v2[0], v2[1], 0];
|
77
72
|
const idx = points.length / 3;
|
78
|
-
|
73
|
+
const x1 = v1[0], y1 = v1[1], x2 = v2[0], y2 = v2[1];
|
74
|
+
points.push(x1, y1, 0, x2, y2, 0, x1, y1, z, x2, y2, z);
|
79
75
|
const a = idx, b = idx + 1, c = idx + 2, d = idx + 3;
|
80
76
|
// points.push(p3, p4, p1, p2);
|
81
|
-
index.push(a, c, b);
|
82
|
-
index.push(c, d, b);
|
77
|
+
index.push(a, c, b, c, d, b);
|
78
|
+
// index.push(c, d, b);
|
83
79
|
|
84
80
|
generateSideWallUV(uvs, points, a, b, c, d);
|
81
|
+
j++;
|
85
82
|
}
|
86
83
|
}
|
87
84
|
}
|
@@ -110,7 +107,9 @@ function flatVertices(polygon, options) {
|
|
110
107
|
if (i > 0) {
|
111
108
|
holes.push(idx0 / 2);
|
112
109
|
}
|
113
|
-
|
110
|
+
let j = 0;
|
111
|
+
const len1 = ring.length;
|
112
|
+
while (j < len1) {
|
114
113
|
const c = ring[j];
|
115
114
|
const x = c[0], y = c[1];
|
116
115
|
|
@@ -135,6 +134,7 @@ function flatVertices(polygon, options) {
|
|
135
134
|
|
136
135
|
idx1 += 3;
|
137
136
|
idx2 += 2;
|
137
|
+
j++;
|
138
138
|
}
|
139
139
|
}
|
140
140
|
return {
|
package/src/polyline.js
CHANGED
@@ -22,7 +22,8 @@ function generateTopAndBottom(result, options) {
|
|
22
22
|
const z = options.depth;
|
23
23
|
const points = [], index = [], uvs = [];
|
24
24
|
const { leftPoints, rightPoints } = result;
|
25
|
-
|
25
|
+
let i = 0, len = leftPoints.length;
|
26
|
+
while (i < len) {
|
26
27
|
// top left
|
27
28
|
const idx0 = i * 3;
|
28
29
|
const [x1, y1] = leftPoints[i];
|
@@ -48,12 +49,19 @@ function generateTopAndBottom(result, options) {
|
|
48
49
|
points[idx3] = x2;
|
49
50
|
points[idx3 + 1] = y2;
|
50
51
|
points[idx3 + 2] = 0;
|
52
|
+
|
53
|
+
i++;
|
51
54
|
}
|
52
|
-
|
55
|
+
i = 0;
|
56
|
+
len = points.length;
|
57
|
+
while (i < len) {
|
53
58
|
const x = points[i], y = points[i + 1];
|
54
59
|
uvs.push(x, y);
|
60
|
+
i += 3;
|
55
61
|
}
|
56
|
-
|
62
|
+
i = 0;
|
63
|
+
len = leftPoints.length;
|
64
|
+
while (i < len - 1) {
|
57
65
|
// top
|
58
66
|
// left1 left2 right1,right2
|
59
67
|
const a1 = i, b1 = i + 1, c1 = a1 + len, d1 = b1 + len;
|
@@ -66,6 +74,7 @@ function generateTopAndBottom(result, options) {
|
|
66
74
|
const a2 = i + len2, b2 = a2 + 1, c2 = a2 + len, d2 = b2 + len;
|
67
75
|
index.push(a2, c2, b2);
|
68
76
|
index.push(c2, d2, b2);
|
77
|
+
i++;
|
69
78
|
}
|
70
79
|
result.index = index;
|
71
80
|
result.points = points;
|
@@ -76,13 +85,12 @@ function generateSides(result, options) {
|
|
76
85
|
const { points, index, leftPoints, rightPoints, uvs } = result;
|
77
86
|
const z = options.depth;
|
78
87
|
const rings = [leftPoints, rightPoints];
|
88
|
+
|
79
89
|
function addOneSideIndex(v1, v2) {
|
80
90
|
const idx = points.length / 3;
|
81
91
|
points.push(v1[0], v1[1], 0, v2[0], v2[1], 0, v1[0], v1[1], z, v2[0], v2[1], z);
|
82
92
|
const a = idx, b = idx + 1, c = idx + 2, d = idx + 3;
|
83
|
-
|
84
|
-
index.push(a, c, b);
|
85
|
-
index.push(c, d, b);
|
93
|
+
index.push(a, c, b, c, d, b);
|
86
94
|
generateSideWallUV(uvs, points, a, b, c, d);
|
87
95
|
}
|
88
96
|
|
@@ -94,10 +102,13 @@ function generateSides(result, options) {
|
|
94
102
|
});
|
95
103
|
ring = ring.reverse();
|
96
104
|
}
|
97
|
-
|
105
|
+
let j = 0;
|
106
|
+
const len1 = ring.length - 1;
|
107
|
+
while (j < len1) {
|
98
108
|
const v1 = ring[j];
|
99
109
|
const v2 = ring[j + 1];
|
100
110
|
addOneSideIndex(v1, v2);
|
111
|
+
j++;
|
101
112
|
}
|
102
113
|
}
|
103
114
|
const len = leftPoints.length;
|
@@ -115,7 +126,8 @@ function expandLine(line, options) {
|
|
115
126
|
const radius = options.lineWidth / 2;
|
116
127
|
const points = [], leftPoints = [], rightPoints = [];
|
117
128
|
const len = line.length;
|
118
|
-
|
129
|
+
let i = 0;
|
130
|
+
while (i < len - 1) {
|
119
131
|
const p1 = line[i],
|
120
132
|
p2 = line[i + 1];
|
121
133
|
const dy = p2[1] - p1[1],
|
@@ -146,6 +158,7 @@ function expandLine(line, options) {
|
|
146
158
|
leftPoints.push(op2);
|
147
159
|
rightPoints.push(op1);
|
148
160
|
}
|
161
|
+
i++;
|
149
162
|
}
|
150
163
|
let rAngle = preAngle;
|
151
164
|
rAngle -= 90;
|
package/src/util.js
CHANGED
@@ -64,8 +64,9 @@ export function generateNormal(indices, position) {
|
|
64
64
|
|
65
65
|
const len = indices.length;
|
66
66
|
const normals = new Float32Array(position.length);
|
67
|
+
let f = 0;
|
68
|
+
while (f < len) {
|
67
69
|
|
68
|
-
for (let f = 0; f < len; f += 3) {
|
69
70
|
// const i1 = indices[f++] * 3;
|
70
71
|
// const i2 = indices[f++] * 3;
|
71
72
|
// const i3 = indices[f++] * 3;
|
@@ -79,13 +80,6 @@ export function generateNormal(indices, position) {
|
|
79
80
|
v3Set(p2, position[i2], position[i2 + 1], position[i2 + 2]);
|
80
81
|
v3Set(p3, position[i3], position[i3 + 1], position[i3 + 2]);
|
81
82
|
|
82
|
-
// pA.fromBufferAttribute(positionAttribute, vA);
|
83
|
-
// pB.fromBufferAttribute(positionAttribute, vB);
|
84
|
-
// pC.fromBufferAttribute(positionAttribute, vC);
|
85
|
-
|
86
|
-
// cb.subVectors(pC, pB);
|
87
|
-
// ab.subVectors(pA, pB);
|
88
|
-
// cb.cross(ab);
|
89
83
|
v3Sub(v32, p3, p2);
|
90
84
|
v3Sub(v21, p1, p2);
|
91
85
|
v3Cross(n, v32, v21);
|
@@ -95,15 +89,18 @@ export function generateNormal(indices, position) {
|
|
95
89
|
normals[i2 + i] += n[i];
|
96
90
|
normals[i3 + i] += n[i];
|
97
91
|
}
|
92
|
+
f += 3;
|
98
93
|
}
|
99
94
|
|
100
|
-
|
95
|
+
let i = 0;
|
96
|
+
const l = normals.length;
|
97
|
+
while (i < l) {
|
101
98
|
v3Set(n, normals[i], normals[i + 1], normals[i + 2]);
|
102
99
|
v3Normalize(n, n);
|
103
|
-
normals[i] = n[0] ||
|
104
|
-
normals[i + 1] = n[1] ||
|
105
|
-
normals[i + 2] = n[2] ||
|
106
|
-
|
100
|
+
normals[i] = n[0] || 0;
|
101
|
+
normals[i + 1] = n[1] || 0;
|
102
|
+
normals[i + 2] = n[2] || 0;
|
103
|
+
i += 3;
|
107
104
|
}
|
108
105
|
|
109
106
|
return normals;
|
@@ -139,10 +136,13 @@ export function merge(results) {
|
|
139
136
|
result.position.set(position, pOffset);
|
140
137
|
result.normal.set(normal, pOffset);
|
141
138
|
result.uv.set(uv, uvOffset);
|
142
|
-
|
139
|
+
let j = 0;
|
140
|
+
const len1 = indices.length;
|
141
|
+
while (j < len1) {
|
143
142
|
const pIndex = indices[j] + pCount;
|
144
143
|
result.indices[iIdx] = pIndex;
|
145
144
|
iIdx++;
|
145
|
+
j++;
|
146
146
|
}
|
147
147
|
uvOffset += uv.length;
|
148
148
|
pOffset += position.length;
|
@@ -162,18 +162,19 @@ export function degToRad(angle) {
|
|
162
162
|
// https://github.com/mrdoob/three.js/blob/16f13e3b07e31d0e9a00df7c3366bbe0e464588c/src/geometries/ExtrudeGeometry.js?_pjax=%23js-repo-pjax-container#L736
|
163
163
|
export function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD) {
|
164
164
|
|
165
|
-
const
|
166
|
-
const
|
167
|
-
const
|
168
|
-
const
|
169
|
-
const
|
170
|
-
const
|
171
|
-
const
|
172
|
-
const
|
173
|
-
const
|
174
|
-
const
|
175
|
-
const
|
176
|
-
const
|
165
|
+
const idx1 = indexA * 3, idx2 = indexB * 3, idx3 = indexC * 3, idx4 = indexD * 3;
|
166
|
+
const a_x = vertices[idx1];
|
167
|
+
const a_y = vertices[idx1 + 1];
|
168
|
+
const a_z = vertices[idx1 + 2];
|
169
|
+
const b_x = vertices[idx2];
|
170
|
+
const b_y = vertices[idx2 + 1];
|
171
|
+
const b_z = vertices[idx2 + 2];
|
172
|
+
const c_x = vertices[idx3];
|
173
|
+
const c_y = vertices[idx3 + 1];
|
174
|
+
const c_z = vertices[idx3 + 2];
|
175
|
+
const d_x = vertices[idx4];
|
176
|
+
const d_y = vertices[idx4 + 1];
|
177
|
+
const d_z = vertices[idx4 + 2];
|
177
178
|
|
178
179
|
if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) {
|
179
180
|
|
@@ -181,25 +182,11 @@ export function generateSideWallUV(uvs, vertices, indexA, indexB, indexC, indexD
|
|
181
182
|
uvs.push(b_x, 1 - b_z);
|
182
183
|
uvs.push(c_x, 1 - c_z);
|
183
184
|
uvs.push(d_x, 1 - d_z);
|
184
|
-
// return [
|
185
|
-
// new Vector2(a_x, 1 - a_z),
|
186
|
-
// new Vector2(b_x, 1 - b_z),
|
187
|
-
// new Vector2(c_x, 1 - c_z),
|
188
|
-
// new Vector2(d_x, 1 - d_z)
|
189
|
-
// ];
|
190
|
-
|
191
185
|
} else {
|
192
186
|
uvs.push(a_y, 1 - a_z);
|
193
187
|
uvs.push(b_y, 1 - b_z);
|
194
188
|
uvs.push(c_y, 1 - c_z);
|
195
189
|
uvs.push(d_y, 1 - d_z);
|
196
|
-
// return [
|
197
|
-
// new Vector2(a_y, 1 - a_z),
|
198
|
-
// new Vector2(b_y, 1 - b_z),
|
199
|
-
// new Vector2(c_y, 1 - c_z),
|
200
|
-
// new Vector2(d_y, 1 - d_z)
|
201
|
-
// ];
|
202
|
-
|
203
190
|
}
|
204
191
|
|
205
192
|
}
|
package/.eslintignore
DELETED
package/.eslintrc.js
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
module.exports = {
|
2
|
-
"env": {
|
3
|
-
"browser": true,
|
4
|
-
"es6": true,
|
5
|
-
"node": true
|
6
|
-
},
|
7
|
-
"extends": "standard",
|
8
|
-
"globals": {
|
9
|
-
"Atomics": "readonly",
|
10
|
-
"SharedArrayBuffer": "readonly",
|
11
|
-
"AMap": true,
|
12
|
-
"mapboxgl": true,
|
13
|
-
"TMap": true
|
14
|
-
},
|
15
|
-
"parserOptions": {
|
16
|
-
"ecmaVersion": 2018,
|
17
|
-
"sourceType": "module"
|
18
|
-
},
|
19
|
-
"rules": {
|
20
|
-
"no-console": "off",
|
21
|
-
"no-inner-declarations": "off",
|
22
|
-
"semi": ["error", "always"],
|
23
|
-
"indent": 0,
|
24
|
-
"padded-blocks": 0,
|
25
|
-
"space-before-function-paren": 0,
|
26
|
-
"no-var": 1,
|
27
|
-
"dot-notation": 0,
|
28
|
-
"one-var": 0,
|
29
|
-
"new-cap": 0,
|
30
|
-
"quote-props": 0,
|
31
|
-
"camelcase": 0,
|
32
|
-
"wrap-iife": 0
|
33
|
-
}
|
34
|
-
};
|
package/.vscode/settings.json
DELETED