circuit-json-to-gltf 0.0.33 → 0.0.34

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.
Files changed (2) hide show
  1. package/dist/index.js +321 -204
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -784,7 +784,7 @@ var require_rotateY = __commonJS({
784
784
  var require_rotateZ = __commonJS({
785
785
  "node_modules/@jscad/modeling/src/maths/vec3/rotateZ.js"(exports, module) {
786
786
  "use strict";
787
- var rotateZ2 = (out, vector, origin, radians) => {
787
+ var rotateZ3 = (out, vector, origin, radians) => {
788
788
  const p = [];
789
789
  const r = [];
790
790
  p[0] = vector[0] - origin[0];
@@ -796,7 +796,7 @@ var require_rotateZ = __commonJS({
796
796
  out[2] = vector[2];
797
797
  return out;
798
798
  };
799
- module.exports = rotateZ2;
799
+ module.exports = rotateZ3;
800
800
  }
801
801
  });
802
802
 
@@ -1338,7 +1338,7 @@ var require_rotateZ2 = __commonJS({
1338
1338
  "node_modules/@jscad/modeling/src/maths/mat4/rotateZ.js"(exports, module) {
1339
1339
  "use strict";
1340
1340
  var { sin, cos } = require_trigonometry();
1341
- var rotateZ2 = (out, matrix, radians) => {
1341
+ var rotateZ3 = (out, matrix, radians) => {
1342
1342
  const s = sin(radians);
1343
1343
  const c = cos(radians);
1344
1344
  const a00 = matrix[0];
@@ -1369,7 +1369,7 @@ var require_rotateZ2 = __commonJS({
1369
1369
  out[7] = a13 * c - a03 * s;
1370
1370
  return out;
1371
1371
  };
1372
- module.exports = rotateZ2;
1372
+ module.exports = rotateZ3;
1373
1373
  }
1374
1374
  });
1375
1375
 
@@ -1443,7 +1443,7 @@ var require_toString2 = __commonJS({
1443
1443
  var require_translate = __commonJS({
1444
1444
  "node_modules/@jscad/modeling/src/maths/mat4/translate.js"(exports, module) {
1445
1445
  "use strict";
1446
- var translate2 = (out, matrix, offsets) => {
1446
+ var translate3 = (out, matrix, offsets) => {
1447
1447
  const x = offsets[0];
1448
1448
  const y = offsets[1];
1449
1449
  const z = offsets[2];
@@ -1496,7 +1496,7 @@ var require_translate = __commonJS({
1496
1496
  }
1497
1497
  return out;
1498
1498
  };
1499
- module.exports = translate2;
1499
+ module.exports = translate3;
1500
1500
  }
1501
1501
  });
1502
1502
 
@@ -3833,11 +3833,11 @@ var require_invert2 = __commonJS({
3833
3833
  "use strict";
3834
3834
  var plane = require_plane();
3835
3835
  var create = require_create6();
3836
- var invert = (polygon2) => {
3837
- const vertices = polygon2.vertices.slice().reverse();
3836
+ var invert = (polygon3) => {
3837
+ const vertices = polygon3.vertices.slice().reverse();
3838
3838
  const inverted = create(vertices);
3839
- if (polygon2.plane) {
3840
- inverted.plane = plane.flip(plane.create(), polygon2.plane);
3839
+ if (polygon3.plane) {
3840
+ inverted.plane = plane.flip(plane.create(), polygon3.plane);
3841
3841
  }
3842
3842
  return inverted;
3843
3843
  };
@@ -3869,7 +3869,7 @@ var require_isConvex = __commonJS({
3869
3869
  "use strict";
3870
3870
  var plane = require_plane();
3871
3871
  var vec3 = require_vec3();
3872
- var isConvex = (polygon2) => areVerticesConvex(polygon2.vertices);
3872
+ var isConvex = (polygon3) => areVerticesConvex(polygon3.vertices);
3873
3873
  var areVerticesConvex = (vertices) => {
3874
3874
  const numvertices = vertices.length;
3875
3875
  if (numvertices > 2) {
@@ -3905,11 +3905,11 @@ var require_plane2 = __commonJS({
3905
3905
  "node_modules/@jscad/modeling/src/geometries/poly3/plane.js"(exports, module) {
3906
3906
  "use strict";
3907
3907
  var mplane = require_plane();
3908
- var plane = (polygon2) => {
3909
- if (!polygon2.plane) {
3910
- polygon2.plane = mplane.fromPoints(mplane.create(), ...polygon2.vertices);
3908
+ var plane = (polygon3) => {
3909
+ if (!polygon3.plane) {
3910
+ polygon3.plane = mplane.fromPoints(mplane.create(), ...polygon3.vertices);
3911
3911
  }
3912
- return polygon2.plane;
3912
+ return polygon3.plane;
3913
3913
  };
3914
3914
  module.exports = plane;
3915
3915
  }
@@ -3920,13 +3920,13 @@ var require_measureArea = __commonJS({
3920
3920
  "node_modules/@jscad/modeling/src/geometries/poly3/measureArea.js"(exports, module) {
3921
3921
  "use strict";
3922
3922
  var plane = require_plane2();
3923
- var measureArea = (polygon2) => {
3924
- const n = polygon2.vertices.length;
3923
+ var measureArea = (polygon3) => {
3924
+ const n = polygon3.vertices.length;
3925
3925
  if (n < 3) {
3926
3926
  return 0;
3927
3927
  }
3928
- const vertices = polygon2.vertices;
3929
- const normal = plane(polygon2);
3928
+ const vertices = polygon3.vertices;
3929
+ const normal = plane(polygon3);
3930
3930
  const ax = Math.abs(normal[0]);
3931
3931
  const ay = Math.abs(normal[1]);
3932
3932
  const az = Math.abs(normal[2]);
@@ -3985,8 +3985,8 @@ var require_measureBoundingBox = __commonJS({
3985
3985
  "node_modules/@jscad/modeling/src/geometries/poly3/measureBoundingBox.js"(exports, module) {
3986
3986
  "use strict";
3987
3987
  var vec3 = require_vec3();
3988
- var measureBoundingBox2 = (polygon2) => {
3989
- const vertices = polygon2.vertices;
3988
+ var measureBoundingBox2 = (polygon3) => {
3989
+ const vertices = polygon3.vertices;
3990
3990
  const numvertices = vertices.length;
3991
3991
  const min = numvertices === 0 ? vec3.create() : vec3.clone(vertices[0]);
3992
3992
  const max = vec3.clone(min);
@@ -4064,10 +4064,10 @@ var require_measureBoundingSphere = __commonJS({
4064
4064
  "use strict";
4065
4065
  var vec4 = require_vec4();
4066
4066
  var cache = /* @__PURE__ */ new WeakMap();
4067
- var measureBoundingSphere = (polygon2) => {
4068
- const boundingSphere = cache.get(polygon2);
4067
+ var measureBoundingSphere = (polygon3) => {
4068
+ const boundingSphere = cache.get(polygon3);
4069
4069
  if (boundingSphere) return boundingSphere;
4070
- const vertices = polygon2.vertices;
4070
+ const vertices = polygon3.vertices;
4071
4071
  const out = vec4.create();
4072
4072
  if (vertices.length === 0) {
4073
4073
  out[0] = 0;
@@ -4097,7 +4097,7 @@ var require_measureBoundingSphere = __commonJS({
4097
4097
  const y = out[1] - maxy[1];
4098
4098
  const z = out[2] - maxz[2];
4099
4099
  out[3] = Math.sqrt(x * x + y * y + z * z);
4100
- cache.set(polygon2, out);
4100
+ cache.set(polygon3, out);
4101
4101
  return out;
4102
4102
  };
4103
4103
  module.exports = measureBoundingSphere;
@@ -4109,9 +4109,9 @@ var require_measureSignedVolume = __commonJS({
4109
4109
  "node_modules/@jscad/modeling/src/geometries/poly3/measureSignedVolume.js"(exports, module) {
4110
4110
  "use strict";
4111
4111
  var vec3 = require_vec3();
4112
- var measureSignedVolume = (polygon2) => {
4112
+ var measureSignedVolume = (polygon3) => {
4113
4113
  let signedVolume = 0;
4114
- const vertices = polygon2.vertices;
4114
+ const vertices = polygon3.vertices;
4115
4115
  const cross = vec3.create();
4116
4116
  for (let i = 0; i < vertices.length - 2; i++) {
4117
4117
  vec3.cross(cross, vertices[i + 1], vertices[i + 2]);
@@ -4128,7 +4128,7 @@ var require_measureSignedVolume = __commonJS({
4128
4128
  var require_toPoints2 = __commonJS({
4129
4129
  "node_modules/@jscad/modeling/src/geometries/poly3/toPoints.js"(exports, module) {
4130
4130
  "use strict";
4131
- var toPoints = (polygon2) => polygon2.vertices;
4131
+ var toPoints = (polygon3) => polygon3.vertices;
4132
4132
  module.exports = toPoints;
4133
4133
  }
4134
4134
  });
@@ -4138,9 +4138,9 @@ var require_toString6 = __commonJS({
4138
4138
  "node_modules/@jscad/modeling/src/geometries/poly3/toString.js"(exports, module) {
4139
4139
  "use strict";
4140
4140
  var vec3 = require_vec3();
4141
- var toString = (polygon2) => {
4141
+ var toString = (polygon3) => {
4142
4142
  let result = "poly3: vertices: [";
4143
- polygon2.vertices.forEach((vertex) => {
4143
+ polygon3.vertices.forEach((vertex) => {
4144
4144
  result += `${vec3.toString(vertex)}, `;
4145
4145
  });
4146
4146
  result += "]";
@@ -4157,8 +4157,8 @@ var require_transform6 = __commonJS({
4157
4157
  var mat4 = require_mat4();
4158
4158
  var vec3 = require_vec3();
4159
4159
  var create = require_create6();
4160
- var transform = (matrix, polygon2) => {
4161
- const vertices = polygon2.vertices.map((vertex) => vec3.transform(vec3.create(), vertex, matrix));
4160
+ var transform = (matrix, polygon3) => {
4161
+ const vertices = polygon3.vertices.map((vertex) => vec3.transform(vec3.create(), vertex, matrix));
4162
4162
  if (mat4.isMirroring(matrix)) {
4163
4163
  vertices.reverse();
4164
4164
  }
@@ -4274,8 +4274,8 @@ var require_fromPoints4 = __commonJS({
4274
4274
  throw new Error("the given points must be an array");
4275
4275
  }
4276
4276
  const polygons = listofpoints.map((points, index) => {
4277
- const polygon2 = poly3.create(points);
4278
- return polygon2;
4277
+ const polygon3 = poly3.create(points);
4278
+ return polygon3;
4279
4279
  });
4280
4280
  const result = create(polygons);
4281
4281
  return result;
@@ -4326,7 +4326,7 @@ var require_applyTransforms2 = __commonJS({
4326
4326
  var poly3 = require_poly3();
4327
4327
  var applyTransforms = (geometry) => {
4328
4328
  if (mat4.isIdentity(geometry.transforms)) return geometry;
4329
- geometry.polygons = geometry.polygons.map((polygon2) => poly3.transform(geometry.transforms, polygon2));
4329
+ geometry.polygons = geometry.polygons.map((polygon3) => poly3.transform(geometry.transforms, polygon3));
4330
4330
  geometry.transforms = mat4.create();
4331
4331
  return geometry;
4332
4332
  };
@@ -4353,7 +4353,7 @@ var require_invert3 = __commonJS({
4353
4353
  var toPolygons2 = require_toPolygons();
4354
4354
  var invert = (geometry) => {
4355
4355
  const polygons = toPolygons2(geometry);
4356
- const newpolygons = polygons.map((polygon2) => poly3.invert(polygon2));
4356
+ const newpolygons = polygons.map((polygon3) => poly3.invert(polygon3));
4357
4357
  return create(newpolygons);
4358
4358
  };
4359
4359
  module.exports = invert;
@@ -4386,7 +4386,7 @@ var require_toPoints3 = __commonJS({
4386
4386
  var toPolygons2 = require_toPolygons();
4387
4387
  var toPoints = (geometry) => {
4388
4388
  const polygons = toPolygons2(geometry);
4389
- const listofpoints = polygons.map((polygon2) => poly3.toPoints(polygon2));
4389
+ const listofpoints = polygons.map((polygon3) => poly3.toPoints(polygon3));
4390
4390
  return listofpoints;
4391
4391
  };
4392
4392
  module.exports = toPoints;
@@ -4402,8 +4402,8 @@ var require_toString7 = __commonJS({
4402
4402
  var toString = (geometry) => {
4403
4403
  const polygons = toPolygons2(geometry);
4404
4404
  let result = "geom3 (" + polygons.length + " polygons):\n";
4405
- polygons.forEach((polygon2) => {
4406
- result += " " + poly3.toString(polygon2) + "\n";
4405
+ polygons.forEach((polygon3) => {
4406
+ result += " " + poly3.toString(polygon3) + "\n";
4407
4407
  });
4408
4408
  return result;
4409
4409
  };
@@ -4420,7 +4420,7 @@ var require_toCompactBinary2 = __commonJS({
4420
4420
  const polygons = geometry.polygons;
4421
4421
  const transforms = geometry.transforms;
4422
4422
  const numberOfPolygons = polygons.length;
4423
- const numberOfVertices = polygons.reduce((count, polygon2) => count + polygon2.vertices.length, 0);
4423
+ const numberOfVertices = polygons.reduce((count, polygon3) => count + polygon3.vertices.length, 0);
4424
4424
  let color = [-1, -1, -1, -1];
4425
4425
  if (geometry.color) color = geometry.color;
4426
4426
  const compacted = new Float32Array(1 + 16 + 4 + 1 + numberOfPolygons + numberOfVertices * 3);
@@ -4448,8 +4448,8 @@ var require_toCompactBinary2 = __commonJS({
4448
4448
  compacted[21] = numberOfVertices;
4449
4449
  let ci = 22;
4450
4450
  let vi = ci + numberOfPolygons;
4451
- polygons.forEach((polygon2) => {
4452
- const points = poly3.toPoints(polygon2);
4451
+ polygons.forEach((polygon3) => {
4452
+ const points = poly3.toPoints(polygon3);
4453
4453
  compacted[ci] = points.length;
4454
4454
  ci++;
4455
4455
  for (let i = 0; i < points.length; i++) {
@@ -5877,7 +5877,7 @@ var require_measureArea2 = __commonJS({
5877
5877
  "node_modules/@jscad/modeling/src/geometries/poly2/measureArea.js"(exports, module) {
5878
5878
  "use strict";
5879
5879
  var area = require_area();
5880
- var measureArea = (polygon2) => area(polygon2.vertices);
5880
+ var measureArea = (polygon3) => area(polygon3.vertices);
5881
5881
  module.exports = measureArea;
5882
5882
  }
5883
5883
  });
@@ -5901,8 +5901,8 @@ var require_flip2 = __commonJS({
5901
5901
  "node_modules/@jscad/modeling/src/geometries/poly2/flip.js"(exports, module) {
5902
5902
  "use strict";
5903
5903
  var create = require_create10();
5904
- var flip = (polygon2) => {
5905
- const vertices = polygon2.vertices.slice().reverse();
5904
+ var flip = (polygon3) => {
5905
+ const vertices = polygon3.vertices.slice().reverse();
5906
5906
  return create(vertices);
5907
5907
  };
5908
5908
  module.exports = flip;
@@ -5915,22 +5915,22 @@ var require_arePointsInside = __commonJS({
5915
5915
  "use strict";
5916
5916
  var measureArea = require_measureArea2();
5917
5917
  var flip = require_flip2();
5918
- var arePointsInside = (points, polygon2) => {
5918
+ var arePointsInside = (points, polygon3) => {
5919
5919
  if (points.length === 0) return 0;
5920
- const vertices = polygon2.vertices;
5920
+ const vertices = polygon3.vertices;
5921
5921
  if (vertices.length < 3) return 0;
5922
- if (measureArea(polygon2) < 0) {
5923
- polygon2 = flip(polygon2);
5922
+ if (measureArea(polygon3) < 0) {
5923
+ polygon3 = flip(polygon3);
5924
5924
  }
5925
5925
  const sum = points.reduce((acc, point) => acc + isPointInside(point, vertices), 0);
5926
5926
  return sum === points.length ? 1 : 0;
5927
5927
  };
5928
- var isPointInside = (point, polygon2) => {
5929
- const numverts = polygon2.length;
5928
+ var isPointInside = (point, polygon3) => {
5929
+ const numverts = polygon3.length;
5930
5930
  const tx = point[0];
5931
5931
  const ty = point[1];
5932
- let vtx0 = polygon2[numverts - 1];
5933
- let vtx1 = polygon2[0];
5932
+ let vtx0 = polygon3[numverts - 1];
5933
+ let vtx1 = polygon3[0];
5934
5934
  let yflag0 = vtx0[1] > ty;
5935
5935
  let insideFlag = 0;
5936
5936
  let i = 0;
@@ -5949,7 +5949,7 @@ var require_arePointsInside = __commonJS({
5949
5949
  }
5950
5950
  yflag0 = yflag1;
5951
5951
  vtx0 = vtx1;
5952
- vtx1 = polygon2[++i];
5952
+ vtx1 = polygon3[++i];
5953
5953
  }
5954
5954
  return insideFlag;
5955
5955
  };
@@ -6628,7 +6628,7 @@ var require_measureArea3 = __commonJS({
6628
6628
  let area = cache.get(geometry);
6629
6629
  if (area) return area;
6630
6630
  const polygons = geom32.toPolygons(geometry);
6631
- area = polygons.reduce((area2, polygon2) => area2 + poly3.measureArea(polygon2), 0);
6631
+ area = polygons.reduce((area2, polygon3) => area2 + poly3.measureArea(polygon3), 0);
6632
6632
  cache.set(geometry, area);
6633
6633
  return area;
6634
6634
  };
@@ -6731,8 +6731,8 @@ var require_measureBoundingBox2 = __commonJS({
6731
6731
  vec3.copy(minpoint, points[0]);
6732
6732
  }
6733
6733
  let maxpoint = vec3.clone(minpoint);
6734
- polygons.forEach((polygon2) => {
6735
- poly3.toPoints(polygon2).forEach((point) => {
6734
+ polygons.forEach((polygon3) => {
6735
+ poly3.toPoints(polygon3).forEach((point) => {
6736
6736
  vec3.min(minpoint, minpoint, point);
6737
6737
  vec3.max(maxpoint, maxpoint, point);
6738
6738
  });
@@ -6839,7 +6839,7 @@ var require_measureVolume = __commonJS({
6839
6839
  let volume = cache.get(geometry);
6840
6840
  if (volume) return volume;
6841
6841
  const polygons = geom32.toPolygons(geometry);
6842
- volume = polygons.reduce((volume2, polygon2) => volume2 + poly3.measureSignedVolume(polygon2), 0);
6842
+ volume = polygons.reduce((volume2, polygon3) => volume2 + poly3.measureSignedVolume(polygon3), 0);
6843
6843
  cache.set(geometry, volume);
6844
6844
  return volume;
6845
6845
  };
@@ -6944,15 +6944,15 @@ var require_measureBoundingSphere2 = __commonJS({
6944
6944
  const polygons = geom32.toPolygons(geometry);
6945
6945
  if (polygons.length > 0) {
6946
6946
  let numPoints = 0;
6947
- polygons.forEach((polygon2) => {
6948
- poly3.toPoints(polygon2).forEach((point) => {
6947
+ polygons.forEach((polygon3) => {
6948
+ poly3.toPoints(polygon3).forEach((point) => {
6949
6949
  vec3.add(centroid, centroid, point);
6950
6950
  numPoints++;
6951
6951
  });
6952
6952
  });
6953
6953
  vec3.scale(centroid, centroid, 1 / numPoints);
6954
- polygons.forEach((polygon2) => {
6955
- poly3.toPoints(polygon2).forEach((point) => {
6954
+ polygons.forEach((polygon3) => {
6955
+ poly3.toPoints(polygon3).forEach((point) => {
6956
6956
  radius = Math.max(radius, vec3.squaredDistance(centroid, point));
6957
6957
  });
6958
6958
  });
@@ -7040,8 +7040,8 @@ var require_measureCenterOfMass = __commonJS({
7040
7040
  if (polygons.length === 0) return centerOfMass;
7041
7041
  let totalVolume = 0;
7042
7042
  const vector = vec3.create();
7043
- polygons.forEach((polygon2) => {
7044
- const vertices = polygon2.vertices;
7043
+ polygons.forEach((polygon3) => {
7044
+ const vertices = polygon3.vertices;
7045
7045
  for (let i = 0; i < vertices.length - 2; i++) {
7046
7046
  vec3.cross(vector, vertices[i + 1], vertices[i + 2]);
7047
7047
  const volume = vec3.dot(vertices[0], vector) / 6;
@@ -7622,9 +7622,9 @@ var require_polyhedron = __commonJS({
7622
7622
  faces.forEach((face) => face.reverse());
7623
7623
  }
7624
7624
  const polygons = faces.map((face, findex) => {
7625
- const polygon2 = poly3.create(face.map((pindex) => points[pindex]));
7626
- if (colors && colors[findex]) polygon2.color = colors[findex];
7627
- return polygon2;
7625
+ const polygon3 = poly3.create(face.map((pindex) => points[pindex]));
7626
+ if (colors && colors[findex]) polygon3.color = colors[findex];
7627
+ return polygon3;
7628
7628
  });
7629
7629
  return geom32.create(polygons);
7630
7630
  };
@@ -7777,7 +7777,7 @@ var require_polygon = __commonJS({
7777
7777
  "node_modules/@jscad/modeling/src/primitives/polygon.js"(exports, module) {
7778
7778
  "use strict";
7779
7779
  var geom2 = require_geom2();
7780
- var polygon2 = (options) => {
7780
+ var polygon3 = (options) => {
7781
7781
  const defaults = {
7782
7782
  points: [],
7783
7783
  paths: [],
@@ -7818,7 +7818,7 @@ var require_polygon = __commonJS({
7818
7818
  }
7819
7819
  return geometry;
7820
7820
  };
7821
- module.exports = polygon2;
7821
+ module.exports = polygon3;
7822
7822
  }
7823
7823
  });
7824
7824
 
@@ -7829,7 +7829,7 @@ var require_rectangle = __commonJS({
7829
7829
  var vec2 = require_vec2();
7830
7830
  var geom2 = require_geom2();
7831
7831
  var { isNumberArray } = require_commonChecks();
7832
- var rectangle2 = (options) => {
7832
+ var rectangle3 = (options) => {
7833
7833
  const defaults = {
7834
7834
  center: [0, 0],
7835
7835
  size: [2, 2]
@@ -7849,7 +7849,7 @@ var require_rectangle = __commonJS({
7849
7849
  ];
7850
7850
  return geom2.fromPoints(points);
7851
7851
  };
7852
- module.exports = rectangle2;
7852
+ module.exports = rectangle3;
7853
7853
  }
7854
7854
  });
7855
7855
 
@@ -8127,7 +8127,7 @@ var require_roundedRectangle = __commonJS({
8127
8127
  var vec2 = require_vec2();
8128
8128
  var geom2 = require_geom2();
8129
8129
  var { isGTE, isNumberArray } = require_commonChecks();
8130
- var rectangle2 = require_rectangle();
8130
+ var rectangle3 = require_rectangle();
8131
8131
  var roundedRectangle2 = (options) => {
8132
8132
  const defaults = {
8133
8133
  center: [0, 0],
@@ -8142,7 +8142,7 @@ var require_roundedRectangle = __commonJS({
8142
8142
  if (!isGTE(roundRadius, 0)) throw new Error("roundRadius must be positive");
8143
8143
  if (!isGTE(segments, 4)) throw new Error("segments must be four or more");
8144
8144
  if (size[0] === 0 || size[1] === 0) return geom2.create();
8145
- if (roundRadius === 0) return rectangle2({ center, size });
8145
+ if (roundRadius === 0) return rectangle3({ center, size });
8146
8146
  size = size.map((v) => v / 2);
8147
8147
  if (roundRadius > size[0] - EPS || roundRadius > size[1] - EPS) throw new Error("roundRadius must be smaller than the radius of all dimensions");
8148
8148
  const cornersegments = Math.floor(segments / 4);
@@ -8198,7 +8198,7 @@ var require_sphere = __commonJS({
8198
8198
  var require_square = __commonJS({
8199
8199
  "node_modules/@jscad/modeling/src/primitives/square.js"(exports, module) {
8200
8200
  "use strict";
8201
- var rectangle2 = require_rectangle();
8201
+ var rectangle3 = require_rectangle();
8202
8202
  var { isGTE } = require_commonChecks();
8203
8203
  var square = (options) => {
8204
8204
  const defaults = {
@@ -8208,7 +8208,7 @@ var require_square = __commonJS({
8208
8208
  let { center, size } = Object.assign({}, defaults, options);
8209
8209
  if (!isGTE(size, 0)) throw new Error("size must be positive");
8210
8210
  size = [size, size];
8211
- return rectangle2({ center, size });
8211
+ return rectangle3({ center, size });
8212
8212
  };
8213
8213
  module.exports = square;
8214
8214
  }
@@ -9458,12 +9458,12 @@ var require_rotate3 = __commonJS({
9458
9458
  };
9459
9459
  var rotateX2 = (angle, ...objects) => rotate([angle, 0, 0], objects);
9460
9460
  var rotateY = (angle, ...objects) => rotate([0, angle, 0], objects);
9461
- var rotateZ2 = (angle, ...objects) => rotate([0, 0, angle], objects);
9461
+ var rotateZ3 = (angle, ...objects) => rotate([0, 0, angle], objects);
9462
9462
  module.exports = {
9463
9463
  rotate,
9464
9464
  rotateX: rotateX2,
9465
9465
  rotateY,
9466
- rotateZ: rotateZ2
9466
+ rotateZ: rotateZ3
9467
9467
  };
9468
9468
  }
9469
9469
  });
@@ -9477,7 +9477,7 @@ var require_translate2 = __commonJS({
9477
9477
  var geom2 = require_geom2();
9478
9478
  var geom32 = require_geom3();
9479
9479
  var path2 = require_path2();
9480
- var translate2 = (offset, ...objects) => {
9480
+ var translate3 = (offset, ...objects) => {
9481
9481
  if (!Array.isArray(offset)) throw new Error("offset must be an array");
9482
9482
  objects = flatten(objects);
9483
9483
  if (objects.length === 0) throw new Error("wrong number of arguments");
@@ -9492,11 +9492,11 @@ var require_translate2 = __commonJS({
9492
9492
  });
9493
9493
  return results.length === 1 ? results[0] : results;
9494
9494
  };
9495
- var translateX = (offset, ...objects) => translate2([offset, 0, 0], objects);
9496
- var translateY = (offset, ...objects) => translate2([0, offset, 0], objects);
9497
- var translateZ = (offset, ...objects) => translate2([0, 0, offset], objects);
9495
+ var translateX = (offset, ...objects) => translate3([offset, 0, 0], objects);
9496
+ var translateY = (offset, ...objects) => translate3([0, offset, 0], objects);
9497
+ var translateZ = (offset, ...objects) => translate3([0, 0, offset], objects);
9498
9498
  module.exports = {
9499
- translate: translate2,
9499
+ translate: translate3,
9500
9500
  translateX,
9501
9501
  translateY,
9502
9502
  translateZ
@@ -9511,7 +9511,7 @@ var require_torus = __commonJS({
9511
9511
  var { TAU } = require_constants();
9512
9512
  var extrudeRotate = require_extrudeRotate();
9513
9513
  var { rotate } = require_rotate3();
9514
- var { translate: translate2 } = require_translate2();
9514
+ var { translate: translate3 } = require_translate2();
9515
9515
  var circle = require_circle();
9516
9516
  var { isGT, isGTE } = require_commonChecks();
9517
9517
  var torus = (options) => {
@@ -9536,7 +9536,7 @@ var require_torus = __commonJS({
9536
9536
  if (innerRotation !== 0) {
9537
9537
  innerCircle = rotate([0, 0, innerRotation], innerCircle);
9538
9538
  }
9539
- innerCircle = translate2([outerRadius, 0], innerCircle);
9539
+ innerCircle = translate3([outerRadius, 0], innerCircle);
9540
9540
  const extrudeOptions = {
9541
9541
  startAngle,
9542
9542
  angle: outerRotation,
@@ -10074,12 +10074,12 @@ var require_fromFakePolygons = __commonJS({
10074
10074
  "use strict";
10075
10075
  var vec2 = require_vec2();
10076
10076
  var geom2 = require_geom2();
10077
- var fromFakePolygon = (epsilon, polygon2) => {
10078
- if (polygon2.vertices.length < 4) {
10077
+ var fromFakePolygon = (epsilon, polygon3) => {
10078
+ if (polygon3.vertices.length < 4) {
10079
10079
  return null;
10080
10080
  }
10081
10081
  const vert1Indices = [];
10082
- const points3D = polygon2.vertices.filter((vertex, i) => {
10082
+ const points3D = polygon3.vertices.filter((vertex, i) => {
10083
10083
  if (vertex[2] > 0) {
10084
10084
  vert1Indices.push(i);
10085
10085
  return true;
@@ -10106,7 +10106,7 @@ var require_fromFakePolygons = __commonJS({
10106
10106
  return points2D;
10107
10107
  };
10108
10108
  var fromFakePolygons = (epsilon, polygons) => {
10109
- const sides = polygons.map((polygon2) => fromFakePolygon(epsilon, polygon2)).filter((polygon2) => polygon2 !== null);
10109
+ const sides = polygons.map((polygon3) => fromFakePolygon(epsilon, polygon3)).filter((polygon3) => polygon3 !== null);
10110
10110
  return geom2.create(sides);
10111
10111
  };
10112
10112
  module.exports = fromFakePolygons;
@@ -10463,8 +10463,8 @@ var require_reTesselateCoplanarPolygons = __commonJS({
10463
10463
  prevpolygon.outpolygon.leftpoints.reverse();
10464
10464
  const points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints);
10465
10465
  const vertices3d = points2d.map((point2d) => orthobasis.to3D(point2d));
10466
- const polygon2 = poly3.fromPointsAndPlane(vertices3d, plane);
10467
- if (polygon2.vertices.length) destpolygons.push(polygon2);
10466
+ const polygon3 = poly3.fromPointsAndPlane(vertices3d, plane);
10467
+ if (polygon3.vertices.length) destpolygons.push(polygon3);
10468
10468
  }
10469
10469
  }
10470
10470
  }
@@ -10508,7 +10508,7 @@ var require_retessellate = __commonJS({
10508
10508
  if (geometry.isRetesselated) {
10509
10509
  return geometry;
10510
10510
  }
10511
- const polygons = geom32.toPolygons(geometry).map((polygon2, index) => ({ vertices: polygon2.vertices, plane: poly3.plane(polygon2), index }));
10511
+ const polygons = geom32.toPolygons(geometry).map((polygon3, index) => ({ vertices: polygon3.vertices, plane: poly3.plane(polygon3), index }));
10512
10512
  const classified = classifyPolygons(polygons);
10513
10513
  const destPolygons = [];
10514
10514
  classified.forEach((group) => {
@@ -10554,8 +10554,8 @@ var require_retessellate = __commonJS({
10554
10554
  clusters.forEach((cluster) => {
10555
10555
  if (cluster[0]) result[cluster[0].index] = cluster;
10556
10556
  });
10557
- nonCoplanar.forEach((polygon2) => {
10558
- result[polygon2.index] = polygon2;
10557
+ nonCoplanar.forEach((polygon3) => {
10558
+ result[polygon3.index] = polygon3;
10559
10559
  });
10560
10560
  return result;
10561
10561
  };
@@ -10747,15 +10747,15 @@ var require_splitPolygonByPlane = __commonJS({
10747
10747
  var vec3 = require_vec3();
10748
10748
  var poly3 = require_poly3();
10749
10749
  var splitLineSegmentByPlane = require_splitLineSegmentByPlane();
10750
- var splitPolygonByPlane = (splane, polygon2) => {
10750
+ var splitPolygonByPlane = (splane, polygon3) => {
10751
10751
  const result = {
10752
10752
  type: null,
10753
10753
  front: null,
10754
10754
  back: null
10755
10755
  };
10756
- const vertices = polygon2.vertices;
10756
+ const vertices = polygon3.vertices;
10757
10757
  const numvertices = vertices.length;
10758
- const pplane = poly3.plane(polygon2);
10758
+ const pplane = poly3.plane(polygon3);
10759
10759
  if (plane.equals(pplane, splane)) {
10760
10760
  result.type = 0;
10761
10761
  } else {
@@ -10855,10 +10855,10 @@ var require_PolygonTreeNode = __commonJS({
10855
10855
  var splitPolygonByPlane = require_splitPolygonByPlane();
10856
10856
  var PolygonTreeNode = class _PolygonTreeNode {
10857
10857
  // constructor creates the root node
10858
- constructor(parent, polygon2) {
10858
+ constructor(parent, polygon3) {
10859
10859
  this.parent = parent;
10860
10860
  this.children = [];
10861
- this.polygon = polygon2;
10861
+ this.polygon = polygon3;
10862
10862
  this.removed = false;
10863
10863
  }
10864
10864
  // fill the tree with polygons. Should be called on the root node only; child nodes must
@@ -10868,8 +10868,8 @@ var require_PolygonTreeNode = __commonJS({
10868
10868
  throw new Error("Assertion failed");
10869
10869
  }
10870
10870
  const _this = this;
10871
- polygons.forEach((polygon2) => {
10872
- _this.addChild(polygon2);
10871
+ polygons.forEach((polygon3) => {
10872
+ _this.addChild(polygon3);
10873
10873
  });
10874
10874
  }
10875
10875
  // remove a node
@@ -10946,9 +10946,9 @@ var require_PolygonTreeNode = __commonJS({
10946
10946
  }
10947
10947
  // only to be called for nodes with no children
10948
10948
  _splitByPlane(splane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes) {
10949
- const polygon2 = this.polygon;
10950
- if (polygon2) {
10951
- const bound = poly3.measureBoundingSphere(polygon2);
10949
+ const polygon3 = this.polygon;
10950
+ if (polygon3) {
10951
+ const bound = poly3.measureBoundingSphere(polygon3);
10952
10952
  const sphereradius = bound[3] + EPS;
10953
10953
  const spherecenter = bound;
10954
10954
  const d = vec3.dot(splane, spherecenter) - splane[3];
@@ -10957,7 +10957,7 @@ var require_PolygonTreeNode = __commonJS({
10957
10957
  } else if (d < -sphereradius) {
10958
10958
  backnodes.push(this);
10959
10959
  } else {
10960
- const splitresult = splitPolygonByPlane(splane, polygon2);
10960
+ const splitresult = splitPolygonByPlane(splane, polygon3);
10961
10961
  switch (splitresult.type) {
10962
10962
  case 0:
10963
10963
  coplanarfrontnodes.push(this);
@@ -10990,8 +10990,8 @@ var require_PolygonTreeNode = __commonJS({
10990
10990
  // this should be called whenever the polygon is split
10991
10991
  // a child should be created for every fragment of the split polygon
10992
10992
  // returns the newly created child
10993
- addChild(polygon2) {
10994
- const newchild = new _PolygonTreeNode(this, polygon2);
10993
+ addChild(polygon3) {
10994
+ const newchild = new _PolygonTreeNode(this, polygon3);
10995
10995
  this.children.push(newchild);
10996
10996
  return newchild;
10997
10997
  }
@@ -11241,14 +11241,14 @@ var require_scissionGeom3 = __commonJS({
11241
11241
  const pl = polygons.length;
11242
11242
  const indexesPerPoint = /* @__PURE__ */ new Map();
11243
11243
  const temp = vec3.create();
11244
- polygons.forEach((polygon2, index) => {
11245
- polygon2.vertices.forEach((point) => {
11244
+ polygons.forEach((polygon3, index) => {
11245
+ polygon3.vertices.forEach((point) => {
11246
11246
  insertMapping(indexesPerPoint, vec3.snap(temp, point, eps), index);
11247
11247
  });
11248
11248
  });
11249
- const indexesPerPolygon = polygons.map((polygon2) => {
11249
+ const indexesPerPolygon = polygons.map((polygon3) => {
11250
11250
  let indexes = [];
11251
- polygon2.vertices.forEach((point) => {
11251
+ polygon3.vertices.forEach((point) => {
11252
11252
  indexes = indexes.concat(findMapping(indexesPerPoint, vec3.snap(temp, point, eps)));
11253
11253
  });
11254
11254
  return { e: 1, d: sortNb(indexes) };
@@ -11694,19 +11694,19 @@ var require_extrudePolygon = __commonJS({
11694
11694
  polygon1 = poly3.invert(polygon1);
11695
11695
  }
11696
11696
  const newpolygons = [polygon1];
11697
- const polygon2 = poly3.transform(mat4.fromTranslation(mat4.create(), offsetvector), polygon1);
11697
+ const polygon22 = poly3.transform(mat4.fromTranslation(mat4.create(), offsetvector), polygon1);
11698
11698
  const numvertices = polygon1.vertices.length;
11699
11699
  for (let i = 0; i < numvertices; i++) {
11700
11700
  const nexti = i < numvertices - 1 ? i + 1 : 0;
11701
11701
  const sideFacePolygon = poly3.create([
11702
11702
  polygon1.vertices[i],
11703
- polygon2.vertices[i],
11704
- polygon2.vertices[nexti],
11703
+ polygon22.vertices[i],
11704
+ polygon22.vertices[nexti],
11705
11705
  polygon1.vertices[nexti]
11706
11706
  ]);
11707
11707
  newpolygons.push(sideFacePolygon);
11708
11708
  }
11709
- newpolygons.push(poly3.invert(polygon2));
11709
+ newpolygons.push(poly3.invert(polygon22));
11710
11710
  return geom32.create(newpolygons);
11711
11711
  };
11712
11712
  module.exports = extrudePolygon;
@@ -11767,17 +11767,17 @@ var require_expandShell = __commonJS({
11767
11767
  const v1 = vec3.create();
11768
11768
  const v2 = vec3.create();
11769
11769
  const polygons = geom32.toPolygons(geometry);
11770
- polygons.forEach((polygon2, index) => {
11771
- const extrudevector = vec3.scale(vec3.create(), poly3.plane(polygon2), 2 * delta);
11772
- const translatedpolygon = poly3.transform(mat4.fromTranslation(mat4.create(), vec3.scale(vec3.create(), extrudevector, -0.5)), polygon2);
11770
+ polygons.forEach((polygon3, index) => {
11771
+ const extrudevector = vec3.scale(vec3.create(), poly3.plane(polygon3), 2 * delta);
11772
+ const translatedpolygon = poly3.transform(mat4.fromTranslation(mat4.create(), vec3.scale(vec3.create(), extrudevector, -0.5)), polygon3);
11773
11773
  const extrudedface = extrudePolygon(extrudevector, translatedpolygon);
11774
11774
  result = unionGeom3Sub(result, extrudedface);
11775
- const vertices = polygon2.vertices;
11775
+ const vertices = polygon3.vertices;
11776
11776
  for (let i = 0; i < vertices.length; i++) {
11777
- mapPlaneToVertex(vertices2planes, vertices[i], poly3.plane(polygon2));
11777
+ mapPlaneToVertex(vertices2planes, vertices[i], poly3.plane(polygon3));
11778
11778
  const j = (i + 1) % vertices.length;
11779
11779
  const edge = [vertices[i], vertices[j]];
11780
- mapPlaneToEdge(edges2planes, edge, poly3.plane(polygon2));
11780
+ mapPlaneToEdge(edges2planes, edge, poly3.plane(polygon3));
11781
11781
  }
11782
11782
  });
11783
11783
  edges2planes.forEach((item) => {
@@ -11831,8 +11831,8 @@ var require_expandShell = __commonJS({
11831
11831
  startfacevertices.push(p1);
11832
11832
  endfacevertices.push(p2);
11833
11833
  const points = [prevp2, p2, p1, prevp1];
11834
- const polygon2 = poly3.create(points);
11835
- polygons2.push(polygon2);
11834
+ const polygon3 = poly3.create(points);
11835
+ polygons2.push(polygon3);
11836
11836
  }
11837
11837
  prevp1 = p1;
11838
11838
  prevp2 = p2;
@@ -12034,7 +12034,7 @@ var require_offsetGeom2 = __commonJS({
12034
12034
  }
12035
12035
  const outlines = geom2.toOutlines(geometry);
12036
12036
  const newoutlines = outlines.map((outline) => {
12037
- const level = outlines.reduce((acc, polygon2) => acc + poly2.arePointsInside(outline, poly2.create(polygon2)), 0);
12037
+ const level = outlines.reduce((acc, polygon3) => acc + poly2.arePointsInside(outline, poly2.create(polygon3)), 0);
12038
12038
  const outside = level % 2 === 0;
12039
12039
  options = {
12040
12040
  delta: outside ? delta : -delta,
@@ -12182,7 +12182,7 @@ var require_extrudeLinear = __commonJS({
12182
12182
  var path2 = require_path2();
12183
12183
  var extrudeLinearGeom2 = require_extrudeLinearGeom2();
12184
12184
  var extrudeLinearPath2 = require_extrudeLinearPath2();
12185
- var extrudeLinear2 = (options, ...objects) => {
12185
+ var extrudeLinear3 = (options, ...objects) => {
12186
12186
  const defaults = {
12187
12187
  height: 1,
12188
12188
  twistAngle: 0,
@@ -12200,7 +12200,7 @@ var require_extrudeLinear = __commonJS({
12200
12200
  });
12201
12201
  return results.length === 1 ? results[0] : results;
12202
12202
  };
12203
- module.exports = extrudeLinear2;
12203
+ module.exports = extrudeLinear3;
12204
12204
  }
12205
12205
  });
12206
12206
 
@@ -12648,24 +12648,24 @@ var require_snapPolygons = __commonJS({
12648
12648
  "use strict";
12649
12649
  var vec3 = require_vec3();
12650
12650
  var poly3 = require_poly3();
12651
- var isValidPoly3 = (epsilon, polygon2) => {
12652
- const area = Math.abs(poly3.measureArea(polygon2));
12651
+ var isValidPoly3 = (epsilon, polygon3) => {
12652
+ const area = Math.abs(poly3.measureArea(polygon3));
12653
12653
  return Number.isFinite(area) && area > epsilon;
12654
12654
  };
12655
12655
  var snapPolygons = (epsilon, polygons) => {
12656
- let newpolygons = polygons.map((polygon2) => {
12657
- const snapvertices = polygon2.vertices.map((vertice) => vec3.snap(vec3.create(), vertice, epsilon));
12656
+ let newpolygons = polygons.map((polygon3) => {
12657
+ const snapvertices = polygon3.vertices.map((vertice) => vec3.snap(vec3.create(), vertice, epsilon));
12658
12658
  const newvertices = [];
12659
12659
  for (let i = 0; i < snapvertices.length; i++) {
12660
12660
  const j = (i + 1) % snapvertices.length;
12661
12661
  if (!vec3.equals(snapvertices[i], snapvertices[j])) newvertices.push(snapvertices[i]);
12662
12662
  }
12663
12663
  const newpolygon = poly3.create(newvertices);
12664
- if (polygon2.color) newpolygon.color = polygon2.color;
12664
+ if (polygon3.color) newpolygon.color = polygon3.color;
12665
12665
  return newpolygon;
12666
12666
  });
12667
12667
  const epsilonArea = epsilon * epsilon * Math.sqrt(3) / 4;
12668
- newpolygons = newpolygons.filter((polygon2) => isValidPoly3(epsilonArea, polygon2));
12668
+ newpolygons = newpolygons.filter((polygon3) => isValidPoly3(epsilonArea, polygon3));
12669
12669
  return newpolygons;
12670
12670
  };
12671
12671
  module.exports = snapPolygons;
@@ -12679,8 +12679,8 @@ var require_mergePolygons = __commonJS({
12679
12679
  var aboutEqualNormals = require_aboutEqualNormals();
12680
12680
  var vec3 = require_vec3();
12681
12681
  var poly3 = require_poly3();
12682
- var createEdges = (polygon2) => {
12683
- const points = poly3.toPoints(polygon2);
12682
+ var createEdges = (polygon3) => {
12683
+ const points = poly3.toPoints(polygon3);
12684
12684
  const edges = [];
12685
12685
  for (let i = 0; i < points.length; i++) {
12686
12686
  const j = (i + 1) % points.length;
@@ -12729,7 +12729,7 @@ var require_mergePolygons = __commonJS({
12729
12729
  return vec3.dot(d0, normal);
12730
12730
  };
12731
12731
  var createPolygonAnd = (edge) => {
12732
- let polygon2;
12732
+ let polygon3;
12733
12733
  const points = [];
12734
12734
  while (edge.next) {
12735
12735
  const next = edge.next;
@@ -12740,8 +12740,8 @@ var require_mergePolygons = __commonJS({
12740
12740
  edge.prev = null;
12741
12741
  edge = next;
12742
12742
  }
12743
- if (points.length > 0) polygon2 = poly3.create(points);
12744
- return polygon2;
12743
+ if (points.length > 0) polygon3 = poly3.create(points);
12744
+ return polygon3;
12745
12745
  };
12746
12746
  var mergeCoplanarPolygons = (sourcepolygons) => {
12747
12747
  if (sourcepolygons.length < 2) return sourcepolygons;
@@ -12749,8 +12749,8 @@ var require_mergePolygons = __commonJS({
12749
12749
  const polygons = sourcepolygons.slice();
12750
12750
  const edgeList = /* @__PURE__ */ new Map();
12751
12751
  while (polygons.length > 0) {
12752
- const polygon2 = polygons.shift();
12753
- const edges = createEdges(polygon2);
12752
+ const polygon3 = polygons.shift();
12753
+ const edges = createEdges(polygon3);
12754
12754
  for (let i = 0; i < edges.length; i++) {
12755
12755
  const current = edges[i];
12756
12756
  const opposite = findOppositeEdge(edgeList, current);
@@ -12806,8 +12806,8 @@ var require_mergePolygons = __commonJS({
12806
12806
  }
12807
12807
  const destpolygons = [];
12808
12808
  edgeList.forEach((edge) => {
12809
- const polygon2 = createPolygonAnd(edge);
12810
- if (polygon2) destpolygons.push(polygon2);
12809
+ const polygon3 = createPolygonAnd(edge);
12810
+ if (polygon3) destpolygons.push(polygon3);
12811
12811
  });
12812
12812
  edgeList.clear();
12813
12813
  return destpolygons;
@@ -12820,13 +12820,13 @@ var require_mergePolygons = __commonJS({
12820
12820
  };
12821
12821
  var mergePolygons = (epsilon, polygons) => {
12822
12822
  const polygonsPerPlane = [];
12823
- polygons.forEach((polygon2) => {
12824
- const mapping = polygonsPerPlane.find((element) => coplanar(element[0], poly3.plane(polygon2)));
12823
+ polygons.forEach((polygon3) => {
12824
+ const mapping = polygonsPerPlane.find((element) => coplanar(element[0], poly3.plane(polygon3)));
12825
12825
  if (mapping) {
12826
12826
  const polygons2 = mapping[1];
12827
- polygons2.push(polygon2);
12827
+ polygons2.push(polygon3);
12828
12828
  } else {
12829
- polygonsPerPlane.push([poly3.plane(polygon2), [polygon2]]);
12829
+ polygonsPerPlane.push([poly3.plane(polygon3), [polygon3]]);
12830
12830
  }
12831
12831
  });
12832
12832
  let destpolygons = [];
@@ -12922,15 +12922,15 @@ var require_insertTjunctions = __commonJS({
12922
12922
  var insertTjunctions = (polygons) => {
12923
12923
  const sidemap = /* @__PURE__ */ new Map();
12924
12924
  for (let polygonindex = 0; polygonindex < polygons.length; polygonindex++) {
12925
- const polygon2 = polygons[polygonindex];
12926
- const numvertices = polygon2.vertices.length;
12925
+ const polygon3 = polygons[polygonindex];
12926
+ const numvertices = polygon3.vertices.length;
12927
12927
  if (numvertices >= 3) {
12928
- let vertex = polygon2.vertices[0];
12928
+ let vertex = polygon3.vertices[0];
12929
12929
  let vertextag = getTag(vertex);
12930
12930
  for (let vertexindex = 0; vertexindex < numvertices; vertexindex++) {
12931
12931
  let nextvertexindex = vertexindex + 1;
12932
12932
  if (nextvertexindex === numvertices) nextvertexindex = 0;
12933
- const nextvertex = polygon2.vertices[nextvertexindex];
12933
+ const nextvertex = polygon3.vertices[nextvertexindex];
12934
12934
  const nextvertextag = getTag(nextvertex);
12935
12935
  const sidetag = `${vertextag}/${nextvertextag}`;
12936
12936
  const reversesidetag = `${nextvertextag}/${vertextag}`;
@@ -13038,17 +13038,17 @@ var require_insertTjunctions = __commonJS({
13038
13038
  const distancesquared = vec3.squaredDistance(closestpoint, endpos);
13039
13039
  if (distancesquared < constants.EPS * constants.EPS) {
13040
13040
  const polygonindex = matchingside.polygonindex;
13041
- const polygon2 = newpolygons[polygonindex];
13041
+ const polygon3 = newpolygons[polygonindex];
13042
13042
  const insertionvertextag = getTag(matchingside.vertex1);
13043
13043
  let insertionvertextagindex = -1;
13044
- for (let i = 0; i < polygon2.vertices.length; i++) {
13045
- if (getTag(polygon2.vertices[i]) === insertionvertextag) {
13044
+ for (let i = 0; i < polygon3.vertices.length; i++) {
13045
+ if (getTag(polygon3.vertices[i]) === insertionvertextag) {
13046
13046
  insertionvertextagindex = i;
13047
13047
  break;
13048
13048
  }
13049
13049
  }
13050
13050
  if (assert && insertionvertextagindex < 0) throw new Error("assert failed");
13051
- const newvertices = polygon2.vertices.slice(0);
13051
+ const newvertices = polygon3.vertices.slice(0);
13052
13052
  newvertices.splice(insertionvertextagindex, 0, endvertex);
13053
13053
  const newpolygon = poly3.create(newvertices);
13054
13054
  newpolygons[polygonindex] = newpolygon;
@@ -13088,35 +13088,35 @@ var require_triangulatePolygons = __commonJS({
13088
13088
  "use strict";
13089
13089
  var vec3 = require_vec3();
13090
13090
  var poly3 = require_poly3();
13091
- var triangulatePolygon = (epsilon, polygon2, triangles) => {
13092
- const nv = polygon2.vertices.length;
13091
+ var triangulatePolygon = (epsilon, polygon3, triangles) => {
13092
+ const nv = polygon3.vertices.length;
13093
13093
  if (nv > 3) {
13094
13094
  if (nv > 4) {
13095
13095
  const midpoint = [0, 0, 0];
13096
- polygon2.vertices.forEach((vertice) => vec3.add(midpoint, midpoint, vertice));
13096
+ polygon3.vertices.forEach((vertice) => vec3.add(midpoint, midpoint, vertice));
13097
13097
  vec3.snap(midpoint, vec3.divide(midpoint, midpoint, [nv, nv, nv]), epsilon);
13098
13098
  for (let i = 0; i < nv; i++) {
13099
- const poly = poly3.create([midpoint, polygon2.vertices[i], polygon2.vertices[(i + 1) % nv]]);
13100
- if (polygon2.color) poly.color = polygon2.color;
13099
+ const poly = poly3.create([midpoint, polygon3.vertices[i], polygon3.vertices[(i + 1) % nv]]);
13100
+ if (polygon3.color) poly.color = polygon3.color;
13101
13101
  triangles.push(poly);
13102
13102
  }
13103
13103
  return;
13104
13104
  }
13105
- const poly0 = poly3.create([polygon2.vertices[0], polygon2.vertices[1], polygon2.vertices[2]]);
13106
- const poly1 = poly3.create([polygon2.vertices[0], polygon2.vertices[2], polygon2.vertices[3]]);
13107
- if (polygon2.color) {
13108
- poly0.color = polygon2.color;
13109
- poly1.color = polygon2.color;
13105
+ const poly0 = poly3.create([polygon3.vertices[0], polygon3.vertices[1], polygon3.vertices[2]]);
13106
+ const poly1 = poly3.create([polygon3.vertices[0], polygon3.vertices[2], polygon3.vertices[3]]);
13107
+ if (polygon3.color) {
13108
+ poly0.color = polygon3.color;
13109
+ poly1.color = polygon3.color;
13110
13110
  }
13111
13111
  triangles.push(poly0, poly1);
13112
13112
  return;
13113
13113
  }
13114
- triangles.push(polygon2);
13114
+ triangles.push(polygon3);
13115
13115
  };
13116
13116
  var triangulatePolygons = (epsilon, polygons) => {
13117
13117
  const triangles = [];
13118
- polygons.forEach((polygon2) => {
13119
- triangulatePolygon(epsilon, polygon2, triangles);
13118
+ polygons.forEach((polygon3) => {
13119
+ triangulatePolygon(epsilon, polygon3, triangles);
13120
13120
  });
13121
13121
  return triangles;
13122
13122
  };
@@ -13256,7 +13256,7 @@ var require_align = __commonJS({
13256
13256
  var flatten = require_flatten();
13257
13257
  var padArrayToLength = require_padArrayToLength();
13258
13258
  var measureAggregateBoundingBox = require_measureAggregateBoundingBox();
13259
- var { translate: translate2 } = require_translate2();
13259
+ var { translate: translate3 } = require_translate2();
13260
13260
  var validateOptions = (options) => {
13261
13261
  if (!Array.isArray(options.modes) || options.modes.length > 3) throw new Error("align(): modes must be an array of length <= 3");
13262
13262
  options.modes = padArrayToLength(options.modes, "none", 3);
@@ -13293,7 +13293,7 @@ var require_align = __commonJS({
13293
13293
  translation[i] = relativeTo[i] - bounds[0][i];
13294
13294
  }
13295
13295
  }
13296
- return translate2(translation, geometry);
13296
+ return translate3(translation, geometry);
13297
13297
  };
13298
13298
  var align = (options, ...geometries) => {
13299
13299
  const defaults = {
@@ -13330,7 +13330,7 @@ var require_center = __commonJS({
13330
13330
  var geom32 = require_geom3();
13331
13331
  var path2 = require_path2();
13332
13332
  var measureBoundingBox2 = require_measureBoundingBox2();
13333
- var { translate: translate2 } = require_translate2();
13333
+ var { translate: translate3 } = require_translate2();
13334
13334
  var centerGeometry = (options, object) => {
13335
13335
  const defaults = {
13336
13336
  axes: [true, true, true],
@@ -13342,7 +13342,7 @@ var require_center = __commonJS({
13342
13342
  if (axes[0]) offset[0] = relativeTo[0] - (bounds[0][0] + (bounds[1][0] - bounds[0][0]) / 2);
13343
13343
  if (axes[1]) offset[1] = relativeTo[1] - (bounds[0][1] + (bounds[1][1] - bounds[0][1]) / 2);
13344
13344
  if (axes[2]) offset[2] = relativeTo[2] - (bounds[0][2] + (bounds[1][2] - bounds[0][2]) / 2);
13345
- return translate2(offset, object);
13345
+ return translate3(offset, object);
13346
13346
  };
13347
13347
  var center = (options, ...objects) => {
13348
13348
  const defaults = {
@@ -14645,18 +14645,20 @@ function scaleMesh(mesh, scale) {
14645
14645
  }
14646
14646
 
14647
14647
  // lib/utils/pcb-board-geometry.ts
14648
- var import_extrusions = __toESM(require_extrusions(), 1);
14649
- var import_primitives = __toESM(require_primitives(), 1);
14650
- var import_transforms = __toESM(require_transforms(), 1);
14648
+ var import_extrusions2 = __toESM(require_extrusions(), 1);
14649
+ var import_primitives2 = __toESM(require_primitives(), 1);
14650
+ var import_transforms2 = __toESM(require_transforms(), 1);
14651
14651
  var import_booleans = __toESM(require_booleans(), 1);
14652
14652
  var geom3 = __toESM(require_geom3(), 1);
14653
14653
  var import_measureBoundingBox = __toESM(require_measureBoundingBox2(), 1);
14654
+
14655
+ // lib/utils/pcb-board-cutouts.ts
14656
+ var import_extrusions = __toESM(require_extrusions(), 1);
14657
+ var import_primitives = __toESM(require_primitives(), 1);
14658
+ var import_transforms = __toESM(require_transforms(), 1);
14654
14659
  var DEFAULT_SEGMENTS = 64;
14655
- var RADIUS_EPSILON = 1e-4;
14656
- var toVec2 = (point, center) => [
14657
- point.x - center.x,
14658
- point.y - center.y
14659
- ];
14660
+ var toBoardSpaceVec2 = (point, center) => [point.x - center.x, -(point.y - center.y)];
14661
+ var isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
14660
14662
  var arePointsClockwise = (points) => {
14661
14663
  let area = 0;
14662
14664
  for (let i = 0; i < points.length; i++) {
@@ -14667,6 +14669,119 @@ var arePointsClockwise = (points) => {
14667
14669
  const signedArea = area / 2;
14668
14670
  return signedArea <= 0;
14669
14671
  };
14672
+ var createCircularHole = (x, y, radius, thickness) => (0, import_primitives.cylinder)({
14673
+ center: [x, y, 0],
14674
+ height: thickness + 1,
14675
+ radius,
14676
+ segments: DEFAULT_SEGMENTS
14677
+ });
14678
+ var createCutoutGeoms = (boardCenter, thickness, cutouts = []) => {
14679
+ const geoms = [];
14680
+ for (const cutout of cutouts) {
14681
+ if (!cutout) continue;
14682
+ switch (cutout.shape) {
14683
+ case "rect": {
14684
+ const { center } = cutout;
14685
+ if (!center || !isFiniteNumber(center.x) || !isFiniteNumber(center.y)) {
14686
+ continue;
14687
+ }
14688
+ const width = typeof cutout.width === "number" && Number.isFinite(cutout.width) ? cutout.width : void 0;
14689
+ const height = typeof cutout.height === "number" && Number.isFinite(cutout.height) ? cutout.height : void 0;
14690
+ if (!width || !height) continue;
14691
+ const relX = center.x - boardCenter.x;
14692
+ const relY = -(center.y - boardCenter.y);
14693
+ const rect2d = (0, import_primitives.rectangle)({ size: [width, height] });
14694
+ let geom = (0, import_extrusions.extrudeLinear)({ height: thickness + 1 }, rect2d);
14695
+ geom = (0, import_transforms.translate)([0, 0, -(thickness + 1) / 2], geom);
14696
+ let rotationRad = 0;
14697
+ const { rotation } = cutout;
14698
+ if (typeof rotation === "number" && Number.isFinite(rotation)) {
14699
+ rotationRad = rotation * Math.PI / 180;
14700
+ } else if (rotation && typeof rotation === "object") {
14701
+ const record = rotation;
14702
+ const degreeCandidate = [
14703
+ record.deg,
14704
+ record.degs,
14705
+ record.degree,
14706
+ record.degrees,
14707
+ record.ccw,
14708
+ record.ccw_degrees,
14709
+ record.ccw_degree
14710
+ ].find(
14711
+ (value) => typeof value === "number" && Number.isFinite(value)
14712
+ );
14713
+ if (degreeCandidate !== void 0) {
14714
+ rotationRad = degreeCandidate * Math.PI / 180;
14715
+ } else {
14716
+ const radCandidate = [
14717
+ record.rad,
14718
+ record.rads,
14719
+ record.radian,
14720
+ record.radians,
14721
+ record.ccw_radians
14722
+ ].find(
14723
+ (value) => typeof value === "number" && Number.isFinite(value)
14724
+ );
14725
+ if (radCandidate !== void 0) {
14726
+ rotationRad = radCandidate;
14727
+ }
14728
+ }
14729
+ }
14730
+ if (rotationRad) {
14731
+ geom = (0, import_transforms.rotateZ)(-rotationRad, geom);
14732
+ }
14733
+ geoms.push((0, import_transforms.translate)([relX, relY, 0], geom));
14734
+ break;
14735
+ }
14736
+ case "circle": {
14737
+ const { center } = cutout;
14738
+ if (!center || !isFiniteNumber(center.x) || !isFiniteNumber(center.y)) {
14739
+ continue;
14740
+ }
14741
+ const radius = (() => {
14742
+ if (typeof cutout.radius === "number" && Number.isFinite(cutout.radius)) {
14743
+ return cutout.radius;
14744
+ }
14745
+ if ("diameter" in cutout && typeof cutout.diameter === "number" && Number.isFinite(cutout.diameter)) {
14746
+ return cutout.diameter / 2;
14747
+ }
14748
+ return void 0;
14749
+ })();
14750
+ if (!radius) continue;
14751
+ const relX = center.x - boardCenter.x;
14752
+ const relY = -(center.y - boardCenter.y);
14753
+ geoms.push(createCircularHole(relX, relY, radius, thickness));
14754
+ break;
14755
+ }
14756
+ case "polygon": {
14757
+ const { points } = cutout;
14758
+ if (!Array.isArray(points) || points.length < 3) continue;
14759
+ let polygonPoints = points.filter(
14760
+ (point) => point !== void 0 && isFiniteNumber(point.x) && isFiniteNumber(point.y)
14761
+ ).map((point) => toBoardSpaceVec2(point, boardCenter));
14762
+ if (polygonPoints.length < 3) continue;
14763
+ if (arePointsClockwise(polygonPoints)) {
14764
+ polygonPoints = polygonPoints.slice().reverse();
14765
+ }
14766
+ const polygon2d = (0, import_primitives.polygon)({ points: polygonPoints });
14767
+ let geom = (0, import_extrusions.extrudeLinear)({ height: thickness + 1 }, polygon2d);
14768
+ geom = (0, import_transforms.translate)([0, 0, -(thickness + 1) / 2], geom);
14769
+ geoms.push(geom);
14770
+ break;
14771
+ }
14772
+ default:
14773
+ break;
14774
+ }
14775
+ }
14776
+ return geoms;
14777
+ };
14778
+
14779
+ // lib/utils/pcb-board-geometry.ts
14780
+ var RADIUS_EPSILON = 1e-4;
14781
+ var toVec2 = (point, center) => [
14782
+ point.x - center.x,
14783
+ point.y - center.y
14784
+ ];
14670
14785
  var getNumberProperty = (obj, key) => {
14671
14786
  const value = obj[key];
14672
14787
  return typeof value === "number" ? value : void 0;
@@ -14677,37 +14792,31 @@ var createBoardOutlineGeom = (board, center, thickness) => {
14677
14792
  if (arePointsClockwise(outlinePoints)) {
14678
14793
  outlinePoints = outlinePoints.slice().reverse();
14679
14794
  }
14680
- const shape2d = (0, import_primitives.polygon)({ points: outlinePoints });
14681
- let geom2 = (0, import_extrusions.extrudeLinear)({ height: thickness }, shape2d);
14682
- geom2 = (0, import_transforms.translate)([0, 0, -thickness / 2], geom2);
14795
+ const shape2d = (0, import_primitives2.polygon)({ points: outlinePoints });
14796
+ let geom2 = (0, import_extrusions2.extrudeLinear)({ height: thickness }, shape2d);
14797
+ geom2 = (0, import_transforms2.translate)([0, 0, -thickness / 2], geom2);
14683
14798
  return geom2;
14684
14799
  }
14685
- const baseRect = (0, import_primitives.rectangle)({ size: [board.width, board.height] });
14686
- let geom = (0, import_extrusions.extrudeLinear)({ height: thickness }, baseRect);
14687
- geom = (0, import_transforms.translate)([0, 0, -thickness / 2], geom);
14800
+ const baseRect = (0, import_primitives2.rectangle)({ size: [board.width, board.height] });
14801
+ let geom = (0, import_extrusions2.extrudeLinear)({ height: thickness }, baseRect);
14802
+ geom = (0, import_transforms2.translate)([0, 0, -thickness / 2], geom);
14688
14803
  return geom;
14689
14804
  };
14690
- var createCircularHole = (x, y, radius, thickness) => (0, import_primitives.cylinder)({
14691
- center: [x, y, 0],
14692
- height: thickness + 1,
14693
- radius,
14694
- segments: DEFAULT_SEGMENTS
14695
- });
14696
14805
  var createPillHole = (x, y, width, height, thickness, rotate) => {
14697
14806
  const minDimension = Math.min(width, height);
14698
14807
  const maxAllowedRadius = Math.max(0, minDimension / 2 - RADIUS_EPSILON);
14699
14808
  const roundRadius = maxAllowedRadius <= 0 ? 0 : Math.min(height / 2, maxAllowedRadius);
14700
- const hole2d = (0, import_primitives.roundedRectangle)({
14809
+ const hole2d = (0, import_primitives2.roundedRectangle)({
14701
14810
  size: [width, height],
14702
14811
  roundRadius,
14703
14812
  segments: DEFAULT_SEGMENTS
14704
14813
  });
14705
- let hole3d = (0, import_extrusions.extrudeLinear)({ height: thickness + 1 }, hole2d);
14706
- hole3d = (0, import_transforms.translate)([0, 0, -(thickness + 1) / 2], hole3d);
14814
+ let hole3d = (0, import_extrusions2.extrudeLinear)({ height: thickness + 1 }, hole2d);
14815
+ hole3d = (0, import_transforms2.translate)([0, 0, -(thickness + 1) / 2], hole3d);
14707
14816
  if (rotate) {
14708
- hole3d = (0, import_transforms.rotateZ)(Math.PI / 2, hole3d);
14817
+ hole3d = (0, import_transforms2.rotateZ)(Math.PI / 2, hole3d);
14709
14818
  }
14710
- return (0, import_transforms.translate)([x, y, 0], hole3d);
14819
+ return (0, import_transforms2.translate)([x, y, 0], hole3d);
14711
14820
  };
14712
14821
  var createHoleGeoms = (boardCenter, thickness, holes = [], platedHoles = []) => {
14713
14822
  const holeGeoms = [];
@@ -14743,17 +14852,17 @@ var createHoleGeoms = (boardCenter, thickness, holes = [], platedHoles = []) =>
14743
14852
  const minDimension = Math.min(holeWidth, holeHeight);
14744
14853
  const maxAllowedRadius = Math.max(0, minDimension / 2 - RADIUS_EPSILON);
14745
14854
  const roundRadius = maxAllowedRadius <= 0 ? 0 : Math.min(holeHeight / 2, maxAllowedRadius);
14746
- const hole2d = (0, import_primitives.roundedRectangle)({
14855
+ const hole2d = (0, import_primitives2.roundedRectangle)({
14747
14856
  size: [holeWidth, holeHeight],
14748
14857
  roundRadius,
14749
14858
  segments: DEFAULT_SEGMENTS
14750
14859
  });
14751
- let hole3d = (0, import_extrusions.extrudeLinear)({ height: thickness + 1 }, hole2d);
14752
- hole3d = (0, import_transforms.translate)([0, 0, -(thickness + 1) / 2], hole3d);
14860
+ let hole3d = (0, import_extrusions2.extrudeLinear)({ height: thickness + 1 }, hole2d);
14861
+ hole3d = (0, import_transforms2.translate)([0, 0, -(thickness + 1) / 2], hole3d);
14753
14862
  if (rotationRad !== 0) {
14754
- hole3d = (0, import_transforms.rotateZ)(rotationRad, hole3d);
14863
+ hole3d = (0, import_transforms2.rotateZ)(rotationRad, hole3d);
14755
14864
  }
14756
- hole3d = (0, import_transforms.translate)([relX, relY, 0], hole3d);
14865
+ hole3d = (0, import_transforms2.translate)([relX, relY, 0], hole3d);
14757
14866
  holeGeoms.push(hole3d);
14758
14867
  continue;
14759
14868
  }
@@ -14835,14 +14944,16 @@ var createBoundingBox = (bbox) => {
14835
14944
  };
14836
14945
  };
14837
14946
  var createBoardMesh = (board, options) => {
14838
- const { thickness, holes = [], platedHoles = [] } = options;
14947
+ const { thickness, holes = [], platedHoles = [], cutouts = [] } = options;
14839
14948
  const center = board.center ?? { x: 0, y: 0 };
14840
14949
  let boardGeom = createBoardOutlineGeom(board, center, thickness);
14841
14950
  const holeGeoms = createHoleGeoms(center, thickness, holes, platedHoles);
14842
- if (holeGeoms.length > 0) {
14843
- boardGeom = (0, import_booleans.subtract)(boardGeom, ...holeGeoms);
14951
+ const cutoutGeoms = createCutoutGeoms(center, thickness, cutouts);
14952
+ const subtractGeoms = [...holeGeoms, ...cutoutGeoms];
14953
+ if (subtractGeoms.length > 0) {
14954
+ boardGeom = (0, import_booleans.subtract)(boardGeom, ...subtractGeoms);
14844
14955
  }
14845
- boardGeom = (0, import_transforms.rotateX)(-Math.PI / 2, boardGeom);
14956
+ boardGeom = (0, import_transforms2.rotateX)(-Math.PI / 2, boardGeom);
14846
14957
  const polygons = geom3.toPolygons(boardGeom);
14847
14958
  const triangles = geom3ToTriangles(boardGeom, polygons);
14848
14959
  const bboxValues = (0, import_measureBoundingBox.default)(boardGeom);
@@ -14881,10 +14992,16 @@ async function convertCircuitJsonTo3D(circuitJson, options = {}) {
14881
14992
  if (pcbBoard) {
14882
14993
  const pcbHoles = db.pcb_hole?.list?.() ?? [];
14883
14994
  const pcbPlatedHoles = db.pcb_plated_hole?.list?.() ?? [];
14995
+ const pcbCutouts = db.pcb_cutout?.list?.() ?? [];
14996
+ const boardCutouts = pcbCutouts.filter((cutout) => {
14997
+ const cutoutBoardId = cutout.pcb_board_id;
14998
+ return !cutoutBoardId || cutoutBoardId === pcbBoard.pcb_board_id;
14999
+ });
14884
15000
  const boardMesh = createBoardMesh(pcbBoard, {
14885
15001
  thickness: effectiveBoardThickness,
14886
15002
  holes: pcbHoles,
14887
- platedHoles: pcbPlatedHoles
15003
+ platedHoles: pcbPlatedHoles,
15004
+ cutouts: boardCutouts
14888
15005
  });
14889
15006
  const meshWidth = boardMesh.boundingBox.max.x - boardMesh.boundingBox.min.x;
14890
15007
  const meshHeight = boardMesh.boundingBox.max.z - boardMesh.boundingBox.min.z;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "circuit-json-to-gltf",
3
3
  "main": "dist/index.js",
4
4
  "type": "module",
5
- "version": "0.0.33",
5
+ "version": "0.0.34",
6
6
  "scripts": {
7
7
  "test": "bun test tests/",
8
8
  "format": "biome format --write .",