circuit-json-to-gltf 0.0.35 → 0.0.37
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/index.d.ts +49 -1
- package/dist/index.js +366 -302
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -740,7 +740,7 @@ var require_orthogonal = __commonJS({
|
|
|
740
740
|
var require_rotateX = __commonJS({
|
|
741
741
|
"node_modules/@jscad/modeling/src/maths/vec3/rotateX.js"(exports, module) {
|
|
742
742
|
"use strict";
|
|
743
|
-
var
|
|
743
|
+
var rotateX3 = (out, vector, origin, radians) => {
|
|
744
744
|
const p = [];
|
|
745
745
|
const r = [];
|
|
746
746
|
p[0] = vector[0] - origin[0];
|
|
@@ -754,7 +754,7 @@ var require_rotateX = __commonJS({
|
|
|
754
754
|
out[2] = r[2] + origin[2];
|
|
755
755
|
return out;
|
|
756
756
|
};
|
|
757
|
-
module.exports =
|
|
757
|
+
module.exports = rotateX3;
|
|
758
758
|
}
|
|
759
759
|
});
|
|
760
760
|
|
|
@@ -1258,7 +1258,7 @@ var require_rotateX2 = __commonJS({
|
|
|
1258
1258
|
"node_modules/@jscad/modeling/src/maths/mat4/rotateX.js"(exports, module) {
|
|
1259
1259
|
"use strict";
|
|
1260
1260
|
var { sin, cos } = require_trigonometry();
|
|
1261
|
-
var
|
|
1261
|
+
var rotateX3 = (out, matrix, radians) => {
|
|
1262
1262
|
const s = sin(radians);
|
|
1263
1263
|
const c = cos(radians);
|
|
1264
1264
|
const a10 = matrix[4];
|
|
@@ -1289,7 +1289,7 @@ var require_rotateX2 = __commonJS({
|
|
|
1289
1289
|
out[11] = a23 * c - a13 * s;
|
|
1290
1290
|
return out;
|
|
1291
1291
|
};
|
|
1292
|
-
module.exports =
|
|
1292
|
+
module.exports = rotateX3;
|
|
1293
1293
|
}
|
|
1294
1294
|
});
|
|
1295
1295
|
|
|
@@ -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
|
|
1446
|
+
var translate4 = (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 =
|
|
1499
|
+
module.exports = translate4;
|
|
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 = (
|
|
3837
|
-
const vertices =
|
|
3836
|
+
var invert = (polygon4) => {
|
|
3837
|
+
const vertices = polygon4.vertices.slice().reverse();
|
|
3838
3838
|
const inverted = create(vertices);
|
|
3839
|
-
if (
|
|
3840
|
-
inverted.plane = plane.flip(plane.create(),
|
|
3839
|
+
if (polygon4.plane) {
|
|
3840
|
+
inverted.plane = plane.flip(plane.create(), polygon4.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 = (
|
|
3872
|
+
var isConvex = (polygon4) => areVerticesConvex(polygon4.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 = (
|
|
3909
|
-
if (!
|
|
3910
|
-
|
|
3908
|
+
var plane = (polygon4) => {
|
|
3909
|
+
if (!polygon4.plane) {
|
|
3910
|
+
polygon4.plane = mplane.fromPoints(mplane.create(), ...polygon4.vertices);
|
|
3911
3911
|
}
|
|
3912
|
-
return
|
|
3912
|
+
return polygon4.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 = (
|
|
3924
|
-
const n =
|
|
3923
|
+
var measureArea = (polygon4) => {
|
|
3924
|
+
const n = polygon4.vertices.length;
|
|
3925
3925
|
if (n < 3) {
|
|
3926
3926
|
return 0;
|
|
3927
3927
|
}
|
|
3928
|
-
const vertices =
|
|
3929
|
-
const normal = plane(
|
|
3928
|
+
const vertices = polygon4.vertices;
|
|
3929
|
+
const normal = plane(polygon4);
|
|
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
|
|
3989
|
-
const vertices =
|
|
3988
|
+
var measureBoundingBox3 = (polygon4) => {
|
|
3989
|
+
const vertices = polygon4.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);
|
|
@@ -3996,7 +3996,7 @@ var require_measureBoundingBox = __commonJS({
|
|
|
3996
3996
|
}
|
|
3997
3997
|
return [min, max];
|
|
3998
3998
|
};
|
|
3999
|
-
module.exports =
|
|
3999
|
+
module.exports = measureBoundingBox3;
|
|
4000
4000
|
}
|
|
4001
4001
|
});
|
|
4002
4002
|
|
|
@@ -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 = (
|
|
4068
|
-
const boundingSphere = cache.get(
|
|
4067
|
+
var measureBoundingSphere = (polygon4) => {
|
|
4068
|
+
const boundingSphere = cache.get(polygon4);
|
|
4069
4069
|
if (boundingSphere) return boundingSphere;
|
|
4070
|
-
const vertices =
|
|
4070
|
+
const vertices = polygon4.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(
|
|
4100
|
+
cache.set(polygon4, 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 = (
|
|
4112
|
+
var measureSignedVolume = (polygon4) => {
|
|
4113
4113
|
let signedVolume = 0;
|
|
4114
|
-
const vertices =
|
|
4114
|
+
const vertices = polygon4.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 = (
|
|
4131
|
+
var toPoints = (polygon4) => polygon4.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 = (
|
|
4141
|
+
var toString = (polygon4) => {
|
|
4142
4142
|
let result = "poly3: vertices: [";
|
|
4143
|
-
|
|
4143
|
+
polygon4.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,
|
|
4161
|
-
const vertices =
|
|
4160
|
+
var transform = (matrix, polygon4) => {
|
|
4161
|
+
const vertices = polygon4.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
|
|
4278
|
-
return
|
|
4277
|
+
const polygon4 = poly3.create(points);
|
|
4278
|
+
return polygon4;
|
|
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((
|
|
4329
|
+
geometry.polygons = geometry.polygons.map((polygon4) => poly3.transform(geometry.transforms, polygon4));
|
|
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((
|
|
4356
|
+
const newpolygons = polygons.map((polygon4) => poly3.invert(polygon4));
|
|
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((
|
|
4389
|
+
const listofpoints = polygons.map((polygon4) => poly3.toPoints(polygon4));
|
|
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((
|
|
4406
|
-
result += " " + poly3.toString(
|
|
4405
|
+
polygons.forEach((polygon4) => {
|
|
4406
|
+
result += " " + poly3.toString(polygon4) + "\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,
|
|
4423
|
+
const numberOfVertices = polygons.reduce((count, polygon4) => count + polygon4.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((
|
|
4452
|
-
const points = poly3.toPoints(
|
|
4451
|
+
polygons.forEach((polygon4) => {
|
|
4452
|
+
const points = poly3.toPoints(polygon4);
|
|
4453
4453
|
compacted[ci] = points.length;
|
|
4454
4454
|
ci++;
|
|
4455
4455
|
for (let i = 0; i < points.length; i++) {
|
|
@@ -5134,7 +5134,7 @@ var require_colorize = __commonJS({
|
|
|
5134
5134
|
"use strict";
|
|
5135
5135
|
var flatten = require_flatten();
|
|
5136
5136
|
var geom2 = require_geom2();
|
|
5137
|
-
var
|
|
5137
|
+
var geom33 = require_geom3();
|
|
5138
5138
|
var path2 = require_path2();
|
|
5139
5139
|
var poly3 = require_poly3();
|
|
5140
5140
|
var colorGeom2 = (color, object) => {
|
|
@@ -5143,7 +5143,7 @@ var require_colorize = __commonJS({
|
|
|
5143
5143
|
return newgeom2;
|
|
5144
5144
|
};
|
|
5145
5145
|
var colorGeom3 = (color, object) => {
|
|
5146
|
-
const newgeom3 =
|
|
5146
|
+
const newgeom3 = geom33.clone(object);
|
|
5147
5147
|
newgeom3.color = color;
|
|
5148
5148
|
return newgeom3;
|
|
5149
5149
|
};
|
|
@@ -5165,7 +5165,7 @@ var require_colorize = __commonJS({
|
|
|
5165
5165
|
if (objects.length === 0) throw new Error("wrong number of arguments");
|
|
5166
5166
|
const results = objects.map((object) => {
|
|
5167
5167
|
if (geom2.isA(object)) return colorGeom2(color, object);
|
|
5168
|
-
if (
|
|
5168
|
+
if (geom33.isA(object)) return colorGeom3(color, object);
|
|
5169
5169
|
if (path2.isA(object)) return colorPath2(color, object);
|
|
5170
5170
|
if (poly3.isA(object)) return colorPoly3(color, object);
|
|
5171
5171
|
object.color = color;
|
|
@@ -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 = (
|
|
5880
|
+
var measureArea = (polygon4) => area(polygon4.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 = (
|
|
5905
|
-
const vertices =
|
|
5904
|
+
var flip = (polygon4) => {
|
|
5905
|
+
const vertices = polygon4.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,
|
|
5918
|
+
var arePointsInside = (points, polygon4) => {
|
|
5919
5919
|
if (points.length === 0) return 0;
|
|
5920
|
-
const vertices =
|
|
5920
|
+
const vertices = polygon4.vertices;
|
|
5921
5921
|
if (vertices.length < 3) return 0;
|
|
5922
|
-
if (measureArea(
|
|
5923
|
-
|
|
5922
|
+
if (measureArea(polygon4) < 0) {
|
|
5923
|
+
polygon4 = flip(polygon4);
|
|
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,
|
|
5929
|
-
const numverts =
|
|
5928
|
+
var isPointInside = (point, polygon4) => {
|
|
5929
|
+
const numverts = polygon4.length;
|
|
5930
5930
|
const tx = point[0];
|
|
5931
5931
|
const ty = point[1];
|
|
5932
|
-
let vtx0 =
|
|
5933
|
-
let vtx1 =
|
|
5932
|
+
let vtx0 = polygon4[numverts - 1];
|
|
5933
|
+
let vtx1 = polygon4[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 =
|
|
5952
|
+
vtx1 = polygon4[++i];
|
|
5953
5953
|
}
|
|
5954
5954
|
return insideFlag;
|
|
5955
5955
|
};
|
|
@@ -6610,7 +6610,7 @@ var require_measureArea3 = __commonJS({
|
|
|
6610
6610
|
"use strict";
|
|
6611
6611
|
var flatten = require_flatten();
|
|
6612
6612
|
var geom2 = require_geom2();
|
|
6613
|
-
var
|
|
6613
|
+
var geom33 = require_geom3();
|
|
6614
6614
|
var path2 = require_path2();
|
|
6615
6615
|
var poly3 = require_poly3();
|
|
6616
6616
|
var cache = /* @__PURE__ */ new WeakMap();
|
|
@@ -6627,8 +6627,8 @@ var require_measureArea3 = __commonJS({
|
|
|
6627
6627
|
var measureAreaOfGeom3 = (geometry) => {
|
|
6628
6628
|
let area = cache.get(geometry);
|
|
6629
6629
|
if (area) return area;
|
|
6630
|
-
const polygons =
|
|
6631
|
-
area = polygons.reduce((area2,
|
|
6630
|
+
const polygons = geom33.toPolygons(geometry);
|
|
6631
|
+
area = polygons.reduce((area2, polygon4) => area2 + poly3.measureArea(polygon4), 0);
|
|
6632
6632
|
cache.set(geometry, area);
|
|
6633
6633
|
return area;
|
|
6634
6634
|
};
|
|
@@ -6638,7 +6638,7 @@ var require_measureArea3 = __commonJS({
|
|
|
6638
6638
|
const results = geometries.map((geometry) => {
|
|
6639
6639
|
if (path2.isA(geometry)) return measureAreaOfPath2(geometry);
|
|
6640
6640
|
if (geom2.isA(geometry)) return measureAreaOfGeom2(geometry);
|
|
6641
|
-
if (
|
|
6641
|
+
if (geom33.isA(geometry)) return measureAreaOfGeom3(geometry);
|
|
6642
6642
|
return 0;
|
|
6643
6643
|
});
|
|
6644
6644
|
return results.length === 1 ? results[0] : results;
|
|
@@ -6675,7 +6675,7 @@ var require_measureBoundingBox2 = __commonJS({
|
|
|
6675
6675
|
var vec2 = require_vec2();
|
|
6676
6676
|
var vec3 = require_vec3();
|
|
6677
6677
|
var geom2 = require_geom2();
|
|
6678
|
-
var
|
|
6678
|
+
var geom33 = require_geom3();
|
|
6679
6679
|
var path2 = require_path2();
|
|
6680
6680
|
var poly3 = require_poly3();
|
|
6681
6681
|
var cache = /* @__PURE__ */ new WeakMap();
|
|
@@ -6724,15 +6724,15 @@ var require_measureBoundingBox2 = __commonJS({
|
|
|
6724
6724
|
var measureBoundingBoxOfGeom3 = (geometry) => {
|
|
6725
6725
|
let boundingBox = cache.get(geometry);
|
|
6726
6726
|
if (boundingBox) return boundingBox;
|
|
6727
|
-
const polygons =
|
|
6727
|
+
const polygons = geom33.toPolygons(geometry);
|
|
6728
6728
|
let minpoint = vec3.create();
|
|
6729
6729
|
if (polygons.length > 0) {
|
|
6730
6730
|
const points = poly3.toPoints(polygons[0]);
|
|
6731
6731
|
vec3.copy(minpoint, points[0]);
|
|
6732
6732
|
}
|
|
6733
6733
|
let maxpoint = vec3.clone(minpoint);
|
|
6734
|
-
polygons.forEach((
|
|
6735
|
-
poly3.toPoints(
|
|
6734
|
+
polygons.forEach((polygon4) => {
|
|
6735
|
+
poly3.toPoints(polygon4).forEach((point) => {
|
|
6736
6736
|
vec3.min(minpoint, minpoint, point);
|
|
6737
6737
|
vec3.max(maxpoint, maxpoint, point);
|
|
6738
6738
|
});
|
|
@@ -6743,18 +6743,18 @@ var require_measureBoundingBox2 = __commonJS({
|
|
|
6743
6743
|
cache.set(geometry, boundingBox);
|
|
6744
6744
|
return boundingBox;
|
|
6745
6745
|
};
|
|
6746
|
-
var
|
|
6746
|
+
var measureBoundingBox3 = (...geometries) => {
|
|
6747
6747
|
geometries = flatten(geometries);
|
|
6748
6748
|
if (geometries.length === 0) throw new Error("wrong number of arguments");
|
|
6749
6749
|
const results = geometries.map((geometry) => {
|
|
6750
6750
|
if (path2.isA(geometry)) return measureBoundingBoxOfPath2(geometry);
|
|
6751
6751
|
if (geom2.isA(geometry)) return measureBoundingBoxOfGeom2(geometry);
|
|
6752
|
-
if (
|
|
6752
|
+
if (geom33.isA(geometry)) return measureBoundingBoxOfGeom3(geometry);
|
|
6753
6753
|
return [[0, 0, 0], [0, 0, 0]];
|
|
6754
6754
|
});
|
|
6755
6755
|
return results.length === 1 ? results[0] : results;
|
|
6756
6756
|
};
|
|
6757
|
-
module.exports =
|
|
6757
|
+
module.exports = measureBoundingBox3;
|
|
6758
6758
|
}
|
|
6759
6759
|
});
|
|
6760
6760
|
|
|
@@ -6765,11 +6765,11 @@ var require_measureAggregateBoundingBox = __commonJS({
|
|
|
6765
6765
|
var flatten = require_flatten();
|
|
6766
6766
|
var vec3min = require_min();
|
|
6767
6767
|
var vec3max = require_max();
|
|
6768
|
-
var
|
|
6768
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
6769
6769
|
var measureAggregateBoundingBox = (...geometries) => {
|
|
6770
6770
|
geometries = flatten(geometries);
|
|
6771
6771
|
if (geometries.length === 0) throw new Error("measureAggregateBoundingBox: no geometries supplied");
|
|
6772
|
-
const bounds =
|
|
6772
|
+
const bounds = measureBoundingBox3(geometries);
|
|
6773
6773
|
if (geometries.length === 1) {
|
|
6774
6774
|
return bounds;
|
|
6775
6775
|
}
|
|
@@ -6806,7 +6806,7 @@ var require_measureAggregateEpsilon = __commonJS({
|
|
|
6806
6806
|
var flatten = require_flatten();
|
|
6807
6807
|
var measureAggregateBoundingBox = require_measureAggregateBoundingBox();
|
|
6808
6808
|
var calculateEpsilonFromBounds = require_calculateEpsilonFromBounds();
|
|
6809
|
-
var { geom2, geom3:
|
|
6809
|
+
var { geom2, geom3: geom33, path2 } = require_geometries();
|
|
6810
6810
|
var measureAggregateEpsilon = (...geometries) => {
|
|
6811
6811
|
geometries = flatten(geometries);
|
|
6812
6812
|
if (geometries.length === 0) throw new Error("measureAggregateEpsilon: no geometries supplied");
|
|
@@ -6814,7 +6814,7 @@ var require_measureAggregateEpsilon = __commonJS({
|
|
|
6814
6814
|
let dimensions = 0;
|
|
6815
6815
|
dimensions = geometries.reduce((dimensions2, geometry) => {
|
|
6816
6816
|
if (path2.isA(geometry) || geom2.isA(geometry)) return Math.max(dimensions2, 2);
|
|
6817
|
-
if (
|
|
6817
|
+
if (geom33.isA(geometry)) return Math.max(dimensions2, 3);
|
|
6818
6818
|
return 0;
|
|
6819
6819
|
}, dimensions);
|
|
6820
6820
|
return calculateEpsilonFromBounds(bounds, dimensions);
|
|
@@ -6829,7 +6829,7 @@ var require_measureVolume = __commonJS({
|
|
|
6829
6829
|
"use strict";
|
|
6830
6830
|
var flatten = require_flatten();
|
|
6831
6831
|
var geom2 = require_geom2();
|
|
6832
|
-
var
|
|
6832
|
+
var geom33 = require_geom3();
|
|
6833
6833
|
var path2 = require_path2();
|
|
6834
6834
|
var poly3 = require_poly3();
|
|
6835
6835
|
var cache = /* @__PURE__ */ new WeakMap();
|
|
@@ -6838,8 +6838,8 @@ var require_measureVolume = __commonJS({
|
|
|
6838
6838
|
var measureVolumeOfGeom3 = (geometry) => {
|
|
6839
6839
|
let volume = cache.get(geometry);
|
|
6840
6840
|
if (volume) return volume;
|
|
6841
|
-
const polygons =
|
|
6842
|
-
volume = polygons.reduce((volume2,
|
|
6841
|
+
const polygons = geom33.toPolygons(geometry);
|
|
6842
|
+
volume = polygons.reduce((volume2, polygon4) => volume2 + poly3.measureSignedVolume(polygon4), 0);
|
|
6843
6843
|
cache.set(geometry, volume);
|
|
6844
6844
|
return volume;
|
|
6845
6845
|
};
|
|
@@ -6849,7 +6849,7 @@ var require_measureVolume = __commonJS({
|
|
|
6849
6849
|
const results = geometries.map((geometry) => {
|
|
6850
6850
|
if (path2.isA(geometry)) return measureVolumeOfPath2(geometry);
|
|
6851
6851
|
if (geom2.isA(geometry)) return measureVolumeOfGeom2(geometry);
|
|
6852
|
-
if (
|
|
6852
|
+
if (geom33.isA(geometry)) return measureVolumeOfGeom3(geometry);
|
|
6853
6853
|
return 0;
|
|
6854
6854
|
});
|
|
6855
6855
|
return results.length === 1 ? results[0] : results;
|
|
@@ -6886,7 +6886,7 @@ var require_measureBoundingSphere2 = __commonJS({
|
|
|
6886
6886
|
var vec2 = require_vec2();
|
|
6887
6887
|
var vec3 = require_vec3();
|
|
6888
6888
|
var geom2 = require_geom2();
|
|
6889
|
-
var
|
|
6889
|
+
var geom33 = require_geom3();
|
|
6890
6890
|
var path2 = require_path2();
|
|
6891
6891
|
var poly3 = require_poly3();
|
|
6892
6892
|
var cacheOfBoundingSpheres = /* @__PURE__ */ new WeakMap();
|
|
@@ -6941,18 +6941,18 @@ var require_measureBoundingSphere2 = __commonJS({
|
|
|
6941
6941
|
if (boundingSphere !== void 0) return boundingSphere;
|
|
6942
6942
|
const centroid = vec3.create();
|
|
6943
6943
|
let radius = 0;
|
|
6944
|
-
const polygons =
|
|
6944
|
+
const polygons = geom33.toPolygons(geometry);
|
|
6945
6945
|
if (polygons.length > 0) {
|
|
6946
6946
|
let numPoints = 0;
|
|
6947
|
-
polygons.forEach((
|
|
6948
|
-
poly3.toPoints(
|
|
6947
|
+
polygons.forEach((polygon4) => {
|
|
6948
|
+
poly3.toPoints(polygon4).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((
|
|
6955
|
-
poly3.toPoints(
|
|
6954
|
+
polygons.forEach((polygon4) => {
|
|
6955
|
+
poly3.toPoints(polygon4).forEach((point) => {
|
|
6956
6956
|
radius = Math.max(radius, vec3.squaredDistance(centroid, point));
|
|
6957
6957
|
});
|
|
6958
6958
|
});
|
|
@@ -6967,7 +6967,7 @@ var require_measureBoundingSphere2 = __commonJS({
|
|
|
6967
6967
|
const results = geometries.map((geometry) => {
|
|
6968
6968
|
if (path2.isA(geometry)) return measureBoundingSphereOfPath2(geometry);
|
|
6969
6969
|
if (geom2.isA(geometry)) return measureBoundingSphereOfGeom2(geometry);
|
|
6970
|
-
if (
|
|
6970
|
+
if (geom33.isA(geometry)) return measureBoundingSphereOfGeom3(geometry);
|
|
6971
6971
|
return [[0, 0, 0], 0];
|
|
6972
6972
|
});
|
|
6973
6973
|
return results.length === 1 ? results[0] : results;
|
|
@@ -6981,11 +6981,11 @@ var require_measureCenter = __commonJS({
|
|
|
6981
6981
|
"node_modules/@jscad/modeling/src/measurements/measureCenter.js"(exports, module) {
|
|
6982
6982
|
"use strict";
|
|
6983
6983
|
var flatten = require_flatten();
|
|
6984
|
-
var
|
|
6984
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
6985
6985
|
var measureCenter = (...geometries) => {
|
|
6986
6986
|
geometries = flatten(geometries);
|
|
6987
6987
|
const results = geometries.map((geometry) => {
|
|
6988
|
-
const bounds =
|
|
6988
|
+
const bounds = measureBoundingBox3(geometry);
|
|
6989
6989
|
return [
|
|
6990
6990
|
bounds[0][0] + (bounds[1][0] - bounds[0][0]) / 2,
|
|
6991
6991
|
bounds[0][1] + (bounds[1][1] - bounds[0][1]) / 2,
|
|
@@ -7005,7 +7005,7 @@ var require_measureCenterOfMass = __commonJS({
|
|
|
7005
7005
|
var flatten = require_flatten();
|
|
7006
7006
|
var vec3 = require_vec3();
|
|
7007
7007
|
var geom2 = require_geom2();
|
|
7008
|
-
var
|
|
7008
|
+
var geom33 = require_geom3();
|
|
7009
7009
|
var cacheOfCenterOfMass = /* @__PURE__ */ new WeakMap();
|
|
7010
7010
|
var measureCenterOfMassGeom2 = (geometry) => {
|
|
7011
7011
|
let centerOfMass = cacheOfCenterOfMass.get(geometry);
|
|
@@ -7036,12 +7036,12 @@ var require_measureCenterOfMass = __commonJS({
|
|
|
7036
7036
|
let centerOfMass = cacheOfCenterOfMass.get(geometry);
|
|
7037
7037
|
if (centerOfMass !== void 0) return centerOfMass;
|
|
7038
7038
|
centerOfMass = vec3.create();
|
|
7039
|
-
const polygons =
|
|
7039
|
+
const polygons = geom33.toPolygons(geometry);
|
|
7040
7040
|
if (polygons.length === 0) return centerOfMass;
|
|
7041
7041
|
let totalVolume = 0;
|
|
7042
7042
|
const vector = vec3.create();
|
|
7043
|
-
polygons.forEach((
|
|
7044
|
-
const vertices =
|
|
7043
|
+
polygons.forEach((polygon4) => {
|
|
7044
|
+
const vertices = polygon4.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;
|
|
@@ -7060,7 +7060,7 @@ var require_measureCenterOfMass = __commonJS({
|
|
|
7060
7060
|
geometries = flatten(geometries);
|
|
7061
7061
|
const results = geometries.map((geometry) => {
|
|
7062
7062
|
if (geom2.isA(geometry)) return measureCenterOfMassGeom2(geometry);
|
|
7063
|
-
if (
|
|
7063
|
+
if (geom33.isA(geometry)) return measureCenterOfMassGeom3(geometry);
|
|
7064
7064
|
return [0, 0, 0];
|
|
7065
7065
|
});
|
|
7066
7066
|
return results.length === 1 ? results[0] : results;
|
|
@@ -7074,11 +7074,11 @@ var require_measureDimensions = __commonJS({
|
|
|
7074
7074
|
"node_modules/@jscad/modeling/src/measurements/measureDimensions.js"(exports, module) {
|
|
7075
7075
|
"use strict";
|
|
7076
7076
|
var flatten = require_flatten();
|
|
7077
|
-
var
|
|
7077
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
7078
7078
|
var measureDimensions = (...geometries) => {
|
|
7079
7079
|
geometries = flatten(geometries);
|
|
7080
7080
|
const results = geometries.map((geometry) => {
|
|
7081
|
-
const boundingBox =
|
|
7081
|
+
const boundingBox = measureBoundingBox3(geometry);
|
|
7082
7082
|
return [
|
|
7083
7083
|
boundingBox[1][0] - boundingBox[0][0],
|
|
7084
7084
|
boundingBox[1][1] - boundingBox[0][1],
|
|
@@ -7096,19 +7096,19 @@ var require_measureEpsilon = __commonJS({
|
|
|
7096
7096
|
"node_modules/@jscad/modeling/src/measurements/measureEpsilon.js"(exports, module) {
|
|
7097
7097
|
"use strict";
|
|
7098
7098
|
var flatten = require_flatten();
|
|
7099
|
-
var { geom2, geom3:
|
|
7099
|
+
var { geom2, geom3: geom33, path2 } = require_geometries();
|
|
7100
7100
|
var calculateEpsilonFromBounds = require_calculateEpsilonFromBounds();
|
|
7101
|
-
var
|
|
7102
|
-
var measureEpsilonOfPath2 = (geometry) => calculateEpsilonFromBounds(
|
|
7103
|
-
var measureEpsilonOfGeom2 = (geometry) => calculateEpsilonFromBounds(
|
|
7104
|
-
var measureEpsilonOfGeom3 = (geometry) => calculateEpsilonFromBounds(
|
|
7101
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
7102
|
+
var measureEpsilonOfPath2 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox3(geometry), 2);
|
|
7103
|
+
var measureEpsilonOfGeom2 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox3(geometry), 2);
|
|
7104
|
+
var measureEpsilonOfGeom3 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox3(geometry), 3);
|
|
7105
7105
|
var measureEpsilon = (...geometries) => {
|
|
7106
7106
|
geometries = flatten(geometries);
|
|
7107
7107
|
if (geometries.length === 0) throw new Error("wrong number of arguments");
|
|
7108
7108
|
const results = geometries.map((geometry) => {
|
|
7109
7109
|
if (path2.isA(geometry)) return measureEpsilonOfPath2(geometry);
|
|
7110
7110
|
if (geom2.isA(geometry)) return measureEpsilonOfGeom2(geometry);
|
|
7111
|
-
if (
|
|
7111
|
+
if (geom33.isA(geometry)) return measureEpsilonOfGeom3(geometry);
|
|
7112
7112
|
return 0;
|
|
7113
7113
|
});
|
|
7114
7114
|
return results.length === 1 ? results[0] : results;
|
|
@@ -7307,7 +7307,7 @@ var require_circle = __commonJS({
|
|
|
7307
7307
|
var require_cuboid = __commonJS({
|
|
7308
7308
|
"node_modules/@jscad/modeling/src/primitives/cuboid.js"(exports, module) {
|
|
7309
7309
|
"use strict";
|
|
7310
|
-
var
|
|
7310
|
+
var geom33 = require_geom3();
|
|
7311
7311
|
var poly3 = require_poly3();
|
|
7312
7312
|
var { isNumberArray } = require_commonChecks();
|
|
7313
7313
|
var cuboid = (options) => {
|
|
@@ -7319,8 +7319,8 @@ var require_cuboid = __commonJS({
|
|
|
7319
7319
|
if (!isNumberArray(center, 3)) throw new Error("center must be an array of X, Y and Z values");
|
|
7320
7320
|
if (!isNumberArray(size, 3)) throw new Error("size must be an array of width, depth and height values");
|
|
7321
7321
|
if (!size.every((n) => n >= 0)) throw new Error("size values must be positive");
|
|
7322
|
-
if (size[0] === 0 || size[1] === 0 || size[2] === 0) return
|
|
7323
|
-
const result =
|
|
7322
|
+
if (size[0] === 0 || size[1] === 0 || size[2] === 0) return geom33.create();
|
|
7323
|
+
const result = geom33.create(
|
|
7324
7324
|
// adjust a basic shape to size
|
|
7325
7325
|
[
|
|
7326
7326
|
[[0, 4, 6, 2], [-1, 0, 0]],
|
|
@@ -7373,7 +7373,7 @@ var require_cylinderElliptic = __commonJS({
|
|
|
7373
7373
|
"use strict";
|
|
7374
7374
|
var { EPS, TAU } = require_constants();
|
|
7375
7375
|
var vec3 = require_vec3();
|
|
7376
|
-
var
|
|
7376
|
+
var geom33 = require_geom3();
|
|
7377
7377
|
var poly3 = require_poly3();
|
|
7378
7378
|
var { sin, cos } = require_trigonometry();
|
|
7379
7379
|
var { isGT, isGTE, isNumberArray } = require_commonChecks();
|
|
@@ -7462,7 +7462,7 @@ var require_cylinderElliptic = __commonJS({
|
|
|
7462
7462
|
polygons.push(fromPoints(start, end, point(0, 1, startRadius)));
|
|
7463
7463
|
polygons.push(fromPoints(point(0, 1, startRadius), end, point(1, 1, endRadius)));
|
|
7464
7464
|
}
|
|
7465
|
-
const result =
|
|
7465
|
+
const result = geom33.create(polygons);
|
|
7466
7466
|
return result;
|
|
7467
7467
|
};
|
|
7468
7468
|
module.exports = cylinderElliptic;
|
|
@@ -7473,7 +7473,7 @@ var require_cylinderElliptic = __commonJS({
|
|
|
7473
7473
|
var require_cylinder = __commonJS({
|
|
7474
7474
|
"node_modules/@jscad/modeling/src/primitives/cylinder.js"(exports, module) {
|
|
7475
7475
|
"use strict";
|
|
7476
|
-
var
|
|
7476
|
+
var geom33 = require_geom3();
|
|
7477
7477
|
var cylinderElliptic = require_cylinderElliptic();
|
|
7478
7478
|
var { isGTE } = require_commonChecks();
|
|
7479
7479
|
var cylinder2 = (options) => {
|
|
@@ -7485,7 +7485,7 @@ var require_cylinder = __commonJS({
|
|
|
7485
7485
|
};
|
|
7486
7486
|
const { center, height, radius, segments } = Object.assign({}, defaults, options);
|
|
7487
7487
|
if (!isGTE(radius, 0)) throw new Error("radius must be positive");
|
|
7488
|
-
if (height === 0 || radius === 0) return
|
|
7488
|
+
if (height === 0 || radius === 0) return geom33.create();
|
|
7489
7489
|
const newoptions = {
|
|
7490
7490
|
center,
|
|
7491
7491
|
height,
|
|
@@ -7505,7 +7505,7 @@ var require_ellipsoid = __commonJS({
|
|
|
7505
7505
|
"use strict";
|
|
7506
7506
|
var { TAU } = require_constants();
|
|
7507
7507
|
var vec3 = require_vec3();
|
|
7508
|
-
var
|
|
7508
|
+
var geom33 = require_geom3();
|
|
7509
7509
|
var poly3 = require_poly3();
|
|
7510
7510
|
var { sin, cos } = require_trigonometry();
|
|
7511
7511
|
var { isGTE, isNumberArray } = require_commonChecks();
|
|
@@ -7521,7 +7521,7 @@ var require_ellipsoid = __commonJS({
|
|
|
7521
7521
|
if (!isNumberArray(radius, 3)) throw new Error("radius must be an array of X, Y and Z values");
|
|
7522
7522
|
if (!radius.every((n) => n >= 0)) throw new Error("radius values must be positive");
|
|
7523
7523
|
if (!isGTE(segments, 4)) throw new Error("segments must be four or more");
|
|
7524
|
-
if (radius[0] === 0 || radius[1] === 0 || radius[2] === 0) return
|
|
7524
|
+
if (radius[0] === 0 || radius[1] === 0 || radius[2] === 0) return geom33.create();
|
|
7525
7525
|
const xvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[0]), radius[0]);
|
|
7526
7526
|
const yvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[1]), radius[1]);
|
|
7527
7527
|
const zvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[2]), radius[2]);
|
|
@@ -7573,7 +7573,7 @@ var require_ellipsoid = __commonJS({
|
|
|
7573
7573
|
}
|
|
7574
7574
|
prevcylinderpoint = cylinderpoint;
|
|
7575
7575
|
}
|
|
7576
|
-
return
|
|
7576
|
+
return geom33.create(polygons);
|
|
7577
7577
|
};
|
|
7578
7578
|
module.exports = ellipsoid;
|
|
7579
7579
|
}
|
|
@@ -7583,7 +7583,7 @@ var require_ellipsoid = __commonJS({
|
|
|
7583
7583
|
var require_polyhedron = __commonJS({
|
|
7584
7584
|
"node_modules/@jscad/modeling/src/primitives/polyhedron.js"(exports, module) {
|
|
7585
7585
|
"use strict";
|
|
7586
|
-
var
|
|
7586
|
+
var geom33 = require_geom3();
|
|
7587
7587
|
var poly3 = require_poly3();
|
|
7588
7588
|
var { isNumberArray } = require_commonChecks();
|
|
7589
7589
|
var polyhedron = (options) => {
|
|
@@ -7622,11 +7622,11 @@ var require_polyhedron = __commonJS({
|
|
|
7622
7622
|
faces.forEach((face) => face.reverse());
|
|
7623
7623
|
}
|
|
7624
7624
|
const polygons = faces.map((face, findex) => {
|
|
7625
|
-
const
|
|
7626
|
-
if (colors && colors[findex])
|
|
7627
|
-
return
|
|
7625
|
+
const polygon4 = poly3.create(face.map((pindex) => points[pindex]));
|
|
7626
|
+
if (colors && colors[findex]) polygon4.color = colors[findex];
|
|
7627
|
+
return polygon4;
|
|
7628
7628
|
});
|
|
7629
|
-
return
|
|
7629
|
+
return geom33.create(polygons);
|
|
7630
7630
|
};
|
|
7631
7631
|
module.exports = polyhedron;
|
|
7632
7632
|
}
|
|
@@ -7638,7 +7638,7 @@ var require_geodesicSphere = __commonJS({
|
|
|
7638
7638
|
"use strict";
|
|
7639
7639
|
var mat4 = require_mat4();
|
|
7640
7640
|
var vec3 = require_vec3();
|
|
7641
|
-
var
|
|
7641
|
+
var geom33 = require_geom3();
|
|
7642
7642
|
var polyhedron = require_polyhedron();
|
|
7643
7643
|
var { isGTE } = require_commonChecks();
|
|
7644
7644
|
var geodesicSphere = (options) => {
|
|
@@ -7649,7 +7649,7 @@ var require_geodesicSphere = __commonJS({
|
|
|
7649
7649
|
let { radius, frequency } = Object.assign({}, defaults, options);
|
|
7650
7650
|
if (!isGTE(radius, 0)) throw new Error("radius must be positive");
|
|
7651
7651
|
if (!isGTE(frequency, 6)) throw new Error("frequency must be six or more");
|
|
7652
|
-
if (radius === 0) return
|
|
7652
|
+
if (radius === 0) return geom33.create();
|
|
7653
7653
|
frequency = Math.floor(frequency / 6);
|
|
7654
7654
|
const ci = [
|
|
7655
7655
|
// hard-coded data of icosahedron (20 faces, all triangles)
|
|
@@ -7752,7 +7752,7 @@ var require_geodesicSphere = __commonJS({
|
|
|
7752
7752
|
offset = g.offset;
|
|
7753
7753
|
}
|
|
7754
7754
|
let geometry = polyhedron({ points, faces, orientation: "inward" });
|
|
7755
|
-
if (radius !== 1) geometry =
|
|
7755
|
+
if (radius !== 1) geometry = geom33.transform(mat4.fromScaling(mat4.create(), [radius, radius, radius]), geometry);
|
|
7756
7756
|
return geometry;
|
|
7757
7757
|
};
|
|
7758
7758
|
module.exports = geodesicSphere;
|
|
@@ -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
|
|
7780
|
+
var polygon4 = (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 =
|
|
7821
|
+
module.exports = polygon4;
|
|
7822
7822
|
}
|
|
7823
7823
|
});
|
|
7824
7824
|
|
|
@@ -7860,7 +7860,7 @@ var require_roundedCuboid = __commonJS({
|
|
|
7860
7860
|
var { EPS, TAU } = require_constants();
|
|
7861
7861
|
var vec2 = require_vec2();
|
|
7862
7862
|
var vec3 = require_vec3();
|
|
7863
|
-
var
|
|
7863
|
+
var geom33 = require_geom3();
|
|
7864
7864
|
var poly3 = require_poly3();
|
|
7865
7865
|
var { sin, cos } = require_trigonometry();
|
|
7866
7866
|
var { isGTE, isNumberArray } = require_commonChecks();
|
|
@@ -7965,7 +7965,7 @@ var require_roundedCuboid = __commonJS({
|
|
|
7965
7965
|
if (!size.every((n) => n >= 0)) throw new Error("size values must be positive");
|
|
7966
7966
|
if (!isGTE(roundRadius, 0)) throw new Error("roundRadius must be positive");
|
|
7967
7967
|
if (!isGTE(segments, 4)) throw new Error("segments must be four or more");
|
|
7968
|
-
if (size[0] === 0 || size[1] === 0 || size[2] === 0) return
|
|
7968
|
+
if (size[0] === 0 || size[1] === 0 || size[2] === 0) return geom33.create();
|
|
7969
7969
|
if (roundRadius === 0) return cuboid({ center, size });
|
|
7970
7970
|
size = size.map((v) => v / 2);
|
|
7971
7971
|
if (roundRadius > size[0] - EPS || roundRadius > size[1] - EPS || roundRadius > size[2] - EPS) throw new Error("roundRadius must be smaller than the radius of all dimensions");
|
|
@@ -8000,7 +8000,7 @@ var require_roundedCuboid = __commonJS({
|
|
|
8000
8000
|
prevCornersPos = cornersPos;
|
|
8001
8001
|
prevCornersNeg = cornersNeg;
|
|
8002
8002
|
}
|
|
8003
|
-
return
|
|
8003
|
+
return geom33.create(polygons);
|
|
8004
8004
|
};
|
|
8005
8005
|
module.exports = roundedCuboid;
|
|
8006
8006
|
}
|
|
@@ -8012,7 +8012,7 @@ var require_roundedCylinder = __commonJS({
|
|
|
8012
8012
|
"use strict";
|
|
8013
8013
|
var { EPS, TAU } = require_constants();
|
|
8014
8014
|
var vec3 = require_vec3();
|
|
8015
|
-
var
|
|
8015
|
+
var geom33 = require_geom3();
|
|
8016
8016
|
var poly3 = require_poly3();
|
|
8017
8017
|
var { sin, cos } = require_trigonometry();
|
|
8018
8018
|
var { isGTE, isNumberArray } = require_commonChecks();
|
|
@@ -8032,7 +8032,7 @@ var require_roundedCylinder = __commonJS({
|
|
|
8032
8032
|
if (!isGTE(roundRadius, 0)) throw new Error("roundRadius must be positive");
|
|
8033
8033
|
if (roundRadius > radius) throw new Error("roundRadius must be smaller than the radius");
|
|
8034
8034
|
if (!isGTE(segments, 4)) throw new Error("segments must be four or more");
|
|
8035
|
-
if (height === 0 || radius === 0) return
|
|
8035
|
+
if (height === 0 || radius === 0) return geom33.create();
|
|
8036
8036
|
if (roundRadius === 0) return cylinder2({ center, height, radius });
|
|
8037
8037
|
const start = [0, 0, -(height / 2)];
|
|
8038
8038
|
const end = [0, 0, height / 2];
|
|
@@ -8112,7 +8112,7 @@ var require_roundedCylinder = __commonJS({
|
|
|
8112
8112
|
}
|
|
8113
8113
|
prevcylinderpoint = cylinderpoint;
|
|
8114
8114
|
}
|
|
8115
|
-
const result =
|
|
8115
|
+
const result = geom33.create(polygons);
|
|
8116
8116
|
return result;
|
|
8117
8117
|
};
|
|
8118
8118
|
module.exports = roundedCylinder;
|
|
@@ -8283,7 +8283,7 @@ var require_mirror = __commonJS({
|
|
|
8283
8283
|
var mat4 = require_mat4();
|
|
8284
8284
|
var plane = require_plane();
|
|
8285
8285
|
var geom2 = require_geom2();
|
|
8286
|
-
var
|
|
8286
|
+
var geom33 = require_geom3();
|
|
8287
8287
|
var path2 = require_path2();
|
|
8288
8288
|
var mirror = (options, ...objects) => {
|
|
8289
8289
|
const defaults = {
|
|
@@ -8302,7 +8302,7 @@ var require_mirror = __commonJS({
|
|
|
8302
8302
|
const results = objects.map((object) => {
|
|
8303
8303
|
if (path2.isA(object)) return path2.transform(matrix, object);
|
|
8304
8304
|
if (geom2.isA(object)) return geom2.transform(matrix, object);
|
|
8305
|
-
if (
|
|
8305
|
+
if (geom33.isA(object)) return geom33.transform(matrix, object);
|
|
8306
8306
|
return object;
|
|
8307
8307
|
});
|
|
8308
8308
|
return results.length === 1 ? results[0] : results;
|
|
@@ -9278,7 +9278,7 @@ var require_extrudeFromSlices = __commonJS({
|
|
|
9278
9278
|
"use strict";
|
|
9279
9279
|
var mat4 = require_mat4();
|
|
9280
9280
|
var geom2 = require_geom2();
|
|
9281
|
-
var
|
|
9281
|
+
var geom33 = require_geom3();
|
|
9282
9282
|
var poly3 = require_poly3();
|
|
9283
9283
|
var slice = require_slice();
|
|
9284
9284
|
var repairSlice = require_repair();
|
|
@@ -9335,7 +9335,7 @@ var require_extrudeFromSlices = __commonJS({
|
|
|
9335
9335
|
polygons = polygons.concat(extrudeWalls(endSlice, startSlice));
|
|
9336
9336
|
}
|
|
9337
9337
|
}
|
|
9338
|
-
return
|
|
9338
|
+
return geom33.create(polygons);
|
|
9339
9339
|
};
|
|
9340
9340
|
module.exports = extrudeFromSlices;
|
|
9341
9341
|
}
|
|
@@ -9436,7 +9436,7 @@ var require_rotate3 = __commonJS({
|
|
|
9436
9436
|
var flatten = require_flatten();
|
|
9437
9437
|
var mat4 = require_mat4();
|
|
9438
9438
|
var geom2 = require_geom2();
|
|
9439
|
-
var
|
|
9439
|
+
var geom33 = require_geom3();
|
|
9440
9440
|
var path2 = require_path2();
|
|
9441
9441
|
var rotate = (angles, ...objects) => {
|
|
9442
9442
|
if (!Array.isArray(angles)) throw new Error("angles must be an array");
|
|
@@ -9451,17 +9451,17 @@ var require_rotate3 = __commonJS({
|
|
|
9451
9451
|
const results = objects.map((object) => {
|
|
9452
9452
|
if (path2.isA(object)) return path2.transform(matrix, object);
|
|
9453
9453
|
if (geom2.isA(object)) return geom2.transform(matrix, object);
|
|
9454
|
-
if (
|
|
9454
|
+
if (geom33.isA(object)) return geom33.transform(matrix, object);
|
|
9455
9455
|
return object;
|
|
9456
9456
|
});
|
|
9457
9457
|
return results.length === 1 ? results[0] : results;
|
|
9458
9458
|
};
|
|
9459
|
-
var
|
|
9459
|
+
var rotateX3 = (angle, ...objects) => rotate([angle, 0, 0], objects);
|
|
9460
9460
|
var rotateY = (angle, ...objects) => rotate([0, angle, 0], objects);
|
|
9461
9461
|
var rotateZ3 = (angle, ...objects) => rotate([0, 0, angle], objects);
|
|
9462
9462
|
module.exports = {
|
|
9463
9463
|
rotate,
|
|
9464
|
-
rotateX:
|
|
9464
|
+
rotateX: rotateX3,
|
|
9465
9465
|
rotateY,
|
|
9466
9466
|
rotateZ: rotateZ3
|
|
9467
9467
|
};
|
|
@@ -9475,9 +9475,9 @@ var require_translate2 = __commonJS({
|
|
|
9475
9475
|
var flatten = require_flatten();
|
|
9476
9476
|
var mat4 = require_mat4();
|
|
9477
9477
|
var geom2 = require_geom2();
|
|
9478
|
-
var
|
|
9478
|
+
var geom33 = require_geom3();
|
|
9479
9479
|
var path2 = require_path2();
|
|
9480
|
-
var
|
|
9480
|
+
var translate4 = (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");
|
|
@@ -9487,16 +9487,16 @@ var require_translate2 = __commonJS({
|
|
|
9487
9487
|
const results = objects.map((object) => {
|
|
9488
9488
|
if (path2.isA(object)) return path2.transform(matrix, object);
|
|
9489
9489
|
if (geom2.isA(object)) return geom2.transform(matrix, object);
|
|
9490
|
-
if (
|
|
9490
|
+
if (geom33.isA(object)) return geom33.transform(matrix, object);
|
|
9491
9491
|
return object;
|
|
9492
9492
|
});
|
|
9493
9493
|
return results.length === 1 ? results[0] : results;
|
|
9494
9494
|
};
|
|
9495
|
-
var translateX = (offset, ...objects) =>
|
|
9496
|
-
var translateY = (offset, ...objects) =>
|
|
9497
|
-
var translateZ = (offset, ...objects) =>
|
|
9495
|
+
var translateX = (offset, ...objects) => translate4([offset, 0, 0], objects);
|
|
9496
|
+
var translateY = (offset, ...objects) => translate4([0, offset, 0], objects);
|
|
9497
|
+
var translateZ = (offset, ...objects) => translate4([0, 0, offset], objects);
|
|
9498
9498
|
module.exports = {
|
|
9499
|
-
translate:
|
|
9499
|
+
translate: translate4,
|
|
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:
|
|
9514
|
+
var { translate: translate4 } = 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 =
|
|
9539
|
+
innerCircle = translate4([outerRadius, 0], innerCircle);
|
|
9540
9540
|
const extrudeOptions = {
|
|
9541
9541
|
startAngle,
|
|
9542
9542
|
angle: outerRotation,
|
|
@@ -9970,14 +9970,14 @@ var require_areAllShapesTheSameType = __commonJS({
|
|
|
9970
9970
|
"node_modules/@jscad/modeling/src/utils/areAllShapesTheSameType.js"(exports, module) {
|
|
9971
9971
|
"use strict";
|
|
9972
9972
|
var geom2 = require_geom2();
|
|
9973
|
-
var
|
|
9973
|
+
var geom33 = require_geom3();
|
|
9974
9974
|
var path2 = require_path2();
|
|
9975
9975
|
var areAllShapesTheSameType = (shapes) => {
|
|
9976
9976
|
let previousType;
|
|
9977
9977
|
for (const shape of shapes) {
|
|
9978
9978
|
let currentType = 0;
|
|
9979
9979
|
if (geom2.isA(shape)) currentType = 1;
|
|
9980
|
-
if (
|
|
9980
|
+
if (geom33.isA(shape)) currentType = 2;
|
|
9981
9981
|
if (path2.isA(shape)) currentType = 3;
|
|
9982
9982
|
if (previousType && currentType !== previousType) return false;
|
|
9983
9983
|
previousType = currentType;
|
|
@@ -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,
|
|
10078
|
-
if (
|
|
10077
|
+
var fromFakePolygon = (epsilon, polygon4) => {
|
|
10078
|
+
if (polygon4.vertices.length < 4) {
|
|
10079
10079
|
return null;
|
|
10080
10080
|
}
|
|
10081
10081
|
const vert1Indices = [];
|
|
10082
|
-
const points3D =
|
|
10082
|
+
const points3D = polygon4.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((
|
|
10109
|
+
const sides = polygons.map((polygon4) => fromFakePolygon(epsilon, polygon4)).filter((polygon4) => polygon4 !== null);
|
|
10110
10110
|
return geom2.create(sides);
|
|
10111
10111
|
};
|
|
10112
10112
|
module.exports = fromFakePolygons;
|
|
@@ -10119,7 +10119,7 @@ var require_to3DWalls = __commonJS({
|
|
|
10119
10119
|
"use strict";
|
|
10120
10120
|
var vec3 = require_vec3();
|
|
10121
10121
|
var geom2 = require_geom2();
|
|
10122
|
-
var
|
|
10122
|
+
var geom33 = require_geom3();
|
|
10123
10123
|
var poly3 = require_poly3();
|
|
10124
10124
|
var to3DWall = (z0, z1, side) => {
|
|
10125
10125
|
const points = [
|
|
@@ -10133,7 +10133,7 @@ var require_to3DWalls = __commonJS({
|
|
|
10133
10133
|
var to3DWalls = (options, geometry) => {
|
|
10134
10134
|
const sides = geom2.toSides(geometry);
|
|
10135
10135
|
const polygons = sides.map((side) => to3DWall(options.z0, options.z1, side));
|
|
10136
|
-
const result =
|
|
10136
|
+
const result = geom33.create(polygons);
|
|
10137
10137
|
return result;
|
|
10138
10138
|
};
|
|
10139
10139
|
module.exports = to3DWalls;
|
|
@@ -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
|
|
10467
|
-
if (
|
|
10466
|
+
const polygon4 = poly3.fromPointsAndPlane(vertices3d, plane);
|
|
10467
|
+
if (polygon4.vertices.length) destpolygons.push(polygon4);
|
|
10468
10468
|
}
|
|
10469
10469
|
}
|
|
10470
10470
|
}
|
|
@@ -10500,7 +10500,7 @@ var require_reTesselateCoplanarPolygons = __commonJS({
|
|
|
10500
10500
|
var require_retessellate = __commonJS({
|
|
10501
10501
|
"node_modules/@jscad/modeling/src/operations/modifiers/retessellate.js"(exports, module) {
|
|
10502
10502
|
"use strict";
|
|
10503
|
-
var
|
|
10503
|
+
var geom33 = require_geom3();
|
|
10504
10504
|
var poly3 = require_poly3();
|
|
10505
10505
|
var { NEPS } = require_constants();
|
|
10506
10506
|
var reTesselateCoplanarPolygons = require_reTesselateCoplanarPolygons();
|
|
@@ -10508,7 +10508,7 @@ var require_retessellate = __commonJS({
|
|
|
10508
10508
|
if (geometry.isRetesselated) {
|
|
10509
10509
|
return geometry;
|
|
10510
10510
|
}
|
|
10511
|
-
const polygons =
|
|
10511
|
+
const polygons = geom33.toPolygons(geometry).map((polygon4, index) => ({ vertices: polygon4.vertices, plane: poly3.plane(polygon4), index }));
|
|
10512
10512
|
const classified = classifyPolygons(polygons);
|
|
10513
10513
|
const destPolygons = [];
|
|
10514
10514
|
classified.forEach((group) => {
|
|
@@ -10519,7 +10519,7 @@ var require_retessellate = __commonJS({
|
|
|
10519
10519
|
destPolygons.push(group);
|
|
10520
10520
|
}
|
|
10521
10521
|
});
|
|
10522
|
-
const result =
|
|
10522
|
+
const result = geom33.create(destPolygons);
|
|
10523
10523
|
result.isRetesselated = true;
|
|
10524
10524
|
return result;
|
|
10525
10525
|
};
|
|
@@ -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((
|
|
10558
|
-
result[
|
|
10557
|
+
nonCoplanar.forEach((polygon4) => {
|
|
10558
|
+
result[polygon4.index] = polygon4;
|
|
10559
10559
|
});
|
|
10560
10560
|
return result;
|
|
10561
10561
|
};
|
|
@@ -10576,15 +10576,15 @@ var require_mayOverlap = __commonJS({
|
|
|
10576
10576
|
"node_modules/@jscad/modeling/src/operations/booleans/mayOverlap.js"(exports, module) {
|
|
10577
10577
|
"use strict";
|
|
10578
10578
|
var { EPS } = require_constants();
|
|
10579
|
-
var
|
|
10579
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
10580
10580
|
var mayOverlap = (geometry1, geometry2) => {
|
|
10581
10581
|
if (geometry1.polygons.length === 0 || geometry2.polygons.length === 0) {
|
|
10582
10582
|
return false;
|
|
10583
10583
|
}
|
|
10584
|
-
const bounds1 =
|
|
10584
|
+
const bounds1 = measureBoundingBox3(geometry1);
|
|
10585
10585
|
const min1 = bounds1[0];
|
|
10586
10586
|
const max1 = bounds1[1];
|
|
10587
|
-
const bounds2 =
|
|
10587
|
+
const bounds2 = measureBoundingBox3(geometry2);
|
|
10588
10588
|
const min2 = bounds2[0];
|
|
10589
10589
|
const max2 = bounds2[1];
|
|
10590
10590
|
if (min2[0] - max1[0] > EPS) return false;
|
|
@@ -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,
|
|
10750
|
+
var splitPolygonByPlane = (splane, polygon4) => {
|
|
10751
10751
|
const result = {
|
|
10752
10752
|
type: null,
|
|
10753
10753
|
front: null,
|
|
10754
10754
|
back: null
|
|
10755
10755
|
};
|
|
10756
|
-
const vertices =
|
|
10756
|
+
const vertices = polygon4.vertices;
|
|
10757
10757
|
const numvertices = vertices.length;
|
|
10758
|
-
const pplane = poly3.plane(
|
|
10758
|
+
const pplane = poly3.plane(polygon4);
|
|
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,
|
|
10858
|
+
constructor(parent, polygon4) {
|
|
10859
10859
|
this.parent = parent;
|
|
10860
10860
|
this.children = [];
|
|
10861
|
-
this.polygon =
|
|
10861
|
+
this.polygon = polygon4;
|
|
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((
|
|
10872
|
-
_this.addChild(
|
|
10871
|
+
polygons.forEach((polygon4) => {
|
|
10872
|
+
_this.addChild(polygon4);
|
|
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
|
|
10950
|
-
if (
|
|
10951
|
-
const bound = poly3.measureBoundingSphere(
|
|
10949
|
+
const polygon4 = this.polygon;
|
|
10950
|
+
if (polygon4) {
|
|
10951
|
+
const bound = poly3.measureBoundingSphere(polygon4);
|
|
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,
|
|
10960
|
+
const splitresult = splitPolygonByPlane(splane, polygon4);
|
|
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(
|
|
10994
|
-
const newchild = new _PolygonTreeNode(this,
|
|
10993
|
+
addChild(polygon4) {
|
|
10994
|
+
const newchild = new _PolygonTreeNode(this, polygon4);
|
|
10995
10995
|
this.children.push(newchild);
|
|
10996
10996
|
return newchild;
|
|
10997
10997
|
}
|
|
@@ -11125,15 +11125,15 @@ var require_trees = __commonJS({
|
|
|
11125
11125
|
var require_intersectGeom3Sub = __commonJS({
|
|
11126
11126
|
"node_modules/@jscad/modeling/src/operations/booleans/intersectGeom3Sub.js"(exports, module) {
|
|
11127
11127
|
"use strict";
|
|
11128
|
-
var
|
|
11128
|
+
var geom33 = require_geom3();
|
|
11129
11129
|
var mayOverlap = require_mayOverlap();
|
|
11130
11130
|
var { Tree } = require_trees();
|
|
11131
11131
|
var intersectGeom3Sub = (geometry1, geometry2) => {
|
|
11132
11132
|
if (!mayOverlap(geometry1, geometry2)) {
|
|
11133
|
-
return
|
|
11133
|
+
return geom33.create();
|
|
11134
11134
|
}
|
|
11135
|
-
const a = new Tree(
|
|
11136
|
-
const b = new Tree(
|
|
11135
|
+
const a = new Tree(geom33.toPolygons(geometry1));
|
|
11136
|
+
const b = new Tree(geom33.toPolygons(geometry2));
|
|
11137
11137
|
a.invert();
|
|
11138
11138
|
b.clipTo(a);
|
|
11139
11139
|
b.invert();
|
|
@@ -11142,7 +11142,7 @@ var require_intersectGeom3Sub = __commonJS({
|
|
|
11142
11142
|
a.addPolygons(b.allPolygons());
|
|
11143
11143
|
a.invert();
|
|
11144
11144
|
const newpolygons = a.allPolygons();
|
|
11145
|
-
return
|
|
11145
|
+
return geom33.create(newpolygons);
|
|
11146
11146
|
};
|
|
11147
11147
|
module.exports = intersectGeom3Sub;
|
|
11148
11148
|
}
|
|
@@ -11173,7 +11173,7 @@ var require_intersectGeom2 = __commonJS({
|
|
|
11173
11173
|
"node_modules/@jscad/modeling/src/operations/booleans/intersectGeom2.js"(exports, module) {
|
|
11174
11174
|
"use strict";
|
|
11175
11175
|
var flatten = require_flatten();
|
|
11176
|
-
var
|
|
11176
|
+
var geom33 = require_geom3();
|
|
11177
11177
|
var measureEpsilon = require_measureEpsilon();
|
|
11178
11178
|
var fromFakePolygons = require_fromFakePolygons();
|
|
11179
11179
|
var to3DWalls = require_to3DWalls();
|
|
@@ -11183,7 +11183,7 @@ var require_intersectGeom2 = __commonJS({
|
|
|
11183
11183
|
const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry));
|
|
11184
11184
|
const newgeom3 = intersectGeom3(newgeometries);
|
|
11185
11185
|
const epsilon = measureEpsilon(newgeom3);
|
|
11186
|
-
return fromFakePolygons(epsilon,
|
|
11186
|
+
return fromFakePolygons(epsilon, geom33.toPolygons(newgeom3));
|
|
11187
11187
|
};
|
|
11188
11188
|
module.exports = intersect;
|
|
11189
11189
|
}
|
|
@@ -11196,7 +11196,7 @@ var require_intersect2 = __commonJS({
|
|
|
11196
11196
|
var flatten = require_flatten();
|
|
11197
11197
|
var areAllShapesTheSameType = require_areAllShapesTheSameType();
|
|
11198
11198
|
var geom2 = require_geom2();
|
|
11199
|
-
var
|
|
11199
|
+
var geom33 = require_geom3();
|
|
11200
11200
|
var intersectGeom2 = require_intersectGeom2();
|
|
11201
11201
|
var intersectGeom3 = require_intersectGeom3();
|
|
11202
11202
|
var intersect = (...geometries) => {
|
|
@@ -11207,7 +11207,7 @@ var require_intersect2 = __commonJS({
|
|
|
11207
11207
|
}
|
|
11208
11208
|
const geometry = geometries[0];
|
|
11209
11209
|
if (geom2.isA(geometry)) return intersectGeom2(geometries);
|
|
11210
|
-
if (
|
|
11210
|
+
if (geom33.isA(geometry)) return intersectGeom3(geometries);
|
|
11211
11211
|
return geometry;
|
|
11212
11212
|
};
|
|
11213
11213
|
module.exports = intersect;
|
|
@@ -11220,7 +11220,7 @@ var require_scissionGeom3 = __commonJS({
|
|
|
11220
11220
|
"use strict";
|
|
11221
11221
|
var vec3 = require_vec3();
|
|
11222
11222
|
var measureEpsilon = require_measureEpsilon();
|
|
11223
|
-
var
|
|
11223
|
+
var geom33 = require_geom3();
|
|
11224
11224
|
var sortNb = (array) => array.sort((a, b) => a - b).filter((item, pos, ary) => !pos || item !== ary[pos - 1]);
|
|
11225
11225
|
var insertMapping = (map, point, index) => {
|
|
11226
11226
|
const key = `${point}`;
|
|
@@ -11237,18 +11237,18 @@ var require_scissionGeom3 = __commonJS({
|
|
|
11237
11237
|
};
|
|
11238
11238
|
var scissionGeom3 = (geometry) => {
|
|
11239
11239
|
const eps = measureEpsilon(geometry);
|
|
11240
|
-
const polygons =
|
|
11240
|
+
const polygons = geom33.toPolygons(geometry);
|
|
11241
11241
|
const pl = polygons.length;
|
|
11242
11242
|
const indexesPerPoint = /* @__PURE__ */ new Map();
|
|
11243
11243
|
const temp = vec3.create();
|
|
11244
|
-
polygons.forEach((
|
|
11245
|
-
|
|
11244
|
+
polygons.forEach((polygon4, index) => {
|
|
11245
|
+
polygon4.vertices.forEach((point) => {
|
|
11246
11246
|
insertMapping(indexesPerPoint, vec3.snap(temp, point, eps), index);
|
|
11247
11247
|
});
|
|
11248
11248
|
});
|
|
11249
|
-
const indexesPerPolygon = polygons.map((
|
|
11249
|
+
const indexesPerPolygon = polygons.map((polygon4) => {
|
|
11250
11250
|
let indexes = [];
|
|
11251
|
-
|
|
11251
|
+
polygon4.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) };
|
|
@@ -11282,7 +11282,7 @@ var require_scissionGeom3 = __commonJS({
|
|
|
11282
11282
|
if (indexesPerPolygon[i].indexes) {
|
|
11283
11283
|
const newpolygons = [];
|
|
11284
11284
|
indexesPerPolygon[i].indexes.forEach((e, p) => newpolygons.push(polygons[p]));
|
|
11285
|
-
newgeometries.push(
|
|
11285
|
+
newgeometries.push(geom33.create(newpolygons));
|
|
11286
11286
|
}
|
|
11287
11287
|
}
|
|
11288
11288
|
return newgeometries;
|
|
@@ -11296,13 +11296,13 @@ var require_scission = __commonJS({
|
|
|
11296
11296
|
"node_modules/@jscad/modeling/src/operations/booleans/scission.js"(exports, module) {
|
|
11297
11297
|
"use strict";
|
|
11298
11298
|
var flatten = require_flatten();
|
|
11299
|
-
var
|
|
11299
|
+
var geom33 = require_geom3();
|
|
11300
11300
|
var scissionGeom3 = require_scissionGeom3();
|
|
11301
11301
|
var scission = (...objects) => {
|
|
11302
11302
|
objects = flatten(objects);
|
|
11303
11303
|
if (objects.length === 0) throw new Error("wrong number of arguments");
|
|
11304
11304
|
const results = objects.map((object) => {
|
|
11305
|
-
if (
|
|
11305
|
+
if (geom33.isA(object)) return scissionGeom3(object);
|
|
11306
11306
|
return object;
|
|
11307
11307
|
});
|
|
11308
11308
|
return results.length === 1 ? results[0] : results;
|
|
@@ -11315,22 +11315,22 @@ var require_scission = __commonJS({
|
|
|
11315
11315
|
var require_subtractGeom3Sub = __commonJS({
|
|
11316
11316
|
"node_modules/@jscad/modeling/src/operations/booleans/subtractGeom3Sub.js"(exports, module) {
|
|
11317
11317
|
"use strict";
|
|
11318
|
-
var
|
|
11318
|
+
var geom33 = require_geom3();
|
|
11319
11319
|
var mayOverlap = require_mayOverlap();
|
|
11320
11320
|
var { Tree } = require_trees();
|
|
11321
11321
|
var subtractGeom3Sub = (geometry1, geometry2) => {
|
|
11322
11322
|
if (!mayOverlap(geometry1, geometry2)) {
|
|
11323
|
-
return
|
|
11323
|
+
return geom33.clone(geometry1);
|
|
11324
11324
|
}
|
|
11325
|
-
const a = new Tree(
|
|
11326
|
-
const b = new Tree(
|
|
11325
|
+
const a = new Tree(geom33.toPolygons(geometry1));
|
|
11326
|
+
const b = new Tree(geom33.toPolygons(geometry2));
|
|
11327
11327
|
a.invert();
|
|
11328
11328
|
a.clipTo(b);
|
|
11329
11329
|
b.clipTo(a, true);
|
|
11330
11330
|
a.addPolygons(b.allPolygons());
|
|
11331
11331
|
a.invert();
|
|
11332
11332
|
const newpolygons = a.allPolygons();
|
|
11333
|
-
return
|
|
11333
|
+
return geom33.create(newpolygons);
|
|
11334
11334
|
};
|
|
11335
11335
|
module.exports = subtractGeom3Sub;
|
|
11336
11336
|
}
|
|
@@ -11361,7 +11361,7 @@ var require_subtractGeom2 = __commonJS({
|
|
|
11361
11361
|
"node_modules/@jscad/modeling/src/operations/booleans/subtractGeom2.js"(exports, module) {
|
|
11362
11362
|
"use strict";
|
|
11363
11363
|
var flatten = require_flatten();
|
|
11364
|
-
var
|
|
11364
|
+
var geom33 = require_geom3();
|
|
11365
11365
|
var measureEpsilon = require_measureEpsilon();
|
|
11366
11366
|
var fromFakePolygons = require_fromFakePolygons();
|
|
11367
11367
|
var to3DWalls = require_to3DWalls();
|
|
@@ -11371,7 +11371,7 @@ var require_subtractGeom2 = __commonJS({
|
|
|
11371
11371
|
const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry));
|
|
11372
11372
|
const newgeom3 = subtractGeom3(newgeometries);
|
|
11373
11373
|
const epsilon = measureEpsilon(newgeom3);
|
|
11374
|
-
return fromFakePolygons(epsilon,
|
|
11374
|
+
return fromFakePolygons(epsilon, geom33.toPolygons(newgeom3));
|
|
11375
11375
|
};
|
|
11376
11376
|
module.exports = subtract2;
|
|
11377
11377
|
}
|
|
@@ -11384,7 +11384,7 @@ var require_subtract4 = __commonJS({
|
|
|
11384
11384
|
var flatten = require_flatten();
|
|
11385
11385
|
var areAllShapesTheSameType = require_areAllShapesTheSameType();
|
|
11386
11386
|
var geom2 = require_geom2();
|
|
11387
|
-
var
|
|
11387
|
+
var geom33 = require_geom3();
|
|
11388
11388
|
var subtractGeom2 = require_subtractGeom2();
|
|
11389
11389
|
var subtractGeom3 = require_subtractGeom3();
|
|
11390
11390
|
var subtract2 = (...geometries) => {
|
|
@@ -11395,7 +11395,7 @@ var require_subtract4 = __commonJS({
|
|
|
11395
11395
|
}
|
|
11396
11396
|
const geometry = geometries[0];
|
|
11397
11397
|
if (geom2.isA(geometry)) return subtractGeom2(geometries);
|
|
11398
|
-
if (
|
|
11398
|
+
if (geom33.isA(geometry)) return subtractGeom3(geometries);
|
|
11399
11399
|
return geometry;
|
|
11400
11400
|
};
|
|
11401
11401
|
module.exports = subtract2;
|
|
@@ -11406,28 +11406,28 @@ var require_subtract4 = __commonJS({
|
|
|
11406
11406
|
var require_unionGeom3Sub = __commonJS({
|
|
11407
11407
|
"node_modules/@jscad/modeling/src/operations/booleans/unionGeom3Sub.js"(exports, module) {
|
|
11408
11408
|
"use strict";
|
|
11409
|
-
var
|
|
11409
|
+
var geom33 = require_geom3();
|
|
11410
11410
|
var mayOverlap = require_mayOverlap();
|
|
11411
11411
|
var { Tree } = require_trees();
|
|
11412
11412
|
var unionSub = (geometry1, geometry2) => {
|
|
11413
11413
|
if (!mayOverlap(geometry1, geometry2)) {
|
|
11414
11414
|
return unionForNonIntersecting(geometry1, geometry2);
|
|
11415
11415
|
}
|
|
11416
|
-
const a = new Tree(
|
|
11417
|
-
const b = new Tree(
|
|
11416
|
+
const a = new Tree(geom33.toPolygons(geometry1));
|
|
11417
|
+
const b = new Tree(geom33.toPolygons(geometry2));
|
|
11418
11418
|
a.clipTo(b, false);
|
|
11419
11419
|
b.clipTo(a);
|
|
11420
11420
|
b.invert();
|
|
11421
11421
|
b.clipTo(a);
|
|
11422
11422
|
b.invert();
|
|
11423
11423
|
const newpolygons = a.allPolygons().concat(b.allPolygons());
|
|
11424
|
-
const result =
|
|
11424
|
+
const result = geom33.create(newpolygons);
|
|
11425
11425
|
return result;
|
|
11426
11426
|
};
|
|
11427
11427
|
var unionForNonIntersecting = (geometry1, geometry2) => {
|
|
11428
|
-
let newpolygons =
|
|
11429
|
-
newpolygons = newpolygons.concat(
|
|
11430
|
-
return
|
|
11428
|
+
let newpolygons = geom33.toPolygons(geometry1);
|
|
11429
|
+
newpolygons = newpolygons.concat(geom33.toPolygons(geometry2));
|
|
11430
|
+
return geom33.create(newpolygons);
|
|
11431
11431
|
};
|
|
11432
11432
|
module.exports = unionSub;
|
|
11433
11433
|
}
|
|
@@ -11459,7 +11459,7 @@ var require_unionGeom2 = __commonJS({
|
|
|
11459
11459
|
"node_modules/@jscad/modeling/src/operations/booleans/unionGeom2.js"(exports, module) {
|
|
11460
11460
|
"use strict";
|
|
11461
11461
|
var flatten = require_flatten();
|
|
11462
|
-
var
|
|
11462
|
+
var geom33 = require_geom3();
|
|
11463
11463
|
var measureEpsilon = require_measureEpsilon();
|
|
11464
11464
|
var fromFakePolygons = require_fromFakePolygons();
|
|
11465
11465
|
var to3DWalls = require_to3DWalls();
|
|
@@ -11469,7 +11469,7 @@ var require_unionGeom2 = __commonJS({
|
|
|
11469
11469
|
const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry));
|
|
11470
11470
|
const newgeom3 = unionGeom3(newgeometries);
|
|
11471
11471
|
const epsilon = measureEpsilon(newgeom3);
|
|
11472
|
-
return fromFakePolygons(epsilon,
|
|
11472
|
+
return fromFakePolygons(epsilon, geom33.toPolygons(newgeom3));
|
|
11473
11473
|
};
|
|
11474
11474
|
module.exports = union;
|
|
11475
11475
|
}
|
|
@@ -11482,7 +11482,7 @@ var require_union = __commonJS({
|
|
|
11482
11482
|
var flatten = require_flatten();
|
|
11483
11483
|
var areAllShapesTheSameType = require_areAllShapesTheSameType();
|
|
11484
11484
|
var geom2 = require_geom2();
|
|
11485
|
-
var
|
|
11485
|
+
var geom33 = require_geom3();
|
|
11486
11486
|
var unionGeom2 = require_unionGeom2();
|
|
11487
11487
|
var unionGeom3 = require_unionGeom3();
|
|
11488
11488
|
var union = (...geometries) => {
|
|
@@ -11493,7 +11493,7 @@ var require_union = __commonJS({
|
|
|
11493
11493
|
}
|
|
11494
11494
|
const geometry = geometries[0];
|
|
11495
11495
|
if (geom2.isA(geometry)) return unionGeom2(geometries);
|
|
11496
|
-
if (
|
|
11496
|
+
if (geom33.isA(geometry)) return unionGeom3(geometries);
|
|
11497
11497
|
return geometry;
|
|
11498
11498
|
};
|
|
11499
11499
|
module.exports = union;
|
|
@@ -11686,7 +11686,7 @@ var require_extrudePolygon = __commonJS({
|
|
|
11686
11686
|
"use strict";
|
|
11687
11687
|
var mat4 = require_mat4();
|
|
11688
11688
|
var vec3 = require_vec3();
|
|
11689
|
-
var
|
|
11689
|
+
var geom33 = require_geom3();
|
|
11690
11690
|
var poly3 = require_poly3();
|
|
11691
11691
|
var extrudePolygon = (offsetvector, polygon1) => {
|
|
11692
11692
|
const direction = vec3.dot(poly3.plane(polygon1), offsetvector);
|
|
@@ -11707,7 +11707,7 @@ var require_extrudePolygon = __commonJS({
|
|
|
11707
11707
|
newpolygons.push(sideFacePolygon);
|
|
11708
11708
|
}
|
|
11709
11709
|
newpolygons.push(poly3.invert(polygon22));
|
|
11710
|
-
return
|
|
11710
|
+
return geom33.create(newpolygons);
|
|
11711
11711
|
};
|
|
11712
11712
|
module.exports = extrudePolygon;
|
|
11713
11713
|
}
|
|
@@ -11721,7 +11721,7 @@ var require_expandShell = __commonJS({
|
|
|
11721
11721
|
var mat4 = require_mat4();
|
|
11722
11722
|
var vec3 = require_vec3();
|
|
11723
11723
|
var fnNumberSort = require_fnNumberSort();
|
|
11724
|
-
var
|
|
11724
|
+
var geom33 = require_geom3();
|
|
11725
11725
|
var poly3 = require_poly3();
|
|
11726
11726
|
var sphere = require_sphere();
|
|
11727
11727
|
var retessellate = require_retessellate();
|
|
@@ -11761,23 +11761,23 @@ var require_expandShell = __commonJS({
|
|
|
11761
11761
|
segments: 12
|
|
11762
11762
|
};
|
|
11763
11763
|
const { delta, segments } = Object.assign({}, defaults, options);
|
|
11764
|
-
let result =
|
|
11764
|
+
let result = geom33.create();
|
|
11765
11765
|
const vertices2planes = /* @__PURE__ */ new Map();
|
|
11766
11766
|
const edges2planes = /* @__PURE__ */ new Map();
|
|
11767
11767
|
const v1 = vec3.create();
|
|
11768
11768
|
const v2 = vec3.create();
|
|
11769
|
-
const polygons =
|
|
11770
|
-
polygons.forEach((
|
|
11771
|
-
const extrudevector = vec3.scale(vec3.create(), poly3.plane(
|
|
11772
|
-
const translatedpolygon = poly3.transform(mat4.fromTranslation(mat4.create(), vec3.scale(vec3.create(), extrudevector, -0.5)),
|
|
11769
|
+
const polygons = geom33.toPolygons(geometry);
|
|
11770
|
+
polygons.forEach((polygon4, index) => {
|
|
11771
|
+
const extrudevector = vec3.scale(vec3.create(), poly3.plane(polygon4), 2 * delta);
|
|
11772
|
+
const translatedpolygon = poly3.transform(mat4.fromTranslation(mat4.create(), vec3.scale(vec3.create(), extrudevector, -0.5)), polygon4);
|
|
11773
11773
|
const extrudedface = extrudePolygon(extrudevector, translatedpolygon);
|
|
11774
11774
|
result = unionGeom3Sub(result, extrudedface);
|
|
11775
|
-
const vertices =
|
|
11775
|
+
const vertices = polygon4.vertices;
|
|
11776
11776
|
for (let i = 0; i < vertices.length; i++) {
|
|
11777
|
-
mapPlaneToVertex(vertices2planes, vertices[i], poly3.plane(
|
|
11777
|
+
mapPlaneToVertex(vertices2planes, vertices[i], poly3.plane(polygon4));
|
|
11778
11778
|
const j = (i + 1) % vertices.length;
|
|
11779
11779
|
const edge = [vertices[i], vertices[j]];
|
|
11780
|
-
mapPlaneToEdge(edges2planes, edge, poly3.plane(
|
|
11780
|
+
mapPlaneToEdge(edges2planes, edge, poly3.plane(polygon4));
|
|
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
|
|
11835
|
-
polygons2.push(
|
|
11834
|
+
const polygon4 = poly3.create(points);
|
|
11835
|
+
polygons2.push(polygon4);
|
|
11836
11836
|
}
|
|
11837
11837
|
prevp1 = p1;
|
|
11838
11838
|
prevp2 = p2;
|
|
@@ -11841,7 +11841,7 @@ var require_expandShell = __commonJS({
|
|
|
11841
11841
|
endfacevertices.reverse();
|
|
11842
11842
|
polygons2.push(poly3.create(startfacevertices));
|
|
11843
11843
|
polygons2.push(poly3.create(endfacevertices));
|
|
11844
|
-
const cylinder2 =
|
|
11844
|
+
const cylinder2 = geom33.create(polygons2);
|
|
11845
11845
|
result = unionGeom3Sub(result, cylinder2);
|
|
11846
11846
|
});
|
|
11847
11847
|
vertices2planes.forEach((item) => {
|
|
@@ -11885,7 +11885,7 @@ var require_expandShell = __commonJS({
|
|
|
11885
11885
|
var require_expandGeom3 = __commonJS({
|
|
11886
11886
|
"node_modules/@jscad/modeling/src/operations/expansions/expandGeom3.js"(exports, module) {
|
|
11887
11887
|
"use strict";
|
|
11888
|
-
var
|
|
11888
|
+
var geom33 = require_geom3();
|
|
11889
11889
|
var union = require_union();
|
|
11890
11890
|
var expandShell = require_expandShell();
|
|
11891
11891
|
var expandGeom3 = (options, geometry) => {
|
|
@@ -11898,7 +11898,7 @@ var require_expandGeom3 = __commonJS({
|
|
|
11898
11898
|
if (!(corners === "round")) {
|
|
11899
11899
|
throw new Error('corners must be "round" for 3D geometries');
|
|
11900
11900
|
}
|
|
11901
|
-
const polygons =
|
|
11901
|
+
const polygons = geom33.toPolygons(geometry);
|
|
11902
11902
|
if (polygons.length === 0) throw new Error("the given geometry cannot be empty");
|
|
11903
11903
|
options = { delta, corners, segments };
|
|
11904
11904
|
const expanded = expandShell(options, geometry);
|
|
@@ -11995,7 +11995,7 @@ var require_expand = __commonJS({
|
|
|
11995
11995
|
"use strict";
|
|
11996
11996
|
var flatten = require_flatten();
|
|
11997
11997
|
var geom2 = require_geom2();
|
|
11998
|
-
var
|
|
11998
|
+
var geom33 = require_geom3();
|
|
11999
11999
|
var path2 = require_path2();
|
|
12000
12000
|
var expandGeom2 = require_expandGeom2();
|
|
12001
12001
|
var expandGeom3 = require_expandGeom3();
|
|
@@ -12006,7 +12006,7 @@ var require_expand = __commonJS({
|
|
|
12006
12006
|
const results = objects.map((object) => {
|
|
12007
12007
|
if (path2.isA(object)) return expandPath2(options, object);
|
|
12008
12008
|
if (geom2.isA(object)) return expandGeom2(options, object);
|
|
12009
|
-
if (
|
|
12009
|
+
if (geom33.isA(object)) return expandGeom3(options, object);
|
|
12010
12010
|
return object;
|
|
12011
12011
|
});
|
|
12012
12012
|
return results.length === 1 ? results[0] : results;
|
|
@@ -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,
|
|
12037
|
+
const level = outlines.reduce((acc, polygon4) => acc + poly2.arePointsInside(outline, poly2.create(polygon4)), 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
|
|
12185
|
+
var extrudeLinear4 = (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 =
|
|
12203
|
+
module.exports = extrudeLinear4;
|
|
12204
12204
|
}
|
|
12205
12205
|
});
|
|
12206
12206
|
|
|
@@ -12368,7 +12368,7 @@ var require_project = __commonJS({
|
|
|
12368
12368
|
var plane = require_plane();
|
|
12369
12369
|
var mat4 = require_mat4();
|
|
12370
12370
|
var geom2 = require_geom2();
|
|
12371
|
-
var
|
|
12371
|
+
var geom33 = require_geom3();
|
|
12372
12372
|
var poly3 = require_poly3();
|
|
12373
12373
|
var measureEpsilon = require_measureEpsilon();
|
|
12374
12374
|
var unionGeom2 = require_unionGeom2();
|
|
@@ -12380,7 +12380,7 @@ var require_project = __commonJS({
|
|
|
12380
12380
|
const epsilon = measureEpsilon(geometry);
|
|
12381
12381
|
const epsilonArea = epsilon * epsilon * Math.sqrt(3) / 4;
|
|
12382
12382
|
if (epsilon === 0) return geom2.create();
|
|
12383
|
-
const polygons =
|
|
12383
|
+
const polygons = geom33.toPolygons(geometry);
|
|
12384
12384
|
let projpolys = [];
|
|
12385
12385
|
for (let i = 0; i < polygons.length; i++) {
|
|
12386
12386
|
const newpoints = polygons[i].vertices.map((v) => plane.projectionOfPoint(projplane, v));
|
|
@@ -12409,7 +12409,7 @@ var require_project = __commonJS({
|
|
|
12409
12409
|
if (objects.length === 0) throw new Error("wrong number of arguments");
|
|
12410
12410
|
options = { axis, origin };
|
|
12411
12411
|
const results = objects.map((object) => {
|
|
12412
|
-
if (
|
|
12412
|
+
if (geom33.isA(object)) return projectGeom3(options, object);
|
|
12413
12413
|
return object;
|
|
12414
12414
|
});
|
|
12415
12415
|
return results.length === 1 ? results[0] : results;
|
|
@@ -12481,7 +12481,7 @@ var require_toUniquePoints = __commonJS({
|
|
|
12481
12481
|
"node_modules/@jscad/modeling/src/operations/hulls/toUniquePoints.js"(exports, module) {
|
|
12482
12482
|
"use strict";
|
|
12483
12483
|
var geom2 = require_geom2();
|
|
12484
|
-
var
|
|
12484
|
+
var geom33 = require_geom3();
|
|
12485
12485
|
var path2 = require_path2();
|
|
12486
12486
|
var toUniquePoints = (geometries) => {
|
|
12487
12487
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -12496,8 +12496,8 @@ var require_toUniquePoints = __commonJS({
|
|
|
12496
12496
|
geometries.forEach((geometry) => {
|
|
12497
12497
|
if (geom2.isA(geometry)) {
|
|
12498
12498
|
geom2.toPoints(geometry).forEach(addPoint);
|
|
12499
|
-
} else if (
|
|
12500
|
-
|
|
12499
|
+
} else if (geom33.isA(geometry)) {
|
|
12500
|
+
geom33.toPoints(geometry).forEach((points) => points.forEach(addPoint));
|
|
12501
12501
|
} else if (path2.isA(geometry)) {
|
|
12502
12502
|
path2.toPoints(geometry).forEach(addPoint);
|
|
12503
12503
|
}
|
|
@@ -12568,14 +12568,14 @@ var require_hullGeom3 = __commonJS({
|
|
|
12568
12568
|
"node_modules/@jscad/modeling/src/operations/hulls/hullGeom3.js"(exports, module) {
|
|
12569
12569
|
"use strict";
|
|
12570
12570
|
var flatten = require_flatten();
|
|
12571
|
-
var
|
|
12571
|
+
var geom33 = require_geom3();
|
|
12572
12572
|
var toUniquePoints = require_toUniquePoints();
|
|
12573
12573
|
var hullPoints3 = require_hullPoints3();
|
|
12574
12574
|
var hullGeom3 = (...geometries) => {
|
|
12575
12575
|
geometries = flatten(geometries);
|
|
12576
12576
|
const unique = toUniquePoints(geometries);
|
|
12577
|
-
if (unique.length === 0) return
|
|
12578
|
-
return
|
|
12577
|
+
if (unique.length === 0) return geom33.create();
|
|
12578
|
+
return geom33.create(hullPoints3(unique));
|
|
12579
12579
|
};
|
|
12580
12580
|
module.exports = hullGeom3;
|
|
12581
12581
|
}
|
|
@@ -12588,7 +12588,7 @@ var require_hull = __commonJS({
|
|
|
12588
12588
|
var flatten = require_flatten();
|
|
12589
12589
|
var areAllShapesTheSameType = require_areAllShapesTheSameType();
|
|
12590
12590
|
var geom2 = require_geom2();
|
|
12591
|
-
var
|
|
12591
|
+
var geom33 = require_geom3();
|
|
12592
12592
|
var path2 = require_path2();
|
|
12593
12593
|
var hullPath2 = require_hullPath2();
|
|
12594
12594
|
var hullGeom2 = require_hullGeom2();
|
|
@@ -12602,7 +12602,7 @@ var require_hull = __commonJS({
|
|
|
12602
12602
|
const geometry = geometries[0];
|
|
12603
12603
|
if (path2.isA(geometry)) return hullPath2(geometries);
|
|
12604
12604
|
if (geom2.isA(geometry)) return hullGeom2(geometries);
|
|
12605
|
-
if (
|
|
12605
|
+
if (geom33.isA(geometry)) return hullGeom3(geometries);
|
|
12606
12606
|
return geometry;
|
|
12607
12607
|
};
|
|
12608
12608
|
module.exports = hull;
|
|
@@ -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,
|
|
12652
|
-
const area = Math.abs(poly3.measureArea(
|
|
12651
|
+
var isValidPoly3 = (epsilon, polygon4) => {
|
|
12652
|
+
const area = Math.abs(poly3.measureArea(polygon4));
|
|
12653
12653
|
return Number.isFinite(area) && area > epsilon;
|
|
12654
12654
|
};
|
|
12655
12655
|
var snapPolygons = (epsilon, polygons) => {
|
|
12656
|
-
let newpolygons = polygons.map((
|
|
12657
|
-
const snapvertices =
|
|
12656
|
+
let newpolygons = polygons.map((polygon4) => {
|
|
12657
|
+
const snapvertices = polygon4.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 (
|
|
12664
|
+
if (polygon4.color) newpolygon.color = polygon4.color;
|
|
12665
12665
|
return newpolygon;
|
|
12666
12666
|
});
|
|
12667
12667
|
const epsilonArea = epsilon * epsilon * Math.sqrt(3) / 4;
|
|
12668
|
-
newpolygons = newpolygons.filter((
|
|
12668
|
+
newpolygons = newpolygons.filter((polygon4) => isValidPoly3(epsilonArea, polygon4));
|
|
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 = (
|
|
12683
|
-
const points = poly3.toPoints(
|
|
12682
|
+
var createEdges = (polygon4) => {
|
|
12683
|
+
const points = poly3.toPoints(polygon4);
|
|
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
|
|
12732
|
+
let polygon4;
|
|
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)
|
|
12744
|
-
return
|
|
12743
|
+
if (points.length > 0) polygon4 = poly3.create(points);
|
|
12744
|
+
return polygon4;
|
|
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
|
|
12753
|
-
const edges = createEdges(
|
|
12752
|
+
const polygon4 = polygons.shift();
|
|
12753
|
+
const edges = createEdges(polygon4);
|
|
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
|
|
12810
|
-
if (
|
|
12809
|
+
const polygon4 = createPolygonAnd(edge);
|
|
12810
|
+
if (polygon4) destpolygons.push(polygon4);
|
|
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((
|
|
12824
|
-
const mapping = polygonsPerPlane.find((element) => coplanar(element[0], poly3.plane(
|
|
12823
|
+
polygons.forEach((polygon4) => {
|
|
12824
|
+
const mapping = polygonsPerPlane.find((element) => coplanar(element[0], poly3.plane(polygon4)));
|
|
12825
12825
|
if (mapping) {
|
|
12826
12826
|
const polygons2 = mapping[1];
|
|
12827
|
-
polygons2.push(
|
|
12827
|
+
polygons2.push(polygon4);
|
|
12828
12828
|
} else {
|
|
12829
|
-
polygonsPerPlane.push([poly3.plane(
|
|
12829
|
+
polygonsPerPlane.push([poly3.plane(polygon4), [polygon4]]);
|
|
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
|
|
12926
|
-
const numvertices =
|
|
12925
|
+
const polygon4 = polygons[polygonindex];
|
|
12926
|
+
const numvertices = polygon4.vertices.length;
|
|
12927
12927
|
if (numvertices >= 3) {
|
|
12928
|
-
let vertex =
|
|
12928
|
+
let vertex = polygon4.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 =
|
|
12933
|
+
const nextvertex = polygon4.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
|
|
13041
|
+
const polygon4 = newpolygons[polygonindex];
|
|
13042
13042
|
const insertionvertextag = getTag(matchingside.vertex1);
|
|
13043
13043
|
let insertionvertextagindex = -1;
|
|
13044
|
-
for (let i = 0; i <
|
|
13045
|
-
if (getTag(
|
|
13044
|
+
for (let i = 0; i < polygon4.vertices.length; i++) {
|
|
13045
|
+
if (getTag(polygon4.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 =
|
|
13051
|
+
const newvertices = polygon4.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,
|
|
13092
|
-
const nv =
|
|
13091
|
+
var triangulatePolygon = (epsilon, polygon4, triangles) => {
|
|
13092
|
+
const nv = polygon4.vertices.length;
|
|
13093
13093
|
if (nv > 3) {
|
|
13094
13094
|
if (nv > 4) {
|
|
13095
13095
|
const midpoint = [0, 0, 0];
|
|
13096
|
-
|
|
13096
|
+
polygon4.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,
|
|
13100
|
-
if (
|
|
13099
|
+
const poly = poly3.create([midpoint, polygon4.vertices[i], polygon4.vertices[(i + 1) % nv]]);
|
|
13100
|
+
if (polygon4.color) poly.color = polygon4.color;
|
|
13101
13101
|
triangles.push(poly);
|
|
13102
13102
|
}
|
|
13103
13103
|
return;
|
|
13104
13104
|
}
|
|
13105
|
-
const poly0 = poly3.create([
|
|
13106
|
-
const poly1 = poly3.create([
|
|
13107
|
-
if (
|
|
13108
|
-
poly0.color =
|
|
13109
|
-
poly1.color =
|
|
13105
|
+
const poly0 = poly3.create([polygon4.vertices[0], polygon4.vertices[1], polygon4.vertices[2]]);
|
|
13106
|
+
const poly1 = poly3.create([polygon4.vertices[0], polygon4.vertices[2], polygon4.vertices[3]]);
|
|
13107
|
+
if (polygon4.color) {
|
|
13108
|
+
poly0.color = polygon4.color;
|
|
13109
|
+
poly1.color = polygon4.color;
|
|
13110
13110
|
}
|
|
13111
13111
|
triangles.push(poly0, poly1);
|
|
13112
13112
|
return;
|
|
13113
13113
|
}
|
|
13114
|
-
triangles.push(
|
|
13114
|
+
triangles.push(polygon4);
|
|
13115
13115
|
};
|
|
13116
13116
|
var triangulatePolygons = (epsilon, polygons) => {
|
|
13117
13117
|
const triangles = [];
|
|
13118
|
-
polygons.forEach((
|
|
13119
|
-
triangulatePolygon(epsilon,
|
|
13118
|
+
polygons.forEach((polygon4) => {
|
|
13119
|
+
triangulatePolygon(epsilon, polygon4, triangles);
|
|
13120
13120
|
});
|
|
13121
13121
|
return triangles;
|
|
13122
13122
|
};
|
|
@@ -13131,7 +13131,7 @@ var require_generalize = __commonJS({
|
|
|
13131
13131
|
var flatten = require_flatten();
|
|
13132
13132
|
var measureEpsilon = require_measureEpsilon();
|
|
13133
13133
|
var geom2 = require_geom2();
|
|
13134
|
-
var
|
|
13134
|
+
var geom33 = require_geom3();
|
|
13135
13135
|
var path2 = require_path2();
|
|
13136
13136
|
var snapPolygons = require_snapPolygons();
|
|
13137
13137
|
var mergePolygons = require_mergePolygons();
|
|
@@ -13147,7 +13147,7 @@ var require_generalize = __commonJS({
|
|
|
13147
13147
|
};
|
|
13148
13148
|
const { snap, simplify, triangulate } = Object.assign({}, defaults, options);
|
|
13149
13149
|
const epsilon = measureEpsilon(geometry);
|
|
13150
|
-
let polygons =
|
|
13150
|
+
let polygons = geom33.toPolygons(geometry);
|
|
13151
13151
|
if (snap) {
|
|
13152
13152
|
polygons = snapPolygons(epsilon, polygons);
|
|
13153
13153
|
}
|
|
@@ -13168,7 +13168,7 @@ var require_generalize = __commonJS({
|
|
|
13168
13168
|
const results = geometries.map((geometry) => {
|
|
13169
13169
|
if (path2.isA(geometry)) return generalizePath2(options, geometry);
|
|
13170
13170
|
if (geom2.isA(geometry)) return generalizeGeom2(options, geometry);
|
|
13171
|
-
if (
|
|
13171
|
+
if (geom33.isA(geometry)) return generalizeGeom3(options, geometry);
|
|
13172
13172
|
throw new Error("invalid geometry");
|
|
13173
13173
|
});
|
|
13174
13174
|
return results.length === 1 ? results[0] : results;
|
|
@@ -13184,7 +13184,7 @@ var require_snap3 = __commonJS({
|
|
|
13184
13184
|
var flatten = require_flatten();
|
|
13185
13185
|
var vec2 = require_vec2();
|
|
13186
13186
|
var geom2 = require_geom2();
|
|
13187
|
-
var
|
|
13187
|
+
var geom33 = require_geom3();
|
|
13188
13188
|
var path2 = require_path2();
|
|
13189
13189
|
var measureEpsilon = require_measureEpsilon();
|
|
13190
13190
|
var snapPolygons = require_snapPolygons();
|
|
@@ -13203,9 +13203,9 @@ var require_snap3 = __commonJS({
|
|
|
13203
13203
|
};
|
|
13204
13204
|
var snapGeom3 = (geometry) => {
|
|
13205
13205
|
const epsilon = measureEpsilon(geometry);
|
|
13206
|
-
const polygons =
|
|
13206
|
+
const polygons = geom33.toPolygons(geometry);
|
|
13207
13207
|
const newpolygons = snapPolygons(epsilon, polygons);
|
|
13208
|
-
return
|
|
13208
|
+
return geom33.create(newpolygons);
|
|
13209
13209
|
};
|
|
13210
13210
|
var snap = (...geometries) => {
|
|
13211
13211
|
geometries = flatten(geometries);
|
|
@@ -13213,7 +13213,7 @@ var require_snap3 = __commonJS({
|
|
|
13213
13213
|
const results = geometries.map((geometry) => {
|
|
13214
13214
|
if (path2.isA(geometry)) return snapPath2(geometry);
|
|
13215
13215
|
if (geom2.isA(geometry)) return snapGeom2(geometry);
|
|
13216
|
-
if (
|
|
13216
|
+
if (geom33.isA(geometry)) return snapGeom3(geometry);
|
|
13217
13217
|
return geometry;
|
|
13218
13218
|
});
|
|
13219
13219
|
return results.length === 1 ? results[0] : results;
|
|
@@ -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:
|
|
13259
|
+
var { translate: translate4 } = 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
|
|
13296
|
+
return translate4(translation, geometry);
|
|
13297
13297
|
};
|
|
13298
13298
|
var align = (options, ...geometries) => {
|
|
13299
13299
|
const defaults = {
|
|
@@ -13327,22 +13327,22 @@ var require_center = __commonJS({
|
|
|
13327
13327
|
"use strict";
|
|
13328
13328
|
var flatten = require_flatten();
|
|
13329
13329
|
var geom2 = require_geom2();
|
|
13330
|
-
var
|
|
13330
|
+
var geom33 = require_geom3();
|
|
13331
13331
|
var path2 = require_path2();
|
|
13332
|
-
var
|
|
13333
|
-
var { translate:
|
|
13332
|
+
var measureBoundingBox3 = require_measureBoundingBox2();
|
|
13333
|
+
var { translate: translate4 } = require_translate2();
|
|
13334
13334
|
var centerGeometry = (options, object) => {
|
|
13335
13335
|
const defaults = {
|
|
13336
13336
|
axes: [true, true, true],
|
|
13337
13337
|
relativeTo: [0, 0, 0]
|
|
13338
13338
|
};
|
|
13339
13339
|
const { axes, relativeTo } = Object.assign({}, defaults, options);
|
|
13340
|
-
const bounds =
|
|
13340
|
+
const bounds = measureBoundingBox3(object);
|
|
13341
13341
|
const offset = [0, 0, 0];
|
|
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
|
|
13345
|
+
return translate4(offset, object);
|
|
13346
13346
|
};
|
|
13347
13347
|
var center = (options, ...objects) => {
|
|
13348
13348
|
const defaults = {
|
|
@@ -13358,7 +13358,7 @@ var require_center = __commonJS({
|
|
|
13358
13358
|
const results = objects.map((object) => {
|
|
13359
13359
|
if (path2.isA(object)) return centerGeometry(options, object);
|
|
13360
13360
|
if (geom2.isA(object)) return centerGeometry(options, object);
|
|
13361
|
-
if (
|
|
13361
|
+
if (geom33.isA(object)) return centerGeometry(options, object);
|
|
13362
13362
|
return object;
|
|
13363
13363
|
});
|
|
13364
13364
|
return results.length === 1 ? results[0] : results;
|
|
@@ -13382,7 +13382,7 @@ var require_scale4 = __commonJS({
|
|
|
13382
13382
|
var flatten = require_flatten();
|
|
13383
13383
|
var mat4 = require_mat4();
|
|
13384
13384
|
var geom2 = require_geom2();
|
|
13385
|
-
var
|
|
13385
|
+
var geom33 = require_geom3();
|
|
13386
13386
|
var path2 = require_path2();
|
|
13387
13387
|
var scale = (factors, ...objects) => {
|
|
13388
13388
|
if (!Array.isArray(factors)) throw new Error("factors must be an array");
|
|
@@ -13395,7 +13395,7 @@ var require_scale4 = __commonJS({
|
|
|
13395
13395
|
const results = objects.map((object) => {
|
|
13396
13396
|
if (path2.isA(object)) return path2.transform(matrix, object);
|
|
13397
13397
|
if (geom2.isA(object)) return geom2.transform(matrix, object);
|
|
13398
|
-
if (
|
|
13398
|
+
if (geom33.isA(object)) return geom33.transform(matrix, object);
|
|
13399
13399
|
return object;
|
|
13400
13400
|
});
|
|
13401
13401
|
return results.length === 1 ? results[0] : results;
|
|
@@ -13418,7 +13418,7 @@ var require_transform12 = __commonJS({
|
|
|
13418
13418
|
"use strict";
|
|
13419
13419
|
var flatten = require_flatten();
|
|
13420
13420
|
var geom2 = require_geom2();
|
|
13421
|
-
var
|
|
13421
|
+
var geom33 = require_geom3();
|
|
13422
13422
|
var path2 = require_path2();
|
|
13423
13423
|
var transform = (matrix, ...objects) => {
|
|
13424
13424
|
objects = flatten(objects);
|
|
@@ -13426,7 +13426,7 @@ var require_transform12 = __commonJS({
|
|
|
13426
13426
|
const results = objects.map((object) => {
|
|
13427
13427
|
if (path2.isA(object)) return path2.transform(matrix, object);
|
|
13428
13428
|
if (geom2.isA(object)) return geom2.transform(matrix, object);
|
|
13429
|
-
if (
|
|
13429
|
+
if (geom33.isA(object)) return geom33.transform(matrix, object);
|
|
13430
13430
|
return object;
|
|
13431
13431
|
});
|
|
13432
13432
|
return results.length === 1 ? results[0] : results;
|
|
@@ -14969,8 +14969,14 @@ var createBoardMesh = (board, options) => {
|
|
|
14969
14969
|
};
|
|
14970
14970
|
|
|
14971
14971
|
// lib/converters/circuit-to-3d.ts
|
|
14972
|
+
var import_extrusions3 = __toESM(require_extrusions(), 1);
|
|
14973
|
+
var import_primitives3 = __toESM(require_primitives(), 1);
|
|
14974
|
+
var import_transforms3 = __toESM(require_transforms(), 1);
|
|
14975
|
+
var geom32 = __toESM(require_geom3(), 1);
|
|
14976
|
+
var import_measureBoundingBox2 = __toESM(require_measureBoundingBox2(), 1);
|
|
14972
14977
|
var DEFAULT_BOARD_THICKNESS = 1.6;
|
|
14973
14978
|
var DEFAULT_COMPONENT_HEIGHT = 2;
|
|
14979
|
+
var COPPER_THICKNESS = 0.035;
|
|
14974
14980
|
function convertRotationFromCadRotation(rot) {
|
|
14975
14981
|
return {
|
|
14976
14982
|
x: rot.x * Math.PI / 180,
|
|
@@ -14982,6 +14988,7 @@ async function convertCircuitJsonTo3D(circuitJson, options = {}) {
|
|
|
14982
14988
|
const {
|
|
14983
14989
|
pcbColor = "rgba(0,140,0,0.8)",
|
|
14984
14990
|
componentColor = "rgba(128,128,128,0.5)",
|
|
14991
|
+
copperColor = "#C87B4B",
|
|
14985
14992
|
boardThickness = DEFAULT_BOARD_THICKNESS,
|
|
14986
14993
|
defaultComponentHeight = DEFAULT_COMPONENT_HEIGHT,
|
|
14987
14994
|
renderBoardTextures: shouldRenderTextures = true,
|
|
@@ -15042,6 +15049,63 @@ async function convertCircuitJsonTo3D(circuitJson, options = {}) {
|
|
|
15042
15049
|
}
|
|
15043
15050
|
boxes.push(boardBox);
|
|
15044
15051
|
}
|
|
15052
|
+
const pcbPours = db.pcb_copper_pour?.list?.() ?? [];
|
|
15053
|
+
for (const pour of pcbPours) {
|
|
15054
|
+
const isBottomLayer = pour.layer === "bottom";
|
|
15055
|
+
const y = isBottomLayer ? -(effectiveBoardThickness / 2) - COPPER_THICKNESS / 2 : effectiveBoardThickness / 2 + COPPER_THICKNESS / 2;
|
|
15056
|
+
if (pour.shape === "rect") {
|
|
15057
|
+
const box = {
|
|
15058
|
+
center: {
|
|
15059
|
+
x: pour.center.x,
|
|
15060
|
+
y,
|
|
15061
|
+
z: pour.center.y
|
|
15062
|
+
},
|
|
15063
|
+
size: {
|
|
15064
|
+
x: pour.width,
|
|
15065
|
+
y: COPPER_THICKNESS,
|
|
15066
|
+
z: pour.height
|
|
15067
|
+
},
|
|
15068
|
+
rotation: { x: 0, y: 0, z: 0 },
|
|
15069
|
+
color: pour.covered_with_solder_mask ? pcbColor : copperColor
|
|
15070
|
+
};
|
|
15071
|
+
if (pour.rotation && typeof pour.rotation === "number") {
|
|
15072
|
+
box.rotation.y = -(pour.rotation * Math.PI) / 180;
|
|
15073
|
+
}
|
|
15074
|
+
boxes.push(box);
|
|
15075
|
+
} else if (pour.shape === "polygon") {
|
|
15076
|
+
const { points } = pour;
|
|
15077
|
+
let center_x = 0;
|
|
15078
|
+
let center_y = 0;
|
|
15079
|
+
for (const p of points) {
|
|
15080
|
+
center_x += p.x;
|
|
15081
|
+
center_y += p.y;
|
|
15082
|
+
}
|
|
15083
|
+
center_x /= points.length;
|
|
15084
|
+
center_y /= points.length;
|
|
15085
|
+
const relativePoints = points.map((p) => [
|
|
15086
|
+
p.x - center_x,
|
|
15087
|
+
-(p.y - center_y)
|
|
15088
|
+
]);
|
|
15089
|
+
if (arePointsClockwise(relativePoints)) {
|
|
15090
|
+
relativePoints.reverse();
|
|
15091
|
+
}
|
|
15092
|
+
const shape2d = (0, import_primitives3.polygon)({ points: relativePoints });
|
|
15093
|
+
let geom = (0, import_extrusions3.extrudeLinear)({ height: COPPER_THICKNESS }, shape2d);
|
|
15094
|
+
geom = (0, import_transforms3.translate)([0, 0, -COPPER_THICKNESS / 2], geom);
|
|
15095
|
+
geom = (0, import_transforms3.rotateX)(-Math.PI / 2, geom);
|
|
15096
|
+
const triangles = geom3ToTriangles(geom);
|
|
15097
|
+
const bbox = createBoundingBox((0, import_measureBoundingBox2.default)(geom));
|
|
15098
|
+
const mesh = { triangles, boundingBox: bbox };
|
|
15099
|
+
const box = {
|
|
15100
|
+
center: { x: center_x, y, z: center_y },
|
|
15101
|
+
size: { x: 1, y: 1, z: 1 },
|
|
15102
|
+
// size doesn't matter much as we provide mesh
|
|
15103
|
+
mesh,
|
|
15104
|
+
color: pour.covered_with_solder_mask ? pcbColor : copperColor
|
|
15105
|
+
};
|
|
15106
|
+
boxes.push(box);
|
|
15107
|
+
}
|
|
15108
|
+
}
|
|
15045
15109
|
const cadComponents = db.cad_component?.list?.() ?? [];
|
|
15046
15110
|
const pcbComponentIdsWith3D = /* @__PURE__ */ new Set();
|
|
15047
15111
|
for (const cad of cadComponents) {
|