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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * poly-extrude v0.0.2
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
- for (var f = 0; f < len; f += 3) {
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]); // pA.fromBufferAttribute(positionAttribute, vA);
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 i = 0; i < 3; i++) {
762
- normals[i1 + i] += n[i];
763
- normals[i2 + i] += n[i];
764
- normals[i3 + i] += n[i];
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
- for (var _i = 0; _i < normals.length; _i += 3) {
769
- v3Set(n, normals[_i], normals[_i + 1], normals[_i + 2]);
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[_i] = n[0] || 0;
772
- normals[_i + 1] = n[1] || 0;
773
- normals[_i + 2] = n[2] || 0;
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
- for (var j = 0, len1 = _indices.length; j < len1; j++) {
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 a_x = vertices[indexA * 3];
845
- var a_y = vertices[indexA * 3 + 1];
846
- var a_z = vertices[indexA * 3 + 2];
847
- var b_x = vertices[indexB * 3];
848
- var b_y = vertices[indexB * 3 + 1];
849
- var b_z = vertices[indexB * 3 + 2];
850
- var c_x = vertices[indexC * 3];
851
- var c_y = vertices[indexC * 3 + 1];
852
- var c_z = vertices[indexC * 3 + 2];
853
- var d_x = vertices[indexD * 3];
854
- var d_y = vertices[indexD * 3 + 1];
855
- var d_z = vertices[indexD * 3 + 2];
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); // return [
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); // return [
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
- if (!isClockwise(polygon[0])) {
886
- polygon[0] = polygon[0].reverse();
887
- }
883
+ for (var i = 0, len = polygon.length; i < len; i++) {
884
+ var ring = polygon[i];
885
+ valiateRing(ring);
888
886
 
889
- polygon.slice(1, Infinity).forEach(function (coordinates, index) {
890
- if (isClockwise(coordinates)) {
891
- polygon[index + 1] = coordinates.reverse();
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
- polygon.forEach(function (ring) {
895
- var len = ring.length;
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
- for (var j = 0, len1 = ring.length; j < len1; j++) {
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
- } // const p1 = [v1[0], v1[1], options.depth],
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
- points.push(v1[0], v1[1], 0, v2[0], v2[1], 0, v1[0], v1[1], z, v2[0], v2[1], z);
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
- index.push(c, d, b);
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
- for (var j = 0, len1 = ring.length; j < len1; j++) {
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
- for (var i = 0, len = leftPoints.length; i < len; i++) {
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
- for (var _i = 0, _len = points.length; _i < _len; _i += 3) {
1112
- var x = points[_i],
1113
- y = points[_i + 1];
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
- for (var _i2 = 0, _len2 = leftPoints.length; _i2 < _len2 - 1; _i2++) {
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 = _i2,
1121
- b1 = _i2 + 1,
1122
- c1 = a1 + _len2,
1123
- d1 = b1 + _len2;
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 = _len2 * 2;
1129
- var a2 = _i2 + len2,
1152
+ var len2 = len * 2;
1153
+ var a2 = i + len2,
1130
1154
  b2 = a2 + 1,
1131
- c2 = a2 + _len2,
1132
- d2 = b2 + _len2;
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; // points.push(p3, p4, p1, p2);
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, _len3 = rings.length; i < _len3; i++) {
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
- for (var j = 0, len1 = ring.length - 1; j < len1; j++) {
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 _i3 = 0; _i3 < vs.length; _i3 += 2) {
1185
- var _v = vs[_i3],
1186
- _v2 = vs[_i3 + 1];
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
- for (var i = 0; i < len - 1; i++) {
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