@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
|
@@ -180,102 +180,60 @@ export interface BrepUvBounds {
|
|
|
180
180
|
}
|
|
181
181
|
/** 子形状类型(getSubShapes / subShapeHashes 等)。 */
|
|
182
182
|
export type BrepSubShapeType = 'vertex' | 'edge' | 'wire' | 'face' | 'shell' | 'solid';
|
|
183
|
+
/**
|
|
184
|
+
* XCAF label 句柄(`addShape` / `addChild` 的返回值,仅在所属文档内有效)。
|
|
185
|
+
*/
|
|
186
|
+
export type BrepXcafLabel = number & {
|
|
187
|
+
readonly __brepXcafLabel: 'BrepXcafLabel';
|
|
188
|
+
};
|
|
183
189
|
/**
|
|
184
190
|
* XCAF 装配文档句柄(可选能力槽 AssemblyCapability 的文档形态)。
|
|
185
191
|
*
|
|
186
192
|
* 形态来自 occt-wasm XCAFDocumentImpl 的被调用子集(step.ts / occt-kernel 装配链)。
|
|
193
|
+
* `addChild` 支撑真装配写入(方案 2026-10-08 步骤 7 / P3):组件位姿经
|
|
194
|
+
* `location`(平移 + Euler 弧度)落到 XCAF location,导出为装配引用而非平级 PRODUCT。
|
|
187
195
|
*/
|
|
188
196
|
export interface BrepXcafDocument {
|
|
197
|
+
/** 顶层 part / 装配 label。返回的 label 可作为 `addChild` 的父。 */
|
|
189
198
|
addShape(shape: BrepHandle, opts?: {
|
|
190
199
|
name?: string;
|
|
191
200
|
color?: [number, number, number];
|
|
192
|
-
}):
|
|
201
|
+
}): BrepXcafLabel;
|
|
202
|
+
/**
|
|
203
|
+
* 把 shape 作为 parent 的子组件加入(parent 是 part 时,首个 child 使其转为
|
|
204
|
+
* assembly:原几何移入 identity 首组件并携带 part 的名与色)。
|
|
205
|
+
*/
|
|
206
|
+
addChild(parent: BrepXcafLabel, shape: BrepHandle, opts?: {
|
|
207
|
+
name?: string;
|
|
208
|
+
color?: [number, number, number];
|
|
209
|
+
/** 组件相对父的位姿:平移 + Euler 角(弧度)。⚠️ occt-wasm 当前只生效平移
|
|
210
|
+
* (旋转分量写出→回读恒 identity,step-export.test.ts P7 钉住)——旋转由
|
|
211
|
+
* 调用方烘进几何,wasm 修复后恢复 location 携带完整位姿。 */
|
|
212
|
+
location?: {
|
|
213
|
+
tx?: number;
|
|
214
|
+
ty?: number;
|
|
215
|
+
tz?: number;
|
|
216
|
+
rx?: number;
|
|
217
|
+
ry?: number;
|
|
218
|
+
rz?: number;
|
|
219
|
+
};
|
|
220
|
+
}): BrepXcafLabel;
|
|
193
221
|
exportSTEP(): string;
|
|
194
222
|
close(): void;
|
|
195
223
|
}
|
|
196
224
|
/**
|
|
197
|
-
*
|
|
198
|
-
* P7 并入;faijs 侧零内核依赖,不 import vendored 树——D8 反向只允许发生在 api/)。
|
|
225
|
+
* 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**。
|
|
199
226
|
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* `mesh()`/导出时的默认 deflection。
|
|
203
|
-
* - `'none'` — 无细分控制(或非网格内核)。
|
|
204
|
-
*/
|
|
205
|
-
export type BrepTessellationModel = 'build-time' | 'extract-time' | 'none';
|
|
206
|
-
/**
|
|
207
|
-
* 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**声明。
|
|
208
|
-
*
|
|
209
|
-
* ⚠️ **为什么不能是一个布尔位**(2026-09-22 Phase 0.2):`evolution: true` 是**族级**声明。
|
|
210
|
-
* 而「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,
|
|
227
|
+
* ⚠️ **为什么不是一个布尔位**(2026-09-22 Phase 0.2,事实不变):家族化命名会**多报**。
|
|
228
|
+
* 「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,
|
|
211
229
|
* 内核可以只提供其中一部分。`brepkit` 就是活例:它提供 `fuse`/`cut`/`fillet`,
|
|
212
230
|
* `chamfer`/`intersect`/`translate`/… 一律 `unsupported(...)`
|
|
213
231
|
* (`brepkit-kernel/brepkitKernel.ts:220-537`)。
|
|
214
232
|
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* 静态判定之所以能成立,前提是引擎的能力声明**说的是逐核函数的实话**。
|
|
219
|
-
*
|
|
220
|
-
* ⇒ 引擎声明"我提供哪几个"(`BrepCapabilities.evolution`),op 声明"我要哪一个"
|
|
221
|
-
* (`defineOp.capabilities`),两者**按名字求交集**(`cad-runtime/backend-dispatch.ts`)。
|
|
233
|
+
* 本类型是「面演化核函数有哪些」的**名字全集**,供 `hasNativeHistory`
|
|
234
|
+
* (`brep/engine/native-history.ts`)按引擎身份逐名回答"这个引擎原生有没有它"。
|
|
235
|
+
* 没有声明轴:op 不声明要哪个核函数,分派时也不查任何能力表。
|
|
222
236
|
*/
|
|
223
237
|
export type BrepEvolutionKind = 'fuseWithHistory' | 'cutWithHistory' | 'intersectWithHistory' | 'filletWithHistory' | 'chamferWithHistory' | 'translateWithHistory' | 'rotateWithHistory' | 'mirrorWithHistory' | 'scaleWithHistory' | 'shellWithHistory' | 'offsetWithHistory' | 'thickenWithHistory';
|
|
224
|
-
/**
|
|
225
|
-
* 非演化内核方法真名(`*WithHistory` 之外的 `BrepEngineApi` 方法)。
|
|
226
|
-
*
|
|
227
|
-
* 与 `BrepEvolutionKind` 分名(P3 冲突消除):`'mirror'` 一个字符串不能同时表示
|
|
228
|
-
* "提供 `mirrorWithHistory`"与"提供 `mirror`",两族必须互不共用字符串。
|
|
229
|
-
* 语义与 evolution 相同——**逐核函数**声明:声明 = 实现(诚实原则),
|
|
230
|
-
* 缺省/空 = 一个都不提供。
|
|
231
|
-
*
|
|
232
|
-
* 初始全集 = Phase 0 能力映射表(`api/surface/capability-map.json`)盘点的
|
|
233
|
-
* compat op 依赖内核方法 + 方案初始项;Phase 3 全量收敛时按映射表滚动补全。
|
|
234
|
-
*/
|
|
235
|
-
export type BrepMethodKind = 'linearPattern' | 'circularPattern' | 'gridPattern' | 'rectangularPattern' | 'mirror' | 'rotate' | 'translate' | 'scale' | 'chamfer' | 'chamferDistAngle' | 'fillet' | 'filletVariable' | 'makeRectangle' | 'shell' | 'extrude' | 'loft' | 'loftAdvanced' | 'section' | 'sweepPipeShell' | 'simplePipe' | 'revolveVec' | 'buildExtrusionLaw' | 'fuse' | 'cut' | 'intersect' | 'fuseAll' | 'makeArcEdge' | 'makeCircleEdge' | 'makeBezierEdge' | 'makeCylinder' | 'makeEllipsoid' | 'makeFace' | 'makeFaceOnSurface' | 'makeLineEdge' | 'makeTorus' | 'makeVertex' | 'makeWire' | 'makeWireFromMixed' | 'buildEdgeOnSurface' | 'addHolesInFace' | 'buildTriFace' | 'sew' | 'sewAndSolidify' | 'healFace' | 'healSolid' | 'healWire' | 'fixShape' | 'fixSelfIntersection' | 'isValid' | 'removeDegenerateEdges' | 'simplify' | 'split' | 'getBoundingBox' | 'getVolume' | 'getSurfaceArea' | 'getLength' | 'getCenterOfMass' | 'curveParameters' | 'curvePointAtParam' | 'curveTangent' | 'hullFromPoints' | 'isNull' | 'iterShapes' | 'locate' | 'shapeType' | 'surfaceCenterOfMass' | 'surfaceNormal' | 'surfaceType' | 'uvBounds' | 'composeTransform' | 'applyComposedTransformWithHistory' | 'generalTransformNonOrthogonal' | 'generalTransformWithHistory' | 'sectionByPlane' | 'makeCompound' | 'located' | 'getSubShapes' | 'transform' | 'generalTransform' | 'importStl' | 'createXCAFDocument' | 'importXCAFFromSTEP' | 'copyShape' | 'dispose' | 'downcast' | 'hashCode';
|
|
236
|
-
/**
|
|
237
|
-
* 可选能力槽声明(§7.5,Phase 1 钉死成员)。
|
|
238
|
-
*
|
|
239
|
-
* 缺失的能力 → 依赖它的功能静态降级走 mesh(§8.4),绝不伪造。
|
|
240
|
-
*
|
|
241
|
-
* P7 并入(D4):移植 brepjs `KernelCapabilities` 的数据字段(exact/brepExport/
|
|
242
|
-
* exactMeasurement/tessellationModel)进本模型,由适配器在注册时如实声明;分派逻辑
|
|
243
|
-
* (backend-dispatch 的 BrepCapabilityName 路由)不改——新字段是引擎本质描述,不是
|
|
244
|
-
* 逐 op 路由键。
|
|
245
|
-
*
|
|
246
|
-
* 未并入 `disposalModel`(D5 决策,与 vendored port 一致):faijs 的句柄释放由
|
|
247
|
-
* `cad-runtime` 顶替释放统一编排(增量失败回滚前提),brepjs 的 DisposalScope/arena
|
|
248
|
-
* 语义不强制统一,故不作为能力位记录。
|
|
249
|
-
*/
|
|
250
|
-
export interface BrepCapabilities {
|
|
251
|
-
/**
|
|
252
|
-
* 面演化族:本引擎**实际提供**的 `*WithHistory` 核函数名(不是族级布尔,见
|
|
253
|
-
* `BrepEvolutionKind`)。空数组 / 缺省 = 一个都不提供。
|
|
254
|
-
*/
|
|
255
|
-
evolution?: readonly BrepEvolutionKind[];
|
|
256
|
-
/**
|
|
257
|
-
* 非演化内核方法族:本引擎**实际提供**的 `BrepEngineApi` 方法真名
|
|
258
|
-
* (逐核声明,与 `evolution` 同语义;空数组 / 缺省 = 一个都不提供)。
|
|
259
|
-
*/
|
|
260
|
-
methods?: readonly BrepMethodKind[];
|
|
261
|
-
/** 修复族(healSolid/fixShape/fixFaceOrientations/...) */
|
|
262
|
-
heal?: boolean;
|
|
263
|
-
/** 直接编辑族(C1:moveFace/replaceFace/...) */
|
|
264
|
-
directEdit?: boolean;
|
|
265
|
-
/** 高级曲面族(C1:boundarySurface/fillSurface/...) */
|
|
266
|
-
advSurface?: boolean;
|
|
267
|
-
/** XCAF 装配族 */
|
|
268
|
-
assembly?: boolean;
|
|
269
|
-
/** mesh→BREP 提升(buildTriFace/sewAndSolidify) */
|
|
270
|
-
meshLift?: boolean;
|
|
271
|
-
/** 精确 B-rep 几何(vs mesh 近似)——brepjs KernelCapabilities.exact 并入 */
|
|
272
|
-
exact?: boolean;
|
|
273
|
-
/** 可序列化为 B-rep 交换格式(BREP/STEP)——brepjs brepExport 并入 */
|
|
274
|
-
brepExport?: boolean;
|
|
275
|
-
/** 体积/面积/长度匹配解析值(vs mesh 近似)——brepjs exactMeasurement 并入 */
|
|
276
|
-
exactMeasurement?: boolean;
|
|
277
|
-
/** 细分精度控制模型——brepjs tessellationModel 并入 */
|
|
278
|
-
tessellationModel?: BrepTessellationModel;
|
|
279
|
-
}
|
|
280
238
|
export {};
|
|
281
239
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAU,CAAA;AAgCxE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA","sourcesContent":["/**\n * engine/types — BREP 引擎中立类型(零具体实现依赖,不 import 任何内核包)\n *\n *\n * 契约(对应 brepjs 的 KernelShape 约定):\n * - L1 及以上代码永远不对句柄调用任何方法,只把它传回产生它的那个引擎;\n * - 句柄不得跨引擎传递——跨引擎必须先经 mesh 层(§8.3 的结构保证)。\n * - OCCT 适配器的句柄运行时就是 number,加 brand 是零成本的类型层转换。\n */\n\n/**\n * BREP 引擎身份(D11-1,2026-09-24 narrowing plan)。\n *\n * 三个值来自三个已存在的引擎 id 常量(`OCCT_BREP_ENGINE_ID` / `BREPKIT_BREP_ENGINE_ID`\n * / `BREP_MOCK_ENGINE_ID`,各自适配器导出);本类型由常量数组推导,禁止裸 `string`。\n * 适配器常量用 `satisfies BrepEngineId` 收窄(typecheck 钉住集合一致)。\n *\n * 消费点:`defineOp` 的 `engines` 声明(平台 op 自证身份)、`dispatchPath` 的平台\n * 身份分支(D11-2)、`script-face-manifest` 的平台 op 标注(§3.8)。\n */\nexport const BREP_ENGINE_IDS = ['occt', 'brepkit', 'brep_mock'] as const\n\n/** BREP 引擎身份(固定三值联合;由 {@link BREP_ENGINE_IDS} 推导)。 */\nexport type BrepEngineId = (typeof BREP_ENGINE_IDS)[number]\n\ndeclare const BrepHandleBrand: unique symbol\n\n/**\n * BREP 实体句柄——不透明值。\n *\n * 与 occt-wasm 的 ShapeHandle 同构(number & brand)。OCCT 适配器\n * (occt-kernel/)内部以 `as unknown as` 双向转换,跨适配器边界零运行时成本。\n */\nexport type BrepHandle = number & { readonly [BrepHandleBrand]: never }\n\n/** 三维点/向量(与内核无关的中立形态)。 */\nexport interface BrepVec3 {\n x: number\n y: number\n z: number\n}\n\n/** 轴对齐包围盒。 */\nexport interface BrepBoundingBox {\n xmin: number\n ymin: number\n zmin: number\n xmax: number\n ymax: number\n zmax: number\n}\n\n/**\n * 面/边 hash 的上界(唯一真源)。\n *\n * 拓扑提取侧用 `kernel.hashCode(subShape, BREP_HASH_BOUND)` 查面/边,\n * 三角化/线框侧把 hash 写进 `faceGroups[·+2]` / `edgeGroups[·+2]`——\n * **两侧必须对同一上界取模**,否则查表恒 miss(实测 2026-10-01:\n * brepkit 适配器曾用 1e9、topologyExt 用 INT32_MAX → 面行 triangleCount 全 0)。\n * 值取自 OCCT `HASH_CODE_MAX` 惯例,也是 occt-wasm 的实际口径(实测一致)。\n */\nexport const BREP_HASH_BOUND = 2147483647\n\n/**\n * BRepMesh 三角化输出(镜像 occt-wasm Mesh 的中立形态)。\n *\n * ⚠️ 单位口径(L1 契约的一部分,实测钉死):\n * - `faceGroups` 三元组 = `[triStart, triCount, faceHash]`,前两元是**索引单位**\n * (3/三角形),不是三角形单位;\n * - `wireframe().edgeGroups` = `[pointStart, pointCount, edgeHash]`,前两元是\n * **浮点单位**(3/点)。\n * 修订任何一侧都要同步改另一侧与 brepkit 适配器(跨引擎一致性测试\n * `topology/face-group-units.test.ts` 钉住)。\n */\nexport interface BrepMeshResult {\n /** XYZ 交错顶点坐标,长度 = vertexCount * 3 */\n positions: Float32Array\n /** XYZ 交错顶点法线,长度 = vertexCount * 3 */\n normals: Float32Array\n /** 三角形索引 */\n indices: Uint32Array\n /** 顶点数(positions.length / 3) */\n vertexCount: number\n /** 三角形数(indices.length / 3) */\n triangleCount: number\n /** 面组:[triStart, triCount, faceHash] 三元组(meshShape 时存在) */\n faceGroups?: Int32Array\n /** 面组数(meshShape 时存在) */\n faceCount?: number\n}\n\n/** 三角化精度选项。 */\nexport interface BrepTessellateOptions {\n /** 最大弦偏差(mm),默认 0.1 */\n linearDeflection?: number\n /** 最大角偏差(弧度),默认 0.5 */\n angularDeflection?: number\n /** 按每条边长度相对解释 linearDeflection */\n relative?: boolean\n}\n\n/** 边折线数据(wireframe 输出)。 */\nexport interface BrepEdgeData {\n /** XYZ 交错边采样点 */\n points: Float32Array\n /** 每边分组:[pointStart, pointCount, edgeHash] 三元组;前两元为**浮点单位**(3/点)。 */\n edgeGroups: Int32Array\n /** points 中的浮点数总数(= XYZ 坐标数) */\n pointCount: number\n /** 不同边的数量 */\n edgeCount: number\n}\n\n/**\n * *WithHistory 面演化数据(modified/generated/deleted 用面 hash 编码)。\n *\n * ⚠️ **三个字段的编码不同,实测于 2026-09-22(`brep/engine/phase0-kernel-probes.test.ts`),\n * 与 occt-wasm 自己的文档(`dist/types.d.ts:227-231`)不符**:\n *\n * | 字段 | 实际编码 | 键/值语义 |\n * |---|---|---|\n * | `modified` | **分段** `[inHash, count, outHash…] × N` | 键 = 输入面 hash;值 = 该输入面在结果里的**后继**(可 1→N) |\n * | `generated` | **同构分段**,**键集与 `modified` 相同** | 值 = 该输入面派生出的**中间形**(实测结果里 0 存活) |\n * | `deleted` | **扁平** hash 数组 | 输入面中已不存在的面 |\n *\n * 「扁平数组」的读法会把 `generated` 的 count 字段当成 hash——\n * 实测 `cut` 的 `generated` 里真的含 `2`(一个 count),故该误读不会自己暴露。\n *\n * ⚠️ **未受影响的面有两种上报形态,两种都表示\"未变\"**:自映射(`i -> [i]`)。\n * 或者**整个不上报**(`fillet` 实测两者并存)。⇒ 读法必须是\n * `modified.get(h) ?? [h]`,不能只看\"是否出现在 `modified` 里\"。\n *\n * ⇒ 结果面的三种命运(判据见 `phase0-kernel-probes.test.ts`):\n * **原样幸存**(hash ∈ 输入 hash 集合,hash 逐字不变)/ **改型幸存**(在 `modified` 输出里)/\n * **新造**(两者皆非——这才是真正需要派生词汇命名的面,如 `fillet` 的过渡面)。\n */\nexport interface BrepEvolutionData {\n /** 结果句柄 */\n result: BrepHandle\n /** 分段:`[inHash, count, outHash…] × N`;值 = 该输入面的结果后继 */\n modified: number[]\n /** 分段(键集同 `modified`):该输入面派生的中间形 hash,实测结果里 0 存活 */\n generated: number[]\n /** 扁平:输入面中已不存在的面 hash */\n deleted: number[]\n}\n\n/** 曲线参数区间(与内核 curveParameters 返回同构:first/last)。 */\nexport interface BrepCurveParameters {\n first: number\n last: number\n}\n\n/**\n * NURBS control data of one edge's BASIS curve.\n *\n * ⚠️ This is the WHOLE basis curve, not the edge: an OCCT edge is often only a\n * sub-range of its curve, so `curveParameters(edge)` is the trim to apply on top\n * of this (`BRep_Tool::Curve` hands back both halves). Rebuilding an edge from\n * this data without honouring that trim produces a curve running past its\n * neighbour's start (measured 2026-09-29).\n *\n * `poles` is flat `[x,y,z, x,y,z, …]`; `weights` has one entry per pole (all 1\n * for a non-rational curve, and `rational` then says whether they mean anything);\n * `knots`/`multiplicities` are parallel arrays (expanded, the knot vector is\n * `knots[i]` repeated `multiplicities[i]` times and has `poles + degree + 1`\n * entries).\n */\nexport interface BrepNurbsCurveData {\n /** Polynomial degree. */\n degree: number\n /** True when `weights` are meaningful (a rational curve). */\n rational: boolean\n /** True for a periodic (closed, wrap-around) curve. */\n periodic: boolean\n /** Distinct knot values, parallel to `multiplicities`. */\n knots: number[]\n /** Multiplicity of each entry in `knots`. */\n multiplicities: number[]\n /** Flat control points: `[x, y, z, x, y, z, …]`. */\n poles: number[]\n /** One weight per control point. */\n weights: number[]\n}\n\n/** 曲面 UV 边界。 */\nexport interface BrepUvBounds {\n uMin: number\n uMax: number\n vMin: number\n vMax: number\n}\n\n/** 子形状类型(getSubShapes / subShapeHashes 等)。 */\nexport type BrepSubShapeType = 'vertex' | 'edge' | 'wire' | 'face' | 'shell' | 'solid'\n\n/**\n * XCAF 装配文档句柄(可选能力槽 AssemblyCapability 的文档形态)。\n *\n * 形态来自 occt-wasm XCAFDocumentImpl 的被调用子集(step.ts / occt-kernel 装配链)。\n */\nexport interface BrepXcafDocument {\n addShape(shape: BrepHandle, opts?: { name?: string; color?: [number, number, number] }): void\n exportSTEP(): string\n close(): void\n}\n\n/**\n * 曲面细分精度控制模型(与 brepjs KernelCapabilities.tessellationModel 同构的中立镜像,\n * P7 并入;faijs 侧零内核依赖,不 import vendored 树——D8 反向只允许发生在 api/)。\n *\n * - `'build-time'` — 网格在实体构造时固定(如 manifold 全局分段设置);质量参数须在构造前应用。\n * - `'extract-time'`— 形状是精确的,按需以每调用 deflection 细分(如 OCCT);质量是\n * `mesh()`/导出时的默认 deflection。\n * - `'none'` — 无细分控制(或非网格内核)。\n */\nexport type BrepTessellationModel = 'build-time' | 'extract-time' | 'none'\n\n/**\n * 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**声明。\n *\n * ⚠️ **为什么不能是一个布尔位**(2026-09-22 Phase 0.2):`evolution: true` 是**族级**声明。\n * 而「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,\n * 内核可以只提供其中一部分。`brepkit` 就是活例:它提供 `fuse`/`cut`/`fillet`,\n * `chamfer`/`intersect`/`translate`/… 一律 `unsupported(...)`\n * (`brepkit-kernel/brepkitKernel.ts:220-537`)。\n *\n * 族级布尔的后果不是\"少报\"而是**多报**:`cad.intersect` 声明需要 `evolution`,\n * 在 `evolution: true` 下通过静态判定 → 落到运行时才撞 `unsupported('intersectWithHistory')`。\n * 这直接违反 AGENTS.md 红线「BREP 路径能否走由静态规则判定,禁止运行时回退」——\n * 静态判定之所以能成立,前提是引擎的能力声明**说的是逐核函数的实话**。\n *\n * ⇒ 引擎声明\"我提供哪几个\"(`BrepCapabilities.evolution`),op 声明\"我要哪一个\"\n * (`defineOp.capabilities`),两者**按名字求交集**(`cad-runtime/backend-dispatch.ts`)。\n */\nexport type BrepEvolutionKind =\n // 布尔族\n | 'fuseWithHistory'\n | 'cutWithHistory'\n | 'intersectWithHistory'\n // 倒圆/倒角族\n | 'filletWithHistory'\n | 'chamferWithHistory'\n // 刚体变换族\n | 'translateWithHistory'\n | 'rotateWithHistory'\n | 'mirrorWithHistory'\n | 'scaleWithHistory'\n // 抽壳/偏置/加厚族\n | 'shellWithHistory'\n | 'offsetWithHistory'\n | 'thickenWithHistory'\n\n/**\n * 非演化内核方法真名(`*WithHistory` 之外的 `BrepEngineApi` 方法)。\n *\n * 与 `BrepEvolutionKind` 分名(P3 冲突消除):`'mirror'` 一个字符串不能同时表示\n * \"提供 `mirrorWithHistory`\"与\"提供 `mirror`\",两族必须互不共用字符串。\n * 语义与 evolution 相同——**逐核函数**声明:声明 = 实现(诚实原则),\n * 缺省/空 = 一个都不提供。\n *\n * 初始全集 = Phase 0 能力映射表(`api/surface/capability-map.json`)盘点的\n * compat op 依赖内核方法 + 方案初始项;Phase 3 全量收敛时按映射表滚动补全。\n */\nexport type BrepMethodKind =\n // pattern 族\n | 'linearPattern'\n | 'circularPattern'\n | 'gridPattern'\n | 'rectangularPattern'\n // 基础方法族(裸方法,无历史)\n | 'mirror'\n | 'rotate'\n | 'translate'\n | 'scale'\n // 倒角/圆角基础方法(directEdit 族下的逐核真名,Phase 2:chamfer op 能力声明\n // 精确到内核方法——brepkit 无 chamfer/chamferDistAngle,静态判定执行前报错)\n | 'chamfer'\n | 'chamferDistAngle'\n | 'fillet'\n | 'filletVariable'\n // 构形/拉伸/放样族\n | 'makeRectangle'\n | 'shell'\n | 'extrude'\n | 'loft'\n | 'loftAdvanced'\n | 'section'\n | 'sweepPipeShell'\n | 'simplePipe'\n | 'revolveVec'\n | 'buildExtrusionLaw'\n // 布尔/装配辅助(裸方法)\n | 'fuse'\n | 'cut'\n | 'intersect'\n | 'fuseAll'\n // 构造方法族\n | 'makeArcEdge'\n | 'makeCircleEdge'\n | 'makeBezierEdge'\n | 'makeCylinder'\n | 'makeEllipsoid'\n | 'makeFace'\n | 'makeFaceOnSurface'\n | 'makeLineEdge'\n | 'makeTorus'\n | 'makeVertex'\n | 'makeWire'\n | 'makeWireFromMixed'\n | 'buildEdgeOnSurface'\n | 'addHolesInFace'\n | 'buildTriFace'\n | 'sew'\n | 'sewAndSolidify'\n // 修复/校验族\n | 'healFace'\n | 'healSolid'\n | 'healWire'\n | 'fixShape'\n | 'fixSelfIntersection'\n | 'isValid'\n | 'removeDegenerateEdges'\n | 'simplify'\n | 'split'\n // 查询/测量族\n // ⚠️ 测量族能力名用 L1 中立名(D5,narrowing plan):`getBoundingBox` / `getVolume`\n // / `getSurfaceArea` / `getLength` / `getCenterOfMass` ——能力名 == BrepEngineApi 接口名,\n // 守卫「能力声明诚实」据此逐名断言适配器是 function。vendored 面自己的原生名\n // (boundingBox/volume/area/length)按其自身命名,\n // 不是能力名空间成员。\n | 'getBoundingBox'\n | 'getVolume'\n | 'getSurfaceArea'\n | 'getLength'\n | 'getCenterOfMass'\n | 'curveParameters'\n | 'curvePointAtParam'\n | 'curveTangent'\n | 'hullFromPoints'\n | 'isNull'\n | 'iterShapes'\n | 'locate'\n | 'shapeType'\n | 'surfaceCenterOfMass'\n | 'surfaceNormal'\n | 'surfaceType'\n | 'uvBounds'\n // 变换族(非演化真名)\n | 'composeTransform'\n | 'applyComposedTransformWithHistory'\n | 'generalTransformNonOrthogonal'\n | 'generalTransformWithHistory'\n // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade wiring.\n | 'sectionByPlane'\n | 'makeCompound'\n | 'located'\n | 'getSubShapes'\n | 'transform'\n | 'generalTransform'\n // 交换/导入族\n | 'importStl'\n | 'createXCAFDocument'\n | 'importXCAFFromSTEP'\n // 生命周期辅助\n | 'copyShape'\n | 'dispose'\n | 'downcast'\n | 'hashCode'\n\n/**\n * 可选能力槽声明(§7.5,Phase 1 钉死成员)。\n *\n * 缺失的能力 → 依赖它的功能静态降级走 mesh(§8.4),绝不伪造。\n *\n * P7 并入(D4):移植 brepjs `KernelCapabilities` 的数据字段(exact/brepExport/\n * exactMeasurement/tessellationModel)进本模型,由适配器在注册时如实声明;分派逻辑\n * (backend-dispatch 的 BrepCapabilityName 路由)不改——新字段是引擎本质描述,不是\n * 逐 op 路由键。\n *\n * 未并入 `disposalModel`(D5 决策,与 vendored port 一致):faijs 的句柄释放由\n * `cad-runtime` 顶替释放统一编排(增量失败回滚前提),brepjs 的 DisposalScope/arena\n * 语义不强制统一,故不作为能力位记录。\n */\nexport interface BrepCapabilities {\n /**\n * 面演化族:本引擎**实际提供**的 `*WithHistory` 核函数名(不是族级布尔,见\n * `BrepEvolutionKind`)。空数组 / 缺省 = 一个都不提供。\n */\n evolution?: readonly BrepEvolutionKind[]\n /**\n * 非演化内核方法族:本引擎**实际提供**的 `BrepEngineApi` 方法真名\n * (逐核声明,与 `evolution` 同语义;空数组 / 缺省 = 一个都不提供)。\n */\n methods?: readonly BrepMethodKind[]\n /** 修复族(healSolid/fixShape/fixFaceOrientations/...) */\n heal?: boolean\n /** 直接编辑族(C1:moveFace/replaceFace/...) */\n directEdit?: boolean\n /** 高级曲面族(C1:boundarySurface/fillSurface/...) */\n advSurface?: boolean\n /** XCAF 装配族 */\n assembly?: boolean\n /** mesh→BREP 提升(buildTriFace/sewAndSolidify) */\n meshLift?: boolean\n /** 精确 B-rep 几何(vs mesh 近似)——brepjs KernelCapabilities.exact 并入 */\n exact?: boolean\n /** 可序列化为 B-rep 交换格式(BREP/STEP)——brepjs brepExport 并入 */\n brepExport?: boolean\n /** 体积/面积/长度匹配解析值(vs mesh 近似)——brepjs exactMeasurement 并入 */\n exactMeasurement?: boolean\n /** 细分精度控制模型——brepjs tessellationModel 并入 */\n tessellationModel?: BrepTessellationModel\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAU,CAAA;AAgCxE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA","sourcesContent":["/**\n * engine/types — BREP 引擎中立类型(零具体实现依赖,不 import 任何内核包)\n *\n *\n * 契约(对应 brepjs 的 KernelShape 约定):\n * - L1 及以上代码永远不对句柄调用任何方法,只把它传回产生它的那个引擎;\n * - 句柄不得跨引擎传递——跨引擎必须先经 mesh 层(§8.3 的结构保证)。\n * - OCCT 适配器的句柄运行时就是 number,加 brand 是零成本的类型层转换。\n */\n\n/**\n * BREP 引擎身份(D11-1,2026-09-24 narrowing plan)。\n *\n * 三个值来自三个已存在的引擎 id 常量(`OCCT_BREP_ENGINE_ID` / `BREPKIT_BREP_ENGINE_ID`\n * / `BREP_MOCK_ENGINE_ID`,各自适配器导出);本类型由常量数组推导,禁止裸 `string`。\n * 适配器常量用 `satisfies BrepEngineId` 收窄(typecheck 钉住集合一致)。\n *\n * 消费点:`defineOp` 的 `engines` 声明(平台 op 自证身份)、`dispatchPath` 的平台\n * 身份分支(D11-2)、`script-face-manifest` 的平台 op 标注(§3.8)。\n */\nexport const BREP_ENGINE_IDS = ['occt', 'brepkit', 'brep_mock'] as const\n\n/** BREP 引擎身份(固定三值联合;由 {@link BREP_ENGINE_IDS} 推导)。 */\nexport type BrepEngineId = (typeof BREP_ENGINE_IDS)[number]\n\ndeclare const BrepHandleBrand: unique symbol\n\n/**\n * BREP 实体句柄——不透明值。\n *\n * 与 occt-wasm 的 ShapeHandle 同构(number & brand)。OCCT 适配器\n * (occt-kernel/)内部以 `as unknown as` 双向转换,跨适配器边界零运行时成本。\n */\nexport type BrepHandle = number & { readonly [BrepHandleBrand]: never }\n\n/** 三维点/向量(与内核无关的中立形态)。 */\nexport interface BrepVec3 {\n x: number\n y: number\n z: number\n}\n\n/** 轴对齐包围盒。 */\nexport interface BrepBoundingBox {\n xmin: number\n ymin: number\n zmin: number\n xmax: number\n ymax: number\n zmax: number\n}\n\n/**\n * 面/边 hash 的上界(唯一真源)。\n *\n * 拓扑提取侧用 `kernel.hashCode(subShape, BREP_HASH_BOUND)` 查面/边,\n * 三角化/线框侧把 hash 写进 `faceGroups[·+2]` / `edgeGroups[·+2]`——\n * **两侧必须对同一上界取模**,否则查表恒 miss(实测 2026-10-01:\n * brepkit 适配器曾用 1e9、topologyExt 用 INT32_MAX → 面行 triangleCount 全 0)。\n * 值取自 OCCT `HASH_CODE_MAX` 惯例,也是 occt-wasm 的实际口径(实测一致)。\n */\nexport const BREP_HASH_BOUND = 2147483647\n\n/**\n * BRepMesh 三角化输出(镜像 occt-wasm Mesh 的中立形态)。\n *\n * ⚠️ 单位口径(L1 契约的一部分,实测钉死):\n * - `faceGroups` 三元组 = `[triStart, triCount, faceHash]`,前两元是**索引单位**\n * (3/三角形),不是三角形单位;\n * - `wireframe().edgeGroups` = `[pointStart, pointCount, edgeHash]`,前两元是\n * **浮点单位**(3/点)。\n * 修订任何一侧都要同步改另一侧与 brepkit 适配器(跨引擎一致性测试\n * `topology/face-group-units.test.ts` 钉住)。\n */\nexport interface BrepMeshResult {\n /** XYZ 交错顶点坐标,长度 = vertexCount * 3 */\n positions: Float32Array\n /** XYZ 交错顶点法线,长度 = vertexCount * 3 */\n normals: Float32Array\n /** 三角形索引 */\n indices: Uint32Array\n /** 顶点数(positions.length / 3) */\n vertexCount: number\n /** 三角形数(indices.length / 3) */\n triangleCount: number\n /** 面组:[triStart, triCount, faceHash] 三元组(meshShape 时存在) */\n faceGroups?: Int32Array\n /** 面组数(meshShape 时存在) */\n faceCount?: number\n}\n\n/** 三角化精度选项。 */\nexport interface BrepTessellateOptions {\n /** 最大弦偏差(mm),默认 0.1 */\n linearDeflection?: number\n /** 最大角偏差(弧度),默认 0.5 */\n angularDeflection?: number\n /** 按每条边长度相对解释 linearDeflection */\n relative?: boolean\n}\n\n/** 边折线数据(wireframe 输出)。 */\nexport interface BrepEdgeData {\n /** XYZ 交错边采样点 */\n points: Float32Array\n /** 每边分组:[pointStart, pointCount, edgeHash] 三元组;前两元为**浮点单位**(3/点)。 */\n edgeGroups: Int32Array\n /** points 中的浮点数总数(= XYZ 坐标数) */\n pointCount: number\n /** 不同边的数量 */\n edgeCount: number\n}\n\n/**\n * *WithHistory 面演化数据(modified/generated/deleted 用面 hash 编码)。\n *\n * ⚠️ **三个字段的编码不同,实测于 2026-09-22(`brep/engine/phase0-kernel-probes.test.ts`),\n * 与 occt-wasm 自己的文档(`dist/types.d.ts:227-231`)不符**:\n *\n * | 字段 | 实际编码 | 键/值语义 |\n * |---|---|---|\n * | `modified` | **分段** `[inHash, count, outHash…] × N` | 键 = 输入面 hash;值 = 该输入面在结果里的**后继**(可 1→N) |\n * | `generated` | **同构分段**,**键集与 `modified` 相同** | 值 = 该输入面派生出的**中间形**(实测结果里 0 存活) |\n * | `deleted` | **扁平** hash 数组 | 输入面中已不存在的面 |\n *\n * 「扁平数组」的读法会把 `generated` 的 count 字段当成 hash——\n * 实测 `cut` 的 `generated` 里真的含 `2`(一个 count),故该误读不会自己暴露。\n *\n * ⚠️ **未受影响的面有两种上报形态,两种都表示\"未变\"**:自映射(`i -> [i]`)。\n * 或者**整个不上报**(`fillet` 实测两者并存)。⇒ 读法必须是\n * `modified.get(h) ?? [h]`,不能只看\"是否出现在 `modified` 里\"。\n *\n * ⇒ 结果面的三种命运(判据见 `phase0-kernel-probes.test.ts`):\n * **原样幸存**(hash ∈ 输入 hash 集合,hash 逐字不变)/ **改型幸存**(在 `modified` 输出里)/\n * **新造**(两者皆非——这才是真正需要派生词汇命名的面,如 `fillet` 的过渡面)。\n */\nexport interface BrepEvolutionData {\n /** 结果句柄 */\n result: BrepHandle\n /** 分段:`[inHash, count, outHash…] × N`;值 = 该输入面的结果后继 */\n modified: number[]\n /** 分段(键集同 `modified`):该输入面派生的中间形 hash,实测结果里 0 存活 */\n generated: number[]\n /** 扁平:输入面中已不存在的面 hash */\n deleted: number[]\n}\n\n/** 曲线参数区间(与内核 curveParameters 返回同构:first/last)。 */\nexport interface BrepCurveParameters {\n first: number\n last: number\n}\n\n/**\n * NURBS control data of one edge's BASIS curve.\n *\n * ⚠️ This is the WHOLE basis curve, not the edge: an OCCT edge is often only a\n * sub-range of its curve, so `curveParameters(edge)` is the trim to apply on top\n * of this (`BRep_Tool::Curve` hands back both halves). Rebuilding an edge from\n * this data without honouring that trim produces a curve running past its\n * neighbour's start (measured 2026-09-29).\n *\n * `poles` is flat `[x,y,z, x,y,z, …]`; `weights` has one entry per pole (all 1\n * for a non-rational curve, and `rational` then says whether they mean anything);\n * `knots`/`multiplicities` are parallel arrays (expanded, the knot vector is\n * `knots[i]` repeated `multiplicities[i]` times and has `poles + degree + 1`\n * entries).\n */\nexport interface BrepNurbsCurveData {\n /** Polynomial degree. */\n degree: number\n /** True when `weights` are meaningful (a rational curve). */\n rational: boolean\n /** True for a periodic (closed, wrap-around) curve. */\n periodic: boolean\n /** Distinct knot values, parallel to `multiplicities`. */\n knots: number[]\n /** Multiplicity of each entry in `knots`. */\n multiplicities: number[]\n /** Flat control points: `[x, y, z, x, y, z, …]`. */\n poles: number[]\n /** One weight per control point. */\n weights: number[]\n}\n\n/** 曲面 UV 边界。 */\nexport interface BrepUvBounds {\n uMin: number\n uMax: number\n vMin: number\n vMax: number\n}\n\n/** 子形状类型(getSubShapes / subShapeHashes 等)。 */\nexport type BrepSubShapeType = 'vertex' | 'edge' | 'wire' | 'face' | 'shell' | 'solid'\n\n/**\n * XCAF label 句柄(`addShape` / `addChild` 的返回值,仅在所属文档内有效)。\n */\nexport type BrepXcafLabel = number & { readonly __brepXcafLabel: 'BrepXcafLabel' }\n\n/**\n * XCAF 装配文档句柄(可选能力槽 AssemblyCapability 的文档形态)。\n *\n * 形态来自 occt-wasm XCAFDocumentImpl 的被调用子集(step.ts / occt-kernel 装配链)。\n * `addChild` 支撑真装配写入(方案 2026-10-08 步骤 7 / P3):组件位姿经\n * `location`(平移 + Euler 弧度)落到 XCAF location,导出为装配引用而非平级 PRODUCT。\n */\nexport interface BrepXcafDocument {\n /** 顶层 part / 装配 label。返回的 label 可作为 `addChild` 的父。 */\n addShape(shape: BrepHandle, opts?: { name?: string; color?: [number, number, number] }): BrepXcafLabel\n /**\n * 把 shape 作为 parent 的子组件加入(parent 是 part 时,首个 child 使其转为\n * assembly:原几何移入 identity 首组件并携带 part 的名与色)。\n */\n addChild(\n parent: BrepXcafLabel,\n shape: BrepHandle,\n opts?: {\n name?: string\n color?: [number, number, number]\n /** 组件相对父的位姿:平移 + Euler 角(弧度)。⚠️ occt-wasm 当前只生效平移\n * (旋转分量写出→回读恒 identity,step-export.test.ts P7 钉住)——旋转由\n * 调用方烘进几何,wasm 修复后恢复 location 携带完整位姿。 */\n location?: { tx?: number; ty?: number; tz?: number; rx?: number; ry?: number; rz?: number }\n },\n ): BrepXcafLabel\n exportSTEP(): string\n close(): void\n}\n\n/**\n * 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**。\n *\n * ⚠️ **为什么不是一个布尔位**(2026-09-22 Phase 0.2,事实不变):家族化命名会**多报**。\n * 「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,\n * 内核可以只提供其中一部分。`brepkit` 就是活例:它提供 `fuse`/`cut`/`fillet`,\n * `chamfer`/`intersect`/`translate`/… 一律 `unsupported(...)`\n * (`brepkit-kernel/brepkitKernel.ts:220-537`)。\n *\n * 本类型是「面演化核函数有哪些」的**名字全集**,供 `hasNativeHistory`\n * (`brep/engine/native-history.ts`)按引擎身份逐名回答\"这个引擎原生有没有它\"。\n * 没有声明轴:op 不声明要哪个核函数,分派时也不查任何能力表。\n */\nexport type BrepEvolutionKind =\n // 布尔族\n | 'fuseWithHistory'\n | 'cutWithHistory'\n | 'intersectWithHistory'\n // 倒圆/倒角族\n | 'filletWithHistory'\n | 'chamferWithHistory'\n // 刚体变换族\n | 'translateWithHistory'\n | 'rotateWithHistory'\n | 'mirrorWithHistory'\n | 'scaleWithHistory'\n // 抽壳/偏置/加厚族\n | 'shellWithHistory'\n | 'offsetWithHistory'\n | 'thickenWithHistory'\n"]}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* 红线(§10.3 3a):绝不文本级改坐标 — 坐标只在几何层缩放,文本层只碰单位实体。
|
|
15
15
|
*/
|
|
16
16
|
import { type UnitName } from '../../units.js';
|
|
17
|
+
import type { Vec3 } from '../../mesh/types.js';
|
|
17
18
|
import type { BrepHandle } from '../engine/types.js';
|
|
18
19
|
import type { PbrAppearance } from '../../api/appearance.js';
|
|
19
20
|
import type { ShapeMeta, FileMeta } from '../../api/meta.js';
|
|
@@ -44,6 +45,25 @@ export interface ExportEntry {
|
|
|
44
45
|
* `<object name/partnumber>` + `<metadatagroup>`;STEP 走 PRODUCT name(既有)。
|
|
45
46
|
*/
|
|
46
47
|
meta?: ShapeMeta;
|
|
48
|
+
/**
|
|
49
|
+
* 装配子节点(方案 2026-10-08 §2.1 / 第 4 步):存在时本条目是装配容器,写出器据此
|
|
50
|
+
* 生成 3MF `<components>`(每个 child 一个 `<component objectid>`,子节点的 `transform`
|
|
51
|
+
* 写进 `<component transform>`);STL / STEP 分支忽略此字段或将其展平(逐层烘焙 /
|
|
52
|
+
* 逐实体通道,第 5、7 步)。
|
|
53
|
+
*/
|
|
54
|
+
children?: ExportEntry[];
|
|
55
|
+
/**
|
|
56
|
+
* 本节点相对父的位姿(与 `Shape.transform` 同形态,方案 §2.1)。写出器消费:3MF 写
|
|
57
|
+
* `<component transform>`、STEP 写 XCAF location(第 7 步)、STL 顶点烘焙(第 5 步)。
|
|
58
|
+
*/
|
|
59
|
+
transform?: {
|
|
60
|
+
translate?: Vec3;
|
|
61
|
+
rotate?: {
|
|
62
|
+
angle: number;
|
|
63
|
+
axis?: Vec3;
|
|
64
|
+
};
|
|
65
|
+
matrix?: number[];
|
|
66
|
+
};
|
|
47
67
|
}
|
|
48
68
|
/** Output formats supported by the unified {@link exportModel} entry. */
|
|
49
69
|
export type ExportFormat = 'stl' | 'step' | '3mf';
|
|
@@ -86,6 +106,7 @@ export declare const UNIT_NAME_TO_3MF: Partial<Record<UnitName, 'micron' | 'mill
|
|
|
86
106
|
* @returns 改写后的 STEP 文本。
|
|
87
107
|
*/
|
|
88
108
|
export declare function rewriteFileMetaHeader(stepText: string, fileMeta: FileMeta): string;
|
|
109
|
+
export { transformToMatrix12 } from './transform12.js';
|
|
89
110
|
/**
|
|
90
111
|
* Synchronous twin of {@link exportModel} for hosts already holding a live
|
|
91
112
|
* kernel (CLI, in-process consumers). Same invariants: declared unit ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-model.d.ts","sourceRoot":"","sources":["../../../src/brep/export/export-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"export-model.d.ts","sourceRoot":"","sources":["../../../src/brep/export/export-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzD,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,uCAAuC;IACvC,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAA;IACxD,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,aAAa,CAAA;KAAE,CAAC,CAAA;IACnF;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,IAAI,CAAA;SAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAC7F;AAED,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAEjD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,gCAAgC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAQ1H,CAAA;AA+ED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA6ClF;AAuPD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAmDnD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,WAAW,CAmFb;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAAC,WAAW,CAAC,CAyEtB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,IAAI,CAgBtG"}
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
*
|
|
14
14
|
* 红线(§10.3 3a):绝不文本级改坐标 — 坐标只在几何层缩放,文本层只碰单位实体。
|
|
15
15
|
*/
|
|
16
|
-
import { buildStlBufferFromMesh } from './stl.js';
|
|
16
|
+
import { buildStlBufferFromMesh, composeMatrix12, bakeMatrix12ToPositions } from './stl.js';
|
|
17
17
|
import { writeZipEntries } from '../../io/zip.js';
|
|
18
18
|
import { UNIT_SCALE } from '../../units.js';
|
|
19
19
|
import { getBrepApi } from '../handle-bridge.js';
|
|
20
|
+
import { getBackends, BrepUnsupportedError } from '../../runtime-state.js';
|
|
20
21
|
import { exportStepFromSolids } from './step.js';
|
|
21
22
|
import { detectStepUnit, STEP_UNIT_SCAN_PREFIX } from '../../mesh/io.js';
|
|
22
23
|
/** UnitName → 3MF <model unit> 枚举全名(唯一真源;yard 无对应值)。 */
|
|
@@ -72,19 +73,27 @@ function rewriteStepUnitEntities(stepText, unit) {
|
|
|
72
73
|
}
|
|
73
74
|
const lenId = maxId + 1;
|
|
74
75
|
const convId = maxId + 2;
|
|
75
|
-
// 2)
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
// 2) 存在性守卫:必须至少有一条 LENGTH_UNIT 挂 SI_UNIT(.MILLI.,.METRE.),否则
|
|
77
|
+
// 没有可改写的声明(凭空插入单位声明 = 伪造文件单位)。
|
|
78
|
+
// OCCT 实测形态(实体括号内还有 LENGTH_UNIT() / NAMED_UNIT(*) 的括号,且
|
|
79
|
+
// `=`、`)` 前后都有空格):
|
|
80
|
+
// #346 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
|
|
81
|
+
// 故实体体的字符类用 [^;](STEP 实体行内不含分号)而不是 [^)]——后者跨不过
|
|
82
|
+
// `LENGTH_UNIT()` 与 `NAMED_UNIT(*)` 自带的括号,整段永远匹配不上。
|
|
83
|
+
const siDecl = out.match(/#(\d+)\s*=\s*\([^;]*?SI_UNIT\s*\(\s*\.MILLI\.\s*,\s*\.METRE\.\s*\)[^;]*?\)\s*;/);
|
|
84
|
+
if (!siDecl) {
|
|
80
85
|
throw new Error(`[export/step] no SI_UNIT(.MILLI.,.METRE.) entity found; cannot rewrite declaration to ${name}`);
|
|
81
86
|
}
|
|
82
|
-
// 3)
|
|
83
|
-
//
|
|
84
|
-
//
|
|
87
|
+
// 3) 把**全部** SI_UNIT(.MILLI.,.METRE.) 换成 CONVERSION_BASED_UNIT(各 context
|
|
88
|
+
// 共享同一份换算因子实体),插入换算因子与基准米实体:
|
|
89
|
+
// #si=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
|
|
90
|
+
// → #si=( LENGTH_UNIT() NAMED_UNIT(*) CONVERSION_BASED_UNIT('INCH',#conv) );
|
|
85
91
|
// #conv=LENGTH_MEASURE_WITH_UNIT(LENGTH_MEASURE(25.4),#len);
|
|
86
92
|
// #len=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT($,.METRE.));
|
|
87
|
-
|
|
93
|
+
// 全局替换而不是只改第一条:多零件导出会写出多条 LENGTH_UNIT 声明(每个 part 一个
|
|
94
|
+
// context,实测 2 个 part → #346 与 #690),只改第一条会让同一文件里并存两种长度
|
|
95
|
+
// 单位声明——而坐标是按同一 scale 换算过的。
|
|
96
|
+
out = out.replace(/SI_UNIT\s*\(\s*\.MILLI\.\s*,\s*\.METRE\.\s*\)/g, `CONVERSION_BASED_UNIT('${name}',#${convId})`);
|
|
88
97
|
// 在 DATA 段结束前(ENDSEC;)插入新实体。
|
|
89
98
|
const insert = [
|
|
90
99
|
`#${convId}=LENGTH_MEASURE_WITH_UNIT(LENGTH_MEASURE(${inchFactor}),#${lenId});`,
|
|
@@ -282,40 +291,65 @@ function build3mfModelXml(entries, unit, scale, printConfig, fileMeta) {
|
|
|
282
291
|
const objs = [];
|
|
283
292
|
const mats = [];
|
|
284
293
|
const items = [];
|
|
294
|
+
let nextObjId = 1;
|
|
295
|
+
// 逐三角形材质分组的 basematerials id 从「顶层条目数 + 1」起,与 object id(1..N)
|
|
296
|
+
// 错开(P3:resources 内 id 唯一)。对象级颜色 basematerials 复用其 object id。
|
|
285
297
|
let nextMatId = entries.length + 1;
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
tris
|
|
298
|
+
// 递归发射一个节点为 <object>(叶带 mesh、容器带 <components>),返回其 object id。
|
|
299
|
+
function emitObject(e) {
|
|
300
|
+
// P8 契约(库面):无 mesh 且无子节点的条目 → 静默跳过(不发射 <object>/<item>),
|
|
301
|
+
// 与 op 层「无三角载荷即 E_EXPORT_3MF_EMPTY 显式报错」形成双值防护。显式容器
|
|
302
|
+
// (children 已声明,即便为空 [])仍发射,以便装配层级(含空装配)可写。
|
|
303
|
+
const isContainer = e.children !== undefined;
|
|
304
|
+
if (!e.mesh && !isContainer)
|
|
305
|
+
return undefined;
|
|
306
|
+
const id = nextObjId++;
|
|
307
|
+
let meshXml = '';
|
|
308
|
+
if (e.mesh) {
|
|
309
|
+
const pos = scalePositions(e.mesh.positions, scale);
|
|
310
|
+
const verts = [];
|
|
311
|
+
for (let v = 0; v < pos.length; v += 3) {
|
|
312
|
+
verts.push(`<vertex x="${pos[v]}" y="${pos[v + 1]}" z="${pos[v + 2]}"/>`);
|
|
313
|
+
}
|
|
314
|
+
// P4(3MF Core 逐三角形材质):materialGroups(appearance.color)→ 每组
|
|
315
|
+
// 一个独立 basematerials 资源(id 与对象 id 错开,P3 曾与对象共用 id、
|
|
316
|
+
// 违反 resources 内 id 唯一),分组三角形用 `<triangle pid p1..p3>` 引用。
|
|
317
|
+
const groupPids = [];
|
|
318
|
+
const groups = (e.materialGroups ?? []).filter((g) => g.appearance?.color);
|
|
319
|
+
for (const g of groups) {
|
|
320
|
+
groupPids.push(nextMatId);
|
|
321
|
+
mats.push(`<basematerials id="${nextMatId}"><base name="${xmlAttr(`${e.name ?? `part${id}`}_g${groupPids.length}`)}" displaycolor="${hexColor(g.appearance.color)}"/></basematerials>`);
|
|
322
|
+
nextMatId++;
|
|
323
|
+
}
|
|
324
|
+
const tris = [];
|
|
325
|
+
const triCount = e.mesh.indices.length / 3;
|
|
326
|
+
let gi = 0;
|
|
327
|
+
for (let t = 0; t < triCount; t++) {
|
|
328
|
+
while (gi < groups.length && t >= groups[gi].start + groups[gi].count)
|
|
329
|
+
gi++;
|
|
330
|
+
const inGroup = gi < groups.length && t >= groups[gi].start;
|
|
331
|
+
const matAttr = inGroup ? ` pid="${groupPids[gi]}" p1="0" p2="0" p3="0"` : '';
|
|
332
|
+
tris.push(`<triangle v1="${e.mesh.indices[t * 3]}" v2="${e.mesh.indices[t * 3 + 1]}" v3="${e.mesh.indices[t * 3 + 2]}"${matAttr}/>`);
|
|
333
|
+
}
|
|
334
|
+
meshXml = `<mesh><vertices>${verts.join('')}</vertices><triangles>${tris.join('')}</triangles></mesh>`;
|
|
313
335
|
}
|
|
314
|
-
//
|
|
315
|
-
|
|
316
|
-
// parseThreemf 只读 resources)不识别,导入→导出→导入颜色丢失。
|
|
336
|
+
// 对象级颜色 basematerials:复用 object id(既有契约,解析器按 id 取首个资源)。
|
|
337
|
+
let pidAttr = '';
|
|
317
338
|
if (e.color) {
|
|
318
|
-
mats.push(`<basematerials id="${
|
|
339
|
+
mats.push(`<basematerials id="${id}"><base name="${xmlAttr(e.name ?? 'p' + id)}" displaycolor="${hexColor(e.color)}"/></basematerials>`);
|
|
340
|
+
pidAttr = ` pid="${id}" pindex="0"`;
|
|
341
|
+
}
|
|
342
|
+
// 装配层级 → <components>(子节点递归;<component transform> 写相对父位姿)。
|
|
343
|
+
let compXml = '';
|
|
344
|
+
if (e.children && e.children.length > 0) {
|
|
345
|
+
const comps = e.children.map((child) => {
|
|
346
|
+
const cid = emitObject(child);
|
|
347
|
+
if (cid === undefined)
|
|
348
|
+
return '';
|
|
349
|
+
const tf = child.transform ? ` transform="${matrix12ToAttr(transformToMatrix12(child.transform))}"` : '';
|
|
350
|
+
return `<component objectid="${cid}"${tf}/>`;
|
|
351
|
+
}).filter((s) => s !== '');
|
|
352
|
+
compXml = comps.length > 0 ? `<components>${comps.join('')}</components>` : '';
|
|
319
353
|
}
|
|
320
354
|
// 零件级元数据(设计文档 2026-10-05-meta §6.1):partnumber 属性 +
|
|
321
355
|
// `<metadatagroup><metadata>`(3MF 自定义标签须带命名空间前缀;faijs
|
|
@@ -343,9 +377,17 @@ function build3mfModelXml(entries, unit, scale, printConfig, fileMeta) {
|
|
|
343
377
|
}
|
|
344
378
|
}
|
|
345
379
|
const metadatagroup = metadatas.length > 0 ? `<metadatagroup>${metadatas.join('')}</metadatagroup>` : '';
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
380
|
+
const nameAttr = xmlAttr(e.name ?? `part${id}`);
|
|
381
|
+
objs.push(`<object id="${id}" type="model" name="${nameAttr}"${partnumberAttr}${pidAttr}>${metadatagroup}${meshXml}${compXml}</object>`);
|
|
382
|
+
return id;
|
|
383
|
+
}
|
|
384
|
+
for (const e of entries) {
|
|
385
|
+
const id = emitObject(e);
|
|
386
|
+
if (id === undefined)
|
|
387
|
+
continue;
|
|
388
|
+
const tf = e.transform ? ` transform="${matrix12ToAttr(transformToMatrix12(e.transform))}"` : '';
|
|
389
|
+
items.push(`<item objectid="${id}"${tf}/>`);
|
|
390
|
+
}
|
|
349
391
|
// 整体级元数据(`<model>` 直接子级 `<metadata>`):well-known 名经映射写标准
|
|
350
392
|
// 3MF 名,vendor 名写 `faijs:` 前缀。排在 `<resources>` 之前(3MF Core)。
|
|
351
393
|
const modelMetas = [];
|
|
@@ -381,6 +423,51 @@ function hexColor(c) {
|
|
|
381
423
|
const h = (v) => Math.round(Math.min(1, Math.max(0, v)) * 255).toString(16).padStart(2, '0');
|
|
382
424
|
return `#${h(c[0])}${h(c[1])}${h(c[2])}`;
|
|
383
425
|
}
|
|
426
|
+
export { transformToMatrix12 } from './transform12.js';
|
|
427
|
+
import { scaleTransform, transformToMatrix12 } from './transform12.js';
|
|
428
|
+
/**
|
|
429
|
+
* ExportEntry → StepExportEntry 的递归映射器(step 分支同步/异步共用,单一真源)。
|
|
430
|
+
* 容器只传名/色与子节点(compound 几何 == 成员并集,写出会重复);位姿平移按
|
|
431
|
+
* 单位刻度换算,与几何缩放同一 scale 因子(「声明单位 == 坐标刻度」对组件位姿
|
|
432
|
+
* 同样成立)。solid 经 kernel.scale 的 owned copy 缩放,入 ownedHandles 由调用方
|
|
433
|
+
* 统一释放。
|
|
434
|
+
*/
|
|
435
|
+
function makeStepEntryMapper(kernel, scale, ownedHandles) {
|
|
436
|
+
const toStepEntry = (e) => {
|
|
437
|
+
const head = {
|
|
438
|
+
...(e.name ? { name: e.name } : {}),
|
|
439
|
+
...(e.color ? { color: [...e.color] } : {}),
|
|
440
|
+
};
|
|
441
|
+
const transform = e.transform ? scaleTransform(e.transform, scale) : undefined;
|
|
442
|
+
if (e.children && e.children.length > 0) {
|
|
443
|
+
return {
|
|
444
|
+
...head,
|
|
445
|
+
...(transform ? { transform } : {}),
|
|
446
|
+
children: e.children.map(toStepEntry),
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
if (e.solid) {
|
|
450
|
+
if (scale === 1)
|
|
451
|
+
return { solid: e.solid, ...head };
|
|
452
|
+
const scaled = kernel.scale(e.solid, { x: 0, y: 0, z: 0 }, scale);
|
|
453
|
+
ownedHandles.push(scaled);
|
|
454
|
+
return { solid: scaled, ...head };
|
|
455
|
+
}
|
|
456
|
+
return {
|
|
457
|
+
...head,
|
|
458
|
+
...(e.mesh ? { mesh: { positions: scalePositions(e.mesh.positions, scale), indices: e.mesh.indices } } : {}),
|
|
459
|
+
};
|
|
460
|
+
};
|
|
461
|
+
return toStepEntry;
|
|
462
|
+
}
|
|
463
|
+
function fmtNum(v) {
|
|
464
|
+
if (Number.isInteger(v))
|
|
465
|
+
return String(v);
|
|
466
|
+
return String(Math.round(v * 1e6) / 1e6);
|
|
467
|
+
}
|
|
468
|
+
function matrix12ToAttr(m) {
|
|
469
|
+
return m.map(fmtNum).join(' ');
|
|
470
|
+
}
|
|
384
471
|
/**
|
|
385
472
|
* Synchronous twin of {@link exportModel} for hosts already holding a live
|
|
386
473
|
* kernel (CLI, in-process consumers). Same invariants: declared unit ==
|
|
@@ -400,7 +487,29 @@ export function exportModelSync(entries, format, opts) {
|
|
|
400
487
|
unit = 'mm';
|
|
401
488
|
const scale = 1 / UNIT_SCALE[unit];
|
|
402
489
|
if (format === 'stl') {
|
|
403
|
-
|
|
490
|
+
// 步骤 5(方案 §2.1 / §4.3 L1-5):装配展平 + 顶点烘焙。递归把 children 拍平成叶,
|
|
491
|
+
// 每个叶的世界变换 = 父世界变换 ∘ 本节点局部 transform(row-major 3×4,平移在末列)。
|
|
492
|
+
// 先在世界空间烘焙 transform,再按单位换算缩放坐标(缩放同时作用于平移分量,坐标与声明成对)。
|
|
493
|
+
const flatten = (list, accTf) => {
|
|
494
|
+
const out = [];
|
|
495
|
+
for (const e of list) {
|
|
496
|
+
const tf = e.transform ? transformToMatrix12(e.transform) : null;
|
|
497
|
+
const world = tf && accTf ? composeMatrix12(accTf, tf) : tf ?? accTf ?? null;
|
|
498
|
+
if (e.children && e.children.length > 0) {
|
|
499
|
+
out.push(...flatten(e.children, world));
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
if (!e.mesh)
|
|
503
|
+
continue;
|
|
504
|
+
let pos = e.mesh.positions;
|
|
505
|
+
if (world)
|
|
506
|
+
pos = bakeMatrix12ToPositions(pos, world);
|
|
507
|
+
pos = scalePositions(pos, scale);
|
|
508
|
+
out.push({ pos, idx: e.mesh.indices });
|
|
509
|
+
}
|
|
510
|
+
return out;
|
|
511
|
+
};
|
|
512
|
+
const bufs = flatten(entries, null);
|
|
404
513
|
if (bufs.length === 0)
|
|
405
514
|
throw new Error('[export/stl] no mesh entries');
|
|
406
515
|
if (bufs.length === 1)
|
|
@@ -421,22 +530,18 @@ export function exportModelSync(entries, format, opts) {
|
|
|
421
530
|
return buildStlBufferFromMesh(mergedPos, mergedIdx);
|
|
422
531
|
}
|
|
423
532
|
if (format === 'step') {
|
|
533
|
+
// 步骤 6(方案 §2.3 / P1):STEP 装配层级走 XCAF,仅 occt 具备;非 occt 引擎在
|
|
534
|
+
// 触碰任何句柄之前报 E_BREP_UNSUPPORTED(带当前引擎名),不落入 getBrepApi 的
|
|
535
|
+
// 未初始化异常,也不把 brepkit 句柄交给 occt 内核(句柄不得跨引擎传递)。
|
|
536
|
+
const engineId = getBackends().config.brepEngineId;
|
|
537
|
+
if (engineId !== 'occt') {
|
|
538
|
+
throw new BrepUnsupportedError(`E_BREP_UNSUPPORTED: op 'exportModel:step' requires engine occt (current=${engineId ?? '<none>'})`);
|
|
539
|
+
}
|
|
424
540
|
const kernel = getBrepApi();
|
|
425
541
|
const ownedHandles = [];
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
return { solid: e.solid, ...(e.name ? { name: e.name } : {}), ...(e.color ? { color: [...e.color] } : {}) };
|
|
430
|
-
const scaled = kernel.scale(e.solid, { x: 0, y: 0, z: 0 }, scale);
|
|
431
|
-
ownedHandles.push(scaled);
|
|
432
|
-
return { solid: scaled, ...(e.name ? { name: e.name } : {}), ...(e.color ? { color: [...e.color] } : {}) };
|
|
433
|
-
}
|
|
434
|
-
return {
|
|
435
|
-
...(e.mesh ? { mesh: { positions: scalePositions(e.mesh.positions, scale), indices: e.mesh.indices } } : {}),
|
|
436
|
-
...(e.name ? { name: e.name } : {}),
|
|
437
|
-
...(e.color ? { color: [...e.color] } : {}),
|
|
438
|
-
};
|
|
439
|
-
});
|
|
542
|
+
// 层级映射(步骤 7 / P3):ExportEntry 树 → StepExportEntry 树(映射器见
|
|
543
|
+
// makeStepEntryMapper——同步/异步分支共用,单一真源)。
|
|
544
|
+
const stepEntries = entries.map(makeStepEntryMapper(kernel, scale, ownedHandles));
|
|
440
545
|
const buffer = exportStepFromSolids(kernel, stepEntries);
|
|
441
546
|
for (const h of ownedHandles) {
|
|
442
547
|
try {
|
|
@@ -512,25 +617,18 @@ export async function exportModel(entries, format, opts) {
|
|
|
512
617
|
return buildStlBufferFromMesh(mergedPos, mergedIdx);
|
|
513
618
|
}
|
|
514
619
|
if (format === 'step') {
|
|
620
|
+
// 步骤 6(方案 §2.3 / P1):同同步分支,取内核前先断言 occt 引擎身份。
|
|
621
|
+
const engineId = getBackends().config.brepEngineId;
|
|
622
|
+
if (engineId !== 'occt') {
|
|
623
|
+
throw new BrepUnsupportedError(`E_BREP_UNSUPPORTED: op 'exportModel:step' requires engine occt (current=${engineId ?? '<none>'})`);
|
|
624
|
+
}
|
|
515
625
|
// 同一 scale 变量喂两类条目(§10.3 规则 7,修 E4):mesh 缩放 positions,
|
|
516
626
|
// solid 用 owned copy 做 kernel.scale —— 不释放调用方缓存里的原句柄。
|
|
517
627
|
// 先过门禁再取内核(同同步分支:拒绝理由与引擎装配状态无关)。
|
|
518
628
|
const kernel = (await import('../handle-bridge.js')).getBrepApi();
|
|
519
629
|
const ownedHandles = [];
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
if (scale === 1)
|
|
523
|
-
return { solid: e.solid, ...(e.name ? { name: e.name } : {}), ...(e.color ? { color: [...e.color] } : {}) };
|
|
524
|
-
const scaled = kernel.scale(e.solid, { x: 0, y: 0, z: 0 }, scale);
|
|
525
|
-
ownedHandles.push(scaled);
|
|
526
|
-
return { solid: scaled, ...(e.name ? { name: e.name } : {}), ...(e.color ? { color: [...e.color] } : {}) };
|
|
527
|
-
}
|
|
528
|
-
return {
|
|
529
|
-
...(e.mesh ? { mesh: { positions: scalePositions(e.mesh.positions, scale), indices: e.mesh.indices } } : {}),
|
|
530
|
-
...(e.name ? { name: e.name } : {}),
|
|
531
|
-
...(e.color ? { color: [...e.color] } : {}),
|
|
532
|
-
};
|
|
533
|
-
});
|
|
630
|
+
// 同步分支同一映射器(单一真源)。
|
|
631
|
+
const stepEntries = entries.map(makeStepEntryMapper(kernel, scale, ownedHandles));
|
|
534
632
|
const buffer = exportStepFromSolids(kernel, stepEntries);
|
|
535
633
|
for (const h of ownedHandles) {
|
|
536
634
|
try {
|