@faicad/faijs 0.29.5 → 0.31.1
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/align/index.d.ts +64 -0
- package/dist/api/align/index.d.ts.map +1 -0
- package/dist/api/align/index.js +101 -0
- package/dist/api/align/index.js.map +1 -0
- package/dist/api/api-namespace.d.ts +6 -5
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +89 -5
- 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-op/index.d.ts +65 -0
- package/dist/api/boolean-op/index.d.ts.map +1 -0
- package/dist/api/boolean-op/index.js +113 -0
- package/dist/api/boolean-op/index.js.map +1 -0
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +22 -33
- 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 +91 -0
- package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
- package/dist/api/brep-operations/healingFns.js +321 -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 +111 -0
- package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
- package/dist/api/brep-operations/topologyFns.js +300 -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/chamfer.d.ts +5 -4
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +12 -11
- package/dist/api/chamfer.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 +493 -0
- package/dist/api/curve-sketch/index.js.map +1 -0
- package/dist/api/draft.d.ts.map +1 -1
- package/dist/api/draft.js +1 -3
- package/dist/api/draft.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +6 -15
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/export-3mf.d.ts +73 -0
- package/dist/api/export-3mf.d.ts.map +1 -0
- package/dist/api/export-3mf.js +121 -0
- package/dist/api/export-3mf.js.map +1 -0
- package/dist/api/export-brep.d.ts +47 -0
- package/dist/api/export-brep.d.ts.map +1 -0
- package/dist/api/export-brep.js +67 -0
- package/dist/api/export-brep.js.map +1 -0
- package/dist/api/export-step.d.ts +67 -0
- package/dist/api/export-step.d.ts.map +1 -0
- package/dist/api/export-step.js +98 -0
- package/dist/api/export-step.js.map +1 -0
- package/dist/api/export-stl.d.ts +58 -0
- package/dist/api/export-stl.d.ts.map +1 -0
- package/dist/api/export-stl.js +114 -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/feature-repair.d.ts +1 -1
- package/dist/api/feature-repair.d.ts.map +1 -1
- package/dist/api/feature-repair.js +1 -7
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +2 -2
- package/dist/api/fillet-variable.d.ts.map +1 -1
- package/dist/api/fillet-variable.js +2 -3
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +5 -7
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +5 -8
- 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 +58 -54
- 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/script-face-manifest.d.ts +1 -1
- package/dist/api/generated/script-face-manifest.js +3 -3
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/script-face.d.ts +1 -1
- package/dist/api/generated/script-face.js +1 -1
- package/dist/api/generated/script-face.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 +8 -4
- 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 +77 -73
- 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 +11 -2
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +20 -4
- package/dist/api/helix.js.map +1 -1
- package/dist/api/index.d.ts +19 -7
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +44 -11
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +10 -36
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +17 -51
- 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/export-members.d.ts +80 -0
- package/dist/api/internal/export-members.d.ts.map +1 -0
- package/dist/api/internal/export-members.js +104 -0
- package/dist/api/internal/export-members.js.map +1 -0
- package/dist/api/internal/l3-bridge.d.ts +22 -37
- package/dist/api/internal/l3-bridge.d.ts.map +1 -1
- package/dist/api/internal/l3-bridge.js +30 -77
- 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/measure-query/index.d.ts +262 -0
- package/dist/api/measure-query/index.d.ts.map +1 -0
- package/dist/api/measure-query/index.js +390 -0
- package/dist/api/measure-query/index.js.map +1 -0
- 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.d.ts.map +1 -1
- package/dist/api/pattern.js +3 -6
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/primitives.d.ts +6 -6
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +19 -17
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +0 -1
- package/dist/api/profile.js.map +1 -1
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js +0 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.d.ts +6 -8
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +27 -65
- 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/section-by-plane.d.ts.map +1 -1
- package/dist/api/section-by-plane.js +0 -1
- package/dist/api/section-by-plane.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.d.ts.map +1 -1
- package/dist/api/shell.js +12 -3
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +3 -3
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +6 -4
- 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 +0 -1
- package/dist/api/sketch-on-plane.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/split-by-plane.d.ts.map +1 -1
- package/dist/api/split-by-plane.js +0 -1
- package/dist/api/split-by-plane.js.map +1 -1
- package/dist/api/split.d.ts +1 -1
- package/dist/api/split.js +1 -1
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +37 -44
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +224 -233
- 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 +71 -9
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +13 -6
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts +1 -1
- package/dist/api/thicken.d.ts.map +1 -1
- package/dist/api/thicken.js +12 -3
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts +8 -8
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +58 -27
- 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/boolean/index.d.ts +23 -0
- package/dist/boolean/index.d.ts.map +1 -0
- package/dist/boolean/index.js +27 -0
- package/dist/boolean/index.js.map +1 -0
- package/dist/brep/brep-chain.d.ts +1 -19
- package/dist/brep/brep-chain.d.ts.map +1 -1
- package/dist/brep/brep-chain.js +0 -1
- package/dist/brep/brep-chain.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +93 -2
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +185 -15
- 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/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +0 -3
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts +4 -3
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +4 -98
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +4 -148
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/native-history.d.ts +27 -0
- package/dist/brep/engine/native-history.d.ts.map +1 -0
- package/dist/brep/engine/native-history.js +54 -0
- package/dist/brep/engine/native-history.js.map +1 -0
- 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 +3 -5
- package/dist/brep/engine/registry.d.ts.map +1 -1
- package/dist/brep/engine/registry.js +2 -2
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +35 -77
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/export-model.d.ts +21 -0
- package/dist/brep/export/export-model.d.ts.map +1 -1
- package/dist/brep/export/export-model.js +171 -73
- package/dist/brep/export/export-model.js.map +1 -1
- package/dist/brep/export/step.d.ts +17 -1
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +133 -0
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/export/stl.d.ts +22 -1
- package/dist/brep/export/stl.d.ts.map +1 -1
- package/dist/brep/export/stl.js +58 -10
- package/dist/brep/export/stl.js.map +1 -1
- package/dist/brep/export/transform12.d.ts +47 -0
- package/dist/brep/export/transform12.d.ts.map +1 -0
- package/dist/brep/export/transform12.js +87 -0
- package/dist/brep/export/transform12.js.map +1 -0
- package/dist/brep/face-evolution.d.ts +53 -0
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +65 -0
- package/dist/brep/face-evolution.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-host/index.d.ts +4 -1
- package/dist/browser-host/index.d.ts.map +1 -1
- package/dist/browser-host/index.js +7 -1
- package/dist/browser-host/index.js.map +1 -1
- package/dist/browser.d.ts +5 -9
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -26
- 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.d.ts +13 -58
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +34 -83
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/content-key.d.ts +3 -3
- package/dist/cad-runtime/content-key.js +3 -3
- package/dist/cad-runtime/content-key.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 +31 -3
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +54 -19
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +89 -54
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +10 -14
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +5 -22
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +2 -2
- package/dist/env-agnostic.d.ts.map +1 -1
- package/dist/env-agnostic.js +1 -1
- package/dist/env-agnostic.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 +14 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -70
- 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 +53 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +53 -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 -63
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +19 -72
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +62 -17
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +210 -41
- 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 +52 -5
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +139 -41
- 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 +35 -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 +56 -0
- package/dist/node-host/execute-script.d.ts.map +1 -0
- package/dist/node-host/execute-script.js +47 -0
- package/dist/node-host/execute-script.js.map +1 -0
- package/dist/node-host/index.d.ts +1 -0
- package/dist/node-host/index.d.ts.map +1 -1
- package/dist/node-host/index.js +4 -0
- package/dist/node-host/index.js.map +1 -1
- 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/primitives/index.d.ts +19 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +21 -0
- package/dist/primitives/index.js.map +1 -0
- 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 +79 -29
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +84 -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/sdf/index.d.ts +12 -0
- package/dist/sdf/index.d.ts.map +1 -0
- package/dist/sdf/index.js +13 -0
- package/dist/sdf/index.js.map +1 -0
- package/dist/sdk.d.ts +0 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js.map +1 -1
- 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 +3 -3
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +2 -2
- package/dist/weapp.js.map +1 -1
- package/package.json +283 -44
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure vector operations on Vec3 tuples.
|
|
3
|
+
*
|
|
4
|
+
* 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs
|
|
5
|
+
* `src/core/vecOps.ts`(同源复制,签名不变);import 来源改为 compat 面
|
|
6
|
+
* 第一方 `types.ts`。
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Arithmetic
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/** Add two 3D vectors component-wise.
|
|
12
|
+
*
|
|
13
|
+
* @param a - First vector.
|
|
14
|
+
* @param b - Second vector.
|
|
15
|
+
* @returns The component-wise sum `a + b`.
|
|
16
|
+
*/
|
|
17
|
+
export function vecAdd(a, b) {
|
|
18
|
+
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
19
|
+
}
|
|
20
|
+
/** Subtract vector `b` from vector `a` component-wise.
|
|
21
|
+
*
|
|
22
|
+
* @param a - Vector to subtract from.
|
|
23
|
+
* @param b - Vector to subtract.
|
|
24
|
+
* @returns The component-wise difference `a - b`.
|
|
25
|
+
*/
|
|
26
|
+
export function vecSub(a, b) {
|
|
27
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
28
|
+
}
|
|
29
|
+
/** Multiply each component of a 3D vector by a scalar.
|
|
30
|
+
*
|
|
31
|
+
* @param v - Vector to scale.
|
|
32
|
+
* @param s - Scalar multiplier.
|
|
33
|
+
* @returns The scaled vector.
|
|
34
|
+
*/
|
|
35
|
+
export function vecScale(v, s) {
|
|
36
|
+
return [v[0] * s, v[1] * s, v[2] * s];
|
|
37
|
+
}
|
|
38
|
+
/** Negate all components of a 3D vector.
|
|
39
|
+
*
|
|
40
|
+
* @param v - Vector to negate.
|
|
41
|
+
* @returns The negated vector `-v`.
|
|
42
|
+
*/
|
|
43
|
+
export function vecNegate(v) {
|
|
44
|
+
return [-v[0], -v[1], -v[2]];
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Products
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/** Compute the dot product of two 3D vectors.
|
|
50
|
+
*
|
|
51
|
+
* @param a - First vector.
|
|
52
|
+
* @param b - Second vector.
|
|
53
|
+
* @returns The scalar dot product `a · b`.
|
|
54
|
+
*/
|
|
55
|
+
export function vecDot(a, b) {
|
|
56
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
57
|
+
}
|
|
58
|
+
/** Compute the cross product of two 3D vectors.
|
|
59
|
+
*
|
|
60
|
+
* @param a - First vector.
|
|
61
|
+
* @param b - Second vector.
|
|
62
|
+
* @returns The cross product `a × b`.
|
|
63
|
+
*/
|
|
64
|
+
export function vecCross(a, b) {
|
|
65
|
+
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]];
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Length / distance
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
/** Compute the Euclidean length of a 3D vector.
|
|
71
|
+
*
|
|
72
|
+
* @param v - Vector to measure.
|
|
73
|
+
* @returns The Euclidean length of `v`.
|
|
74
|
+
*/
|
|
75
|
+
export function vecLength(v) {
|
|
76
|
+
return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
|
77
|
+
}
|
|
78
|
+
/** Compute the squared length of a 3D vector (avoids a sqrt).
|
|
79
|
+
*
|
|
80
|
+
* @param v - Vector to measure.
|
|
81
|
+
* @returns The squared Euclidean length of `v`.
|
|
82
|
+
*/
|
|
83
|
+
export function vecLengthSq(v) {
|
|
84
|
+
return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
|
|
85
|
+
}
|
|
86
|
+
/** Compute the Euclidean distance between two 3D points.
|
|
87
|
+
*
|
|
88
|
+
* @param a - First point.
|
|
89
|
+
* @param b - Second point.
|
|
90
|
+
* @returns The distance `|a - b|`.
|
|
91
|
+
*/
|
|
92
|
+
export function vecDistance(a, b) {
|
|
93
|
+
return vecLength(vecSub(a, b));
|
|
94
|
+
}
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
// Normalization
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
/** Return a unit-length vector in the same direction, or `[0,0,0]` for near-zero input.
|
|
99
|
+
*
|
|
100
|
+
* @param v - Vector to normalize.
|
|
101
|
+
* @returns A unit-length vector in the same direction, or `[0,0,0]`.
|
|
102
|
+
*/
|
|
103
|
+
export function vecNormalize(v) {
|
|
104
|
+
const len = vecLength(v);
|
|
105
|
+
if (len < 1e-10)
|
|
106
|
+
return [0, 0, 0];
|
|
107
|
+
return [v[0] / len, v[1] / len, v[2] / len];
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Comparison
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/**
|
|
113
|
+
* Test whether two 3D vectors are approximately equal.
|
|
114
|
+
*
|
|
115
|
+
* @param a - First vector.
|
|
116
|
+
* @param b - Second vector.
|
|
117
|
+
* @param tolerance - Per-component absolute tolerance.
|
|
118
|
+
* @returns True if the vectors are approximately equal.
|
|
119
|
+
* @default tolerance `1e-5`
|
|
120
|
+
*/
|
|
121
|
+
export function vecEquals(a, b, tolerance = 1e-5) {
|
|
122
|
+
return (Math.abs(a[0] - b[0]) < tolerance &&
|
|
123
|
+
Math.abs(a[1] - b[1]) < tolerance &&
|
|
124
|
+
Math.abs(a[2] - b[2]) < tolerance);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Test whether a 3D vector is approximately zero-length.
|
|
128
|
+
*
|
|
129
|
+
* @param v - Vector to test.
|
|
130
|
+
* @param tolerance - Length threshold below which the vector is considered zero.
|
|
131
|
+
* @returns True if the vector is approximately zero-length.
|
|
132
|
+
* @default tolerance `1e-10`
|
|
133
|
+
*/
|
|
134
|
+
export function vecIsZero(v, tolerance = 1e-10) {
|
|
135
|
+
return vecLengthSq(v) < tolerance * tolerance;
|
|
136
|
+
}
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
// Geometry
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Compute the unsigned angle between two 3D vectors in **radians**.
|
|
142
|
+
*
|
|
143
|
+
* @param a - First vector.
|
|
144
|
+
* @param b - Second vector.
|
|
145
|
+
* @returns Angle in `[0, PI]`, or `0` if either vector is zero-length.
|
|
146
|
+
*/
|
|
147
|
+
export function vecAngle(a, b) {
|
|
148
|
+
const dot = vecDot(a, b);
|
|
149
|
+
const lenA = vecLength(a);
|
|
150
|
+
const lenB = vecLength(b);
|
|
151
|
+
if (lenA < 1e-10 || lenB < 1e-10)
|
|
152
|
+
return 0;
|
|
153
|
+
const cosAngle = Math.max(-1, Math.min(1, dot / (lenA * lenB)));
|
|
154
|
+
return Math.acos(cosAngle);
|
|
155
|
+
}
|
|
156
|
+
/** Project vector onto plane defined by its normal
|
|
157
|
+
*
|
|
158
|
+
* @param v - Vector to project.
|
|
159
|
+
* @param planeOrigin - A point on the plane.
|
|
160
|
+
* @param planeNormal - Plane normal (need not be unit length).
|
|
161
|
+
* @returns The projection of `v` onto the plane.
|
|
162
|
+
*/
|
|
163
|
+
export function vecProjectToPlane(v, planeOrigin, planeNormal) {
|
|
164
|
+
const relative = vecSub(v, planeOrigin);
|
|
165
|
+
const normalLen = vecLengthSq(planeNormal);
|
|
166
|
+
if (normalLen < 1e-20)
|
|
167
|
+
return v;
|
|
168
|
+
const projection = vecScale(planeNormal, vecDot(relative, planeNormal) / normalLen);
|
|
169
|
+
return vecSub(v, projection);
|
|
170
|
+
}
|
|
171
|
+
/** Rotate vector around an axis by angle (radians)
|
|
172
|
+
*
|
|
173
|
+
* @param v - Vector to rotate.
|
|
174
|
+
* @param axis - Rotation axis (need not be unit length).
|
|
175
|
+
* @param angleRad - Rotation angle in radians.
|
|
176
|
+
* @returns The rotated vector.
|
|
177
|
+
*/
|
|
178
|
+
export function vecRotate(v, axis, angleRad) {
|
|
179
|
+
const n = vecNormalize(axis);
|
|
180
|
+
const cos = Math.cos(angleRad);
|
|
181
|
+
const sin = Math.sin(angleRad);
|
|
182
|
+
const dot = vecDot(v, n);
|
|
183
|
+
const cross = vecCross(n, v);
|
|
184
|
+
return [
|
|
185
|
+
v[0] * cos + cross[0] * sin + n[0] * dot * (1 - cos),
|
|
186
|
+
v[1] * cos + cross[1] * sin + n[1] * dot * (1 - cos),
|
|
187
|
+
v[2] * cos + cross[2] * sin + n[2] * dot * (1 - cos),
|
|
188
|
+
];
|
|
189
|
+
}
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
// Formatting
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
const round3 = (v) => Math.round(v * 1000) / 1000;
|
|
194
|
+
/** Format a Vec3 as a human-readable string rounded to 3 decimal places.
|
|
195
|
+
*
|
|
196
|
+
* @param v - Vector to format.
|
|
197
|
+
* @returns A human-readable representation of `v`.
|
|
198
|
+
*/
|
|
199
|
+
export function vecRepr(v) {
|
|
200
|
+
return `x: ${round3(v[0])}, y: ${round3(v[1])}, z: ${round3(v[2])}`;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=vecOps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vecOps.js","sourceRoot":"","sources":["../../../src/api/geom-types/vecOps.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure vector operations on Vec3 tuples.\n *\n * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs\n * `src/core/vecOps.ts`(同源复制,签名不变);import 来源改为 compat 面\n * 第一方 `types.ts`。\n */\n\nimport type { Vec3 } from './types';\n\n// ---------------------------------------------------------------------------\n// Arithmetic\n// ---------------------------------------------------------------------------\n\n/** Add two 3D vectors component-wise.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The component-wise sum `a + b`.\n */\nexport function vecAdd(a: Vec3, b: Vec3): Vec3 {\n return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];\n}\n\n/** Subtract vector `b` from vector `a` component-wise.\n *\n * @param a - Vector to subtract from.\n * @param b - Vector to subtract.\n * @returns The component-wise difference `a - b`.\n */\nexport function vecSub(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\n/** Multiply each component of a 3D vector by a scalar.\n *\n * @param v - Vector to scale.\n * @param s - Scalar multiplier.\n * @returns The scaled vector.\n */\nexport function vecScale(v: Vec3, s: number): Vec3 {\n return [v[0] * s, v[1] * s, v[2] * s];\n}\n\n/** Negate all components of a 3D vector.\n *\n * @param v - Vector to negate.\n * @returns The negated vector `-v`.\n */\nexport function vecNegate(v: Vec3): Vec3 {\n return [-v[0], -v[1], -v[2]];\n}\n\n// ---------------------------------------------------------------------------\n// Products\n// ---------------------------------------------------------------------------\n\n/** Compute the dot product of two 3D vectors.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The scalar dot product `a · b`.\n */\nexport function vecDot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/** Compute the cross product of two 3D vectors.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The cross product `a × b`.\n */\nexport function vecCross(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// ---------------------------------------------------------------------------\n// Length / distance\n// ---------------------------------------------------------------------------\n\n/** Compute the Euclidean length of a 3D vector.\n *\n * @param v - Vector to measure.\n * @returns The Euclidean length of `v`.\n */\nexport function vecLength(v: Vec3): number {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n}\n\n/** Compute the squared length of a 3D vector (avoids a sqrt).\n *\n * @param v - Vector to measure.\n * @returns The squared Euclidean length of `v`.\n */\nexport function vecLengthSq(v: Vec3): number {\n return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];\n}\n\n/** Compute the Euclidean distance between two 3D points.\n *\n * @param a - First point.\n * @param b - Second point.\n * @returns The distance `|a - b|`.\n */\nexport function vecDistance(a: Vec3, b: Vec3): number {\n return vecLength(vecSub(a, b));\n}\n\n// ---------------------------------------------------------------------------\n// Normalization\n// ---------------------------------------------------------------------------\n\n/** Return a unit-length vector in the same direction, or `[0,0,0]` for near-zero input.\n *\n * @param v - Vector to normalize.\n * @returns A unit-length vector in the same direction, or `[0,0,0]`.\n */\nexport function vecNormalize(v: Vec3): Vec3 {\n const len = vecLength(v);\n if (len < 1e-10) return [0, 0, 0];\n return [v[0] / len, v[1] / len, v[2] / len];\n}\n\n// ---------------------------------------------------------------------------\n// Comparison\n// ---------------------------------------------------------------------------\n\n/**\n * Test whether two 3D vectors are approximately equal.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @param tolerance - Per-component absolute tolerance.\n * @returns True if the vectors are approximately equal.\n * @default tolerance `1e-5`\n */\nexport function vecEquals(a: Vec3, b: Vec3, tolerance = 1e-5): boolean {\n return (\n Math.abs(a[0] - b[0]) < tolerance &&\n Math.abs(a[1] - b[1]) < tolerance &&\n Math.abs(a[2] - b[2]) < tolerance\n );\n}\n\n/**\n * Test whether a 3D vector is approximately zero-length.\n *\n * @param v - Vector to test.\n * @param tolerance - Length threshold below which the vector is considered zero.\n * @returns True if the vector is approximately zero-length.\n * @default tolerance `1e-10`\n */\nexport function vecIsZero(v: Vec3, tolerance = 1e-10): boolean {\n return vecLengthSq(v) < tolerance * tolerance;\n}\n\n// ---------------------------------------------------------------------------\n// Geometry\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the unsigned angle between two 3D vectors in **radians**.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns Angle in `[0, PI]`, or `0` if either vector is zero-length.\n */\nexport function vecAngle(a: Vec3, b: Vec3): number {\n const dot = vecDot(a, b);\n const lenA = vecLength(a);\n const lenB = vecLength(b);\n if (lenA < 1e-10 || lenB < 1e-10) return 0;\n const cosAngle = Math.max(-1, Math.min(1, dot / (lenA * lenB)));\n return Math.acos(cosAngle);\n}\n\n/** Project vector onto plane defined by its normal\n *\n * @param v - Vector to project.\n * @param planeOrigin - A point on the plane.\n * @param planeNormal - Plane normal (need not be unit length).\n * @returns The projection of `v` onto the plane.\n */\nexport function vecProjectToPlane(v: Vec3, planeOrigin: Vec3, planeNormal: Vec3): Vec3 {\n const relative = vecSub(v, planeOrigin);\n const normalLen = vecLengthSq(planeNormal);\n if (normalLen < 1e-20) return v;\n const projection = vecScale(planeNormal, vecDot(relative, planeNormal) / normalLen);\n return vecSub(v, projection);\n}\n\n/** Rotate vector around an axis by angle (radians)\n *\n * @param v - Vector to rotate.\n * @param axis - Rotation axis (need not be unit length).\n * @param angleRad - Rotation angle in radians.\n * @returns The rotated vector.\n */\nexport function vecRotate(v: Vec3, axis: Vec3, angleRad: number): Vec3 {\n const n = vecNormalize(axis);\n const cos = Math.cos(angleRad);\n const sin = Math.sin(angleRad);\n const dot = vecDot(v, n);\n const cross = vecCross(n, v);\n\n return [\n v[0] * cos + cross[0] * sin + n[0] * dot * (1 - cos),\n v[1] * cos + cross[1] * sin + n[1] * dot * (1 - cos),\n v[2] * cos + cross[2] * sin + n[2] * dot * (1 - cos),\n ];\n}\n\n// ---------------------------------------------------------------------------\n// Formatting\n// ---------------------------------------------------------------------------\n\nconst round3 = (v: number): number => Math.round(v * 1000) / 1000;\n\n/** Format a Vec3 as a human-readable string rounded to 3 decimal places.\n *\n * @param v - Vector to format.\n * @returns A human-readable representation of `v`.\n */\nexport function vecRepr(v: Vec3): string {\n return `x: ${round3(v[0])}, y: ${round3(v[1])}, z: ${round3(v[2])}`;\n}\n"]}
|
package/dist/api/geom.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geom.d.ts","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"geom.d.ts","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAuDhD;;;;;;;;;;;;;IAaI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC"}
|
package/dist/api/geom.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* 优先 → anchor 几何反查(兜底)→ 报错
|
|
9
9
|
* - bboxCenter/bboxMin/bboxMax:mesh 包围盒查询
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.
|
|
12
|
+
import * as meshQuery from '../mesh/query.js';
|
|
12
13
|
import { getBrepApi } from '../brep/handle-bridge.js';
|
|
13
14
|
import { brepOf } from '../shape.js';
|
|
14
15
|
/** 内部实现:faceNormal 专用——faceOrdinal+BREP 优先 → anchor 反查 → 报错(逻辑迁移自 resolveGeomRef)。 */
|
|
@@ -51,7 +52,7 @@ function geomQuery(of, anchor, faceOrdinal) {
|
|
|
51
52
|
if (!anchor) {
|
|
52
53
|
throw new Error('[GeomRef] faceNormal requires anchor or faceOrdinal');
|
|
53
54
|
}
|
|
54
|
-
const face =
|
|
55
|
+
const face = meshQuery.faceAt(of, { point: anchor });
|
|
55
56
|
if (!face) {
|
|
56
57
|
throw new Error(`[GeomRef] faceAt failed for anchor at ${anchor}`);
|
|
57
58
|
}
|
|
@@ -87,7 +88,7 @@ export function faceNormal(of, anchor, ordinal) {
|
|
|
87
88
|
* const c = cad.bboxCenter(part0)
|
|
88
89
|
*/
|
|
89
90
|
export function bboxCenter(of) {
|
|
90
|
-
return
|
|
91
|
+
return meshQuery.bboxCenter(of);
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
94
|
* 查询几何包围盒最小角点。
|
|
@@ -102,7 +103,7 @@ export function bboxCenter(of) {
|
|
|
102
103
|
* const mn = cad.bboxMin(part0)
|
|
103
104
|
*/
|
|
104
105
|
export function bboxMin(of) {
|
|
105
|
-
return
|
|
106
|
+
return meshQuery.boundingBox(of).min;
|
|
106
107
|
}
|
|
107
108
|
/**
|
|
108
109
|
* 查询几何包围盒最大角点。
|
|
@@ -117,6 +118,6 @@ export function bboxMin(of) {
|
|
|
117
118
|
* const mx = cad.bboxMax(part0)
|
|
118
119
|
*/
|
|
119
120
|
export function bboxMax(of) {
|
|
120
|
-
return
|
|
121
|
+
return meshQuery.boundingBox(of).max;
|
|
121
122
|
}
|
|
122
123
|
//# sourceMappingURL=geom.js.map
|
package/dist/api/geom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geom.js","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"geom.js","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api geom — $geom 查询函数族(有形签名)\n *\n *\n * `cad.<feature>(of, anchor?, ordinal?)`:\n * - of 是 Shape(编译产物 `ctx.<var>` 引用),非变量名\n * - faceNormal:faceOrdinal + brepOf(of) + kernel(拓扑引用)\n * 优先 → anchor 几何反查(兜底)→ 报错\n * - bboxCenter/bboxMin/bboxMax:mesh 包围盒查询\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\n// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.\nimport * as meshQuery from '../mesh/query'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 内部实现:faceNormal 专用——faceOrdinal+BREP 优先 → anchor 反查 → 报错(逻辑迁移自 resolveGeomRef)。 */\nfunction geomQuery(\n of: Shape,\n anchor: Vec3 | undefined,\n faceOrdinal: number | undefined,\n): Vec3 {\n // 优先路径:faceOrdinal 拓扑引用(BREP 路径)\n if (faceOrdinal !== undefined) {\n const solid = brepOf(of) as BrepHandle | undefined\n const kernel = getBrepApi()\n if (solid && kernel) {\n try {\n const faces = kernel.getSubShapes(solid, 'face')\n if (faceOrdinal < faces.length) {\n const face = faces[faceOrdinal]\n // 面法向:用 surfaceNormal 在 (0.5, 0.5) 处取\n let normal: Vec3 = [0, 0, 1]\n try {\n const n = kernel.surfaceNormal(face, 0.5, 0.5)\n normal = [n.x, n.y, n.z]\n } catch {\n // surfaceNormal 可能对某些面失败,用默认法向\n }\n kernel.release(face)\n for (let i = 0; i < faces.length; i++) {\n if (i !== faceOrdinal) kernel.release(faces[i])\n }\n return normal\n }\n // ordinal 越界 → 释放并降级到 anchor\n for (const f of faces) kernel.release(f)\n } catch {\n // BREP 取面失败 → 降级到 anchor\n }\n }\n }\n\n // 兜底路径:anchor 几何反查\n if (!anchor) {\n throw new Error('[GeomRef] faceNormal requires anchor or faceOrdinal')\n }\n const face = meshQuery.faceAt(of, { point: anchor })\n if (!face) {\n throw new Error(`[GeomRef] faceAt failed for anchor at ${anchor}`)\n }\n return face.normal\n}\n\n/**\n * 查询面上某点(锚点)的法向。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name faceNormal\n * @returns Vec3 面上锚点处的法向 [x,y,z]。\n * @param of - 目标几何(编译产物 ctx.<var> 引用)。type:Shape required:true\n * @param anchor - 锚点(几何反查兜底)。type:[x,y,z]\n * @param ordinal - 面序号(BREP 拓扑引用优先)。type:number\n * @example\n * const n = cad.faceNormal(part0, [0, 0, 5])\n */\nexport function faceNormal(of: Shape, anchor?: Vec3, ordinal?: number): Vec3 {\n return geomQuery(of, anchor, ordinal)\n}\n\n/**\n * 查询几何包围盒中心。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxCenter\n * @returns Vec3 包围盒中心 [x,y,z]。交互式可编辑(参数量引用)。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const c = cad.bboxCenter(part0)\n */\nexport function bboxCenter(of: Shape): Vec3 {\n return meshQuery.bboxCenter(of)\n}\n\n/**\n * 查询几何包围盒最小角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMin\n * @returns Vec3 包围盒最小角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mn = cad.bboxMin(part0)\n */\nexport function bboxMin(of: Shape): Vec3 {\n return meshQuery.boundingBox(of).min\n}\n\n/**\n * 查询几何包围盒最大角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMax\n * @returns Vec3 包围盒最大角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mx = cad.bboxMax(part0)\n */\nexport function bboxMax(of: Shape): Vec3 {\n return meshQuery.boundingBox(of).max\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api halfSpace — 无限半空间实体(平台 op engines:['occt'])
|
|
3
|
+
*
|
|
4
|
+
* @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,
|
|
5
|
+
* L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明
|
|
6
|
+
* `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方
|
|
7
|
+
* op 声明 `engines` 由守卫 ② 校验。
|
|
8
|
+
*
|
|
9
|
+
* 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):
|
|
10
|
+
* 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化
|
|
11
|
+
* 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。
|
|
12
|
+
* 它唯一的用途是**作无界布尔工具**:
|
|
13
|
+
* `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。
|
|
14
|
+
*
|
|
15
|
+
* 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。
|
|
16
|
+
* 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。
|
|
17
|
+
*
|
|
18
|
+
* 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason
|
|
19
|
+
* (方案 §4.2 表列此项)。
|
|
20
|
+
*
|
|
21
|
+
* 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面
|
|
22
|
+
* 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——
|
|
23
|
+
* `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。
|
|
24
|
+
*/
|
|
25
|
+
import type { Shape } from '../mesh/types.js';
|
|
26
|
+
type Vec3 = [number, number, number];
|
|
27
|
+
/** `cad.halfSpace` 参数。 */
|
|
28
|
+
export interface HalfSpaceParams {
|
|
29
|
+
/** 边界平面上的一点 `[x, y, z]`(mm)。半空间从该平面沿 `normal` 方向张开。 */
|
|
30
|
+
origin: Vec3;
|
|
31
|
+
/** 边界平面法向 `[x, y, z]`(不必单位化;零向量非法)。保留侧 = 法向所指一侧。 */
|
|
32
|
+
normal: Vec3;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 构造无限半空间实体(无界布尔工具)。
|
|
36
|
+
* @group 创建
|
|
37
|
+
* @inputs 0
|
|
38
|
+
* @async false
|
|
39
|
+
* @qual ok
|
|
40
|
+
* @name halfSpace
|
|
41
|
+
* @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎
|
|
42
|
+
* 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可
|
|
43
|
+
* 离散),单独渲染无意义,用法是喂给布尔 op 作工具
|
|
44
|
+
* (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。
|
|
45
|
+
* @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。
|
|
46
|
+
* @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true
|
|
47
|
+
* @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true
|
|
48
|
+
* @example
|
|
49
|
+
* const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })
|
|
50
|
+
* const lower = cad.cut(part0, half)
|
|
51
|
+
*/
|
|
52
|
+
export declare const halfSpace: ((params: HalfSpaceParams) => Promise<Shape>) & {
|
|
53
|
+
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=half-space.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"half-space.d.ts","sourceRoot":"","sources":["../../src/api/half-space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpC,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,MAAM,EAAE,IAAI,CAAA;IACZ,oDAAoD;IACpD,MAAM,EAAE,IAAI,CAAA;CACb;AA4BD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS;;CAWpB,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api halfSpace — 无限半空间实体(平台 op engines:['occt'])
|
|
3
|
+
*
|
|
4
|
+
* @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,
|
|
5
|
+
* L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明
|
|
6
|
+
* `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方
|
|
7
|
+
* op 声明 `engines` 由守卫 ② 校验。
|
|
8
|
+
*
|
|
9
|
+
* 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):
|
|
10
|
+
* 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化
|
|
11
|
+
* 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。
|
|
12
|
+
* 它唯一的用途是**作无界布尔工具**:
|
|
13
|
+
* `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。
|
|
14
|
+
*
|
|
15
|
+
* 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。
|
|
16
|
+
* 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。
|
|
17
|
+
*
|
|
18
|
+
* 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason
|
|
19
|
+
* (方案 §4.2 表列此项)。
|
|
20
|
+
*
|
|
21
|
+
* 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面
|
|
22
|
+
* 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——
|
|
23
|
+
* `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。
|
|
24
|
+
*/
|
|
25
|
+
import { solidToShape } from '../brep/brep-ops.js';
|
|
26
|
+
import { getBrepApi } from '../brep/handle-bridge.js';
|
|
27
|
+
import { fromBrep } from '../shape.js';
|
|
28
|
+
import { defineOp } from '../sdk.js';
|
|
29
|
+
import { getOcctKernel } from '../occt-kernel/occtKernel.js';
|
|
30
|
+
/** 元组 → BrepVec3 对象(同 sectionByPlane:L1/原生向量形参是 {x,y,z} 对象)。 */
|
|
31
|
+
function toVec3(v, which) {
|
|
32
|
+
if (!Array.isArray(v) ||
|
|
33
|
+
v.length !== 3 ||
|
|
34
|
+
v.some((n) => typeof n !== 'number' || !Number.isFinite(n))) {
|
|
35
|
+
throw new Error(`E_HALF_SPACE_BAD_${which.toUpperCase()}: ${which} must be [x,y,z] finite numbers`);
|
|
36
|
+
}
|
|
37
|
+
if (which === 'normal' && v[0] === 0 && v[1] === 0 && v[2] === 0) {
|
|
38
|
+
throw new Error('E_HALF_SPACE_BAD_NORMAL: normal must be a non-zero vector (it defines the plane)');
|
|
39
|
+
}
|
|
40
|
+
return { x: v[0], y: v[1], z: v[2] };
|
|
41
|
+
}
|
|
42
|
+
/** BREP 路径:occt 原生 halfSpace → 无界实体(空 mesh)经 fromBrep 收养句柄。 */
|
|
43
|
+
function halfSpaceBrep(params) {
|
|
44
|
+
const { origin, normal } = params ?? {};
|
|
45
|
+
const o = toVec3(origin, 'origin');
|
|
46
|
+
const n = toVec3(normal, 'normal');
|
|
47
|
+
const kernel = getBrepApi();
|
|
48
|
+
// 实测(探针 A):无限半空间可被 `meshShape` 三角化,不抛错,产出空面载荷。
|
|
49
|
+
const handle = getOcctKernel().halfSpace(o, n);
|
|
50
|
+
return fromBrep(solidToShape(kernel, handle), { solid: handle });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 构造无限半空间实体(无界布尔工具)。
|
|
54
|
+
* @group 创建
|
|
55
|
+
* @inputs 0
|
|
56
|
+
* @async false
|
|
57
|
+
* @qual ok
|
|
58
|
+
* @name halfSpace
|
|
59
|
+
* @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎
|
|
60
|
+
* 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可
|
|
61
|
+
* 离散),单独渲染无意义,用法是喂给布尔 op 作工具
|
|
62
|
+
* (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。
|
|
63
|
+
* @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。
|
|
64
|
+
* @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true
|
|
65
|
+
* @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true
|
|
66
|
+
* @example
|
|
67
|
+
* const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })
|
|
68
|
+
* const lower = cad.cut(part0, half)
|
|
69
|
+
*/
|
|
70
|
+
export const halfSpace = defineOp({
|
|
71
|
+
name: 'halfSpace',
|
|
72
|
+
paramDims: { 'params.origin': 'length', 'params.normal': 'length' },
|
|
73
|
+
brep(params) {
|
|
74
|
+
return halfSpaceBrep(params);
|
|
75
|
+
},
|
|
76
|
+
engines: ['occt'],
|
|
77
|
+
naming: {
|
|
78
|
+
kind: 'unmodeled',
|
|
79
|
+
reason: 'unbounded half-space has no source-derived face role vocabulary',
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=half-space.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"half-space.js","sourceRoot":"","sources":["../../src/api/half-space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAYzD,gEAAgE;AAChE,SAAS,MAAM,CAAC,CAAO,EAAE,KAA0B;IACjD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,iCAAiC,CAAC,CAAA;IACrG,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACtC,CAAC;AAED,+DAA+D;AAC/D,SAAS,aAAa,CAAC,MAAuB;IAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAK,EAAsB,CAAA;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,+CAA+C;IAC/C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAA0B,CAAA;IACvE,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAU,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;IACnE,IAAI,CAAC,MAAuB;QAC1B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,iEAAiE;KAC5D;CAChB,CAAC,CAAA","sourcesContent":["/**\n * api halfSpace — 无限半空间实体(平台 op engines:['occt'])\n *\n * @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,\n * L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明\n * `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方\n * op 声明 `engines` 由守卫 ② 校验。\n *\n * 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):\n * 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化\n * 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。\n * 它唯一的用途是**作无界布尔工具**:\n * `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。\n *\n * 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。\n * 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。\n *\n * 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason\n * (方案 §4.2 表列此项)。\n *\n * 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面\n * 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——\n * `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport type { BrepHandle, BrepVec3 } from '../brep/engine/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\n\ntype Vec3 = [number, number, number]\n\n/** `cad.halfSpace` 参数。 */\nexport interface HalfSpaceParams {\n /** 边界平面上的一点 `[x, y, z]`(mm)。半空间从该平面沿 `normal` 方向张开。 */\n origin: Vec3\n /** 边界平面法向 `[x, y, z]`(不必单位化;零向量非法)。保留侧 = 法向所指一侧。 */\n normal: Vec3\n}\n\n/** 元组 → BrepVec3 对象(同 sectionByPlane:L1/原生向量形参是 {x,y,z} 对象)。 */\nfunction toVec3(v: Vec3, which: 'origin' | 'normal'): BrepVec3 {\n if (\n !Array.isArray(v) ||\n v.length !== 3 ||\n v.some((n) => typeof n !== 'number' || !Number.isFinite(n))\n ) {\n throw new Error(`E_HALF_SPACE_BAD_${which.toUpperCase()}: ${which} must be [x,y,z] finite numbers`)\n }\n if (which === 'normal' && v[0] === 0 && v[1] === 0 && v[2] === 0) {\n throw new Error('E_HALF_SPACE_BAD_NORMAL: normal must be a non-zero vector (it defines the plane)')\n }\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/** BREP 路径:occt 原生 halfSpace → 无界实体(空 mesh)经 fromBrep 收养句柄。 */\nfunction halfSpaceBrep(params: HalfSpaceParams): Shape {\n const { origin, normal } = params ?? ({} as HalfSpaceParams)\n const o = toVec3(origin, 'origin')\n const n = toVec3(normal, 'normal')\n const kernel = getBrepApi()\n // 实测(探针 A):无限半空间可被 `meshShape` 三角化,不抛错,产出空面载荷。\n const handle = getOcctKernel().halfSpace(o, n) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, handle), { solid: handle }) as Shape\n}\n\n/**\n * 构造无限半空间实体(无界布尔工具)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name halfSpace\n * @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎\n * 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可\n * 离散),单独渲染无意义,用法是喂给布尔 op 作工具\n * (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。\n * @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。\n * @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true\n * @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true\n * @example\n * const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })\n * const lower = cad.cut(part0, half)\n */\nexport const halfSpace = defineOp({\n name: 'halfSpace',\n paramDims: { 'params.origin': 'length', 'params.normal': 'length' },\n brep(params: HalfSpaceParams) {\n return halfSpaceBrep(params)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'unbounded half-space has no source-derived face role vocabulary',\n } as Provenance,\n})\n"]}
|
package/dist/api/helix.d.ts
CHANGED
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 设计:
|
|
11
11
|
* - 平台 op:occt 原生 makeHelixWire(occt-wasm 有,L1 无)→ 声明 engines:['occt'](D11)。
|
|
12
|
-
*
|
|
12
|
+
* 实现直连平台原生方法,能力由引擎身份本身界定(无第二个声明轴)。
|
|
13
13
|
* - 1D 产物:经 fromBrepCurve 登记,kind='curve'。
|
|
14
14
|
* - 非 occt 引擎(brepkit)→ 执行前 BrepUnsupportedError(D11-4);brep_mock 受 D11-3
|
|
15
15
|
* 豁免不拦截(且 getOcctKernel 为全局 occt 实例,brep_mock 下仍可真实出线)。
|
|
16
16
|
*/
|
|
17
17
|
import type { Shape } from '../mesh/types.js';
|
|
18
|
+
/** 螺旋手性:`'right'`(右手,逆时针上旋)或 `'left'`(左手,顺时针上旋)。 */
|
|
19
|
+
export type HelixHanded = 'right' | 'left';
|
|
18
20
|
/** `cad.helix` 参数。 */
|
|
19
21
|
export interface HelixOptions {
|
|
20
22
|
/** 螺旋半径(mm,>0)。 */
|
|
@@ -27,6 +29,11 @@ export interface HelixOptions {
|
|
|
27
29
|
axis?: [number, number, number];
|
|
28
30
|
/** 起点(默认原点)。 */
|
|
29
31
|
origin?: [number, number, number];
|
|
32
|
+
/**
|
|
33
|
+
* 手性(默认 `'right'`)。同 pitch/height/radius 下左右旋互为镜像。
|
|
34
|
+
* `'right'` 走 `makeHelixWire`,`'left'` 走 `makeHelixWireHanded(..., true)`。
|
|
35
|
+
*/
|
|
36
|
+
handed?: HelixHanded;
|
|
30
37
|
}
|
|
31
38
|
/**
|
|
32
39
|
* 构造螺旋线(1D 曲线)。
|
|
@@ -35,15 +42,17 @@ export interface HelixOptions {
|
|
|
35
42
|
* @async false
|
|
36
43
|
* @qual ok
|
|
37
44
|
* @name helix
|
|
38
|
-
* @note 平台 op:仅 occt 引擎(原生 makeHelixWire)。非 occt 引擎执行前报错;brep_mock 不拦截。
|
|
45
|
+
* @note 平台 op:仅 occt 引擎(原生 makeHelixWire / makeHelixWireHanded)。非 occt 引擎执行前报错;brep_mock 不拦截。
|
|
39
46
|
* @returns Shape 1D 螺旋线(kind:'curve')。
|
|
40
47
|
* @param options.radius - 螺旋半径(mm,>0)。type:number required:true
|
|
41
48
|
* @param options.pitch - 螺距(mm,≠0)。type:number required:true
|
|
42
49
|
* @param options.turns - 圈数(>0)。type:number required:true
|
|
43
50
|
* @param options.axis - 螺旋轴方向(默认 +Z)。type:Vec3 required:false
|
|
44
51
|
* @param options.origin - 起点(默认原点)。type:Vec3 required:false
|
|
52
|
+
* @param options.handed - 手性:'right'(默认)或 'left'。type:HelixHanded required:false
|
|
45
53
|
* @example
|
|
46
54
|
* const h = cad.helix({ radius: 5, pitch: 2, turns: 3 })
|
|
55
|
+
* const lh = cad.helix({ radius: 5, pitch: 2, turns: 3, handed: 'left' })
|
|
47
56
|
*/
|
|
48
57
|
export declare const helix: ((opts: HelixOptions) => Promise<Shape>) & {
|
|
49
58
|
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
package/dist/api/helix.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helix.d.ts","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"helix.d.ts","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,KAAK;;CAWhB,CAAA"}
|
package/dist/api/helix.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* 设计:
|
|
11
11
|
* - 平台 op:occt 原生 makeHelixWire(occt-wasm 有,L1 无)→ 声明 engines:['occt'](D11)。
|
|
12
|
-
*
|
|
12
|
+
* 实现直连平台原生方法,能力由引擎身份本身界定(无第二个声明轴)。
|
|
13
13
|
* - 1D 产物:经 fromBrepCurve 登记,kind='curve'。
|
|
14
14
|
* - 非 occt 引擎(brepkit)→ 执行前 BrepUnsupportedError(D11-4);brep_mock 受 D11-3
|
|
15
15
|
* 豁免不拦截(且 getOcctKernel 为全局 occt 实例,brep_mock 下仍可真实出线)。
|
|
@@ -19,7 +19,7 @@ import { getBrepApi } from '../brep/handle-bridge.js';
|
|
|
19
19
|
import { fromBrepCurve } from '../shape.js';
|
|
20
20
|
import { defineOp } from '../sdk.js';
|
|
21
21
|
import { getOcctKernel } from '../occt-kernel/occtKernel.js';
|
|
22
|
-
/** BREP 路径:用 occt 原生 makeHelixWire 构造螺旋线,登记 1D 句柄。 */
|
|
22
|
+
/** BREP 路径:用 occt 原生 makeHelixWire / makeHelixWireHanded 构造螺旋线,登记 1D 句柄。 */
|
|
23
23
|
function helixBrep(opts) {
|
|
24
24
|
const { radius, pitch, turns } = opts;
|
|
25
25
|
if (!(radius > 0))
|
|
@@ -28,12 +28,21 @@ function helixBrep(opts) {
|
|
|
28
28
|
throw new Error('E_HELIX_BAD_PITCH: pitch must be non-zero');
|
|
29
29
|
if (!(turns > 0))
|
|
30
30
|
throw new Error('E_HELIX_BAD_TURNS: turns must be > 0');
|
|
31
|
+
const handed = opts.handed ?? 'right';
|
|
32
|
+
if (handed !== 'right' && handed !== 'left') {
|
|
33
|
+
throw new Error(`E_HELIX_BAD_HANDED: handed must be 'right' or 'left' (got '${String(handed)}')`);
|
|
34
|
+
}
|
|
31
35
|
const axis = opts.axis ?? [0, 0, 1];
|
|
32
36
|
const origin = opts.origin ?? [0, 0, 0];
|
|
33
37
|
const height = pitch * turns;
|
|
34
38
|
const kernel = getBrepApi();
|
|
35
39
|
const occt = getOcctKernel();
|
|
36
|
-
const
|
|
40
|
+
const o = { x: origin[0], y: origin[1], z: origin[2] };
|
|
41
|
+
const a = { x: axis[0], y: axis[1], z: axis[2] };
|
|
42
|
+
// 右手默认沿用 makeHelixWire(保持两个原生入口都可达);左手走带手性的显式入口。
|
|
43
|
+
const handle = (handed === 'left'
|
|
44
|
+
? occt.makeHelixWireHanded(o, a, pitch, height, radius, true)
|
|
45
|
+
: occt.makeHelixWire(o, a, pitch, height, radius));
|
|
37
46
|
return fromBrepCurve(solidToShape(kernel, handle), { solid: handle });
|
|
38
47
|
}
|
|
39
48
|
/**
|
|
@@ -43,17 +52,24 @@ function helixBrep(opts) {
|
|
|
43
52
|
* @async false
|
|
44
53
|
* @qual ok
|
|
45
54
|
* @name helix
|
|
46
|
-
* @note 平台 op:仅 occt 引擎(原生 makeHelixWire)。非 occt 引擎执行前报错;brep_mock 不拦截。
|
|
55
|
+
* @note 平台 op:仅 occt 引擎(原生 makeHelixWire / makeHelixWireHanded)。非 occt 引擎执行前报错;brep_mock 不拦截。
|
|
47
56
|
* @returns Shape 1D 螺旋线(kind:'curve')。
|
|
48
57
|
* @param options.radius - 螺旋半径(mm,>0)。type:number required:true
|
|
49
58
|
* @param options.pitch - 螺距(mm,≠0)。type:number required:true
|
|
50
59
|
* @param options.turns - 圈数(>0)。type:number required:true
|
|
51
60
|
* @param options.axis - 螺旋轴方向(默认 +Z)。type:Vec3 required:false
|
|
52
61
|
* @param options.origin - 起点(默认原点)。type:Vec3 required:false
|
|
62
|
+
* @param options.handed - 手性:'right'(默认)或 'left'。type:HelixHanded required:false
|
|
53
63
|
* @example
|
|
54
64
|
* const h = cad.helix({ radius: 5, pitch: 2, turns: 3 })
|
|
65
|
+
* const lh = cad.helix({ radius: 5, pitch: 2, turns: 3, handed: 'left' })
|
|
55
66
|
*/
|
|
56
67
|
export const helix = defineOp({
|
|
68
|
+
// name 必填:① 引擎门文案携带 op 名(`op 'helix' requires engine occt`,见
|
|
69
|
+
// test/api/sweep-loft.test.ts GOTCHA-3 对该形态的要求);② occt op 覆盖率扫描器
|
|
70
|
+
// 的 op 全集只收 `export const X = defineOp({ name: '…' })`——缺 name 的 op
|
|
71
|
+
// 不可见,其直调的 occt 方法(makeHelixWireHanded)会被误判为「未接入」。
|
|
72
|
+
name: 'helix',
|
|
57
73
|
brep(opts) {
|
|
58
74
|
return helixBrep(opts);
|
|
59
75
|
},
|
package/dist/api/helix.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helix.js","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"helix.js","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAwBzD,4EAA4E;AAC5E,SAAS,SAAS,CAAC,IAAkB;IACnC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IACrC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC5E,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAChF,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAA;IACrC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,8DAA8D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnG,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;IAC5B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAA;IAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAChD,iDAAiD;IACjD,MAAM,MAAM,GAAG,CACb,MAAM,KAAK,MAAM;QACf,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAC3B,CAAA;IAC1B,OAAO,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,6DAA6D;IAC7D,iEAAiE;IACjE,oEAAoE;IACpE,mDAAmD;IACnD,IAAI,EAAE,OAAO;IACb,IAAI,CAAC,IAAkB;QACrB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,sCAAsC,EAAgB;CAC5F,CAAC,CAAA","sourcesContent":["/**\n * api helix — 螺旋线(1D 曲线,平台 op engines:['occt'])\n *\n * @platform occt — 本文件 import occt-kernel:螺旋线用 `makeHelixWire` 构造\n * (occt-wasm 原生有,L1 无)。守卫 ① 要求平台 import 自证身份;调用方 op 声明\n * `engines: ['occt']` 由守卫 ② 校验。\n *\n * 用途:G-D 门控层的 1D 造线能力(Phase 3)。下游 sweep / loft 等可用螺旋线作 spine。\n *\n * 设计:\n * - 平台 op:occt 原生 makeHelixWire(occt-wasm 有,L1 无)→ 声明 engines:['occt'](D11)。\n * 实现直连平台原生方法,能力由引擎身份本身界定(无第二个声明轴)。\n * - 1D 产物:经 fromBrepCurve 登记,kind='curve'。\n * - 非 occt 引擎(brepkit)→ 执行前 BrepUnsupportedError(D11-4);brep_mock 受 D11-3\n * 豁免不拦截(且 getOcctKernel 为全局 occt 实例,brep_mock 下仍可真实出线)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport type { BrepHandle } from '../brep/engine/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrepCurve } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\n\n/** 螺旋手性:`'right'`(右手,逆时针上旋)或 `'left'`(左手,顺时针上旋)。 */\nexport type HelixHanded = 'right' | 'left'\n\n/** `cad.helix` 参数。 */\nexport interface HelixOptions {\n /** 螺旋半径(mm,>0)。 */\n radius: number\n /** 螺距(mm,每圈沿轴的推进量,≠0)。 */\n pitch: number\n /** 圈数(>0)。 */\n turns: number\n /** 螺旋轴方向(单位向量,默认 +Z)。 */\n axis?: [number, number, number]\n /** 起点(默认原点)。 */\n origin?: [number, number, number]\n /**\n * 手性(默认 `'right'`)。同 pitch/height/radius 下左右旋互为镜像。\n * `'right'` 走 `makeHelixWire`,`'left'` 走 `makeHelixWireHanded(..., true)`。\n */\n handed?: HelixHanded\n}\n\n/** BREP 路径:用 occt 原生 makeHelixWire / makeHelixWireHanded 构造螺旋线,登记 1D 句柄。 */\nfunction helixBrep(opts: HelixOptions): Shape {\n const { radius, pitch, turns } = opts\n if (!(radius > 0)) throw new Error('E_HELIX_BAD_RADIUS: radius must be > 0')\n if (!(pitch !== 0)) throw new Error('E_HELIX_BAD_PITCH: pitch must be non-zero')\n if (!(turns > 0)) throw new Error('E_HELIX_BAD_TURNS: turns must be > 0')\n const handed = opts.handed ?? 'right'\n if (handed !== 'right' && handed !== 'left') {\n throw new Error(`E_HELIX_BAD_HANDED: handed must be 'right' or 'left' (got '${String(handed)}')`)\n }\n const axis = opts.axis ?? [0, 0, 1]\n const origin = opts.origin ?? [0, 0, 0]\n const height = pitch * turns\n const kernel = getBrepApi()\n const occt = getOcctKernel()\n const o = { x: origin[0], y: origin[1], z: origin[2] }\n const a = { x: axis[0], y: axis[1], z: axis[2] }\n // 右手默认沿用 makeHelixWire(保持两个原生入口都可达);左手走带手性的显式入口。\n const handle = (\n handed === 'left'\n ? occt.makeHelixWireHanded(o, a, pitch, height, radius, true)\n : occt.makeHelixWire(o, a, pitch, height, radius)\n ) as unknown as BrepHandle\n return fromBrepCurve(solidToShape(kernel, handle), { solid: handle })\n}\n\n/**\n * 构造螺旋线(1D 曲线)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name helix\n * @note 平台 op:仅 occt 引擎(原生 makeHelixWire / makeHelixWireHanded)。非 occt 引擎执行前报错;brep_mock 不拦截。\n * @returns Shape 1D 螺旋线(kind:'curve')。\n * @param options.radius - 螺旋半径(mm,>0)。type:number required:true\n * @param options.pitch - 螺距(mm,≠0)。type:number required:true\n * @param options.turns - 圈数(>0)。type:number required:true\n * @param options.axis - 螺旋轴方向(默认 +Z)。type:Vec3 required:false\n * @param options.origin - 起点(默认原点)。type:Vec3 required:false\n * @param options.handed - 手性:'right'(默认)或 'left'。type:HelixHanded required:false\n * @example\n * const h = cad.helix({ radius: 5, pitch: 2, turns: 3 })\n * const lh = cad.helix({ radius: 5, pitch: 2, turns: 3, handed: 'left' })\n */\nexport const helix = defineOp({\n // name 必填:① 引擎门文案携带 op 名(`op 'helix' requires engine occt`,见\n // test/api/sweep-loft.test.ts GOTCHA-3 对该形态的要求);② occt op 覆盖率扫描器\n // 的 op 全集只收 `export const X = defineOp({ name: '…' })`——缺 name 的 op\n // 不可见,其直调的 occt 方法(makeHelixWireHanded)会被误判为「未接入」。\n name: 'helix',\n brep(opts: HelixOptions) {\n return helixBrep(opts)\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'construct vocabulary pending Phase 3' } as Provenance,\n})\n"]}
|