brepjs 20.12.4 → 20.12.6
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/2d/lib/offset.d.ts +1 -1
- package/dist/2d.cjs +6 -6
- package/dist/2d.js +6 -6
- package/dist/{adjacencyFns-54UTqtan.js → adjacencyFns--KmBIKYJ.js} +3 -3
- package/dist/{adjacencyFns-C_Vb1AeW.cjs → adjacencyFns-BFJfaUwX.cjs} +3 -3
- package/dist/{blueprint-DFpjcrlm.js → blueprint-BhIk9Pvm.js} +7 -8
- package/dist/{blueprint-D0VEeTzJ.cjs → blueprint-D83DDDPb.cjs} +7 -8
- package/dist/{blueprintFns-Douf5ZdX.cjs → blueprintFns-C4TQn-x_.cjs} +2 -2
- package/dist/{blueprintFns-Dye1jezD.js → blueprintFns-eULVgkq9.js} +2 -2
- package/dist/{blueprintSketcher-Cr0Lr1Dq.js → blueprintSketcher-D_Faf0GO.js} +32 -14
- package/dist/{blueprintSketcher-W9yON-UC.cjs → blueprintSketcher-Di376t-0.cjs} +32 -14
- package/dist/{boolean2D-C9VghXHG.cjs → boolean2D-CNZFI_y8.cjs} +4 -4
- package/dist/{boolean2D-CCV3R6lN.js → boolean2D-DqpCF72W.js} +4 -4
- package/dist/brepjs.cjs +128 -100
- package/dist/brepjs.js +128 -100
- package/dist/{cameraFns-DZOI_ewG.js → cameraFns-CrClIkmV.js} +3 -3
- package/dist/{cameraFns-x3L6dtA8.cjs → cameraFns-RqraCXIc.cjs} +3 -3
- package/dist/core.cjs +2 -2
- package/dist/core.js +2 -2
- package/dist/{cornerFinder-BY10jciz.js → cornerFinder-BZuQkRp2.js} +1 -1
- package/dist/{cornerFinder-B8PqO4um.cjs → cornerFinder-CdOe1Wrb.cjs} +1 -1
- package/dist/{curveFns-B4308HNM.js → curveFns-BP3srCfK.js} +1 -1
- package/dist/{curveFns-8lUhNquZ.cjs → curveFns-CyIvQNYT.cjs} +1 -1
- package/dist/{drawFns-C7zAvera.cjs → drawFns-71cOhWD-.cjs} +29 -16
- package/dist/{drawFns-DjnU3fEd.js → drawFns-DxDwJ5zZ.js} +29 -16
- package/dist/{faceFns-BjmlYcc9.cjs → faceFns-B7MiDYj1.cjs} +2 -2
- package/dist/{faceFns-7eHqNM0P.js → faceFns-iVPbTxki.js} +2 -2
- package/dist/{healingFns-BW7mZ_SW.js → healingFns-BhP8zfp1.js} +5 -5
- package/dist/{healingFns-CYLIcIWv.cjs → healingFns-DWljGTNR.cjs} +5 -5
- package/dist/{helpers-BQ6XMFcm.js → helpers-D2hANLRu.js} +14 -10
- package/dist/{helpers-De0Z_6iV.cjs → helpers-DKEVm6Hu.cjs} +14 -10
- package/dist/{importFns-BCL4-H8e.js → importFns-DUzIkns7.js} +2 -2
- package/dist/{importFns-3IMBHQrQ.cjs → importFns-KEPAgbjj.cjs} +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/io.cjs +2 -2
- package/dist/io.js +2 -2
- package/dist/kernel/bspline2dFit.d.ts +42 -0
- package/dist/kernel/geometry2d.d.ts +45 -0
- package/dist/kernel/occt/kernel2dOps.d.ts +1 -1
- package/dist/kernel/occtWasm/constructionOps.d.ts +1 -1
- package/dist/kernel/occtWasm/kernel2dOps.d.ts +7 -4
- package/dist/kernel/occtWasm/occtWasmAdapter.cjs +1 -1
- package/dist/kernel/occtWasm/occtWasmAdapter.d.ts +3 -3
- package/dist/kernel/occtWasm/occtWasmAdapter.js +1 -1
- package/dist/kernel/occtWasm/occtWasmTypes.d.ts +7 -0
- package/dist/{loftFns-DlG5oR0X.cjs → loftFns-D5AvfCGG.cjs} +17 -2
- package/dist/{loftFns-H4ZOpRAk.js → loftFns-D5NJpHLZ.js} +17 -2
- package/dist/{measureFns-Ce01LVwq.cjs → measureFns-CZHNWkiA.cjs} +102 -35
- package/dist/{measureFns-1IfNe629.js → measureFns-mxBdPiWa.js} +102 -35
- package/dist/measurement/measureFns.d.ts +3 -2
- package/dist/measurement.cjs +2 -2
- package/dist/measurement.js +2 -2
- package/dist/{meshFns-nEvfwNRF.cjs → meshFns-Czlt-GBJ.cjs} +3 -3
- package/dist/{meshFns-DaRZxa7B.js → meshFns-DmjMzNbH.js} +3 -3
- package/dist/{occtWasmAdapter-ipKUdNLN.js → occtWasmAdapter-B9d0Q0Vl.js} +1160 -261
- package/dist/{occtWasmAdapter-CRd9RFEu.cjs → occtWasmAdapter-DVxLkjlJ.cjs} +1171 -260
- package/dist/operations/patternFns.d.ts +6 -1
- package/dist/operations.cjs +2 -2
- package/dist/operations.js +2 -2
- package/dist/{originTrackingFns-zrksCJTa.js → originTrackingFns-CBnyKLm7.js} +2 -2
- package/dist/{originTrackingFns-9gyCMFFQ.cjs → originTrackingFns-CHymOLLm.cjs} +2 -2
- package/dist/{primitiveFns-BRXZ7jnP.cjs → primitiveFns-BVeBEaa4.cjs} +7 -14
- package/dist/{primitiveFns-ClQP6zMQ.js → primitiveFns-DeNl60Rw.js} +7 -14
- package/dist/{principalBoxFns-DsfWOoXg.js → principalBoxFns-3mW_hA6z.js} +3 -3
- package/dist/{principalBoxFns-tIv-crMB.cjs → principalBoxFns-CG6kG7vT.cjs} +3 -3
- package/dist/projection.cjs +1 -1
- package/dist/projection.js +1 -1
- package/dist/query/finderCore.d.ts +7 -7
- package/dist/query.cjs +2 -2
- package/dist/query.js +2 -2
- package/dist/{refResolveFns-BZdUlv9f.cjs → refResolveFns-BAs4p9z7.cjs} +6 -6
- package/dist/{refResolveFns-BG3JGs--.js → refResolveFns-DHx1Y3GG.js} +6 -6
- package/dist/{shapeFns-BbXqiNqY.cjs → shapeFns-C0w8vvfb.cjs} +2 -2
- package/dist/{shapeFns-BCgegapL.js → shapeFns-CgqKICF_.js} +2 -2
- package/dist/shapeRef.cjs +1 -1
- package/dist/shapeRef.js +1 -1
- package/dist/{shapeTypes-DJT3SnGK.cjs → shapeTypes-Dc7j-MYg.cjs} +10 -16
- package/dist/{shapeTypes-DAz6aAnJ.js → shapeTypes-DwvQUp9M.js} +10 -16
- package/dist/sketching/sketches.d.ts +2 -0
- package/dist/sketching.cjs +3 -3
- package/dist/sketching.js +3 -3
- package/dist/{solidBuilders-8xytLt8-.js → solidBuilders-DT1gpVWM.js} +5 -5
- package/dist/{solidBuilders-BWbqhbyv.cjs → solidBuilders-iS5DDwg8.cjs} +5 -5
- package/dist/{surfaceBuilders-CwG_RPdZ.cjs → surfaceBuilders-BvwSgD3C.cjs} +3 -3
- package/dist/{surfaceBuilders-BO96DMCH.js → surfaceBuilders-CPLe0bbk.js} +3 -3
- package/dist/text.cjs +2 -2
- package/dist/text.js +2 -2
- package/dist/{textBlueprints-Dhe8_Uvc.js → textBlueprints-BU0Rhk54.js} +19 -11
- package/dist/{textBlueprints-DHfYmLtP.cjs → textBlueprints-CNPCPJix.cjs} +19 -11
- package/dist/{textMetrics-CwYDH9js.cjs → textMetrics-C71g4TmO.cjs} +1 -1
- package/dist/{textMetrics-Bbf-Dllw.js → textMetrics-Df9aLYK2.js} +1 -1
- package/dist/{threadFns-B23RqugN.cjs → threadFns-CzXEnnmo.cjs} +37 -29
- package/dist/{threadFns-Cn7_bmux.js → threadFns-DESH7lcs.js} +36 -28
- package/dist/topology/apiTypes.d.ts +13 -7
- package/dist/topology.cjs +9 -9
- package/dist/topology.d.ts +1 -1
- package/dist/topology.js +9 -9
- package/dist/{topologyQueryFns-xh11vEQw.cjs → topologyQueryFns-5Frx8Y-0.cjs} +1 -1
- package/dist/{topologyQueryFns-BfYdGOJc.js → topologyQueryFns-LXV1nTaS.js} +1 -1
- package/dist/{validityTypes-CXkecqMw.cjs → validityTypes-C6rROGTP.cjs} +1 -1
- package/dist/{validityTypes-BfOuvfyp.js → validityTypes-DM-Iwe8N.js} +1 -1
- package/package.json +2 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
2
|
-
const require_occtWasmAdapter = require("./occtWasmAdapter-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
|
|
2
|
+
const require_occtWasmAdapter = require("./occtWasmAdapter-DVxLkjlJ.cjs");
|
|
3
3
|
const require_errors = require("./errors-O_blYTWT.cjs");
|
|
4
|
-
const require_topologyQueryFns = require("./topologyQueryFns-
|
|
4
|
+
const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
|
|
5
5
|
const require_constants = require("./constants-oee0S_x6.cjs");
|
|
6
|
-
const require_faceFns = require("./faceFns-
|
|
7
|
-
const require_solidBuilders = require("./solidBuilders-
|
|
6
|
+
const require_faceFns = require("./faceFns-B7MiDYj1.cjs");
|
|
7
|
+
const require_solidBuilders = require("./solidBuilders-iS5DDwg8.cjs");
|
|
8
8
|
const require_arrayAccess = require("./arrayAccess-DpJYARwv.cjs");
|
|
9
9
|
// src/topology/threeHelpers.ts
|
|
10
10
|
/**
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { q as getKernel, y as isFace } from "./shapeTypes-
|
|
1
|
+
import { q as getKernel, y as isFace } from "./shapeTypes-DwvQUp9M.js";
|
|
2
2
|
import { E as ok, g as err, o as queryError, x as isOk } from "./errors-BTccWbtE.js";
|
|
3
|
-
import { c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-
|
|
3
|
+
import { c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-LXV1nTaS.js";
|
|
4
4
|
import { t as DEG2RAD } from "./constants-iraOnb2p.js";
|
|
5
5
|
import { a as vecDot, d as vecNormalize } from "./vecOps-S-m9H_fe.js";
|
|
6
|
-
import { l as normalAt, s as getSurfaceType } from "./faceFns-
|
|
7
|
-
import { a as isSameShape, n as getHashCode } from "./shapeFns-
|
|
8
|
-
import { f as getCurveType, i as curveIsClosed, o as curveLength } from "./curveFns-
|
|
9
|
-
import { n as measureArea } from "./measureFns-
|
|
6
|
+
import { l as normalAt, s as getSurfaceType } from "./faceFns-iVPbTxki.js";
|
|
7
|
+
import { a as isSameShape, n as getHashCode } from "./shapeFns-CgqKICF_.js";
|
|
8
|
+
import { f as getCurveType, i as curveIsClosed, o as curveLength } from "./curveFns-BP3srCfK.js";
|
|
9
|
+
import { n as measureArea } from "./measureFns-mxBdPiWa.js";
|
|
10
10
|
// src/utils/vec2d.ts
|
|
11
11
|
/** Precision for curve intersection and parameter operations. */
|
|
12
12
|
var PRECISION_INTERSECTION = 1e-9;
|
|
@@ -216,11 +216,15 @@ function resolveDir(dir) {
|
|
|
216
216
|
* with a vertex constructed at the reference point.
|
|
217
217
|
*/
|
|
218
218
|
function distanceFromPointFilter(distance, point, tolerance) {
|
|
219
|
-
const kernel = getKernel();
|
|
220
|
-
const vtx = kernel.makeVertex(point[0], point[1], point[2]);
|
|
221
219
|
return (element) => {
|
|
222
|
-
const
|
|
223
|
-
|
|
220
|
+
const kernel = getKernel();
|
|
221
|
+
const vtx = kernel.makeVertex(point[0], point[1], point[2]);
|
|
222
|
+
try {
|
|
223
|
+
const d = kernel.distance(vtx, element.wrapped).value;
|
|
224
|
+
return Math.abs(d - distance) < tolerance;
|
|
225
|
+
} finally {
|
|
226
|
+
kernel.dispose(vtx);
|
|
227
|
+
}
|
|
224
228
|
};
|
|
225
229
|
}
|
|
226
230
|
// src/query/shapeFinders.ts
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
|
|
2
2
|
const require_errors = require("./errors-O_blYTWT.cjs");
|
|
3
|
-
const require_topologyQueryFns = require("./topologyQueryFns-
|
|
3
|
+
const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
|
|
4
4
|
const require_constants = require("./constants-oee0S_x6.cjs");
|
|
5
5
|
const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
|
|
6
|
-
const require_faceFns = require("./faceFns-
|
|
7
|
-
const require_shapeFns = require("./shapeFns-
|
|
8
|
-
const require_curveFns = require("./curveFns-
|
|
9
|
-
const require_measureFns = require("./measureFns-
|
|
6
|
+
const require_faceFns = require("./faceFns-B7MiDYj1.cjs");
|
|
7
|
+
const require_shapeFns = require("./shapeFns-C0w8vvfb.cjs");
|
|
8
|
+
const require_curveFns = require("./curveFns-CyIvQNYT.cjs");
|
|
9
|
+
const require_measureFns = require("./measureFns-CZHNWkiA.cjs");
|
|
10
10
|
// src/utils/vec2d.ts
|
|
11
11
|
/** Precision for curve intersection and parameter operations. */
|
|
12
12
|
var PRECISION_INTERSECTION = 1e-9;
|
|
@@ -216,11 +216,15 @@ function resolveDir(dir) {
|
|
|
216
216
|
* with a vertex constructed at the reference point.
|
|
217
217
|
*/
|
|
218
218
|
function distanceFromPointFilter(distance, point, tolerance) {
|
|
219
|
-
const kernel = require_shapeTypes.getKernel();
|
|
220
|
-
const vtx = kernel.makeVertex(point[0], point[1], point[2]);
|
|
221
219
|
return (element) => {
|
|
222
|
-
const
|
|
223
|
-
|
|
220
|
+
const kernel = require_shapeTypes.getKernel();
|
|
221
|
+
const vtx = kernel.makeVertex(point[0], point[1], point[2]);
|
|
222
|
+
try {
|
|
223
|
+
const d = kernel.distance(vtx, element.wrapped).value;
|
|
224
|
+
return Math.abs(d - distance) < tolerance;
|
|
225
|
+
} finally {
|
|
226
|
+
kernel.dispose(vtx);
|
|
227
|
+
}
|
|
224
228
|
};
|
|
225
229
|
}
|
|
226
230
|
// src/query/shapeFinders.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as castResultShape, q as getKernel } from "./shapeTypes-
|
|
1
|
+
import { n as castResultShape, q as getKernel } from "./shapeTypes-DwvQUp9M.js";
|
|
2
2
|
import { i as wasmIndex, r as vec3At$1 } from "./bug-ClMTAJhe.js";
|
|
3
3
|
import { E as ok, g as err, r as ioError, t as BrepErrorCode } from "./errors-BTccWbtE.js";
|
|
4
4
|
import { n as getAtOrThrow } from "./arrayAccess-BpgouNir.js";
|
|
5
|
-
import { c as make2dBezierCurve, h as make2dThreePointArc, p as make2dSegmentCurve, t as Blueprint } from "./blueprint-
|
|
5
|
+
import { c as make2dBezierCurve, h as make2dThreePointArc, p as make2dSegmentCurve, t as Blueprint } from "./blueprint-BhIk9Pvm.js";
|
|
6
6
|
// src/io/objExportFns.ts
|
|
7
7
|
/** Read a vec3 from a typed array at the given vertex index. */
|
|
8
8
|
function vec3At(arr, i) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
|
|
2
2
|
const require_bug = require("./bug-CBcpIPuf.cjs");
|
|
3
3
|
const require_errors = require("./errors-O_blYTWT.cjs");
|
|
4
4
|
const require_arrayAccess = require("./arrayAccess-DpJYARwv.cjs");
|
|
5
|
-
const require_blueprint = require("./blueprint-
|
|
5
|
+
const require_blueprint = require("./blueprint-D83DDDPb.cjs");
|
|
6
6
|
// src/io/objExportFns.ts
|
|
7
7
|
/** Read a vec3 from a typed array at the given vertex index. */
|
|
8
8
|
function vec3At(arr, i) {
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { currentQuality } from './kernel/quality.js';
|
|
|
6
6
|
export type { QualityLevel } from './kernel/quality.js';
|
|
7
7
|
export { EXACT_BREP_CAPABILITIES, DEFAULT_CAPABILITIES } from './kernel/capabilities.js';
|
|
8
8
|
export type { KernelCapabilities, TessellationModel } from './kernel/capabilities.js';
|
|
9
|
-
export type { KernelAdapter, BrepkitHandle, OcctWasmHandle, OcctWasmModule, OcctKernelWasm, SurfaceType, ShapeOrientation, ShapeType, KernelBooleanOps, KernelBuilderOps, KernelCore, KernelCurveOps, KernelEvolutionOps, KernelIOOps, KernelMeasureOps, KernelMeshOps, KernelModifierOps, KernelPrimitiveOps, KernelRepairOps, KernelSurfaceOps, KernelSweepOps, KernelTopologyOps, KernelTransformOps, } from './kernel/index.js';
|
|
9
|
+
export type { KernelAdapter, BrepkitHandle, OcctWasmHandle, OcctWasmModule, OcctKernelWasm, SurfaceType as KernelSurfaceType, ShapeOrientation, ShapeType, KernelBooleanOps, KernelBuilderOps, KernelCore, KernelCurveOps, KernelEvolutionOps, KernelIOOps, KernelMeasureOps, KernelMeshOps, KernelModifierOps, KernelPrimitiveOps, KernelRepairOps, KernelSurfaceOps, KernelSweepOps, KernelTopologyOps, KernelTransformOps, } from './kernel/index.js';
|
|
10
10
|
export { supportsProjection, supportsConstraintSketch } from './kernel/index.js';
|
|
11
11
|
export type { ProjectionCapability, ConstraintSketchCapability } from './kernel/index.js';
|
|
12
12
|
export { getPerformanceStats, resetPerformanceStats } from './kernel/index.js';
|
|
@@ -93,7 +93,7 @@ export { facesOfEdge, edgesOfFace, wiresOfFace, verticesOfEdge, verticesOfFace,
|
|
|
93
93
|
export { getCurveType, curveStartPoint, curveEndPoint, curvePointAt, curveTangentAt, curveAxis, curveLength, curveIsClosed, curveIsPeriodic, curvePeriod, getOrientation, flipOrientation, offsetWire2D, interpolateCurve, approximateCurve, type InterpolateCurveOptions, type ApproximateCurveOptions, } from './topology/curveFns.js';
|
|
94
94
|
export { getNurbsCurveData, getNurbsSurfaceData } from './topology/nurbsFns.js';
|
|
95
95
|
export type { NurbsCurveData, NurbsSurfaceData } from './kernel/types.js';
|
|
96
|
-
export { getSurfaceType, faceGeomType, faceOrientation, flipFaceOrientation, uvBounds, pointOnSurface, uvCoordinates, normalAt, faceCenter, faceAxis, classifyPointOnFace, outerWire, innerWires, removeHolesFromFace, projectPointOnFace, type UVBounds, type PointProjectionResult, } from './topology/faceFns.js';
|
|
96
|
+
export { getSurfaceType, faceGeomType, faceOrientation, flipFaceOrientation, uvBounds, pointOnSurface, uvCoordinates, normalAt, faceCenter, faceAxis, classifyPointOnFace, outerWire, innerWires, removeHolesFromFace, projectPointOnFace, type SurfaceType, type UVBounds, type PointProjectionResult, } from './topology/faceFns.js';
|
|
97
97
|
export { exportSTEP, exportSTL, exportIGES, meshMultiLOD, meshLODs, meshLODsProgressive, type ShapeMesh, type EdgeMesh, type MeshOptions, type MultiLODMesh, type LODMesh, type MeshLODsOptions, type MeshLODsProgressiveOptions, type MeshLevelFn, } from './topology/meshFns.js';
|
|
98
98
|
export { clearMeshCache, createMeshCache, type MeshCacheContext } from './topology/meshCache.js';
|
|
99
99
|
export { toBufferGeometryData, toLineGeometryData, toGroupedBufferGeometryData, type BufferGeometryData, type LineGeometryData, type GroupedBufferGeometryData, type BufferGeometryGroup, toLODGeometryData, type LODGeometryData, toLODGeometryLevels, type LODGeometryLevel, } from './topology/threeHelpers.js';
|
package/dist/io.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_meshFns = require("./meshFns-
|
|
3
|
-
const require_importFns = require("./importFns-
|
|
2
|
+
const require_meshFns = require("./meshFns-Czlt-GBJ.cjs");
|
|
3
|
+
const require_importFns = require("./importFns-KEPAgbjj.cjs");
|
|
4
4
|
exports.blueprintToDXF = require_importFns.blueprintToDXF;
|
|
5
5
|
exports.exportDXF = require_importFns.exportDXF;
|
|
6
6
|
exports.exportGlb = require_importFns.exportGlb;
|
package/dist/io.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as exportSTEP, r as exportSTL, t as exportIGES } from "./meshFns-
|
|
2
|
-
import { a as importSVG, c as blueprintToDXF, d as exportGltf, f as exportOBJ, i as exportSTEPConfigured, l as exportDXF, n as importSTEP, o as importSVGPathD, r as importSTL, s as exportThreeMF, t as importIGES, u as exportGlb } from "./importFns-
|
|
1
|
+
import { n as exportSTEP, r as exportSTL, t as exportIGES } from "./meshFns-DmjMzNbH.js";
|
|
2
|
+
import { a as importSVG, c as blueprintToDXF, d as exportGltf, f as exportOBJ, i as exportSTEPConfigured, l as exportDXF, n as importSTEP, o as importSVGPathD, r as importSTL, s as exportThreeMF, t as importIGES, u as exportGlb } from "./importFns-DUzIkns7.js";
|
|
3
3
|
export { blueprintToDXF, exportDXF, exportGlb, exportGltf, exportIGES, exportOBJ, exportSTEP, exportSTEPConfigured, exportSTL, exportThreeMF, importIGES, importSTEP, importSTL, importSVG, importSVGPathD };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Bezier2d, BSpline2d } from './geometry2d.js';
|
|
2
|
+
type Pt = [number, number];
|
|
3
|
+
/**
|
|
4
|
+
* Interpolate `points` with a clamped B-spline of `degree` (capped at
|
|
5
|
+
* `points.length - 1`). `params` are the increasing curve parameters assigned to
|
|
6
|
+
* the points, normalised to [0, 1]; chord length when omitted.
|
|
7
|
+
*/
|
|
8
|
+
export declare function interpolateBSpline2d(points: readonly Pt[], degree?: number, params?: readonly number[]): BSpline2d;
|
|
9
|
+
interface FitOptions {
|
|
10
|
+
readonly degree?: number;
|
|
11
|
+
readonly minSegments?: number;
|
|
12
|
+
readonly maxSegments?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Parameters in (s0, s1) where the curve may change abruptly, such as a
|
|
15
|
+
* source B-spline's knots. Each piece between them is fitted on its own, so
|
|
16
|
+
* a feature narrower than the sample spacing cannot fall between samples.
|
|
17
|
+
*/
|
|
18
|
+
readonly breaks?: readonly number[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Approximate the parametric curve `evaluate` over [s0, s1] by interpolating
|
|
22
|
+
* uniformly spaced samples, doubling the sample count until the interpolant is
|
|
23
|
+
* within `tolerance` of the curve at every mid-sample parameter (or the
|
|
24
|
+
* segment cap is reached). With `breaks`, each piece between them is fitted
|
|
25
|
+
* separately and the pieces are joined. The B-spline runs over [0, 1] in step
|
|
26
|
+
* with s.
|
|
27
|
+
*/
|
|
28
|
+
export declare function fitBSpline2d(evaluate: (s: number) => Pt, s0: number, s1: number, tolerance: number, options?: FitOptions): BSpline2d;
|
|
29
|
+
/** The B-spline form of a Bezier; a B-spline is returned as is. */
|
|
30
|
+
export declare function asBSpline2d(c: Bezier2d | BSpline2d): BSpline2d;
|
|
31
|
+
/**
|
|
32
|
+
* The part of a clamped B-spline over [lo, hi] (inside its knot range, lo < hi)
|
|
33
|
+
* as a clamped B-spline of its own, exact by knot insertion.
|
|
34
|
+
*/
|
|
35
|
+
export declare function subBSpline2d(c: BSpline2d, lo: number, hi: number): BSpline2d;
|
|
36
|
+
/**
|
|
37
|
+
* Bezier poles of every non-empty knot span (The NURBS Book A5.6). A malformed
|
|
38
|
+
* knot vector yields the whole control polygon as one segment, which still
|
|
39
|
+
* bounds the curve.
|
|
40
|
+
*/
|
|
41
|
+
export declare function bezierSegments2d(c: BSpline2d): Pt[][];
|
|
42
|
+
export {};
|
|
@@ -69,6 +69,18 @@ export declare function curveBounds(c: Curve2dObj): {
|
|
|
69
69
|
last: number;
|
|
70
70
|
};
|
|
71
71
|
export declare function curveTypeName(c: Curve2dObj): string;
|
|
72
|
+
/**
|
|
73
|
+
* Collapse nested trimmed wrappers into a single trimmed curve over a
|
|
74
|
+
* non-trimmed basis (or return the curve itself when it is not trimmed).
|
|
75
|
+
* Evaluation is unchanged: both forms map t in [0, 1] to the same basis point.
|
|
76
|
+
*/
|
|
77
|
+
export declare function flattenTrimmed(c: Curve2dObj): Curve2dObj;
|
|
78
|
+
/**
|
|
79
|
+
* The same geometry traversed in the opposite direction (OCCT `Geom2d_Curve::Reversed`).
|
|
80
|
+
* Trimmed curves keep an increasing trim range: the basis is reversed and the
|
|
81
|
+
* range is remapped onto it.
|
|
82
|
+
*/
|
|
83
|
+
export declare function reverseCurve2d(c: Curve2dObj): Curve2dObj;
|
|
72
84
|
export declare function makeLine2d(x1: number, y1: number, x2: number, y2: number): Line2d;
|
|
73
85
|
export declare function makeCircle2d(cx: number, cy: number, radius: number, sense?: boolean): Circle2d;
|
|
74
86
|
export declare function makeArc2dThreePoints(x1: number, y1: number, xm: number, ym: number, x2: number, y2: number): Curve2dObj;
|
|
@@ -80,6 +92,39 @@ export declare function rotateCurve2d(c: Curve2dObj, angle: number, cx: number,
|
|
|
80
92
|
export declare function scaleCurve2d(c: Curve2dObj, factor: number, cx: number, cy: number): Curve2dObj;
|
|
81
93
|
export declare function mirrorAtPoint(c: Curve2dObj, cx: number, cy: number): Curve2dObj;
|
|
82
94
|
export declare function mirrorAcrossAxis(c: Curve2dObj, ox: number, oy: number, dx: number, dy: number): Curve2dObj;
|
|
95
|
+
/** The affine map x' = a*x + b*y + tx, y' = c*x + d*y + ty. */
|
|
96
|
+
export interface Affine2d {
|
|
97
|
+
readonly a: number;
|
|
98
|
+
readonly b: number;
|
|
99
|
+
readonly c: number;
|
|
100
|
+
readonly d: number;
|
|
101
|
+
readonly tx: number;
|
|
102
|
+
readonly ty: number;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Exact image of a curve under an affine map (OCCT `Geom2d_Curve::Transformed`
|
|
106
|
+
* with a `gp_GTrsf2d`): lines stay lines, circles and ellipses become ellipses
|
|
107
|
+
* (or circles), and pole-based curves map their poles.
|
|
108
|
+
*/
|
|
109
|
+
export declare function affineCurve2d(c: Curve2dObj, m: Affine2d): Curve2dObj;
|
|
110
|
+
/**
|
|
111
|
+
* Parameters of `c`, in its own parameter range, at the interior knots of its
|
|
112
|
+
* B-spline basis: where a fit of the curve (or of its offset) must sample.
|
|
113
|
+
*/
|
|
114
|
+
export declare function curveKnotParams(c: Curve2dObj): number[];
|
|
115
|
+
/**
|
|
116
|
+
* Offset `distance` to the right of the direction of travel (OCCT
|
|
117
|
+
* `Geom2d_OffsetCurve`: a counter-clockwise circle grows). Lines and circles
|
|
118
|
+
* are offset exactly; other curves are fitted within `tolerance` (by default
|
|
119
|
+
* relative to the curve's size).
|
|
120
|
+
*/
|
|
121
|
+
export declare function offsetCurve2d(c: Curve2dObj, distance: number, tolerance?: number): Curve2dObj;
|
|
122
|
+
/**
|
|
123
|
+
* Minimum distance between c1 over [from1, to1] and c2 over [from2, to2]
|
|
124
|
+
* (OCCT `Geom2dAPI_ExtremaCurveCurve`): every local minimum of a sampled
|
|
125
|
+
* distance grid seeds a Gauss-Newton refinement.
|
|
126
|
+
*/
|
|
127
|
+
export declare function distanceBetweenCurves2d(c1: Curve2dObj, c2: Curve2dObj, from1: number, to1: number, from2: number, to2: number): number;
|
|
83
128
|
/**
|
|
84
129
|
* Compute intersection points (and overlapping segments) between two 2D curves.
|
|
85
130
|
* Handles analytic cases (line-line, line-circle, circle-circle) and falls back
|
|
@@ -24,7 +24,7 @@ export declare function getCurve2dBounds(curve: Curve2dHandle): {
|
|
|
24
24
|
};
|
|
25
25
|
export declare function getCurve2dType(curve: Curve2dHandle): string;
|
|
26
26
|
export declare function trimCurve2d(curve: Curve2dHandle, start: number, end: number): Curve2dHandle;
|
|
27
|
-
export declare function reverseCurve2d(
|
|
27
|
+
export declare function reverseCurve2d(curve: Curve2dHandle): void;
|
|
28
28
|
export declare function copyCurve2d(curve: Curve2dHandle): Curve2dHandle;
|
|
29
29
|
export declare function offsetCurve2d(curve: Curve2dHandle, offset: number): Curve2dHandle;
|
|
30
30
|
export declare function translateCurve2d(curve: Curve2dHandle, dx: number, dy: number): Curve2dHandle;
|
|
@@ -14,7 +14,7 @@ export declare function makeEllipseEdge(k: OcctKernelWasm, center: Vec3, normal:
|
|
|
14
14
|
export declare function makeEllipseArc(k: OcctKernelWasm, center: Vec3, normal: Vec3, majorRadius: number, minorRadius: number, startAngle: number, endAngle: number, xDir?: Vec3): KernelShape;
|
|
15
15
|
export declare function makeBezierEdge(k: OcctKernelWasm, Module: OcctWasmModule, points: [number, number, number][]): KernelShape;
|
|
16
16
|
export declare function makeTangentArc(k: OcctKernelWasm, startPoint: [number, number, number], startTangent: [number, number, number], endPoint: [number, number, number]): KernelShape;
|
|
17
|
-
export declare function makeHelixWire(k: OcctKernelWasm, pitch: number, height: number, radius: number, center?: [number, number, number], direction?: [number, number, number]): KernelShape;
|
|
17
|
+
export declare function makeHelixWire(k: OcctKernelWasm, pitch: number, height: number, radius: number, center?: [number, number, number], direction?: [number, number, number], leftHanded?: boolean): KernelShape;
|
|
18
18
|
export declare function makeCompound(k: OcctKernelWasm, Module: OcctWasmModule, shapes: KernelShape[]): KernelShape;
|
|
19
19
|
export declare function solidFromShell(k: OcctKernelWasm, shell: KernelShape): KernelShape;
|
|
20
20
|
export declare function buildSolidFromFaces(k: OcctKernelWasm, Module: OcctWasmModule, points: Array<{
|
|
@@ -31,7 +31,7 @@ export declare function getCurve2dBounds(curve: Curve2dHandle): {
|
|
|
31
31
|
};
|
|
32
32
|
export declare function getCurve2dType(curve: Curve2dHandle): string;
|
|
33
33
|
export declare function trimCurve2d(curve: Curve2dHandle, start: number, end: number): Curve2dHandle;
|
|
34
|
-
export declare function reverseCurve2d(
|
|
34
|
+
export declare function reverseCurve2d(curve: Curve2dHandle): void;
|
|
35
35
|
export declare function copyCurve2d(curve: Curve2dHandle): Curve2dHandle;
|
|
36
36
|
export declare function offsetCurve2d(curve: Curve2dHandle, offset: number): Curve2dHandle;
|
|
37
37
|
export declare function translateCurve2d(curve: Curve2dHandle, dx: number, dy: number): Curve2dHandle;
|
|
@@ -42,8 +42,7 @@ export declare function mirrorCurve2dAcrossAxis(curve: Curve2dHandle, originX: n
|
|
|
42
42
|
/**
|
|
43
43
|
* Directional affinity matching OCCT `gp_GTrsf2d::SetAffinity`: scales the
|
|
44
44
|
* component perpendicular to the axis `(dx, dy)` through `(ox, oy)` by `ratio`,
|
|
45
|
-
* leaving the parallel component fixed.
|
|
46
|
-
* Bezier, since occt-wasm has no native Geom2d transform.
|
|
45
|
+
* leaving the parallel component fixed.
|
|
47
46
|
*/
|
|
48
47
|
export declare function affinityCurve2d(curve: Curve2dHandle, ox: number, oy: number, dx: number, dy: number, ratio: number): Curve2dHandle;
|
|
49
48
|
export declare function affinityTransform2d(curve: Curve2dHandle, ox: number, oy: number, dx: number, dy: number, ratio: number): Curve2dHandle;
|
|
@@ -65,7 +64,11 @@ export declare function projectPointOnCurve2d(curve: Curve2dHandle, x: number, y
|
|
|
65
64
|
distance: number;
|
|
66
65
|
} | null;
|
|
67
66
|
export declare function distanceBetweenCurves2d(c1: Curve2dHandle, c2: Curve2dHandle, p1Start: number, p1End: number, p2Start: number, p2End: number): number;
|
|
68
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Degree <= 3 B-spline within `tolerance` of the curve (Geom2dConvert_ApproxCurve
|
|
69
|
+
* with MaxDegree 3, as brepjs calls it); exact where the curve already is one.
|
|
70
|
+
*/
|
|
71
|
+
export declare function approximateCurve2dAsBSpline(curve: Curve2dHandle, tolerance: number, maxSegments: number): Curve2dHandle;
|
|
69
72
|
export declare function decomposeBSpline2dToBeziers(curve: Curve2dHandle): Curve2dHandle[];
|
|
70
73
|
export declare function createBoundingBox2d(): BBox2dHandle;
|
|
71
74
|
export declare function addCurveToBBox2d(bbox: BBox2dHandle, curve: Curve2dHandle, tolerance: number): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_occtWasmAdapter = require("../../occtWasmAdapter-
|
|
2
|
+
const require_occtWasmAdapter = require("../../occtWasmAdapter-DVxLkjlJ.cjs");
|
|
3
3
|
exports.OcctWasmAdapter = require_occtWasmAdapter.OcctWasmAdapter;
|
|
@@ -96,7 +96,7 @@ export declare class OcctWasmAdapter implements KernelAdapter {
|
|
|
96
96
|
makeEllipseArc(center: [number, number, number], normal: [number, number, number], majorRadius: number, minorRadius: number, startAngle: number, endAngle: number, xDir?: [number, number, number]): KernelShape;
|
|
97
97
|
makeBezierEdge(points: [number, number, number][]): KernelShape;
|
|
98
98
|
makeTangentArc(startPoint: [number, number, number], startTangent: [number, number, number], endPoint: [number, number, number]): KernelShape;
|
|
99
|
-
makeHelixWire(pitch: number, height: number, radius: number, center?: [number, number, number], direction?: [number, number, number],
|
|
99
|
+
makeHelixWire(pitch: number, height: number, radius: number, center?: [number, number, number], direction?: [number, number, number], leftHanded?: boolean): KernelShape;
|
|
100
100
|
makeWireFromMixed(items: KernelShape[]): KernelShape;
|
|
101
101
|
makeCompound(shapes: KernelShape[]): KernelShape;
|
|
102
102
|
solidFromShell(shell: KernelShape): KernelShape;
|
|
@@ -390,7 +390,7 @@ export declare class OcctWasmAdapter implements KernelAdapter {
|
|
|
390
390
|
makeEllipse2d(cx: number, cy: number, majorRadius: number, minorRadius: number, xDirX?: number, xDirY?: number, sense?: boolean): Curve2dHandle;
|
|
391
391
|
makeEllipseArc2d(cx: number, cy: number, majorRadius: number, minorRadius: number, startAngle: number, endAngle: number, xDirX?: number, xDirY?: number, sense?: boolean): Curve2dHandle;
|
|
392
392
|
makeBezier2d(points: [number, number][]): Curve2dHandle;
|
|
393
|
-
makeBSpline2d(points: [number, number][],
|
|
393
|
+
makeBSpline2d(points: [number, number][], options?: {
|
|
394
394
|
degMin?: number;
|
|
395
395
|
degMax?: number;
|
|
396
396
|
continuity?: 'C0' | 'C1' | 'C2' | 'C3';
|
|
@@ -435,7 +435,7 @@ export declare class OcctWasmAdapter implements KernelAdapter {
|
|
|
435
435
|
distance: number;
|
|
436
436
|
} | null;
|
|
437
437
|
distanceBetweenCurves2d(c1: Curve2dHandle, c2: Curve2dHandle, p1Start: number, p1End: number, p2Start: number, p2End: number): number;
|
|
438
|
-
approximateCurve2dAsBSpline(curve: Curve2dHandle,
|
|
438
|
+
approximateCurve2dAsBSpline(curve: Curve2dHandle, tolerance: number, _continuity: 'C0' | 'C1' | 'C2' | 'C3', maxSegments: number): Curve2dHandle;
|
|
439
439
|
decomposeBSpline2dToBeziers(curve: Curve2dHandle): Curve2dHandle[];
|
|
440
440
|
createBoundingBox2d(): BBox2dHandle;
|
|
441
441
|
addCurveToBBox2d(bbox: BBox2dHandle, curve: Curve2dHandle, tolerance: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as OcctWasmAdapter } from "../../occtWasmAdapter-
|
|
1
|
+
export { t as OcctWasmAdapter } from "../../occtWasmAdapter-B9d0Q0Vl.js";
|
|
@@ -170,8 +170,15 @@ export interface OcctKernelWasm {
|
|
|
170
170
|
/** occt-wasm 5.8+: like makeEllipseArc with the major axis along (xx, xy, xz). */
|
|
171
171
|
makeEllipseArcOriented?(cx: number, cy: number, cz: number, nx: number, ny: number, nz: number, xx: number, xy: number, xz: number, majorRadius: number, minorRadius: number, startAngle: number, endAngle: number): number;
|
|
172
172
|
makeBezierEdge(flatPoints: EmVectorDouble): number;
|
|
173
|
+
/** occt-wasm 5.8+: non-rational when `weights` is empty; poles are flat xyz triples. */
|
|
174
|
+
makeBSplineEdge?(poles: EmVectorDouble, weights: EmVectorDouble, knots: EmVectorDouble, multiplicities: EmVectorInt, degree: number, periodic: boolean): number;
|
|
173
175
|
makeTangentArc(x1: number, y1: number, z1: number, tx: number, ty: number, tz: number, x2: number, y2: number, z2: number): number;
|
|
174
176
|
makeHelixWire(px: number, py: number, pz: number, dx: number, dy: number, dz: number, pitch: number, height: number, radius: number): number;
|
|
177
|
+
/**
|
|
178
|
+
* {@link makeHelixWire} with an explicit winding. Optional: absent on WASM
|
|
179
|
+
* builds older than occt-wasm 4.3.0, so callers must feature-detect it.
|
|
180
|
+
*/
|
|
181
|
+
makeHelixWireHanded?(px: number, py: number, pz: number, dx: number, dy: number, dz: number, pitch: number, height: number, radius: number, leftHanded: boolean): number;
|
|
175
182
|
makeWire(edgeIds: EmVectorUint32): number;
|
|
176
183
|
makeFace(wireId: number): number;
|
|
177
184
|
makeNonPlanarFace(wireId: number): number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
|
|
2
2
|
const require_errors = require("./errors-O_blYTWT.cjs");
|
|
3
3
|
const require_types = require("./types-CjF9Rofr.cjs");
|
|
4
4
|
const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
|
|
@@ -40,6 +40,14 @@ function makeSpineWire(start, end) {
|
|
|
40
40
|
kernel.dispose(edge);
|
|
41
41
|
return require_shapeTypes.castResultShape(wire);
|
|
42
42
|
}
|
|
43
|
+
/** A planar face bounded by `wire`, or `null` when the wire does not span one. */
|
|
44
|
+
function planarFaceOf(wire) {
|
|
45
|
+
try {
|
|
46
|
+
return require_shapeTypes.getKernel().makeFace(wire.wrapped, true);
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
43
51
|
/** Build a helix wire for twist extrusion. */
|
|
44
52
|
function makeHelixWire(pitch, height, radius, center, dir, leftHanded = false) {
|
|
45
53
|
const kernel = require_shapeTypes.getKernel();
|
|
@@ -87,7 +95,14 @@ function castSweepShellTuple(result) {
|
|
|
87
95
|
*/
|
|
88
96
|
function sweep(wire, spine, config = {}, shellMode = false) {
|
|
89
97
|
if (config.mode === "simple" && !shellMode) {
|
|
90
|
-
const
|
|
98
|
+
const kernel = require_shapeTypes.getKernel();
|
|
99
|
+
const profileFace = planarFaceOf(wire);
|
|
100
|
+
let resultOc;
|
|
101
|
+
try {
|
|
102
|
+
resultOc = kernel.simplePipe(profileFace ?? wire.wrapped, spine.wrapped);
|
|
103
|
+
} finally {
|
|
104
|
+
if (profileFace) kernel.dispose(profileFace);
|
|
105
|
+
}
|
|
91
106
|
const shape = require_shapeTypes.castResultShape(resultOc);
|
|
92
107
|
if (!require_shapeTypes.isShape3D(shape)) {
|
|
93
108
|
require_shapeTypes.disposeResultShape(shape);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as _usingCtx, T as isWire, h as disposeResultShape, n as castResultShape, q as getKernel, x as isShape3D } from "./shapeTypes-
|
|
1
|
+
import { G as _usingCtx, T as isWire, h as disposeResultShape, n as castResultShape, q as getKernel, x as isShape3D } from "./shapeTypes-DwvQUp9M.js";
|
|
2
2
|
import { E as ok, b as isErr, d as validationError, g as err, i as kernelError, l as typeCastError, t as BrepErrorCode } from "./errors-BTccWbtE.js";
|
|
3
3
|
import { r as toVec3 } from "./types-CKXsIm9-.js";
|
|
4
4
|
import { c as vecLength, t as vecAdd } from "./vecOps-S-m9H_fe.js";
|
|
@@ -40,6 +40,14 @@ function makeSpineWire(start, end) {
|
|
|
40
40
|
kernel.dispose(edge);
|
|
41
41
|
return castResultShape(wire);
|
|
42
42
|
}
|
|
43
|
+
/** A planar face bounded by `wire`, or `null` when the wire does not span one. */
|
|
44
|
+
function planarFaceOf(wire) {
|
|
45
|
+
try {
|
|
46
|
+
return getKernel().makeFace(wire.wrapped, true);
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
43
51
|
/** Build a helix wire for twist extrusion. */
|
|
44
52
|
function makeHelixWire(pitch, height, radius, center, dir, leftHanded = false) {
|
|
45
53
|
const kernel = getKernel();
|
|
@@ -87,7 +95,14 @@ function castSweepShellTuple(result) {
|
|
|
87
95
|
*/
|
|
88
96
|
function sweep(wire, spine, config = {}, shellMode = false) {
|
|
89
97
|
if (config.mode === "simple" && !shellMode) {
|
|
90
|
-
const
|
|
98
|
+
const kernel = getKernel();
|
|
99
|
+
const profileFace = planarFaceOf(wire);
|
|
100
|
+
let resultOc;
|
|
101
|
+
try {
|
|
102
|
+
resultOc = kernel.simplePipe(profileFace ?? wire.wrapped, spine.wrapped);
|
|
103
|
+
} finally {
|
|
104
|
+
if (profileFace) kernel.dispose(profileFace);
|
|
105
|
+
}
|
|
91
106
|
const shape = castResultShape(resultOc);
|
|
92
107
|
if (!isShape3D(shape)) {
|
|
93
108
|
disposeResultShape(shape);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
|
|
2
2
|
const require_errors = require("./errors-O_blYTWT.cjs");
|
|
3
|
-
const require_topologyQueryFns = require("./topologyQueryFns-
|
|
4
|
-
const require_faceFns = require("./faceFns-
|
|
3
|
+
const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
|
|
4
|
+
const require_faceFns = require("./faceFns-B7MiDYj1.cjs");
|
|
5
5
|
// src/measurement/measureCache.ts
|
|
6
6
|
var cache = /* @__PURE__ */ new WeakMap();
|
|
7
7
|
function getCachedMeasurement(shape, key) {
|
|
@@ -27,6 +27,66 @@ function nullShapeErr(fn) {
|
|
|
27
27
|
return require_errors.err(require_errors.validationError(require_errors.BrepErrorCode.NULL_SHAPE_INPUT, `${fn}: shape is a null shape`));
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
+
* Run `fn` on fresh handles to the distinct sub-shapes of `type`, releasing them
|
|
31
|
+
* afterwards. Unlike getFaces and friends this leaves the shape's topology cache
|
|
32
|
+
* alone, so a measurement allocates nothing that outlives it.
|
|
33
|
+
*/
|
|
34
|
+
function withSubShapes(shape, type, fn) {
|
|
35
|
+
const kernel = require_shapeTypes.getKernel();
|
|
36
|
+
const items = kernel.iterShapes(shape.wrapped, type);
|
|
37
|
+
try {
|
|
38
|
+
return fn(items);
|
|
39
|
+
} finally {
|
|
40
|
+
for (const item of items) kernel.dispose(item);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Run `fn` on a throwaway compound of `parts`, releasing the compound afterwards. */
|
|
44
|
+
function withCompoundOf(parts, fn) {
|
|
45
|
+
const kernel = require_shapeTypes.getKernel();
|
|
46
|
+
const c = kernel.makeCompound(parts);
|
|
47
|
+
try {
|
|
48
|
+
return fn(c);
|
|
49
|
+
} finally {
|
|
50
|
+
kernel.dispose(c);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function volumeOf(target) {
|
|
54
|
+
const kernel = require_shapeTypes.getKernel();
|
|
55
|
+
const m = kernel.volume(target);
|
|
56
|
+
const comResult = require_topologyQueryFns.kernelCallRaw(() => kernel.centerOfMass(target), require_errors.BrepErrorCode.CENTER_OF_MASS_FAILED, "Failed to compute center of mass");
|
|
57
|
+
if (!comResult.ok) return comResult;
|
|
58
|
+
return require_errors.ok({
|
|
59
|
+
mass: m,
|
|
60
|
+
volume: m,
|
|
61
|
+
centerOfMass: comResult.value
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Area-weighted centroid of `faces`, from each face's own surface center of mass. */
|
|
65
|
+
function surfaceCentroid(faces) {
|
|
66
|
+
const kernel = require_shapeTypes.getKernel();
|
|
67
|
+
let total = 0;
|
|
68
|
+
let x = 0;
|
|
69
|
+
let y = 0;
|
|
70
|
+
let z = 0;
|
|
71
|
+
for (const f of faces) {
|
|
72
|
+
const a = kernel.area(f);
|
|
73
|
+
const [cx, cy, cz] = kernel.surfaceCenterOfMass(f);
|
|
74
|
+
total += a;
|
|
75
|
+
x += a * cx;
|
|
76
|
+
y += a * cy;
|
|
77
|
+
z += a * cz;
|
|
78
|
+
}
|
|
79
|
+
return total > 0 ? [
|
|
80
|
+
x / total,
|
|
81
|
+
y / total,
|
|
82
|
+
z / total
|
|
83
|
+
] : [
|
|
84
|
+
0,
|
|
85
|
+
0,
|
|
86
|
+
0
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
30
90
|
* Measure volume properties of a 3D shape.
|
|
31
91
|
*
|
|
32
92
|
* @param shape - A solid or compound shape.
|
|
@@ -37,31 +97,23 @@ function measureVolumeProps(shape) {
|
|
|
37
97
|
const cached = getCachedMeasurement(shape.wrapped, "volume");
|
|
38
98
|
if (cached) return require_errors.ok(cached);
|
|
39
99
|
if (shapeIsNull(shape)) return nullShapeErr("measureVolumeProps");
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
0
|
|
50
|
-
]
|
|
51
|
-
};
|
|
52
|
-
setCachedMeasurement(shape.wrapped, "volume", zero);
|
|
53
|
-
return require_errors.ok(zero);
|
|
54
|
-
}
|
|
55
|
-
const m = kernel.volume(shape.wrapped);
|
|
56
|
-
const comResult = require_topologyQueryFns.kernelCallRaw(() => kernel.centerOfMass(shape.wrapped), require_errors.BrepErrorCode.CENTER_OF_MASS_FAILED, "Failed to compute center of mass");
|
|
57
|
-
if (!comResult.ok) return comResult;
|
|
58
|
-
const result = {
|
|
59
|
-
mass: m,
|
|
60
|
-
volume: m,
|
|
61
|
-
centerOfMass: comResult.value
|
|
100
|
+
const type = require_shapeTypes.getKernel().shapeType(shape.wrapped);
|
|
101
|
+
const zero = {
|
|
102
|
+
mass: 0,
|
|
103
|
+
volume: 0,
|
|
104
|
+
centerOfMass: [
|
|
105
|
+
0,
|
|
106
|
+
0,
|
|
107
|
+
0
|
|
108
|
+
]
|
|
62
109
|
};
|
|
63
|
-
|
|
64
|
-
|
|
110
|
+
let result;
|
|
111
|
+
if (type === "solid" || type === "compsolid") result = volumeOf(shape.wrapped);
|
|
112
|
+
else if (type === "compound") result = withSubShapes(shape, "solid", (solids) => solids.length === 0 ? require_errors.ok(zero) : withCompoundOf(solids, volumeOf));
|
|
113
|
+
else result = require_errors.ok(zero);
|
|
114
|
+
if (!result.ok) return result;
|
|
115
|
+
setCachedMeasurement(shape.wrapped, "volume", result.value);
|
|
116
|
+
return result;
|
|
65
117
|
}
|
|
66
118
|
/**
|
|
67
119
|
* Measure surface properties of a face or 3D shape.
|
|
@@ -76,7 +128,7 @@ function measureSurfaceProps(shape) {
|
|
|
76
128
|
if (shapeIsNull(shape)) return nullShapeErr("measureSurfaceProps");
|
|
77
129
|
const kernel = require_shapeTypes.getKernel();
|
|
78
130
|
const m = kernel.area(shape.wrapped);
|
|
79
|
-
const comResult = require_topologyQueryFns.kernelCallRaw(() => kernel.
|
|
131
|
+
const comResult = require_topologyQueryFns.kernelCallRaw(() => kernel.shapeType(shape.wrapped) === "face" ? kernel.surfaceCenterOfMass(shape.wrapped) : withSubShapes(shape, "face", surfaceCentroid), require_errors.BrepErrorCode.CENTER_OF_MASS_FAILED, "Failed to compute center of mass");
|
|
80
132
|
if (!comResult.ok) return comResult;
|
|
81
133
|
const result = {
|
|
82
134
|
mass: m,
|
|
@@ -89,8 +141,9 @@ function measureSurfaceProps(shape) {
|
|
|
89
141
|
/**
|
|
90
142
|
* Measure linear properties of any shape.
|
|
91
143
|
*
|
|
92
|
-
* For edges this is the arc length; for wires
|
|
93
|
-
*
|
|
144
|
+
* For edges this is the arc length; for wires and faces it is the total length
|
|
145
|
+
* of their edges; for shells, solids, and compounds it is the total length of
|
|
146
|
+
* their distinct edges, each counted once.
|
|
94
147
|
*
|
|
95
148
|
* @param shape - Any shape whose linear extent is to be measured.
|
|
96
149
|
* @returns `Result` containing length, center of mass, and raw mass property.
|
|
@@ -101,12 +154,26 @@ function measureLinearProps(shape) {
|
|
|
101
154
|
if (cached) return require_errors.ok(cached);
|
|
102
155
|
if (shapeIsNull(shape)) return nullShapeErr("measureLinearProps");
|
|
103
156
|
const kernel = require_shapeTypes.getKernel();
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
157
|
+
const type = kernel.shapeType(shape.wrapped);
|
|
158
|
+
const linearOf = (target) => {
|
|
159
|
+
const m = kernel.length(target);
|
|
160
|
+
return {
|
|
161
|
+
mass: m,
|
|
162
|
+
length: m,
|
|
163
|
+
centerOfMass: kernel.linearCenterOfMass(target)
|
|
164
|
+
};
|
|
109
165
|
};
|
|
166
|
+
let result;
|
|
167
|
+
if (type === "vertex" || type === "edge" || type === "wire" || type === "face") result = linearOf(shape.wrapped);
|
|
168
|
+
else result = withSubShapes(shape, "edge", (edges) => edges.length === 0 ? {
|
|
169
|
+
mass: 0,
|
|
170
|
+
length: 0,
|
|
171
|
+
centerOfMass: [
|
|
172
|
+
0,
|
|
173
|
+
0,
|
|
174
|
+
0
|
|
175
|
+
]
|
|
176
|
+
} : withCompoundOf(edges, linearOf));
|
|
110
177
|
setCachedMeasurement(shape.wrapped, "linear", result);
|
|
111
178
|
return require_errors.ok(result);
|
|
112
179
|
}
|