@faicad/faijs 0.29.5 → 0.30.9
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/NOTICE +6 -5
- package/dist/api/api-namespace.d.ts +1 -1
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +53 -1
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/appearance.d.ts +0 -2
- package/dist/api/appearance.d.ts.map +1 -1
- package/dist/api/appearance.js +0 -2
- package/dist/api/appearance.js.map +1 -1
- package/dist/api/assembly/entities.d.ts +1 -1
- package/dist/api/assembly/entities.js +1 -1
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/assembly/index.d.ts +1 -1
- package/dist/api/assembly/index.js +1 -1
- package/dist/api/assembly/index.js.map +1 -1
- package/dist/api/assembly/joints.d.ts +33 -15
- package/dist/api/assembly/joints.d.ts.map +1 -1
- package/dist/api/assembly/joints.js +31 -13
- package/dist/api/assembly/joints.js.map +1 -1
- package/dist/api/assembly/preview.d.ts +1 -1
- package/dist/api/assembly/preview.js +1 -1
- package/dist/api/assembly/preview.js.map +1 -1
- package/dist/api/assembly/solve.d.ts +1 -1
- package/dist/api/assembly/solve.js +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
- package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
- package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +3 -4
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
- package/dist/api/assembly/solvers/linalg.d.ts +2 -2
- package/dist/api/assembly/solvers/linalg.js +2 -2
- package/dist/api/assembly/solvers/linalg.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +2 -5
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js +1 -4
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +7 -6
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
- package/dist/api/brep-mirror/booleanFns.js +5 -5
- package/dist/api/brep-mirror/booleanFns.js.map +1 -1
- package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
- package/dist/api/brep-mirror/compoundFns.js +4 -4
- package/dist/api/brep-mirror/compoundFns.js.map +1 -1
- package/dist/api/brep-mirror/healingFns.d.ts +4 -4
- package/dist/api/brep-mirror/healingFns.js +4 -4
- package/dist/api/brep-mirror/healingFns.js.map +1 -1
- package/dist/api/brep-mirror/hullFns.d.ts +2 -2
- package/dist/api/brep-mirror/hullFns.js +2 -2
- package/dist/api/brep-mirror/hullFns.js.map +1 -1
- package/dist/api/brep-mirror/patternFns.d.ts +5 -5
- package/dist/api/brep-mirror/patternFns.js +10 -10
- package/dist/api/brep-mirror/patternFns.js.map +1 -1
- package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
- package/dist/api/brep-mirror/primitiveFns.js +4 -4
- package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
- package/dist/api/brep-mirror/roofFns.d.ts +3 -3
- package/dist/api/brep-mirror/roofFns.js +7 -7
- package/dist/api/brep-mirror/roofFns.js.map +1 -1
- package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
- package/dist/api/brep-mirror/sweepFns.js +14 -14
- package/dist/api/brep-mirror/sweepFns.js.map +1 -1
- package/dist/api/brep-mirror/threadFns.d.ts +1 -1
- package/dist/api/brep-mirror/threadFns.js +1 -1
- package/dist/api/brep-mirror/threadFns.js.map +1 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
- package/dist/api/brep-mirror/topologyFns.js +8 -8
- package/dist/api/brep-mirror/topologyFns.js.map +1 -1
- package/dist/api/brep-operations/booleanFns.d.ts +40 -0
- package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
- package/dist/api/brep-operations/booleanFns.js +104 -0
- package/dist/api/brep-operations/booleanFns.js.map +1 -0
- package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
- package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
- package/dist/api/brep-operations/brepHelpers.js +131 -0
- package/dist/api/brep-operations/brepHelpers.js.map +1 -0
- package/dist/api/brep-operations/compoundFns.d.ts +46 -0
- package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
- package/dist/api/brep-operations/compoundFns.js +299 -0
- package/dist/api/brep-operations/compoundFns.js.map +1 -0
- package/dist/api/brep-operations/healingFns.d.ts +78 -0
- package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
- package/dist/api/brep-operations/healingFns.js +294 -0
- package/dist/api/brep-operations/healingFns.js.map +1 -0
- package/dist/api/brep-operations/hullFns.d.ts +20 -0
- package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
- package/dist/api/brep-operations/hullFns.js +46 -0
- package/dist/api/brep-operations/hullFns.js.map +1 -0
- package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
- package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
- package/dist/api/brep-operations/joinery-brep.js +463 -0
- package/dist/api/brep-operations/joinery-brep.js.map +1 -0
- package/dist/api/brep-operations/patternFns.d.ts +43 -0
- package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
- package/dist/api/brep-operations/patternFns.js +178 -0
- package/dist/api/brep-operations/patternFns.js.map +1 -0
- package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
- package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
- package/dist/api/brep-operations/primitiveFns.js +104 -0
- package/dist/api/brep-operations/primitiveFns.js.map +1 -0
- package/dist/api/brep-operations/roofFns.d.ts +24 -0
- package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
- package/dist/api/brep-operations/roofFns.js +229 -0
- package/dist/api/brep-operations/roofFns.js.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.js +431 -0
- package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
- package/dist/api/brep-operations/sweepFns.d.ts +60 -0
- package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
- package/dist/api/brep-operations/sweepFns.js +323 -0
- package/dist/api/brep-operations/sweepFns.js.map +1 -0
- package/dist/api/brep-operations/threadFns.d.ts +83 -0
- package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
- package/dist/api/brep-operations/threadFns.js +138 -0
- package/dist/api/brep-operations/threadFns.js.map +1 -0
- package/dist/api/brep-operations/topologyFns.d.ts +90 -0
- package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
- package/dist/api/brep-operations/topologyFns.js +276 -0
- package/dist/api/brep-operations/topologyFns.js.map +1 -0
- package/dist/api/brep-topology.d.ts +1 -1
- package/dist/api/brep-topology.d.ts.map +1 -1
- package/dist/api/brep-topology.js +1 -1
- package/dist/api/brep-topology.js.map +1 -1
- package/dist/api/brepjs-compat/index.d.ts +1 -1
- package/dist/api/brepjs-compat/index.js +3 -3
- package/dist/api/brepjs-compat/index.js.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
- package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
- package/dist/api/curve-sketch/index.d.ts +235 -0
- package/dist/api/curve-sketch/index.d.ts.map +1 -0
- package/dist/api/curve-sketch/index.js +487 -0
- package/dist/api/curve-sketch/index.js.map +1 -0
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +3 -2
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/export-brep.d.ts +41 -0
- package/dist/api/export-brep.d.ts.map +1 -0
- package/dist/api/export-brep.js +58 -0
- package/dist/api/export-brep.js.map +1 -0
- package/dist/api/export-stl.d.ts +50 -0
- package/dist/api/export-stl.d.ts.map +1 -0
- package/dist/api/export-stl.js +99 -0
- package/dist/api/export-stl.js.map +1 -0
- package/dist/api/extrude.d.ts +8 -11
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +11 -14
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +2 -2
- package/dist/api/fillet-variable.js +2 -2
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +2 -4
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +2 -4
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/2d.d.ts +4 -0
- package/dist/api/generated/2d.d.ts.map +1 -1
- package/dist/api/generated/2d.js +4 -0
- package/dist/api/generated/2d.js.map +1 -1
- package/dist/api/generated/core.d.ts +4 -0
- package/dist/api/generated/core.d.ts.map +1 -1
- package/dist/api/generated/core.js +4 -0
- package/dist/api/generated/core.js.map +1 -1
- package/dist/api/generated/gear.d.ts +4 -0
- package/dist/api/generated/gear.d.ts.map +1 -1
- package/dist/api/generated/gear.js +4 -0
- package/dist/api/generated/gear.js.map +1 -1
- package/dist/api/generated/io.d.ts +4 -0
- package/dist/api/generated/io.d.ts.map +1 -1
- package/dist/api/generated/io.js +4 -0
- package/dist/api/generated/io.js.map +1 -1
- package/dist/api/generated/kernel.d.ts +4 -0
- package/dist/api/generated/kernel.d.ts.map +1 -1
- package/dist/api/generated/kernel.js +4 -0
- package/dist/api/generated/kernel.js.map +1 -1
- package/dist/api/generated/measurement.d.ts +21 -21
- package/dist/api/generated/measurement.d.ts.map +1 -1
- package/dist/api/generated/measurement.js +25 -21
- package/dist/api/generated/measurement.js.map +1 -1
- package/dist/api/generated/ns.d.ts +4 -0
- package/dist/api/generated/ns.d.ts.map +1 -1
- package/dist/api/generated/ns.js +4 -0
- package/dist/api/generated/ns.js.map +1 -1
- package/dist/api/generated/operations.d.ts +32 -32
- package/dist/api/generated/operations.d.ts.map +1 -1
- package/dist/api/generated/operations.js +52 -48
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/projection.d.ts +4 -0
- package/dist/api/generated/projection.d.ts.map +1 -1
- package/dist/api/generated/projection.js +4 -0
- package/dist/api/generated/projection.js.map +1 -1
- package/dist/api/generated/query.d.ts +4 -0
- package/dist/api/generated/query.d.ts.map +1 -1
- package/dist/api/generated/query.js +4 -0
- package/dist/api/generated/query.js.map +1 -1
- package/dist/api/generated/sketching.d.ts +2 -2
- package/dist/api/generated/sketching.d.ts.map +1 -1
- package/dist/api/generated/sketching.js +7 -3
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/text.d.ts +4 -0
- package/dist/api/generated/text.d.ts.map +1 -1
- package/dist/api/generated/text.js +4 -0
- package/dist/api/generated/text.js.map +1 -1
- package/dist/api/generated/topology.d.ts +45 -45
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +67 -63
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/generated/view.d.ts +4 -0
- package/dist/api/generated/view.d.ts.map +1 -1
- package/dist/api/generated/view.js +4 -0
- package/dist/api/generated/view.js.map +1 -1
- package/dist/api/geom-types/constants.d.ts +11 -0
- package/dist/api/geom-types/constants.d.ts.map +1 -0
- package/dist/api/geom-types/constants.js +11 -0
- package/dist/api/geom-types/constants.js.map +1 -0
- package/dist/api/geom-types/index.d.ts +21 -0
- package/dist/api/geom-types/index.d.ts.map +1 -0
- package/dist/api/geom-types/index.js +22 -0
- package/dist/api/geom-types/index.js.map +1 -0
- package/dist/api/geom-types/planeOps.d.ts +98 -0
- package/dist/api/geom-types/planeOps.d.ts.map +1 -0
- package/dist/api/geom-types/planeOps.js +170 -0
- package/dist/api/geom-types/planeOps.js.map +1 -0
- package/dist/api/geom-types/planeTypes.d.ts +24 -0
- package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
- package/dist/api/geom-types/planeTypes.js +8 -0
- package/dist/api/geom-types/planeTypes.js.map +1 -0
- package/dist/api/geom-types/types.d.ts +64 -0
- package/dist/api/geom-types/types.d.ts.map +1 -0
- package/dist/api/geom-types/types.js +48 -0
- package/dist/api/geom-types/types.js.map +1 -0
- package/dist/api/geom-types/vecOps.d.ts +124 -0
- package/dist/api/geom-types/vecOps.d.ts.map +1 -0
- package/dist/api/geom-types/vecOps.js +202 -0
- package/dist/api/geom-types/vecOps.js.map +1 -0
- package/dist/api/geom.d.ts.map +1 -1
- package/dist/api/geom.js +6 -5
- package/dist/api/geom.js.map +1 -1
- package/dist/api/half-space.d.ts +56 -0
- package/dist/api/half-space.d.ts.map +1 -0
- package/dist/api/half-space.js +82 -0
- package/dist/api/half-space.js.map +1 -0
- package/dist/api/helix.d.ts +10 -1
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +19 -3
- package/dist/api/helix.js.map +1 -1
- package/dist/api/index.d.ts +15 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +29 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +4 -30
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +10 -42
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +5 -5
- package/dist/api/internal/compat-projection.js +5 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/dual-form-args.d.ts +0 -2
- package/dist/api/internal/dual-form-args.d.ts.map +1 -1
- package/dist/api/internal/dual-form-args.js +1 -3
- package/dist/api/internal/dual-form-args.js.map +1 -1
- package/dist/api/internal/l3-bridge.d.ts +5 -37
- package/dist/api/internal/l3-bridge.d.ts.map +1 -1
- package/dist/api/internal/l3-bridge.js +7 -76
- package/dist/api/internal/l3-bridge.js.map +1 -1
- package/dist/api/internal/profile-wire.d.ts +1 -1
- package/dist/api/internal/profile-wire.js +1 -1
- package/dist/api/internal/profile-wire.js.map +1 -1
- package/dist/api/internal/result-unwrap.d.ts +4 -6
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +4 -6
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +5 -3
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/loft.d.ts +2 -2
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +2 -2
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measurement/index.d.ts +3 -3
- package/dist/api/measurement/index.js +3 -3
- package/dist/api/measurement/index.js.map +1 -1
- package/dist/api/meta.d.ts +0 -2
- package/dist/api/meta.d.ts.map +1 -1
- package/dist/api/meta.js +0 -2
- package/dist/api/meta.js.map +1 -1
- package/dist/api/offset2d.d.ts +49 -0
- package/dist/api/offset2d.d.ts.map +1 -0
- package/dist/api/offset2d.js +86 -0
- package/dist/api/offset2d.js.map +1 -0
- package/dist/api/pattern.js +3 -3
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +7 -6
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/replicate.d.ts +2 -2
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +12 -12
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/result.d.ts +1 -1
- package/dist/api/result.js +1 -1
- package/dist/api/result.js.map +1 -1
- package/dist/api/revolve.d.ts +2 -2
- package/dist/api/revolve.js +3 -3
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +5 -4
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +3 -2
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/shape-type/index.d.ts +141 -0
- package/dist/api/shape-type/index.d.ts.map +1 -0
- package/dist/api/shape-type/index.js +182 -0
- package/dist/api/shape-type/index.js.map +1 -0
- package/dist/api/shell.d.ts +2 -2
- package/dist/api/shell.js +2 -2
- package/dist/api/shell.js.map +1 -1
- package/dist/api/solid-from-faces.d.ts +45 -0
- package/dist/api/solid-from-faces.d.ts.map +1 -0
- package/dist/api/solid-from-faces.js +72 -0
- package/dist/api/solid-from-faces.js.map +1 -0
- package/dist/api/solid-offset/index.d.ts +67 -0
- package/dist/api/solid-offset/index.d.ts.map +1 -0
- package/dist/api/solid-offset/index.js +132 -0
- package/dist/api/solid-offset/index.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +35 -33
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +222 -224
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface-face/index.d.ts +104 -0
- package/dist/api/surface-face/index.d.ts.map +1 -0
- package/dist/api/surface-face/index.js +217 -0
- package/dist/api/surface-face/index.js.map +1 -0
- package/dist/api/surface.d.ts +44 -0
- package/dist/api/surface.d.ts.map +1 -0
- package/dist/api/surface.js +66 -0
- package/dist/api/surface.js.map +1 -0
- package/dist/api/sweep.d.ts +59 -9
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +11 -6
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts +1 -1
- package/dist/api/thicken.js +1 -1
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts +5 -5
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +11 -10
- package/dist/api/transform.js.map +1 -1
- package/dist/api/view/cameraFns.d.ts +1 -1
- package/dist/api/view/cameraFns.d.ts.map +1 -1
- package/dist/api/view/cameraFns.js +1 -1
- package/dist/api/view/cameraFns.js.map +1 -1
- package/dist/api/view/index.d.ts +0 -2
- package/dist/api/view/index.d.ts.map +1 -1
- package/dist/api/view/index.js +0 -2
- package/dist/api/view/index.js.map +1 -1
- package/dist/api/view/projectionPlanes.d.ts +1 -1
- package/dist/api/view/projectionPlanes.d.ts.map +1 -1
- package/dist/api/view/projectionPlanes.js.map +1 -1
- package/dist/api/view/view-camera.d.ts +7 -9
- package/dist/api/view/view-camera.d.ts.map +1 -1
- package/dist/api/view/view-camera.js +4 -6
- package/dist/api/view/view-camera.js.map +1 -1
- package/dist/api/view/view-projection.d.ts +0 -2
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +0 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/api/view/view-sheet.d.ts +0 -2
- package/dist/api/view/view-sheet.d.ts.map +1 -1
- package/dist/api/view/view-sheet.js +0 -2
- package/dist/api/view/view-sheet.js.map +1 -1
- package/dist/api/view-export/index.d.ts +97 -0
- package/dist/api/view-export/index.d.ts.map +1 -0
- package/dist/api/view-export/index.js +118 -0
- package/dist/api/view-export/index.js.map +1 -0
- package/dist/brep/brep-ops.d.ts +89 -1
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +176 -10
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +20 -0
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +46 -0
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.js +7 -7
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +2 -3
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +1 -2
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +1 -1
- package/dist/brep/engine/registry.js +1 -1
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +2 -2
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +2 -2
- package/dist/brep/handle-bridge.js +2 -2
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/index.d.ts +6 -3
- package/dist/brep/index.d.ts.map +1 -1
- package/dist/brep/index.js +6 -3
- package/dist/brep/index.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +2 -2
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +3 -9
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +12 -3
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +6 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +31 -9
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/interp/env.d.ts +1 -1
- package/dist/cad-runtime/interp/env.js.map +1 -1
- package/dist/cad-runtime/lib-id.d.ts +0 -2
- package/dist/cad-runtime/lib-id.d.ts.map +1 -1
- package/dist/cad-runtime/lib-id.js +0 -2
- package/dist/cad-runtime/lib-id.js.map +1 -1
- package/dist/cad-runtime/live-shapes.d.ts +3 -5
- package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
- package/dist/cad-runtime/live-shapes.js +8 -10
- package/dist/cad-runtime/live-shapes.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +3 -3
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +21 -7
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +45 -6
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +4 -3
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +2 -2
- package/dist/define-op.js.map +1 -1
- package/dist/geometry2d/bridge/plane.d.ts +1 -1
- package/dist/geometry2d/bridge/plane.js +1 -1
- package/dist/geometry2d/bridge/plane.js.map +1 -1
- package/dist/geometry2d/curve2d.d.ts +1 -1
- package/dist/geometry2d/curve2d.js +1 -1
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/io/fai-zip/container-read.d.ts +16 -0
- package/dist/io/fai-zip/container-read.d.ts.map +1 -1
- package/dist/io/fai-zip/container-read.js +22 -0
- package/dist/io/fai-zip/container-read.js.map +1 -1
- package/dist/io/fai-zip/index.d.ts +1 -1
- package/dist/io/fai-zip/index.d.ts.map +1 -1
- package/dist/io/fai-zip/index.js +1 -1
- package/dist/io/fai-zip/index.js.map +1 -1
- package/dist/lang/code-to-args.d.ts.map +1 -1
- package/dist/lang/code-to-args.js +10 -1
- package/dist/lang/code-to-args.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts.map +1 -1
- package/dist/lang/determinism-scanner.js +22 -9
- package/dist/lang/determinism-scanner.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +27 -6
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +88 -8
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/parse-error.d.ts +4 -0
- package/dist/lang/parse-error.d.ts.map +1 -1
- package/dist/lang/parse-error.js.map +1 -1
- package/dist/lang/security-scanner.d.ts +27 -2
- package/dist/lang/security-scanner.d.ts.map +1 -1
- package/dist/lang/security-scanner.js +29 -2
- package/dist/lang/security-scanner.js.map +1 -1
- package/dist/lang/source-edit.d.ts +2 -2
- package/dist/lang/source-edit.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +36 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +36 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/mesh/import-model.d.ts +94 -0
- package/dist/mesh/import-model.d.ts.map +1 -0
- package/dist/mesh/import-model.js +15 -0
- package/dist/mesh/import-model.js.map +1 -0
- package/dist/mesh/index.d.ts +19 -58
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +19 -70
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +33 -16
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +144 -39
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.js +1 -1
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/threemf-bambu.d.ts +12 -1
- package/dist/mesh/threemf-bambu.d.ts.map +1 -1
- package/dist/mesh/threemf-bambu.js +68 -16
- package/dist/mesh/threemf-bambu.js.map +1 -1
- package/dist/mesh/threemf-loader.d.ts +14 -1
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +24 -7
- package/dist/mesh/threemf-loader.js.map +1 -1
- package/dist/mesh/transform.d.ts +1 -1
- package/dist/mesh/transform.js +1 -1
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +5 -5
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +49 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +125 -19
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/execute-script.d.ts +55 -0
- package/dist/node-host/execute-script.d.ts.map +1 -0
- package/dist/node-host/execute-script.js +46 -0
- package/dist/node-host/execute-script.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
- package/dist/occt-kernel/hullGeometry.d.ts +2 -2
- package/dist/occt-kernel/hullGeometry.js +2 -3
- package/dist/occt-kernel/hullGeometry.js.map +1 -1
- package/dist/occt-kernel/hullOps.d.ts +3 -3
- package/dist/occt-kernel/hullOps.js +4 -4
- package/dist/occt-kernel/hullOps.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +31 -4
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +18 -0
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-scan/recognize.d.ts +58 -0
- package/dist/occt-scan/recognize.d.ts.map +1 -0
- package/dist/occt-scan/recognize.js +216 -0
- package/dist/occt-scan/recognize.js.map +1 -0
- package/dist/primitives/brep-primitives.js +7 -7
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/result/bug.d.ts +1 -1
- package/dist/result/bug.js +1 -1
- package/dist/result/bug.js.map +1 -1
- package/dist/result/errors.d.ts +2 -2
- package/dist/result/errors.d.ts.map +1 -1
- package/dist/result/errors.js +1 -1
- package/dist/result/errors.js.map +1 -1
- package/dist/result/vec3.d.ts +1 -1
- package/dist/result/vec3.js +1 -1
- package/dist/result/vec3.js.map +1 -1
- package/dist/runtime-state.d.ts +16 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +27 -0
- package/dist/runtime-state.js.map +1 -1
- package/dist/script-globals.d.ts +24 -0
- package/dist/script-globals.d.ts.map +1 -0
- package/dist/script-globals.js +24 -0
- package/dist/script-globals.js.map +1 -0
- package/dist/shape.d.ts +24 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +40 -0
- package/dist/shape.js.map +1 -1
- package/dist/topology/naming/lineage.d.ts +3 -2
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/weapp.d.ts +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +8 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linalg.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/linalg.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api/assembly/solvers/linalg — 自实现向量数学与线性求解(P1,裁定 4)\n *\n * 规模极小(≤30 阶对称正定),优先 Cholesky(比 Gauss-Jordan 更稳且快),\n * 退化时回落 Gauss-Jordan 带部分主元。vendored 的 `ikFns.solveLinear` 是模块私有、\n * 不可 import(裁定 4),故在此自实现,vendored 只读约定不变。\n *\n * 模块零外部依赖;所有函数纯数值。\n */\n\nexport type Vec3 = [number, number, number]\n\n/**\n * Component-wise vector sum `a + b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the sum vector.\n */\nexport function vadd(a: Vec3, b: Vec3): Vec3 {\n return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]\n}\n/**\n * Component-wise vector difference `a - b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the difference vector.\n */\nexport function vsub(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]\n}\n/**\n * Dot product `⟨a, b⟩`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the dot product.\n */\nexport function vdot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]\n}\n/**\n * Cross product `a × b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the cross-product vector.\n */\nexport function vcross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]\n}\n/**\n * Scalar multiple `a * s`.\n * @param a - the vector.\n * @param s - the scalar factor.\n * @returns the scaled vector.\n */\nexport function vscale(a: Vec3, s: number): Vec3 {\n return [a[0] * s, a[1] * s, a[2] * s]\n}\n/**\n * Euclidean norm `‖a‖`.\n * @param a - the vector.\n * @returns the norm.\n */\nexport function vnorm(a: Vec3): number {\n return Math.hypot(a[0], a[1], a[2])\n}\n/**\n * 原地归一化(零向量安全:返回 [0,0,0])。\n * @param a - the vector to normalize (not mutated).\n * @returns the unit vector along `a`, or `[0, 0, 0]` for a near-zero vector.\n */\nexport function vnormalize(a: Vec3): Vec3 {\n const l = vnorm(a)\n return l < 1e-15 ? [0, 0, 0] : [a[0] / l, a[1] / l, a[2] / l]\n}\n/**\n * Sum of squared components `‖a‖²`.\n * @param a - the vector.\n * @returns the sum of squares.\n */\nexport function vsumsqr(a: Vec3): number {\n return a[0] * a[0] + a[1] * a[1] + a[2] * a[2]\n}\n\n/**\n * AᵀA(n×m 矩阵 → n×n 对称)与 Aᵀb。矩阵按行主序扁平存于 `A`(len = rows*cols)。\n * @param a - row-major `rows × cols` matrix A (flat array, length rows*cols).\n * @param rows - number of rows of A.\n * @param cols - number of columns of A.\n * @returns the `cols × cols` symmetric matrix AᵀA (row-major, flat).\n */\nexport function ata(a: number[], rows: number, cols: number): number[] {\n const out = new Array(cols * cols).fill(0)\n for (let i = 0; i < cols; i++) {\n for (let j = 0; j < cols; j++) {\n let s = 0\n for (let k = 0; k < rows; k++) s += a[k * cols + i] * a[k * cols + j]\n out[i * cols + j] = s\n }\n }\n return out\n}\n/**\n * Aᵀb for the row-major `rows × cols` matrix `a` and length-`rows` vector `b`.\n * @param a - row-major `rows × cols` matrix A (flat array, length rows*cols).\n * @param b - right-hand-side vector of length rows.\n * @param rows - number of rows of A.\n * @param cols - number of columns of A.\n * @returns the length-`cols` vector Aᵀb.\n */\nexport function atb(a: number[], b: number[], rows: number, cols: number): number[] {\n const out = new Array(cols).fill(0)\n for (let j = 0; j < cols; j++) {\n let s = 0\n for (let k = 0; k < rows; k++) s += a[k * cols + j] * b[k]\n out[j] = s\n }\n return out\n}\n\n/**\n * 解 (M + λI) x = b,M 为 n×n 对称正定(此处 M = JᵀJ)。\n * 先尝试 Cholesky(M + λI);若非正定,逐步放大 λ 重试;最终回落带部分主元 Gauss-Jordan。\n *\n * @param m - row-major `n × n` symmetric positive-definite matrix M (flat array).\n * @param b - right-hand-side vector of length n.\n * @param n - system dimension.\n * @param lambda - initial damping coefficient (progressively amplified on retry).\n * @returns 解向量 x,或退化时 null。\n */\nexport function solveDampedNormal(\n m: number[],\n b: number[],\n n: number,\n lambda: number,\n): number[] | null {\n // 尝试多级 λ(LM 阻尼放大)\n const lambdas = [lambda, lambda * 4, lambda * 16, lambda * 64, lambda * 256, lambda * 1024]\n for (const lam of lambdas) {\n const md = m.slice()\n for (let i = 0; i < n; i++) md[i * n + i] += lam\n const x = choleskySolve(md, b, n)\n if (x) return x\n }\n return gaussJordanSolve(m, b, n, lambda)\n}\n\n/** Cholesky(A = L Lᵀ)解对称正定系统;失败返回 null。 */\nfunction choleskySolve(a: number[], b: number[], n: number): number[] | null {\n const L = new Array(n * n).fill(0)\n for (let i = 0; i < n; i++) {\n for (let j = 0; j <= i; j++) {\n let s = a[i * n + j]\n for (let k = 0; k < j; k++) s -= L[i * n + k] * L[j * n + k]\n if (i === j) {\n if (s <= 0) return null // 非正定\n L[i * n + i] = Math.sqrt(s)\n } else {\n L[i * n + j] = s / L[j * n + j]\n }\n }\n }\n // 前代 L y = b\n const y = new Array(n).fill(0)\n for (let i = 0; i < n; i++) {\n let s = b[i]\n for (let k = 0; k < i; k++) s -= L[i * n + k] * y[k]\n y[i] = s / L[i * n + i]\n }\n // 回代 Lᵀ x = y\n const x = new Array(n).fill(0)\n for (let i = n - 1; i >= 0; i--) {\n let s = y[i]\n for (let k = i + 1; k < n; k++) s -= L[k * n + i] * x[k]\n x[i] = s / L[i * n + i]\n }\n return x\n}\n\n/** 带部分主元 Gauss-Jordan,附加 λI 阻尼保证可解性。 */\nfunction gaussJordanSolve(a: number[], b: number[], n: number, lambda: number): number[] | null {\n const m = a.slice()\n for (let i = 0; i < n; i++) m[i * n + i] += lambda\n const x = new Array(n).fill(0)\n const aug = new Array(n).fill(0).map((_, i) => [...m.slice(i * n, i * n + n), b[i]])\n for (let col = 0; col < n; col++) {\n let piv = col\n let best = Math.abs(aug[col][col])\n for (let r = col + 1; r < n; r++) {\n const v = Math.abs(aug[r][col])\n if (v > best) {\n best = v\n piv = r\n }\n }\n if (best < 1e-15) return null\n if (piv !== col) {\n const tmp = aug[piv]\n aug[piv] = aug[col]\n aug[col] = tmp\n }\n const d = aug[col][col]\n for (let j = col; j <= n; j++) aug[col][j] /= d\n for (let r = 0; r < n; r++) {\n if (r === col) continue\n const f = aug[r][col]\n if (f === 0) continue\n for (let j = col; j <= n; j++) aug[r][j] -= f * aug[col][j]\n }\n }\n for (let i = 0; i < n; i++) x[i] = aug[i][n]\n return x\n}\n"]}
|
|
1
|
+
{"version":3,"file":"linalg.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/linalg.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api/assembly/solvers/linalg — 自实现向量数学与线性求解(P1,裁定 4)\n *\n * 规模极小(≤30 阶对称正定),优先 Cholesky(比 Gauss-Jordan 更稳且快),\n * 退化时回落 Gauss-Jordan 带部分主元。brepjs 的 `ikFns.solveLinear` 是模块私有、\n * 不可 import(裁定 4),故在此自实现,brepjs 只读约定不变。\n *\n * 模块零外部依赖;所有函数纯数值。\n */\n\nexport type Vec3 = [number, number, number]\n\n/**\n * Component-wise vector sum `a + b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the sum vector.\n */\nexport function vadd(a: Vec3, b: Vec3): Vec3 {\n return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]\n}\n/**\n * Component-wise vector difference `a - b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the difference vector.\n */\nexport function vsub(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]]\n}\n/**\n * Dot product `⟨a, b⟩`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the dot product.\n */\nexport function vdot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]\n}\n/**\n * Cross product `a × b`.\n * @param a - left operand.\n * @param b - right operand.\n * @returns the cross-product vector.\n */\nexport function vcross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]\n}\n/**\n * Scalar multiple `a * s`.\n * @param a - the vector.\n * @param s - the scalar factor.\n * @returns the scaled vector.\n */\nexport function vscale(a: Vec3, s: number): Vec3 {\n return [a[0] * s, a[1] * s, a[2] * s]\n}\n/**\n * Euclidean norm `‖a‖`.\n * @param a - the vector.\n * @returns the norm.\n */\nexport function vnorm(a: Vec3): number {\n return Math.hypot(a[0], a[1], a[2])\n}\n/**\n * 原地归一化(零向量安全:返回 [0,0,0])。\n * @param a - the vector to normalize (not mutated).\n * @returns the unit vector along `a`, or `[0, 0, 0]` for a near-zero vector.\n */\nexport function vnormalize(a: Vec3): Vec3 {\n const l = vnorm(a)\n return l < 1e-15 ? [0, 0, 0] : [a[0] / l, a[1] / l, a[2] / l]\n}\n/**\n * Sum of squared components `‖a‖²`.\n * @param a - the vector.\n * @returns the sum of squares.\n */\nexport function vsumsqr(a: Vec3): number {\n return a[0] * a[0] + a[1] * a[1] + a[2] * a[2]\n}\n\n/**\n * AᵀA(n×m 矩阵 → n×n 对称)与 Aᵀb。矩阵按行主序扁平存于 `A`(len = rows*cols)。\n * @param a - row-major `rows × cols` matrix A (flat array, length rows*cols).\n * @param rows - number of rows of A.\n * @param cols - number of columns of A.\n * @returns the `cols × cols` symmetric matrix AᵀA (row-major, flat).\n */\nexport function ata(a: number[], rows: number, cols: number): number[] {\n const out = new Array(cols * cols).fill(0)\n for (let i = 0; i < cols; i++) {\n for (let j = 0; j < cols; j++) {\n let s = 0\n for (let k = 0; k < rows; k++) s += a[k * cols + i] * a[k * cols + j]\n out[i * cols + j] = s\n }\n }\n return out\n}\n/**\n * Aᵀb for the row-major `rows × cols` matrix `a` and length-`rows` vector `b`.\n * @param a - row-major `rows × cols` matrix A (flat array, length rows*cols).\n * @param b - right-hand-side vector of length rows.\n * @param rows - number of rows of A.\n * @param cols - number of columns of A.\n * @returns the length-`cols` vector Aᵀb.\n */\nexport function atb(a: number[], b: number[], rows: number, cols: number): number[] {\n const out = new Array(cols).fill(0)\n for (let j = 0; j < cols; j++) {\n let s = 0\n for (let k = 0; k < rows; k++) s += a[k * cols + j] * b[k]\n out[j] = s\n }\n return out\n}\n\n/**\n * 解 (M + λI) x = b,M 为 n×n 对称正定(此处 M = JᵀJ)。\n * 先尝试 Cholesky(M + λI);若非正定,逐步放大 λ 重试;最终回落带部分主元 Gauss-Jordan。\n *\n * @param m - row-major `n × n` symmetric positive-definite matrix M (flat array).\n * @param b - right-hand-side vector of length n.\n * @param n - system dimension.\n * @param lambda - initial damping coefficient (progressively amplified on retry).\n * @returns 解向量 x,或退化时 null。\n */\nexport function solveDampedNormal(\n m: number[],\n b: number[],\n n: number,\n lambda: number,\n): number[] | null {\n // 尝试多级 λ(LM 阻尼放大)\n const lambdas = [lambda, lambda * 4, lambda * 16, lambda * 64, lambda * 256, lambda * 1024]\n for (const lam of lambdas) {\n const md = m.slice()\n for (let i = 0; i < n; i++) md[i * n + i] += lam\n const x = choleskySolve(md, b, n)\n if (x) return x\n }\n return gaussJordanSolve(m, b, n, lambda)\n}\n\n/** Cholesky(A = L Lᵀ)解对称正定系统;失败返回 null。 */\nfunction choleskySolve(a: number[], b: number[], n: number): number[] | null {\n const L = new Array(n * n).fill(0)\n for (let i = 0; i < n; i++) {\n for (let j = 0; j <= i; j++) {\n let s = a[i * n + j]\n for (let k = 0; k < j; k++) s -= L[i * n + k] * L[j * n + k]\n if (i === j) {\n if (s <= 0) return null // 非正定\n L[i * n + i] = Math.sqrt(s)\n } else {\n L[i * n + j] = s / L[j * n + j]\n }\n }\n }\n // 前代 L y = b\n const y = new Array(n).fill(0)\n for (let i = 0; i < n; i++) {\n let s = b[i]\n for (let k = 0; k < i; k++) s -= L[i * n + k] * y[k]\n y[i] = s / L[i * n + i]\n }\n // 回代 Lᵀ x = y\n const x = new Array(n).fill(0)\n for (let i = n - 1; i >= 0; i--) {\n let s = y[i]\n for (let k = i + 1; k < n; k++) s -= L[k * n + i] * x[k]\n x[i] = s / L[i * n + i]\n }\n return x\n}\n\n/** 带部分主元 Gauss-Jordan,附加 λI 阻尼保证可解性。 */\nfunction gaussJordanSolve(a: number[], b: number[], n: number, lambda: number): number[] | null {\n const m = a.slice()\n for (let i = 0; i < n; i++) m[i * n + i] += lambda\n const x = new Array(n).fill(0)\n const aug = new Array(n).fill(0).map((_, i) => [...m.slice(i * n, i * n + n), b[i]])\n for (let col = 0; col < n; col++) {\n let piv = col\n let best = Math.abs(aug[col][col])\n for (let r = col + 1; r < n; r++) {\n const v = Math.abs(aug[r][col])\n if (v > best) {\n best = v\n piv = r\n }\n }\n if (best < 1e-15) return null\n if (piv !== col) {\n const tmp = aug[piv]\n aug[piv] = aug[col]\n aug[col] = tmp\n }\n const d = aug[col][col]\n for (let j = col; j <= n; j++) aug[col][j] /= d\n for (let r = 0; r < n; r++) {\n if (r === col) continue\n const f = aug[r][col]\n if (f === 0) continue\n for (let j = col; j <= n; j++) aug[r][j] -= f * aug[col][j]\n }\n }\n for (let i = 0; i < n; i++) x[i] = aug[i][n]\n return x\n}\n"]}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* api/assembly/solvers/types — 纯 TS global 求解器的类型与契约(P1)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 与 `docs/plans/2026-09-17-assembly-global-solver-plan.md`。
|
|
6
|
-
*
|
|
7
|
-
* 本模块是 pure-type / 轻量数据层,不依赖任何 vendored 或运行时单例,
|
|
4
|
+
* 本模块是 pure-type / 轻量数据层,不依赖任何 brepjs 或运行时单例,
|
|
8
5
|
* 供 solve.ts、global-solver.ts、compound.ts 共享。
|
|
9
6
|
*/
|
|
10
7
|
import type { AssemblyTransform } from '../../../runtime-state.js';
|
|
11
|
-
/** 求解风格:'chain'
|
|
8
|
+
/** 求解风格:'chain'(链式拓扑解析,默认)/ 'global'(CadQuery 兼容全局最小二乘)。 */
|
|
12
9
|
export type SolverStyle = 'chain' | 'global';
|
|
13
10
|
/**
|
|
14
11
|
* 求解选项(P1):透传自 `cad.assembly({ solver })` / `AssemblyBehavior.solver`。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAEzF,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,uBAAuB;IACvB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAKD,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAE1D,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAA;IAClE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAA;IAChD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAA;IAC7F,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAClB,iFAAiF;IACjF,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* api/assembly/solvers/types — 纯 TS global 求解器的类型与契约(P1)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 与 `docs/plans/2026-09-17-assembly-global-solver-plan.md`。
|
|
6
|
-
*
|
|
7
|
-
* 本模块是 pure-type / 轻量数据层,不依赖任何 vendored 或运行时单例,
|
|
4
|
+
* 本模块是 pure-type / 轻量数据层,不依赖任何 brepjs 或运行时单例,
|
|
8
5
|
* 供 solve.ts、global-solver.ts、compound.ts 共享。
|
|
9
6
|
*/
|
|
10
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * api/assembly/solvers/types — 纯 TS global 求解器的类型与契约(P1)\n *\n * 本模块是 pure-type / 轻量数据层,不依赖任何 brepjs 或运行时单例,\n * 供 solve.ts、global-solver.ts、compound.ts 共享。\n */\n\nimport type { AssemblyTransform } from '../../../runtime-state'\n\n/** 求解风格:'chain'(链式拓扑解析,默认)/ 'global'(CadQuery 兼容全局最小二乘)。 */\nexport type SolverStyle = 'chain' | 'global'\n\n/**\n * 求解选项(P1):透传自 `cad.assembly({ solver })` / `AssemblyBehavior.solver`。\n * `name` 用于 B4 锚定(assembly.py:465 `name == self.name` 锁定)→ 从 behavior.name 注入。\n */\nexport interface SolveOptions {\n /** 默认 'chain',向后零兼容。 */\n solver?: SolverStyle\n /** 装配名(B4 锚定用;cq-compat 的 buildAssembly 注入)。 */\n name?: string\n}\n\n/**\n * global 求解器内部的本地系标记(local-frame marker)。\n *\n * 与 CQ solver.py 的 marker 同义:\n * - point:装配实体的局部坐标点;\n * - axis:轴上一点 + 单位方向(边/圆柱面法线);\n * - plane:面中心 + 单位法向(face_mate / align / angle 用)。\n *\n * 所有坐标取自成员 Shape 的本地系(faijs Shape 不携带 placement → 本地系 == 建模系)。\n */\nexport type GlobalMarker =\n | { type: 'point'; p: [number, number, number] }\n | { type: 'axis'; origin: [number, number, number]; dir: [number, number, number] }\n | { type: 'plane'; center: [number, number, number]; normal: [number, number, number] }\n\n/** global 求解结果(与 `AssemblySolveResult` 对齐的字段集,但新增 residuals)。 */\nexport interface GlobalSolveResult {\n /** 每个被定位成员一条终态变换(pivot 恒 [0,0,0];恒等位姿不输出)。 */\n transforms: AssemblyTransform[]\n /** 恒 0(数值求解不做 DOF 分析,保留字段避免 undefined)。 */\n dof: number\n /** LM 终止即 true(无论残差大小;裁定 4.6)。 */\n converged: boolean\n /** 仅约束类型无法映射为代价时填充。 */\n unsupported: string[]\n /** 逐约束最终残差(诊断,满足「绝不静默」)。 */\n residuals: number[]\n /** 残差超阈值(>1e-6·scale)的约束逐条写入(折中可见)。 */\n warnings?: string[]\n}\n\n\n// ── §5.6.1:chain 求解器类型迁入(原 brepjs kernel/solverAdapter.ts,已内化为第一方代码) ──\n\n/** 3D vector(chain 求解器本地别名,与 quat.ts 同构)。 */\nexport type SolverVec3 = readonly [number, number, number]\n\n/** A geometric entity (plane, axis, or point) referenced by a chain-solver constraint. */\nexport interface SolverEntity {\n type: 'plane' | 'axis' | 'point'\n origin: SolverVec3\n normal?: SolverVec3\n direction?: SolverVec3\n}\n\n/** A chain-solver constraint between two entities, with an optional scalar value. */\nexport interface SolverConstraint {\n type: 'coincident' | 'concentric' | 'distance' | 'angle' | 'fixed'\n entityA?: { node: string; entity: SolverEntity }\n entityB?: { node: string; entity: SolverEntity }\n value?: number\n}\n\n/** Result of the chain solver: per-node transforms, DOF count, and convergence. */\nexport interface SolverResult {\n transforms: Map<string, { position: SolverVec3; rotation: [number, number, number, number] }>\n dof: number\n converged: boolean\n /** Constraint types that were passed in but not solved (not yet implemented). */\n unsupported: string[]\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/api/boolean.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"boolean.d.ts","sourceRoot":"","sources":["../../src/api/boolean.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AA8Q1C;;;;;;;;;;;IAWI;AACJ,eAAO,MAAM,KAAK;;CAgBhB,CAAA;AAEF;;;;;;;;;;;;;;;IAeI;AACJ,eAAO,MAAM,GAAG;;CAYd,CAAA;AAEF;;;;;;;;;;;IAWI;AACJ,eAAO,MAAM,QAAQ;;CAanB,CAAA;AAEF;;;;;;;;;;;IAWI;AACJ,eAAO,MAAM,SAAS;;CAiBpB,CAAA"}
|
package/dist/api/boolean.js
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* 阶段 1:拆为三个薄函数 union/subtract/intersect + 兼容 boolean 导出(过渡)。
|
|
8
8
|
* 阶段 3 将删除 boolean 兼容导出。
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.
|
|
11
|
+
import * as meshBoolean from '../mesh/boolean.js';
|
|
11
12
|
import { solidToShape } from '../brep/brep-ops.js';
|
|
12
13
|
import { booleanWithRoleTable, } from '../brep/face-evolution.js';
|
|
13
14
|
import { getCurrentStmt, getBackends, keepHidden, nameOf } from '../runtime-state.js';
|
|
@@ -219,16 +220,16 @@ async function booleanMesh(inputs, operation) {
|
|
|
219
220
|
throw new Error('[api/boolean] boolean needs at least 1 input');
|
|
220
221
|
}
|
|
221
222
|
if (operation === 'union')
|
|
222
|
-
return
|
|
223
|
+
return meshBoolean.union(inputs[0], inputs[1], ...inputs.slice(2));
|
|
223
224
|
if (operation === 'subtract') {
|
|
224
|
-
let result = await
|
|
225
|
+
let result = await meshBoolean.subtract(inputs[0], inputs[1]);
|
|
225
226
|
for (let i = 2; i < inputs.length; i++)
|
|
226
|
-
result = await
|
|
227
|
+
result = await meshBoolean.subtract(result, inputs[i]);
|
|
227
228
|
return result;
|
|
228
229
|
}
|
|
229
|
-
let result = await
|
|
230
|
+
let result = await meshBoolean.intersect(inputs[0], inputs[1]);
|
|
230
231
|
for (let i = 2; i < inputs.length; i++)
|
|
231
|
-
result = await
|
|
232
|
+
result = await meshBoolean.intersect(result, inputs[i]);
|
|
232
233
|
return result;
|
|
233
234
|
}
|
|
234
235
|
// ── 三个薄导出(多输入 variadic,defineOp 声明双路径 + 逐核函数 face-evolution 能力) ──
|
package/dist/api/boolean.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/api/boolean.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api boolean — 布尔库函数(union/subtract/intersect,多输入)\n *\n *\n * dispatchPath 静态判定 brep/mesh,BREP 路径用 *WithHistory 收集面演化。\n *\n * 阶段 1:拆为三个薄函数 union/subtract/intersect + 兼容 boolean 导出(过渡)。\n * 阶段 3 将删除 boolean 兼容导出。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { cad } from '../mesh'\nimport { solidToShape } from '../brep/brep-ops'\nimport {\n booleanWithRoleTable,\n} from '../brep/face-evolution'\nimport { getCurrentStmt, getBackends, keepHidden, nameOf } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep, brepOf, hasMeshSolid, inputRoleTable } from '../shape'\nimport { reconcileBrepInputs } from './reconcile'\nimport { OpError } from './internal/result-unwrap'\nimport { meshKernelFailure, meshSolidEntry, meshSolidProduct } from './internal/mesh-solid-op'\nimport { defineOp } from '../sdk'\nimport { engineCapabilitySet } from '../cad-runtime/backend-dispatch'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle } from '../brep/engine/types'\n\ntype BooleanOperation = 'union' | 'subtract' | 'intersect'\n\n// ── 共享内部实现 ──\n\n/**\n * BREP 路径:fuse/cut/intersect。\n *\n * 静态双轨(无运行时 try-catch 回退——按引擎**声明**的能力集在执行前定轨):\n * - 引擎声明了对应 `*WithHistory`(occt 三员全有)→ `booleanWithRoleTable`:\n * 一次内核调用同时产出结果 + 面演化(faceEvolution)+ roleTable 合流(§3.4)。\n * - 引擎只声明了裸布尔方法(brepkit:声明了 `intersect` 但**没有** `intersectWithHistory`)\n * → 走 L1 裸 `kernel[op](a,b)`:几何正确,但**不产生面演化、不传播 roleTable**。\n * 这是如实降级——绝不用「恒等映射」伪造一张把输入面 hash 指到结果面 hash 的演化表\n * (结果实体的面 hash 与输入根本不同,恒等映射是假身份)。\n *\n * `intersect` 因此不再声明 `capabilities: ['intersectWithHistory']`(中立 op):\n * brepkit 上由本函数静态落到裸 `intersect`;occt 上仍走 `intersectWithHistory`。\n * fuse/cut 保留各自 `*WithHistory` 能力声明——dispatchPath 的 gate 保证它们到达本函数时\n * 引擎必已声明对应历史方法,故下方 `useHistory` 对 fuse/cut 恒为 true。\n */\nfunction booleanBrep(inputs: Shape[], operation: BooleanOperation): Shape {\n const kernel = getBrepApi()\n\n const inputSolids = inputs.map((s) => brepOf(s) as BrepHandle | undefined)\n if (inputSolids.some((s) => !s)) {\n // V-C8 (C6): a non-solid import (wire/face/shell via cad.import_brep) has\n // no OCCT handle yet — booleans must fail HERE with an explicit, op-named\n // error, not with OCCT's raw \"boolean operation failed\" (or silently).\n const offenders = inputs\n .map((s, i) => (inputSolids[i] ? undefined : nameOf(s) ?? `input[${i}]`))\n .filter((x): x is string => x !== undefined)\n throw new OpError(\n `boolean/${operation}`,\n 'E_BREP_UNSUPPORTED',\n `[api/boolean] ${operation}: input is not on the BREP chain (no OCCT handle) — ` +\n `non-solid geometry (wire/face/shell) cannot take part in a boolean. offenders: ${offenders.join(', ')}`,\n )\n }\n\n let resultSolid: BrepHandle\n let lastEvolution: Map<number, number[]> | undefined\n let roleTable: ReadonlyMap<unknown, unknown> | undefined\n\n // 链式布尔:每步 target(累积结果)与下一个 tool 合流\n const op: 'fuse' | 'cut' | 'intersect' =\n operation === 'union' ? 'fuse' : operation === 'subtract' ? 'cut' : 'intersect'\n\n // F 组(2026-10-03,FAULHABER/Beam-coupling 语料):import_brep 资产可能是\n // wire/face(ShapeBinder 冻结几何)——它们带 OCCT handle、能通过上面的\n // 「无 handle」守卫,但 OCCT 的 BOP 只接受 solid:fuse(wire, solid) 直接\n // \"operation failed\"(内核直测实证,PartShape5/PartShape6/PartShape93 均\n // wire/face、vol=0)。C3c-1 已实证 0 体积线框成员对 compound invariants\n // 零影响 ⇒ union 的语义是 solid 合流,非 solid 输入如实跳过(keepHidden\n // 语义不变);全非 solid 才抛错。cut/intersect 语义不变(工具/交域必须 solid)。\n const NON_SOLID = new Set(['wire', 'face', 'shell', 'vertex', 'edge'])\n const inputTypes = inputSolids.map((h) => {\n try { return h ? (kernel.shapeType(h) as string) : 'solid' } catch { return 'solid' }\n })\n // compound/compsolid 可能含 solid,是合法 fuse 输入——只跳过确定的非 solid 类型。\n const boolIdx = operation === 'union'\n ? inputTypes.map((t, i) => (NON_SOLID.has(t) ? -1 : i)).filter((i) => i >= 0)\n : inputs.map((_, i) => i)\n if (operation === 'union' && boolIdx.length === 0) {\n throw new OpError(\n `boolean/${operation}`,\n 'E_BREP_UNSUPPORTED',\n `[api/boolean] ${operation}: no solid input — wire/face/shell geometry cannot fuse (types: ${inputTypes.join(', ')})`,\n )\n }\n\n // 静态定轨:当前引擎是否声明了本 op 的面演化核函数(读的是同一声明源 dispatchPath 用的\n // 能力集,不是运行时探测)。fuse/cut 因 gate 保证此处恒 true;intersect 在 occt true、\n // brepkit/mock false(后者走 L1 裸 `kernel[op]`,该方法是 BrepEngineApi 必需成员,必存在)。\n const historyCap = op === 'fuse' ? 'fuseWithHistory' : op === 'cut' ? 'cutWithHistory' : 'intersectWithHistory'\n const useHistory = engineCapabilitySet(getBackends().config.brepCapabilities).has(historyCap)\n\n // 首个 solid 输入作为 target 起点(F 组:可能不是 inputs[0] —— wire/face\n // 资产常排在前面作为 profile/binder)。\n resultSolid = inputSolids[boolIdx[0]!]!\n roleTable = useHistory\n ? (inputRoleTable(inputs[boolIdx[0]!]) as ReadonlyMap<unknown, unknown> | undefined)\n : undefined\n\n for (let bi = 1; bi < boolIdx.length; bi++) {\n const i = boolIdx[bi]!\n const prev = resultSolid\n const tool = inputSolids[i]!\n\n if (useHistory) {\n // §3.4:一次内核调用,A/B 拆流各自传播后合表(缝面 origin=本次语句 StmtId)\n // V-C8:内核裸错误在此包一层——带上 op 名、两个输入的变量名与 cause。\n const prevTable = roleTable\n const toolTable = inputRoleTable(inputs[i]) as ReadonlyMap<unknown, unknown> | undefined\n // Phase 1.6:新 origin = 本次语句的 StmtId。\n const outStmt = String(getCurrentStmt()?.id ?? '')\n let r: ReturnType<typeof booleanWithRoleTable>\n try {\n r = booleanWithRoleTable(\n kernel,\n op,\n prev,\n tool,\n prevTable ?? new Map(),\n toolTable ?? new Map(),\n outStmt,\n )\n } catch (cause) {\n // GOTCHA: OCCT 的 *WithHistory 在两输入共享子结构/历史(如布尔产物的布尔)\n // 时可能 \"operation failed\",而同一几何的裸布尔可以成功。降级重试一次裸\n // kernel[op]:几何结果正确,代价是丢本次面演化/roleTable(如实降级,同下方\n // 裸路径语义)。裸布尔也失败时,再试 unifySameDomain(两输入) 后重算——\n // 真实语料(disk-drive)中 tool 是布尔产物且与 target 共享子域,裸 cut 仍失败、\n // unify 后成功。全部失败才真正抛错。\n try {\n resultSolid = kernel[op](prev, tool)\n lastEvolution = undefined\n roleTable = undefined\n if (i > 1) kernel.release(prev)\n continue\n } catch {\n try {\n const uPrev = kernel.unifySameDomain(prev)\n const uTool = kernel.unifySameDomain(tool)\n resultSolid = kernel[op](uPrev, uTool)\n kernel.release(uPrev)\n kernel.release(uTool)\n lastEvolution = undefined\n roleTable = undefined\n if (i > 1) kernel.release(prev)\n continue\n } catch {\n const msg = cause instanceof Error ? cause.message : String(cause)\n throw new OpError(\n `boolean/${operation}`,\n 'E_OP_FAILED',\n `[api/boolean] ${operation}: kernel ${op} failed for inputs ` +\n `${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`} — ${msg}`,\n { cause },\n )\n }\n }\n }\n resultSolid = r.result\n lastEvolution = r.faceEvolution\n roleTable = r.roleTable\n } else {\n // 裸布尔降级路径:几何正确,但无面演化、无 roleTable 传播(如实降级,不伪造映射)。\n try {\n resultSolid = kernel[op](prev, tool)\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause)\n throw new OpError(\n `boolean/${operation}`,\n 'E_OP_FAILED',\n `[api/boolean] ${operation}: kernel ${op} failed for inputs ` +\n `${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`} — ${msg}`,\n { cause },\n )\n }\n lastEvolution = undefined\n roleTable = undefined\n }\n if (i > 1) kernel.release(prev)\n }\n\n return fromBrep(\n solidToShape(kernel, resultSolid),\n lastEvolution ? { solid: resultSolid, faceEvolution: lastEvolution, roleTable } : { solid: resultSolid, roleTable },\n )\n}\n\n/**\n * 网格实体路径:brepkit 网格内核的布尔(方案 2026-10-01 §3.5 三明治)。\n *\n * 输入**全部**是网格实体——这一点由 `dispatchPath` 的链门禁保证\n * (`E_MESH_SOLID_MIXED`:网格实体不得与链外几何同处一次调用),此处只复核不补救。\n *\n * 无面演化、无 roleTable:近似拓扑没有 hash 演化,造一张恒等映射就是假身份\n * (与 brepkit 裸布尔降级同一条纪律)。\n *\n * 中间结果是本实现自己造的句柄(不是任何输入),故 i>1 步及时释放;**输入句柄一概\n * 不释放**——生命周期归链(与 BREP 路径 booleanBrep 的 `if (i > 1) kernel.release(prev)`\n * 同构)。\n *\n * @param inputs - the mesh-solid inputs (≥1).\n * @param operation - union / subtract / intersect.\n * @returns the boolean result as a new mesh part.\n */\nfunction booleanMeshSolid(inputs: Shape[], operation: BooleanOperation): Shape {\n const opLabel = `boolean/${operation}`\n const entries = inputs.map((s) => meshSolidEntry(s, opLabel))\n const first = entries[0]!\n const kernel = first.kernel\n const op: 'fuse' | 'cut' | 'intersect' =\n operation === 'union' ? 'fuse' : operation === 'subtract' ? 'cut' : 'intersect'\n\n let result = first.solid\n for (let i = 1; i < entries.length; i++) {\n const prev = result\n try {\n result = kernel[op](prev, entries[i]!.solid)\n } catch (cause) {\n throw meshKernelFailure(\n opLabel,\n 'E_OP_FAILED',\n `${op}(${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`})`,\n cause,\n )\n }\n // i>1:prev 是本实现上一步造出的中间实体,释放它(i=1 时 prev 是**输入**,不碰)。\n if (i > 1) first.backend.release(prev)\n }\n return meshSolidProduct(first, result)\n}\n\n/**\n * 网格路径分流(方案 2026-10-01 §3.4 规则 4):输入含网格实体 → brepkit 网格内核;\n * 否则保持历史上限(内置 `mesh/` 的 manifold CSG)。两条路**互不冒充**——\n * manifold 不认识网格实体(静态门禁),网格内核也不接受裸网格(无句柄)。\n *\n * @param inputs - the geometry inputs.\n * @param operation - union / subtract / intersect.\n * @returns the boolean product (mesh solid or manifold mesh shape).\n */\nfunction booleanMeshPath(inputs: Shape[], operation: BooleanOperation): Shape | Promise<Shape> {\n if (inputs.some(hasMeshSolid)) return booleanMeshSolid(inputs, operation)\n return booleanMesh(inputs, operation)\n}\n\n/** mesh 路径:manifold-3d mesh-CSG。 */\nasync function booleanMesh(inputs: Shape[], operation: BooleanOperation): Promise<Shape> {\n if (inputs.length < 2) {\n if (inputs.length === 1) return inputs[0]\n throw new Error('[api/boolean] boolean needs at least 1 input')\n }\n if (operation === 'union') return cad.union(inputs[0], inputs[1], ...inputs.slice(2))\n if (operation === 'subtract') {\n let result = await cad.subtract(inputs[0], inputs[1])\n for (let i = 2; i < inputs.length; i++) result = await cad.subtract(result, inputs[i])\n return result\n }\n let result = await cad.intersect(inputs[0], inputs[1])\n for (let i = 2; i < inputs.length; i++) result = await cad.intersect(result, inputs[i])\n return result\n}\n\n// ── 三个薄导出(多输入 variadic,defineOp 声明双路径 + 逐核函数 face-evolution 能力) ──\n// 函数体 keep 声明(keep-syntax 设计 §2.5):union/subtract/intersect 保留其\n// 输入且隐藏(R5:3d_editor 现状)——keepHidden 使源变量保持终端但 canvas\n// 不渲染,只有布尔结果正常显示。混合/断链时刻:BREP 侧输入先归约为合法\n// 2-manifold 网格(reconcileBrepInputs),mesh 侧原样透传。\n\n/**\n * 布尔并集:合并所有输入几何(≥2 个输入)。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name union\n * @param shapes - 参与运算的几何(变量引用,≥2 个)。type:Shape[] required:true\n * @returns Shape 所有输入的并集。函数名即操作,输入全是变量引用,可用 `cad.union(a, b, c)` 多输入。\n * @example\n * const a = await cad.union(part0, part1)\n */\nexport const union = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'union')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'union')\n },\n // 逐核函数声明(Phase 0.2):union 需要内核的 fuseWithHistory。\n // 不再声明族级 'evolution'——族级名会让 brepkit(无 intersectWithHistory)等\n // 部分实现的内核静默通过静态判定,再死在运行时(红线违规)。\n capabilities: ['fuseWithHistory'],\n schema: { shapes: 'Shape*' },\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * Boolean cut (subtract): remove `tool` from `base`. Same semantics as\n * {@link subtract} but with the brepjs-compatible `(base, tool, options?)` signature.\n * Overrides the generated projection (compatOp) to do roleTable propagation\n * (Phase 3: L2 requires wall:<i> to survive cut).\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name cut\n * @param base - the target shape. type:Shape required:true\n * @param tool - the shape to subtract. type:Shape required:true\n * @returns Shape base minus tool.\n * @example\n * const b = await cad.cut(part0, part1)\n */\nexport const cut = defineOp({\n meshEngines: ['brepkit'],\n mesh: (base: Shape, tool: Shape) => {\n keepHidden(base, tool)\n return booleanMeshPath(reconcileBrepInputs([base, tool]), 'subtract')\n },\n brep: (base: Shape, tool: Shape) => {\n keepHidden(base, tool)\n return booleanBrep([base, tool], 'subtract')\n },\n capabilities: ['cutWithHistory'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 布尔差集:第一个为主体,减去其余输入。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name subtract\n * @param shapes - 参与运算的几何(变量引用,第一个为主体)。type:Shape[] required:true\n * @returns Shape part0 减 part1 的差集(第一个为主体)。\n * @example\n * const b = await cad.subtract(part0, part1)\n */\nexport const subtract = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'subtract')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'subtract')\n },\n // 逐核函数声明(Phase 0.2):subtract 需要内核的 cutWithHistory。\n capabilities: ['cutWithHistory'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 布尔交集:所有输入的重叠部分。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name intersect\n * @param shapes - 参与运算的几何(变量引用)。type:Shape[] required:true\n * @returns Shape 所有输入的交集。\n * @example\n * const c = await cad.intersect(part0, part1)\n */\nexport const intersect = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'intersect')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'intersect')\n },\n // 不声明 `capabilities: ['intersectWithHistory']`(中立 op):\n // brepkit 声明了裸 `intersect` 但没有 `intersectWithHistory`——若硬声明历史能力,\n // brepkit brep 模式会在执行前静态报 `lacks capability 'intersectWithHistory'`。\n // 现由 booleanBrep 按引擎声明的能力集静态分派:occt(声明 intersectWithHistory)\n // 走历史路径保留面演化/naming;brepkit(只声明裸 intersect)走 L1 裸 `kernel.intersect`,\n // 几何正确但无面演化(如实降级,不伪造恒等映射)。\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n"]}
|
|
1
|
+
{"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../src/api/boolean.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api boolean — 布尔库函数(union/subtract/intersect,多输入)\n *\n *\n * dispatchPath 静态判定 brep/mesh,BREP 路径用 *WithHistory 收集面演化。\n *\n * 阶段 1:拆为三个薄函数 union/subtract/intersect + 兼容 boolean 导出(过渡)。\n * 阶段 3 将删除 boolean 兼容导出。\n */\n\nimport type { Shape } from '../mesh/types'\n// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.\nimport * as meshBoolean from '../mesh/boolean'\nimport { solidToShape } from '../brep/brep-ops'\nimport {\n booleanWithRoleTable,\n} from '../brep/face-evolution'\nimport { getCurrentStmt, getBackends, keepHidden, nameOf } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep, brepOf, hasMeshSolid, inputRoleTable } from '../shape'\nimport { reconcileBrepInputs } from './reconcile'\nimport { OpError } from './internal/result-unwrap'\nimport { meshKernelFailure, meshSolidEntry, meshSolidProduct } from './internal/mesh-solid-op'\nimport { defineOp } from '../sdk'\nimport { engineCapabilitySet } from '../cad-runtime/backend-dispatch'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle } from '../brep/engine/types'\n\ntype BooleanOperation = 'union' | 'subtract' | 'intersect'\n\n// ── 共享内部实现 ──\n\n/**\n * BREP 路径:fuse/cut/intersect。\n *\n * 静态双轨(无运行时 try-catch 回退——按引擎**声明**的能力集在执行前定轨):\n * - 引擎声明了对应 `*WithHistory`(occt 三员全有)→ `booleanWithRoleTable`:\n * 一次内核调用同时产出结果 + 面演化(faceEvolution)+ roleTable 合流(§3.4)。\n * - 引擎只声明了裸布尔方法(brepkit:声明了 `intersect` 但**没有** `intersectWithHistory`)\n * → 走 L1 裸 `kernel[op](a,b)`:几何正确,但**不产生面演化、不传播 roleTable**。\n * 这是如实降级——绝不用「恒等映射」伪造一张把输入面 hash 指到结果面 hash 的演化表\n * (结果实体的面 hash 与输入根本不同,恒等映射是假身份)。\n *\n * `intersect` 因此不再声明 `capabilities: ['intersectWithHistory']`(中立 op):\n * brepkit 上由本函数静态落到裸 `intersect`;occt 上仍走 `intersectWithHistory`。\n * fuse/cut 保留各自 `*WithHistory` 能力声明——dispatchPath 的 gate 保证它们到达本函数时\n * 引擎必已声明对应历史方法,故下方 `useHistory` 对 fuse/cut 恒为 true。\n */\nfunction booleanBrep(inputs: Shape[], operation: BooleanOperation): Shape {\n const kernel = getBrepApi()\n\n const inputSolids = inputs.map((s) => brepOf(s) as BrepHandle | undefined)\n if (inputSolids.some((s) => !s)) {\n // V-C8 (C6): a non-solid import (wire/face/shell via cad.import_brep) has\n // no OCCT handle yet — booleans must fail HERE with an explicit, op-named\n // error, not with OCCT's raw \"boolean operation failed\" (or silently).\n const offenders = inputs\n .map((s, i) => (inputSolids[i] ? undefined : nameOf(s) ?? `input[${i}]`))\n .filter((x): x is string => x !== undefined)\n throw new OpError(\n `boolean/${operation}`,\n 'E_BREP_UNSUPPORTED',\n `[api/boolean] ${operation}: input is not on the BREP chain (no OCCT handle) — ` +\n `non-solid geometry (wire/face/shell) cannot take part in a boolean. offenders: ${offenders.join(', ')}`,\n )\n }\n\n let resultSolid: BrepHandle\n let lastEvolution: Map<number, number[]> | undefined\n let roleTable: ReadonlyMap<unknown, unknown> | undefined\n\n // 链式布尔:每步 target(累积结果)与下一个 tool 合流\n const op: 'fuse' | 'cut' | 'intersect' =\n operation === 'union' ? 'fuse' : operation === 'subtract' ? 'cut' : 'intersect'\n\n // F 组(2026-10-03,FAULHABER/Beam-coupling 语料):import_brep 资产可能是\n // wire/face(ShapeBinder 冻结几何)——它们带 OCCT handle、能通过上面的\n // 「无 handle」守卫,但 OCCT 的 BOP 只接受 solid:fuse(wire, solid) 直接\n // \"operation failed\"(内核直测实证,PartShape5/PartShape6/PartShape93 均\n // wire/face、vol=0)。C3c-1 已实证 0 体积线框成员对 compound invariants\n // 零影响 ⇒ union 的语义是 solid 合流,非 solid 输入如实跳过(keepHidden\n // 语义不变);全非 solid 才抛错。cut/intersect 语义不变(工具/交域必须 solid)。\n const NON_SOLID = new Set(['wire', 'face', 'shell', 'vertex', 'edge'])\n const inputTypes = inputSolids.map((h) => {\n try { return h ? (kernel.shapeType(h) as string) : 'solid' } catch { return 'solid' }\n })\n // compound/compsolid 可能含 solid,是合法 fuse 输入——只跳过确定的非 solid 类型。\n const boolIdx = operation === 'union'\n ? inputTypes.map((t, i) => (NON_SOLID.has(t) ? -1 : i)).filter((i) => i >= 0)\n : inputs.map((_, i) => i)\n if (operation === 'union' && boolIdx.length === 0) {\n throw new OpError(\n `boolean/${operation}`,\n 'E_BREP_UNSUPPORTED',\n `[api/boolean] ${operation}: no solid input — wire/face/shell geometry cannot fuse (types: ${inputTypes.join(', ')})`,\n )\n }\n\n // 静态定轨:当前引擎是否声明了本 op 的面演化核函数(读的是同一声明源 dispatchPath 用的\n // 能力集,不是运行时探测)。fuse/cut 因 gate 保证此处恒 true;intersect 在 occt true、\n // brepkit/mock false(后者走 L1 裸 `kernel[op]`,该方法是 BrepEngineApi 必需成员,必存在)。\n const historyCap = op === 'fuse' ? 'fuseWithHistory' : op === 'cut' ? 'cutWithHistory' : 'intersectWithHistory'\n const useHistory = engineCapabilitySet(getBackends().config.brepCapabilities).has(historyCap)\n\n // 首个 solid 输入作为 target 起点(F 组:可能不是 inputs[0] —— wire/face\n // 资产常排在前面作为 profile/binder)。\n resultSolid = inputSolids[boolIdx[0]!]!\n roleTable = useHistory\n ? (inputRoleTable(inputs[boolIdx[0]!]) as ReadonlyMap<unknown, unknown> | undefined)\n : undefined\n\n for (let bi = 1; bi < boolIdx.length; bi++) {\n const i = boolIdx[bi]!\n const prev = resultSolid\n const tool = inputSolids[i]!\n\n if (useHistory) {\n // §3.4:一次内核调用,A/B 拆流各自传播后合表(缝面 origin=本次语句 StmtId)\n // V-C8:内核裸错误在此包一层——带上 op 名、两个输入的变量名与 cause。\n const prevTable = roleTable\n const toolTable = inputRoleTable(inputs[i]) as ReadonlyMap<unknown, unknown> | undefined\n // Phase 1.6:新 origin = 本次语句的 StmtId。\n const outStmt = String(getCurrentStmt()?.id ?? '')\n let r: ReturnType<typeof booleanWithRoleTable>\n try {\n r = booleanWithRoleTable(\n kernel,\n op,\n prev,\n tool,\n prevTable ?? new Map(),\n toolTable ?? new Map(),\n outStmt,\n )\n } catch (cause) {\n // GOTCHA: OCCT 的 *WithHistory 在两输入共享子结构/历史(如布尔产物的布尔)\n // 时可能 \"operation failed\",而同一几何的裸布尔可以成功。降级重试一次裸\n // kernel[op]:几何结果正确,代价是丢本次面演化/roleTable(如实降级,同下方\n // 裸路径语义)。裸布尔也失败时,再试 unifySameDomain(两输入) 后重算——\n // 真实语料(disk-drive)中 tool 是布尔产物且与 target 共享子域,裸 cut 仍失败、\n // unify 后成功。全部失败才真正抛错。\n try {\n resultSolid = kernel[op](prev, tool)\n lastEvolution = undefined\n roleTable = undefined\n if (i > 1) kernel.release(prev)\n continue\n } catch {\n try {\n const uPrev = kernel.unifySameDomain(prev)\n const uTool = kernel.unifySameDomain(tool)\n resultSolid = kernel[op](uPrev, uTool)\n kernel.release(uPrev)\n kernel.release(uTool)\n lastEvolution = undefined\n roleTable = undefined\n if (i > 1) kernel.release(prev)\n continue\n } catch {\n const msg = cause instanceof Error ? cause.message : String(cause)\n throw new OpError(\n `boolean/${operation}`,\n 'E_OP_FAILED',\n `[api/boolean] ${operation}: kernel ${op} failed for inputs ` +\n `${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`} — ${msg}`,\n { cause },\n )\n }\n }\n }\n resultSolid = r.result\n lastEvolution = r.faceEvolution\n roleTable = r.roleTable\n } else {\n // 裸布尔降级路径:几何正确,但无面演化、无 roleTable 传播(如实降级,不伪造映射)。\n try {\n resultSolid = kernel[op](prev, tool)\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause)\n throw new OpError(\n `boolean/${operation}`,\n 'E_OP_FAILED',\n `[api/boolean] ${operation}: kernel ${op} failed for inputs ` +\n `${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`} — ${msg}`,\n { cause },\n )\n }\n lastEvolution = undefined\n roleTable = undefined\n }\n if (i > 1) kernel.release(prev)\n }\n\n return fromBrep(\n solidToShape(kernel, resultSolid),\n lastEvolution ? { solid: resultSolid, faceEvolution: lastEvolution, roleTable } : { solid: resultSolid, roleTable },\n )\n}\n\n/**\n * 网格实体路径:brepkit 网格内核的布尔(方案 2026-10-01 §3.5 三明治)。\n *\n * 输入**全部**是网格实体——这一点由 `dispatchPath` 的链门禁保证\n * (`E_MESH_SOLID_MIXED`:网格实体不得与链外几何同处一次调用),此处只复核不补救。\n *\n * 无面演化、无 roleTable:近似拓扑没有 hash 演化,造一张恒等映射就是假身份\n * (与 brepkit 裸布尔降级同一条纪律)。\n *\n * 中间结果是本实现自己造的句柄(不是任何输入),故 i>1 步及时释放;**输入句柄一概\n * 不释放**——生命周期归链(与 BREP 路径 booleanBrep 的 `if (i > 1) kernel.release(prev)`\n * 同构)。\n *\n * @param inputs - the mesh-solid inputs (≥1).\n * @param operation - union / subtract / intersect.\n * @returns the boolean result as a new mesh part.\n */\nfunction booleanMeshSolid(inputs: Shape[], operation: BooleanOperation): Shape {\n const opLabel = `boolean/${operation}`\n const entries = inputs.map((s) => meshSolidEntry(s, opLabel))\n const first = entries[0]!\n const kernel = first.kernel\n const op: 'fuse' | 'cut' | 'intersect' =\n operation === 'union' ? 'fuse' : operation === 'subtract' ? 'cut' : 'intersect'\n\n let result = first.solid\n for (let i = 1; i < entries.length; i++) {\n const prev = result\n try {\n result = kernel[op](prev, entries[i]!.solid)\n } catch (cause) {\n throw meshKernelFailure(\n opLabel,\n 'E_OP_FAILED',\n `${op}(${nameOf(inputs[0]!) ?? 'input[0]'} × ${nameOf(inputs[i]!) ?? `input[${i}]`})`,\n cause,\n )\n }\n // i>1:prev 是本实现上一步造出的中间实体,释放它(i=1 时 prev 是**输入**,不碰)。\n if (i > 1) first.backend.release(prev)\n }\n return meshSolidProduct(first, result)\n}\n\n/**\n * 网格路径分流(方案 2026-10-01 §3.4 规则 4):输入含网格实体 → brepkit 网格内核;\n * 否则保持历史上限(内置 `mesh/` 的 manifold CSG)。两条路**互不冒充**——\n * manifold 不认识网格实体(静态门禁),网格内核也不接受裸网格(无句柄)。\n *\n * @param inputs - the geometry inputs.\n * @param operation - union / subtract / intersect.\n * @returns the boolean product (mesh solid or manifold mesh shape).\n */\nfunction booleanMeshPath(inputs: Shape[], operation: BooleanOperation): Shape | Promise<Shape> {\n if (inputs.some(hasMeshSolid)) return booleanMeshSolid(inputs, operation)\n return booleanMesh(inputs, operation)\n}\n\n/** mesh 路径:manifold-3d mesh-CSG。 */\nasync function booleanMesh(inputs: Shape[], operation: BooleanOperation): Promise<Shape> {\n if (inputs.length < 2) {\n if (inputs.length === 1) return inputs[0]\n throw new Error('[api/boolean] boolean needs at least 1 input')\n }\n if (operation === 'union') return meshBoolean.union(inputs[0], inputs[1], ...inputs.slice(2))\n if (operation === 'subtract') {\n let result = await meshBoolean.subtract(inputs[0], inputs[1])\n for (let i = 2; i < inputs.length; i++) result = await meshBoolean.subtract(result, inputs[i])\n return result\n }\n let result = await meshBoolean.intersect(inputs[0], inputs[1])\n for (let i = 2; i < inputs.length; i++) result = await meshBoolean.intersect(result, inputs[i])\n return result\n}\n\n// ── 三个薄导出(多输入 variadic,defineOp 声明双路径 + 逐核函数 face-evolution 能力) ──\n// 函数体 keep 声明(keep-syntax 设计 §2.5):union/subtract/intersect 保留其\n// 输入且隐藏(R5:3d_editor 现状)——keepHidden 使源变量保持终端但 canvas\n// 不渲染,只有布尔结果正常显示。混合/断链时刻:BREP 侧输入先归约为合法\n// 2-manifold 网格(reconcileBrepInputs),mesh 侧原样透传。\n\n/**\n * 布尔并集:合并所有输入几何(≥2 个输入)。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name union\n * @param shapes - 参与运算的几何(变量引用,≥2 个)。type:Shape[] required:true\n * @returns Shape 所有输入的并集。函数名即操作,输入全是变量引用,可用 `cad.union(a, b, c)` 多输入。\n * @example\n * const a = await cad.union(part0, part1)\n */\nexport const union = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'union')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'union')\n },\n // 逐核函数声明(Phase 0.2):union 需要内核的 fuseWithHistory。\n // 不再声明族级 'evolution'——族级名会让 brepkit(无 intersectWithHistory)等\n // 部分实现的内核静默通过静态判定,再死在运行时(红线违规)。\n capabilities: ['fuseWithHistory'],\n schema: { shapes: 'Shape*' },\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * Boolean cut (subtract): remove `tool` from `base`. Same semantics as\n * {@link subtract} but with the brepjs-compatible `(base, tool, options?)` signature.\n * Overrides the generated projection (compatOp) to do roleTable propagation\n * (Phase 3: L2 requires wall:<i> to survive cut).\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name cut\n * @param base - the target shape. type:Shape required:true\n * @param tool - the shape to subtract. type:Shape required:true\n * @returns Shape base minus tool.\n * @example\n * const b = await cad.cut(part0, part1)\n */\nexport const cut = defineOp({\n meshEngines: ['brepkit'],\n mesh: (base: Shape, tool: Shape) => {\n keepHidden(base, tool)\n return booleanMeshPath(reconcileBrepInputs([base, tool]), 'subtract')\n },\n brep: (base: Shape, tool: Shape) => {\n keepHidden(base, tool)\n return booleanBrep([base, tool], 'subtract')\n },\n capabilities: ['cutWithHistory'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 布尔差集:第一个为主体,减去其余输入。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name subtract\n * @param shapes - 参与运算的几何(变量引用,第一个为主体)。type:Shape[] required:true\n * @returns Shape part0 减 part1 的差集(第一个为主体)。\n * @example\n * const b = await cad.subtract(part0, part1)\n */\nexport const subtract = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'subtract')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'subtract')\n },\n // 逐核函数声明(Phase 0.2):subtract 需要内核的 cutWithHistory。\n capabilities: ['cutWithHistory'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 布尔交集:所有输入的重叠部分。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name intersect\n * @param shapes - 参与运算的几何(变量引用)。type:Shape[] required:true\n * @returns Shape 所有输入的交集。\n * @example\n * const c = await cad.intersect(part0, part1)\n */\nexport const intersect = defineOp({\n meshEngines: ['brepkit'],\n mesh: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanMeshPath(reconcileBrepInputs(shapes), 'intersect')\n },\n brep: (...shapes: Shape[]) => {\n if (shapes.length > 0) keepHidden(...shapes)\n return booleanBrep(shapes, 'intersect')\n },\n // 不声明 `capabilities: ['intersectWithHistory']`(中立 op):\n // brepkit 声明了裸 `intersect` 但没有 `intersectWithHistory`——若硬声明历史能力,\n // brepkit brep 模式会在执行前静态报 `lacks capability 'intersectWithHistory'`。\n // 现由 booleanBrep 按引擎声明的能力集静态分派:occt(声明 intersectWithHistory)\n // 走历史路径保留面演化/naming;brepkit(只声明裸 intersect)走 L1 裸 `kernel.intersect`,\n // 几何正确但无面演化(如实降级,不伪造恒等映射)。\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Brep-shaped implementation for `section`. Semantics mirror
|
|
7
|
+
* Brep-shaped implementation for `section`. Semantics mirror brepjs
|
|
8
8
|
* `topology/booleanFns.ts` `section` (NULL_SHAPE_INPUT guard, plane resolution
|
|
9
9
|
* from PlaneInput, kernel section via a planar tool, compound result) using the
|
|
10
10
|
* L1 `sectionByPlane` (occt-wasm `BRepAlgoAPI_Section` + edge/wire downcast).
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
import type { BrepHandle } from '../../brep/engine/types.js';
|
|
13
13
|
import { type Result } from '../../result/result.js';
|
|
14
14
|
/**
|
|
15
|
-
* Section a shape with a plane (
|
|
15
|
+
* Section a shape with a plane (brepjs `section(shape, plane, options?)`).
|
|
16
16
|
*
|
|
17
17
|
* The plane is resolved from `PlaneInput` (named plane or explicit Plane); the
|
|
18
18
|
* L1 `sectionByPlane` builds the planar tool, runs `BRepAlgoAPI_Section`, and
|
|
19
19
|
* downcasts the result compound to edge/wire handles, which are re-combined
|
|
20
|
-
* into a compound to match the
|
|
20
|
+
* into a compound to match the brepjs product shape. `options` (approximation
|
|
21
21
|
* / planeSize) is accepted for signature compatibility; the occt native
|
|
22
22
|
* section uses its default approximation.
|
|
23
23
|
*
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Brep-shaped implementation for `section`. Semantics mirror
|
|
7
|
+
* Brep-shaped implementation for `section`. Semantics mirror brepjs
|
|
8
8
|
* `topology/booleanFns.ts` `section` (NULL_SHAPE_INPUT guard, plane resolution
|
|
9
9
|
* from PlaneInput, kernel section via a planar tool, compound result) using the
|
|
10
10
|
* L1 `sectionByPlane` (occt-wasm `BRepAlgoAPI_Section` + edge/wire downcast).
|
|
@@ -18,12 +18,12 @@ import { resolvePlane } from '../brepjs-compat/planeOps.js';
|
|
|
18
18
|
import { brepHandleOf } from './brepHelpers.js';
|
|
19
19
|
const SECTION_PARAMS = { name: 'section', params: ['shape', 'plane'], formClass: 'A' };
|
|
20
20
|
/**
|
|
21
|
-
* Section a shape with a plane (
|
|
21
|
+
* Section a shape with a plane (brepjs `section(shape, plane, options?)`).
|
|
22
22
|
*
|
|
23
23
|
* The plane is resolved from `PlaneInput` (named plane or explicit Plane); the
|
|
24
24
|
* L1 `sectionByPlane` builds the planar tool, runs `BRepAlgoAPI_Section`, and
|
|
25
25
|
* downcasts the result compound to edge/wire handles, which are re-combined
|
|
26
|
-
* into a compound to match the
|
|
26
|
+
* into a compound to match the brepjs product shape. `options` (approximation
|
|
27
27
|
* / planeSize) is accepted for signature compatibility; the occt native
|
|
28
28
|
* section uses its default approximation.
|
|
29
29
|
*
|
|
@@ -55,7 +55,7 @@ export function sectionBrep(...args) {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
// ---------------------------------------------------------------------------
|
|
58
|
-
// fuse — union two shapes (
|
|
58
|
+
// fuse — union two shapes (brepjs topology/booleanFns.ts#fuse)
|
|
59
59
|
// ---------------------------------------------------------------------------
|
|
60
60
|
const FUSE_PARAMS = { name: 'fuse', params: ['a', 'b', 'options'], formClass: 'A' };
|
|
61
61
|
/**
|
|
@@ -77,7 +77,7 @@ export function fuseBrep(...args) {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
|
-
// split — split a shape with tool(s) (
|
|
80
|
+
// split — split a shape with tool(s) (brepjs topology/api.ts#split → booleanFns.split)
|
|
81
81
|
// ---------------------------------------------------------------------------
|
|
82
82
|
const SPLIT_PARAMS = { name: 'split', params: ['shape', 'tools'], formClass: 'A' };
|
|
83
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booleanFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/booleanFns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,EAAE,EAAE,GAAG,EAAe,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,cAAc,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,GAAgB,EAAE,CAAA;AAEnG;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,IAAe;IAC5C,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAC7B,+DAA+D;IAC/D,gEAAgE;IAChE,wDAAwD;IACxD,oCAAoC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAmB,CAAC,CAAA;IAClD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAA;IACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAA;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CACjC,CAAC,EACD,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAClD,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC7C,CAAA;QACD,2DAA2D;QAC3D,gEAAgE;QAChE,qEAAqE;QACrE,mBAAmB;QACnB,OAAO,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,GAAG,CACR,WAAW,CACT,gBAAgB,EAChB,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAC1E,CAAC,EACD,EAAE,SAAS,EAAE,SAAS,EAAE,EACxB,gGAAgG,CACjG,CACF,CAAA;IACH,CAAC;AACH,CAAC;AAGD,8EAA8E;AAC9E
|
|
1
|
+
{"version":3,"file":"booleanFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/booleanFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Self-hosted compat-op implementations — boolean / section\n * (core-decouple Phase 3, §5.4).\n *\n * @platform occt\n *\n * Brep-shaped implementation for `section`. Semantics mirror brepjs\n * `topology/booleanFns.ts` `section` (NULL_SHAPE_INPUT guard, plane resolution\n * from PlaneInput, kernel section via a planar tool, compound result) using the\n * L1 `sectionByPlane` (occt-wasm `BRepAlgoAPI_Section` + edge/wire downcast).\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { getOcctKernel } from '../../occt-kernel/occtKernel'\nimport { ok, err, type Result } from '../../result/result'\nimport { kernelError } from '../../result/errors'\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport type { PlaneInput } from '../brepjs-compat/planeTypes'\nimport { resolvePlane } from '../brepjs-compat/planeOps'\nimport { brepHandleOf } from './brepHelpers'\n\nconst SECTION_PARAMS = { name: 'section', params: ['shape', 'plane'], formClass: 'A' as FormClass }\n\n/**\n * Section a shape with a plane (brepjs `section(shape, plane, options?)`).\n *\n * The plane is resolved from `PlaneInput` (named plane or explicit Plane); the\n * L1 `sectionByPlane` builds the planar tool, runs `BRepAlgoAPI_Section`, and\n * downcasts the result compound to edge/wire handles, which are re-combined\n * into a compound to match the brepjs product shape. `options` (approximation\n * / planeSize) is accepted for signature compatibility; the occt native\n * section uses its default approximation.\n *\n * @param args - Resolved arguments (shape, plane).\n * @returns The section result compound as a `BrepHandle`.\n */\nexport function sectionBrep(...args: unknown[]): Result<BrepHandle> {\n const [shape, plane] = resolveArgs(args, SECTION_PARAMS)\n const kernel = getBrepApi()\n const h = brepHandleOf(shape)\n // NOTE: 2026-09-26 brepkit 降级——移除 getOcctKernel().IsNull 平台耦合。\n // 空/坏句柄由下游 sectionByPlane 内核抛错并被下方 try/catch 捕获为 SECTION_FAILED\n // (occt 的 sectionByPlane 对空结果本就返回 [],行为等价;brepkit 对坏句柄抛\n // \"invalid solid handle\",诚实报错而非崩溃)。\n const resolved = resolvePlane(plane as PlaneInput)\n if (!resolved.ok) return resolved\n const p = resolved.value\n try {\n const parts = kernel.sectionByPlane(\n h,\n { x: p.origin[0], y: p.origin[1], z: p.origin[2] },\n { x: p.zDir[0], y: p.zDir[1], z: p.zDir[2] },\n )\n // 语义差异(如实登记):occt sectionByPlane 返回 edge/wire 句柄组(1D 剖面线);\n // brepkit sectionByPlane 返回 face 句柄组(2D 剖面面)。两侧都包成 compound 产物,\n // 下游 meshShape/wireframe 已按已知集合分发(brepkit makeCompound 对非 solid 子句柄走\n // 虚拟 compound 路径)。\n return ok(kernel.makeCompound(parts))\n } catch (e) {\n return err(\n kernelError(\n 'SECTION_FAILED',\n `Section with plane failed: ${e instanceof Error ? e.message : String(e)}`,\n e,\n { operation: 'section' },\n 'The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.',\n ),\n )\n }\n}\n\n\n// ---------------------------------------------------------------------------\n// fuse — union two shapes (brepjs topology/booleanFns.ts#fuse)\n// ---------------------------------------------------------------------------\n\nconst FUSE_PARAMS = { name: 'fuse', params: ['a', 'b', 'options'], formClass: 'A' as FormClass }\n\n/**\n * Fuse (union) two shapes into one.\n * @param args - Resolved arguments (a, b).\n * @returns The fused shape as a `BrepHandle`.\n */\nexport function fuseBrep(...args: unknown[]): Result<BrepHandle> {\n const [a, b] = resolveArgs(args, FUSE_PARAMS)\n const kernel = getBrepApi()\n const ha = brepHandleOf(a)\n const hb = brepHandleOf(b)\n try {\n return ok(kernel.fuse(ha, hb))\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('FUSE_FAILED', `fuse failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// split — split a shape with tool(s) (brepjs topology/api.ts#split → booleanFns.split)\n// ---------------------------------------------------------------------------\n\nconst SPLIT_PARAMS = { name: 'split', params: ['shape', 'tools'], formClass: 'A' as FormClass }\n\n/**\n * Split a shape with one or more tool shapes.\n * @param args - Resolved arguments (shape, tools).\n * @returns The split result as a `BrepHandle`.\n */\nexport function splitBrep(...args: unknown[]): Result<BrepHandle> {\n const [shape, toolsRaw] = resolveArgs(args, SPLIT_PARAMS)\n const h = brepHandleOf(shape)\n const tools = (toolsRaw ?? []) as unknown[]\n if (tools.length === 0) return ok(h)\n const toolHandles = tools.map((t) => brepHandleOf(t))\n try {\n const result = getOcctKernel().split(h as never, toolHandles as never)\n return ok(result as unknown as BrepHandle)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(\n kernelError(\n 'SPLIT_FAILED',\n `Split operation failed on ${tools.length} tool(s): ${raw}`,\n e,\n { operation: 'split', toolCount: tools.length },\n ),\n )\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Semantics mirror
|
|
7
|
+
* Semantics mirror brepjs `operations/compoundOpsFns.ts` with the brepjs
|
|
8
8
|
* object model dropped:
|
|
9
9
|
* - `options.face` supports an omitted default (highest-Z face) or an already
|
|
10
10
|
* constructed brepjs Face (`{ wrapped }`); FinderFn (brepjs finder DSL) is
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Semantics mirror
|
|
7
|
+
* Semantics mirror brepjs `operations/compoundOpsFns.ts` with the brepjs
|
|
8
8
|
* object model dropped:
|
|
9
9
|
* - `options.face` supports an omitted default (highest-Z face) or an already
|
|
10
10
|
* constructed brepjs Face (`{ wrapped }`); FinderFn (brepjs finder DSL) is
|
|
@@ -24,7 +24,7 @@ const POCKET_PARAMS = { name: 'pocket', params: ['shape', 'options'], formClass:
|
|
|
24
24
|
const BOSS_PARAMS = { name: 'boss', params: ['shape', 'options'], formClass: 'A' };
|
|
25
25
|
const MIRROR_JOIN_PARAMS = { name: 'mirrorJoin', params: ['shape', 'options'], formClass: 'A' };
|
|
26
26
|
// ---------------------------------------------------------------------------
|
|
27
|
-
// Vec helpers (
|
|
27
|
+
// Vec helpers (brepjs vecOps)
|
|
28
28
|
// ---------------------------------------------------------------------------
|
|
29
29
|
function vecIsZero(v) {
|
|
30
30
|
return v[0] === 0 && v[1] === 0 && v[2] === 0;
|
|
@@ -75,7 +75,7 @@ function resolveTargetFace(kernel, shape, faceSpec) {
|
|
|
75
75
|
}
|
|
76
76
|
return err(validationError('COMPOUND_FACE_NOT_FOUND', 'compoundOps: face spec must be a brepjs Face handle or omitted'));
|
|
77
77
|
}
|
|
78
|
-
/** 面法向(uv 中心,
|
|
78
|
+
/** 面法向(uv 中心,brepjs normalAt)。 */
|
|
79
79
|
function faceNormalAt(kernel, face) {
|
|
80
80
|
const b = kernel.uvBounds(face);
|
|
81
81
|
const u = 0.5 * (b.uMin + b.uMax);
|
|
@@ -83,7 +83,7 @@ function faceNormalAt(kernel, face) {
|
|
|
83
83
|
const n = kernel.surfaceNormal(face, u, v);
|
|
84
84
|
return [n.x, n.y, n.z];
|
|
85
85
|
}
|
|
86
|
-
/** 面质心(
|
|
86
|
+
/** 面质心(brepjs faceCenter)。 */
|
|
87
87
|
function faceCenterAt(kernel, face) {
|
|
88
88
|
const c = kernel.surfaceCenterOfMass(face);
|
|
89
89
|
return [c.x, c.y, c.z];
|