@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
package/dist/api/replicate.js
CHANGED
|
@@ -18,22 +18,20 @@
|
|
|
18
18
|
* also build `replica[*]/<inner>` role tables (same treatment as linearPattern,
|
|
19
19
|
* via the shared buildReplicaRoleTable helper).
|
|
20
20
|
* - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep
|
|
21
|
-
* the input and delegate to the generated compatOp (
|
|
22
|
-
*
|
|
21
|
+
* the input and delegate to the generated compatOp (adopt/engines/naming
|
|
22
|
+
* preserved).
|
|
23
23
|
*
|
|
24
24
|
* The generated files stay untouched; overrides win via api-namespace spread
|
|
25
25
|
* (same precedent as cut / split / linearPattern).
|
|
26
26
|
*
|
|
27
27
|
* 平台分层(narrowing plan Phase 5,D11):
|
|
28
|
-
* - mirrorJoin / mirror
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* 只用 L1 核心面)→ capabilities 收窄到真实 L1 名(删除 isNull/iterShapes/
|
|
32
|
-
* section/translateWithHistory 等 occt-only 虚名,capability-map 实证实现不依赖)。
|
|
28
|
+
* - mirrorJoin / mirror / circularPattern / gridPattern / rectangularPattern /
|
|
29
|
+
* clone:中立 op(实现只用 L1 核心面)→ 无 engines、无能力声明;
|
|
30
|
+
* 面演化轨由 `hasNativeHistory` 在 mirrorBrep 内部按引擎事实静态分叉。
|
|
33
31
|
*/
|
|
34
32
|
import { solidToShape } from '../brep/brep-ops.js';
|
|
35
33
|
import { getBrepApi } from '../brep/handle-bridge.js';
|
|
36
|
-
import { getCurrentStmt, keep } from '../runtime-state.js';
|
|
34
|
+
import { getCurrentStmt, keep, keepHidden } from '../runtime-state.js';
|
|
37
35
|
import { fromBrep, brepOf } from '../shape.js';
|
|
38
36
|
import { defineOp } from '../sdk.js';
|
|
39
37
|
import { buildReplicaRoleTable } from './internal/replica-role-table.js';
|
|
@@ -121,7 +119,7 @@ function reflectAcrossPlane(p, o, n) {
|
|
|
121
119
|
export const circularPattern = defineOp({
|
|
122
120
|
meshEngines: ['brepkit'],
|
|
123
121
|
mesh(input, axis, count, fullAngle = 360, center = [0, 0, 0]) {
|
|
124
|
-
|
|
122
|
+
keepHidden(input);
|
|
125
123
|
const entry = meshSolidBasicEntry(input, 'circularPattern');
|
|
126
124
|
const u = norm(axis);
|
|
127
125
|
const step = fullAngle / count;
|
|
@@ -130,7 +128,7 @@ export const circularPattern = defineOp({
|
|
|
130
128
|
return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () => entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count));
|
|
131
129
|
},
|
|
132
130
|
brep(input, axis, count, fullAngle = 360, center = [0, 0, 0]) {
|
|
133
|
-
|
|
131
|
+
keepHidden(input);
|
|
134
132
|
const { kernel, solid, outStmt } = prelude(input, 'circularPattern');
|
|
135
133
|
const u = norm(axis);
|
|
136
134
|
const step = fullAngle / count;
|
|
@@ -154,18 +152,7 @@ export const circularPattern = defineOp({
|
|
|
154
152
|
const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt);
|
|
155
153
|
return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable });
|
|
156
154
|
},
|
|
157
|
-
// 中立 op(D11
|
|
158
|
-
// section 等 occt-only 虚名——实现只调 kernel.circularPattern/fuseAll)。
|
|
159
|
-
capabilities: [
|
|
160
|
-
'circularPattern',
|
|
161
|
-
'dispose',
|
|
162
|
-
'fuseAll',
|
|
163
|
-
'hashCode',
|
|
164
|
-
'surfaceCenterOfMass',
|
|
165
|
-
'surfaceNormal',
|
|
166
|
-
'surfaceType',
|
|
167
|
-
'uvBounds',
|
|
168
|
-
],
|
|
155
|
+
// 中立 op(D11):实现只用 L1 核心面(kernel.circularPattern/fuseAll)。
|
|
169
156
|
naming: { kind: 'replicate', k: 0 },
|
|
170
157
|
});
|
|
171
158
|
// ── gridPattern ─────────────────────────────────────────────────────────────
|
|
@@ -191,7 +178,7 @@ export const circularPattern = defineOp({
|
|
|
191
178
|
export const gridPattern = defineOp({
|
|
192
179
|
meshEngines: ['brepkit'],
|
|
193
180
|
mesh(input, directionX, directionY, countX, countY, spacingX, spacingY) {
|
|
194
|
-
|
|
181
|
+
keepHidden(input);
|
|
195
182
|
const entry = meshSolidBasicEntry(input, 'gridPattern');
|
|
196
183
|
const dx = norm(directionX);
|
|
197
184
|
const dy = norm(directionY);
|
|
@@ -211,7 +198,7 @@ export const gridPattern = defineOp({
|
|
|
211
198
|
});
|
|
212
199
|
},
|
|
213
200
|
brep(input, directionX, directionY, countX, countY, spacingX, spacingY) {
|
|
214
|
-
|
|
201
|
+
keepHidden(input);
|
|
215
202
|
const { kernel, solid, outStmt } = prelude(input, 'gridPattern');
|
|
216
203
|
const dx = norm(directionX);
|
|
217
204
|
const dy = norm(directionY);
|
|
@@ -235,17 +222,7 @@ export const gridPattern = defineOp({
|
|
|
235
222
|
const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt);
|
|
236
223
|
return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable });
|
|
237
224
|
},
|
|
238
|
-
|
|
239
|
-
'dispose',
|
|
240
|
-
'fuseAll',
|
|
241
|
-
'gridPattern',
|
|
242
|
-
'hashCode',
|
|
243
|
-
'linearPattern',
|
|
244
|
-
'surfaceCenterOfMass',
|
|
245
|
-
'surfaceNormal',
|
|
246
|
-
'surfaceType',
|
|
247
|
-
'uvBounds',
|
|
248
|
-
],
|
|
225
|
+
// 中立 op(D11):实现只用 L1 核心面(kernel.gridPattern/translate/fuseAll)。
|
|
249
226
|
naming: { kind: 'replicate', k: 0 },
|
|
250
227
|
});
|
|
251
228
|
/**
|
|
@@ -265,7 +242,7 @@ export const gridPattern = defineOp({
|
|
|
265
242
|
export const rectangularPattern = defineOp({
|
|
266
243
|
meshEngines: ['brepkit'],
|
|
267
244
|
mesh(input, options) {
|
|
268
|
-
|
|
245
|
+
keepHidden(input);
|
|
269
246
|
const entry = meshSolidBasicEntry(input, 'rectangularPattern');
|
|
270
247
|
const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options;
|
|
271
248
|
const dx = norm(xDir);
|
|
@@ -284,13 +261,12 @@ export const rectangularPattern = defineOp({
|
|
|
284
261
|
});
|
|
285
262
|
},
|
|
286
263
|
brep(input, options) {
|
|
287
|
-
|
|
264
|
+
keepHidden(input);
|
|
288
265
|
const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern');
|
|
289
266
|
const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options;
|
|
290
267
|
const dx = norm(xDir);
|
|
291
268
|
const dy = norm(yDir);
|
|
292
|
-
//
|
|
293
|
-
// 该方法——与 vendored 同口径:逐份 translate 再 fuseAll。
|
|
269
|
+
// 实现为纯 JS 组合:逐份 translate 再 fuseAll,不依赖内核的 rectangularPattern 方法。
|
|
294
270
|
const copies = [];
|
|
295
271
|
try {
|
|
296
272
|
for (let ix = 0; ix < xCount; ix++) {
|
|
@@ -324,17 +300,7 @@ export const rectangularPattern = defineOp({
|
|
|
324
300
|
kernel.release(c);
|
|
325
301
|
}
|
|
326
302
|
},
|
|
327
|
-
|
|
328
|
-
'dispose',
|
|
329
|
-
'fuse',
|
|
330
|
-
'fuseAll',
|
|
331
|
-
'fuseWithHistory',
|
|
332
|
-
'hashCode',
|
|
333
|
-
'surfaceCenterOfMass',
|
|
334
|
-
'surfaceNormal',
|
|
335
|
-
'surfaceType',
|
|
336
|
-
'uvBounds',
|
|
337
|
-
],
|
|
303
|
+
// 中立 op(D11):实现只用 L1 核心面(kernel.translate/fuseAll)。
|
|
338
304
|
naming: { kind: 'replicate', k: 0 },
|
|
339
305
|
});
|
|
340
306
|
/**
|
|
@@ -354,7 +320,7 @@ export const rectangularPattern = defineOp({
|
|
|
354
320
|
export const mirrorJoin = defineOp({
|
|
355
321
|
meshEngines: ['brepkit'],
|
|
356
322
|
mesh(input, options) {
|
|
357
|
-
|
|
323
|
+
keepHidden(input);
|
|
358
324
|
const entry = meshSolidBasicEntry(input, 'mirrorJoin');
|
|
359
325
|
const n = norm(optionVec(options?.normal, [1, 0, 0]));
|
|
360
326
|
const o = toBrepVec(optionVec(options?.at, [0, 0, 0]));
|
|
@@ -377,15 +343,14 @@ export const mirrorJoin = defineOp({
|
|
|
377
343
|
}
|
|
378
344
|
},
|
|
379
345
|
brep(input, options) {
|
|
380
|
-
|
|
346
|
+
keepHidden(input);
|
|
381
347
|
const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin');
|
|
382
348
|
const n = norm(options?.normal ?? [1, 0, 0]);
|
|
383
349
|
const o = toBrepVec(options?.at ?? [0, 0, 0]);
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
-
//
|
|
387
|
-
//
|
|
388
|
-
// modified 面映射(不影响几何与产物有效性)。
|
|
350
|
+
// replicate 的 role table 经质心聚类重建(引擎无关),mirror history 对
|
|
351
|
+
// role table 无增量收益,故走 L1 kernel.mirror(两引擎的 L1 契约面均提供
|
|
352
|
+
// `mirror`;`mirrorWithHistory` 不参与本 op,与引擎身份无关)。
|
|
353
|
+
// 面演化由 mirrorBrep(topologyFns.ts)双轨接入,replicate 不重复消费。
|
|
389
354
|
const mirrored = kernel.mirror(solid, o, toBrepVec(n));
|
|
390
355
|
try {
|
|
391
356
|
const resultSolid = kernel.fuse(solid, mirrored);
|
|
@@ -400,9 +365,8 @@ export const mirrorJoin = defineOp({
|
|
|
400
365
|
kernel.release(mirrored);
|
|
401
366
|
}
|
|
402
367
|
},
|
|
403
|
-
//
|
|
404
|
-
//
|
|
405
|
-
capabilities: ['mirror', 'fuse'],
|
|
368
|
+
// 中立 op(D11):实现只用 L1 核心面(kernel.mirror/fuse)。replicate 的
|
|
369
|
+
// role table 不消费 mirror history(见上注释),面演化由 mirrorBrep 双轨接入。
|
|
406
370
|
naming: { kind: 'replicate', k: 2 },
|
|
407
371
|
});
|
|
408
372
|
// ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────
|
|
@@ -440,10 +404,8 @@ export const mirror = defineOp({
|
|
|
440
404
|
keep(input);
|
|
441
405
|
return (await generatedMirror(input, options));
|
|
442
406
|
},
|
|
443
|
-
//
|
|
444
|
-
//
|
|
445
|
-
// 与 clone 薄 override 同模式(外层门不拦 brepkit,内层 generatedMirror 已按能力路由)。
|
|
446
|
-
capabilities: ['mirror'],
|
|
407
|
+
// 薄 override:generatedMirror 走 L1 kernel.mirror,与 clone 薄 override 同模式
|
|
408
|
+
// (无能力门,内层实现自行按引擎事实分叉)。面演化由 mirrorBrep 双轨接入。
|
|
447
409
|
naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } },
|
|
448
410
|
});
|
|
449
411
|
/**
|
|
@@ -477,7 +439,7 @@ export const clone = defineOp({
|
|
|
477
439
|
keep(input);
|
|
478
440
|
return (await generatedClone(input));
|
|
479
441
|
},
|
|
480
|
-
|
|
442
|
+
// 中立 op(D11):实现只用 L1 核心面(kernel.copyShape)。
|
|
481
443
|
naming: { kind: 'identity' },
|
|
482
444
|
});
|
|
483
445
|
//# sourceMappingURL=replicate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/api/replicate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * replicate — handwritten overrides for the copy-family ops (keep semantics +\n * replica[k] role tables).\n *\n * @platform occt — 本文件 import occt-kernel(mirrorJoin 走 `mirrorWithHistory`\n * 平台面,D3)。文件级标注满足守卫①(平台 import 自证身份);文件内的**中立 op**\n * (circularPattern/gridPattern/rectangularPattern/clone 只用 L1 核心面)不声明\n * engines,运行时不拦截——标注只约束平台 import,不改变函数级中立性\n * (与 face-evolution.ts 同口径)。\n *\n * All 9 copy-like ops must NOT consume their input (same as `copy`): each brep\n * body declares `keep(input)` (function-body keep → KeepRegistry → live-shapes),\n * so the source stays a live terminal in both runtime and UI.\n *\n * Two groups:\n * - Multi-replica patterns (circularPattern / gridPattern / rectangularPattern /\n * mirrorJoin): promoted from generated compatOps to handwritten defineOps that\n * also build `replica[*]/<inner>` role tables (same treatment as linearPattern,\n * via the shared buildReplicaRoleTable helper).\n * - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep\n * the input and delegate to the generated compatOp (borrow/adopt/capabilities/\n * naming preserved).\n *\n * The generated files stay untouched; overrides win via api-namespace spread\n * (same precedent as cut / split / linearPattern).\n *\n * 平台分层(narrowing plan Phase 5,D11):\n * - mirrorJoin / mirror:平台 op(依赖 occt-only `mirrorWithHistory`)→\n * `engines: ['occt']`,不声明 capabilities(能力由平台身份本身界定)。\n * - circularPattern / gridPattern / rectangularPattern / clone:中立 op(实现\n * 只用 L1 核心面)→ capabilities 收窄到真实 L1 名(删除 isNull/iterShapes/\n * section/translateWithHistory 等 occt-only 虚名,capability-map 实证实现不依赖)。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { getCurrentStmt, keep } from '../runtime-state'\nimport { fromBrep, brepOf } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle, BrepVec3 } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { buildReplicaRoleTable, type ReplicaTransform } from './internal/replica-role-table'\nimport {\n meshKernelFailure,\n meshPatternProduct,\n meshSolidBasicEntry,\n meshSolidProduct,\n} from './internal/mesh-solid-op'\n// Generated compatOps (delegation targets for the thin single-copy overrides).\n// NOTE: transformCopy is NOT a script-face op (arg-spec skip: ComposedTransform\n// is not constructible in .fai.js); it stays a TS-library-only re-export.\nimport {\n mirror as generatedMirror,\n clone as generatedClone,\n} from './generated/topology'\n/** 镜像面参数(与 vendored MirrorOptions 同形;G5 去 brepjs 依赖后本地自持)。 */\ninterface MirrorOptions {\n /** 镜像面法向。默认 [0,0,1]。 */\n normal?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** 镜像面过点。默认 [0,0,0]。 */\n at?: readonly [number, number, number] | { x: number; y: number; z: number }\n}\n\n/** Normalize a vector (zero vector → [0,0,1] fallback, same as pattern.ts). */\nfunction norm(v: Vec3): Vec3 {\n const len = Math.hypot(v[0], v[1], v[2])\n if (len < 1e-9) return [0, 0, 1]\n return [v[0] / len, v[1] / len, v[2] / len]\n}\n\nfunction toBrepVec(v: Vec3): BrepVec3 {\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/**\n * `MirrorOptions` 的宽松向量形态(只读元组或 `{x,y,z}`)→ `Vec3`。\n *\n * 生成的 compatOp 自己吃得下这两种形态,网格路径要自己换算,故收在一处。\n *\n * @param v - the loosely typed vector from the op's options.\n * @param fallback - the default vector.\n * @returns the vector as a plain tuple.\n */\nfunction optionVec(\n v: readonly [number, number, number] | { x: number; y: number; z: number } | undefined,\n fallback: Vec3,\n): Vec3 {\n if (!v) return fallback\n if (Array.isArray(v)) return [v[0] as number, v[1] as number, v[2] as number]\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n}\n\n/** Shared prelude: L1 kernel(getBrepApi,D12)+ BREP input handle + output statement id. */\nfunction prelude(input: Shape, tag: string): { kernel: BrepEngineApi; solid: BrepHandle; outStmt: string } {\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error(`[api/${tag}] input is not BREP`)\n return { kernel, solid, outStmt: String(getCurrentStmt()?.id ?? '') }\n}\n\n/** Rotate point p around the axis line (point `center`, unit direction `u`) by theta radians. */\nfunction rotateAroundAxis(p: BrepVec3, center: BrepVec3, u: Vec3, theta: number): BrepVec3 {\n const vx = p.x - center.x\n const vy = p.y - center.y\n const vz = p.z - center.z\n const cos = Math.cos(theta)\n const sin = Math.sin(theta)\n const dot = vx * u[0] + vy * u[1] + vz * u[2]\n // u × v\n const cx = u[1] * vz - u[2] * vy\n const cy = u[2] * vx - u[0] * vz\n const cz = u[0] * vy - u[1] * vx\n return {\n x: center.x + vx * cos + cx * sin + u[0] * dot * (1 - cos),\n y: center.y + vy * cos + cy * sin + u[1] * dot * (1 - cos),\n z: center.z + vz * cos + cz * sin + u[2] * dot * (1 - cos),\n }\n}\n\n/** Reflect point p across the plane (point `o`, unit normal `n`). Self-inverse. */\nfunction reflectAcrossPlane(p: BrepVec3, o: BrepVec3, n: Vec3): BrepVec3 {\n const d = (p.x - o.x) * n[0] + (p.y - o.y) * n[1] + (p.z - o.z) * n[2]\n return { x: p.x - 2 * d * n[0], y: p.y - 2 * d * n[1], z: p.z - 2 * d * n[2] }\n}\n\n// ── circularPattern ─────────────────────────────────────────────────────────\n\n/**\n * 环形阵列:绕 axis 均分 fullAngle(度,缺省 360)复制 count 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name circularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[k]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param axis - 旋转轴方向。type:[x,y,z] required:true\n * @param count - 副本总数(含原位置)。type:number required:true\n * @param fullAngle - 总角度(度,缺省 360)。type:number required:false\n * @param center - 旋转轴上一点(缺省原点)。type:[x,y,z] required:false\n * @example\n * const p = await cad.circularPattern(part0, [0, 0, 1], 6)\n */\nexport const circularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n // 网格链:内核返回 count 份副本(含原位置),融合成一个网格零件;近似拓扑没有\n // role 层,故不产 `replica[k]/<inner>` 命名(如实缺席)。\n return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () =>\n entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count),\n )\n },\n brep(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n const raw = kernel.circularPattern(solid, toBrepVec(center), toBrepVec(u), step, count)\n\n let resultSolid: BrepHandle\n try {\n resultSolid = kernel.fuseAll(raw)\n } finally {\n for (const c of raw) kernel.release(c)\n }\n\n const replicas: ReplicaTransform[] = []\n for (let k = 0; k < count; k++) {\n const theta = (-k * step * Math.PI) / 180\n replicas.push({\n label: `replica[${k}]`,\n inverse: (c) => rotateAroundAxis(c, toBrepVec(center), u, theta),\n })\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):capabilities 收窄到实现真实调用的 L1 名(删除 isNull/iterShapes/\n // section 等 occt-only 虚名——实现只调 kernel.circularPattern/fuseAll)。\n capabilities: [\n 'circularPattern',\n 'dispose',\n 'fuseAll',\n 'hashCode',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── gridPattern ─────────────────────────────────────────────────────────────\n\n/**\n * 二维栅格阵列:沿 directionX × directionY 复制 countX×countY 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name gridPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 全部副本的 compound。\n * @param input - 目标几何。type:Shape required:true\n * @param directionX - 第一方向。type:[x,y,z] required:true\n * @param directionY - 第二方向。type:[x,y,z] required:true\n * @param countX - X 向副本数。type:number required:true\n * @param countY - Y 向副本数。type:number required:true\n * @param spacingX - X 向间距。type:number required:true\n * @param spacingY - Y 向间距。type:number required:true\n * @example\n * const p = await cad.gridPattern(part0, [1, 0, 0], [0, 1, 0], 3, 2, 20, 20)\n */\nexport const gridPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // 网格链走\"逐份平移 + fuseAll\"(与 rectangularPattern 同口径),不用内核的\n // `gridPattern`——那支返回**单个 compound 句柄**,近似拓扑无法把 compound 讲成\n // 一个网格零件;逐份平移则得到与线性/环形阵列同形的单一融合实体。\n return meshPatternProduct(entry, 'gridPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // kernel.gridPattern 返回 compound 单句柄(含全部副本),无需 fuse。\n const resultSolid = kernel.gridPattern(\n solid,\n toBrepVec(dx),\n toBrepVec(dy),\n spacingX,\n spacingY,\n countX,\n countY,\n )\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n capabilities: [\n 'dispose',\n 'fuseAll',\n 'gridPattern',\n 'hashCode',\n 'linearPattern',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── rectangularPattern ──────────────────────────────────────────────────────\n\ninterface RectangularPatternOptions {\n xDir: Vec3\n xCount: number\n xSpacing: number\n yDir: Vec3\n yCount: number\n ySpacing: number\n}\n\n/**\n * 矩形阵列:按 options(xDir/xCount/xSpacing/yDir/yCount/ySpacing)复制并 fuse。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name rectangularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - 阵列参数。type:RectangularPatternOptions required:true\n * @example\n * const p = await cad.rectangularPattern(part0, { xDir: [1,0,0], xCount: 3, xSpacing: 20, yDir: [0,1,0], yCount: 2, ySpacing: 15 })\n */\nexport const rectangularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options: RectangularPatternOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 与 BREP 路径同一手法(逐份 translate 再 fuseAll),只是句柄来自网格后端。\n return meshPatternProduct(entry, 'rectangularPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(input: Shape, options: RectangularPatternOptions) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // vendored rectangularPattern 是纯 JS 组合(translate + fuseAll),内核不声明\n // 该方法——与 vendored 同口径:逐份 translate 再 fuseAll。\n const copies: BrepHandle[] = []\n try {\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(kernel.translate(solid, ox * dx[0] + oy * dy[0], ox * dx[1] + oy * dy[1], ox * dx[2] + oy * dy[2]))\n }\n }\n const resultSolid = kernel.fuseAll(copies)\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n for (const c of copies) kernel.release(c)\n }\n },\n capabilities: [\n 'dispose',\n 'fuse',\n 'fuseAll',\n 'fuseWithHistory',\n 'hashCode',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── mirrorJoin ──────────────────────────────────────────────────────────────\n\ninterface MirrorJoinOptions {\n normal?: Vec3\n at?: Vec3\n}\n\n/**\n * 镜像并融合:原物(replica[0])+ 沿平面镜像(replica[1])fuse 成一体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirrorJoin\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[0|1]/<inner>`。\n * @returns Shape fuse 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面法向与面上一点。type:MirrorJoinOptions required:false\n * @example\n * const p = await cad.mirrorJoin(part0, { normal: [1, 0, 0] })\n */\nexport const mirrorJoin = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorJoinOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirrorJoin')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n // 输入句柄**不释放**(keep 语义);只释放本次自造的镜像副本。\n let mirrored: BrepHandle\n try {\n mirrored = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n try {\n return meshSolidProduct(entry, entry.kernel.fuse(entry.solid, mirrored))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', 'fusing the mirrored copy', cause)\n } finally {\n entry.backend.release(mirrored)\n }\n },\n brep(input: Shape, options?: MirrorJoinOptions) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin')\n const n = norm(options?.normal ?? [1, 0, 0])\n const o = toBrepVec(options?.at ?? [0, 0, 0])\n // 2026-09-26 C 批降级:原实现直调 getOcctKernel().mirrorWithHistory(occt-only history\n // 镜像,返回 modified/newFaces 供细粒度 roleTable)。按用户指示「有没有历史 withhistory\n // 并不重要」,降级为 L1 kernel.mirror(brepkit 已声明 mirror 能力)——几何结果一致,\n // roleTable 仍由 buildReplicaRoleTable 经质心聚类重建(引擎无关),仅丢失 history 级\n // modified 面映射(不影响几何与产物有效性)。\n const mirrored = kernel.mirror(solid, o, toBrepVec(n))\n try {\n const resultSolid = kernel.fuse(solid, mirrored)\n\n const replicas: ReplicaTransform[] = [\n { label: 'replica[0]', inverse: (c) => ({ x: c.x, y: c.y, z: c.z }) },\n { label: 'replica[1]', inverse: (c) => reflectAcrossPlane(c, o, n) },\n ]\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n kernel.release(mirrored)\n }\n },\n // 2026-09-26 C 批:从 engines:[occt] 降级为 capabilities:['mirror','fuse'](L1 中立面,\n // brepkit 已声明二者)。history 语义丢失(见上注释),几何不回退。\n capabilities: ['mirror', 'fuse'],\n naming: { kind: 'replicate', k: 2 } as Provenance,\n})\n\n// ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────\n\n/**\n * 镜像:返回镜像后的新 Shape(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirror\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 镜像后的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面。type:MirrorOptions required:false\n * @example\n * const p = await cad.mirror(part0, { normal: [1, 0, 0] })\n */\nexport const mirror = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirror')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n let result: BrepHandle\n try {\n result = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirror', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape, options?: MirrorOptions) {\n keep(input)\n return (await generatedMirror(input, options)) as Shape\n },\n // 2026-09-26 B 批:generatedMirror 已降级为 L1 kernel.mirror(brepkit 已声明 mirror\n // 能力),薄 override 同步从 engines:[occt] 降级为 capabilities:['mirror']——\n // 与 clone 薄 override 同模式(外层门不拦 brepkit,内层 generatedMirror 已按能力路由)。\n capabilities: ['mirror'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 深拷贝句柄:返回独立副本(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name clone\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 克隆的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @example\n * const p = await cad.clone(part0)\n */\nexport const clone = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'clone')\n let result: BrepHandle\n try {\n result = entry.kernel.copyShape(entry.solid)\n } catch (cause) {\n throw meshKernelFailure('clone', 'E_CLONE_FAILED', 'copying the mesh solid handle', cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape) {\n keep(input)\n return (await generatedClone(input)) as Shape\n },\n capabilities: ['copyShape', 'dispose'],\n naming: { kind: 'identity' } as Provenance,\n})\n"]}
|
|
1
|
+
{"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/api/replicate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * replicate — handwritten overrides for the copy-family ops (keep semantics +\n * replica[k] role tables).\n *\n * @platform occt — 本文件 import occt-kernel(mirrorJoin 走 `mirrorWithHistory`\n * 平台面,D3)。文件级标注满足守卫①(平台 import 自证身份);文件内的**中立 op**\n * (circularPattern/gridPattern/rectangularPattern/clone 只用 L1 核心面)不声明\n * engines,运行时不拦截——标注只约束平台 import,不改变函数级中立性\n * (与 face-evolution.ts 同口径)。\n *\n * All 9 copy-like ops must NOT consume their input (same as `copy`): each brep\n * body declares `keep(input)` (function-body keep → KeepRegistry → live-shapes),\n * so the source stays a live terminal in both runtime and UI.\n *\n * Two groups:\n * - Multi-replica patterns (circularPattern / gridPattern / rectangularPattern /\n * mirrorJoin): promoted from generated compatOps to handwritten defineOps that\n * also build `replica[*]/<inner>` role tables (same treatment as linearPattern,\n * via the shared buildReplicaRoleTable helper).\n * - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep\n * the input and delegate to the generated compatOp (adopt/engines/naming\n * preserved).\n *\n * The generated files stay untouched; overrides win via api-namespace spread\n * (same precedent as cut / split / linearPattern).\n *\n * 平台分层(narrowing plan Phase 5,D11):\n * - mirrorJoin / mirror / circularPattern / gridPattern / rectangularPattern /\n * clone:中立 op(实现只用 L1 核心面)→ 无 engines、无能力声明;\n * 面演化轨由 `hasNativeHistory` 在 mirrorBrep 内部按引擎事实静态分叉。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { getCurrentStmt, keep, keepHidden } from '../runtime-state'\nimport { fromBrep, brepOf } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle, BrepVec3 } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { buildReplicaRoleTable, type ReplicaTransform } from './internal/replica-role-table'\nimport {\n meshKernelFailure,\n meshPatternProduct,\n meshSolidBasicEntry,\n meshSolidProduct,\n} from './internal/mesh-solid-op'\n// Generated compatOps (delegation targets for the thin single-copy overrides).\n// NOTE: transformCopy is NOT a script-face op (arg-spec skip: ComposedTransform\n// is not constructible in .fai.js); it stays a TS-library-only re-export.\nimport {\n mirror as generatedMirror,\n clone as generatedClone,\n} from './generated/topology'\n/** 镜像面参数(与旧 MirrorOptions 同形;G5 去外部依赖后本地自持)。 */\ninterface MirrorOptions {\n /** 镜像面法向。默认 [0,0,1]。 */\n normal?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** 镜像面过点。默认 [0,0,0]。 */\n at?: readonly [number, number, number] | { x: number; y: number; z: number }\n}\n\n/** Normalize a vector (zero vector → [0,0,1] fallback, same as pattern.ts). */\nfunction norm(v: Vec3): Vec3 {\n const len = Math.hypot(v[0], v[1], v[2])\n if (len < 1e-9) return [0, 0, 1]\n return [v[0] / len, v[1] / len, v[2] / len]\n}\n\nfunction toBrepVec(v: Vec3): BrepVec3 {\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/**\n * `MirrorOptions` 的宽松向量形态(只读元组或 `{x,y,z}`)→ `Vec3`。\n *\n * 生成的 compatOp 自己吃得下这两种形态,网格路径要自己换算,故收在一处。\n *\n * @param v - the loosely typed vector from the op's options.\n * @param fallback - the default vector.\n * @returns the vector as a plain tuple.\n */\nfunction optionVec(\n v: readonly [number, number, number] | { x: number; y: number; z: number } | undefined,\n fallback: Vec3,\n): Vec3 {\n if (!v) return fallback\n if (Array.isArray(v)) return [v[0] as number, v[1] as number, v[2] as number]\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n}\n\n/** Shared prelude: L1 kernel(getBrepApi,D12)+ BREP input handle + output statement id. */\nfunction prelude(input: Shape, tag: string): { kernel: BrepEngineApi; solid: BrepHandle; outStmt: string } {\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error(`[api/${tag}] input is not BREP`)\n return { kernel, solid, outStmt: String(getCurrentStmt()?.id ?? '') }\n}\n\n/** Rotate point p around the axis line (point `center`, unit direction `u`) by theta radians. */\nfunction rotateAroundAxis(p: BrepVec3, center: BrepVec3, u: Vec3, theta: number): BrepVec3 {\n const vx = p.x - center.x\n const vy = p.y - center.y\n const vz = p.z - center.z\n const cos = Math.cos(theta)\n const sin = Math.sin(theta)\n const dot = vx * u[0] + vy * u[1] + vz * u[2]\n // u × v\n const cx = u[1] * vz - u[2] * vy\n const cy = u[2] * vx - u[0] * vz\n const cz = u[0] * vy - u[1] * vx\n return {\n x: center.x + vx * cos + cx * sin + u[0] * dot * (1 - cos),\n y: center.y + vy * cos + cy * sin + u[1] * dot * (1 - cos),\n z: center.z + vz * cos + cz * sin + u[2] * dot * (1 - cos),\n }\n}\n\n/** Reflect point p across the plane (point `o`, unit normal `n`). Self-inverse. */\nfunction reflectAcrossPlane(p: BrepVec3, o: BrepVec3, n: Vec3): BrepVec3 {\n const d = (p.x - o.x) * n[0] + (p.y - o.y) * n[1] + (p.z - o.z) * n[2]\n return { x: p.x - 2 * d * n[0], y: p.y - 2 * d * n[1], z: p.z - 2 * d * n[2] }\n}\n\n// ── circularPattern ─────────────────────────────────────────────────────────\n\n/**\n * 环形阵列:绕 axis 均分 fullAngle(度,缺省 360)复制 count 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name circularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[k]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param axis - 旋转轴方向。type:[x,y,z] required:true\n * @param count - 副本总数(含原位置)。type:number required:true\n * @param fullAngle - 总角度(度,缺省 360)。type:number required:false\n * @param center - 旋转轴上一点(缺省原点)。type:[x,y,z] required:false\n * @example\n * const p = await cad.circularPattern(part0, [0, 0, 1], 6)\n */\nexport const circularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n // 网格链:内核返回 count 份副本(含原位置),融合成一个网格零件;近似拓扑没有\n // role 层,故不产 `replica[k]/<inner>` 命名(如实缺席)。\n return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () =>\n entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count),\n )\n },\n brep(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n const raw = kernel.circularPattern(solid, toBrepVec(center), toBrepVec(u), step, count)\n\n let resultSolid: BrepHandle\n try {\n resultSolid = kernel.fuseAll(raw)\n } finally {\n for (const c of raw) kernel.release(c)\n }\n\n const replicas: ReplicaTransform[] = []\n for (let k = 0; k < count; k++) {\n const theta = (-k * step * Math.PI) / 180\n replicas.push({\n label: `replica[${k}]`,\n inverse: (c) => rotateAroundAxis(c, toBrepVec(center), u, theta),\n })\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.circularPattern/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── gridPattern ─────────────────────────────────────────────────────────────\n\n/**\n * 二维栅格阵列:沿 directionX × directionY 复制 countX×countY 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name gridPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 全部副本的 compound。\n * @param input - 目标几何。type:Shape required:true\n * @param directionX - 第一方向。type:[x,y,z] required:true\n * @param directionY - 第二方向。type:[x,y,z] required:true\n * @param countX - X 向副本数。type:number required:true\n * @param countY - Y 向副本数。type:number required:true\n * @param spacingX - X 向间距。type:number required:true\n * @param spacingY - Y 向间距。type:number required:true\n * @example\n * const p = await cad.gridPattern(part0, [1, 0, 0], [0, 1, 0], 3, 2, 20, 20)\n */\nexport const gridPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // 网格链走\"逐份平移 + fuseAll\"(与 rectangularPattern 同口径),不用内核的\n // `gridPattern`——那支返回**单个 compound 句柄**,近似拓扑无法把 compound 讲成\n // 一个网格零件;逐份平移则得到与线性/环形阵列同形的单一融合实体。\n return meshPatternProduct(entry, 'gridPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // kernel.gridPattern 返回 compound 单句柄(含全部副本),无需 fuse。\n const resultSolid = kernel.gridPattern(\n solid,\n toBrepVec(dx),\n toBrepVec(dy),\n spacingX,\n spacingY,\n countX,\n countY,\n )\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.gridPattern/translate/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n// ── rectangularPattern ──────────────────────────────────────────────────────\n\ninterface RectangularPatternOptions {\n xDir: Vec3\n xCount: number\n xSpacing: number\n yDir: Vec3\n yCount: number\n ySpacing: number\n}\n\n/**\n * 矩形阵列:按 options(xDir/xCount/xSpacing/yDir/yCount/ySpacing)复制并 fuse。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name rectangularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - 阵列参数。type:RectangularPatternOptions required:true\n * @example\n * const p = await cad.rectangularPattern(part0, { xDir: [1,0,0], xCount: 3, xSpacing: 20, yDir: [0,1,0], yCount: 2, ySpacing: 15 })\n */\nexport const rectangularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options: RectangularPatternOptions) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 与 BREP 路径同一手法(逐份 translate 再 fuseAll),只是句柄来自网格后端。\n return meshPatternProduct(entry, 'rectangularPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(input: Shape, options: RectangularPatternOptions) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 实现为纯 JS 组合:逐份 translate 再 fuseAll,不依赖内核的 rectangularPattern 方法。\n const copies: BrepHandle[] = []\n try {\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(kernel.translate(solid, ox * dx[0] + oy * dy[0], ox * dx[1] + oy * dy[1], ox * dx[2] + oy * dy[2]))\n }\n }\n const resultSolid = kernel.fuseAll(copies)\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n for (const c of copies) kernel.release(c)\n }\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.translate/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── mirrorJoin ──────────────────────────────────────────────────────────────\n\ninterface MirrorJoinOptions {\n normal?: Vec3\n at?: Vec3\n}\n\n/**\n * 镜像并融合:原物(replica[0])+ 沿平面镜像(replica[1])fuse 成一体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirrorJoin\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[0|1]/<inner>`。\n * @returns Shape fuse 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面法向与面上一点。type:MirrorJoinOptions required:false\n * @example\n * const p = await cad.mirrorJoin(part0, { normal: [1, 0, 0] })\n */\nexport const mirrorJoin = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorJoinOptions) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'mirrorJoin')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n // 输入句柄**不释放**(keep 语义);只释放本次自造的镜像副本。\n let mirrored: BrepHandle\n try {\n mirrored = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n try {\n return meshSolidProduct(entry, entry.kernel.fuse(entry.solid, mirrored))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', 'fusing the mirrored copy', cause)\n } finally {\n entry.backend.release(mirrored)\n }\n },\n brep(input: Shape, options?: MirrorJoinOptions) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin')\n const n = norm(options?.normal ?? [1, 0, 0])\n const o = toBrepVec(options?.at ?? [0, 0, 0])\n // replicate 的 role table 经质心聚类重建(引擎无关),mirror history 对\n // role table 无增量收益,故走 L1 kernel.mirror(两引擎的 L1 契约面均提供\n // `mirror`;`mirrorWithHistory` 不参与本 op,与引擎身份无关)。\n // 面演化由 mirrorBrep(topologyFns.ts)双轨接入,replicate 不重复消费。\n const mirrored = kernel.mirror(solid, o, toBrepVec(n))\n try {\n const resultSolid = kernel.fuse(solid, mirrored)\n\n const replicas: ReplicaTransform[] = [\n { label: 'replica[0]', inverse: (c) => ({ x: c.x, y: c.y, z: c.z }) },\n { label: 'replica[1]', inverse: (c) => reflectAcrossPlane(c, o, n) },\n ]\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n kernel.release(mirrored)\n }\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.mirror/fuse)。replicate 的\n // role table 不消费 mirror history(见上注释),面演化由 mirrorBrep 双轨接入。\n naming: { kind: 'replicate', k: 2 } as Provenance,\n})\n\n// ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────\n\n/**\n * 镜像:返回镜像后的新 Shape(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirror\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 镜像后的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面。type:MirrorOptions required:false\n * @example\n * const p = await cad.mirror(part0, { normal: [1, 0, 0] })\n */\nexport const mirror = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirror')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n let result: BrepHandle\n try {\n result = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirror', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape, options?: MirrorOptions) {\n keep(input)\n return (await generatedMirror(input, options)) as Shape\n },\n // 薄 override:generatedMirror 走 L1 kernel.mirror,与 clone 薄 override 同模式\n // (无能力门,内层实现自行按引擎事实分叉)。面演化由 mirrorBrep 双轨接入。\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 深拷贝句柄:返回独立副本(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name clone\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 克隆的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @example\n * const p = await cad.clone(part0)\n */\nexport const clone = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'clone')\n let result: BrepHandle\n try {\n result = entry.kernel.copyShape(entry.solid)\n } catch (cause) {\n throw meshKernelFailure('clone', 'E_CLONE_FAILED', 'copying the mesh solid handle', cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape) {\n keep(input)\n return (await generatedClone(input)) as Shape\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.copyShape)。\n naming: { kind: 'identity' } as Provenance,\n})\n"]}
|
package/dist/api/result.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Platform Result face — the first-party Result implementation.
|
|
3
3
|
*
|
|
4
|
-
* 2026-09-25 core-decouple Phase 1
|
|
4
|
+
* 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from
|
|
5
5
|
* '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`
|
|
6
6
|
* (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用
|
|
7
7
|
* (fcstd 等下游按此 import)。
|
package/dist/api/result.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Platform Result face — the first-party Result implementation.
|
|
3
3
|
*
|
|
4
|
-
* 2026-09-25 core-decouple Phase 1
|
|
4
|
+
* 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from
|
|
5
5
|
* '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`
|
|
6
6
|
* (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用
|
|
7
7
|
* (fcstd 等下游按此 import)。
|
package/dist/api/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/api/result.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,kBAAkB,CAAA","sourcesContent":["/**\n * Platform Result face — the first-party Result implementation.\n *\n * 2026-09-25 core-decouple Phase 1
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/api/result.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,kBAAkB,CAAA","sourcesContent":["/**\n * Platform Result face — the first-party Result implementation.\n *\n * 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from\n * '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`\n * (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用\n * (fcstd 等下游按此 import)。\n */\nexport * from '../result/result'\n"]}
|
package/dist/api/revolve.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)
|
|
3
3
|
*
|
|
4
4
|
* 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由
|
|
5
|
-
*
|
|
5
|
+
* 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
|
|
6
6
|
* 下游 `cad.edgeRef` 抛 "nameless shape"(ModelFromV021 缺陷)。
|
|
7
7
|
*
|
|
8
8
|
* 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住
|
|
@@ -23,7 +23,7 @@ import type { Shape } from '../mesh/types.js';
|
|
|
23
23
|
* @qual ok
|
|
24
24
|
* @name revolve
|
|
25
25
|
* @param face - 平面轮廓。type:Shape required:true
|
|
26
|
-
* @param options - 旋转轴/点/角度(透传
|
|
26
|
+
* @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions
|
|
27
27
|
* @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。
|
|
28
28
|
* @example
|
|
29
29
|
* const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })
|
package/dist/api/revolve.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)
|
|
3
3
|
*
|
|
4
4
|
* 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由
|
|
5
|
-
*
|
|
5
|
+
* 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
|
|
6
6
|
* 下游 `cad.edgeRef` 抛 "nameless shape"(ModelFromV021 缺陷)。
|
|
7
7
|
*
|
|
8
8
|
* 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住
|
|
@@ -118,14 +118,14 @@ function revolveConstructRoles(kernel, solid, axisOpt) {
|
|
|
118
118
|
* @qual ok
|
|
119
119
|
* @name revolve
|
|
120
120
|
* @param face - 平面轮廓。type:Shape required:true
|
|
121
|
-
* @param options - 旋转轴/点/角度(透传
|
|
121
|
+
* @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions
|
|
122
122
|
* @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。
|
|
123
123
|
* @example
|
|
124
124
|
* const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })
|
|
125
125
|
*/
|
|
126
126
|
export const revolve = defineOp({
|
|
127
127
|
brep: async (face, options) => {
|
|
128
|
-
//
|
|
128
|
+
// compat 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,
|
|
129
129
|
// 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的
|
|
130
130
|
// 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。
|
|
131
131
|
const kernel = getBrepApi();
|
package/dist/api/revolve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revolve.js","sourceRoot":"","sources":["../../src/api/revolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)\n *\n * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由\n * vendored brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,\n * 下游 `cad.edgeRef` 抛 \"nameless shape\"(ModelFromV021 缺陷)。\n *\n * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住\n * 投影调用,并在产物登记处建链根 roleTable(origin = 语句 StmtId,与\n * `extrude.ts` / `import-brep.ts` 同源机制)。\n *\n * 词汇表沿用生成 spec 的 construct 声明:`bottom` / `top`(旋转轴两端的平面\n * 端面)+ `wall:<i>`(其余侧面,按枚举序)。判定口径与 extrude 相同——现场\n * 几何是唯一真值:平面法向与轴 |cos| ≈ 1 → 端面,按中心沿轴坐标分 bottom/top;\n * 其余(含圆柱等曲面侧面)→ wall:i。无法分类的面不进表(缺身份是显式状态)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport { getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { runtimeLineage } from '../topology/naming/lineage'\nimport { formatRoleName, semantic, wall } from '../topology/naming/role-name'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * revolve 的 construct 词汇表:`bottom` / `top`(旋转轴两端的平面端面)+ `wall:<i>`。\n * 判定口径见 {@link revolveConstructRoles}。\n */\n\n/** options.axis 的宽松形态(数组或 {x,y,z})。 */\nfunction axisVec(v: unknown): readonly [number, number, number] {\n if (Array.isArray(v) && v.length >= 3 && v.every((n) => typeof n === 'number')) {\n return [v[0]!, v[1]!, v[2]!]\n }\n if (typeof v === 'object' && v !== null && 'x' in (v as object)) {\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n }\n return [0, 0, 1]\n}\n\n/**\n * revolve 的 construct 词汇枚举器(与 `extrudeConstructRoles` 同口径,轴来源不同:\n * extrude 从端面法向对差反推,revolve 直接用调用点声明的旋转轴)。\n *\n * @param kernel - the OCCT kernel.\n * @param solid - the revolved solid.\n * @param axis - the revolution axis (call-site declared; default [0,0,1]).\n * @returns role(线格式串)→ hash 子表。\n */\nfunction revolveConstructRoles(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n axisOpt: unknown,\n): Map<string, number[]> {\n const roles = new Map<string, number[]>()\n const faceHandles = kernel.getSubShapes(solid, 'face')\n try {\n const hashes = kernel.subShapeHashes(solid, 'face', 2147483647)\n const [ax0, ax1, ax2] = axisVec(axisOpt)\n const axLen = Math.hypot(ax0, ax1, ax2)\n if (axLen < 1e-9) return roles\n const ax: readonly [number, number, number] = [ax0 / axLen, ax1 / axLen, ax2 / axLen]\n\n const caps: { idx: number; t: number }[] = []\n const isPlaneCap: boolean[] = faceHandles.map((f) => {\n if (kernel.surfaceType(f) !== 'plane') return false\n const uv = kernel.uvBounds(f)\n const n = kernel.surfaceNormal(f, (uv.uMin + uv.uMax) / 2, (uv.vMin + uv.vMax) / 2)\n const len = Math.hypot(n.x, n.y, n.z) || 1\n const cos = Math.abs(n.x * ax[0]! + n.y * ax[1]! + n.z * ax[2]!) / len\n return cos > 0.999\n })\n for (let i = 0; i < faceHandles.length; i++) {\n if (hashes[i] === undefined) continue\n if (isPlaneCap[i]) {\n const c = kernel.surfaceCenterOfMass(faceHandles[i]!)\n caps.push({ idx: i, t: c.x * ax[0]! + c.y * ax[1]! + c.z * ax[2]! })\n }\n }\n if (caps.length >= 2) {\n // 常规旋转体:轴两端平面端面 = bottom/top,其余面(含曲面侧面)wall:<i>\n let wallIdx = 0\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined || isPlaneCap[i]) continue\n roles.set(formatRoleName(wall(wallIdx)), [hash])\n wallIdx++\n }\n caps.sort((p, q) => p.t - q.t)\n roles.set(formatRoleName(semantic('bottom')), [hashes[caps[0]!.idx]!])\n roles.set(formatRoleName(semantic('top')), [hashes[caps[caps.length - 1]!.idx]!])\n } else {\n // GOTCHA(退化形态,2026-09-23):轮廓面在轴平面内(如 XY 草图绕 Z 转)\n // 时产物的面法向全部 ∥ 轴 → caps 判不出两端。此时退化为按枚举序\n // wall:<i> 命名全部面——身份是能力,退化形态不给名字就会重演 nameless\n // shape 缺陷;枚举序稳定(同 extrude 的 wall 序依据)。\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined) continue\n roles.set(formatRoleName(wall(i)), [hash])\n }\n }\n return roles\n } finally {\n for (const h of faceHandles) {\n try { kernel.release(h) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 旋转成形:把平面轮廓绕轴旋转(兼容生成投影签名)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name revolve\n * @param face - 平面轮廓。type:Shape required:true\n * @param options - 旋转轴/点/角度(透传 vendored 语义)。type:RevolveOptions\n * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。\n * @example\n * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })\n */\nexport const revolve = defineOp({\n brep: async (face: Shape, options?: { axis?: unknown }) => {\n // vendored 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,\n // 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的\n // 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。\n const kernel = getBrepApi()\n const handle = brepOf(face) as BrepHandle\n if (!handle) throw new Error('[revolve] input is not BREP')\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: [number, number, number]\n axis?: [number, number, number]\n angle?: number\n }\n const revolved = kernel.revolveVec(handle, { x: at[0], y: at[1], z: at[2] }, { x: axis[0], y: axis[1], z: axis[2] }, (angle * 180) / Math.PI)\n const s = fromBrep(solidToShape(kernel, revolved), { solid: revolved }) as Shape\n if (!getBrepApi()) return s\n // E3(Q13 路线①):链根建 roleTable,origin = 语句 StmtId(Phase 1.6 口径)。\n // GOTCHA(2026-09-23):不能对 adoptEntity 的产物再走一次 fromBrep——同语句的\n // registeredStmtId 去重会让第二次登记被吞(探针实测:outputTables 里没有本\n // 语句键)。直接经 runtimeLineage.recordOutput 落语句键表;define-op 包装层\n // 会在 impl 返回后把它传播到 part 键权威位(edgeRef 的读口)。\n const origin = String(getCurrentStmt()?.id ?? '')\n const table = new Map([[origin, revolveConstructRoles(kernel, revolved, options?.axis)]])\n // GOTCHA:recordOutput 必须带第 4 参 part——part 键表(outputTablesByPart)\n // 是 op 实现与 edgeRef 解析的权威读口,只落语句键表时 part 键会保持\n // adoptEntity 时登记的空表(探针实测),下游仍报 no role lineage。\n const part = getCurrentStmt()?.outputs?.[0]\n runtimeLineage.recordOutput(origin as never, table, revolved, part as never)\n return s\n },\n naming: {\n kind: 'construct',\n newFaces: {\n via: 'explicit',\n vocab: [\n { kind: 'semantic', name: 'top' },\n { kind: 'semantic', name: 'bottom' },\n { kind: 'wall', index: 0 },\n ],\n },\n } as never,\n})\n"]}
|
|
1
|
+
{"version":3,"file":"revolve.js","sourceRoot":"","sources":["../../src/api/revolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)\n *\n * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由\n * 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,\n * 下游 `cad.edgeRef` 抛 \"nameless shape\"(ModelFromV021 缺陷)。\n *\n * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住\n * 投影调用,并在产物登记处建链根 roleTable(origin = 语句 StmtId,与\n * `extrude.ts` / `import-brep.ts` 同源机制)。\n *\n * 词汇表沿用生成 spec 的 construct 声明:`bottom` / `top`(旋转轴两端的平面\n * 端面)+ `wall:<i>`(其余侧面,按枚举序)。判定口径与 extrude 相同——现场\n * 几何是唯一真值:平面法向与轴 |cos| ≈ 1 → 端面,按中心沿轴坐标分 bottom/top;\n * 其余(含圆柱等曲面侧面)→ wall:i。无法分类的面不进表(缺身份是显式状态)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport { getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { runtimeLineage } from '../topology/naming/lineage'\nimport { formatRoleName, semantic, wall } from '../topology/naming/role-name'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * revolve 的 construct 词汇表:`bottom` / `top`(旋转轴两端的平面端面)+ `wall:<i>`。\n * 判定口径见 {@link revolveConstructRoles}。\n */\n\n/** options.axis 的宽松形态(数组或 {x,y,z})。 */\nfunction axisVec(v: unknown): readonly [number, number, number] {\n if (Array.isArray(v) && v.length >= 3 && v.every((n) => typeof n === 'number')) {\n return [v[0]!, v[1]!, v[2]!]\n }\n if (typeof v === 'object' && v !== null && 'x' in (v as object)) {\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n }\n return [0, 0, 1]\n}\n\n/**\n * revolve 的 construct 词汇枚举器(与 `extrudeConstructRoles` 同口径,轴来源不同:\n * extrude 从端面法向对差反推,revolve 直接用调用点声明的旋转轴)。\n *\n * @param kernel - the OCCT kernel.\n * @param solid - the revolved solid.\n * @param axis - the revolution axis (call-site declared; default [0,0,1]).\n * @returns role(线格式串)→ hash 子表。\n */\nfunction revolveConstructRoles(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n axisOpt: unknown,\n): Map<string, number[]> {\n const roles = new Map<string, number[]>()\n const faceHandles = kernel.getSubShapes(solid, 'face')\n try {\n const hashes = kernel.subShapeHashes(solid, 'face', 2147483647)\n const [ax0, ax1, ax2] = axisVec(axisOpt)\n const axLen = Math.hypot(ax0, ax1, ax2)\n if (axLen < 1e-9) return roles\n const ax: readonly [number, number, number] = [ax0 / axLen, ax1 / axLen, ax2 / axLen]\n\n const caps: { idx: number; t: number }[] = []\n const isPlaneCap: boolean[] = faceHandles.map((f) => {\n if (kernel.surfaceType(f) !== 'plane') return false\n const uv = kernel.uvBounds(f)\n const n = kernel.surfaceNormal(f, (uv.uMin + uv.uMax) / 2, (uv.vMin + uv.vMax) / 2)\n const len = Math.hypot(n.x, n.y, n.z) || 1\n const cos = Math.abs(n.x * ax[0]! + n.y * ax[1]! + n.z * ax[2]!) / len\n return cos > 0.999\n })\n for (let i = 0; i < faceHandles.length; i++) {\n if (hashes[i] === undefined) continue\n if (isPlaneCap[i]) {\n const c = kernel.surfaceCenterOfMass(faceHandles[i]!)\n caps.push({ idx: i, t: c.x * ax[0]! + c.y * ax[1]! + c.z * ax[2]! })\n }\n }\n if (caps.length >= 2) {\n // 常规旋转体:轴两端平面端面 = bottom/top,其余面(含曲面侧面)wall:<i>\n let wallIdx = 0\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined || isPlaneCap[i]) continue\n roles.set(formatRoleName(wall(wallIdx)), [hash])\n wallIdx++\n }\n caps.sort((p, q) => p.t - q.t)\n roles.set(formatRoleName(semantic('bottom')), [hashes[caps[0]!.idx]!])\n roles.set(formatRoleName(semantic('top')), [hashes[caps[caps.length - 1]!.idx]!])\n } else {\n // GOTCHA(退化形态,2026-09-23):轮廓面在轴平面内(如 XY 草图绕 Z 转)\n // 时产物的面法向全部 ∥ 轴 → caps 判不出两端。此时退化为按枚举序\n // wall:<i> 命名全部面——身份是能力,退化形态不给名字就会重演 nameless\n // shape 缺陷;枚举序稳定(同 extrude 的 wall 序依据)。\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined) continue\n roles.set(formatRoleName(wall(i)), [hash])\n }\n }\n return roles\n } finally {\n for (const h of faceHandles) {\n try { kernel.release(h) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 旋转成形:把平面轮廓绕轴旋转(兼容生成投影签名)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name revolve\n * @param face - 平面轮廓。type:Shape required:true\n * @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions\n * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。\n * @example\n * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })\n */\nexport const revolve = defineOp({\n brep: async (face: Shape, options?: { axis?: unknown }) => {\n // compat 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,\n // 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的\n // 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。\n const kernel = getBrepApi()\n const handle = brepOf(face) as BrepHandle\n if (!handle) throw new Error('[revolve] input is not BREP')\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: [number, number, number]\n axis?: [number, number, number]\n angle?: number\n }\n const revolved = kernel.revolveVec(handle, { x: at[0], y: at[1], z: at[2] }, { x: axis[0], y: axis[1], z: axis[2] }, (angle * 180) / Math.PI)\n const s = fromBrep(solidToShape(kernel, revolved), { solid: revolved }) as Shape\n if (!getBrepApi()) return s\n // E3(Q13 路线①):链根建 roleTable,origin = 语句 StmtId(Phase 1.6 口径)。\n // GOTCHA(2026-09-23):不能对 adoptEntity 的产物再走一次 fromBrep——同语句的\n // registeredStmtId 去重会让第二次登记被吞(探针实测:outputTables 里没有本\n // 语句键)。直接经 runtimeLineage.recordOutput 落语句键表;define-op 包装层\n // 会在 impl 返回后把它传播到 part 键权威位(edgeRef 的读口)。\n const origin = String(getCurrentStmt()?.id ?? '')\n const table = new Map([[origin, revolveConstructRoles(kernel, revolved, options?.axis)]])\n // GOTCHA:recordOutput 必须带第 4 参 part——part 键表(outputTablesByPart)\n // 是 op 实现与 edgeRef 解析的权威读口,只落语句键表时 part 键会保持\n // adoptEntity 时登记的空表(探针实测),下游仍报 no role lineage。\n const part = getCurrentStmt()?.outputs?.[0]\n runtimeLineage.recordOutput(origin as never, table, revolved, part as never)\n return s\n },\n naming: {\n kind: 'construct',\n newFaces: {\n via: 'explicit',\n vocab: [\n { kind: 'semantic', name: 'top' },\n { kind: 'semantic', name: 'bottom' },\n { kind: 'wall', index: 0 },\n ],\n },\n } as never,\n})\n"]}
|
package/dist/api/screw.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* api screw — 螺丝创建库函数(creator 函数,无输入)
|
|
3
3
|
*
|
|
4
4
|
* 平台分层(narrowing plan Phase 5,D11):**平台 op(occt)**——BREP 路径的
|
|
5
|
-
* 螺纹经 `threadBrep`(brep-
|
|
5
|
+
* 螺纹经 `threadBrep`(brep-operations/threadFns.ts)走 occt-only `loft`(D3)→
|
|
6
6
|
* `engines: ['occt']`。mesh 路径(cad.screw)在 auto 模式下正常降级。
|
|
7
7
|
*
|
|
8
8
|
* dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。
|
package/dist/api/screw.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screw.d.ts","sourceRoot":"","sources":["../../src/api/screw.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"screw.d.ts","sourceRoot":"","sources":["../../src/api/screw.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AA2H1C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASvE;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,eAAO,MAAM,KAAK;;CAoBhB,CAAA"}
|
package/dist/api/screw.js
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* api screw — 螺丝创建库函数(creator 函数,无输入)
|
|
3
3
|
*
|
|
4
4
|
* 平台分层(narrowing plan Phase 5,D11):**平台 op(occt)**——BREP 路径的
|
|
5
|
-
* 螺纹经 `threadBrep`(brep-
|
|
5
|
+
* 螺纹经 `threadBrep`(brep-operations/threadFns.ts)走 occt-only `loft`(D3)→
|
|
6
6
|
* `engines: ['occt']`。mesh 路径(cad.screw)在 auto 模式下正常降级。
|
|
7
7
|
*
|
|
8
8
|
* dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.
|
|
11
|
+
import * as meshPrimitives from '../mesh/primitives.js';
|
|
11
12
|
import { solidToShape } from '../brep/brep-ops.js';
|
|
12
|
-
import { threadBrep } from './brep-
|
|
13
|
+
import { threadBrep } from './brep-operations/threadFns.js';
|
|
13
14
|
import { getScrewSpec, threadToPitchMm, SCREW_HEAD_DIMS } from '../primitives/screw/screw-db.js';
|
|
14
15
|
import { getBrepApi } from '../brep/handle-bridge.js';
|
|
15
16
|
import { fromBrep } from '../shape.js';
|
|
@@ -145,7 +146,7 @@ export function assertScrewParams(params) {
|
|
|
145
146
|
export const screw = defineOp({
|
|
146
147
|
mesh: async (params) => {
|
|
147
148
|
assertScrewParams(params);
|
|
148
|
-
return
|
|
149
|
+
return meshPrimitives.screw({
|
|
149
150
|
system: params.system,
|
|
150
151
|
specIdx: params.specIdx,
|
|
151
152
|
thread: params.thread,
|