poly-extrude 0.0.1 → 0.0.4
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 +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