@faicad/faijs 0.31.1 → 0.32.2
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/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +9 -3
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean-op/index.d.ts.map +1 -1
- package/dist/api/boolean-op/index.js +1 -0
- package/dist/api/boolean-op/index.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +4 -0
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-operations/joinery-brep.js +10 -10
- package/dist/api/brep-operations/joinery-brep.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +1 -0
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/curve-sketch/index.d.ts.map +1 -1
- package/dist/api/curve-sketch/index.js +3 -0
- package/dist/api/curve-sketch/index.js.map +1 -1
- package/dist/api/draft.d.ts.map +1 -1
- package/dist/api/draft.js +1 -0
- package/dist/api/draft.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +1 -0
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +18 -17
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/feature-repair.d.ts.map +1 -1
- package/dist/api/feature-repair.js +6 -0
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts.map +1 -1
- package/dist/api/fillet-variable.js +1 -0
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +1 -0
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/operations.js +16 -16
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/sketching.js +1 -1
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/topology.js +18 -18
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +1 -0
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +1 -0
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +1 -0
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +5 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/loft-advanced.d.ts +66 -0
- package/dist/api/loft-advanced.d.ts.map +1 -0
- package/dist/api/loft-advanced.js +112 -0
- package/dist/api/loft-advanced.js.map +1 -0
- package/dist/api/loft.d.ts +16 -23
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +22 -40
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measure-query/index.d.ts.map +1 -1
- package/dist/api/measure-query/index.js +2 -0
- package/dist/api/measure-query/index.js.map +1 -1
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +1 -0
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.d.ts.map +1 -1
- package/dist/api/place.js +1 -0
- package/dist/api/place.js.map +1 -1
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +1 -0
- package/dist/api/profile.js.map +1 -1
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js +1 -0
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +6 -0
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/revolve.d.ts.map +1 -1
- package/dist/api/revolve.js +1 -0
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +1 -0
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +1 -0
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +1 -0
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +34 -30
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +41 -31
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +1 -0
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/sketch-on-surface.d.ts +76 -0
- package/dist/api/sketch-on-surface.d.ts.map +1 -0
- package/dist/api/sketch-on-surface.js +99 -0
- package/dist/api/sketch-on-surface.js.map +1 -0
- package/dist/api/solid-offset/index.d.ts.map +1 -1
- package/dist/api/solid-offset/index.js +1 -0
- package/dist/api/solid-offset/index.js.map +1 -1
- package/dist/api/split.d.ts.map +1 -1
- package/dist/api/split.js +1 -0
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +5 -4
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +2 -2
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface-face/index.d.ts.map +1 -1
- package/dist/api/surface-face/index.js +5 -0
- package/dist/api/surface-face/index.js.map +1 -1
- package/dist/api/surface.d.ts.map +1 -1
- package/dist/api/surface.js +1 -0
- package/dist/api/surface.js.map +1 -1
- package/dist/api/sweep-advanced.d.ts +117 -0
- package/dist/api/sweep-advanced.d.ts.map +1 -0
- package/dist/api/sweep-advanced.js +94 -0
- package/dist/api/sweep-advanced.js.map +1 -0
- package/dist/api/sweep.d.ts +18 -88
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +27 -30
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts.map +1 -1
- package/dist/api/thicken.js +1 -0
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +2 -0
- package/dist/api/transform.js.map +1 -1
- package/dist/api/wire.d.ts.map +1 -1
- package/dist/api/wire.js +1 -0
- package/dist/api/wire.js.map +1 -1
- package/dist/boolean/cross-section.d.ts +7 -6
- package/dist/boolean/cross-section.d.ts.map +1 -1
- package/dist/boolean/cross-section.js +38 -27
- package/dist/boolean/cross-section.js.map +1 -1
- package/dist/boolean/deriveNormals.d.ts +5 -5
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +18 -18
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/boolean/extrude-helpers.d.ts +6 -6
- package/dist/boolean/extrude-helpers.d.ts.map +1 -1
- package/dist/boolean/extrude-helpers.js +6 -6
- package/dist/boolean/extrude-helpers.js.map +1 -1
- package/dist/boolean/geo-convert.d.ts +11 -8
- package/dist/boolean/geo-convert.d.ts.map +1 -1
- package/dist/boolean/geo-convert.js +17 -73
- package/dist/boolean/geo-convert.js.map +1 -1
- package/dist/boolean/index.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +5 -5
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +42 -42
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +24 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +30 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +138 -0
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +5 -2
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +16 -7
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +2 -0
- package/dist/define-op.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lang/codegen.d.ts +14 -3
- package/dist/lang/codegen.d.ts.map +1 -1
- package/dist/lang/codegen.js +80 -5
- package/dist/lang/codegen.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +10 -3
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +160 -65
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +3 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +3 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/math3d/Box3.d.ts +86 -0
- package/dist/math3d/Box3.d.ts.map +1 -0
- package/dist/math3d/Box3.js +149 -0
- package/dist/math3d/Box3.js.map +1 -0
- package/dist/math3d/Euler.d.ts +64 -0
- package/dist/math3d/Euler.d.ts.map +1 -0
- package/dist/math3d/Euler.js +94 -0
- package/dist/math3d/Euler.js.map +1 -0
- package/dist/math3d/Mat4.d.ts +196 -0
- package/dist/math3d/Mat4.d.ts.map +1 -0
- package/dist/math3d/Mat4.js +518 -0
- package/dist/math3d/Mat4.js.map +1 -0
- package/dist/math3d/Plane.d.ts +67 -0
- package/dist/math3d/Plane.d.ts.map +1 -0
- package/dist/math3d/Plane.js +90 -0
- package/dist/math3d/Plane.js.map +1 -0
- package/dist/math3d/Quat.d.ts +163 -0
- package/dist/math3d/Quat.d.ts.map +1 -0
- package/dist/math3d/Quat.js +408 -0
- package/dist/math3d/Quat.js.map +1 -0
- package/dist/math3d/Vec2.d.ts +185 -0
- package/dist/math3d/Vec2.d.ts.map +1 -0
- package/dist/math3d/Vec2.js +276 -0
- package/dist/math3d/Vec2.js.map +1 -0
- package/dist/math3d/Vec3.d.ts +326 -0
- package/dist/math3d/Vec3.d.ts.map +1 -0
- package/dist/math3d/Vec3.js +521 -0
- package/dist/math3d/Vec3.js.map +1 -0
- package/dist/math3d/index.d.ts +19 -0
- package/dist/math3d/index.d.ts.map +1 -0
- package/dist/math3d/index.js +19 -0
- package/dist/math3d/index.js.map +1 -0
- package/dist/mesh/decoration-provider.d.ts +2 -2
- package/dist/mesh/decoration-provider.d.ts.map +1 -1
- package/dist/mesh/decoration-provider.js.map +1 -1
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +36 -37
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +6 -7
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/knurl/KnurlGenerator.d.ts +8 -7
- package/dist/mesh/knurl/KnurlGenerator.d.ts.map +1 -1
- package/dist/mesh/knurl/KnurlGenerator.js +9 -9
- package/dist/mesh/knurl/KnurlGenerator.js.map +1 -1
- package/dist/mesh/knurl/displacement.d.ts +7 -6
- package/dist/mesh/knurl/displacement.d.ts.map +1 -1
- package/dist/mesh/knurl/displacement.js +29 -29
- package/dist/mesh/knurl/displacement.js.map +1 -1
- package/dist/mesh/knurl/subdivision.d.ts +3 -3
- package/dist/mesh/knurl/subdivision.d.ts.map +1 -1
- package/dist/mesh/knurl/subdivision.js +21 -15
- package/dist/mesh/knurl/subdivision.js.map +1 -1
- package/dist/mesh/knurl/textureLoader.d.ts +3 -3
- package/dist/mesh/knurl/textureLoader.d.ts.map +1 -1
- package/dist/mesh/knurl/textureLoader.js.map +1 -1
- package/dist/mesh/meshdata/index.d.ts +12 -0
- package/dist/mesh/meshdata/index.d.ts.map +1 -0
- package/dist/mesh/meshdata/index.js +12 -0
- package/dist/mesh/meshdata/index.js.map +1 -0
- package/dist/mesh/meshdata/ops.d.ts +62 -0
- package/dist/mesh/meshdata/ops.d.ts.map +1 -0
- package/dist/mesh/meshdata/ops.js +160 -0
- package/dist/mesh/meshdata/ops.js.map +1 -0
- package/dist/mesh/meshdata/parametric.d.ts +70 -0
- package/dist/mesh/meshdata/parametric.d.ts.map +1 -0
- package/dist/mesh/meshdata/parametric.js +213 -0
- package/dist/mesh/meshdata/parametric.js.map +1 -0
- package/dist/mesh/meshdata/weld.d.ts +21 -0
- package/dist/mesh/meshdata/weld.d.ts.map +1 -0
- package/dist/mesh/meshdata/weld.js +50 -0
- package/dist/mesh/meshdata/weld.js.map +1 -0
- package/dist/mesh/primitives.d.ts +1 -1
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +38 -39
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/query.js +11 -11
- package/dist/mesh/query.js.map +1 -1
- package/dist/mesh/stl-loader.d.ts +7 -7
- package/dist/mesh/stl-loader.d.ts.map +1 -1
- package/dist/mesh/stl-loader.js +12 -24
- package/dist/mesh/stl-loader.js.map +1 -1
- package/dist/mesh/threemf-view.d.ts +11 -11
- package/dist/mesh/threemf-view.d.ts.map +1 -1
- package/dist/mesh/threemf-view.js +10 -10
- package/dist/mesh/threemf-view.js.map +1 -1
- package/dist/mesh/transform.d.ts +14 -8
- package/dist/mesh/transform.d.ts.map +1 -1
- package/dist/mesh/transform.js +18 -13
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +2 -0
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +20 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/primitives/brep-primitives.d.ts +8 -12
- package/dist/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +10 -28
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/primitives/index.js.map +1 -1
- package/dist/primitives/mesh-primitives.d.ts +10 -10
- package/dist/primitives/mesh-primitives.d.ts.map +1 -1
- package/dist/primitives/mesh-primitives.js +29 -76
- package/dist/primitives/mesh-primitives.js.map +1 -1
- package/dist/primitives/screw/screw.d.ts +3 -3
- package/dist/primitives/screw/screw.d.ts.map +1 -1
- package/dist/primitives/screw/screw.js +10 -9
- package/dist/primitives/screw/screw.js.map +1 -1
- package/dist/sdf/index.js.map +1 -1
- package/dist/units.d.ts +40 -0
- package/dist/units.d.ts.map +1 -1
- package/dist/units.js.map +1 -1
- package/package.json +3 -5
- package/dist/api/brep-mirror/booleanFns.d.ts +0 -40
- package/dist/api/brep-mirror/booleanFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/booleanFns.js +0 -104
- package/dist/api/brep-mirror/booleanFns.js.map +0 -1
- package/dist/api/brep-mirror/brepHelpers.d.ts +0 -55
- package/dist/api/brep-mirror/brepHelpers.d.ts.map +0 -1
- package/dist/api/brep-mirror/brepHelpers.js +0 -131
- package/dist/api/brep-mirror/brepHelpers.js.map +0 -1
- package/dist/api/brep-mirror/compoundFns.d.ts +0 -47
- package/dist/api/brep-mirror/compoundFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/compoundFns.js +0 -300
- package/dist/api/brep-mirror/compoundFns.js.map +0 -1
- package/dist/api/brep-mirror/healingFns.d.ts +0 -78
- package/dist/api/brep-mirror/healingFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/healingFns.js +0 -294
- package/dist/api/brep-mirror/healingFns.js.map +0 -1
- package/dist/api/brep-mirror/hullFns.d.ts +0 -20
- package/dist/api/brep-mirror/hullFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/hullFns.js +0 -46
- package/dist/api/brep-mirror/hullFns.js.map +0 -1
- package/dist/api/brep-mirror/joinery-brep.d.ts +0 -172
- package/dist/api/brep-mirror/joinery-brep.d.ts.map +0 -1
- package/dist/api/brep-mirror/joinery-brep.js +0 -463
- package/dist/api/brep-mirror/joinery-brep.js.map +0 -1
- package/dist/api/brep-mirror/patternFns.d.ts +0 -43
- package/dist/api/brep-mirror/patternFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/patternFns.js +0 -178
- package/dist/api/brep-mirror/patternFns.js.map +0 -1
- package/dist/api/brep-mirror/primitiveFns.d.ts +0 -42
- package/dist/api/brep-mirror/primitiveFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/primitiveFns.js +0 -104
- package/dist/api/brep-mirror/primitiveFns.js.map +0 -1
- package/dist/api/brep-mirror/roofFns.d.ts +0 -24
- package/dist/api/brep-mirror/roofFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/roofFns.js +0 -229
- package/dist/api/brep-mirror/roofFns.js.map +0 -1
- package/dist/api/brep-mirror/straightSkeleton.d.ts +0 -36
- package/dist/api/brep-mirror/straightSkeleton.d.ts.map +0 -1
- package/dist/api/brep-mirror/straightSkeleton.js +0 -443
- package/dist/api/brep-mirror/straightSkeleton.js.map +0 -1
- package/dist/api/brep-mirror/sweepFns.d.ts +0 -55
- package/dist/api/brep-mirror/sweepFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/sweepFns.js +0 -200
- package/dist/api/brep-mirror/sweepFns.js.map +0 -1
- package/dist/api/brep-mirror/threadFns.d.ts +0 -83
- package/dist/api/brep-mirror/threadFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/threadFns.js +0 -138
- package/dist/api/brep-mirror/threadFns.js.map +0 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +0 -74
- package/dist/api/brep-mirror/topologyFns.d.ts.map +0 -1
- package/dist/api/brep-mirror/topologyFns.js +0 -276
- package/dist/api/brep-mirror/topologyFns.js.map +0 -1
- package/dist/api/brepjs-compat/constants.d.ts +0 -11
- package/dist/api/brepjs-compat/constants.d.ts.map +0 -1
- package/dist/api/brepjs-compat/constants.js +0 -11
- package/dist/api/brepjs-compat/constants.js.map +0 -1
- package/dist/api/brepjs-compat/index.d.ts +0 -21
- package/dist/api/brepjs-compat/index.d.ts.map +0 -1
- package/dist/api/brepjs-compat/index.js +0 -22
- package/dist/api/brepjs-compat/index.js.map +0 -1
- package/dist/api/brepjs-compat/planeOps.d.ts +0 -98
- package/dist/api/brepjs-compat/planeOps.d.ts.map +0 -1
- package/dist/api/brepjs-compat/planeOps.js +0 -170
- package/dist/api/brepjs-compat/planeOps.js.map +0 -1
- package/dist/api/brepjs-compat/planeTypes.d.ts +0 -24
- package/dist/api/brepjs-compat/planeTypes.d.ts.map +0 -1
- package/dist/api/brepjs-compat/planeTypes.js +0 -8
- package/dist/api/brepjs-compat/planeTypes.js.map +0 -1
- package/dist/api/brepjs-compat/types.d.ts +0 -64
- package/dist/api/brepjs-compat/types.d.ts.map +0 -1
- package/dist/api/brepjs-compat/types.js +0 -48
- package/dist/api/brepjs-compat/types.js.map +0 -1
- package/dist/api/brepjs-compat/vecOps.d.ts +0 -124
- package/dist/api/brepjs-compat/vecOps.d.ts.map +0 -1
- package/dist/api/brepjs-compat/vecOps.js +0 -202
- package/dist/api/brepjs-compat/vecOps.js.map +0 -1
- package/dist/api/generated/brepjs/index.d.ts +0 -310
- package/dist/api/generated/brepjs/index.d.ts.map +0 -1
- package/dist/api/generated/brepjs/index.js +0 -195
- package/dist/api/generated/brepjs/index.js.map +0 -1
- package/dist/api/generated/cad/script-face.d.ts +0 -12
- package/dist/api/generated/cad/script-face.d.ts.map +0 -1
- package/dist/api/generated/cad/script-face.js +0 -146
- package/dist/api/generated/cad/script-face.js.map +0 -1
- package/dist/api/internal/compat-projection.d.ts +0 -55
- package/dist/api/internal/compat-projection.d.ts.map +0 -1
- package/dist/api/internal/compat-projection.js +0 -75
- package/dist/api/internal/compat-projection.js.map +0 -1
- package/dist/api/occt-kernel-bridge.d.ts +0 -118
- package/dist/api/occt-kernel-bridge.d.ts.map +0 -1
- package/dist/api/occt-kernel-bridge.js +0 -283
- package/dist/api/occt-kernel-bridge.js.map +0 -1
- package/dist/api/sketch.d.ts +0 -80
- package/dist/api/sketch.d.ts.map +0 -1
- package/dist/api/sketch.js +0 -155
- package/dist/api/sketch.js.map +0 -1
- package/dist/api/surface/projection-overrides.d.ts +0 -38
- package/dist/api/surface/projection-overrides.d.ts.map +0 -1
- package/dist/api/surface/projection-overrides.js +0 -169
- package/dist/api/surface/projection-overrides.js.map +0 -1
- package/dist/brepjs-compat.d.ts +0 -20
- package/dist/brepjs-compat.d.ts.map +0 -1
- package/dist/brepjs-compat.js +0 -20
- package/dist/brepjs-compat.js.map +0 -1
- package/dist/cad-runtime/createRuntimeWithCad.d.ts +0 -22
- package/dist/cad-runtime/createRuntimeWithCad.d.ts.map +0 -1
- package/dist/cad-runtime/createRuntimeWithCad.js +0 -29
- package/dist/cad-runtime/createRuntimeWithCad.js.map +0 -1
- package/dist/fcstd/attachment.d.ts +0 -72
- package/dist/fcstd/attachment.d.ts.map +0 -1
- package/dist/fcstd/attachment.js +0 -93
- package/dist/fcstd/attachment.js.map +0 -1
- package/dist/fcstd/build-fai-zip.d.ts +0 -40
- package/dist/fcstd/build-fai-zip.d.ts.map +0 -1
- package/dist/fcstd/build-fai-zip.js +0 -111
- package/dist/fcstd/build-fai-zip.js.map +0 -1
- package/dist/fcstd/cli.d.ts +0 -3
- package/dist/fcstd/cli.d.ts.map +0 -1
- package/dist/fcstd/cli.js +0 -37
- package/dist/fcstd/cli.js.map +0 -1
- package/dist/fcstd/codegen.d.ts +0 -79
- package/dist/fcstd/codegen.d.ts.map +0 -1
- package/dist/fcstd/codegen.js +0 -605
- package/dist/fcstd/codegen.js.map +0 -1
- package/dist/fcstd/container.d.ts +0 -75
- package/dist/fcstd/container.d.ts.map +0 -1
- package/dist/fcstd/container.js +0 -36
- package/dist/fcstd/container.js.map +0 -1
- package/dist/fcstd/contour.d.ts +0 -43
- package/dist/fcstd/contour.d.ts.map +0 -1
- package/dist/fcstd/contour.js +0 -96
- package/dist/fcstd/contour.js.map +0 -1
- package/dist/fcstd/convert.d.ts +0 -63
- package/dist/fcstd/convert.d.ts.map +0 -1
- package/dist/fcstd/convert.js +0 -274
- package/dist/fcstd/convert.js.map +0 -1
- package/dist/fcstd/document.d.ts +0 -48
- package/dist/fcstd/document.d.ts.map +0 -1
- package/dist/fcstd/document.js +0 -140
- package/dist/fcstd/document.js.map +0 -1
- package/dist/fcstd/expressions.d.ts +0 -74
- package/dist/fcstd/expressions.d.ts.map +0 -1
- package/dist/fcstd/expressions.js +0 -157
- package/dist/fcstd/expressions.js.map +0 -1
- package/dist/fcstd/external-geo.d.ts +0 -49
- package/dist/fcstd/external-geo.d.ts.map +0 -1
- package/dist/fcstd/external-geo.js +0 -140
- package/dist/fcstd/external-geo.js.map +0 -1
- package/dist/fcstd/feature-translate.d.ts +0 -189
- package/dist/fcstd/feature-translate.d.ts.map +0 -1
- package/dist/fcstd/feature-translate.js +0 -968
- package/dist/fcstd/feature-translate.js.map +0 -1
- package/dist/fcstd/index.d.ts +0 -23
- package/dist/fcstd/index.d.ts.map +0 -1
- package/dist/fcstd/index.js +0 -19
- package/dist/fcstd/index.js.map +0 -1
- package/dist/fcstd/placement.d.ts +0 -93
- package/dist/fcstd/placement.d.ts.map +0 -1
- package/dist/fcstd/placement.js +0 -117
- package/dist/fcstd/placement.js.map +0 -1
- package/dist/fcstd/planegcs-backend.d.ts +0 -34
- package/dist/fcstd/planegcs-backend.d.ts.map +0 -1
- package/dist/fcstd/planegcs-backend.js +0 -626
- package/dist/fcstd/planegcs-backend.js.map +0 -1
- package/dist/fcstd/sketch-parse.d.ts +0 -181
- package/dist/fcstd/sketch-parse.d.ts.map +0 -1
- package/dist/fcstd/sketch-parse.js +0 -227
- package/dist/fcstd/sketch-parse.js.map +0 -1
- package/dist/fcstd/sketch-solver.d.ts +0 -63
- package/dist/fcstd/sketch-solver.d.ts.map +0 -1
- package/dist/fcstd/sketch-solver.js +0 -28
- package/dist/fcstd/sketch-solver.js.map +0 -1
- package/dist/fcstd/sketch-verify.d.ts +0 -43
- package/dist/fcstd/sketch-verify.d.ts.map +0 -1
- package/dist/fcstd/sketch-verify.js +0 -62
- package/dist/fcstd/sketch-verify.js.map +0 -1
- package/dist/fcstd/structural-types.d.ts +0 -83
- package/dist/fcstd/structural-types.d.ts.map +0 -1
- package/dist/fcstd/structural-types.js +0 -121
- package/dist/fcstd/structural-types.js.map +0 -1
- package/dist/fcstd/unpack.d.ts +0 -44
- package/dist/fcstd/unpack.d.ts.map +0 -1
- package/dist/fcstd/unpack.js +0 -64
- package/dist/fcstd/unpack.js.map +0 -1
- package/dist/fcstd-convert.d.ts +0 -30
- package/dist/fcstd-convert.d.ts.map +0 -1
- package/dist/fcstd-convert.js +0 -27
- package/dist/fcstd-convert.js.map +0 -1
- package/dist/mesh/creased-normals.d.ts +0 -50
- package/dist/mesh/creased-normals.d.ts.map +0 -1
- package/dist/mesh/creased-normals.js +0 -114
- package/dist/mesh/creased-normals.js.map +0 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +0 -260
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +0 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.js +0 -875
- package/dist/occt-kernel/generated/occtPlatform.generated.js.map +0 -1
- package/dist/occt-kernel/stepMetaParser.d.ts +0 -44
- package/dist/occt-kernel/stepMetaParser.d.ts.map +0 -1
- package/dist/occt-kernel/stepMetaParser.js +0 -166
- package/dist/occt-kernel/stepMetaParser.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.d.ts +0 -106
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.js +0 -341
- package/dist/vendored/brepjs/2d/blueprints/baseSketcher2d.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprint.d.ts +0 -185
- package/dist/vendored/brepjs/2d/blueprints/blueprint.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprint.js +0 -361
- package/dist/vendored/brepjs/2d/blueprints/blueprint.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.d.ts +0 -15
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.js +0 -28
- package/dist/vendored/brepjs/2d/blueprints/blueprintApproximations.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.d.ts +0 -29
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.js +0 -86
- package/dist/vendored/brepjs/2d/blueprints/blueprintCustomCorners.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.d.ts +0 -57
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.js +0 -92
- package/dist/vendored/brepjs/2d/blueprints/blueprintFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.d.ts +0 -58
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.js +0 -346
- package/dist/vendored/brepjs/2d/blueprints/blueprintOffset.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.d.ts +0 -30
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.js +0 -45
- package/dist/vendored/brepjs/2d/blueprints/blueprintSketcher.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprints.d.ts +0 -68
- package/dist/vendored/brepjs/2d/blueprints/blueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/blueprints.js +0 -116
- package/dist/vendored/brepjs/2d/blueprints/blueprints.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.d.ts +0 -68
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.js +0 -362
- package/dist/vendored/brepjs/2d/blueprints/boolean2D.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.d.ts +0 -34
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.js +0 -176
- package/dist/vendored/brepjs/2d/blueprints/booleanHelpers.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.d.ts +0 -55
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.js +0 -110
- package/dist/vendored/brepjs/2d/blueprints/booleanOperations.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.d.ts +0 -41
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.js +0 -90
- package/dist/vendored/brepjs/2d/blueprints/cannedBlueprints.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.d.ts +0 -85
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.js +0 -136
- package/dist/vendored/brepjs/2d/blueprints/compoundBlueprint.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.d.ts +0 -48
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.js +0 -154
- package/dist/vendored/brepjs/2d/blueprints/ellipseUtils.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.d.ts +0 -342
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.js +0 -32
- package/dist/vendored/brepjs/2d/blueprints/genericSketcher.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/index.d.ts +0 -16
- package/dist/vendored/brepjs/2d/blueprints/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/index.js +0 -13
- package/dist/vendored/brepjs/2d/blueprints/index.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.d.ts +0 -18
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.js +0 -230
- package/dist/vendored/brepjs/2d/blueprints/intersectionSegments.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/lib.d.ts +0 -73
- package/dist/vendored/brepjs/2d/blueprints/lib.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/lib.js +0 -103
- package/dist/vendored/brepjs/2d/blueprints/lib.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.d.ts +0 -31
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.js +0 -226
- package/dist/vendored/brepjs/2d/blueprints/segmentAssembly.js.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/svg.d.ts +0 -22
- package/dist/vendored/brepjs/2d/blueprints/svg.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/blueprints/svg.js +0 -30
- package/dist/vendored/brepjs/2d/blueprints/svg.js.map +0 -1
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.d.ts +0 -124
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.js +0 -235
- package/dist/vendored/brepjs/2d/curve2dGeometryFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/curves.d.ts +0 -45
- package/dist/vendored/brepjs/2d/curves.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/curves.js +0 -139
- package/dist/vendored/brepjs/2d/curves.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/approximations.d.ts +0 -47
- package/dist/vendored/brepjs/2d/lib/approximations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/approximations.js +0 -82
- package/dist/vendored/brepjs/2d/lib/approximations.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.d.ts +0 -39
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.js +0 -88
- package/dist/vendored/brepjs/2d/lib/boundingBox2d.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2D.d.ts +0 -82
- package/dist/vendored/brepjs/2d/lib/curve2D.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2D.js +0 -258
- package/dist/vendored/brepjs/2d/lib/curve2D.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2dFns.d.ts +0 -53
- package/dist/vendored/brepjs/2d/lib/curve2dFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/curve2dFns.js +0 -69
- package/dist/vendored/brepjs/2d/lib/curve2dFns.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/customCorners.d.ts +0 -29
- package/dist/vendored/brepjs/2d/lib/customCorners.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/customCorners.js +0 -237
- package/dist/vendored/brepjs/2d/lib/customCorners.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/definitions.d.ts +0 -12
- package/dist/vendored/brepjs/2d/lib/definitions.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/definitions.js +0 -19
- package/dist/vendored/brepjs/2d/lib/definitions.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.d.ts +0 -21
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.js +0 -71
- package/dist/vendored/brepjs/2d/lib/ellipseArcFlags.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/index.d.ts +0 -14
- package/dist/vendored/brepjs/2d/lib/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/index.js +0 -14
- package/dist/vendored/brepjs/2d/lib/index.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/intersections.d.ts +0 -34
- package/dist/vendored/brepjs/2d/lib/intersections.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/intersections.js +0 -77
- package/dist/vendored/brepjs/2d/lib/intersections.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/makeCurves.d.ts +0 -63
- package/dist/vendored/brepjs/2d/lib/makeCurves.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/makeCurves.js +0 -117
- package/dist/vendored/brepjs/2d/lib/makeCurves.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/offset.d.ts +0 -30
- package/dist/vendored/brepjs/2d/lib/offset.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/offset.js +0 -109
- package/dist/vendored/brepjs/2d/lib/offset.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/precision.d.ts +0 -12
- package/dist/vendored/brepjs/2d/lib/precision.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/precision.js +0 -12
- package/dist/vendored/brepjs/2d/lib/precision.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/stitching.d.ts +0 -15
- package/dist/vendored/brepjs/2d/lib/stitching.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/stitching.js +0 -67
- package/dist/vendored/brepjs/2d/lib/stitching.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/svgPath.d.ts +0 -4
- package/dist/vendored/brepjs/2d/lib/svgPath.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/svgPath.js +0 -114
- package/dist/vendored/brepjs/2d/lib/svgPath.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/utils.d.ts +0 -11
- package/dist/vendored/brepjs/2d/lib/utils.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/utils.js +0 -24
- package/dist/vendored/brepjs/2d/lib/utils.js.map +0 -1
- package/dist/vendored/brepjs/2d/lib/vectorOperations.d.ts +0 -19
- package/dist/vendored/brepjs/2d/lib/vectorOperations.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d/lib/vectorOperations.js +0 -26
- package/dist/vendored/brepjs/2d/lib/vectorOperations.js.map +0 -1
- package/dist/vendored/brepjs/2d.d.ts +0 -26
- package/dist/vendored/brepjs/2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/2d.js +0 -33
- package/dist/vendored/brepjs/2d.js.map +0 -1
- package/dist/vendored/brepjs/core/constants.d.ts +0 -7
- package/dist/vendored/brepjs/core/constants.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/constants.js +0 -7
- package/dist/vendored/brepjs/core/constants.js.map +0 -1
- package/dist/vendored/brepjs/core/curve2dHandle.d.ts +0 -35
- package/dist/vendored/brepjs/core/curve2dHandle.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/curve2dHandle.js +0 -48
- package/dist/vendored/brepjs/core/curve2dHandle.js.map +0 -1
- package/dist/vendored/brepjs/core/dimensionTypes.d.ts +0 -61
- package/dist/vendored/brepjs/core/dimensionTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/dimensionTypes.js +0 -54
- package/dist/vendored/brepjs/core/dimensionTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/disposal.d.ts +0 -136
- package/dist/vendored/brepjs/core/disposal.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/disposal.js +0 -441
- package/dist/vendored/brepjs/core/disposal.js.map +0 -1
- package/dist/vendored/brepjs/core/errors.d.ts +0 -191
- package/dist/vendored/brepjs/core/errors.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/errors.js +0 -238
- package/dist/vendored/brepjs/core/errors.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelBoundary.d.ts +0 -40
- package/dist/vendored/brepjs/core/kernelBoundary.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelBoundary.js +0 -99
- package/dist/vendored/brepjs/core/kernelBoundary.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelCall.d.ts +0 -48
- package/dist/vendored/brepjs/core/kernelCall.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelCall.js +0 -154
- package/dist/vendored/brepjs/core/kernelCall.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelErrorTranslation.d.ts +0 -17
- package/dist/vendored/brepjs/core/kernelErrorTranslation.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelErrorTranslation.js +0 -98
- package/dist/vendored/brepjs/core/kernelErrorTranslation.js.map +0 -1
- package/dist/vendored/brepjs/core/planeOps.d.ts +0 -62
- package/dist/vendored/brepjs/core/planeOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/planeOps.js +0 -148
- package/dist/vendored/brepjs/core/planeOps.js.map +0 -1
- package/dist/vendored/brepjs/core/planeTypes.d.ts +0 -22
- package/dist/vendored/brepjs/core/planeTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/planeTypes.js +0 -6
- package/dist/vendored/brepjs/core/planeTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/result.d.ts +0 -85
- package/dist/vendored/brepjs/core/result.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/result.js +0 -212
- package/dist/vendored/brepjs/core/result.js.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypeCache.d.ts +0 -27
- package/dist/vendored/brepjs/core/shapeTypeCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypeCache.js +0 -40
- package/dist/vendored/brepjs/core/shapeTypeCache.js.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypes.d.ts +0 -199
- package/dist/vendored/brepjs/core/shapeTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/shapeTypes.js +0 -267
- package/dist/vendored/brepjs/core/shapeTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/typeDiscriminants.d.ts +0 -25
- package/dist/vendored/brepjs/core/typeDiscriminants.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/typeDiscriminants.js +0 -50
- package/dist/vendored/brepjs/core/typeDiscriminants.js.map +0 -1
- package/dist/vendored/brepjs/core/types.d.ts +0 -51
- package/dist/vendored/brepjs/core/types.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/types.js +0 -35
- package/dist/vendored/brepjs/core/types.js.map +0 -1
- package/dist/vendored/brepjs/core/validityTypes.d.ts +0 -143
- package/dist/vendored/brepjs/core/validityTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/validityTypes.js +0 -174
- package/dist/vendored/brepjs/core/validityTypes.js.map +0 -1
- package/dist/vendored/brepjs/core/vecOps.d.ts +0 -53
- package/dist/vendored/brepjs/core/vecOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/vecOps.js +0 -131
- package/dist/vendored/brepjs/core/vecOps.js.map +0 -1
- package/dist/vendored/brepjs/core.d.ts +0 -17
- package/dist/vendored/brepjs/core.d.ts.map +0 -1
- package/dist/vendored/brepjs/core.js +0 -13
- package/dist/vendored/brepjs/core.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearFns.d.ts +0 -148
- package/dist/vendored/brepjs/gear/gearFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearFns.js +0 -479
- package/dist/vendored/brepjs/gear/gearFns.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearMath.d.ts +0 -89
- package/dist/vendored/brepjs/gear/gearMath.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearMath.js +0 -195
- package/dist/vendored/brepjs/gear/gearMath.js.map +0 -1
- package/dist/vendored/brepjs/gear/gearProfile.d.ts +0 -17
- package/dist/vendored/brepjs/gear/gearProfile.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/gearProfile.js +0 -159
- package/dist/vendored/brepjs/gear/gearProfile.js.map +0 -1
- package/dist/vendored/brepjs/gear/index.d.ts +0 -4
- package/dist/vendored/brepjs/gear/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/gear/index.js +0 -4
- package/dist/vendored/brepjs/gear/index.js.map +0 -1
- package/dist/vendored/brepjs/index.d.ts +0 -152
- package/dist/vendored/brepjs/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/index.js +0 -195
- package/dist/vendored/brepjs/index.js.map +0 -1
- package/dist/vendored/brepjs/io/dxfExportFns.d.ts +0 -74
- package/dist/vendored/brepjs/io/dxfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/dxfExportFns.js +0 -134
- package/dist/vendored/brepjs/io/dxfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/dxfImportFns.d.ts +0 -20
- package/dist/vendored/brepjs/io/dxfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/dxfImportFns.js +0 -132
- package/dist/vendored/brepjs/io/dxfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/gltfExportFns.d.ts +0 -97
- package/dist/vendored/brepjs/io/gltfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/gltfExportFns.js +0 -460
- package/dist/vendored/brepjs/io/gltfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/gltfImportFns.d.ts +0 -21
- package/dist/vendored/brepjs/io/gltfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/gltfImportFns.js +0 -33
- package/dist/vendored/brepjs/io/gltfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/importFns.d.ts +0 -56
- package/dist/vendored/brepjs/io/importFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/importFns.js +0 -108
- package/dist/vendored/brepjs/io/importFns.js.map +0 -1
- package/dist/vendored/brepjs/io/ioUtils.d.ts +0 -22
- package/dist/vendored/brepjs/io/ioUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/ioUtils.js +0 -56
- package/dist/vendored/brepjs/io/ioUtils.js.map +0 -1
- package/dist/vendored/brepjs/io/objExportFns.d.ts +0 -23
- package/dist/vendored/brepjs/io/objExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/objExportFns.js +0 -67
- package/dist/vendored/brepjs/io/objExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/objImportFns.d.ts +0 -26
- package/dist/vendored/brepjs/io/objImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/objImportFns.js +0 -96
- package/dist/vendored/brepjs/io/objImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/stepConfigFns.d.ts +0 -30
- package/dist/vendored/brepjs/io/stepConfigFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/stepConfigFns.js +0 -30
- package/dist/vendored/brepjs/io/stepConfigFns.js.map +0 -1
- package/dist/vendored/brepjs/io/svgImportFns.d.ts +0 -58
- package/dist/vendored/brepjs/io/svgImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/svgImportFns.js +0 -394
- package/dist/vendored/brepjs/io/svgImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/threemfExportFns.d.ts +0 -48
- package/dist/vendored/brepjs/io/threemfExportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/threemfExportFns.js +0 -345
- package/dist/vendored/brepjs/io/threemfExportFns.js.map +0 -1
- package/dist/vendored/brepjs/io/threemfImportFns.d.ts +0 -22
- package/dist/vendored/brepjs/io/threemfImportFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/io/threemfImportFns.js +0 -350
- package/dist/vendored/brepjs/io/threemfImportFns.js.map +0 -1
- package/dist/vendored/brepjs/io.d.ts +0 -17
- package/dist/vendored/brepjs/io.d.ts.map +0 -1
- package/dist/vendored/brepjs/io.js +0 -20
- package/dist/vendored/brepjs/io.js.map +0 -1
- package/dist/vendored/brepjs/kernel/capabilities.d.ts +0 -36
- package/dist/vendored/brepjs/kernel/capabilities.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/capabilities.js +0 -35
- package/dist/vendored/brepjs/kernel/capabilities.js.map +0 -1
- package/dist/vendored/brepjs/kernel/geometry2d.d.ts +0 -96
- package/dist/vendored/brepjs/kernel/geometry2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/geometry2d.js +0 -885
- package/dist/vendored/brepjs/kernel/geometry2d.js.map +0 -1
- package/dist/vendored/brepjs/kernel/hullGeometry.d.ts +0 -23
- package/dist/vendored/brepjs/kernel/hullGeometry.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/hullGeometry.js +0 -312
- package/dist/vendored/brepjs/kernel/hullGeometry.js.map +0 -1
- package/dist/vendored/brepjs/kernel/index.d.ts +0 -73
- package/dist/vendored/brepjs/kernel/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/index.js +0 -161
- package/dist/vendored/brepjs/kernel/index.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.d.ts +0 -44
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/booleanOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.d.ts +0 -67
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/builderOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/core.d.ts +0 -46
- package/dist/vendored/brepjs/kernel/interfaces/core.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/core.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/core.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.d.ts +0 -53
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/curveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.d.ts +0 -32
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.js +0 -14
- package/dist/vendored/brepjs/kernel/interfaces/evolutionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/index.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/interfaces/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/index.js +0 -12
- package/dist/vendored/brepjs/kernel/interfaces/index.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.d.ts +0 -65
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/ioOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.d.ts +0 -55
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/measureOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.d.ts +0 -25
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.js +0 -8
- package/dist/vendored/brepjs/kernel/interfaces/meshOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.d.ts +0 -53
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.js +0 -10
- package/dist/vendored/brepjs/kernel/interfaces/modifierOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.d.ts +0 -22
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/primitiveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/repairOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.d.ts +0 -72
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.js +0 -13
- package/dist/vendored/brepjs/kernel/interfaces/surfaceOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.d.ts +0 -73
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/sweepOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.d.ts +0 -62
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.js +0 -9
- package/dist/vendored/brepjs/kernel/interfaces/topologyOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.d.ts +0 -80
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.js +0 -11
- package/dist/vendored/brepjs/kernel/interfaces/transformOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/kernel2dTypes.d.ts +0 -145
- package/dist/vendored/brepjs/kernel/kernel2dTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/kernel2dTypes.js +0 -18
- package/dist/vendored/brepjs/kernel/kernel2dTypes.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.d.ts +0 -41
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.js +0 -2
- package/dist/vendored/brepjs/kernel/occt/wasmTypes/externals.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.d.ts +0 -17
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.js +0 -75
- package/dist/vendored/brepjs/kernel/occtWasm/adapterShims.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.d.ts +0 -36
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.js +0 -116
- package/dist/vendored/brepjs/kernel/occtWasm/booleanOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.d.ts +0 -43
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.js +0 -292
- package/dist/vendored/brepjs/kernel/occtWasm/constructionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.d.ts +0 -34
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.js +0 -164
- package/dist/vendored/brepjs/kernel/occtWasm/curveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.d.ts +0 -26
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.js +0 -256
- package/dist/vendored/brepjs/kernel/occtWasm/evolutionOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.d.ts +0 -42
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.js +0 -146
- package/dist/vendored/brepjs/kernel/occtWasm/helpers.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.d.ts +0 -17
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.js +0 -55
- package/dist/vendored/brepjs/kernel/occtWasm/hullOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.d.ts +0 -58
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.js +0 -303
- package/dist/vendored/brepjs/kernel/occtWasm/ioOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.d.ts +0 -113
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.js +0 -731
- package/dist/vendored/brepjs/kernel/occtWasm/kernel2dOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.d.ts +0 -62
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.js +0 -338
- package/dist/vendored/brepjs/kernel/occtWasm/measureOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.d.ts +0 -12
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.js +0 -120
- package/dist/vendored/brepjs/kernel/occtWasm/meshOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.d.ts +0 -20
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.js +0 -187
- package/dist/vendored/brepjs/kernel/occtWasm/modifierOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.d.ts +0 -513
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.js +0 -1016
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmAdapter.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.d.ts +0 -332
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.js +0 -10
- package/dist/vendored/brepjs/kernel/occtWasm/occtWasmTypes.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.d.ts +0 -16
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.js +0 -64
- package/dist/vendored/brepjs/kernel/occtWasm/primitiveOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.d.ts +0 -16
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.js +0 -38
- package/dist/vendored/brepjs/kernel/occtWasm/repairOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.d.ts +0 -56
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.js +0 -247
- package/dist/vendored/brepjs/kernel/occtWasm/surfaceOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.d.ts +0 -56
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.js +0 -235
- package/dist/vendored/brepjs/kernel/occtWasm/sweepOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.d.ts +0 -25
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.js +0 -127
- package/dist/vendored/brepjs/kernel/occtWasm/topologyOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.d.ts +0 -40
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.js +0 -275
- package/dist/vendored/brepjs/kernel/occtWasm/transformOps.js.map +0 -1
- package/dist/vendored/brepjs/kernel/quality.d.ts +0 -28
- package/dist/vendored/brepjs/kernel/quality.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/quality.js +0 -40
- package/dist/vendored/brepjs/kernel/quality.js.map +0 -1
- package/dist/vendored/brepjs/kernel/solverAdapter.d.ts +0 -50
- package/dist/vendored/brepjs/kernel/solverAdapter.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/solverAdapter.js +0 -330
- package/dist/vendored/brepjs/kernel/solverAdapter.js.map +0 -1
- package/dist/vendored/brepjs/kernel/stlBuilder.d.ts +0 -21
- package/dist/vendored/brepjs/kernel/stlBuilder.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/stlBuilder.js +0 -106
- package/dist/vendored/brepjs/kernel/stlBuilder.js.map +0 -1
- package/dist/vendored/brepjs/kernel/types.d.ts +0 -214
- package/dist/vendored/brepjs/kernel/types.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/types.js +0 -22
- package/dist/vendored/brepjs/kernel/types.js.map +0 -1
- package/dist/vendored/brepjs/kernel/unsupported.d.ts +0 -15
- package/dist/vendored/brepjs/kernel/unsupported.d.ts.map +0 -1
- package/dist/vendored/brepjs/kernel/unsupported.js +0 -25
- package/dist/vendored/brepjs/kernel/unsupported.js.map +0 -1
- package/dist/vendored/brepjs/measurement/interferenceFns.d.ts +0 -68
- package/dist/vendored/brepjs/measurement/interferenceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/interferenceFns.js +0 -102
- package/dist/vendored/brepjs/measurement/interferenceFns.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureCache.d.ts +0 -20
- package/dist/vendored/brepjs/measurement/measureCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureCache.js +0 -28
- package/dist/vendored/brepjs/measurement/measureCache.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureFns.d.ts +0 -92
- package/dist/vendored/brepjs/measurement/measureFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureFns.js +0 -239
- package/dist/vendored/brepjs/measurement/measureFns.js.map +0 -1
- package/dist/vendored/brepjs/measurement/measureTypes.d.ts +0 -35
- package/dist/vendored/brepjs/measurement/measureTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement/measureTypes.js +0 -7
- package/dist/vendored/brepjs/measurement/measureTypes.js.map +0 -1
- package/dist/vendored/brepjs/measurement.d.ts +0 -5
- package/dist/vendored/brepjs/measurement.d.ts.map +0 -1
- package/dist/vendored/brepjs/measurement.js +0 -5
- package/dist/vendored/brepjs/measurement.js.map +0 -1
- package/dist/vendored/brepjs/ns/booleans.d.ts +0 -11
- package/dist/vendored/brepjs/ns/booleans.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/booleans.js +0 -11
- package/dist/vendored/brepjs/ns/booleans.js.map +0 -1
- package/dist/vendored/brepjs/ns/construction.d.ts +0 -10
- package/dist/vendored/brepjs/ns/construction.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/construction.js +0 -10
- package/dist/vendored/brepjs/ns/construction.js.map +0 -1
- package/dist/vendored/brepjs/ns/ioNs.d.ts +0 -18
- package/dist/vendored/brepjs/ns/ioNs.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/ioNs.js +0 -20
- package/dist/vendored/brepjs/ns/ioNs.js.map +0 -1
- package/dist/vendored/brepjs/ns/measurement.d.ts +0 -6
- package/dist/vendored/brepjs/ns/measurement.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/measurement.js +0 -6
- package/dist/vendored/brepjs/ns/measurement.js.map +0 -1
- package/dist/vendored/brepjs/ns/modifiers.d.ts +0 -6
- package/dist/vendored/brepjs/ns/modifiers.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/modifiers.js +0 -6
- package/dist/vendored/brepjs/ns/modifiers.js.map +0 -1
- package/dist/vendored/brepjs/ns/patterns.d.ts +0 -5
- package/dist/vendored/brepjs/ns/patterns.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/patterns.js +0 -5
- package/dist/vendored/brepjs/ns/patterns.js.map +0 -1
- package/dist/vendored/brepjs/ns/primitives.d.ts +0 -7
- package/dist/vendored/brepjs/ns/primitives.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/primitives.js +0 -7
- package/dist/vendored/brepjs/ns/primitives.js.map +0 -1
- package/dist/vendored/brepjs/ns/query.d.ts +0 -6
- package/dist/vendored/brepjs/ns/query.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/query.js +0 -6
- package/dist/vendored/brepjs/ns/query.js.map +0 -1
- package/dist/vendored/brepjs/ns/transforms.d.ts +0 -5
- package/dist/vendored/brepjs/ns/transforms.d.ts.map +0 -1
- package/dist/vendored/brepjs/ns/transforms.js +0 -5
- package/dist/vendored/brepjs/ns/transforms.js.map +0 -1
- package/dist/vendored/brepjs/operations/api.d.ts +0 -39
- package/dist/vendored/brepjs/operations/api.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/api.js +0 -41
- package/dist/vendored/brepjs/operations/api.js.map +0 -1
- package/dist/vendored/brepjs/operations/assemblyFns.d.ts +0 -54
- package/dist/vendored/brepjs/operations/assemblyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/assemblyFns.js +0 -91
- package/dist/vendored/brepjs/operations/assemblyFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/compoundOpsFns.d.ts +0 -43
- package/dist/vendored/brepjs/operations/compoundOpsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/compoundOpsFns.js +0 -368
- package/dist/vendored/brepjs/operations/compoundOpsFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/convexHullFns.d.ts +0 -27
- package/dist/vendored/brepjs/operations/convexHullFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/convexHullFns.js +0 -50
- package/dist/vendored/brepjs/operations/convexHullFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/dhFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/dhFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/dhFns.js +0 -53
- package/dist/vendored/brepjs/operations/dhFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporterFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/exporterFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporterFns.js +0 -66
- package/dist/vendored/brepjs/operations/exporterFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporterUtils.d.ts +0 -6
- package/dist/vendored/brepjs/operations/exporterUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporterUtils.js +0 -5
- package/dist/vendored/brepjs/operations/exporterUtils.js.map +0 -1
- package/dist/vendored/brepjs/operations/exporters.d.ts +0 -59
- package/dist/vendored/brepjs/operations/exporters.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/exporters.js +0 -74
- package/dist/vendored/brepjs/operations/exporters.js.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeFns.d.ts +0 -47
- package/dist/vendored/brepjs/operations/extrudeFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeFns.js +0 -119
- package/dist/vendored/brepjs/operations/extrudeFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeUtils.d.ts +0 -63
- package/dist/vendored/brepjs/operations/extrudeUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/extrudeUtils.js +0 -33
- package/dist/vendored/brepjs/operations/extrudeUtils.js.map +0 -1
- package/dist/vendored/brepjs/operations/guidedSweepFns.d.ts +0 -6
- package/dist/vendored/brepjs/operations/guidedSweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/guidedSweepFns.js +0 -6
- package/dist/vendored/brepjs/operations/guidedSweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/historyFns.d.ts +0 -83
- package/dist/vendored/brepjs/operations/historyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/historyFns.js +0 -256
- package/dist/vendored/brepjs/operations/historyFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/ikFns.d.ts +0 -74
- package/dist/vendored/brepjs/operations/ikFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/ikFns.js +0 -320
- package/dist/vendored/brepjs/operations/ikFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/instanceFns.d.ts +0 -76
- package/dist/vendored/brepjs/operations/instanceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/instanceFns.js +0 -128
- package/dist/vendored/brepjs/operations/instanceFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/jointFns.d.ts +0 -176
- package/dist/vendored/brepjs/operations/jointFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/jointFns.js +0 -298
- package/dist/vendored/brepjs/operations/jointFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/loftFns.d.ts +0 -60
- package/dist/vendored/brepjs/operations/loftFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/loftFns.js +0 -112
- package/dist/vendored/brepjs/operations/loftFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/mateFns.d.ts +0 -53
- package/dist/vendored/brepjs/operations/mateFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/mateFns.js +0 -142
- package/dist/vendored/brepjs/operations/mateFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/multiSweepFns.d.ts +0 -6
- package/dist/vendored/brepjs/operations/multiSweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/multiSweepFns.js +0 -6
- package/dist/vendored/brepjs/operations/multiSweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/patternFns.d.ts +0 -46
- package/dist/vendored/brepjs/operations/patternFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/patternFns.js +0 -126
- package/dist/vendored/brepjs/operations/patternFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/roofFns.d.ts +0 -25
- package/dist/vendored/brepjs/operations/roofFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/roofFns.js +0 -250
- package/dist/vendored/brepjs/operations/roofFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/straightSkeleton.d.ts +0 -29
- package/dist/vendored/brepjs/operations/straightSkeleton.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/straightSkeleton.js +0 -440
- package/dist/vendored/brepjs/operations/straightSkeleton.js.map +0 -1
- package/dist/vendored/brepjs/operations/sweepFns.d.ts +0 -121
- package/dist/vendored/brepjs/operations/sweepFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/sweepFns.js +0 -438
- package/dist/vendored/brepjs/operations/sweepFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/threadFns.d.ts +0 -57
- package/dist/vendored/brepjs/operations/threadFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/threadFns.js +0 -145
- package/dist/vendored/brepjs/operations/threadFns.js.map +0 -1
- package/dist/vendored/brepjs/operations/urdfFns.d.ts +0 -48
- package/dist/vendored/brepjs/operations/urdfFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations/urdfFns.js +0 -171
- package/dist/vendored/brepjs/operations/urdfFns.js.map +0 -1
- package/dist/vendored/brepjs/operations.d.ts +0 -20
- package/dist/vendored/brepjs/operations.d.ts.map +0 -1
- package/dist/vendored/brepjs/operations.js +0 -26
- package/dist/vendored/brepjs/operations.js.map +0 -1
- package/dist/vendored/brepjs/projection/cameraFns.d.ts +0 -63
- package/dist/vendored/brepjs/projection/cameraFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/cameraFns.js +0 -89
- package/dist/vendored/brepjs/projection/cameraFns.js.map +0 -1
- package/dist/vendored/brepjs/projection/makeProjectedEdges.d.ts +0 -14
- package/dist/vendored/brepjs/projection/makeProjectedEdges.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/makeProjectedEdges.js +0 -111
- package/dist/vendored/brepjs/projection/makeProjectedEdges.js.map +0 -1
- package/dist/vendored/brepjs/projection/projectionPlanes.d.ts +0 -18
- package/dist/vendored/brepjs/projection/projectionPlanes.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection/projectionPlanes.js +0 -23
- package/dist/vendored/brepjs/projection/projectionPlanes.js.map +0 -1
- package/dist/vendored/brepjs/projection.d.ts +0 -12
- package/dist/vendored/brepjs/projection.d.ts.map +0 -1
- package/dist/vendored/brepjs/projection.js +0 -12
- package/dist/vendored/brepjs/projection.js.map +0 -1
- package/dist/vendored/brepjs/query/cornerFinder.d.ts +0 -54
- package/dist/vendored/brepjs/query/cornerFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/cornerFinder.js +0 -73
- package/dist/vendored/brepjs/query/cornerFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/directionUtils.d.ts +0 -9
- package/dist/vendored/brepjs/query/directionUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/directionUtils.js +0 -18
- package/dist/vendored/brepjs/query/directionUtils.js.map +0 -1
- package/dist/vendored/brepjs/query/edgeFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/edgeFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/edgeFinder.js +0 -5
- package/dist/vendored/brepjs/query/edgeFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/faceFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/faceFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/faceFinder.js +0 -5
- package/dist/vendored/brepjs/query/faceFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/finderCore.d.ts +0 -49
- package/dist/vendored/brepjs/query/finderCore.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/finderCore.js +0 -120
- package/dist/vendored/brepjs/query/finderCore.js.map +0 -1
- package/dist/vendored/brepjs/query/finderFns.d.ts +0 -25
- package/dist/vendored/brepjs/query/finderFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/finderFns.js +0 -25
- package/dist/vendored/brepjs/query/finderFns.js.map +0 -1
- package/dist/vendored/brepjs/query/helpers.d.ts +0 -11
- package/dist/vendored/brepjs/query/helpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/helpers.js +0 -17
- package/dist/vendored/brepjs/query/helpers.js.map +0 -1
- package/dist/vendored/brepjs/query/shapeDistanceFilter.d.ts +0 -15
- package/dist/vendored/brepjs/query/shapeDistanceFilter.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/shapeDistanceFilter.js +0 -21
- package/dist/vendored/brepjs/query/shapeDistanceFilter.js.map +0 -1
- package/dist/vendored/brepjs/query/shapeFinders.d.ts +0 -39
- package/dist/vendored/brepjs/query/shapeFinders.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/shapeFinders.js +0 -82
- package/dist/vendored/brepjs/query/shapeFinders.js.map +0 -1
- package/dist/vendored/brepjs/query/vertexFinder.d.ts +0 -19
- package/dist/vendored/brepjs/query/vertexFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/vertexFinder.js +0 -73
- package/dist/vendored/brepjs/query/vertexFinder.js.map +0 -1
- package/dist/vendored/brepjs/query/wireFinder.d.ts +0 -5
- package/dist/vendored/brepjs/query/wireFinder.d.ts.map +0 -1
- package/dist/vendored/brepjs/query/wireFinder.js +0 -5
- package/dist/vendored/brepjs/query/wireFinder.js.map +0 -1
- package/dist/vendored/brepjs/query.d.ts +0 -6
- package/dist/vendored/brepjs/query.d.ts.map +0 -1
- package/dist/vendored/brepjs/query.js +0 -6
- package/dist/vendored/brepjs/query.js.map +0 -1
- package/dist/vendored/brepjs/result.d.ts +0 -7
- package/dist/vendored/brepjs/result.d.ts.map +0 -1
- package/dist/vendored/brepjs/result.js +0 -7
- package/dist/vendored/brepjs/result.js.map +0 -1
- package/dist/vendored/brepjs/shapeRef.d.ts +0 -13
- package/dist/vendored/brepjs/shapeRef.d.ts.map +0 -1
- package/dist/vendored/brepjs/shapeRef.js +0 -13
- package/dist/vendored/brepjs/shapeRef.js.map +0 -1
- package/dist/vendored/brepjs/sketching/cannedSketches.d.ts +0 -144
- package/dist/vendored/brepjs/sketching/cannedSketches.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/cannedSketches.js +0 -327
- package/dist/vendored/brepjs/sketching/cannedSketches.js.map +0 -1
- package/dist/vendored/brepjs/sketching/compoundSketch.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/compoundSketch.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/compoundSketch.js +0 -87
- package/dist/vendored/brepjs/sketching/compoundSketch.js.map +0 -1
- package/dist/vendored/brepjs/sketching/draw3d.d.ts +0 -22
- package/dist/vendored/brepjs/sketching/draw3d.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/draw3d.js +0 -150
- package/dist/vendored/brepjs/sketching/draw3d.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawFns.d.ts +0 -122
- package/dist/vendored/brepjs/sketching/drawFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawFns.js +0 -129
- package/dist/vendored/brepjs/sketching/drawFns.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawing.d.ts +0 -128
- package/dist/vendored/brepjs/sketching/drawing.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawing.js +0 -275
- package/dist/vendored/brepjs/sketching/drawing.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingFactories.d.ts +0 -95
- package/dist/vendored/brepjs/sketching/drawingFactories.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingFactories.js +0 -125
- package/dist/vendored/brepjs/sketching/drawingFactories.js.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingPen.d.ts +0 -35
- package/dist/vendored/brepjs/sketching/drawingPen.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/drawingPen.js +0 -57
- package/dist/vendored/brepjs/sketching/drawingPen.js.map +0 -1
- package/dist/vendored/brepjs/sketching/faceSketcher.d.ts +0 -53
- package/dist/vendored/brepjs/sketching/faceSketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/faceSketcher.js +0 -167
- package/dist/vendored/brepjs/sketching/faceSketcher.js.map +0 -1
- package/dist/vendored/brepjs/sketching/shortcuts.d.ts +0 -16
- package/dist/vendored/brepjs/sketching/shortcuts.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/shortcuts.js +0 -24
- package/dist/vendored/brepjs/sketching/shortcuts.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketch.d.ts +0 -157
- package/dist/vendored/brepjs/sketching/sketch.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketch.js +0 -151
- package/dist/vendored/brepjs/sketching/sketch.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketchFns.d.ts +0 -89
- package/dist/vendored/brepjs/sketching/sketchFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketchFns.js +0 -266
- package/dist/vendored/brepjs/sketching/sketchFns.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketcher.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/sketcher.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketcher.js +0 -181
- package/dist/vendored/brepjs/sketching/sketcher.js.map +0 -1
- package/dist/vendored/brepjs/sketching/sketches.d.ts +0 -70
- package/dist/vendored/brepjs/sketching/sketches.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching/sketches.js +0 -91
- package/dist/vendored/brepjs/sketching/sketches.js.map +0 -1
- package/dist/vendored/brepjs/sketching.d.ts +0 -28
- package/dist/vendored/brepjs/sketching.d.ts.map +0 -1
- package/dist/vendored/brepjs/sketching.js +0 -30
- package/dist/vendored/brepjs/sketching.js.map +0 -1
- package/dist/vendored/brepjs/text/fontRegistry.d.ts +0 -23
- package/dist/vendored/brepjs/text/fontRegistry.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/fontRegistry.js +0 -61
- package/dist/vendored/brepjs/text/fontRegistry.js.map +0 -1
- package/dist/vendored/brepjs/text/sketchText.d.ts +0 -31
- package/dist/vendored/brepjs/text/sketchText.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/sketchText.js +0 -30
- package/dist/vendored/brepjs/text/sketchText.js.map +0 -1
- package/dist/vendored/brepjs/text/textBlueprints.d.ts +0 -19
- package/dist/vendored/brepjs/text/textBlueprints.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/textBlueprints.js +0 -61
- package/dist/vendored/brepjs/text/textBlueprints.js.map +0 -1
- package/dist/vendored/brepjs/text/textMetrics.d.ts +0 -40
- package/dist/vendored/brepjs/text/textMetrics.d.ts.map +0 -1
- package/dist/vendored/brepjs/text/textMetrics.js +0 -43
- package/dist/vendored/brepjs/text/textMetrics.js.map +0 -1
- package/dist/vendored/brepjs/text.d.ts +0 -13
- package/dist/vendored/brepjs/text.d.ts.map +0 -1
- package/dist/vendored/brepjs/text.js +0 -13
- package/dist/vendored/brepjs/text.js.map +0 -1
- package/dist/vendored/brepjs/topology/adjacencyFns.d.ts +0 -89
- package/dist/vendored/brepjs/topology/adjacencyFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/adjacencyFns.js +0 -411
- package/dist/vendored/brepjs/topology/adjacencyFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/api.d.ts +0 -145
- package/dist/vendored/brepjs/topology/api.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/api.js +0 -282
- package/dist/vendored/brepjs/topology/api.js.map +0 -1
- package/dist/vendored/brepjs/topology/apiTypes.d.ts +0 -135
- package/dist/vendored/brepjs/topology/apiTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/apiTypes.js +0 -24
- package/dist/vendored/brepjs/topology/apiTypes.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanBatchFns.d.ts +0 -52
- package/dist/vendored/brepjs/topology/booleanBatchFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanBatchFns.js +0 -164
- package/dist/vendored/brepjs/topology/booleanBatchFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.d.ts +0 -21
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.js +0 -23
- package/dist/vendored/brepjs/topology/booleanDiagnosticFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/booleanFns.d.ts +0 -155
- package/dist/vendored/brepjs/topology/booleanFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/booleanFns.js +0 -600
- package/dist/vendored/brepjs/topology/booleanFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/cast.d.ts +0 -48
- package/dist/vendored/brepjs/topology/cast.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/cast.js +0 -113
- package/dist/vendored/brepjs/topology/cast.js.map +0 -1
- package/dist/vendored/brepjs/topology/chamferAngleFns.d.ts +0 -24
- package/dist/vendored/brepjs/topology/chamferAngleFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/chamferAngleFns.js +0 -64
- package/dist/vendored/brepjs/topology/chamferAngleFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/compoundOpsFns.d.ts +0 -6
- package/dist/vendored/brepjs/topology/compoundOpsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/compoundOpsFns.js +0 -6
- package/dist/vendored/brepjs/topology/compoundOpsFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/curveBuilders.d.ts +0 -90
- package/dist/vendored/brepjs/topology/curveBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/curveBuilders.js +0 -125
- package/dist/vendored/brepjs/topology/curveBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/curveFns.d.ts +0 -96
- package/dist/vendored/brepjs/topology/curveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/curveFns.js +0 -191
- package/dist/vendored/brepjs/topology/curveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/evolutionFns.d.ts +0 -78
- package/dist/vendored/brepjs/topology/evolutionFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/evolutionFns.js +0 -271
- package/dist/vendored/brepjs/topology/evolutionFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/faceFns.d.ts +0 -86
- package/dist/vendored/brepjs/topology/faceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/faceFns.js +0 -169
- package/dist/vendored/brepjs/topology/faceFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/healingFns.d.ts +0 -98
- package/dist/vendored/brepjs/topology/healingFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/healingFns.js +0 -338
- package/dist/vendored/brepjs/topology/healingFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/hullFns.d.ts +0 -21
- package/dist/vendored/brepjs/topology/hullFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/hullFns.js +0 -60
- package/dist/vendored/brepjs/topology/hullFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/index.d.ts +0 -14
- package/dist/vendored/brepjs/topology/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/index.js +0 -17
- package/dist/vendored/brepjs/topology/index.js.map +0 -1
- package/dist/vendored/brepjs/topology/meshCache.d.ts +0 -68
- package/dist/vendored/brepjs/topology/meshCache.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/meshCache.js +0 -117
- package/dist/vendored/brepjs/topology/meshCache.js.map +0 -1
- package/dist/vendored/brepjs/topology/meshFns.d.ts +0 -179
- package/dist/vendored/brepjs/topology/meshFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/meshFns.js +0 -393
- package/dist/vendored/brepjs/topology/meshFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/colorFns.d.ts +0 -41
- package/dist/vendored/brepjs/topology/metadata/colorFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/colorFns.js +0 -128
- package/dist/vendored/brepjs/topology/metadata/colorFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.d.ts +0 -44
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.js +0 -168
- package/dist/vendored/brepjs/topology/metadata/faceTagFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.d.ts +0 -59
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.js +0 -109
- package/dist/vendored/brepjs/topology/metadata/metadataPropagation.js.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.d.ts +0 -43
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.js +0 -270
- package/dist/vendored/brepjs/topology/metadata/originTrackingFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/minkowskiFns.d.ts +0 -26
- package/dist/vendored/brepjs/topology/minkowskiFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/minkowskiFns.js +0 -136
- package/dist/vendored/brepjs/topology/minkowskiFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/modifierFns.d.ts +0 -87
- package/dist/vendored/brepjs/topology/modifierFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/modifierFns.js +0 -446
- package/dist/vendored/brepjs/topology/modifierFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/nurbsFns.d.ts +0 -13
- package/dist/vendored/brepjs/topology/nurbsFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/nurbsFns.js +0 -22
- package/dist/vendored/brepjs/topology/nurbsFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/polyhedronFns.d.ts +0 -11
- package/dist/vendored/brepjs/topology/polyhedronFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/polyhedronFns.js +0 -47
- package/dist/vendored/brepjs/topology/polyhedronFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/positionFns.d.ts +0 -18
- package/dist/vendored/brepjs/topology/positionFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/positionFns.js +0 -34
- package/dist/vendored/brepjs/topology/positionFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/primitiveFns.d.ts +0 -244
- package/dist/vendored/brepjs/topology/primitiveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/primitiveFns.js +0 -361
- package/dist/vendored/brepjs/topology/primitiveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeBooleans.d.ts +0 -14
- package/dist/vendored/brepjs/topology/shapeBooleans.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeBooleans.js +0 -24
- package/dist/vendored/brepjs/topology/shapeBooleans.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeFns.d.ts +0 -30
- package/dist/vendored/brepjs/topology/shapeFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeFns.js +0 -50
- package/dist/vendored/brepjs/topology/shapeFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeHelpers.d.ts +0 -9
- package/dist/vendored/brepjs/topology/shapeHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeHelpers.js +0 -14
- package/dist/vendored/brepjs/topology/shapeHelpers.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeModifiers.d.ts +0 -33
- package/dist/vendored/brepjs/topology/shapeModifiers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeModifiers.js +0 -28
- package/dist/vendored/brepjs/topology/shapeModifiers.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.d.ts +0 -29
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.js +0 -135
- package/dist/vendored/brepjs/topology/shapeRef/derivedFaceRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.d.ts +0 -25
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.js +0 -123
- package/dist/vendored/brepjs/topology/shapeRef/edgeRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/index.d.ts +0 -11
- package/dist/vendored/brepjs/topology/shapeRef/index.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/index.js +0 -10
- package/dist/vendored/brepjs/topology/shapeRef/index.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.d.ts +0 -66
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.js +0 -128
- package/dist/vendored/brepjs/topology/shapeRef/refResolveFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.d.ts +0 -18
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.js +0 -51
- package/dist/vendored/brepjs/topology/shapeRef/roleLookup.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/scoring.d.ts +0 -20
- package/dist/vendored/brepjs/topology/shapeRef/scoring.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/scoring.js +0 -65
- package/dist/vendored/brepjs/topology/shapeRef/scoring.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.d.ts +0 -59
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.js +0 -266
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.d.ts +0 -153
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.js +0 -6
- package/dist/vendored/brepjs/topology/shapeRef/shapeRefTypes.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.d.ts +0 -24
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.js +0 -128
- package/dist/vendored/brepjs/topology/shapeRef/vertexRefFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/shapeUtils.d.ts +0 -16
- package/dist/vendored/brepjs/topology/shapeUtils.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/shapeUtils.js +0 -28
- package/dist/vendored/brepjs/topology/shapeUtils.js.map +0 -1
- package/dist/vendored/brepjs/topology/solidBuilders.d.ts +0 -74
- package/dist/vendored/brepjs/topology/solidBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/solidBuilders.js +0 -173
- package/dist/vendored/brepjs/topology/solidBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceBuilders.d.ts +0 -47
- package/dist/vendored/brepjs/topology/surfaceBuilders.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceBuilders.js +0 -162
- package/dist/vendored/brepjs/topology/surfaceBuilders.js.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceFns.d.ts +0 -41
- package/dist/vendored/brepjs/topology/surfaceFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/surfaceFns.js +0 -178
- package/dist/vendored/brepjs/topology/surfaceFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/threeHelpers.d.ts +0 -124
- package/dist/vendored/brepjs/topology/threeHelpers.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/threeHelpers.js +0 -118
- package/dist/vendored/brepjs/topology/threeHelpers.js.map +0 -1
- package/dist/vendored/brepjs/topology/topologyQueryFns.d.ts +0 -100
- package/dist/vendored/brepjs/topology/topologyQueryFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/topologyQueryFns.js +0 -307
- package/dist/vendored/brepjs/topology/topologyQueryFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/transformFns.d.ts +0 -69
- package/dist/vendored/brepjs/topology/transformFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/transformFns.js +0 -235
- package/dist/vendored/brepjs/topology/transformFns.js.map +0 -1
- package/dist/vendored/brepjs/topology/wrapperFns.d.ts +0 -169
- package/dist/vendored/brepjs/topology/wrapperFns.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology/wrapperFns.js +0 -291
- package/dist/vendored/brepjs/topology/wrapperFns.js.map +0 -1
- package/dist/vendored/brepjs/topology.d.ts +0 -28
- package/dist/vendored/brepjs/topology.d.ts.map +0 -1
- package/dist/vendored/brepjs/topology.js +0 -39
- package/dist/vendored/brepjs/topology.js.map +0 -1
- package/dist/vendored/brepjs/utils/arrayAccess.d.ts +0 -12
- package/dist/vendored/brepjs/utils/arrayAccess.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/arrayAccess.js +0 -25
- package/dist/vendored/brepjs/utils/arrayAccess.js.map +0 -1
- package/dist/vendored/brepjs/utils/bug.d.ts +0 -15
- package/dist/vendored/brepjs/utils/bug.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/bug.js +0 -21
- package/dist/vendored/brepjs/utils/bug.js.map +0 -1
- package/dist/vendored/brepjs/utils/ioFilename.d.ts +0 -3
- package/dist/vendored/brepjs/utils/ioFilename.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/ioFilename.js +0 -7
- package/dist/vendored/brepjs/utils/ioFilename.js.map +0 -1
- package/dist/vendored/brepjs/utils/precisionRound.d.ts +0 -11
- package/dist/vendored/brepjs/utils/precisionRound.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/precisionRound.js +0 -19
- package/dist/vendored/brepjs/utils/precisionRound.js.map +0 -1
- package/dist/vendored/brepjs/utils/quaternion.d.ts +0 -18
- package/dist/vendored/brepjs/utils/quaternion.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/quaternion.js +0 -68
- package/dist/vendored/brepjs/utils/quaternion.js.map +0 -1
- package/dist/vendored/brepjs/utils/range.d.ts +0 -3
- package/dist/vendored/brepjs/utils/range.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/range.js +0 -5
- package/dist/vendored/brepjs/utils/range.js.map +0 -1
- package/dist/vendored/brepjs/utils/uuid.d.ts +0 -3
- package/dist/vendored/brepjs/utils/uuid.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/uuid.js +0 -7
- package/dist/vendored/brepjs/utils/uuid.js.map +0 -1
- package/dist/vendored/brepjs/utils/vec2d.d.ts +0 -62
- package/dist/vendored/brepjs/utils/vec2d.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/vec2d.js +0 -107
- package/dist/vendored/brepjs/utils/vec2d.js.map +0 -1
- package/dist/vendored/brepjs/utils/vec3.d.ts +0 -32
- package/dist/vendored/brepjs/utils/vec3.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/vec3.js +0 -35
- package/dist/vendored/brepjs/utils/vec3.js.map +0 -1
- package/dist/vendored/brepjs/utils/zip.d.ts +0 -5
- package/dist/vendored/brepjs/utils/zip.d.ts.map +0 -1
- package/dist/vendored/brepjs/utils/zip.js +0 -8
- package/dist/vendored/brepjs/utils/zip.js.map +0 -1
- package/dist/vendored/brepjs/vectors.d.ts +0 -11
- package/dist/vendored/brepjs/vectors.d.ts.map +0 -1
- package/dist/vendored/brepjs/vectors.js +0 -9
- package/dist/vendored/brepjs/vectors.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器\n *\n * Phase 4:\n * 本文件是 L1 契约 `BrepEngineApi` 的 **brepkit 显式对象字面量实现**——与 occt 侧\n * `occt-primitives.ts` 同构:逐方法接线、方言在适配器内消化、零 `unsupported()` 桩。\n *\n * 契约面收窄后 L1 只含 occt/brepkit 双方**语义可对齐**的方法(唯一真源:\n * `api/surface/engine-method-map.json` 的 aligned/dialect 条目)。brepkit 独有\n * 能力(chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean、\n * minkowskiSum …)与单方语义(loft、平面 section/split 之外的 splitter 语义…)\n * 都不在本对象里——平台代码经原生面 `getBrepkitKernel()`(D3)访问。\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理)。\n */\n\nimport { initBrepkitWasm, resetBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport { DEFAULT_LINEAR_DEFLECTION } from '../tolerance'\nimport { mm } from '../units'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { BREP_HASH_BOUND } from '../brep/engine/types'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepNurbsCurveData,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle ──\n//\n// GOTCHA(2026-10-01 实测,本文件最容易踩的坑):brepkit 句柄是**按类型分命名空间的裸 u32**\n// ——同一个 box 上 solid=0、face=0..5、edge=0..11 同时存在,且**内核没有任何可靠的类型判别式**:\n// getEdgeCurveType(0) / edgeLength(0) → 命中 edge 0\n// getFaceEdges(0) / getFaceNormal(0) → 命中 face 0\n// getSolidFaces(0) → 命中 solid 0\n// 三者对同一个数字 0 各自返回「自己命名空间里 0 号」的数据,谁都不抛错(`getSolidFaces(1)` 才抛)。\n// 因此「拿句柄去问内核它是什么类型」在 brepkit 上**不可能实现**。\n//\n// 但 L1 契约里 `hashCode(handle)` 只收到一个数字,必须知道类型才能选面/边指纹函数。\n// 解法:适配器在**出口**把类型编进句柄高位。类型随句柄流动,`asNum()` 剥掉标签后仍是内核\n// 裸句柄号——内部集合(knownFaces/knownEdges/…)、hashRegistry、全部 `kernel.*` 调用语义不变。\n// 高 3 位(bit 26..28)放类型;虚拟 compound 句柄从 bit 29(0x20000000)起分配,互不干扰。\n// 注意 `asNum` 用**算术减法**而非 `& ~KIND_MASK`:后者把 ≥2^31 的虚拟句柄按 int32 截断成负数。\nconst KIND_SHIFT = 26\nconst KIND_MASK = 7 << KIND_SHIFT\nconst KIND_SOLID = 0 << KIND_SHIFT // 也是 compound / 未登记句柄的默认类\nconst KIND_FACE = 1 << KIND_SHIFT\nconst KIND_EDGE = 2 << KIND_SHIFT\nconst KIND_WIRE = 3 << KIND_SHIFT\nconst KIND_VERTEX = 4 << KIND_SHIFT\n\n/** 句柄类型标签(0 = SOLID/COMPOUND 默认类)。 */\nconst kindOf = (h: BrepHandle): number => (h as unknown as number) & KIND_MASK\n/** 剥掉类型标签,得到 brepkit 内核裸句柄号——所有 `kernel.*` 调用必须用这个。 */\nconst asNum = (h: BrepHandle): number => {\n const n = h as unknown as number\n return n - (n & KIND_MASK)\n}\n/** 实体/compound 句柄(默认类,保持历史行为:无标签 ⇒ 内核按 solid 路径分发)。 */\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asFace = (n: number): BrepHandle => (n | KIND_FACE) as BrepHandle\nconst asEdge = (n: number): BrepHandle => (n | KIND_EDGE) as BrepHandle\nconst asWire = (n: number): BrepHandle => (n | KIND_WIRE) as BrepHandle\nconst asVertex = (n: number): BrepHandle => (n | KIND_VERTEX) as BrepHandle\n/** 按已有类型标签给裸句柄重新打标签(copy/transform 族保持入参类型)。 */\nconst withKind = (kind: number, n: number): BrepHandle => {\n switch (kind) {\n case KIND_FACE: return asFace(n)\n case KIND_EDGE: return asEdge(n)\n case KIND_WIRE: return asWire(n)\n case KIND_VERTEX: return asVertex(n)\n default: return asHandle(n)\n }\n}\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/** 适配器内部的显式失败(替代旧 unsupported 桩:能力缺失一律在静态判定拦截,不在实现体里伪装)。 */\nfunction fail(detail: string): never {\n throw new Error(`[brepkit-kernel] ${detail}`)\n}\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/**\n * brepkit 无任何 hash API(228 个方法里没有 hashCode/subShapeHashes)——faijs 侧的\n * 面/边 hash 全部由适配器**合成指纹**,因此「合成函数」与「消费函数的取模上界」\n * 必须同源:\n * - 消费端 `topologyExt.buildSelectorManifestCore` 用\n * `kernel.hashCode(subShape, BREP_HASH_BOUND)` 回查 faceGroups/edgeGroups 里的 hash;\n * - 生产端(本文件的 solidMesh / faceMesh / compoundMesh / wireframe)必须用**同一个**\n * `BREP_HASH_BOUND` 生成,否则查表恒 miss。\n *\n * GOTCHA(2026-10-01 实测修复):本文件此前生产端用 1e9、消费端用 2147483647,\n * 导致 brepkit 引擎下面行的 triStart/triCount 恒为 0(面积/法向随之丢失)。\n */\nfunction fnv1a(basis: string, upperBound: number): number {\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n return fnv1a(`${params}|${area.toFixed(6)}`, upperBound)\n}\n\n/**\n * 边稳定指纹:曲线类型 + 参数区间 + 两端/中点采样 + 长度 → FNV-1a。\n *\n * 为什么不能用 `faceFingerprint`:它对边恒得同一个值(`getAnalyticSurfaceParams`\n * 与 `faceArea` 对 edge 句柄都抛错)——旧实现在 box 上 12 条边 hash 全同,\n * 使 `topologyExt` 的 edgeGroupByHash 只留最后一条折线(实测 2026-10-01)。\n *\n * 为什么不能只用端点:整圆(圆柱端盖)首末点重合,z 不同的两个圆会撞 —\n * 故补 UV 中点采样。`getBoundingBox(edge)` 在 brepkit 上抛错,不可用。\n */\nfunction edgeFingerprint(kernel: BrepKitKernel, edge: number, upperBound: number): number {\n let curveType = ''\n try { curveType = String(kernel.getEdgeCurveType(edge) ?? '') } catch { /* 非边 */ }\n let range = ''\n let mid = ''\n try {\n // 方言:`getEdgeCurveParameters` 返回 **Float64Array**(如 [0, 10]),不是 JSON 字符串\n // (见本文件头的返回值归一化说明)。曾误用 JSON.parse → 恒定抛错 → range/mid 恒空,\n // 于是所有同类型同长度的边(box 的 12 条棱)挤成同一个指纹(2026-10-01 实测)。\n const p = toNumArray(kernel.getEdgeCurveParameters(edge))\n const first = p[0] ?? 0\n const last = p[1] ?? 0\n range = `${first.toFixed(9)},${last.toFixed(9)}`\n const midT = (first + last) / 2\n const sample = (t: number): string => toNumArray(kernel.evaluateEdgeCurve(edge, t)).map((x) => x.toFixed(6)).join(',')\n mid = `${sample(first)}|${sample(midT)}|${sample(last)}`\n } catch { /* 采样失败 → 退化为类型 + 空几何 */ }\n let length = 0\n try { length = Number(kernel.edgeLength(edge) ?? 0) } catch { /* 长度不可用用 0 */ }\n return fnv1a(`${curveType}|${range}|${mid}|${length.toFixed(6)}`, upperBound)\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // registry 登记的是 hash→handle(输入面)。下游 decodeEvolution/decodeHashEvolution 期望\n // modified 为 OCCT 分段格式 [inHash, count, outHash1, outHash2, ...](见 face-evolution.ts),\n // 不是扁平 hash 列表——GOTCHA:曾误返回扁平列表,把 modified[1](一个 hash ~1e9)当成\n // count,导致 decodeHashEvolution 空转 17 亿次 push 抛 \"Invalid array length\"(2026-09-26 实证)。\n // 故这里反向建 handle→hash 表,逐条目拼出 [inHash, outCount, ...outHashes]。\n const registry = hashRegistry.get(kernel)\n const handleToHash = new Map<number, number>()\n if (registry) for (const [h, handle] of registry) handleToHash.set(handle, h)\n const modified: number[] = []\n const deleted: number[] = []\n for (const oldHandle of deletedKeys) {\n const h = handleToHash.get(oldHandle)\n if (h !== undefined) deleted.push(h)\n }\n for (const [oldHandleStr, newHandles] of Object.entries(evo.modified ?? {})) {\n const inHash = handleToHash.get(Number(oldHandleStr))\n if (inHash === undefined) continue\n const outHashes = (newHandles as number[]).map((nh) => faceFingerprint(kernel, nh, hashUpperBound))\n modified.push(inHash, outHashes.length, ...outHashes)\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断 + 网格实体原语。 */\ntype BrepkitEngineExtras = BrepEngineApi & {\n getMeshFallbackCount(): number\n /**\n * 网格实体原语(`brep/mesh-solid.ts` 的 `MeshSolidKernelOps`)。\n *\n * 为什么放在适配器而不是 L1 契约面:`weldShellsAndFaces` / `unifyFaces` 是\n * brepkit **内核私有**的缝合/合并原语(L1 `BrepEngineApi` 没有对应概念——\n * OCCT 侧用 `sew`+`unifySameDomain` 才有等价语义,形态不同)。挂在适配器\n * 返回对象上,网格后端(`MeshSolidBackend`)经端口取用,契约面保持干净。\n */\n meshSolid: import('../brep/mesh-solid').MeshSolidKernelOps\n}\n\n/**\n * 三点外接圆(makeArcEdge 方言消化:occt 吃 3 点,brepkit 吃圆心+轴)。\n *\n * 圆心偏移取标准式 `d = ( |ab|²·(ac×n) + |ac|²·(n×ab) ) / (2·|n|²)`,`n = ab×ac`。\n * GOTCHA(弧缺陷,2026-09-30 实证):旧式 `( |ac|²·(ab×n) + |ab|²·(n×ac) ) / (2·|n|²)`\n * 把两项的系数对调,等于整体取反——圆心落到弦的另一侧(实测 quarter arc 圆心 (20,0,0)\n * 而非 (0,0,0),三点不等距),brepkit 据此生成 333° 的补弧(弧长 58.195 而非 πr/2)。\n * 判据是等距不变量 `|center−a| = |center−b| = |center−c|`。\n *\n * axis = n/|n| 即三点逆时针扫掠方向的右手法向;brepkit `makeCircleArc3d` 语义为\n * \"沿法向看从 start 逆时针到 end\",故该轴向同时正确表达 ccw 与 cw 弧。\n */\nfunction circumcircle(a: BrepVec3, b: BrepVec3, c: BrepVec3): { center: BrepVec3; axis: BrepVec3 } {\n const abx = b.x - a.x, aby = b.y - a.y, abz = b.z - a.z\n const acx = c.x - a.x, acy = c.y - a.y, acz = c.z - a.z\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const n2 = nx * nx + ny * ny + nz * nz\n if (n2 < 1e-18) fail('makeArcEdge: 3 points are collinear (no circumscribed circle)')\n const ab2 = abx * abx + aby * aby + abz * abz\n const ac2 = acx * acx + acy * acy + acz * acz\n // center = a + ( ab2·(ac×n) + ac2·(n×ab) ) / (2·n²)\n const acxnx = acy * nz - acz * ny, acxny = acz * nx - acx * nz, acxnz = acx * ny - acy * nx\n const nxabx = ny * abz - nz * aby, nxaby = nz * abx - nx * abz, nxabz = nx * aby - ny * abx\n const denom = 2 * n2\n const len = Math.sqrt(n2)\n return {\n center: {\n x: a.x + (ab2 * acxnx + ac2 * nxabx) / denom,\n y: a.y + (ab2 * acxny + ac2 * nxaby) / denom,\n z: a.z + (ab2 * acxnz + ac2 * nxabz) / denom,\n },\n axis: { x: nx / len, y: ny / len, z: nz / len },\n }\n}\n\n/** BrepVec3[] → 扁平 Float64Array(brepkit 坐标数组方言)。 */\nfunction flattenPoints(points: BrepVec3[]): Float64Array {\n const out = new Float64Array(points.length * 3)\n for (let i = 0; i < points.length; i++) {\n out[i * 3] = points[i].x\n out[i * 3 + 1] = points[i].y\n out[i * 3 + 2] = points[i].z\n }\n return out\n}\n\n/**\n * 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。\n * 与 occt 的 createOcctPrimitives 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n // GOTCHA(2026-10-01):本函数此前每次调用都新建一套闭包(knownFaces/knownSolids/\n // derivedFaces…)——即**新建一套句柄桥接层**。句柄号虽然对同一个 wasm 内核全局有效,\n // 但桥接层侧的类型登记表不同:A 层枚举出的面句柄交给 B 层做 getSubShapes,会被当\n // 实体走 tessellateSolidGrouped。BREP 引擎装配点与网格后端装配点都调本函数,必须\n // 拿到**同一个**对象。故按内核实例 memo 化(disposeBrepkit 会清掉)。\n if (memoizedPrimitives && memoizedKernel === kernel) return memoizedPrimitives\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') / makeRectangle / makeFace / buildTriFace\n // 返回的面在此登记;extrude/revolveVec 的 face 输入断言、getSubShapes 的\n // edge/vertex 分发都据此判定(brepkit 无 shape-type 分类 API,见下方注释)。\n const knownFaces = new Set<number>()\n // GOTCHA(2026-09-26 非实体句柄修复):brepkit 的 tessellateSolidGrouped / getSolidFaces\n // 等 *Solid API 只吃 solid 句柄,传 face/wire/edge/compound 即抛\n // \"invalid solid handle: index N out of bounds\"。而 brepkit **没有 shape-type 分类 API**\n // (getFaceEdges(solid) 不抛错、会返回某一面的边,不能 try/catch 探测)。故 meshShape\n // 必须靠这组「已知句柄集合」在执行前静态分发,而不是运行时探测:\n // knownFaces → tessellateFace(JsMesh)\n // knownWires → getWireEdges + tessellateEdge 逐边采样成线段\n // knownEdges → tessellateEdge 直接采样成线段(wire.ts smooth 路径 interpolatePoints 返回 edge)\n // knownCompounds→ 逐子句柄按其类型 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)\n // 不在任何集合里的句柄一律按 solid 走 tessellateSolidGrouped(实体创建不入集合,天然落此路径)。\n const knownWires = new Set<number>()\n const knownEdges = new Set<number>()\n // GOTCHA: getSolidFaces returns GLOBAL face indices (0..5, 6..11, ...) that collide\n // with solid handles (per-type namespace). Enumerated sub-faces must NOT pollute\n // knownFaces, else measuring a later solid whose handle number equals an old\n // enumerated face gets mis-tessellated as a face. derivedFaces is consulted ONLY by\n // getSubShapes edge/vertex drilling, never by meshShape/getBoundingBox.\n const derivedFaces = new Set<number>()\n // 虚拟 compound 句柄计数器(非实体子句柄不进内核 makeCompound,见 makeCompound GOTCHA)。\n const knownCompounds = new Map<number, number[]>()\n let virtualCompoundCounter = 0\n // GOTCHA(2026-09-26):brepkit 句柄按**类型分命名空间**——solid/face/wire/edge 各自从 0 计数\n // (实测 edge=wire=face=solid=0 可共存)。因此「某编号 N 在 knownFaces」与「某编号 N 是 solid」\n // 并不互斥:新 solid 恰好复用了早先某 face 的编号时,knownFaces.has(N) 会把 solid 误判成 face\n // (实测 box makeBox 返回 solid 2,撞 profile 早先的 face 2 → cloneShape 走 copyFace 崩溃)。\n // 建 solid 时必须从 knownFaces/knownWires/knownEdges/derivedFaces 抹掉该编号,让默认 solid 路径生效。\n // derivedFaces 也必须清:getSubShapes(solid,'edge') 会查 derivedFaces.has(s) 误走 getFaceEdges。\n // GOTCHA(2026-10-01 实测):`derivedFaces` 是**全局**面句柄号集合,枚举 solid A 的面会把\n // 面号 0..N 写进去;此后对**裸句柄号恰好相同的另一个 solid**做 getSubShapes(...,'edge')\n // 时,`derivedFaces.has(s)` 为真 → isFaceLike 误判 → 走 getFaceEdges 只拿到一张面的 4 条边\n // (实测 box:12 条边变 4 条)。故必须显式登记 solid 句柄:实体永远不是 face-like。\n const knownSolids = new Set<number>()\n const markSolid = (h: number): number => {\n knownFaces.delete(h); knownWires.delete(h); knownEdges.delete(h); knownCompounds.delete(h); derivedFaces.delete(h)\n knownSolids.add(h)\n return h\n }\n /** 实体数组批量登记(阵列族返回多个实体)。 */\n const markSolids = (list: number[]): number[] => list.map(markSolid)\n /**\n * 句柄类型解析:**标签优先**,无标签时退回已知集合(历史行为)。\n *\n * 标签是权威来源——集合的 key 是**裸句柄号**,face 3 与 edge 3 会共存于不同集合,\n * 靠集合无法区分。故有标签(非 0)时直接用标签,集合里的同名条目一律忽略;\n * 只有无标签句柄(实体/compound/构造 API 外传入)才走集合分发,行为与加标签前一致。\n */\n const resolveKind = (shape: BrepHandle, s: number): number => {\n const tagged = kindOf(shape)\n if (tagged !== KIND_SOLID) return tagged\n // 已登记的实体优先:knownFaces/knownEdges 的 key 是裸句柄号,历史登记(如\n // getSubShapes(face,'edge') 写 knownEdges)与后来新建的 solid 号同号时会把实体判成边。\n if (knownSolids.has(s)) return KIND_SOLID\n if (knownFaces.has(s)) return KIND_FACE\n if (knownWires.has(s)) return KIND_WIRE\n if (knownEdges.has(s)) return KIND_EDGE\n return KIND_SOLID\n }\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const faceCenterOfMass = (face: BrepHandle): BrepVec3 => {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n const u = ((d[0] ?? 0) + (d[1] ?? 1)) / 2\n const v = ((d[2] ?? 0) + (d[3] ?? 1)) / 2\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n }\n\n // ── 非实体 tessellation 助手(meshShape 分发用) ──\n // GOTCHA:tessellateFace 返回 JsMesh(positions/normals 为 Float64Array、indices 为 Uint32Array),\n // **不是** tessellateSolidGrouped 的 JSON 字符串——两者形态不同,勿混用 JSON.parse。\n type JsMesh = { positions: ArrayLike<number>; normals: ArrayLike<number>; indices: ArrayLike<number>; vertexCount: number; triangleCount: number }\n\n /** 单个 face → BrepMeshResult(tessellateFace)。 */\n const faceMesh = (f: number, deflection: number, angular: number): BrepMeshResult => {\n const jm = kernel.tessellateFace(f, deflection, angular) as JsMesh\n const positions = arr(jm.positions)\n const normals = arr(jm.normals)\n const indices = arr(jm.indices)\n const triCount = jm.triangleCount > 0 ? jm.triangleCount : indices.length / 3\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: triCount,\n faceGroups: new Int32Array([0, indices.length, faceFingerprint(kernel, f, BREP_HASH_BOUND)]),\n faceCount: 1,\n }\n }\n\n /** 一组 edge 句柄 → 线段 mesh(positions 为采样点、indices 为端点对)。 */\n // GOTCHA:tessellateEdge(edge, N) 返回扁平 [x,y,z,...] 采样点(NURBS 才采样 N 点,\n // 直线边只回端点),不是三角网格;wire/curve 显示吃「端点对」索引(与 mesh 路径 wireMesh 同构)。\n const edgesToLineMesh = (edgeHandles: number[], deflection: number): BrepMeshResult => {\n const positions: number[] = []\n const indices: number[] = []\n // 采样密度:按 deflection 粗采样即可(1D 线框显示,非精确几何)。\n const nPts = Math.max(12, Math.round(4 / Math.max(deflection, 0.01)))\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n const base = positions.length / 3\n for (let i = 0; i < pts.length; i++) positions.push(pts[i]!)\n const verts = pts.length / 3\n for (let i = 0; i < verts - 1; i++) indices.push(base + i, base + i + 1)\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(positions.length),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: 0,\n faceGroups: new Int32Array(0),\n faceCount: 0,\n }\n }\n\n /** wire → 线段 mesh(getWireEdges 取边集后逐边采样)。 */\n const wireMesh = (wire: number, deflection: number): BrepMeshResult => {\n const edges = arr(kernel.getWireEdges(wire))\n return edgesToLineMesh(edges, deflection)\n }\n\n /** solid → BrepMeshResult(tessellateSolidGrouped,原 meshShape 实体路径抽出)。 */\n const solidMesh = (solid: number, deflection: number, angular: number): BrepMeshResult => {\n const raw = kernel.tessellateSolidGrouped(solid, deflection, angular)\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移\n // (2026-09-19 实测)。**L1 契约的 faceGroups 就是索引单位**(与 OCCT 一致,\n // 见 brep/engine/types.BrepMeshResult)——此处原样透传,不得再除以 3。\n // GOTCHA(2026-10-01):旧实现除以 3 换成三角形单位,与 topologyExt 的 `/3`\n // 叠加 → 面行区间缩小 3 倍。\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(solid))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i]!, BREP_HASH_BOUND))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i]!\n faceGroups[i * 3 + 1] = fo[i + 1]! - fo[i]!\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n }\n\n /** compound → 逐子句柄 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)。 */\n const compoundMesh = (children: number[], deflection: number, angular: number): BrepMeshResult => {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const faceGroups: number[] = []\n let indexOffset = 0\n for (const c of children) {\n let sub: BrepMeshResult\n if (knownFaces.has(c)) {\n sub = faceMesh(c, deflection, angular)\n } else if (knownWires.has(c)) {\n sub = wireMesh(c, deflection)\n } else if (knownEdges.has(c)) {\n sub = edgesToLineMesh([c], deflection)\n } else {\n // 子句柄按 solid 处理(importStep 多实体 / makeCompound(solids))。\n sub = solidMesh(c, deflection, angular)\n }\n const vOffset = positions.length / 3\n for (let i = 0; i < sub.positions.length; i++) positions.push(sub.positions[i]!)\n for (let i = 0; i < sub.normals.length; i++) normals.push(sub.normals[i] ?? 0)\n for (let i = 0; i < sub.indices.length; i++) indices.push(sub.indices[i]! + vOffset)\n if (sub.faceGroups) {\n for (let i = 0; i < sub.faceGroups.length; i += 3) {\n faceGroups.push((sub.faceGroups[i] ?? 0) + indexOffset, sub.faceGroups[i + 1] ?? 0, sub.faceGroups[i + 2] ?? 0)\n }\n }\n indexOffset += sub.indices.length\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: indices.length / 3,\n faceGroups: new Int32Array(faceGroups),\n faceCount: faceGroups.length / 3,\n }\n }\n\n // ── 按句柄类型深拷贝(transform/copy 族分发用) ──\n // GOTCHA:brepkit copySolid/copyFace/copyWire 三者入参严格对应 solid/face/wire 句柄,\n // 传错即崩溃;transformSolid/transformFace/transformWire 均为「原地修改」void。\n // place/translate 等会作用在 profile 产出的 face 上(sew 用例 place 两张 face),\n // 故必须按 knownFaces/knownWires 分发,不能一律 copySolid。\n // kind 为调用方句柄的类型标签(0 = solid):句柄标签是**权威判定**,knownFaces/knownWires\n // 只作无标签时的兜底(枚举出的面句柄只进 derivedFaces,不在 knownFaces 里)。\n const cloneShape = (shape: number, kind: number = KIND_SOLID): number => {\n if (kind === KIND_FACE || knownFaces.has(shape)) { const c = kernel.copyFace(shape); knownFaces.add(c); return c }\n if (kind === KIND_WIRE || knownWires.has(shape)) { const c = kernel.copyWire(shape); knownWires.add(c); return c }\n return markSolid(kernel.copySolid(shape))\n }\n\n /** 深拷贝 + 原地仿射变换(matrix 已经 toKernelMatrix 归一为 16 元素 4×4)。 */\n const cloneAndTransform = (shape: number, matrix16: number[], kind: number = KIND_SOLID): number => {\n const c = cloneShape(shape, kind)\n const m = Float64Array.from(matrix16)\n if (kind === KIND_FACE || knownFaces.has(c)) kernel.transformFace(c, m)\n else if (kind === KIND_WIRE || knownWires.has(c)) kernel.transformWire(c, m)\n else kernel.transformSolid(c, m)\n return c\n }\n\n const api: BrepkitEngineExtras = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(markSolid(kernel.makeBox(dx, dy, dz))) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = markSolid(kernel.makeBox(dx, dy, dz))\n // ⚠️ transformSolid 是「原地修改、返回 undefined」——makeBox 的句柄本身即新实体,\n // 直接原地变换后返回 h;若写 `asHandle(transformSolid(...))` 会拿到 undefined 句柄\n // (2026-09-25 实证:导致 splitBrep 基于半空间盒的 common/cut 全部失效)。\n kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n )))\n return asHandle(h)\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCylinder(radius, height))) },\n makeSphere(radius: number): BrepHandle { return asHandle(markSolid(kernel.makeSphere(radius, 32))) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCone(r1, r2, height))) },\n makeRectangle(width: number, height: number): BrepHandle {\n const f = kernel.makeRectangle(width, height)\n knownFaces.add(f)\n return asFace(f)\n },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(markSolid(kernel.makeEllipsoid(rx, ry, rz))) },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(markSolid(kernel.makeTorus(majorRadius, minorRadius, 64))) },\n makeVertex(x: number, y: number, z: number): BrepHandle { return asVertex(kernel.makeVertex(x, y, z)) },\n\n // ── 造型运算 ──\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n // 方言归一(§3.6-1):L1 口径是挤出向量;brepkit 原生吃 (face, dir, distance)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('extrude requires a face input (plan §3.6-1); got a handle that is not a known face')\n }\n const len = Math.hypot(dx, dy, dz)\n if (len === 0) fail('extrude: zero-length extrusion vector')\n return asHandle(markSolid(kernel.extrude(s, dx / len, dy / len, dz / len, len)))\n },\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle {\n // 方言归一:brepkit revolve 只吃 face(与 extrude 同族断言)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('revolveVec requires a face input; got a handle that is not a known face')\n }\n return asHandle(markSolid(kernel.revolve(\n s, center.x, center.y, center.z, direction.x, direction.y, direction.z, angleDeg,\n )))\n },\n sew(shapesList: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(markSolid(kernel.sewFaces(Uint32Array.from(shapesList.map(asNum)), tolerance ?? 1e-6)))\n },\n sewAndSolidify(faces: BrepHandle[], _tolerance?: number): BrepHandle {\n // brepkit 的 makeSolid 即「缝合并固化成实体」(sewFaces + 建 solid)。\n return asHandle(markSolid(kernel.makeSolid(Uint32Array.from(faces.map(asNum)))))\n },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle {\n // brepkit 参数序 (solid, thickness, open_faces);tolerance 内核固定。\n return asHandle(markSolid(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum)))))\n },\n hullFromPoints(points: BrepVec3[], _tolerance: number): BrepHandle {\n return asHandle(markSolid(kernel.convexHull(flattenPoints(points))))\n },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.fuse(asNum(a), asNum(b))))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.cut(asNum(a), asNum(b))))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle {\n // brepkit 无 `common` 原生名;交集语义由 `intersect` 承担(method-map: dialect)。\n return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b)))))\n },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b))))) },\n fuseAll(shapesList: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fuseAll(Int32Array.from(shapesList.map(asNum))))))\n },\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[] {\n // brepkit 原生 section(solid, plane) 返回剖面 face 句柄组(§3.6-2 新中立名)。\n // GOTCHA:brepkit section 返回的是 **face** 句柄(不是 edge/wire),必须登记进 knownFaces,\n // 否则 op 层 makeCompound(这些 face) 后送 meshShape 会按 solid 路径崩溃。\n const s = asNum(shape)\n const faces = arr(kernel.section(\n s, point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n for (const f of faces) knownFaces.add(f)\n return faces.map(asHandle)\n },\n splitByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): { positive: BrepHandle; negative: BrepHandle } {\n const parts = arr(kernel.split(\n asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n if (parts.length !== 2) {\n fail(`splitByPlane: expected 2 solids, got ${parts.length}`)\n }\n // 法向正侧 = positive(§3.7):按质心在平面法向的投影分类。\n const originDot = point.x * normal.x + point.y * normal.y + point.z * normal.z\n const side = (h: number): number => {\n const c = toNumArray(kernel.centerOfMass(h, 0.05))\n return (c[0] ?? 0) * normal.x + (c[1] ?? 0) * normal.y + (c[2] ?? 0) * normal.z - originDot\n }\n const [a, b] = parts\n markSolid(a); markSolid(b)\n return side(a) >= side(b)\n ? { positive: asHandle(a), negative: asHandle(b) }\n : { positive: asHandle(b), negative: asHandle(a) }\n },\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.chamfer(asNum(solid), Uint32Array.from(edges.map(asNum)), distance))))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n // 方言映射:L1 chamferDistAngle ↔ brepkit chamferDistanceAngle。\n // ⚠️ 单位方言:L1 口径是**度**(`AddDA(distance, angleDeg, E, F)`),brepkit 内核吃**弧度**\n // (2026-09-25 实证:传 45 抛 \"angle must be less than π/2\";传 π/4 正常倒角)。\n const angleRad = (angleDeg * Math.PI) / 180\n return asHandle(markSolid(trackFallback(kernel.chamferDistanceAngle(\n asNum(solid), Uint32Array.from(edges.map(asNum)), distance, angleRad,\n ))))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fillet(asNum(solid), Uint32Array.from(edges.map(asNum)), radius))))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n // 方言映射:L1 filletVariable(solid, edge, startRadius, endRadius)(单边变半径)\n // ↔ brepkit filletVariable(solid, json) 吃**序列** `[{edge, radius1, radius2}, ...]`。\n // ⚠️ 直接传 4 个位置参数会触发 wasm memory out of bounds(2026-09-25 实证)。\n const spec = JSON.stringify([{ edge: asNum(edge), radius1: startRadius, radius2: endRadius }])\n return asHandle(markSolid(trackFallback(kernel.filletVariable(asNum(solid), spec))))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(translationMatrix(dx, dy, dz)), kindOf(shape)))\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(scaleMatrix(center, factor)), kindOf(shape)))\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n locate(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n copy(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n copyShape(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n composeTransform(m1: number[], m2: number[]): number[] {\n // 方言:L1 是 3×4 行主序 12 元素;brepkit composeTransforms 吃/回 4×4 16 元素。\n const r = kernel.composeTransforms(\n Float64Array.from(toKernelMatrix(m1)),\n Float64Array.from(toKernelMatrix(m2)),\n )\n return Array.from(r as ArrayLike<number>).slice(0, 12)\n },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle {\n return withKind(kindOf(shape), kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z))\n },\n\n // ── 阵列 ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n // 阵列内核返回 compound(原始句柄)→ 拆成实体数组并逐个登记(见 markSolid GOTCHA)。\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n circularPattern(shape: BrepHandle, _center: BrepVec3, axis: BrepVec3, _angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(markSolid(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n )))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n const e = kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z)\n knownEdges.add(e)\n return asEdge(e)\n },\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle {\n // 方言消化:occt 吃 3 点;brepkit makeCircleArc3d 吃 (start,end,center,axis)。\n const { center, axis } = circumcircle(start, mid, end)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n axis.x, axis.y, axis.z,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle {\n // 方言消化:L1 吃控制点(Bezier);brepkit 原生 makeNurbsEdge 吃\n // (start,end,degree,knots,control_points,weights)。Bezier = degree n-1 的\n // clamped NURBS,knots = [0]×n + [1]×n,weights 全 1。\n const n = controlPoints.length\n if (n < 2) fail('makeBezierEdge: need at least 2 control points')\n const degree = n - 1\n const knots = new Float64Array(2 * n)\n for (let i = n; i < 2 * n; i++) knots[i] = 1\n const weights = new Float64Array(n).fill(1)\n const first = controlPoints[0]\n const last = controlPoints[n - 1]\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree, knots, flattenPoints(controlPoints), weights,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic = false,\n ): BrepHandle {\n // 方言消化:L1 吃 occt 形态 (poles, weights, knots, multiplicities, degree),\n // brepkit makeNurbsEdge 吃 (start,end,degree, **展开后** knots, control_points, weights)。\n // 两侧 knots 的表示不同:occt 给「去重值 + 多重度」两个平行数组,brepkit 要\n // 逐项重复后的整条节点向量(与 makeBezierEdge 里手工铺 [0]×n+[1]×n 同一口径)。\n const controlPoints: BrepVec3[] = []\n for (let i = 0; i + 2 < poles.length; i += 3) {\n controlPoints.push({ x: poles[i]!, y: poles[i + 1]!, z: poles[i + 2]! })\n }\n const n = controlPoints.length\n if (n < 2) fail('makeBSplineEdge: need at least 2 poles')\n const expanded: number[] = []\n for (let i = 0; i < knots.length; i++) {\n const rep = multiplicities[i] ?? 1\n for (let j = 0; j < rep; j++) expanded.push(knots[i]!)\n }\n const first = controlPoints[0]!\n const last = controlPoints[n - 1]!\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree,\n Float64Array.from(expanded),\n flattenPoints(controlPoints),\n weights.length === n ? Float64Array.from(weights) : new Float64Array(n).fill(1),\n )\n void periodic\n knownEdges.add(e)\n return asEdge(e)\n },\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle {\n const e = kernel.makeCircleEdge(\n center.x, center.y, center.z, normal.x, normal.y, normal.z, radius,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n const w = kernel.makeWire(Int32Array.from(edges.map(asNum)), false)\n knownWires.add(w)\n return asWire(w)\n },\n makeFace(wire: BrepHandle): BrepHandle {\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asFace(f)\n },\n makeCompound(shapesList: BrepHandle[]): BrepHandle {\n const kids = arr(shapesList.map(asNum))\n // GOTCHA(2026-09-26):brepkit makeCompound 只接受 **solid** 句柄——把 face/wire\n // (sectionByPlane 截面面组)塞进去即抛 \"invalid solid handle\"。非实体子句柄时\n // 不调内核,改用高段虚拟句柄(0x20000000+,避开类型标签 bit26..28),仅靠 knownCompounds 表分发\n // meshShape/wireframe/getSubShapes/getBoundingBox,不触达内核。\n const hasNonSolid = kids.some((k) => knownFaces.has(k) || knownWires.has(k) || knownEdges.has(k) || knownCompounds.has(k))\n if (hasNonSolid) {\n virtualCompoundCounter++\n const v = 0x20000000 + virtualCompoundCounter\n knownCompounds.set(v, kids)\n return asHandle(v)\n }\n const c = kernel.makeCompound(Int32Array.from(kids))\n knownCompounds.set(c, kids)\n return asHandle(c)\n },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n // addHolesToFace 返回**新 face 句柄**(同曲面 + 内孔 wire),必须登记进 knownFaces,\n // 否则 profile(op) 带孔面送 meshShape 会落到 solid 路径崩溃。\n const f = kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum)))\n knownFaces.add(f)\n return asFace(f)\n },\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle {\n const f = kernel.makePolygon(flattenPoints([a, b, c]))\n knownFaces.add(f)\n return asFace(f)\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const angular = options?.angularDeflection ?? 0.5\n const s = asNum(shape)\n // 非实体句柄按类型静态分发(标签优先,见文件头 GOTCHA:brepkit 无 shape-type 分类 API)。\n // 顺序:face → wire → edge → compound → solid。实体创建不入任何集合,天然落 solid 路径。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return faceMesh(s, deflection, angular)\n if (kind === KIND_WIRE) return wireMesh(s, deflection)\n if (kind === KIND_EDGE) return edgesToLineMesh([s], deflection)\n const compoundChildren = knownCompounds.get(s)\n if (compoundChildren) return compoundMesh(compoundChildren, deflection, angular)\n // solid(或未登记句柄):走原 tessellateSolidGrouped 路径。\n return solidMesh(s, deflection, angular)\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const s = asNum(shape)\n // GOTCHA:meshEdgesAll 是 solid-only API——buildTopologyFromMesh 会对 face/wire/edge\n // 产物调 wireframe(...),传入非实体句柄即抛 \"invalid solid handle\"。按已知集合分发:\n // face -> getFaceEdges;wire -> getWireEdges;edge -> [self];否则 solid 走 meshEdgesAll。\n let edgeHandles: number[] | null = null\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) edgeHandles = arr(kernel.getFaceEdges(s))\n else if (kind === KIND_WIRE) edgeHandles = arr(kernel.getWireEdges(s))\n else if (kind === KIND_EDGE) edgeHandles = [s]\n else if (knownCompounds.has(s)) {\n // compound(sectionByPlane 面组):逐子面收集边。\n edgeHandles = []\n for (const k of knownCompounds.get(s)!) {\n if (knownFaces.has(k)) edgeHandles.push(...arr(kernel.getFaceEdges(k)))\n else if (knownWires.has(k)) edgeHandles.push(...arr(kernel.getWireEdges(k)))\n else if (knownEdges.has(k)) edgeHandles.push(k)\n }\n }\n if (edgeHandles) {\n const nPts = Math.max(12, Math.round(4 / Math.max(d, 0.01)))\n const positions: number[] = []\n // offsets 为**浮点单位**(L1 契约:edgeGroups = [pointStart_float, pointCount_float, hash])\n const offsets: number[] = [0]\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n for (const p of pts) positions.push(p)\n offsets.push(positions.length)\n }\n const edgeGroups = new Int32Array(edgeHandles.length * 3)\n for (let i = 0; i < edgeHandles.length; i++) {\n edgeGroups[i * 3] = offsets[i] ?? 0\n edgeGroups[i * 3 + 1] = (offsets[i + 1] ?? positions.length) - (offsets[i] ?? 0)\n // hash 必须与 hashCode(edge, BREP_HASH_BOUND) 同源,否则 topologyExt 查不到折线。\n edgeGroups[i * 3 + 2] = edgeFingerprint(kernel, edgeHandles[i]!, BREP_HASH_BOUND)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount: edgeHandles.length }\n }\n // solid(或未登记句柄):走原 meshEdgesAll 路径。\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(s, d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n // hash:meshEdgesAll 与 getSolidEdges 同序(同一次遍历),据此回填真实边指纹;\n // 取不到(数量不符)时退化为序号——此时 topologyExt 查不到折线,曲面边走\n // 曲线采样兜底(功能可用,只是丢掉内核线框数据)。\n let solidEdges: number[] | null = null\n try { const es = arr(kernel.getSolidEdges(s)); if (es.length === edgeCount) solidEdges = es } catch { /* 非实体 */ }\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = solidEdges\n ? edgeFingerprint(kernel, solidEdges[i]!, BREP_HASH_BOUND)\n : i\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n // 出口一律按 **type 参数**打类型标签(`type` 就是调用方声明的子形类型,是权威来源;\n // 不用内核反查——brepkit 无法反查类型,见文件头句柄桥接 GOTCHA)。\n const tag = (list: number[]): BrepHandle[] => {\n switch (type) {\n case 'face': return list.map(asFace)\n case 'edge': return list.map(asEdge)\n case 'vertex': return list.map(asVertex)\n case 'wire': return list.map(asWire)\n default: return list.map(asHandle)\n }\n }\n // ── A. 有类型标签:按标签分发,**不登记 knownEdges** ──\n // GOTCHA(2026-10-01 实测回归):历史分支里 `es.forEach(e => knownEdges.add(e))` 会把\n // 面/线的边号写进 knownEdges,而 knownEdges 的 key 是**裸句柄号**、会与后来新建的\n // solid 号相撞 → resolveKind 把实体判成边 → getBoundingBox 返回边的退化 bbox\n // (实测 8 个 op 的 AABB 全错)。标签句柄自带类型,登记已无必要,故这里一律不登记。\n const tagged = kindOf(shape)\n if (tagged === KIND_FACE) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') return tag(arr(kernel.getFaceEdges(s)))\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (tagged === KIND_WIRE) {\n if (type === 'edge') return tag(arr(kernel.getWireEdges(s)))\n return []\n }\n if (tagged === KIND_EDGE) {\n // input is itself an edge (wire.ts smooth path: interpolatePoints returns edge)\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n // ── B. 无标签:逐字沿用历史集合分发(含 knownEdges 登记),行为与加标签前一致 ──\n // GOTCHA(2026-09-26 非实体句柄修复):buildTopologyFromMesh 会对**面产物**\n // 调 getSubShapes(face,'face')。brepkit 的 getSolidFaces/getShellFaces 是 solid-only,\n // 对面句柄一个抛 \"invalid solid handle\"、catch 里再抛 \"invalid shell handle\"——\n // 两跳都不被捕获即崩溃。无标签时靠已知集合先分发。\n if (knownFaces.has(s)) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') { const es = arr(kernel.getFaceEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (knownWires.has(s)) {\n if (type === 'edge') { const es = arr(kernel.getWireEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n return []\n }\n if (knownEdges.has(s)) {\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n const compKids = knownCompounds.get(s)\n if (compKids) {\n // compound(sectionByPlane 面组 / makeCompound 多实体 / importStep 多实体):\n // 'face' 返回子面,'solid' 返回子实体,'edge' 返回各子句柄的边,其余空。\n if (type === 'face') return tag(compKids.filter((k) => knownFaces.has(k)))\n if (type === 'solid') return tag(compKids.filter((k) => !knownFaces.has(k) && !knownWires.has(k) && !knownEdges.has(k)))\n if (type === 'edge') {\n // 2026-10-02 补:此前 compound 的边查询落到 `return []`,会让归一化后的\n // getLength(compound) 静默变 0。按子句柄的已知类型分发,与 occt 的\n // getSubShapes(compound,'edge')(返回全部子边)对齐。\n const out: number[] = []\n for (const kid of compKids) {\n if (knownFaces.has(kid)) out.push(...arr(kernel.getFaceEdges(kid)))\n else if (knownWires.has(kid)) out.push(...arr(kernel.getWireEdges(kid)))\n else if (knownEdges.has(kid)) out.push(kid)\n else out.push(...arr(kernel.getSolidEdges(kid)))\n }\n return tag(out)\n }\n return []\n }\n let list: number[]\n // 实体句柄(knownSolids)永远不是 face-like——`derivedFaces` 只装「枚举出来的面号」,\n // 与 solid 号共用一个裸数字空间,不排除会造成误判(见 knownSolids 注释)。\n const isFaceLike = knownFaces.has(s) || (derivedFaces.has(s) && !knownSolids.has(s))\n if (type === 'face') {\n // 输入可能是 solid 或 shell。枚举到的子面登记到 derivedFaces(不进 knownFaces,\n // 避免与 solid 句柄撞号——见 derivedFaces 注释)。\n try { list = arr(kernel.getSolidFaces(s)) } catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) derivedFaces.add(f)\n } else if (type === 'edge') {\n list = isFaceLike\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = isFaceLike\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n fail(`getSubShapes(${type}): unsupported sub-shape type`)\n }\n return tag(list)\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') fail(`subShapeHashes(${type}): only 'face' is supported by brepkit`)\n const s = asNum(shape)\n // GOTCHA:buildTopologyFromMesh 会对面产物调 subShapeHashes(face,'face');\n // getSolidFaces 是 solid-only,对面句柄崩溃。输入本身是面时,哈希即其自身指纹。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return [faceFingerprint(kernel, s, hashUpperBound)]\n // wire/edge 无面;compound(sectionByPlane 面组)的子句柄即面。\n if (kind === KIND_WIRE || kind === KIND_EDGE) return []\n const compKids = knownCompounds.get(s)\n if (compKids) {\n const faces = compKids.filter((k) => knownFaces.has(k))\n return faces.map((f) => faceFingerprint(kernel, f, hashUpperBound))\n }\n const faces = arr(kernel.getSolidFaces(s))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n // 类型由句柄标签决定(见文件头句柄桥接 GOTCHA):brepkit 无法反查句柄类型,\n // 而面指纹与边指纹必须落在**互不相交**的取值域,否则 edgeGroups 的 hash 会\n // 命中面的指纹(实测:box 的 edge 0..5 句柄号与 face 0..5 相同)。\n // 生产端(faceMesh/solidMesh/compoundMesh → faceFingerprint;wireframe →\n // edgeFingerprint)与消费端(本函数)用同一组函数、同一个上界,查表才命中。\n const raw = asNum(shape)\n return kindOf(shape) === KIND_EDGE\n ? edgeFingerprint(kernel, raw, upperBound)\n : faceFingerprint(kernel, raw, upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean {\n // 裸句柄号相同还不够:brepkit 的 face 3 与 edge 3 是**两个不同的形**。\n // 两侧都带标签时必须同类型;任一侧无标签(历史调用方)时退回纯数字比较,\n // 保证加标签不改变既有行为。\n if (asNum(a) !== asNum(b)) return false\n const ka = kindOf(a), kb = kindOf(b)\n return ka === kb || ka === KIND_SOLID || kb === KIND_SOLID\n },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n shapeType(shape: BrepHandle): string {\n try {\n const s = arr(kernel.getSolidFaces(asNum(shape)))\n const f = arr(kernel.getFaces(asNum(shape)))\n return s.length > 0 ? 'SOLID' : f.length > 0 ? 'FACE' : 'COMPOUND'\n } catch { return 'COMPOUND' }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n edgeToFaceMap(shape: BrepHandle): unknown {\n // brepkit 返回 JSON 字符串 {\"edgeId\":[faceId,...]};L1 契约是 unknown(调用方自解析)。\n return kernel.edgeToFaceMap(asNum(shape))\n },\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[] {\n return arr(kernel.adjacentFaces(asNum(shape), asNum(face))).map(asFace)\n },\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[] {\n return arr(kernel.sharedEdges(asNum(a), asNum(b))).map(asEdge)\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n surfaceCenterOfMass: faceCenterOfMass,\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as {\n degree?: number\n periodic?: boolean\n rational?: boolean\n knots?: number[]\n multiplicities?: number[]\n poles?: number[]\n weights?: number[]\n }\n if (p && typeof p.degree === 'number') {\n return {\n degree: p.degree,\n periodic: !!p.periodic,\n rational: !!p.rational,\n knots: (p.knots ?? []).map(Number),\n multiplicities: (p.multiplicities ?? []).map(Number),\n poles: (p.poles ?? []).map(Number),\n weights: (p.weights ?? []).map(Number),\n }\n }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle] {\n // brepkit 原生返回 Uint32Array 两元素(occt 返回 [ShapeHandle, ShapeHandle])——\n // 适配器统一为二元组。两个碎片都必须登记进 knownEdges,否则下游 meshShape 分发不到。\n const parts = kernel.curveSplit(asNum(edge), param)\n if (parts.length !== 2) fail(`curveSplit: expected 2 edges, got ${parts.length}`)\n const a = parts[0]!\n const b = parts[1]!\n knownEdges.add(a)\n knownEdges.add(b)\n return [asEdge(a), asEdge(b)]\n },\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle {\n // GOTCHA:interpolatePoints 返回 **edge** 句柄(不是 wire)——wire.ts smooth 路径把它\n // 直接当 wire 送 solidToShape。登记进 knownEdges,meshShape 才能走 tessellateEdge 路径。\n const e = kernel.interpolatePoints(flattenPoints(points), degree)\n knownEdges.add(e)\n return asEdge(e)\n },\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(kernel.defeature(asNum(shape), Uint32Array.from(faces.map(asNum)))))\n },\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle {\n return asHandle(kernel.draft(\n asNum(shape),\n Uint32Array.from(faces.map(asNum)),\n pull.x, pull.y, pull.z,\n neutral.x, neutral.y, neutral.z,\n angleDeg,\n ))\n },\n removeHolesFromFace(face: BrepHandle): BrepHandle {\n // removeHolesFromFace 返回**新 face 句柄**(去掉内孔的同曲面 face),必须登记进 knownFaces。\n const f = kernel.removeHolesFromFace(asNum(face))\n knownFaces.add(f)\n return asFace(f)\n },\n reverseShape(shape: BrepHandle): BrepHandle {\n return withKind(kindOf(shape), kernel.reverseShape(asNum(shape)))\n },\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown {\n // brepkit 返回 JSON 字符串 {\"visible\":[[x,y,…]],\"hidden\":[[…]]};L1 契约是 unknown。\n return kernel.projectEdges(\n asNum(shape),\n origin.x, origin.y, origin.z,\n direction.x, direction.y, direction.z,\n xAxis.x, xAxis.y, xAxis.z,\n hiddenLines, deflection,\n )\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const s = asNum(shape)\n const bboxFromPoints = (pts: ArrayLike<number>): BrepBoundingBox => {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (let i = 0; i + 2 < pts.length; i += 3) {\n xmin = Math.min(xmin, pts[i]!); ymin = Math.min(ymin, pts[i + 1]!); zmin = Math.min(zmin, pts[i + 2]!)\n xmax = Math.max(xmax, pts[i]!); ymax = Math.max(ymax, pts[i + 1]!); zmax = Math.max(zmax, pts[i + 2]!)\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n const solidBbox = (h: number): BrepBoundingBox => {\n const b = kernel.boundingBox(h) as ArrayLike<number>\n return { xmin: b[0]!, ymin: b[1]!, zmin: b[2]!, xmax: b[3]!, ymax: b[4]!, zmax: b[5]! }\n }\n const kids = knownCompounds.get(s)\n if (kids) {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const k of kids) {\n try {\n let b: BrepBoundingBox\n if (knownFaces.has(k)) b = bboxFromPoints(arr(kernel.tessellateFace(k, 0.1, 1).positions))\n else if (knownWires.has(k)) b = bboxFromPoints(arr(kernel.getWireEdges(k)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n else if (knownEdges.has(k)) b = bboxFromPoints(arr(kernel.tessellateEdge(k, 16)))\n else b = solidBbox(k)\n xmin = Math.min(xmin, b.xmin); ymin = Math.min(ymin, b.ymin); zmin = Math.min(zmin, b.zmin)\n xmax = Math.max(xmax, b.xmax); ymax = Math.max(ymax, b.ymax); zmax = Math.max(zmax, b.zmax)\n } catch { /* 子项 bbox 查询失败忽略 */ }\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n // GOTCHA:kernel.boundingBox 是 solid-only。face/wire/edge 句柄必须走 tessellation 采样,\n // 否则 measure() 对 wire/profile 调 getBoundingBox 即崩 \"invalid solid handle\"。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return bboxFromPoints(arr(kernel.tessellateFace(s, 0.1, 1).positions))\n if (kind === KIND_WIRE) return bboxFromPoints(arr(kernel.getWireEdges(s)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n if (kind === KIND_EDGE) return bboxFromPoints(arr(kernel.tessellateEdge(s, 16)))\n return solidBbox(s)\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n getSurfaceArea(shape: BrepHandle): number {\n // 方言映射:L1 getSurfaceArea ↔ brepkit surfaceArea(solid, deflection)。\n return Number(kernel.surfaceArea(asNum(shape), 0.05))\n },\n getLength(shape: BrepHandle): number {\n // 唯一 edge 弧长之和(与 occt 适配器同口径,D5)。\n // 旧实现用 `try { getEdgeCurveType } catch { wireLength }` 判别入参差异,但\n // getEdgeCurveType 对 solid / face / wire **也不抛错**,于是统一走 edgeLength,\n // 返回「首条边」长度——值随构建历史漂移(盒 20 vs 10;两边的 wire 真长 15 却给 20),\n // 且与 occt 的 Σ 面周长(280)不同口径。改为按 topo 去重枚举边后求和。\n let total = 0\n for (const e of api.getSubShapes(shape, 'edge')) total += api.curveLength(e)\n return total\n },\n\n // ── 校验与修复 ──\n // ⚠️ brepkit 的修复类内核函数全部是「**原地修改入参实体 + 返回修复计数**」,不是返回新句柄:\n // healSolid(solid) → 修复的问题数\n // fixFaceOrientations(solid) → 修复的面数\n // unifyFaces(solid) → 合并删除的面数\n // removeDegenerateEdges(s,tol) → 删除的边数\n // repairSolid(solid) → 修复后剩余错误数\n // 直接 `asHandle(kernel.healSolid(...))` 会把计数(常见为 0)当成句柄,得到无效实体\n // (2026-09-25 实证)。正确适配:先 copySolid 保护调用方原实体,再原地修复副本,返回副本句柄。\n isValid(shape: BrepHandle): boolean {\n // brepkit validateSolid 返回错误数(0 = 有效)。\n return Number(kernel.validateSolid(asNum(shape))) === 0\n },\n unifySameDomain(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.unifyFaces(c)\n return asHandle(c)\n },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixShape(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixFaceOrientations(shape: BrepHandle): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.fixFaceOrientations(c)\n return asHandle(c)\n },\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.removeDegenerateEdges(c, tolerance ?? 1e-6)\n return asHandle(c)\n },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n // ⚠️ brepkit importStep 吃 **Uint8Array**(不是字符串),返回 **Uint32Array**(文件内可含多个 solid)。\n // L1 契约是单 BrepHandle:0 个 → fail;1 个 → 直通;多个 → 合成 compound(2026-09-25 实证)。\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n const solids = arr(kernel.importStep(bytes))\n if (solids.length === 0) fail('importStep: kernel returned no solid')\n const c = solids.length === 1 ? solids[0] : kernel.makeCompound(Uint32Array.from(solids))\n if (solids.length > 1) knownCompounds.set(c, solids)\n return asHandle(markSolid(c))\n },\n exportStep(shape: BrepHandle): string {\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(asNum(shape))\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(data: string | ArrayBuffer): BrepHandle {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n return asHandle(markSolid(kernel.importStl(bytes)))\n },\n fromBREP(data: string): BrepHandle {\n // ⚠️ brepkit fromBREP 吃字符串(STEP 文本或 toBREP/toBrepJson 输出,内核自动判别),\n // 与 serializeSolid/deserializeSolid 的**二进制 arena** 是两套机制。\n // 旧实现误用 `deserializeSolid(atob(data))`:base64 解码破坏了 STEP 文本 → 往返必失败\n // (2026-09-25 实证:fromBREP(STEP)、fromBREP(toBREP)、fromBREP(toBrepJson) 均成功)。\n return asHandle(markSolid(kernel.fromBREP(data)))\n },\n\n // ── 网格实体原语(方案 2026-10-01 §3.3;内核私有,不在 L1 契约面) ──\n // 规范构造顺序**不可交换**:importMesh → weld → unify。\n // 实测(brepkit-kernel/mesh-solid-topology.test.ts):先 unify 后 weld 会把实体做坏\n // (体积归零、validate 非 0)。本对象只暴露原语,顺序由 `normalizeMeshSolid` 驱动。\n meshSolid: {\n importMesh(positions: Float32Array, indices: Uint32Array): BrepHandle {\n // 方言:importIndexedMesh 吃 **Float64Array**(坐标)+ **Uint32Array**(索引),\n // 返回裸 solid 号。逐三角形建面、顶点按坐标焊接、边不共享(不是真流形)。\n const coords = new Float64Array(positions.length)\n for (let i = 0; i < positions.length; i++) coords[i] = positions[i]!\n return asHandle(markSolid(kernel.importIndexedMesh(coords, indices)))\n },\n weld(faces: BrepHandle[], tolerance: number): BrepHandle {\n // weldShellsAndFaces 吃**裸面号数组**(Uint32Array),返回新 solid 号;\n // 把重复边缝成共享边 → 真流形(实测 10mm 立方体 36 边 → 18 边、validate 0)。\n return asHandle(markSolid(kernel.weldShellsAndFaces(\n Uint32Array.from(faces.map((f) => asNum(f))),\n tolerance,\n )))\n },\n unify(solid: BrepHandle): number {\n // GOTCHA:unifyFaces 是**原地修改**入参实体,返回值是**被合并掉的面数**\n // (不是新句柄)。写成 `const s = unify(...)` 会拿到一个落在合法句柄区间的\n // 数字,后续全部查询打在一个无关实体上且不报错。\n return Number(kernel.unifyFaces(asNum(solid)))\n },\n },\n\n // ── 面演化(L1 三员 + filletWithHistory,双方都有对齐实现) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.intersectWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n }\n memoizedKernel = kernel\n memoizedPrimitives = api\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n\n/** 已初始化的 brepkit 内核单例(createBrepkitPrimitives 时赋值)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/** 已构建的 L1 契约面对象(按内核实例 memo;见 createBrepkitPrimitives 的 GOTCHA)。 */\nlet memoizedPrimitives: BrepkitEngineExtras | null = null\nlet memoizedKernel: BrepKitKernel | null = null\n\n/**\n * 原生 brepkit 内核面(D3):平台特定代码访问 brepkit 独有能力的唯一入口\n * (chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean 等)。\n *\n * ⚠️ 这是**平台特定**出口——import 本函数即声明「这段代码只跑在 brepkit 引擎下」。\n * 可移植代码请用 `getBrepApi()`(L1 契约面)。\n *\n * @returns the live brepkit wasm kernel singleton.\n */\nexport function getBrepkitKernel(): BrepKitKernel {\n if (!liveKernel) {\n throw new Error('[brepkit-kernel] kernel not initialized: call createBrepkitPrimitives() first')\n }\n return liveKernel\n}\n\n/**\n * 释放内核单例(测试收尾用;宿主常驻不需调用)。\n *\n * GOTCHA(2026-10-01 修复):旧实现只 `free()` 内核、**不重置** brepkitWasm.ts 里\n * 缓存的 `initPromise`,也不丢 memo 化的原语对象 → 第二次 `createBrepkitPrimitives()`\n * 拿到**已释放**的内核,随后一切内核调用报 `null pointer passed to rust`\n * (实测:`BrepKernel.makeBox`)。现在三样一起清:内核、initPromise、memo 原语。\n */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n memoizedPrimitives = null\n memoizedKernel = null\n resetBrepkitWasm()\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}
|
|
1
|
+
{"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器\n *\n * Phase 4:\n * 本文件是 L1 契约 `BrepEngineApi` 的 **brepkit 显式对象字面量实现**——与 occt 侧\n * `occt-primitives.ts` 同构:逐方法接线、方言在适配器内消化、零 `unsupported()` 桩。\n *\n * 契约面收窄后 L1 只含 occt/brepkit 双方**语义可对齐**的方法(唯一真源:\n * `api/surface/engine-method-map.json` 的 aligned/dialect 条目)。brepkit 独有\n * 能力(chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean、\n * minkowskiSum …)与单方语义(loft、平面 section/split 之外的 splitter 语义…)\n * 都不在本对象里——平台代码经原生面 `getBrepkitKernel()`(D3)访问。\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理)。\n */\n\nimport { initBrepkitWasm, resetBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport { DEFAULT_LINEAR_DEFLECTION } from '../tolerance'\nimport { mm } from '../units'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { BREP_HASH_BOUND } from '../brep/engine/types'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepNurbsCurveData,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle ──\n//\n// GOTCHA(2026-10-01 实测,本文件最容易踩的坑):brepkit 句柄是**按类型分命名空间的裸 u32**\n// ——同一个 box 上 solid=0、face=0..5、edge=0..11 同时存在,且**内核没有任何可靠的类型判别式**:\n// getEdgeCurveType(0) / edgeLength(0) → 命中 edge 0\n// getFaceEdges(0) / getFaceNormal(0) → 命中 face 0\n// getSolidFaces(0) → 命中 solid 0\n// 三者对同一个数字 0 各自返回「自己命名空间里 0 号」的数据,谁都不抛错(`getSolidFaces(1)` 才抛)。\n// 因此「拿句柄去问内核它是什么类型」在 brepkit 上**不可能实现**。\n//\n// 但 L1 契约里 `hashCode(handle)` 只收到一个数字,必须知道类型才能选面/边指纹函数。\n// 解法:适配器在**出口**把类型编进句柄高位。类型随句柄流动,`asNum()` 剥掉标签后仍是内核\n// 裸句柄号——内部集合(knownFaces/knownEdges/…)、hashRegistry、全部 `kernel.*` 调用语义不变。\n// 高 3 位(bit 26..28)放类型;虚拟 compound 句柄从 bit 29(0x20000000)起分配,互不干扰。\n// 注意 `asNum` 用**算术减法**而非 `& ~KIND_MASK`:后者把 ≥2^31 的虚拟句柄按 int32 截断成负数。\nconst KIND_SHIFT = 26\nconst KIND_MASK = 7 << KIND_SHIFT\nconst KIND_SOLID = 0 << KIND_SHIFT // 也是 compound / 未登记句柄的默认类\nconst KIND_FACE = 1 << KIND_SHIFT\nconst KIND_EDGE = 2 << KIND_SHIFT\nconst KIND_WIRE = 3 << KIND_SHIFT\nconst KIND_VERTEX = 4 << KIND_SHIFT\n\n/** 句柄类型标签(0 = SOLID/COMPOUND 默认类)。 */\nconst kindOf = (h: BrepHandle): number => (h as unknown as number) & KIND_MASK\n/** 剥掉类型标签,得到 brepkit 内核裸句柄号——所有 `kernel.*` 调用必须用这个。 */\nconst asNum = (h: BrepHandle): number => {\n const n = h as unknown as number\n return n - (n & KIND_MASK)\n}\n/** 实体/compound 句柄(默认类,保持历史行为:无标签 ⇒ 内核按 solid 路径分发)。 */\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asFace = (n: number): BrepHandle => (n | KIND_FACE) as BrepHandle\nconst asEdge = (n: number): BrepHandle => (n | KIND_EDGE) as BrepHandle\nconst asWire = (n: number): BrepHandle => (n | KIND_WIRE) as BrepHandle\nconst asVertex = (n: number): BrepHandle => (n | KIND_VERTEX) as BrepHandle\n/** 按已有类型标签给裸句柄重新打标签(copy/transform 族保持入参类型)。 */\nconst withKind = (kind: number, n: number): BrepHandle => {\n switch (kind) {\n case KIND_FACE: return asFace(n)\n case KIND_EDGE: return asEdge(n)\n case KIND_WIRE: return asWire(n)\n case KIND_VERTEX: return asVertex(n)\n default: return asHandle(n)\n }\n}\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/** 适配器内部的显式失败(替代旧 unsupported 桩:能力缺失一律在静态判定拦截,不在实现体里伪装)。 */\nfunction fail(detail: string): never {\n throw new Error(`[brepkit-kernel] ${detail}`)\n}\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/**\n * brepkit 无任何 hash API(228 个方法里没有 hashCode/subShapeHashes)——faijs 侧的\n * 面/边 hash 全部由适配器**合成指纹**,因此「合成函数」与「消费函数的取模上界」\n * 必须同源:\n * - 消费端 `topologyExt.buildSelectorManifestCore` 用\n * `kernel.hashCode(subShape, BREP_HASH_BOUND)` 回查 faceGroups/edgeGroups 里的 hash;\n * - 生产端(本文件的 solidMesh / faceMesh / compoundMesh / wireframe)必须用**同一个**\n * `BREP_HASH_BOUND` 生成,否则查表恒 miss。\n *\n * GOTCHA(2026-10-01 实测修复):本文件此前生产端用 1e9、消费端用 2147483647,\n * 导致 brepkit 引擎下面行的 triStart/triCount 恒为 0(面积/法向随之丢失)。\n */\nfunction fnv1a(basis: string, upperBound: number): number {\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n return fnv1a(`${params}|${area.toFixed(6)}`, upperBound)\n}\n\n/**\n * 边稳定指纹:曲线类型 + 参数区间 + 两端/中点采样 + 长度 → FNV-1a。\n *\n * 为什么不能用 `faceFingerprint`:它对边恒得同一个值(`getAnalyticSurfaceParams`\n * 与 `faceArea` 对 edge 句柄都抛错)——旧实现在 box 上 12 条边 hash 全同,\n * 使 `topologyExt` 的 edgeGroupByHash 只留最后一条折线(实测 2026-10-01)。\n *\n * 为什么不能只用端点:整圆(圆柱端盖)首末点重合,z 不同的两个圆会撞 —\n * 故补 UV 中点采样。`getBoundingBox(edge)` 在 brepkit 上抛错,不可用。\n */\nfunction edgeFingerprint(kernel: BrepKitKernel, edge: number, upperBound: number): number {\n let curveType = ''\n try { curveType = String(kernel.getEdgeCurveType(edge) ?? '') } catch { /* 非边 */ }\n let range = ''\n let mid = ''\n try {\n // 方言:`getEdgeCurveParameters` 返回 **Float64Array**(如 [0, 10]),不是 JSON 字符串\n // (见本文件头的返回值归一化说明)。曾误用 JSON.parse → 恒定抛错 → range/mid 恒空,\n // 于是所有同类型同长度的边(box 的 12 条棱)挤成同一个指纹(2026-10-01 实测)。\n const p = toNumArray(kernel.getEdgeCurveParameters(edge))\n const first = p[0] ?? 0\n const last = p[1] ?? 0\n range = `${first.toFixed(9)},${last.toFixed(9)}`\n const midT = (first + last) / 2\n const sample = (t: number): string => toNumArray(kernel.evaluateEdgeCurve(edge, t)).map((x) => x.toFixed(6)).join(',')\n mid = `${sample(first)}|${sample(midT)}|${sample(last)}`\n } catch { /* 采样失败 → 退化为类型 + 空几何 */ }\n let length = 0\n try { length = Number(kernel.edgeLength(edge) ?? 0) } catch { /* 长度不可用用 0 */ }\n return fnv1a(`${curveType}|${range}|${mid}|${length.toFixed(6)}`, upperBound)\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // registry 登记的是 hash→handle(输入面)。下游 decodeEvolution/decodeHashEvolution 期望\n // modified 为 OCCT 分段格式 [inHash, count, outHash1, outHash2, ...](见 face-evolution.ts),\n // 不是扁平 hash 列表——GOTCHA:曾误返回扁平列表,把 modified[1](一个 hash ~1e9)当成\n // count,导致 decodeHashEvolution 空转 17 亿次 push 抛 \"Invalid array length\"(2026-09-26 实证)。\n // 故这里反向建 handle→hash 表,逐条目拼出 [inHash, outCount, ...outHashes]。\n const registry = hashRegistry.get(kernel)\n const handleToHash = new Map<number, number>()\n if (registry) for (const [h, handle] of registry) handleToHash.set(handle, h)\n const modified: number[] = []\n const deleted: number[] = []\n for (const oldHandle of deletedKeys) {\n const h = handleToHash.get(oldHandle)\n if (h !== undefined) deleted.push(h)\n }\n for (const [oldHandleStr, newHandles] of Object.entries(evo.modified ?? {})) {\n const inHash = handleToHash.get(Number(oldHandleStr))\n if (inHash === undefined) continue\n const outHashes = (newHandles as number[]).map((nh) => faceFingerprint(kernel, nh, hashUpperBound))\n modified.push(inHash, outHashes.length, ...outHashes)\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断 + 网格实体原语。 */\ntype BrepkitEngineExtras = BrepEngineApi & {\n getMeshFallbackCount(): number\n /**\n * 网格实体原语(`brep/mesh-solid.ts` 的 `MeshSolidKernelOps`)。\n *\n * 为什么放在适配器而不是 L1 契约面:`weldShellsAndFaces` / `unifyFaces` 是\n * brepkit **内核私有**的缝合/合并原语(L1 `BrepEngineApi` 没有对应概念——\n * OCCT 侧用 `sew`+`unifySameDomain` 才有等价语义,形态不同)。挂在适配器\n * 返回对象上,网格后端(`MeshSolidBackend`)经端口取用,契约面保持干净。\n */\n meshSolid: import('../brep/mesh-solid').MeshSolidKernelOps\n}\n\n/**\n * 三点外接圆(makeArcEdge 方言消化:occt 吃 3 点,brepkit 吃圆心+轴)。\n *\n * 圆心偏移取标准式 `d = ( |ab|²·(ac×n) + |ac|²·(n×ab) ) / (2·|n|²)`,`n = ab×ac`。\n * GOTCHA(弧缺陷,2026-09-30 实证):旧式 `( |ac|²·(ab×n) + |ab|²·(n×ac) ) / (2·|n|²)`\n * 把两项的系数对调,等于整体取反——圆心落到弦的另一侧(实测 quarter arc 圆心 (20,0,0)\n * 而非 (0,0,0),三点不等距),brepkit 据此生成 333° 的补弧(弧长 58.195 而非 πr/2)。\n * 判据是等距不变量 `|center−a| = |center−b| = |center−c|`。\n *\n * axis = n/|n| 即三点逆时针扫掠方向的右手法向;brepkit `makeCircleArc3d` 语义为\n * \"沿法向看从 start 逆时针到 end\",故该轴向同时正确表达 ccw 与 cw 弧。\n */\nfunction circumcircle(a: BrepVec3, b: BrepVec3, c: BrepVec3): { center: BrepVec3; axis: BrepVec3 } {\n const abx = b.x - a.x, aby = b.y - a.y, abz = b.z - a.z\n const acx = c.x - a.x, acy = c.y - a.y, acz = c.z - a.z\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const n2 = nx * nx + ny * ny + nz * nz\n if (n2 < 1e-18) fail('makeArcEdge: 3 points are collinear (no circumscribed circle)')\n const ab2 = abx * abx + aby * aby + abz * abz\n const ac2 = acx * acx + acy * acy + acz * acz\n // center = a + ( ab2·(ac×n) + ac2·(n×ab) ) / (2·n²)\n const acxnx = acy * nz - acz * ny, acxny = acz * nx - acx * nz, acxnz = acx * ny - acy * nx\n const nxabx = ny * abz - nz * aby, nxaby = nz * abx - nx * abz, nxabz = nx * aby - ny * abx\n const denom = 2 * n2\n const len = Math.sqrt(n2)\n return {\n center: {\n x: a.x + (ab2 * acxnx + ac2 * nxabx) / denom,\n y: a.y + (ab2 * acxny + ac2 * nxaby) / denom,\n z: a.z + (ab2 * acxnz + ac2 * nxabz) / denom,\n },\n axis: { x: nx / len, y: ny / len, z: nz / len },\n }\n}\n\n/** BrepVec3[] → 扁平 Float64Array(brepkit 坐标数组方言)。 */\nfunction flattenPoints(points: BrepVec3[]): Float64Array {\n const out = new Float64Array(points.length * 3)\n for (let i = 0; i < points.length; i++) {\n out[i * 3] = points[i].x\n out[i * 3 + 1] = points[i].y\n out[i * 3 + 2] = points[i].z\n }\n return out\n}\n\n/**\n * 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。\n * 与 occt 的 createOcctPrimitives 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n // GOTCHA(2026-10-01):本函数此前每次调用都新建一套闭包(knownFaces/knownSolids/\n // derivedFaces…)——即**新建一套句柄桥接层**。句柄号虽然对同一个 wasm 内核全局有效,\n // 但桥接层侧的类型登记表不同:A 层枚举出的面句柄交给 B 层做 getSubShapes,会被当\n // 实体走 tessellateSolidGrouped。BREP 引擎装配点与网格后端装配点都调本函数,必须\n // 拿到**同一个**对象。故按内核实例 memo 化(disposeBrepkit 会清掉)。\n if (memoizedPrimitives && memoizedKernel === kernel) return memoizedPrimitives\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') / makeRectangle / makeFace / buildTriFace\n // 返回的面在此登记;extrude/revolveVec 的 face 输入断言、getSubShapes 的\n // edge/vertex 分发都据此判定(brepkit 无 shape-type 分类 API,见下方注释)。\n const knownFaces = new Set<number>()\n // GOTCHA(2026-09-26 非实体句柄修复):brepkit 的 tessellateSolidGrouped / getSolidFaces\n // 等 *Solid API 只吃 solid 句柄,传 face/wire/edge/compound 即抛\n // \"invalid solid handle: index N out of bounds\"。而 brepkit **没有 shape-type 分类 API**\n // (getFaceEdges(solid) 不抛错、会返回某一面的边,不能 try/catch 探测)。故 meshShape\n // 必须靠这组「已知句柄集合」在执行前静态分发,而不是运行时探测:\n // knownFaces → tessellateFace(JsMesh)\n // knownWires → getWireEdges + tessellateEdge 逐边采样成线段\n // knownEdges → tessellateEdge 直接采样成线段(wire.ts smooth 路径 interpolatePoints 返回 edge)\n // knownCompounds→ 逐子句柄按其类型 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)\n // 不在任何集合里的句柄一律按 solid 走 tessellateSolidGrouped(实体创建不入集合,天然落此路径)。\n const knownWires = new Set<number>()\n const knownEdges = new Set<number>()\n // GOTCHA: getSolidFaces returns GLOBAL face indices (0..5, 6..11, ...) that collide\n // with solid handles (per-type namespace). Enumerated sub-faces must NOT pollute\n // knownFaces, else measuring a later solid whose handle number equals an old\n // enumerated face gets mis-tessellated as a face. derivedFaces is consulted ONLY by\n // getSubShapes edge/vertex drilling, never by meshShape/getBoundingBox.\n const derivedFaces = new Set<number>()\n // 虚拟 compound 句柄计数器(非实体子句柄不进内核 makeCompound,见 makeCompound GOTCHA)。\n const knownCompounds = new Map<number, number[]>()\n let virtualCompoundCounter = 0\n // GOTCHA(2026-09-26):brepkit 句柄按**类型分命名空间**——solid/face/wire/edge 各自从 0 计数\n // (实测 edge=wire=face=solid=0 可共存)。因此「某编号 N 在 knownFaces」与「某编号 N 是 solid」\n // 并不互斥:新 solid 恰好复用了早先某 face 的编号时,knownFaces.has(N) 会把 solid 误判成 face\n // (实测 box makeBox 返回 solid 2,撞 profile 早先的 face 2 → cloneShape 走 copyFace 崩溃)。\n // 建 solid 时必须从 knownFaces/knownWires/knownEdges/derivedFaces 抹掉该编号,让默认 solid 路径生效。\n // derivedFaces 也必须清:getSubShapes(solid,'edge') 会查 derivedFaces.has(s) 误走 getFaceEdges。\n // GOTCHA(2026-10-01 实测):`derivedFaces` 是**全局**面句柄号集合,枚举 solid A 的面会把\n // 面号 0..N 写进去;此后对**裸句柄号恰好相同的另一个 solid**做 getSubShapes(...,'edge')\n // 时,`derivedFaces.has(s)` 为真 → isFaceLike 误判 → 走 getFaceEdges 只拿到一张面的 4 条边\n // (实测 box:12 条边变 4 条)。故必须显式登记 solid 句柄:实体永远不是 face-like。\n const knownSolids = new Set<number>()\n const markSolid = (h: number): number => {\n knownFaces.delete(h); knownWires.delete(h); knownEdges.delete(h); knownCompounds.delete(h); derivedFaces.delete(h)\n knownSolids.add(h)\n return h\n }\n /** 实体数组批量登记(阵列族返回多个实体)。 */\n const markSolids = (list: number[]): number[] => list.map(markSolid)\n /**\n * 句柄类型解析:**标签优先**,无标签时退回已知集合(历史行为)。\n *\n * 标签是权威来源——集合的 key 是**裸句柄号**,face 3 与 edge 3 会共存于不同集合,\n * 靠集合无法区分。故有标签(非 0)时直接用标签,集合里的同名条目一律忽略;\n * 只有无标签句柄(实体/compound/构造 API 外传入)才走集合分发,行为与加标签前一致。\n */\n const resolveKind = (shape: BrepHandle, s: number): number => {\n const tagged = kindOf(shape)\n if (tagged !== KIND_SOLID) return tagged\n // 已登记的实体优先:knownFaces/knownEdges 的 key 是裸句柄号,历史登记(如\n // getSubShapes(face,'edge') 写 knownEdges)与后来新建的 solid 号同号时会把实体判成边。\n if (knownSolids.has(s)) return KIND_SOLID\n if (knownFaces.has(s)) return KIND_FACE\n if (knownWires.has(s)) return KIND_WIRE\n if (knownEdges.has(s)) return KIND_EDGE\n return KIND_SOLID\n }\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const faceCenterOfMass = (face: BrepHandle): BrepVec3 => {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n const u = ((d[0] ?? 0) + (d[1] ?? 1)) / 2\n const v = ((d[2] ?? 0) + (d[3] ?? 1)) / 2\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n }\n\n // ── 非实体 tessellation 助手(meshShape 分发用) ──\n // GOTCHA:tessellateFace 返回 JsMesh(positions/normals 为 Float64Array、indices 为 Uint32Array),\n // **不是** tessellateSolidGrouped 的 JSON 字符串——两者形态不同,勿混用 JSON.parse。\n type JsMesh = { positions: ArrayLike<number>; normals: ArrayLike<number>; indices: ArrayLike<number>; vertexCount: number; triangleCount: number }\n\n /** 单个 face → BrepMeshResult(tessellateFace)。 */\n const faceMesh = (f: number, deflection: number, angular: number): BrepMeshResult => {\n const jm = kernel.tessellateFace(f, deflection, angular) as JsMesh\n const positions = arr(jm.positions)\n const normals = arr(jm.normals)\n const indices = arr(jm.indices)\n const triCount = jm.triangleCount > 0 ? jm.triangleCount : indices.length / 3\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: triCount,\n faceGroups: new Int32Array([0, indices.length, faceFingerprint(kernel, f, BREP_HASH_BOUND)]),\n faceCount: 1,\n }\n }\n\n /** 一组 edge 句柄 → 线段 mesh(positions 为采样点、indices 为端点对)。 */\n // GOTCHA:tessellateEdge(edge, N) 返回扁平 [x,y,z,...] 采样点(NURBS 才采样 N 点,\n // 直线边只回端点),不是三角网格;wire/curve 显示吃「端点对」索引(与 mesh 路径 wireMesh 同构)。\n const edgesToLineMesh = (edgeHandles: number[], deflection: number): BrepMeshResult => {\n const positions: number[] = []\n const indices: number[] = []\n // 采样密度:按 deflection 粗采样即可(1D 线框显示,非精确几何)。\n const nPts = Math.max(12, Math.round(4 / Math.max(deflection, 0.01)))\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n const base = positions.length / 3\n for (let i = 0; i < pts.length; i++) positions.push(pts[i]!)\n const verts = pts.length / 3\n for (let i = 0; i < verts - 1; i++) indices.push(base + i, base + i + 1)\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(positions.length),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: 0,\n faceGroups: new Int32Array(0),\n faceCount: 0,\n }\n }\n\n /** wire → 线段 mesh(getWireEdges 取边集后逐边采样)。 */\n const wireMesh = (wire: number, deflection: number): BrepMeshResult => {\n const edges = arr(kernel.getWireEdges(wire))\n return edgesToLineMesh(edges, deflection)\n }\n\n /** solid → BrepMeshResult(tessellateSolidGrouped,原 meshShape 实体路径抽出)。 */\n const solidMesh = (solid: number, deflection: number, angular: number): BrepMeshResult => {\n const raw = kernel.tessellateSolidGrouped(solid, deflection, angular)\n // GOTCHA (2026-10-10, real-device iOS): tessellateSolidGrouped once returned\n // undefined on WeChat's JavaScriptCore worker; the unguarded JSON.parse(undefined)\n // threw the engine-specific \"JSON Parse error: Unexpected identifier \\\"undefined\\\"\",\n // which toOpFailure wrapped into an unlocatable E_OP_FAILED. Fail loudly with\n // handle/param context instead — reporting beats masking, and this also surfaces\n // null / object / other non-string shapes (JSON.parse's implicit ToString would\n // otherwise mangle them into unrecognizable messages).\n if (typeof raw !== 'string') {\n fail(`tessellateSolidGrouped(${solid}, deflection=${deflection}, angular=${angular}) returned ${typeof raw} (${String(raw)}); expected a JSON string`)\n }\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移\n // (2026-09-19 实测)。**L1 契约的 faceGroups 就是索引单位**(与 OCCT 一致,\n // 见 brep/engine/types.BrepMeshResult)——此处原样透传,不得再除以 3。\n // GOTCHA(2026-10-01):旧实现除以 3 换成三角形单位,与 topologyExt 的 `/3`\n // 叠加 → 面行区间缩小 3 倍。\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(solid))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i]!, BREP_HASH_BOUND))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i]!\n faceGroups[i * 3 + 1] = fo[i + 1]! - fo[i]!\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n }\n\n /** compound → 逐子句柄 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)。 */\n const compoundMesh = (children: number[], deflection: number, angular: number): BrepMeshResult => {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const faceGroups: number[] = []\n let indexOffset = 0\n for (const c of children) {\n let sub: BrepMeshResult\n if (knownFaces.has(c)) {\n sub = faceMesh(c, deflection, angular)\n } else if (knownWires.has(c)) {\n sub = wireMesh(c, deflection)\n } else if (knownEdges.has(c)) {\n sub = edgesToLineMesh([c], deflection)\n } else {\n // 子句柄按 solid 处理(importStep 多实体 / makeCompound(solids))。\n sub = solidMesh(c, deflection, angular)\n }\n const vOffset = positions.length / 3\n for (let i = 0; i < sub.positions.length; i++) positions.push(sub.positions[i]!)\n for (let i = 0; i < sub.normals.length; i++) normals.push(sub.normals[i] ?? 0)\n for (let i = 0; i < sub.indices.length; i++) indices.push(sub.indices[i]! + vOffset)\n if (sub.faceGroups) {\n for (let i = 0; i < sub.faceGroups.length; i += 3) {\n faceGroups.push((sub.faceGroups[i] ?? 0) + indexOffset, sub.faceGroups[i + 1] ?? 0, sub.faceGroups[i + 2] ?? 0)\n }\n }\n indexOffset += sub.indices.length\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: indices.length / 3,\n faceGroups: new Int32Array(faceGroups),\n faceCount: faceGroups.length / 3,\n }\n }\n\n // ── 按句柄类型深拷贝(transform/copy 族分发用) ──\n // GOTCHA:brepkit copySolid/copyFace/copyWire 三者入参严格对应 solid/face/wire 句柄,\n // 传错即崩溃;transformSolid/transformFace/transformWire 均为「原地修改」void。\n // place/translate 等会作用在 profile 产出的 face 上(sew 用例 place 两张 face),\n // 故必须按 knownFaces/knownWires 分发,不能一律 copySolid。\n // kind 为调用方句柄的类型标签(0 = solid):句柄标签是**权威判定**,knownFaces/knownWires\n // 只作无标签时的兜底(枚举出的面句柄只进 derivedFaces,不在 knownFaces 里)。\n const cloneShape = (shape: number, kind: number = KIND_SOLID): number => {\n if (kind === KIND_FACE || knownFaces.has(shape)) { const c = kernel.copyFace(shape); knownFaces.add(c); return c }\n if (kind === KIND_WIRE || knownWires.has(shape)) { const c = kernel.copyWire(shape); knownWires.add(c); return c }\n return markSolid(kernel.copySolid(shape))\n }\n\n /** 深拷贝 + 原地仿射变换(matrix 已经 toKernelMatrix 归一为 16 元素 4×4)。 */\n const cloneAndTransform = (shape: number, matrix16: number[], kind: number = KIND_SOLID): number => {\n const c = cloneShape(shape, kind)\n const m = Float64Array.from(matrix16)\n if (kind === KIND_FACE || knownFaces.has(c)) kernel.transformFace(c, m)\n else if (kind === KIND_WIRE || knownWires.has(c)) kernel.transformWire(c, m)\n else kernel.transformSolid(c, m)\n return c\n }\n\n // ── 扫掠 / 放样共用助手(L1 中立名 sweep/loft 的 brepkit 方言消化)──\n\n /** 截面句柄(面直用、wire 升面)→ brepkit face 句柄号(升面结果登记 knownFaces)。 */\n const profileFaceOf = (section: BrepHandle, what: string): number => {\n const n = asNum(section)\n const kind = resolveKind(section, n)\n if (kind === KIND_FACE) return n\n if (kind === KIND_WIRE) {\n // GOTCHA(与 makeFace 同因):makeFaceFromWire 产出的是**新** face 句柄号,\n // 不登记 knownFaces 的话,后续任何按类型分发的调用(meshShape / 再扫掠)\n // 会把它当 solid 走 tessellateSolidGrouped 崩溃。\n const f = kernel.makeFaceFromWire(n)\n knownFaces.add(f)\n return f\n }\n return fail(`${what} requires a planar face or a closed wire; got a handle that is neither`)\n }\n\n /** edge 的参数域 `[first, last]`(brepkit `getEdgeCurveParameters` 返回 Float64Array)。 */\n const curveParamsOf = (edge: number): [number, number] => {\n const d = toNumArray(kernel.getEdgeCurveParameters(edge))\n return [d[0] ?? 0, d[d.length - 1] ?? 1]\n }\n\n /** 相邻重复点去重(折线链顶点与采样点列共用;容差 1e-9 mm)。 */\n const pushUnique = (out: BrepVec3[], p: BrepVec3): void => {\n const last = out[out.length - 1]\n if (\n last !== undefined &&\n Math.abs(last.x - p.x) < 1e-9 &&\n Math.abs(last.y - p.y) < 1e-9 &&\n Math.abs(last.z - p.z) < 1e-9\n ) return\n out.push(p)\n }\n\n /** 折线链顶点:各线的首点 + 末线终点(供 degree=1 插值,拐角不圆化)。 */\n const lineChainVertices = (edges: number[]): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0))))\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t1))))\n }\n return out\n }\n\n /** 曲线链按参数等分采样(每条边 perEdge 段),供 NURBS 拟合。 */\n const sampleChainPoints = (edges: number[], perEdge = 8): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n for (let i = 0; i <= perEdge; i++) {\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0 + (t1 - t0) * (i / perEdge)))))\n }\n }\n return out\n }\n\n /**\n * 路径 wire → 一条可作 brepkit 扫掠路径的 NURBS edge(方案 §4.1 三条路线)。\n *\n * - 路线 3:单条 NURBS/Bézier 边 → 原样返回,零损失;\n * - 路线 1:折线 wire(`cad.wire` 默认产物,全 line 边)→ 顶点列 + **degree=1** 插值。\n * 一次 NURBS 的基就是折线,这不是近似而是精确表示 —— 比一律 degree=3 拟合更忠实;\n * - 路线 2:含圆弧等曲线边 → 按参数等分采样后 degree=3 拟合(近似,方案 §8 已声明代价)。\n *\n * GOTCHA-1:`getNurbsCurveData` 对解析边(line/circle)**抛错**而非返回 null,\n * 「先拿它探路、失败再拟合」会踩坑 —— 必须**先**判 `getEdgeCurveType` 再选路线。\n *\n * GOTCHA-2(2026-10-10 实测):**不要**走 `kernel.sweep(face, degree, knots, ctrl, weights)`\n * —— 本仓 `getNurbsCurveData` 给出的 `knots`(去重值 + 平行 multiplicities)展开后\n * 与 brepkit `sweep` 期望的节点向量长度不一致,实测报\n * `invalid knot vector: expected 2 knots, got 6`。改用直吃 edge 句柄的\n * `sweepWithOptions`(本 helper 因此返回 edge 而不是四数组),绕开该约定差异。\n */\n const wireToSpineEdge = (spine: BrepHandle): number => {\n const w = asNum(spine)\n if (resolveKind(spine, w) !== KIND_WIRE) fail('sweep: spine must be a wire')\n const edges = arr(kernel.getWireEdges(w))\n if (edges.length === 0) fail('sweep: spine wire has no edges')\n const typeOf = (e: number): string => String(kernel.getEdgeCurveType(e)).toUpperCase()\n const ANALYTIC = new Set(['LINE', 'CIRCLE', 'ELLIPSE'])\n // 路线 3:单条非解析边(NURBS/Bézier)原样用,零损失。\n if (edges.length === 1 && !ANALYTIC.has(typeOf(edges[0]!))) return edges[0]!\n // 路线 1 / 2:采样点列 → interpolatePoints 拟合成一条 NURBS 边。\n const allLines = edges.every((e) => typeOf(e) === 'LINE')\n const pts = allLines ? lineChainVertices(edges) : sampleChainPoints(edges)\n if (pts.length < 2) fail('sweep: spine wire degenerates to fewer than 2 distinct points')\n const degree = allLines ? 1 : Math.min(3, pts.length - 1)\n // GOTCHA:brepkit 内核是 **GC 型**,没有 `release` 方法(HAND_MAP 里 core:'release'\n // 的 brepkit 侧为 null,适配器 no-op)——这里不能 `kernel.release(fit)`;\n // 拟合边登记进 knownEdges 后由内核统一管理生命周期。\n const fit = kernel.interpolatePoints(flattenPoints(pts), degree)\n knownEdges.add(fit)\n return fit\n }\n\n const api: BrepkitEngineExtras = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(markSolid(kernel.makeBox(dx, dy, dz))) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = markSolid(kernel.makeBox(dx, dy, dz))\n // ⚠️ transformSolid 是「原地修改、返回 undefined」——makeBox 的句柄本身即新实体,\n // 直接原地变换后返回 h;若写 `asHandle(transformSolid(...))` 会拿到 undefined 句柄\n // (2026-09-25 实证:导致 splitBrep 基于半空间盒的 common/cut 全部失效)。\n kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n )))\n return asHandle(h)\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCylinder(radius, height))) },\n makeSphere(radius: number): BrepHandle { return asHandle(markSolid(kernel.makeSphere(radius, 32))) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCone(r1, r2, height))) },\n makeRectangle(width: number, height: number): BrepHandle {\n const f = kernel.makeRectangle(width, height)\n knownFaces.add(f)\n return asFace(f)\n },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(markSolid(kernel.makeEllipsoid(rx, ry, rz))) },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(markSolid(kernel.makeTorus(majorRadius, minorRadius, 64))) },\n makeVertex(x: number, y: number, z: number): BrepHandle { return asVertex(kernel.makeVertex(x, y, z)) },\n\n // ── 造型运算 ──\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n // 方言归一(§3.6-1):L1 口径是挤出向量;brepkit 原生吃 (face, dir, distance)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('extrude requires a face input (plan §3.6-1); got a handle that is not a known face')\n }\n const len = Math.hypot(dx, dy, dz)\n if (len === 0) fail('extrude: zero-length extrusion vector')\n return asHandle(markSolid(kernel.extrude(s, dx / len, dy / len, dz / len, len)))\n },\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle {\n // 方言归一:brepkit revolve 只吃 face(与 extrude 同族断言)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('revolveVec requires a face input; got a handle that is not a known face')\n }\n return asHandle(markSolid(kernel.revolve(\n s, center.x, center.y, center.z, direction.x, direction.y, direction.z, angleDeg,\n )))\n },\n sweep(profile: BrepHandle, spine: BrepHandle): BrepHandle {\n // L1 中立 sweep:occt 侧走 sweepPipeShell;brepkit 只吃 (face, 路径 edge)\n // —— 两处方言都在这里消化,op 层只看到「截面 + 路径 → 体」。\n // ① 截面 wire → face(开口 wire 建面由内核拒绝;不在适配器预判,内核报错更权威)。\n const faceNum = profileFaceOf(profile, 'sweep')\n // ② 路径 wire → 一条 NURBS edge(见 wireToSpineEdge 的 GOTCHA-2)。\n const pathEdge = wireToSpineEdge(spine)\n // ③ sweepWithOptions:contact_mode 'rmf'(内核默认)、无缩放律、默认分段、光滑转角。\n return asHandle(markSolid(kernel.sweepWithOptions(\n faceNum, pathEdge, 'rmf', new Float64Array(0), 0, 'smooth',\n )))\n },\n loft(sections: BrepHandle[], ruled: boolean, endPoint?: BrepVec3): BrepHandle {\n if (!Array.isArray(sections) || sections.length < 2) {\n fail('loft requires at least 2 sections')\n }\n // ① 各截面 → face。\n const faces = sections.map((s) => profileFaceOf(s, 'loft'))\n // ② brepkit loft 要求各截面**顶点数一致**。内核自己也会抛,但报错不含「哪几个\n // 截面、差多少」——执行前静态判一次,给出可指路的错误;不静默降级、不换引擎\n // (方案 §5②,红线:静态可判的输入约束必须在执行前报错)。\n const counts = faces.map((f) => arr(kernel.getFaceVertices(f)).length)\n const ref = counts[0]!\n if (counts.some((c) => c !== ref)) {\n fail(\n 'E_LOFT_SECTION_MISMATCH: brepkit loft requires every section to have the same ' +\n `vertex count, got [${counts.join(', ')}] — use cad.loftAdvanced (occt) for ` +\n 'sections with different vertex counts',\n )\n }\n const farr = Uint32Array.from(faces)\n // ③ 选项映射:endPoint → loftWithOptions;ruled=false → loftSmooth。\n if (endPoint !== undefined) {\n return asHandle(markSolid(kernel.loftWithOptions(\n farr, JSON.stringify({ ruled, endPoint: [endPoint.x, endPoint.y, endPoint.z] }),\n )))\n }\n return asHandle(markSolid(ruled ? kernel.loft(farr) : kernel.loftSmooth(farr)))\n },\n sew(shapesList: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(markSolid(kernel.sewFaces(Uint32Array.from(shapesList.map(asNum)), tolerance ?? 1e-6)))\n },\n sewAndSolidify(faces: BrepHandle[], _tolerance?: number): BrepHandle {\n // brepkit 的 makeSolid 即「缝合并固化成实体」(sewFaces + 建 solid)。\n return asHandle(markSolid(kernel.makeSolid(Uint32Array.from(faces.map(asNum)))))\n },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle {\n // brepkit 参数序 (solid, thickness, open_faces);tolerance 内核固定。\n return asHandle(markSolid(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum)))))\n },\n hullFromPoints(points: BrepVec3[], _tolerance: number): BrepHandle {\n return asHandle(markSolid(kernel.convexHull(flattenPoints(points))))\n },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.fuse(asNum(a), asNum(b))))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.cut(asNum(a), asNum(b))))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle {\n // brepkit 无 `common` 原生名;交集语义由 `intersect` 承担(method-map: dialect)。\n return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b)))))\n },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b))))) },\n fuseAll(shapesList: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fuseAll(Int32Array.from(shapesList.map(asNum))))))\n },\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[] {\n // brepkit 原生 section(solid, plane) 返回剖面 face 句柄组(§3.6-2 新中立名)。\n // GOTCHA:brepkit section 返回的是 **face** 句柄(不是 edge/wire),必须登记进 knownFaces,\n // 否则 op 层 makeCompound(这些 face) 后送 meshShape 会按 solid 路径崩溃。\n const s = asNum(shape)\n const faces = arr(kernel.section(\n s, point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n for (const f of faces) knownFaces.add(f)\n return faces.map(asHandle)\n },\n splitByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): { positive: BrepHandle; negative: BrepHandle } {\n const parts = arr(kernel.split(\n asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n if (parts.length !== 2) {\n fail(`splitByPlane: expected 2 solids, got ${parts.length}`)\n }\n // 法向正侧 = positive(§3.7):按质心在平面法向的投影分类。\n const originDot = point.x * normal.x + point.y * normal.y + point.z * normal.z\n const side = (h: number): number => {\n const c = toNumArray(kernel.centerOfMass(h, 0.05))\n return (c[0] ?? 0) * normal.x + (c[1] ?? 0) * normal.y + (c[2] ?? 0) * normal.z - originDot\n }\n const [a, b] = parts\n markSolid(a); markSolid(b)\n return side(a) >= side(b)\n ? { positive: asHandle(a), negative: asHandle(b) }\n : { positive: asHandle(b), negative: asHandle(a) }\n },\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.chamfer(asNum(solid), Uint32Array.from(edges.map(asNum)), distance))))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n // 方言映射:L1 chamferDistAngle ↔ brepkit chamferDistanceAngle。\n // ⚠️ 单位方言:L1 口径是**度**(`AddDA(distance, angleDeg, E, F)`),brepkit 内核吃**弧度**\n // (2026-09-25 实证:传 45 抛 \"angle must be less than π/2\";传 π/4 正常倒角)。\n const angleRad = (angleDeg * Math.PI) / 180\n return asHandle(markSolid(trackFallback(kernel.chamferDistanceAngle(\n asNum(solid), Uint32Array.from(edges.map(asNum)), distance, angleRad,\n ))))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fillet(asNum(solid), Uint32Array.from(edges.map(asNum)), radius))))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n // 方言映射:L1 filletVariable(solid, edge, startRadius, endRadius)(单边变半径)\n // ↔ brepkit filletVariable(solid, json) 吃**序列** `[{edge, radius1, radius2}, ...]`。\n // ⚠️ 直接传 4 个位置参数会触发 wasm memory out of bounds(2026-09-25 实证)。\n const spec = JSON.stringify([{ edge: asNum(edge), radius1: startRadius, radius2: endRadius }])\n return asHandle(markSolid(trackFallback(kernel.filletVariable(asNum(solid), spec))))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(translationMatrix(dx, dy, dz)), kindOf(shape)))\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(scaleMatrix(center, factor)), kindOf(shape)))\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n locate(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n copy(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n copyShape(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n composeTransform(m1: number[], m2: number[]): number[] {\n // 方言:L1 是 3×4 行主序 12 元素;brepkit composeTransforms 吃/回 4×4 16 元素。\n const r = kernel.composeTransforms(\n Float64Array.from(toKernelMatrix(m1)),\n Float64Array.from(toKernelMatrix(m2)),\n )\n return Array.from(r as ArrayLike<number>).slice(0, 12)\n },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle {\n return withKind(kindOf(shape), kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z))\n },\n\n // ── 阵列 ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n // 阵列内核返回 compound(原始句柄)→ 拆成实体数组并逐个登记(见 markSolid GOTCHA)。\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n circularPattern(shape: BrepHandle, _center: BrepVec3, axis: BrepVec3, _angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(markSolid(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n )))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n const e = kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z)\n knownEdges.add(e)\n return asEdge(e)\n },\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle {\n // 方言消化:occt 吃 3 点;brepkit makeCircleArc3d 吃 (start,end,center,axis)。\n const { center, axis } = circumcircle(start, mid, end)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n axis.x, axis.y, axis.z,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle {\n // 方言消化:L1 吃控制点(Bezier);brepkit 原生 makeNurbsEdge 吃\n // (start,end,degree,knots,control_points,weights)。Bezier = degree n-1 的\n // clamped NURBS,knots = [0]×n + [1]×n,weights 全 1。\n const n = controlPoints.length\n if (n < 2) fail('makeBezierEdge: need at least 2 control points')\n const degree = n - 1\n const knots = new Float64Array(2 * n)\n for (let i = n; i < 2 * n; i++) knots[i] = 1\n const weights = new Float64Array(n).fill(1)\n const first = controlPoints[0]\n const last = controlPoints[n - 1]\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree, knots, flattenPoints(controlPoints), weights,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic = false,\n ): BrepHandle {\n // 方言消化:L1 吃 occt 形态 (poles, weights, knots, multiplicities, degree),\n // brepkit makeNurbsEdge 吃 (start,end,degree, **展开后** knots, control_points, weights)。\n // 两侧 knots 的表示不同:occt 给「去重值 + 多重度」两个平行数组,brepkit 要\n // 逐项重复后的整条节点向量(与 makeBezierEdge 里手工铺 [0]×n+[1]×n 同一口径)。\n const controlPoints: BrepVec3[] = []\n for (let i = 0; i + 2 < poles.length; i += 3) {\n controlPoints.push({ x: poles[i]!, y: poles[i + 1]!, z: poles[i + 2]! })\n }\n const n = controlPoints.length\n if (n < 2) fail('makeBSplineEdge: need at least 2 poles')\n const expanded: number[] = []\n for (let i = 0; i < knots.length; i++) {\n const rep = multiplicities[i] ?? 1\n for (let j = 0; j < rep; j++) expanded.push(knots[i]!)\n }\n const first = controlPoints[0]!\n const last = controlPoints[n - 1]!\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree,\n Float64Array.from(expanded),\n flattenPoints(controlPoints),\n weights.length === n ? Float64Array.from(weights) : new Float64Array(n).fill(1),\n )\n void periodic\n knownEdges.add(e)\n return asEdge(e)\n },\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle {\n const e = kernel.makeCircleEdge(\n center.x, center.y, center.z, normal.x, normal.y, normal.z, radius,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n const w = kernel.makeWire(Int32Array.from(edges.map(asNum)), false)\n knownWires.add(w)\n return asWire(w)\n },\n makeFace(wire: BrepHandle): BrepHandle {\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asFace(f)\n },\n makeCompound(shapesList: BrepHandle[]): BrepHandle {\n const kids = arr(shapesList.map(asNum))\n // GOTCHA(2026-09-26):brepkit makeCompound 只接受 **solid** 句柄——把 face/wire\n // (sectionByPlane 截面面组)塞进去即抛 \"invalid solid handle\"。非实体子句柄时\n // 不调内核,改用高段虚拟句柄(0x20000000+,避开类型标签 bit26..28),仅靠 knownCompounds 表分发\n // meshShape/wireframe/getSubShapes/getBoundingBox,不触达内核。\n const hasNonSolid = kids.some((k) => knownFaces.has(k) || knownWires.has(k) || knownEdges.has(k) || knownCompounds.has(k))\n if (hasNonSolid) {\n virtualCompoundCounter++\n const v = 0x20000000 + virtualCompoundCounter\n knownCompounds.set(v, kids)\n return asHandle(v)\n }\n const c = kernel.makeCompound(Int32Array.from(kids))\n knownCompounds.set(c, kids)\n return asHandle(c)\n },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n // addHolesToFace 返回**新 face 句柄**(同曲面 + 内孔 wire),必须登记进 knownFaces,\n // 否则 profile(op) 带孔面送 meshShape 会落到 solid 路径崩溃。\n const f = kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum)))\n knownFaces.add(f)\n return asFace(f)\n },\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle {\n const f = kernel.makePolygon(flattenPoints([a, b, c]))\n knownFaces.add(f)\n return asFace(f)\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const angular = options?.angularDeflection ?? 0.5\n const s = asNum(shape)\n // 非实体句柄按类型静态分发(标签优先,见文件头 GOTCHA:brepkit 无 shape-type 分类 API)。\n // 顺序:face → wire → edge → compound → solid。实体创建不入任何集合,天然落 solid 路径。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return faceMesh(s, deflection, angular)\n if (kind === KIND_WIRE) return wireMesh(s, deflection)\n if (kind === KIND_EDGE) return edgesToLineMesh([s], deflection)\n const compoundChildren = knownCompounds.get(s)\n if (compoundChildren) return compoundMesh(compoundChildren, deflection, angular)\n // solid(或未登记句柄):走原 tessellateSolidGrouped 路径。\n return solidMesh(s, deflection, angular)\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const s = asNum(shape)\n // GOTCHA:meshEdgesAll 是 solid-only API——buildTopologyFromMesh 会对 face/wire/edge\n // 产物调 wireframe(...),传入非实体句柄即抛 \"invalid solid handle\"。按已知集合分发:\n // face -> getFaceEdges;wire -> getWireEdges;edge -> [self];否则 solid 走 meshEdgesAll。\n let edgeHandles: number[] | null = null\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) edgeHandles = arr(kernel.getFaceEdges(s))\n else if (kind === KIND_WIRE) edgeHandles = arr(kernel.getWireEdges(s))\n else if (kind === KIND_EDGE) edgeHandles = [s]\n else if (knownCompounds.has(s)) {\n // compound(sectionByPlane 面组):逐子面收集边。\n edgeHandles = []\n for (const k of knownCompounds.get(s)!) {\n if (knownFaces.has(k)) edgeHandles.push(...arr(kernel.getFaceEdges(k)))\n else if (knownWires.has(k)) edgeHandles.push(...arr(kernel.getWireEdges(k)))\n else if (knownEdges.has(k)) edgeHandles.push(k)\n }\n }\n if (edgeHandles) {\n const nPts = Math.max(12, Math.round(4 / Math.max(d, 0.01)))\n const positions: number[] = []\n // offsets 为**浮点单位**(L1 契约:edgeGroups = [pointStart_float, pointCount_float, hash])\n const offsets: number[] = [0]\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n for (const p of pts) positions.push(p)\n offsets.push(positions.length)\n }\n const edgeGroups = new Int32Array(edgeHandles.length * 3)\n for (let i = 0; i < edgeHandles.length; i++) {\n edgeGroups[i * 3] = offsets[i] ?? 0\n edgeGroups[i * 3 + 1] = (offsets[i + 1] ?? positions.length) - (offsets[i] ?? 0)\n // hash 必须与 hashCode(edge, BREP_HASH_BOUND) 同源,否则 topologyExt 查不到折线。\n edgeGroups[i * 3 + 2] = edgeFingerprint(kernel, edgeHandles[i]!, BREP_HASH_BOUND)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount: edgeHandles.length }\n }\n // solid(或未登记句柄):走原 meshEdgesAll 路径。\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(s, d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n // hash:meshEdgesAll 与 getSolidEdges 同序(同一次遍历),据此回填真实边指纹;\n // 取不到(数量不符)时退化为序号——此时 topologyExt 查不到折线,曲面边走\n // 曲线采样兜底(功能可用,只是丢掉内核线框数据)。\n let solidEdges: number[] | null = null\n try { const es = arr(kernel.getSolidEdges(s)); if (es.length === edgeCount) solidEdges = es } catch { /* 非实体 */ }\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = solidEdges\n ? edgeFingerprint(kernel, solidEdges[i]!, BREP_HASH_BOUND)\n : i\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n // 出口一律按 **type 参数**打类型标签(`type` 就是调用方声明的子形类型,是权威来源;\n // 不用内核反查——brepkit 无法反查类型,见文件头句柄桥接 GOTCHA)。\n const tag = (list: number[]): BrepHandle[] => {\n switch (type) {\n case 'face': return list.map(asFace)\n case 'edge': return list.map(asEdge)\n case 'vertex': return list.map(asVertex)\n case 'wire': return list.map(asWire)\n default: return list.map(asHandle)\n }\n }\n // ── A. 有类型标签:按标签分发,**不登记 knownEdges** ──\n // GOTCHA(2026-10-01 实测回归):历史分支里 `es.forEach(e => knownEdges.add(e))` 会把\n // 面/线的边号写进 knownEdges,而 knownEdges 的 key 是**裸句柄号**、会与后来新建的\n // solid 号相撞 → resolveKind 把实体判成边 → getBoundingBox 返回边的退化 bbox\n // (实测 8 个 op 的 AABB 全错)。标签句柄自带类型,登记已无必要,故这里一律不登记。\n const tagged = kindOf(shape)\n if (tagged === KIND_FACE) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') return tag(arr(kernel.getFaceEdges(s)))\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (tagged === KIND_WIRE) {\n if (type === 'edge') return tag(arr(kernel.getWireEdges(s)))\n return []\n }\n if (tagged === KIND_EDGE) {\n // input is itself an edge (wire.ts smooth path: interpolatePoints returns edge)\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n // ── B. 无标签:逐字沿用历史集合分发(含 knownEdges 登记),行为与加标签前一致 ──\n // GOTCHA(2026-09-26 非实体句柄修复):buildTopologyFromMesh 会对**面产物**\n // 调 getSubShapes(face,'face')。brepkit 的 getSolidFaces/getShellFaces 是 solid-only,\n // 对面句柄一个抛 \"invalid solid handle\"、catch 里再抛 \"invalid shell handle\"——\n // 两跳都不被捕获即崩溃。无标签时靠已知集合先分发。\n if (knownFaces.has(s)) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') { const es = arr(kernel.getFaceEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (knownWires.has(s)) {\n if (type === 'edge') { const es = arr(kernel.getWireEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n return []\n }\n if (knownEdges.has(s)) {\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n const compKids = knownCompounds.get(s)\n if (compKids) {\n // compound(sectionByPlane 面组 / makeCompound 多实体 / importStep 多实体):\n // 'face' 返回子面,'solid' 返回子实体,'edge' 返回各子句柄的边,其余空。\n if (type === 'face') return tag(compKids.filter((k) => knownFaces.has(k)))\n if (type === 'solid') return tag(compKids.filter((k) => !knownFaces.has(k) && !knownWires.has(k) && !knownEdges.has(k)))\n if (type === 'edge') {\n // 2026-10-02 补:此前 compound 的边查询落到 `return []`,会让归一化后的\n // getLength(compound) 静默变 0。按子句柄的已知类型分发,与 occt 的\n // getSubShapes(compound,'edge')(返回全部子边)对齐。\n const out: number[] = []\n for (const kid of compKids) {\n if (knownFaces.has(kid)) out.push(...arr(kernel.getFaceEdges(kid)))\n else if (knownWires.has(kid)) out.push(...arr(kernel.getWireEdges(kid)))\n else if (knownEdges.has(kid)) out.push(kid)\n else out.push(...arr(kernel.getSolidEdges(kid)))\n }\n return tag(out)\n }\n return []\n }\n let list: number[]\n // 实体句柄(knownSolids)永远不是 face-like——`derivedFaces` 只装「枚举出来的面号」,\n // 与 solid 号共用一个裸数字空间,不排除会造成误判(见 knownSolids 注释)。\n const isFaceLike = knownFaces.has(s) || (derivedFaces.has(s) && !knownSolids.has(s))\n if (type === 'face') {\n // 输入可能是 solid 或 shell。枚举到的子面登记到 derivedFaces(不进 knownFaces,\n // 避免与 solid 句柄撞号——见 derivedFaces 注释)。\n try { list = arr(kernel.getSolidFaces(s)) } catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) derivedFaces.add(f)\n } else if (type === 'edge') {\n list = isFaceLike\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = isFaceLike\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n fail(`getSubShapes(${type}): unsupported sub-shape type`)\n }\n return tag(list)\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') fail(`subShapeHashes(${type}): only 'face' is supported by brepkit`)\n const s = asNum(shape)\n // GOTCHA:buildTopologyFromMesh 会对面产物调 subShapeHashes(face,'face');\n // getSolidFaces 是 solid-only,对面句柄崩溃。输入本身是面时,哈希即其自身指纹。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return [faceFingerprint(kernel, s, hashUpperBound)]\n // wire/edge 无面;compound(sectionByPlane 面组)的子句柄即面。\n if (kind === KIND_WIRE || kind === KIND_EDGE) return []\n const compKids = knownCompounds.get(s)\n if (compKids) {\n const faces = compKids.filter((k) => knownFaces.has(k))\n return faces.map((f) => faceFingerprint(kernel, f, hashUpperBound))\n }\n const faces = arr(kernel.getSolidFaces(s))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n // 类型由句柄标签决定(见文件头句柄桥接 GOTCHA):brepkit 无法反查句柄类型,\n // 而面指纹与边指纹必须落在**互不相交**的取值域,否则 edgeGroups 的 hash 会\n // 命中面的指纹(实测:box 的 edge 0..5 句柄号与 face 0..5 相同)。\n // 生产端(faceMesh/solidMesh/compoundMesh → faceFingerprint;wireframe →\n // edgeFingerprint)与消费端(本函数)用同一组函数、同一个上界,查表才命中。\n const raw = asNum(shape)\n return kindOf(shape) === KIND_EDGE\n ? edgeFingerprint(kernel, raw, upperBound)\n : faceFingerprint(kernel, raw, upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean {\n // 裸句柄号相同还不够:brepkit 的 face 3 与 edge 3 是**两个不同的形**。\n // 两侧都带标签时必须同类型;任一侧无标签(历史调用方)时退回纯数字比较,\n // 保证加标签不改变既有行为。\n if (asNum(a) !== asNum(b)) return false\n const ka = kindOf(a), kb = kindOf(b)\n return ka === kb || ka === KIND_SOLID || kb === KIND_SOLID\n },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n shapeType(shape: BrepHandle): string {\n try {\n const s = arr(kernel.getSolidFaces(asNum(shape)))\n const f = arr(kernel.getFaces(asNum(shape)))\n return s.length > 0 ? 'SOLID' : f.length > 0 ? 'FACE' : 'COMPOUND'\n } catch { return 'COMPOUND' }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n edgeToFaceMap(shape: BrepHandle): unknown {\n // brepkit 返回 JSON 字符串 {\"edgeId\":[faceId,...]};L1 契约是 unknown(调用方自解析)。\n return kernel.edgeToFaceMap(asNum(shape))\n },\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[] {\n return arr(kernel.adjacentFaces(asNum(shape), asNum(face))).map(asFace)\n },\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[] {\n return arr(kernel.sharedEdges(asNum(a), asNum(b))).map(asEdge)\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n surfaceCenterOfMass: faceCenterOfMass,\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as {\n degree?: number\n periodic?: boolean\n rational?: boolean\n knots?: number[]\n multiplicities?: number[]\n poles?: number[]\n weights?: number[]\n }\n if (p && typeof p.degree === 'number') {\n return {\n degree: p.degree,\n periodic: !!p.periodic,\n rational: !!p.rational,\n knots: (p.knots ?? []).map(Number),\n multiplicities: (p.multiplicities ?? []).map(Number),\n poles: (p.poles ?? []).map(Number),\n weights: (p.weights ?? []).map(Number),\n }\n }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle] {\n // brepkit 原生返回 Uint32Array 两元素(occt 返回 [ShapeHandle, ShapeHandle])——\n // 适配器统一为二元组。两个碎片都必须登记进 knownEdges,否则下游 meshShape 分发不到。\n const parts = kernel.curveSplit(asNum(edge), param)\n if (parts.length !== 2) fail(`curveSplit: expected 2 edges, got ${parts.length}`)\n const a = parts[0]!\n const b = parts[1]!\n knownEdges.add(a)\n knownEdges.add(b)\n return [asEdge(a), asEdge(b)]\n },\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle {\n // GOTCHA:interpolatePoints 返回 **edge** 句柄(不是 wire)——wire.ts smooth 路径把它\n // 直接当 wire 送 solidToShape。登记进 knownEdges,meshShape 才能走 tessellateEdge 路径。\n const e = kernel.interpolatePoints(flattenPoints(points), degree)\n knownEdges.add(e)\n return asEdge(e)\n },\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(kernel.defeature(asNum(shape), Uint32Array.from(faces.map(asNum)))))\n },\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle {\n return asHandle(kernel.draft(\n asNum(shape),\n Uint32Array.from(faces.map(asNum)),\n pull.x, pull.y, pull.z,\n neutral.x, neutral.y, neutral.z,\n angleDeg,\n ))\n },\n removeHolesFromFace(face: BrepHandle): BrepHandle {\n // removeHolesFromFace 返回**新 face 句柄**(去掉内孔的同曲面 face),必须登记进 knownFaces。\n const f = kernel.removeHolesFromFace(asNum(face))\n knownFaces.add(f)\n return asFace(f)\n },\n reverseShape(shape: BrepHandle): BrepHandle {\n return withKind(kindOf(shape), kernel.reverseShape(asNum(shape)))\n },\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown {\n // brepkit 返回 JSON 字符串 {\"visible\":[[x,y,…]],\"hidden\":[[…]]};L1 契约是 unknown。\n return kernel.projectEdges(\n asNum(shape),\n origin.x, origin.y, origin.z,\n direction.x, direction.y, direction.z,\n xAxis.x, xAxis.y, xAxis.z,\n hiddenLines, deflection,\n )\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const s = asNum(shape)\n const bboxFromPoints = (pts: ArrayLike<number>): BrepBoundingBox => {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (let i = 0; i + 2 < pts.length; i += 3) {\n xmin = Math.min(xmin, pts[i]!); ymin = Math.min(ymin, pts[i + 1]!); zmin = Math.min(zmin, pts[i + 2]!)\n xmax = Math.max(xmax, pts[i]!); ymax = Math.max(ymax, pts[i + 1]!); zmax = Math.max(zmax, pts[i + 2]!)\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n const solidBbox = (h: number): BrepBoundingBox => {\n const b = kernel.boundingBox(h) as ArrayLike<number>\n return { xmin: b[0]!, ymin: b[1]!, zmin: b[2]!, xmax: b[3]!, ymax: b[4]!, zmax: b[5]! }\n }\n const kids = knownCompounds.get(s)\n if (kids) {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const k of kids) {\n try {\n let b: BrepBoundingBox\n if (knownFaces.has(k)) b = bboxFromPoints(arr(kernel.tessellateFace(k, 0.1, 1).positions))\n else if (knownWires.has(k)) b = bboxFromPoints(arr(kernel.getWireEdges(k)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n else if (knownEdges.has(k)) b = bboxFromPoints(arr(kernel.tessellateEdge(k, 16)))\n else b = solidBbox(k)\n xmin = Math.min(xmin, b.xmin); ymin = Math.min(ymin, b.ymin); zmin = Math.min(zmin, b.zmin)\n xmax = Math.max(xmax, b.xmax); ymax = Math.max(ymax, b.ymax); zmax = Math.max(zmax, b.zmax)\n } catch { /* 子项 bbox 查询失败忽略 */ }\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n // GOTCHA:kernel.boundingBox 是 solid-only。face/wire/edge 句柄必须走 tessellation 采样,\n // 否则 measure() 对 wire/profile 调 getBoundingBox 即崩 \"invalid solid handle\"。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return bboxFromPoints(arr(kernel.tessellateFace(s, 0.1, 1).positions))\n if (kind === KIND_WIRE) return bboxFromPoints(arr(kernel.getWireEdges(s)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n if (kind === KIND_EDGE) return bboxFromPoints(arr(kernel.tessellateEdge(s, 16)))\n return solidBbox(s)\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n getSurfaceArea(shape: BrepHandle): number {\n // 方言映射:L1 getSurfaceArea ↔ brepkit surfaceArea(solid, deflection)。\n return Number(kernel.surfaceArea(asNum(shape), 0.05))\n },\n getLength(shape: BrepHandle): number {\n // 唯一 edge 弧长之和(与 occt 适配器同口径,D5)。\n // 旧实现用 `try { getEdgeCurveType } catch { wireLength }` 判别入参差异,但\n // getEdgeCurveType 对 solid / face / wire **也不抛错**,于是统一走 edgeLength,\n // 返回「首条边」长度——值随构建历史漂移(盒 20 vs 10;两边的 wire 真长 15 却给 20),\n // 且与 occt 的 Σ 面周长(280)不同口径。改为按 topo 去重枚举边后求和。\n let total = 0\n for (const e of api.getSubShapes(shape, 'edge')) total += api.curveLength(e)\n return total\n },\n\n // ── 校验与修复 ──\n // ⚠️ brepkit 的修复类内核函数全部是「**原地修改入参实体 + 返回修复计数**」,不是返回新句柄:\n // healSolid(solid) → 修复的问题数\n // fixFaceOrientations(solid) → 修复的面数\n // unifyFaces(solid) → 合并删除的面数\n // removeDegenerateEdges(s,tol) → 删除的边数\n // repairSolid(solid) → 修复后剩余错误数\n // 直接 `asHandle(kernel.healSolid(...))` 会把计数(常见为 0)当成句柄,得到无效实体\n // (2026-09-25 实证)。正确适配:先 copySolid 保护调用方原实体,再原地修复副本,返回副本句柄。\n isValid(shape: BrepHandle): boolean {\n // brepkit validateSolid 返回错误数(0 = 有效)。\n return Number(kernel.validateSolid(asNum(shape))) === 0\n },\n unifySameDomain(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.unifyFaces(c)\n return asHandle(c)\n },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixShape(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixFaceOrientations(shape: BrepHandle): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.fixFaceOrientations(c)\n return asHandle(c)\n },\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.removeDegenerateEdges(c, tolerance ?? 1e-6)\n return asHandle(c)\n },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n // ⚠️ brepkit importStep 吃 **Uint8Array**(不是字符串),返回 **Uint32Array**(文件内可含多个 solid)。\n // L1 契约是单 BrepHandle:0 个 → fail;1 个 → 直通;多个 → 合成 compound(2026-09-25 实证)。\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n const solids = arr(kernel.importStep(bytes))\n if (solids.length === 0) fail('importStep: kernel returned no solid')\n const c = solids.length === 1 ? solids[0] : kernel.makeCompound(Uint32Array.from(solids))\n if (solids.length > 1) knownCompounds.set(c, solids)\n return asHandle(markSolid(c))\n },\n exportStep(shape: BrepHandle): string {\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(asNum(shape))\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(data: string | ArrayBuffer): BrepHandle {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n return asHandle(markSolid(kernel.importStl(bytes)))\n },\n fromBREP(data: string): BrepHandle {\n // ⚠️ brepkit fromBREP 吃字符串(STEP 文本或 toBREP/toBrepJson 输出,内核自动判别),\n // 与 serializeSolid/deserializeSolid 的**二进制 arena** 是两套机制。\n // 旧实现误用 `deserializeSolid(atob(data))`:base64 解码破坏了 STEP 文本 → 往返必失败\n // (2026-09-25 实证:fromBREP(STEP)、fromBREP(toBREP)、fromBREP(toBrepJson) 均成功)。\n return asHandle(markSolid(kernel.fromBREP(data)))\n },\n\n // ── 网格实体原语(方案 2026-10-01 §3.3;内核私有,不在 L1 契约面) ──\n // 规范构造顺序**不可交换**:importMesh → weld → unify。\n // 实测(brepkit-kernel/mesh-solid-topology.test.ts):先 unify 后 weld 会把实体做坏\n // (体积归零、validate 非 0)。本对象只暴露原语,顺序由 `normalizeMeshSolid` 驱动。\n meshSolid: {\n importMesh(positions: Float32Array, indices: Uint32Array): BrepHandle {\n // 方言:importIndexedMesh 吃 **Float64Array**(坐标)+ **Uint32Array**(索引),\n // 返回裸 solid 号。逐三角形建面、顶点按坐标焊接、边不共享(不是真流形)。\n const coords = new Float64Array(positions.length)\n for (let i = 0; i < positions.length; i++) coords[i] = positions[i]!\n return asHandle(markSolid(kernel.importIndexedMesh(coords, indices)))\n },\n weld(faces: BrepHandle[], tolerance: number): BrepHandle {\n // weldShellsAndFaces 吃**裸面号数组**(Uint32Array),返回新 solid 号;\n // 把重复边缝成共享边 → 真流形(实测 10mm 立方体 36 边 → 18 边、validate 0)。\n return asHandle(markSolid(kernel.weldShellsAndFaces(\n Uint32Array.from(faces.map((f) => asNum(f))),\n tolerance,\n )))\n },\n unify(solid: BrepHandle): number {\n // GOTCHA:unifyFaces 是**原地修改**入参实体,返回值是**被合并掉的面数**\n // (不是新句柄)。写成 `const s = unify(...)` 会拿到一个落在合法句柄区间的\n // 数字,后续全部查询打在一个无关实体上且不报错。\n return Number(kernel.unifyFaces(asNum(solid)))\n },\n },\n\n // ── 面演化(L1 三员 + filletWithHistory,双方都有对齐实现) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.intersectWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n }\n memoizedKernel = kernel\n memoizedPrimitives = api\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n\n/** 已初始化的 brepkit 内核单例(createBrepkitPrimitives 时赋值)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/** 已构建的 L1 契约面对象(按内核实例 memo;见 createBrepkitPrimitives 的 GOTCHA)。 */\nlet memoizedPrimitives: BrepkitEngineExtras | null = null\nlet memoizedKernel: BrepKitKernel | null = null\n\n/**\n * 原生 brepkit 内核面(D3):平台特定代码访问 brepkit 独有能力的唯一入口\n * (chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean 等)。\n *\n * ⚠️ 这是**平台特定**出口——import 本函数即声明「这段代码只跑在 brepkit 引擎下」。\n * 可移植代码请用 `getBrepApi()`(L1 契约面)。\n *\n * @returns the live brepkit wasm kernel singleton.\n */\nexport function getBrepkitKernel(): BrepKitKernel {\n if (!liveKernel) {\n throw new Error('[brepkit-kernel] kernel not initialized: call createBrepkitPrimitives() first')\n }\n return liveKernel\n}\n\n/**\n * 释放内核单例(测试收尾用;宿主常驻不需调用)。\n *\n * GOTCHA(2026-10-01 修复):旧实现只 `free()` 内核、**不重置** brepkitWasm.ts 里\n * 缓存的 `initPromise`,也不丢 memo 化的原语对象 → 第二次 `createBrepkitPrimitives()`\n * 拿到**已释放**的内核,随后一切内核调用报 `null pointer passed to rust`\n * (实测:`BrepKernel.makeBox`)。现在三样一起清:内核、initPromise、memo 原语。\n */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n memoizedPrimitives = null\n memoizedKernel = null\n resetBrepkitWasm()\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}
|