@faicad/faijs 0.29.3 → 0.30.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +6 -5
- package/dist/api/api-namespace.d.ts +1 -1
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +53 -1
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/appearance.d.ts +136 -0
- package/dist/api/appearance.d.ts.map +1 -0
- package/dist/api/appearance.js +228 -0
- package/dist/api/appearance.js.map +1 -0
- package/dist/api/assembly/entities.d.ts +1 -1
- package/dist/api/assembly/entities.js +1 -1
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/assembly/index.d.ts +1 -1
- package/dist/api/assembly/index.js +1 -1
- package/dist/api/assembly/index.js.map +1 -1
- package/dist/api/assembly/joints.d.ts +33 -15
- package/dist/api/assembly/joints.d.ts.map +1 -1
- package/dist/api/assembly/joints.js +31 -13
- package/dist/api/assembly/joints.js.map +1 -1
- package/dist/api/assembly/preview.d.ts +1 -1
- package/dist/api/assembly/preview.js +1 -1
- package/dist/api/assembly/preview.js.map +1 -1
- package/dist/api/assembly/solve.d.ts +1 -1
- package/dist/api/assembly/solve.js +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js +1 -1
- package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
- package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
- package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +3 -4
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
- package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
- package/dist/api/assembly/solvers/linalg.d.ts +2 -2
- package/dist/api/assembly/solvers/linalg.js +2 -2
- package/dist/api/assembly/solvers/linalg.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +2 -5
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js +1 -4
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +7 -6
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
- package/dist/api/brep-mirror/booleanFns.js +5 -5
- package/dist/api/brep-mirror/booleanFns.js.map +1 -1
- package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
- package/dist/api/brep-mirror/compoundFns.js +4 -4
- package/dist/api/brep-mirror/compoundFns.js.map +1 -1
- package/dist/api/brep-mirror/healingFns.d.ts +4 -4
- package/dist/api/brep-mirror/healingFns.js +4 -4
- package/dist/api/brep-mirror/healingFns.js.map +1 -1
- package/dist/api/brep-mirror/hullFns.d.ts +2 -2
- package/dist/api/brep-mirror/hullFns.js +2 -2
- package/dist/api/brep-mirror/hullFns.js.map +1 -1
- package/dist/api/brep-mirror/patternFns.d.ts +5 -5
- package/dist/api/brep-mirror/patternFns.js +10 -10
- package/dist/api/brep-mirror/patternFns.js.map +1 -1
- package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
- package/dist/api/brep-mirror/primitiveFns.js +4 -4
- package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
- package/dist/api/brep-mirror/roofFns.d.ts +3 -3
- package/dist/api/brep-mirror/roofFns.js +7 -7
- package/dist/api/brep-mirror/roofFns.js.map +1 -1
- package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
- package/dist/api/brep-mirror/sweepFns.js +14 -14
- package/dist/api/brep-mirror/sweepFns.js.map +1 -1
- package/dist/api/brep-mirror/threadFns.d.ts +1 -1
- package/dist/api/brep-mirror/threadFns.js +1 -1
- package/dist/api/brep-mirror/threadFns.js.map +1 -1
- package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
- package/dist/api/brep-mirror/topologyFns.js +8 -8
- package/dist/api/brep-mirror/topologyFns.js.map +1 -1
- package/dist/api/brep-operations/booleanFns.d.ts +40 -0
- package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
- package/dist/api/brep-operations/booleanFns.js +104 -0
- package/dist/api/brep-operations/booleanFns.js.map +1 -0
- package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
- package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
- package/dist/api/brep-operations/brepHelpers.js +131 -0
- package/dist/api/brep-operations/brepHelpers.js.map +1 -0
- package/dist/api/brep-operations/compoundFns.d.ts +46 -0
- package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
- package/dist/api/brep-operations/compoundFns.js +299 -0
- package/dist/api/brep-operations/compoundFns.js.map +1 -0
- package/dist/api/brep-operations/healingFns.d.ts +78 -0
- package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
- package/dist/api/brep-operations/healingFns.js +294 -0
- package/dist/api/brep-operations/healingFns.js.map +1 -0
- package/dist/api/brep-operations/hullFns.d.ts +20 -0
- package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
- package/dist/api/brep-operations/hullFns.js +46 -0
- package/dist/api/brep-operations/hullFns.js.map +1 -0
- package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
- package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
- package/dist/api/brep-operations/joinery-brep.js +463 -0
- package/dist/api/brep-operations/joinery-brep.js.map +1 -0
- package/dist/api/brep-operations/patternFns.d.ts +43 -0
- package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
- package/dist/api/brep-operations/patternFns.js +178 -0
- package/dist/api/brep-operations/patternFns.js.map +1 -0
- package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
- package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
- package/dist/api/brep-operations/primitiveFns.js +104 -0
- package/dist/api/brep-operations/primitiveFns.js.map +1 -0
- package/dist/api/brep-operations/roofFns.d.ts +24 -0
- package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
- package/dist/api/brep-operations/roofFns.js +229 -0
- package/dist/api/brep-operations/roofFns.js.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
- package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
- package/dist/api/brep-operations/straightSkeleton.js +431 -0
- package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
- package/dist/api/brep-operations/sweepFns.d.ts +60 -0
- package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
- package/dist/api/brep-operations/sweepFns.js +323 -0
- package/dist/api/brep-operations/sweepFns.js.map +1 -0
- package/dist/api/brep-operations/threadFns.d.ts +83 -0
- package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
- package/dist/api/brep-operations/threadFns.js +138 -0
- package/dist/api/brep-operations/threadFns.js.map +1 -0
- package/dist/api/brep-operations/topologyFns.d.ts +90 -0
- package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
- package/dist/api/brep-operations/topologyFns.js +276 -0
- package/dist/api/brep-operations/topologyFns.js.map +1 -0
- package/dist/api/brep-topology.d.ts +1 -1
- package/dist/api/brep-topology.d.ts.map +1 -1
- package/dist/api/brep-topology.js +1 -1
- package/dist/api/brep-topology.js.map +1 -1
- package/dist/api/brepjs-compat/index.d.ts +1 -1
- package/dist/api/brepjs-compat/index.js +3 -3
- package/dist/api/brepjs-compat/index.js.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
- package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
- package/dist/api/curve-sketch/index.d.ts +235 -0
- package/dist/api/curve-sketch/index.d.ts.map +1 -0
- package/dist/api/curve-sketch/index.js +487 -0
- package/dist/api/curve-sketch/index.js.map +1 -0
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +3 -2
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/export-brep.d.ts +41 -0
- package/dist/api/export-brep.d.ts.map +1 -0
- package/dist/api/export-brep.js +58 -0
- package/dist/api/export-brep.js.map +1 -0
- package/dist/api/export-stl.d.ts +50 -0
- package/dist/api/export-stl.d.ts.map +1 -0
- package/dist/api/export-stl.js +99 -0
- package/dist/api/export-stl.js.map +1 -0
- package/dist/api/extrude.d.ts +8 -11
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +11 -14
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +2 -2
- package/dist/api/fillet-variable.js +2 -2
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +2 -4
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +2 -4
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/2d.d.ts +4 -0
- package/dist/api/generated/2d.d.ts.map +1 -1
- package/dist/api/generated/2d.js +4 -0
- package/dist/api/generated/2d.js.map +1 -1
- package/dist/api/generated/core.d.ts +4 -0
- package/dist/api/generated/core.d.ts.map +1 -1
- package/dist/api/generated/core.js +4 -0
- package/dist/api/generated/core.js.map +1 -1
- package/dist/api/generated/gear.d.ts +4 -0
- package/dist/api/generated/gear.d.ts.map +1 -1
- package/dist/api/generated/gear.js +4 -0
- package/dist/api/generated/gear.js.map +1 -1
- package/dist/api/generated/io.d.ts +4 -0
- package/dist/api/generated/io.d.ts.map +1 -1
- package/dist/api/generated/io.js +4 -0
- package/dist/api/generated/io.js.map +1 -1
- package/dist/api/generated/kernel.d.ts +4 -0
- package/dist/api/generated/kernel.d.ts.map +1 -1
- package/dist/api/generated/kernel.js +4 -0
- package/dist/api/generated/kernel.js.map +1 -1
- package/dist/api/generated/measurement.d.ts +21 -21
- package/dist/api/generated/measurement.d.ts.map +1 -1
- package/dist/api/generated/measurement.js +25 -21
- package/dist/api/generated/measurement.js.map +1 -1
- package/dist/api/generated/ns.d.ts +4 -0
- package/dist/api/generated/ns.d.ts.map +1 -1
- package/dist/api/generated/ns.js +4 -0
- package/dist/api/generated/ns.js.map +1 -1
- package/dist/api/generated/operations.d.ts +32 -32
- package/dist/api/generated/operations.d.ts.map +1 -1
- package/dist/api/generated/operations.js +52 -48
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/projection.d.ts +4 -0
- package/dist/api/generated/projection.d.ts.map +1 -1
- package/dist/api/generated/projection.js +4 -0
- package/dist/api/generated/projection.js.map +1 -1
- package/dist/api/generated/query.d.ts +4 -0
- package/dist/api/generated/query.d.ts.map +1 -1
- package/dist/api/generated/query.js +4 -0
- package/dist/api/generated/query.js.map +1 -1
- package/dist/api/generated/sketching.d.ts +2 -2
- package/dist/api/generated/sketching.d.ts.map +1 -1
- package/dist/api/generated/sketching.js +7 -3
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/text.d.ts +4 -0
- package/dist/api/generated/text.d.ts.map +1 -1
- package/dist/api/generated/text.js +4 -0
- package/dist/api/generated/text.js.map +1 -1
- package/dist/api/generated/topology.d.ts +45 -45
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +67 -63
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/generated/view.d.ts +4 -0
- package/dist/api/generated/view.d.ts.map +1 -1
- package/dist/api/generated/view.js +4 -0
- package/dist/api/generated/view.js.map +1 -1
- package/dist/api/geom-types/constants.d.ts +11 -0
- package/dist/api/geom-types/constants.d.ts.map +1 -0
- package/dist/api/geom-types/constants.js +11 -0
- package/dist/api/geom-types/constants.js.map +1 -0
- package/dist/api/geom-types/index.d.ts +21 -0
- package/dist/api/geom-types/index.d.ts.map +1 -0
- package/dist/api/geom-types/index.js +22 -0
- package/dist/api/geom-types/index.js.map +1 -0
- package/dist/api/geom-types/planeOps.d.ts +98 -0
- package/dist/api/geom-types/planeOps.d.ts.map +1 -0
- package/dist/api/geom-types/planeOps.js +170 -0
- package/dist/api/geom-types/planeOps.js.map +1 -0
- package/dist/api/geom-types/planeTypes.d.ts +24 -0
- package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
- package/dist/api/geom-types/planeTypes.js +8 -0
- package/dist/api/geom-types/planeTypes.js.map +1 -0
- package/dist/api/geom-types/types.d.ts +64 -0
- package/dist/api/geom-types/types.d.ts.map +1 -0
- package/dist/api/geom-types/types.js +48 -0
- package/dist/api/geom-types/types.js.map +1 -0
- package/dist/api/geom-types/vecOps.d.ts +124 -0
- package/dist/api/geom-types/vecOps.d.ts.map +1 -0
- package/dist/api/geom-types/vecOps.js +202 -0
- package/dist/api/geom-types/vecOps.js.map +1 -0
- package/dist/api/geom.d.ts.map +1 -1
- package/dist/api/geom.js +6 -5
- package/dist/api/geom.js.map +1 -1
- package/dist/api/half-space.d.ts +56 -0
- package/dist/api/half-space.d.ts.map +1 -0
- package/dist/api/half-space.js +82 -0
- package/dist/api/half-space.js.map +1 -0
- package/dist/api/helix.d.ts +10 -1
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +19 -3
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +28 -0
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +19 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +31 -8
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts +4 -30
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +10 -42
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +5 -5
- package/dist/api/internal/compat-projection.js +5 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/dual-form-args.d.ts +0 -2
- package/dist/api/internal/dual-form-args.d.ts.map +1 -1
- package/dist/api/internal/dual-form-args.js +1 -3
- package/dist/api/internal/dual-form-args.js.map +1 -1
- package/dist/api/internal/l3-bridge.d.ts +5 -37
- package/dist/api/internal/l3-bridge.d.ts.map +1 -1
- package/dist/api/internal/l3-bridge.js +7 -76
- package/dist/api/internal/l3-bridge.js.map +1 -1
- package/dist/api/internal/profile-wire.d.ts +1 -1
- package/dist/api/internal/profile-wire.js +1 -1
- package/dist/api/internal/profile-wire.js.map +1 -1
- package/dist/api/internal/result-unwrap.d.ts +4 -6
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +4 -6
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +5 -3
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/loft.d.ts +2 -2
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +2 -2
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measurement/index.d.ts +3 -3
- package/dist/api/measurement/index.js +3 -3
- package/dist/api/measurement/index.js.map +1 -1
- package/dist/api/meta.d.ts +91 -0
- package/dist/api/meta.d.ts.map +1 -0
- package/dist/api/meta.js +97 -0
- package/dist/api/meta.js.map +1 -0
- package/dist/api/offset2d.d.ts +49 -0
- package/dist/api/offset2d.d.ts.map +1 -0
- package/dist/api/offset2d.js +86 -0
- package/dist/api/offset2d.js.map +1 -0
- package/dist/api/pattern.js +3 -3
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +124 -8
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/replicate.d.ts +2 -2
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +12 -12
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/result.d.ts +1 -1
- package/dist/api/result.js +1 -1
- package/dist/api/result.js.map +1 -1
- package/dist/api/revolve.d.ts +2 -2
- package/dist/api/revolve.js +3 -3
- package/dist/api/revolve.js.map +1 -1
- package/dist/api/screw.d.ts +1 -1
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +5 -4
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +3 -2
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/shape-type/index.d.ts +141 -0
- package/dist/api/shape-type/index.d.ts.map +1 -0
- package/dist/api/shape-type/index.js +182 -0
- package/dist/api/shape-type/index.js.map +1 -0
- package/dist/api/shell.d.ts +2 -2
- package/dist/api/shell.js +2 -2
- package/dist/api/shell.js.map +1 -1
- package/dist/api/solid-from-faces.d.ts +45 -0
- package/dist/api/solid-from-faces.d.ts.map +1 -0
- package/dist/api/solid-from-faces.js +72 -0
- package/dist/api/solid-from-faces.js.map +1 -0
- package/dist/api/solid-offset/index.d.ts +67 -0
- package/dist/api/solid-offset/index.d.ts.map +1 -0
- package/dist/api/solid-offset/index.js +132 -0
- package/dist/api/solid-offset/index.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +35 -33
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +222 -224
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface-face/index.d.ts +104 -0
- package/dist/api/surface-face/index.d.ts.map +1 -0
- package/dist/api/surface-face/index.js +217 -0
- package/dist/api/surface-face/index.js.map +1 -0
- package/dist/api/surface.d.ts +44 -0
- package/dist/api/surface.d.ts.map +1 -0
- package/dist/api/surface.js +66 -0
- package/dist/api/surface.js.map +1 -0
- package/dist/api/sweep.d.ts +59 -9
- package/dist/api/sweep.d.ts.map +1 -1
- package/dist/api/sweep.js +11 -6
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts +1 -1
- package/dist/api/thicken.js +1 -1
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/transform.d.ts +5 -5
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +11 -10
- package/dist/api/transform.js.map +1 -1
- package/dist/api/view/cameraFns.d.ts +1 -1
- package/dist/api/view/cameraFns.d.ts.map +1 -1
- package/dist/api/view/cameraFns.js +1 -1
- package/dist/api/view/cameraFns.js.map +1 -1
- package/dist/api/view/index.d.ts +0 -2
- package/dist/api/view/index.d.ts.map +1 -1
- package/dist/api/view/index.js +0 -2
- package/dist/api/view/index.js.map +1 -1
- package/dist/api/view/projectionPlanes.d.ts +1 -1
- package/dist/api/view/projectionPlanes.d.ts.map +1 -1
- package/dist/api/view/projectionPlanes.js.map +1 -1
- package/dist/api/view/view-camera.d.ts +7 -9
- package/dist/api/view/view-camera.d.ts.map +1 -1
- package/dist/api/view/view-camera.js +4 -6
- package/dist/api/view/view-camera.js.map +1 -1
- package/dist/api/view/view-projection.d.ts +0 -2
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +0 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/api/view/view-sheet.d.ts +0 -2
- package/dist/api/view/view-sheet.d.ts.map +1 -1
- package/dist/api/view/view-sheet.js +0 -2
- package/dist/api/view/view-sheet.js.map +1 -1
- package/dist/api/view-export/index.d.ts +97 -0
- package/dist/api/view-export/index.d.ts.map +1 -0
- package/dist/api/view-export/index.js +118 -0
- package/dist/api/view-export/index.js.map +1 -0
- package/dist/brep/brep-ops.d.ts +89 -1
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +204 -13
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +20 -0
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +46 -0
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.js +8 -8
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +2 -3
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +1 -2
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +1 -1
- package/dist/brep/engine/registry.js +1 -1
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +2 -2
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/export-model.d.ts +40 -0
- package/dist/brep/export/export-model.d.ts.map +1 -1
- package/dist/brep/export/export-model.js +268 -25
- package/dist/brep/export/export-model.js.map +1 -1
- package/dist/brep/export/step-meta-header.d.ts +102 -0
- package/dist/brep/export/step-meta-header.d.ts.map +1 -0
- package/dist/brep/export/step-meta-header.js +225 -0
- package/dist/brep/export/step-meta-header.js.map +1 -0
- package/dist/brep/export/step.d.ts +5 -1
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +11 -2
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +2 -2
- package/dist/brep/handle-bridge.js +2 -2
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/index.d.ts +6 -3
- package/dist/brep/index.d.ts.map +1 -1
- package/dist/brep/index.js +6 -3
- package/dist/brep/index.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +2 -2
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +5 -4
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +3 -9
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +12 -3
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +6 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +31 -9
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/interp/env.d.ts +1 -1
- package/dist/cad-runtime/interp/env.js.map +1 -1
- package/dist/cad-runtime/lib-id.d.ts +0 -2
- package/dist/cad-runtime/lib-id.d.ts.map +1 -1
- package/dist/cad-runtime/lib-id.js +0 -2
- package/dist/cad-runtime/lib-id.js.map +1 -1
- package/dist/cad-runtime/live-shapes.d.ts +3 -5
- package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
- package/dist/cad-runtime/live-shapes.js +8 -10
- package/dist/cad-runtime/live-shapes.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +3 -3
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +21 -7
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +45 -6
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +4 -3
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +65 -3
- package/dist/define-op.js.map +1 -1
- package/dist/geometry2d/bridge/plane.d.ts +1 -1
- package/dist/geometry2d/bridge/plane.js +1 -1
- package/dist/geometry2d/bridge/plane.js.map +1 -1
- package/dist/geometry2d/curve2d.d.ts +1 -1
- package/dist/geometry2d/curve2d.js +1 -1
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/io/fai-zip/container-read.d.ts +16 -0
- package/dist/io/fai-zip/container-read.d.ts.map +1 -1
- package/dist/io/fai-zip/container-read.js +22 -0
- package/dist/io/fai-zip/container-read.js.map +1 -1
- package/dist/io/fai-zip/index.d.ts +1 -1
- package/dist/io/fai-zip/index.d.ts.map +1 -1
- package/dist/io/fai-zip/index.js +1 -1
- package/dist/io/fai-zip/index.js.map +1 -1
- package/dist/lang/code-to-args.d.ts.map +1 -1
- package/dist/lang/code-to-args.js +10 -1
- package/dist/lang/code-to-args.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts.map +1 -1
- package/dist/lang/determinism-scanner.js +22 -9
- package/dist/lang/determinism-scanner.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +27 -6
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +90 -29
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/parse-error.d.ts +4 -0
- package/dist/lang/parse-error.d.ts.map +1 -1
- package/dist/lang/parse-error.js.map +1 -1
- package/dist/lang/security-scanner.d.ts +27 -2
- package/dist/lang/security-scanner.d.ts.map +1 -1
- package/dist/lang/security-scanner.js +29 -2
- package/dist/lang/security-scanner.js.map +1 -1
- package/dist/lang/source-edit.d.ts +2 -2
- package/dist/lang/source-edit.js.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +36 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +36 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/types.d.ts +5 -6
- package/dist/lang/types.d.ts.map +1 -1
- package/dist/lang/types.js.map +1 -1
- package/dist/mesh/import-model.d.ts +94 -0
- package/dist/mesh/import-model.d.ts.map +1 -0
- package/dist/mesh/import-model.js +15 -0
- package/dist/mesh/import-model.js.map +1 -0
- package/dist/mesh/index.d.ts +19 -58
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +19 -70
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +39 -16
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +151 -22
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +42 -7
- 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 +37 -1
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +205 -14
- 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 +43 -5
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +49 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +125 -19
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/execute-script.d.ts +55 -0
- package/dist/node-host/execute-script.d.ts.map +1 -0
- package/dist/node-host/execute-script.js +46 -0
- package/dist/node-host/execute-script.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -1
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
- package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
- package/dist/occt-kernel/highLevelApi.d.ts +4 -1
- package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
- package/dist/occt-kernel/highLevelApi.js +4 -2
- package/dist/occt-kernel/highLevelApi.js.map +1 -1
- 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 +32 -5
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +1 -1
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +19 -1
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
- package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
- package/dist/occt-kernel/stepMetaParser.js +166 -0
- package/dist/occt-kernel/stepMetaParser.js.map +1 -0
- package/dist/occt-scan/recognize.d.ts +58 -0
- package/dist/occt-scan/recognize.d.ts.map +1 -0
- package/dist/occt-scan/recognize.js +216 -0
- package/dist/occt-scan/recognize.js.map +1 -0
- package/dist/primitives/brep-primitives.js +7 -7
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/result/bug.d.ts +1 -1
- package/dist/result/bug.js +1 -1
- package/dist/result/bug.js.map +1 -1
- package/dist/result/errors.d.ts +2 -2
- package/dist/result/errors.d.ts.map +1 -1
- package/dist/result/errors.js +1 -1
- package/dist/result/errors.js.map +1 -1
- package/dist/result/vec3.d.ts +1 -1
- package/dist/result/vec3.js +1 -1
- package/dist/result/vec3.js.map +1 -1
- package/dist/runtime-state.d.ts +16 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +27 -0
- package/dist/runtime-state.js.map +1 -1
- package/dist/script-globals.d.ts +24 -0
- package/dist/script-globals.d.ts.map +1 -0
- package/dist/script-globals.js +24 -0
- package/dist/script-globals.js.map +1 -0
- package/dist/shape.d.ts +35 -3
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +44 -2
- package/dist/shape.js.map +1 -1
- package/dist/step/stepMetaParser.d.ts +55 -0
- package/dist/step/stepMetaParser.d.ts.map +1 -0
- package/dist/step/stepMetaParser.js +177 -0
- package/dist/step/stepMetaParser.js.map +1 -0
- package/dist/topology/naming/lineage.d.ts +3 -2
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/weapp.d.ts +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +9 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roofFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/roofFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Self-hosted compat-op implementation — roof\n * (core-decouple Phase 3, §5.4; G4).\n *\n * @platform occt\n *\n * 迁移自 vendored `operations/roofFns.ts`(含 pure-TS straightSkeleton,\n * 见同目录 straightSkeleton.ts)。适配:\n * - getEdges → kernel.getSubShapes(handle, 'edge')\n * - curveStartPoint → kernel.curvePointAtParam(edge, 0)\n * - isValidSolid → kernel.isSolid(sew 兜底路径的闭合校验近似)\n * - Result/BrepError 用 core 面;输出 Result<BrepHandle>\n * 守卫与错误码保持 vendored:ROOF_FAILED / STRAIGHT_SKELETON_FAILED。\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { ok, err, type Result } from '../../result/result'\nimport { kernelError, BrepErrorCode } from '../../result/errors'\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport { brepHandleOf } from './brepHelpers'\nimport { computeStraightSkeleton, type SkPoint2D } from './straightSkeleton'\n\nconst ROOF_PARAMS = { name: 'roof', params: ['shape', 'options'], formClass: 'A' as FormClass }\n\n// ---------------------------------------------------------------------------\n// Helpers(照抄 vendored roofFns.ts)\n// ---------------------------------------------------------------------------\n\nfunction extractPolygon(kernel: ReturnType<typeof getBrepApi>, wire: BrepHandle): SkPoint2D[] {\n const edges = kernel.getSubShapes(wire, 'edge')\n const pts = edges.map((e) => {\n const pt = kernel.curvePointAtParam(e, 0)\n return { x: pt.x, y: pt.y }\n })\n const first = pts[0]\n const last = pts[pts.length - 1]\n if (\n pts.length > 1 &&\n first !== undefined &&\n last !== undefined &&\n Math.abs(first.x - last.x) < 1e-10 &&\n Math.abs(first.y - last.y) < 1e-10\n ) {\n pts.pop()\n }\n return pts\n}\n\n/** Fan-triangulate a convex polygon into triangles (index triples). */\nfunction fanTriangulate(count: number): Array<[number, number, number]> {\n const tris: Array<[number, number, number]> = []\n for (let i = 1; i < count - 1; i++) {\n tris.push([0, i, i + 1])\n }\n return tris\n}\n\n/** Signed area cross product for three 2D points (positive = CCW). */\nfunction cross2d(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): number {\n return (bx - ax) * (cy - ay) - (by - ay) * (cx - ax)\n}\n\n/** Check if point (px,py) is strictly inside triangle (a,b,c). */\nfunction pointInTriangle(\n px: number,\n py: number,\n ax: number,\n ay: number,\n bx: number,\n by: number,\n cx: number,\n cy: number,\n): boolean {\n const d1 = cross2d(ax, ay, bx, by, px, py)\n const d2 = cross2d(bx, by, cx, cy, px, py)\n const d3 = cross2d(cx, cy, ax, ay, px, py)\n const hasNeg = d1 < 0 || d2 < 0 || d3 < 0\n const hasPos = d1 > 0 || d2 > 0 || d3 > 0\n return !(hasNeg && hasPos)\n}\n\n/** Ear-clip triangulate a simple polygon(照抄 vendored,含 CW→CCW 归一)。 */\nfunction earClipTriangulate(poly: SkPoint2D[]): Array<[number, number, number]> {\n const n = poly.length\n if (n < 3) return []\n if (n === 3) return [[0, 1, 2]]\n\n let area2 = 0\n for (let i = 0; i < n; i++) {\n const a = poly[i]\n const b = poly[(i + 1) % n]\n if (a && b) area2 += a.x * b.y - b.x * a.y\n }\n if (area2 < 0) {\n const tris = earClipTriangulate([...poly].reverse())\n return tris.map(([a, b, c]) => [n - 1 - a, n - 1 - b, n - 1 - c])\n }\n\n const tris: Array<[number, number, number]> = []\n const idx = poly.map((_, i) => i)\n const isEar = (prev: number, curr: number, next: number): boolean => {\n const a = poly[prev]\n const b = poly[curr]\n const c = poly[next]\n if (!a || !b || !c) return false\n if (cross2d(a.x, a.y, b.x, b.y, c.x, c.y) <= 0) return false\n for (let j = 0; j < n; j++) {\n const p = poly[j]\n if (!p || j === prev || j === curr || j === next) continue\n if (pointInTriangle(p.x, p.y, a.x, a.y, b.x, b.y, c.x, c.y)) return false\n }\n return true\n }\n\n while (idx.length > 3) {\n let clipped = false\n for (let i = 0; i < idx.length; i++) {\n const prev = idx[(i - 1 + idx.length) % idx.length]\n const curr = idx[i]\n const next = idx[(i + 1) % idx.length]\n if (prev === undefined || curr === undefined || next === undefined) continue\n if (isEar(prev, curr, next)) {\n tris.push([prev, curr, next])\n idx.splice(i, 1)\n clipped = true\n break\n }\n }\n if (!clipped) break\n }\n if (idx.length === 3) {\n const [a, b, c] = idx\n if (a !== undefined && b !== undefined && c !== undefined) tris.push([a, b, c])\n }\n return tris\n}\n\n/** Convert skeleton faces into 3D triangular kernel faces(照抄 vendored)。 */\nfunction buildSkeletonTriFaces(\n skeleton: { faces: Array<{ vertices: SkPoint2D[]; heights: number[] }> },\n tanAngle: number,\n kernel: ReturnType<typeof getBrepApi>,\n): BrepHandle[] {\n const triFaces: BrepHandle[] = []\n for (const skFace of skeleton.faces) {\n const verts3d: Array<[number, number, number]> = skFace.vertices.map(\n (v: SkPoint2D, i: number): [number, number, number] => [\n v.x,\n v.y,\n (skFace.heights[i] ?? 0) * tanAngle,\n ],\n )\n\n const tris = fanTriangulate(verts3d.length)\n\n for (const [ai, bi, ci] of tris) {\n const va = verts3d[ai]\n const vb = verts3d[bi]\n const vc = verts3d[ci]\n if (!va || !vb || !vc) continue\n\n const abx = vb[0] - va[0]\n const aby = vb[1] - va[1]\n const abz = vb[2] - va[2]\n const acx = vc[0] - va[0]\n const acy = vc[1] - va[1]\n const acz = vc[2] - va[2]\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const areaSq = nx * nx + ny * ny + nz * nz\n if (areaSq < 1e-20) continue\n\n const triFace = kernel.buildTriFace({ x: va[0], y: va[1], z: va[2] }, { x: vb[0], y: vb[1], z: vb[2] }, { x: vc[0], y: vc[1], z: vc[2] })\n if (triFace !== null) triFaces.push(triFace)\n }\n }\n return triFaces\n}\n\n// ---------------------------------------------------------------------------\n// roof — 平面 wire → 直骨架屋顶实体(vendored roofFns.ts#roof)\n// ---------------------------------------------------------------------------\n\n/**\n * Roof — planar wire to straight-skeleton roof solid (vendored roofFns.ts#roof).\n *\n * @param args - Resolved arguments (wire, roof options).\n * @returns The generated roof solid as a `BrepHandle`.\n */\nexport function roofBrep(...args: unknown[]): Result<BrepHandle> {\n const [shape, options] = resolveArgs(args, ROOF_PARAMS)\n const kernel = getBrepApi()\n const wire = brepHandleOf(shape)\n const angle = ((options as { angle?: number } | undefined)?.angle ?? 45) * (Math.PI / 180)\n const tanAngle = Math.tan(angle)\n\n try {\n const polygon = extractPolygon(kernel, wire)\n if (polygon.length < 3) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Wire must have at least 3 edges for roof generation'),\n )\n }\n\n const skeletonResult = computeStraightSkeleton(polygon)\n if (!skeletonResult.ok) return skeletonResult\n const skeleton = skeletonResult.value\n if (skeleton.faces.length === 0) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Straight skeleton computation produced no faces'),\n )\n }\n\n const triFaces: BrepHandle[] = buildSkeletonTriFaces(skeleton, tanAngle, kernel)\n\n // Bottom face(z=0,ear-clip 支持凹多边形)\n for (const [ai, bi, ci] of earClipTriangulate(polygon)) {\n const pa = polygon[ai]\n const pb = polygon[bi]\n const pc = polygon[ci]\n if (!pa || !pb || !pc) continue\n const va: [number, number, number] = [pa.x, pa.y, 0]\n const vb: [number, number, number] = [pb.x, pb.y, 0]\n const vc: [number, number, number] = [pc.x, pc.y, 0]\n const triFace = kernel.buildTriFace({ x: va[0], y: va[1], z: va[2] }, { x: vc[0], y: vc[1], z: vc[2] }, { x: vb[0], y: vb[1], z: vb[2] })\n if (triFace !== null) triFaces.push(triFace)\n }\n\n if (triFaces.length === 0) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'No valid triangular faces could be built'),\n )\n }\n\n try {\n const solid = kernel.sewAndSolidify(triFaces, 1e-6)\n const fixed = kernel.fixShape(solid)\n if (fixed !== solid) kernel.release(solid)\n return ok(fixed)\n } catch (solidifyErr) {\n try {\n const sewn = kernel.sew(triFaces, 1e-6)\n if (kernel.isSolid(sewn)) return ok(sewn)\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Sew fallback produced invalid solid', solidifyErr),\n )\n } catch (sewErr) {\n return err(kernelError(BrepErrorCode.ROOF_FAILED, 'Failed to sew roof faces', sewErr))\n }\n }\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError(BrepErrorCode.ROOF_FAILED, `Roof generation failed: ${raw}`, e))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"roofFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/roofFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Self-hosted compat-op implementation — roof\n * (core-decouple Phase 3, §5.4; G4).\n *\n * @platform occt\n *\n * 迁移自 brepjs `operations/roofFns.ts`(含 pure-TS straightSkeleton,\n * 见同目录 straightSkeleton.ts)。适配:\n * - getEdges → kernel.getSubShapes(handle, 'edge')\n * - curveStartPoint → kernel.curvePointAtParam(edge, 0)\n * - isValidSolid → kernel.isSolid(sew 兜底路径的闭合校验近似)\n * - Result/BrepError 用 core 面;输出 Result<BrepHandle>\n * 守卫与错误码保持 brepjs:ROOF_FAILED / STRAIGHT_SKELETON_FAILED。\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { ok, err, type Result } from '../../result/result'\nimport { kernelError, BrepErrorCode } from '../../result/errors'\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport { brepHandleOf } from './brepHelpers'\nimport { computeStraightSkeleton, type SkPoint2D } from './straightSkeleton'\n\nconst ROOF_PARAMS = { name: 'roof', params: ['shape', 'options'], formClass: 'A' as FormClass }\n\n// ---------------------------------------------------------------------------\n// Helpers(照抄 brepjs roofFns.ts)\n// ---------------------------------------------------------------------------\n\nfunction extractPolygon(kernel: ReturnType<typeof getBrepApi>, wire: BrepHandle): SkPoint2D[] {\n const edges = kernel.getSubShapes(wire, 'edge')\n const pts = edges.map((e) => {\n const pt = kernel.curvePointAtParam(e, 0)\n return { x: pt.x, y: pt.y }\n })\n const first = pts[0]\n const last = pts[pts.length - 1]\n if (\n pts.length > 1 &&\n first !== undefined &&\n last !== undefined &&\n Math.abs(first.x - last.x) < 1e-10 &&\n Math.abs(first.y - last.y) < 1e-10\n ) {\n pts.pop()\n }\n return pts\n}\n\n/** Fan-triangulate a convex polygon into triangles (index triples). */\nfunction fanTriangulate(count: number): Array<[number, number, number]> {\n const tris: Array<[number, number, number]> = []\n for (let i = 1; i < count - 1; i++) {\n tris.push([0, i, i + 1])\n }\n return tris\n}\n\n/** Signed area cross product for three 2D points (positive = CCW). */\nfunction cross2d(ax: number, ay: number, bx: number, by: number, cx: number, cy: number): number {\n return (bx - ax) * (cy - ay) - (by - ay) * (cx - ax)\n}\n\n/** Check if point (px,py) is strictly inside triangle (a,b,c). */\nfunction pointInTriangle(\n px: number,\n py: number,\n ax: number,\n ay: number,\n bx: number,\n by: number,\n cx: number,\n cy: number,\n): boolean {\n const d1 = cross2d(ax, ay, bx, by, px, py)\n const d2 = cross2d(bx, by, cx, cy, px, py)\n const d3 = cross2d(cx, cy, ax, ay, px, py)\n const hasNeg = d1 < 0 || d2 < 0 || d3 < 0\n const hasPos = d1 > 0 || d2 > 0 || d3 > 0\n return !(hasNeg && hasPos)\n}\n\n/** Ear-clip triangulate a simple polygon(照抄 brepjs,含 CW→CCW 归一)。 */\nfunction earClipTriangulate(poly: SkPoint2D[]): Array<[number, number, number]> {\n const n = poly.length\n if (n < 3) return []\n if (n === 3) return [[0, 1, 2]]\n\n let area2 = 0\n for (let i = 0; i < n; i++) {\n const a = poly[i]\n const b = poly[(i + 1) % n]\n if (a && b) area2 += a.x * b.y - b.x * a.y\n }\n if (area2 < 0) {\n const tris = earClipTriangulate([...poly].reverse())\n return tris.map(([a, b, c]) => [n - 1 - a, n - 1 - b, n - 1 - c])\n }\n\n const tris: Array<[number, number, number]> = []\n const idx = poly.map((_, i) => i)\n const isEar = (prev: number, curr: number, next: number): boolean => {\n const a = poly[prev]\n const b = poly[curr]\n const c = poly[next]\n if (!a || !b || !c) return false\n if (cross2d(a.x, a.y, b.x, b.y, c.x, c.y) <= 0) return false\n for (let j = 0; j < n; j++) {\n const p = poly[j]\n if (!p || j === prev || j === curr || j === next) continue\n if (pointInTriangle(p.x, p.y, a.x, a.y, b.x, b.y, c.x, c.y)) return false\n }\n return true\n }\n\n while (idx.length > 3) {\n let clipped = false\n for (let i = 0; i < idx.length; i++) {\n const prev = idx[(i - 1 + idx.length) % idx.length]\n const curr = idx[i]\n const next = idx[(i + 1) % idx.length]\n if (prev === undefined || curr === undefined || next === undefined) continue\n if (isEar(prev, curr, next)) {\n tris.push([prev, curr, next])\n idx.splice(i, 1)\n clipped = true\n break\n }\n }\n if (!clipped) break\n }\n if (idx.length === 3) {\n const [a, b, c] = idx\n if (a !== undefined && b !== undefined && c !== undefined) tris.push([a, b, c])\n }\n return tris\n}\n\n/** Convert skeleton faces into 3D triangular kernel faces(照抄 brepjs)。 */\nfunction buildSkeletonTriFaces(\n skeleton: { faces: Array<{ vertices: SkPoint2D[]; heights: number[] }> },\n tanAngle: number,\n kernel: ReturnType<typeof getBrepApi>,\n): BrepHandle[] {\n const triFaces: BrepHandle[] = []\n for (const skFace of skeleton.faces) {\n const verts3d: Array<[number, number, number]> = skFace.vertices.map(\n (v: SkPoint2D, i: number): [number, number, number] => [\n v.x,\n v.y,\n (skFace.heights[i] ?? 0) * tanAngle,\n ],\n )\n\n const tris = fanTriangulate(verts3d.length)\n\n for (const [ai, bi, ci] of tris) {\n const va = verts3d[ai]\n const vb = verts3d[bi]\n const vc = verts3d[ci]\n if (!va || !vb || !vc) continue\n\n const abx = vb[0] - va[0]\n const aby = vb[1] - va[1]\n const abz = vb[2] - va[2]\n const acx = vc[0] - va[0]\n const acy = vc[1] - va[1]\n const acz = vc[2] - va[2]\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const areaSq = nx * nx + ny * ny + nz * nz\n if (areaSq < 1e-20) continue\n\n const triFace = kernel.buildTriFace({ x: va[0], y: va[1], z: va[2] }, { x: vb[0], y: vb[1], z: vb[2] }, { x: vc[0], y: vc[1], z: vc[2] })\n if (triFace !== null) triFaces.push(triFace)\n }\n }\n return triFaces\n}\n\n// ---------------------------------------------------------------------------\n// roof — 平面 wire → 直骨架屋顶实体(brepjs roofFns.ts#roof)\n// ---------------------------------------------------------------------------\n\n/**\n * Roof — planar wire to straight-skeleton roof solid (brepjs roofFns.ts#roof).\n *\n * @param args - Resolved arguments (wire, roof options).\n * @returns The generated roof solid as a `BrepHandle`.\n */\nexport function roofBrep(...args: unknown[]): Result<BrepHandle> {\n const [shape, options] = resolveArgs(args, ROOF_PARAMS)\n const kernel = getBrepApi()\n const wire = brepHandleOf(shape)\n const angle = ((options as { angle?: number } | undefined)?.angle ?? 45) * (Math.PI / 180)\n const tanAngle = Math.tan(angle)\n\n try {\n const polygon = extractPolygon(kernel, wire)\n if (polygon.length < 3) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Wire must have at least 3 edges for roof generation'),\n )\n }\n\n const skeletonResult = computeStraightSkeleton(polygon)\n if (!skeletonResult.ok) return skeletonResult\n const skeleton = skeletonResult.value\n if (skeleton.faces.length === 0) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Straight skeleton computation produced no faces'),\n )\n }\n\n const triFaces: BrepHandle[] = buildSkeletonTriFaces(skeleton, tanAngle, kernel)\n\n // Bottom face(z=0,ear-clip 支持凹多边形)\n for (const [ai, bi, ci] of earClipTriangulate(polygon)) {\n const pa = polygon[ai]\n const pb = polygon[bi]\n const pc = polygon[ci]\n if (!pa || !pb || !pc) continue\n const va: [number, number, number] = [pa.x, pa.y, 0]\n const vb: [number, number, number] = [pb.x, pb.y, 0]\n const vc: [number, number, number] = [pc.x, pc.y, 0]\n const triFace = kernel.buildTriFace({ x: va[0], y: va[1], z: va[2] }, { x: vc[0], y: vc[1], z: vc[2] }, { x: vb[0], y: vb[1], z: vb[2] })\n if (triFace !== null) triFaces.push(triFace)\n }\n\n if (triFaces.length === 0) {\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'No valid triangular faces could be built'),\n )\n }\n\n try {\n const solid = kernel.sewAndSolidify(triFaces, 1e-6)\n const fixed = kernel.fixShape(solid)\n if (fixed !== solid) kernel.release(solid)\n return ok(fixed)\n } catch (solidifyErr) {\n try {\n const sewn = kernel.sew(triFaces, 1e-6)\n if (kernel.isSolid(sewn)) return ok(sewn)\n return err(\n kernelError(BrepErrorCode.ROOF_FAILED, 'Sew fallback produced invalid solid', solidifyErr),\n )\n } catch (sewErr) {\n return err(kernelError(BrepErrorCode.ROOF_FAILED, 'Failed to sew roof faces', sewErr))\n }\n }\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError(BrepErrorCode.ROOF_FAILED, `Roof generation failed: ${raw}`, e))\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Semantics mirror
|
|
7
|
+
* Semantics mirror brepjs `operations/{api,extrudeFns,sweepFns}.ts`:
|
|
8
8
|
* - `extrudeBrep` — height: number → [0,0,h]; Vec3 → as-is. EXTRUDE_ZERO_VECTOR guard.
|
|
9
9
|
* - `revolveBrep` — options { at, axis, angle(radians, default 2π) }; REVOLUTION_NOT_3D.
|
|
10
10
|
* - `sweepBrep` — config.mode 'simple' → simplePipe; default → sweepPipeShell(frenet).
|
|
@@ -12,41 +12,41 @@
|
|
|
12
12
|
* supported after selfhosting (cad 面取手写 api/sweep.ts,shell 元组不暴露 §2.4①).
|
|
13
13
|
* - `complexExtrudeBrep` / `twistExtrudeBrep` — linear / helix spine built on
|
|
14
14
|
* occt-wasm makeLineEdge+makeWire / makeHelixWire, then sweepPipeShell.
|
|
15
|
-
* ExtrusionProfile scaling law is not supported (
|
|
15
|
+
* ExtrusionProfile scaling law is not supported (brepjs buildLawFromProfile
|
|
16
16
|
* has no L1 equivalent); non-undefined profile → LAW_UNSUPPORTED error.
|
|
17
17
|
*/
|
|
18
18
|
import type { BrepHandle } from '../../brep/engine/types.js';
|
|
19
19
|
import { type Result } from '../../result/result.js';
|
|
20
20
|
/**
|
|
21
|
-
* Extrude a face along a vector/height (
|
|
21
|
+
* Extrude a face along a vector/height (brepjs api.js#extrude + extrudeFns.ts#extrude).
|
|
22
22
|
*
|
|
23
23
|
* @param args - Resolved arguments (face, height or extrusion vector).
|
|
24
24
|
* @returns The extruded solid as a `BrepHandle`.
|
|
25
25
|
*/
|
|
26
26
|
export declare function extrudeBrep(...args: unknown[]): Result<BrepHandle>;
|
|
27
27
|
/**
|
|
28
|
-
* Revolve a face around an axis (
|
|
28
|
+
* Revolve a face around an axis (brepjs api.js#revolve; angle in radians, default 2π).
|
|
29
29
|
*
|
|
30
30
|
* @param args - Resolved arguments (face, revolve options).
|
|
31
31
|
* @returns The revolved solid as a `BrepHandle`.
|
|
32
32
|
*/
|
|
33
33
|
export declare function revolveBrep(...args: unknown[]): Result<BrepHandle>;
|
|
34
34
|
/**
|
|
35
|
-
* Sweep a profile along a spine (
|
|
35
|
+
* Sweep a profile along a spine (brepjs sweepFns.ts#sweep).
|
|
36
36
|
*
|
|
37
37
|
* @param args - Resolved arguments (wire, spine, config, shellMode).
|
|
38
38
|
* @returns The swept solid as a `BrepHandle`.
|
|
39
39
|
*/
|
|
40
40
|
export declare function sweepBrep(...args: unknown[]): Result<BrepHandle>;
|
|
41
41
|
/**
|
|
42
|
-
* Extrude a wire along a normal (
|
|
42
|
+
* Extrude a wire along a normal (brepjs sweepFns.ts#complexExtrude).
|
|
43
43
|
*
|
|
44
44
|
* @param args - Resolved arguments (wire, center, normal, profile).
|
|
45
45
|
* @returns The extruded solid as a `BrepHandle`.
|
|
46
46
|
*/
|
|
47
47
|
export declare function complexExtrudeBrep(...args: unknown[]): Result<BrepHandle>;
|
|
48
48
|
/**
|
|
49
|
-
* Extrude a wire along a helical path (
|
|
49
|
+
* Extrude a wire along a helical path (brepjs sweepFns.ts#twistExtrude).
|
|
50
50
|
*
|
|
51
51
|
* @param args - Resolved arguments (wire, angleDegrees, center, normal, profile).
|
|
52
52
|
* @returns The twisted extrusion as a `BrepHandle`.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @platform occt
|
|
6
6
|
*
|
|
7
|
-
* Semantics mirror
|
|
7
|
+
* Semantics mirror brepjs `operations/{api,extrudeFns,sweepFns}.ts`:
|
|
8
8
|
* - `extrudeBrep` — height: number → [0,0,h]; Vec3 → as-is. EXTRUDE_ZERO_VECTOR guard.
|
|
9
9
|
* - `revolveBrep` — options { at, axis, angle(radians, default 2π) }; REVOLUTION_NOT_3D.
|
|
10
10
|
* - `sweepBrep` — config.mode 'simple' → simplePipe; default → sweepPipeShell(frenet).
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* supported after selfhosting (cad 面取手写 api/sweep.ts,shell 元组不暴露 §2.4①).
|
|
13
13
|
* - `complexExtrudeBrep` / `twistExtrudeBrep` — linear / helix spine built on
|
|
14
14
|
* occt-wasm makeLineEdge+makeWire / makeHelixWire, then sweepPipeShell.
|
|
15
|
-
* ExtrusionProfile scaling law is not supported (
|
|
15
|
+
* ExtrusionProfile scaling law is not supported (brepjs buildLawFromProfile
|
|
16
16
|
* has no L1 equivalent); non-undefined profile → LAW_UNSUPPORTED error.
|
|
17
17
|
*/
|
|
18
18
|
import { getBrepApi } from '../../brep/handle-bridge.js';
|
|
@@ -29,7 +29,7 @@ const TWIST_EXTRUDE_PARAMS = { name: 'twistExtrude', params: ['wire', 'angleDegr
|
|
|
29
29
|
function vecLength(v) {
|
|
30
30
|
return Math.hypot(v[0], v[1], v[2]);
|
|
31
31
|
}
|
|
32
|
-
/** 构造直线 spine wire(
|
|
32
|
+
/** 构造直线 spine wire(brepjs makeSpineWire)。 */
|
|
33
33
|
function makeSpineWire(kernel, start, end) {
|
|
34
34
|
const e = kernel.makeLineEdge({ x: start[0], y: start[1], z: start[2] }, { x: end[0], y: end[1], z: end[2] });
|
|
35
35
|
const w = kernel.makeWire([e]);
|
|
@@ -37,10 +37,10 @@ function makeSpineWire(kernel, start, end) {
|
|
|
37
37
|
return w;
|
|
38
38
|
}
|
|
39
39
|
// ---------------------------------------------------------------------------
|
|
40
|
-
// extrude — face 沿向量/高度拉伸(
|
|
40
|
+
// extrude — face 沿向量/高度拉伸(brepjs api.js#extrude + extrudeFns.ts#extrude)
|
|
41
41
|
// ---------------------------------------------------------------------------
|
|
42
42
|
/**
|
|
43
|
-
* Extrude a face along a vector/height (
|
|
43
|
+
* Extrude a face along a vector/height (brepjs api.js#extrude + extrudeFns.ts#extrude).
|
|
44
44
|
*
|
|
45
45
|
* @param args - Resolved arguments (face, height or extrusion vector).
|
|
46
46
|
* @returns The extruded solid as a `BrepHandle`.
|
|
@@ -62,10 +62,10 @@ export function extrudeBrep(...args) {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
// ---------------------------------------------------------------------------
|
|
65
|
-
// revolve — face 绕轴旋转(
|
|
65
|
+
// revolve — face 绕轴旋转(brepjs api.js#revolve;angle 单位弧度,默认 2π)
|
|
66
66
|
// ---------------------------------------------------------------------------
|
|
67
67
|
/**
|
|
68
|
-
* Revolve a face around an axis (
|
|
68
|
+
* Revolve a face around an axis (brepjs api.js#revolve; angle in radians, default 2π).
|
|
69
69
|
*
|
|
70
70
|
* @param args - Resolved arguments (face, revolve options).
|
|
71
71
|
* @returns The revolved solid as a `BrepHandle`.
|
|
@@ -85,10 +85,10 @@ export function revolveBrep(...args) {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
// ---------------------------------------------------------------------------
|
|
88
|
-
// sweep — 截面沿脊柱扫掠(
|
|
88
|
+
// sweep — 截面沿脊柱扫掠(brepjs sweepFns.ts#sweep)
|
|
89
89
|
// ---------------------------------------------------------------------------
|
|
90
90
|
/**
|
|
91
|
-
* Sweep a profile along a spine (
|
|
91
|
+
* Sweep a profile along a spine (brepjs sweepFns.ts#sweep).
|
|
92
92
|
*
|
|
93
93
|
* @param args - Resolved arguments (wire, spine, config, shellMode).
|
|
94
94
|
* @returns The swept solid as a `BrepHandle`.
|
|
@@ -116,10 +116,10 @@ export function sweepBrep(...args) {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
// ---------------------------------------------------------------------------
|
|
119
|
-
// complexExtrude — wire 沿 normal 挤出(
|
|
119
|
+
// complexExtrude — wire 沿 normal 挤出(brepjs sweepFns.ts#complexExtrude)
|
|
120
120
|
// ---------------------------------------------------------------------------
|
|
121
121
|
/**
|
|
122
|
-
* Extrude a wire along a normal (
|
|
122
|
+
* Extrude a wire along a normal (brepjs sweepFns.ts#complexExtrude).
|
|
123
123
|
*
|
|
124
124
|
* @param args - Resolved arguments (wire, center, normal, profile).
|
|
125
125
|
* @returns The extruded solid as a `BrepHandle`.
|
|
@@ -151,10 +151,10 @@ export function complexExtrudeBrep(...args) {
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
// ---------------------------------------------------------------------------
|
|
154
|
-
// twistExtrude — wire 沿螺旋挤出(
|
|
154
|
+
// twistExtrude — wire 沿螺旋挤出(brepjs sweepFns.ts#twistExtrude)
|
|
155
155
|
// ---------------------------------------------------------------------------
|
|
156
156
|
/**
|
|
157
|
-
* Extrude a wire along a helical path (
|
|
157
|
+
* Extrude a wire along a helical path (brepjs sweepFns.ts#twistExtrude).
|
|
158
158
|
*
|
|
159
159
|
* @param args - Resolved arguments (wire, angleDegrees, center, normal, profile).
|
|
160
160
|
* @returns The twisted extrusion as a `BrepHandle`.
|
|
@@ -180,7 +180,7 @@ export function twistExtrudeBrep(...args) {
|
|
|
180
180
|
}
|
|
181
181
|
const extrusionLength = vecLength(n);
|
|
182
182
|
const pitch = (360.0 / Math.abs(angle)) * extrusionLength;
|
|
183
|
-
//
|
|
183
|
+
// brepjs 语义:主 spine=直线、auxiliary=helix,sweepPipeShell 传对象参数
|
|
184
184
|
// (occt-wasm 运行时接受 auxiliary 键;d.ts 窄签名用 as never 绕过)
|
|
185
185
|
const endPointTwist = [c[0] + n[0], c[1] + n[1], c[2] + n[2]];
|
|
186
186
|
const spine = makeSpineWire(kernel, c, endPointTwist);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sweepFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/sweepFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Self-hosted compat-op implementations — extrude/revolve/sweep family\n * (core-decouple Phase 3, §5.4; G3).\n *\n * @platform occt\n *\n * Semantics mirror vendored `operations/{api,extrudeFns,sweepFns}.ts`:\n * - `extrudeBrep` — height: number → [0,0,h]; Vec3 → as-is. EXTRUDE_ZERO_VECTOR guard.\n * - `revolveBrep` — options { at, axis, angle(radians, default 2π) }; REVOLUTION_NOT_3D.\n * - `sweepBrep` — config.mode 'simple' → simplePipe; default → sweepPipeShell(frenet).\n * shellMode / law / auxiliarySpine / support / correction configs are not\n * supported after selfhosting (cad 面取手写 api/sweep.ts,shell 元组不暴露 §2.4①).\n * - `complexExtrudeBrep` / `twistExtrudeBrep` — linear / helix spine built on\n * occt-wasm makeLineEdge+makeWire / makeHelixWire, then sweepPipeShell.\n * ExtrusionProfile scaling law is not supported (vendored buildLawFromProfile\n * has no L1 equivalent); non-undefined profile → LAW_UNSUPPORTED error.\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { ok, err, type Result } from '../../result/result'\nimport { kernelError, validationError } from '../../result/errors'\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport type { Vec3 } from '../brepjs-compat/types'\nimport { brepHandleOf } from './brepHelpers'\nimport { getOcctKernel } from '../../occt-kernel/occtKernel'\n\nconst EXTRUDE_PARAMS = { name: 'extrude', params: ['face', 'height'], formClass: 'A' as FormClass }\nconst REVOLVE_PARAMS = { name: 'revolve', params: ['face', 'options'], formClass: 'A' as FormClass }\nconst SWEEP_PARAMS = { name: 'sweep', params: ['wire', 'spine', 'config', 'shellMode'], formClass: 'A' as FormClass }\nconst COMPLEX_EXTRUDE_PARAMS = { name: 'complexExtrude', params: ['wire', 'center', 'normal', 'profile'], formClass: 'A' as FormClass }\nconst TWIST_EXTRUDE_PARAMS = { name: 'twistExtrude', params: ['wire', 'angleDegrees', 'center', 'normal', 'profile'], formClass: 'A' as FormClass }\n\nfunction vecLength(v: readonly number[]): number {\n return Math.hypot(v[0], v[1], v[2])\n}\n\n/** 构造直线 spine wire(vendored makeSpineWire)。 */\nfunction makeSpineWire(kernel: ReturnType<typeof getBrepApi>, start: Vec3, end: Vec3): BrepHandle {\n const e = kernel.makeLineEdge({ x: start[0], y: start[1], z: start[2] }, { x: end[0], y: end[1], z: end[2] })\n const w = kernel.makeWire([e])\n kernel.release(e)\n return w\n}\n\n// ---------------------------------------------------------------------------\n// extrude — face 沿向量/高度拉伸(vendored api.js#extrude + extrudeFns.ts#extrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a face along a vector/height (vendored api.js#extrude + extrudeFns.ts#extrude).\n *\n * @param args - Resolved arguments (face, height or extrusion vector).\n * @returns The extruded solid as a `BrepHandle`.\n */\nexport function extrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [face, height] = resolveArgs(args, EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const f = brepHandleOf(face)\n const vec: Vec3 = typeof height === 'number' ? [0, 0, height] : (height as Vec3)\n if (vecLength(vec) < 1e-10) {\n return err(validationError('EXTRUDE_ZERO_VECTOR', 'extrude: extrusion vector has zero length'))\n }\n try {\n return ok(kernel.extrude(f, vec[0], vec[1], vec[2]))\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('EXTRUDE_FAILED', `Extrusion operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// revolve — face 绕轴旋转(vendored api.js#revolve;angle 单位弧度,默认 2π)\n// ---------------------------------------------------------------------------\n\n/**\n * Revolve a face around an axis (vendored api.js#revolve; angle in radians, default 2π).\n *\n * @param args - Resolved arguments (face, revolve options).\n * @returns The revolved solid as a `BrepHandle`.\n */\nexport function revolveBrep(...args: unknown[]): Result<BrepHandle> {\n const [face, options] = resolveArgs(args, REVOLVE_PARAMS)\n const kernel = getBrepApi()\n const f = brepHandleOf(face)\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: Vec3\n axis?: Vec3\n angle?: number\n }\n try {\n const h = kernel.revolveVec(\n f,\n { x: at[0], y: at[1], z: at[2] },\n { x: axis[0], y: axis[1], z: axis[2] },\n (angle * 180) / Math.PI,\n )\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('REVOLVE_FAILED', `Revolution operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// sweep — 截面沿脊柱扫掠(vendored sweepFns.ts#sweep)\n// ---------------------------------------------------------------------------\n\n/**\n * Sweep a profile along a spine (vendored sweepFns.ts#sweep).\n *\n * @param args - Resolved arguments (wire, spine, config, shellMode).\n * @returns The swept solid as a `BrepHandle`.\n */\nexport function sweepBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, spine, config, shellMode] = resolveArgs(args, SWEEP_PARAMS)\n const w = brepHandleOf(wire)\n const sp = brepHandleOf(spine)\n const cfg = (config ?? {}) as { mode?: string; frenet?: boolean; transitionMode?: string }\n if (shellMode === true) {\n return err(\n validationError(\n 'SWEEP_SHELL_MODE_UNSUPPORTED',\n 'sweep shellMode is not supported after selfhosting (cad 面不暴露壳元组 §2.4①)',\n ),\n )\n }\n if (cfg.transitionMode !== undefined && cfg.transitionMode !== 'right') {\n return err(\n validationError(\n 'SWEEP_TRANSITION_UNSUPPORTED',\n `sweep transitionMode '${cfg.transitionMode}' is not supported after selfhosting (only 'right' default)`,\n ),\n )\n }\n try {\n if (cfg.mode === 'simple') {\n return ok(getOcctKernel().simplePipe(w as never, sp as never) as unknown as BrepHandle)\n }\n return ok(getOcctKernel().sweepPipeShell(w as never, sp as never, cfg.frenet === true, false) as unknown as BrepHandle)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `Sweep operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// complexExtrude — wire 沿 normal 挤出(vendored sweepFns.ts#complexExtrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a wire along a normal (vendored sweepFns.ts#complexExtrude).\n *\n * @param args - Resolved arguments (wire, center, normal, profile).\n * @returns The extruded solid as a `BrepHandle`.\n */\nexport function complexExtrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, center, normal, profile] = resolveArgs(args, COMPLEX_EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const w = brepHandleOf(wire)\n const c = (center ?? [0, 0, 0]) as Vec3\n const n = (normal ?? [0, 0, 0]) as Vec3\n\n if (vecLength(n) < 1e-10) {\n return err(validationError('ZERO_LENGTH_EXTRUSION', 'Extrusion vector cannot have zero length'))\n }\n if (profile !== undefined && profile !== null) {\n return err(\n validationError(\n 'COMPLEX_EXTRUDE_LAW_UNSUPPORTED',\n 'complexExtrude ExtrusionProfile scaling law is not supported after selfhosting',\n ),\n )\n }\n const endPoint: Vec3 = [c[0] + n[0], c[1] + n[1], c[2] + n[2]]\n const spine = makeSpineWire(kernel, c, endPoint)\n try {\n const h = getOcctKernel().sweepPipeShell(w as never, spine as never, false, false) as unknown as BrepHandle\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `complexExtrude sweep failed: ${raw}`, e))\n } finally {\n kernel.release(spine)\n }\n}\n\n// ---------------------------------------------------------------------------\n// twistExtrude — wire 沿螺旋挤出(vendored sweepFns.ts#twistExtrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a wire along a helical path (vendored sweepFns.ts#twistExtrude).\n *\n * @param args - Resolved arguments (wire, angleDegrees, center, normal, profile).\n * @returns The twisted extrusion as a `BrepHandle`.\n */\nexport function twistExtrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, angleDegrees, center, normal, profile] = resolveArgs(args, TWIST_EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const w = brepHandleOf(wire)\n const angle = Number(angleDegrees)\n const c = (center ?? [0, 0, 0]) as Vec3\n const n = (normal ?? [0, 0, 0]) as Vec3\n\n if (Math.abs(angle) < 1e-10) {\n return err(validationError('ZERO_TWIST_ANGLE', 'Twist angle cannot be zero'))\n }\n if (angle < 0) {\n return err(\n validationError(\n 'TWIST_NEGATIVE_ANGLE_UNSUPPORTED',\n 'twistExtrude negative angle (left-handed helix) is not supported after selfhosting (occt-wasm makeHelixWire has no handedness param)',\n ),\n )\n }\n if (vecLength(n) < 1e-10) {\n return err(validationError('ZERO_LENGTH_EXTRUSION', 'Extrusion vector cannot have zero length'))\n }\n if (profile !== undefined && profile !== null) {\n return err(\n validationError(\n 'TWIST_EXTRUDE_LAW_UNSUPPORTED',\n 'twistExtrude ExtrusionProfile scaling law is not supported after selfhosting',\n ),\n )\n }\n const extrusionLength = vecLength(n)\n const pitch = (360.0 / Math.abs(angle)) * extrusionLength\n // vendored 语义:主 spine=直线、auxiliary=helix,sweepPipeShell 传对象参数\n // (occt-wasm 运行时接受 auxiliary 键;d.ts 窄签名用 as never 绕过)\n const endPointTwist: Vec3 = [c[0] + n[0], c[1] + n[1], c[2] + n[2]]\n const spine = makeSpineWire(kernel, c, endPointTwist)\n const axisDir = vecLength(n) > 1e-12 ? [n[0] / vecLength(n), n[1] / vecLength(n), n[2] / vecLength(n)] : [0, 0, 1]\n try {\n const helix = getOcctKernel().makeHelixWire(\n { x: c[0], y: c[1], z: c[2] },\n { x: axisDir[0], y: axisDir[1], z: axisDir[2] },\n pitch,\n extrusionLength,\n 1,\n )\n const h = getOcctKernel().sweepPipeShell(w as never, spine as never, { auxiliary: helix } as never) as unknown as BrepHandle\n getOcctKernel().release(helix as never)\n kernel.release(spine)\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `twistExtrude sweep failed: ${raw}`, e))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sweepFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/sweepFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Self-hosted compat-op implementations — extrude/revolve/sweep family\n * (core-decouple Phase 3, §5.4; G3).\n *\n * @platform occt\n *\n * Semantics mirror brepjs `operations/{api,extrudeFns,sweepFns}.ts`:\n * - `extrudeBrep` — height: number → [0,0,h]; Vec3 → as-is. EXTRUDE_ZERO_VECTOR guard.\n * - `revolveBrep` — options { at, axis, angle(radians, default 2π) }; REVOLUTION_NOT_3D.\n * - `sweepBrep` — config.mode 'simple' → simplePipe; default → sweepPipeShell(frenet).\n * shellMode / law / auxiliarySpine / support / correction configs are not\n * supported after selfhosting (cad 面取手写 api/sweep.ts,shell 元组不暴露 §2.4①).\n * - `complexExtrudeBrep` / `twistExtrudeBrep` — linear / helix spine built on\n * occt-wasm makeLineEdge+makeWire / makeHelixWire, then sweepPipeShell.\n * ExtrusionProfile scaling law is not supported (brepjs buildLawFromProfile\n * has no L1 equivalent); non-undefined profile → LAW_UNSUPPORTED error.\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { ok, err, type Result } from '../../result/result'\nimport { kernelError, validationError } from '../../result/errors'\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport type { Vec3 } from '../brepjs-compat/types'\nimport { brepHandleOf } from './brepHelpers'\nimport { getOcctKernel } from '../../occt-kernel/occtKernel'\n\nconst EXTRUDE_PARAMS = { name: 'extrude', params: ['face', 'height'], formClass: 'A' as FormClass }\nconst REVOLVE_PARAMS = { name: 'revolve', params: ['face', 'options'], formClass: 'A' as FormClass }\nconst SWEEP_PARAMS = { name: 'sweep', params: ['wire', 'spine', 'config', 'shellMode'], formClass: 'A' as FormClass }\nconst COMPLEX_EXTRUDE_PARAMS = { name: 'complexExtrude', params: ['wire', 'center', 'normal', 'profile'], formClass: 'A' as FormClass }\nconst TWIST_EXTRUDE_PARAMS = { name: 'twistExtrude', params: ['wire', 'angleDegrees', 'center', 'normal', 'profile'], formClass: 'A' as FormClass }\n\nfunction vecLength(v: readonly number[]): number {\n return Math.hypot(v[0], v[1], v[2])\n}\n\n/** 构造直线 spine wire(brepjs makeSpineWire)。 */\nfunction makeSpineWire(kernel: ReturnType<typeof getBrepApi>, start: Vec3, end: Vec3): BrepHandle {\n const e = kernel.makeLineEdge({ x: start[0], y: start[1], z: start[2] }, { x: end[0], y: end[1], z: end[2] })\n const w = kernel.makeWire([e])\n kernel.release(e)\n return w\n}\n\n// ---------------------------------------------------------------------------\n// extrude — face 沿向量/高度拉伸(brepjs api.js#extrude + extrudeFns.ts#extrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a face along a vector/height (brepjs api.js#extrude + extrudeFns.ts#extrude).\n *\n * @param args - Resolved arguments (face, height or extrusion vector).\n * @returns The extruded solid as a `BrepHandle`.\n */\nexport function extrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [face, height] = resolveArgs(args, EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const f = brepHandleOf(face)\n const vec: Vec3 = typeof height === 'number' ? [0, 0, height] : (height as Vec3)\n if (vecLength(vec) < 1e-10) {\n return err(validationError('EXTRUDE_ZERO_VECTOR', 'extrude: extrusion vector has zero length'))\n }\n try {\n return ok(kernel.extrude(f, vec[0], vec[1], vec[2]))\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('EXTRUDE_FAILED', `Extrusion operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// revolve — face 绕轴旋转(brepjs api.js#revolve;angle 单位弧度,默认 2π)\n// ---------------------------------------------------------------------------\n\n/**\n * Revolve a face around an axis (brepjs api.js#revolve; angle in radians, default 2π).\n *\n * @param args - Resolved arguments (face, revolve options).\n * @returns The revolved solid as a `BrepHandle`.\n */\nexport function revolveBrep(...args: unknown[]): Result<BrepHandle> {\n const [face, options] = resolveArgs(args, REVOLVE_PARAMS)\n const kernel = getBrepApi()\n const f = brepHandleOf(face)\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: Vec3\n axis?: Vec3\n angle?: number\n }\n try {\n const h = kernel.revolveVec(\n f,\n { x: at[0], y: at[1], z: at[2] },\n { x: axis[0], y: axis[1], z: axis[2] },\n (angle * 180) / Math.PI,\n )\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('REVOLVE_FAILED', `Revolution operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// sweep — 截面沿脊柱扫掠(brepjs sweepFns.ts#sweep)\n// ---------------------------------------------------------------------------\n\n/**\n * Sweep a profile along a spine (brepjs sweepFns.ts#sweep).\n *\n * @param args - Resolved arguments (wire, spine, config, shellMode).\n * @returns The swept solid as a `BrepHandle`.\n */\nexport function sweepBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, spine, config, shellMode] = resolveArgs(args, SWEEP_PARAMS)\n const w = brepHandleOf(wire)\n const sp = brepHandleOf(spine)\n const cfg = (config ?? {}) as { mode?: string; frenet?: boolean; transitionMode?: string }\n if (shellMode === true) {\n return err(\n validationError(\n 'SWEEP_SHELL_MODE_UNSUPPORTED',\n 'sweep shellMode is not supported after selfhosting (cad 面不暴露壳元组 §2.4①)',\n ),\n )\n }\n if (cfg.transitionMode !== undefined && cfg.transitionMode !== 'right') {\n return err(\n validationError(\n 'SWEEP_TRANSITION_UNSUPPORTED',\n `sweep transitionMode '${cfg.transitionMode}' is not supported after selfhosting (only 'right' default)`,\n ),\n )\n }\n try {\n if (cfg.mode === 'simple') {\n return ok(getOcctKernel().simplePipe(w as never, sp as never) as unknown as BrepHandle)\n }\n return ok(getOcctKernel().sweepPipeShell(w as never, sp as never, cfg.frenet === true, false) as unknown as BrepHandle)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `Sweep operation failed: ${raw}`, e))\n }\n}\n\n// ---------------------------------------------------------------------------\n// complexExtrude — wire 沿 normal 挤出(brepjs sweepFns.ts#complexExtrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a wire along a normal (brepjs sweepFns.ts#complexExtrude).\n *\n * @param args - Resolved arguments (wire, center, normal, profile).\n * @returns The extruded solid as a `BrepHandle`.\n */\nexport function complexExtrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, center, normal, profile] = resolveArgs(args, COMPLEX_EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const w = brepHandleOf(wire)\n const c = (center ?? [0, 0, 0]) as Vec3\n const n = (normal ?? [0, 0, 0]) as Vec3\n\n if (vecLength(n) < 1e-10) {\n return err(validationError('ZERO_LENGTH_EXTRUSION', 'Extrusion vector cannot have zero length'))\n }\n if (profile !== undefined && profile !== null) {\n return err(\n validationError(\n 'COMPLEX_EXTRUDE_LAW_UNSUPPORTED',\n 'complexExtrude ExtrusionProfile scaling law is not supported after selfhosting',\n ),\n )\n }\n const endPoint: Vec3 = [c[0] + n[0], c[1] + n[1], c[2] + n[2]]\n const spine = makeSpineWire(kernel, c, endPoint)\n try {\n const h = getOcctKernel().sweepPipeShell(w as never, spine as never, false, false) as unknown as BrepHandle\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `complexExtrude sweep failed: ${raw}`, e))\n } finally {\n kernel.release(spine)\n }\n}\n\n// ---------------------------------------------------------------------------\n// twistExtrude — wire 沿螺旋挤出(brepjs sweepFns.ts#twistExtrude)\n// ---------------------------------------------------------------------------\n\n/**\n * Extrude a wire along a helical path (brepjs sweepFns.ts#twistExtrude).\n *\n * @param args - Resolved arguments (wire, angleDegrees, center, normal, profile).\n * @returns The twisted extrusion as a `BrepHandle`.\n */\nexport function twistExtrudeBrep(...args: unknown[]): Result<BrepHandle> {\n const [wire, angleDegrees, center, normal, profile] = resolveArgs(args, TWIST_EXTRUDE_PARAMS)\n const kernel = getBrepApi()\n const w = brepHandleOf(wire)\n const angle = Number(angleDegrees)\n const c = (center ?? [0, 0, 0]) as Vec3\n const n = (normal ?? [0, 0, 0]) as Vec3\n\n if (Math.abs(angle) < 1e-10) {\n return err(validationError('ZERO_TWIST_ANGLE', 'Twist angle cannot be zero'))\n }\n if (angle < 0) {\n return err(\n validationError(\n 'TWIST_NEGATIVE_ANGLE_UNSUPPORTED',\n 'twistExtrude negative angle (left-handed helix) is not supported after selfhosting (occt-wasm makeHelixWire has no handedness param)',\n ),\n )\n }\n if (vecLength(n) < 1e-10) {\n return err(validationError('ZERO_LENGTH_EXTRUSION', 'Extrusion vector cannot have zero length'))\n }\n if (profile !== undefined && profile !== null) {\n return err(\n validationError(\n 'TWIST_EXTRUDE_LAW_UNSUPPORTED',\n 'twistExtrude ExtrusionProfile scaling law is not supported after selfhosting',\n ),\n )\n }\n const extrusionLength = vecLength(n)\n const pitch = (360.0 / Math.abs(angle)) * extrusionLength\n // brepjs 语义:主 spine=直线、auxiliary=helix,sweepPipeShell 传对象参数\n // (occt-wasm 运行时接受 auxiliary 键;d.ts 窄签名用 as never 绕过)\n const endPointTwist: Vec3 = [c[0] + n[0], c[1] + n[1], c[2] + n[2]]\n const spine = makeSpineWire(kernel, c, endPointTwist)\n const axisDir = vecLength(n) > 1e-12 ? [n[0] / vecLength(n), n[1] / vecLength(n), n[2] / vecLength(n)] : [0, 0, 1]\n try {\n const helix = getOcctKernel().makeHelixWire(\n { x: c[0], y: c[1], z: c[2] },\n { x: axisDir[0], y: axisDir[1], z: axisDir[2] },\n pitch,\n extrusionLength,\n 1,\n )\n const h = getOcctKernel().sweepPipeShell(w as never, spine as never, { auxiliary: helix } as never) as unknown as BrepHandle\n getOcctKernel().release(helix as never)\n kernel.release(spine)\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n return err(kernelError('SWEEP_FAILED', `twistExtrude sweep failed: ${raw}`, e))\n }\n}\n"]}
|
|
@@ -73,7 +73,7 @@ export declare function threadBrep(kernel: BrepEngineApi, options: ThreadOptions
|
|
|
73
73
|
import { type Result } from '../../result/result.js';
|
|
74
74
|
/**
|
|
75
75
|
* compat-op wrapper: thread(options) → Result<BrepHandle>.
|
|
76
|
-
* Converges on core threadBrep (§5.4:
|
|
76
|
+
* Converges on core threadBrep (§5.4: brepjs compat op and core version merged into one).
|
|
77
77
|
* threadBrep internal validation throws are caught as Result err (codes THREAD_INVALID_ARGS / THREAD_FAILED).
|
|
78
78
|
*
|
|
79
79
|
* @param args - Resolved arguments (thread options).
|
|
@@ -114,7 +114,7 @@ import { validationError, kernelError } from '../../result/errors.js';
|
|
|
114
114
|
const THREAD_PARAMS = { name: 'thread', params: ['options'], formClass: 'B1' };
|
|
115
115
|
/**
|
|
116
116
|
* compat-op wrapper: thread(options) → Result<BrepHandle>.
|
|
117
|
-
* Converges on core threadBrep (§5.4:
|
|
117
|
+
* Converges on core threadBrep (§5.4: brepjs compat op and core version merged into one).
|
|
118
118
|
* threadBrep internal validation throws are caught as Result err (codes THREAD_INVALID_ARGS / THREAD_FAILED).
|
|
119
119
|
*
|
|
120
120
|
* @param args - Resolved arguments (thread options).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/threadFns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,aAAa,EAAoB,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AA4BrD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CACxB,MAAqB,EACrB,OAAsB;IAEtB,MAAM,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,KAAK,GAAG,GAAG,GAAG,KAAK,EACnB,cAAc,GAAG,IAAI,GAAG,KAAK,EAC7B,KAAK,GAAG,CAAC,EACT,eAAe,GAAG,EAAE,EACpB,QAAQ,GAAG,KAAK,EAChB,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAA;IAEX,OAAO;IACP,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACrE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACrE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC,CAAA;IAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA,CAAC,iBAAiB;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,CAAC,qBAAqB;IACvD,MAAM,CAAC,GAAG,cAAc,CAAA;IAExB,SAAS;IACT,MAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,MAAM,iBAAiB,GAAiB,EAAE,CAAA;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,eAAe,CAAA;QACrD,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEvB,0BAA0B;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE;YACd,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE;YACd,CAAC,EAAE,CAAC,GAAG,CAAC;SACT,CAAC,CAAA;QAEF,yCAAyC;QACzC,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC;YACvB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAE/C,MAAM;QACN,MAAM,KAAK,GAAiB,EAAE,CAAA;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;QAED,UAAU;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,+DAA+D;IAC/D,kCAAkC;IAClC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,QAAoC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAErF,SAAS;IACT,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,iBAAiB;QAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEpD,OAAO,MAA+B,CAAA;AACxC,CAAC;AAUD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAe,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAiB,EAAE,CAAA;AAE3F;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,GAAG,IAAe;IAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,OAAwB,CAAC,CAAA;QACtD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACtD,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,OAAO,GAAG,CAAC,eAAe,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,GAAG,CAAC,WAAW,CAAC,eAAe,EAAE,6BAA6B,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACjF,CAAC;AACH,CAAC","sourcesContent":["/**\n * Functional thread operation — builds a helical screw thread.\n *\n * @platform occt — 本文件 import occt-kernel:螺纹用 `loft`\n * (BRepOffsetAPI_ThruSections)构造,loft 是 occt-only(L1 无,engine-method-map\n * `loft` → occt-only)。守卫①要求平台 import 自证身份;调用方 op(screw)声明\n * `engines: ['occt']`(D11)。\n *\n * 适配自 brepjs `src/operations/threadFns.ts`。\n * 保留文件名和核心算法,适配本项目的 occt-wasm API。\n *\n * occt-wasm 的 `BRepOffsetAPI_MakePipeShell` (sweep) 无法可靠地沿螺旋线扫掠截面,\n * 因此螺纹用 loft(`BRepOffsetAPI_ThruSections`)穿过一系列旋转的齿截面构造。\n * 结果是螺旋螺纹的 *ridge* — 外螺纹 fuse 到螺杆,内螺纹 cut 从孔中减去。\n *\n * 与 brepjs 的差异:\n * - brepjs 用 BlueprintSketcher + line() + wire() 构造截面 → 本项目直接用 kernel.makeLineEdge + kernel.makeWire\n * - brepjs 用 loft() 函数 → 本项目直接用 kernel.loft(wires, isSolid, ruled)\n * - brepjs 用 DisposalScope 管理中间句柄 → 本项目手动 kernel.release\n * - brepjs 用 Result 类型 → 本项目抛出异常\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { BrepEngineApi } from '../../brep/engine/primitives'\nimport { getOcctKernel, type ShapeHandle } from '../../occt-kernel/occtKernel'\nimport { getBrepApi } from '../../brep/handle-bridge'\n\n/** 螺纹配置参数。单位 mm,角度由螺距推导。 */\nexport interface ThreadOptions {\n /** 核心半径(外螺纹)或名义孔半径(内螺纹),在螺纹根部 */\n radius: number\n /** 每圈轴向距离(螺距) */\n pitch: number\n /** 螺纹总长(沿轴)。圈数 = height / pitch */\n height: number\n /** 径向螺纹高度(齿顶 - 齿根)。默认 0.6 * pitch(≈ISO 60° V 型) */\n depth?: number\n /** 齿根处轴向半宽。默认 0.42 * pitch */\n toothHalfWidth?: number\n /**\n * flat 顶宽,给出梯形齿而非尖 V 型。\n * 0(默认)= 尖 V(ISO/UN);正值 = 梯形齿(Acme/square)。\n * 必须 < toothHalfWidth。\n */\n crest?: number\n /** 每圈截面数 — 越高越平滑但越慢。默认 20 */\n sectionsPerTurn?: number\n /** 左旋。默认 false(右旋) */\n lefthand?: boolean\n /** 齿尖朝向轴心(内螺纹用 cut 从孔中减去时) */\n inward?: boolean\n}\n\n/**\n * 通过 loft 旋转齿截面构建螺旋螺纹 ridge。\n *\n * @param kernel OCCT 内核\n * @param options 螺纹配置\n * @returns 螺纹 ridge solid(BrepHandle)\n *\n * @example 外螺纹(Ø12 螺杆,2.5mm 螺距):\n * ```ts\n * const ridge = threadBrep(kernel, { radius: 6, pitch: 2.5, height: 7.5 })\n * const rod = kernel.makeCylinder(6.15, 7.5)\n * const result = kernel.fuse(rod, ridge)\n * kernel.release(rod)\n * kernel.release(ridge)\n * ```\n *\n * @example 内螺纹(攻丝 Ø6 孔):\n * ```ts\n * const ridge = threadBrep(kernel, { radius: 3, pitch: 1, height: 6, inward: true })\n * const result = kernel.cut(boredBlock, ridge)\n * kernel.release(ridge)\n * ```\n */\nexport function threadBrep(\n kernel: BrepEngineApi,\n options: ThreadOptions,\n): BrepHandle {\n const {\n radius,\n pitch,\n height,\n depth = 0.6 * pitch,\n toothHalfWidth = 0.42 * pitch,\n crest = 0,\n sectionsPerTurn = 12,\n lefthand = false,\n inward = false,\n } = options\n\n // 参数校验\n if (!(radius > 0)) throw new Error('[threadBrep] radius must be > 0')\n if (!(pitch > 0)) throw new Error('[threadBrep] pitch must be > 0')\n if (!(height > 0)) throw new Error('[threadBrep] height must be > 0')\n if (!(depth > 0)) throw new Error('[threadBrep] depth must be > 0')\n if (crest < 0 || crest >= toothHalfWidth) {\n throw new Error('[threadBrep] crest must be >= 0 and < toothHalfWidth')\n }\n if (sectionsPerTurn < 3) {\n throw new Error('[threadBrep] sectionsPerTurn must be >= 3')\n }\n\n const turns = height / pitch\n const nSec = Math.max(2, Math.round(turns * sectionsPerTurn))\n const sign = lefthand ? -1 : 1\n const apexU = inward ? -depth : depth // 齿顶:外螺纹朝外,内螺纹朝内\n const baseU = inward ? 0.3 : -0.3 // 齿根:略微嵌入配合实体以保证布尔干净\n const a = toothHalfWidth\n\n // 构建截面序列\n const sections: BrepHandle[] = []\n const intermediateEdges: BrepHandle[] = []\n\n for (let i = 0; i <= nSec; i++) {\n const th = (sign * i * 2 * Math.PI) / sectionsPerTurn\n const z = (pitch * Math.abs(th)) / (2 * Math.PI)\n const cx = radius * Math.cos(th)\n const cy = radius * Math.sin(th)\n const rx = Math.cos(th)\n const ry = Math.sin(th)\n\n // 点生成函数:u = 径向偏移,v = 轴向偏移\n const pt = (u: number, v: number) => ({\n x: cx + u * rx,\n y: cy + u * ry,\n z: z + v,\n })\n\n // V 型齿(crest=0)通过单个顶点闭合;梯形齿(crest>0)给出平顶\n const profile = crest > 0\n ? [pt(baseU, -a), pt(apexU, -crest), pt(apexU, crest), pt(baseU, a)]\n : [pt(baseU, -a), pt(apexU, 0), pt(baseU, a)]\n\n // 构建边\n const edges: BrepHandle[] = []\n for (let k = 0; k < profile.length; k++) {\n const edge = kernel.makeLineEdge(profile[k], profile[(k + 1) % profile.length])\n edges.push(edge)\n intermediateEdges.push(edge)\n }\n\n // 构建 wire\n const wire = kernel.makeWire(edges)\n sections.push(wire)\n }\n\n // Loft(occt-only 平台面,D3)。BrepHandle(branded number)与 occt-wasm\n // ShapeHandle 运行时同构,品牌转换只发生在平台边界。\n const thread = getOcctKernel().loft(sections as unknown as ShapeHandle[], true, true)\n\n // 释放中间句柄\n for (const w of sections) kernel.release(w)\n for (const e of intermediateEdges) kernel.release(e)\n\n return thread as unknown as BrepHandle\n}\n\n\n/**\n * compat-op 包装:thread(options) → Result<BrepHandle>。\n * 收敛以 core threadBrep 为准(§5.4:vendored compat op 与 core 版两份收敛为一处)。\n * threadBrep 内部校验抛异常 → 捕获为 Result err(错误码 THREAD_INVALID_ARGS / THREAD_FAILED)。\n */\n\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport { ok, err, type Result } from '../../result/result'\nimport { validationError, kernelError } from '../../result/errors'\n\nconst THREAD_PARAMS = { name: 'thread', params: ['options'], formClass: 'B1' as FormClass }\n\n/**\n * compat-op wrapper: thread(options) → Result<BrepHandle>.\n * Converges on core threadBrep (§5.4: vendored compat op and core version merged into one).\n * threadBrep internal validation throws are caught as Result err (codes THREAD_INVALID_ARGS / THREAD_FAILED).\n *\n * @param args - Resolved arguments (thread options).\n * @returns The generated thread solid as a `BrepHandle`.\n */\nexport function threadBrepOp(...args: unknown[]): Result<BrepHandle> {\n const [options] = resolveArgs(args, THREAD_PARAMS)\n const kernel = getBrepApi()\n try {\n const h = threadBrep(kernel, options as ThreadOptions)\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n if (raw.startsWith('[threadBrep]')) {\n return err(validationError('THREAD_INVALID_ARGS', raw))\n }\n return err(kernelError('THREAD_FAILED', `Thread generation failed: ${raw}`, e))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"threadFns.js","sourceRoot":"","sources":["../../../src/api/brep-mirror/threadFns.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Functional thread operation — builds a helical screw thread.\n *\n * @platform occt — 本文件 import occt-kernel:螺纹用 `loft`\n * (BRepOffsetAPI_ThruSections)构造,loft 是 occt-only(L1 无,engine-method-map\n * `loft` → occt-only)。守卫①要求平台 import 自证身份;调用方 op(screw)声明\n * `engines: ['occt']`(D11)。\n *\n * 适配自 brepjs `src/operations/threadFns.ts`。\n * 保留文件名和核心算法,适配本项目的 occt-wasm API。\n *\n * occt-wasm 的 `BRepOffsetAPI_MakePipeShell` (sweep) 无法可靠地沿螺旋线扫掠截面,\n * 因此螺纹用 loft(`BRepOffsetAPI_ThruSections`)穿过一系列旋转的齿截面构造。\n * 结果是螺旋螺纹的 *ridge* — 外螺纹 fuse 到螺杆,内螺纹 cut 从孔中减去。\n *\n * 与 brepjs 的差异:\n * - brepjs 用 BlueprintSketcher + line() + wire() 构造截面 → 本项目直接用 kernel.makeLineEdge + kernel.makeWire\n * - brepjs 用 loft() 函数 → 本项目直接用 kernel.loft(wires, isSolid, ruled)\n * - brepjs 用 DisposalScope 管理中间句柄 → 本项目手动 kernel.release\n * - brepjs 用 Result 类型 → 本项目抛出异常\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { BrepEngineApi } from '../../brep/engine/primitives'\nimport { getOcctKernel, type ShapeHandle } from '../../occt-kernel/occtKernel'\nimport { getBrepApi } from '../../brep/handle-bridge'\n\n/** 螺纹配置参数。单位 mm,角度由螺距推导。 */\nexport interface ThreadOptions {\n /** 核心半径(外螺纹)或名义孔半径(内螺纹),在螺纹根部 */\n radius: number\n /** 每圈轴向距离(螺距) */\n pitch: number\n /** 螺纹总长(沿轴)。圈数 = height / pitch */\n height: number\n /** 径向螺纹高度(齿顶 - 齿根)。默认 0.6 * pitch(≈ISO 60° V 型) */\n depth?: number\n /** 齿根处轴向半宽。默认 0.42 * pitch */\n toothHalfWidth?: number\n /**\n * flat 顶宽,给出梯形齿而非尖 V 型。\n * 0(默认)= 尖 V(ISO/UN);正值 = 梯形齿(Acme/square)。\n * 必须 < toothHalfWidth。\n */\n crest?: number\n /** 每圈截面数 — 越高越平滑但越慢。默认 20 */\n sectionsPerTurn?: number\n /** 左旋。默认 false(右旋) */\n lefthand?: boolean\n /** 齿尖朝向轴心(内螺纹用 cut 从孔中减去时) */\n inward?: boolean\n}\n\n/**\n * 通过 loft 旋转齿截面构建螺旋螺纹 ridge。\n *\n * @param kernel OCCT 内核\n * @param options 螺纹配置\n * @returns 螺纹 ridge solid(BrepHandle)\n *\n * @example 外螺纹(Ø12 螺杆,2.5mm 螺距):\n * ```ts\n * const ridge = threadBrep(kernel, { radius: 6, pitch: 2.5, height: 7.5 })\n * const rod = kernel.makeCylinder(6.15, 7.5)\n * const result = kernel.fuse(rod, ridge)\n * kernel.release(rod)\n * kernel.release(ridge)\n * ```\n *\n * @example 内螺纹(攻丝 Ø6 孔):\n * ```ts\n * const ridge = threadBrep(kernel, { radius: 3, pitch: 1, height: 6, inward: true })\n * const result = kernel.cut(boredBlock, ridge)\n * kernel.release(ridge)\n * ```\n */\nexport function threadBrep(\n kernel: BrepEngineApi,\n options: ThreadOptions,\n): BrepHandle {\n const {\n radius,\n pitch,\n height,\n depth = 0.6 * pitch,\n toothHalfWidth = 0.42 * pitch,\n crest = 0,\n sectionsPerTurn = 12,\n lefthand = false,\n inward = false,\n } = options\n\n // 参数校验\n if (!(radius > 0)) throw new Error('[threadBrep] radius must be > 0')\n if (!(pitch > 0)) throw new Error('[threadBrep] pitch must be > 0')\n if (!(height > 0)) throw new Error('[threadBrep] height must be > 0')\n if (!(depth > 0)) throw new Error('[threadBrep] depth must be > 0')\n if (crest < 0 || crest >= toothHalfWidth) {\n throw new Error('[threadBrep] crest must be >= 0 and < toothHalfWidth')\n }\n if (sectionsPerTurn < 3) {\n throw new Error('[threadBrep] sectionsPerTurn must be >= 3')\n }\n\n const turns = height / pitch\n const nSec = Math.max(2, Math.round(turns * sectionsPerTurn))\n const sign = lefthand ? -1 : 1\n const apexU = inward ? -depth : depth // 齿顶:外螺纹朝外,内螺纹朝内\n const baseU = inward ? 0.3 : -0.3 // 齿根:略微嵌入配合实体以保证布尔干净\n const a = toothHalfWidth\n\n // 构建截面序列\n const sections: BrepHandle[] = []\n const intermediateEdges: BrepHandle[] = []\n\n for (let i = 0; i <= nSec; i++) {\n const th = (sign * i * 2 * Math.PI) / sectionsPerTurn\n const z = (pitch * Math.abs(th)) / (2 * Math.PI)\n const cx = radius * Math.cos(th)\n const cy = radius * Math.sin(th)\n const rx = Math.cos(th)\n const ry = Math.sin(th)\n\n // 点生成函数:u = 径向偏移,v = 轴向偏移\n const pt = (u: number, v: number) => ({\n x: cx + u * rx,\n y: cy + u * ry,\n z: z + v,\n })\n\n // V 型齿(crest=0)通过单个顶点闭合;梯形齿(crest>0)给出平顶\n const profile = crest > 0\n ? [pt(baseU, -a), pt(apexU, -crest), pt(apexU, crest), pt(baseU, a)]\n : [pt(baseU, -a), pt(apexU, 0), pt(baseU, a)]\n\n // 构建边\n const edges: BrepHandle[] = []\n for (let k = 0; k < profile.length; k++) {\n const edge = kernel.makeLineEdge(profile[k], profile[(k + 1) % profile.length])\n edges.push(edge)\n intermediateEdges.push(edge)\n }\n\n // 构建 wire\n const wire = kernel.makeWire(edges)\n sections.push(wire)\n }\n\n // Loft(occt-only 平台面,D3)。BrepHandle(branded number)与 occt-wasm\n // ShapeHandle 运行时同构,品牌转换只发生在平台边界。\n const thread = getOcctKernel().loft(sections as unknown as ShapeHandle[], true, true)\n\n // 释放中间句柄\n for (const w of sections) kernel.release(w)\n for (const e of intermediateEdges) kernel.release(e)\n\n return thread as unknown as BrepHandle\n}\n\n\n/**\n * compat-op 包装:thread(options) → Result<BrepHandle>。\n * 收敛以 core threadBrep 为准(§5.4:brepjs compat op 与 core 版两份收敛为一处)。\n * threadBrep 内部校验抛异常 → 捕获为 Result err(错误码 THREAD_INVALID_ARGS / THREAD_FAILED)。\n */\n\nimport type { FormClass } from '../internal/dual-form-args'\nimport { resolveArgs } from '../internal/dual-form-args'\nimport { ok, err, type Result } from '../../result/result'\nimport { validationError, kernelError } from '../../result/errors'\n\nconst THREAD_PARAMS = { name: 'thread', params: ['options'], formClass: 'B1' as FormClass }\n\n/**\n * compat-op wrapper: thread(options) → Result<BrepHandle>.\n * Converges on core threadBrep (§5.4: brepjs compat op and core version merged into one).\n * threadBrep internal validation throws are caught as Result err (codes THREAD_INVALID_ARGS / THREAD_FAILED).\n *\n * @param args - Resolved arguments (thread options).\n * @returns The generated thread solid as a `BrepHandle`.\n */\nexport function threadBrepOp(...args: unknown[]): Result<BrepHandle> {\n const [options] = resolveArgs(args, THREAD_PARAMS)\n const kernel = getBrepApi()\n try {\n const h = threadBrep(kernel, options as ThreadOptions)\n return ok(h)\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n if (raw.startsWith('[threadBrep]')) {\n return err(validationError('THREAD_INVALID_ARGS', raw))\n }\n return err(kernelError('THREAD_FAILED', `Thread generation failed: ${raw}`, e))\n }\n}\n"]}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* faijs Shapes (or raw handles) and results are returned as BREP handles
|
|
11
11
|
* (wrapped by `wrapBrepOne` → `fromHandle`).
|
|
12
12
|
*
|
|
13
|
-
* Semantics mirror the
|
|
13
|
+
* Semantics mirror the early brepjs fns (`topology/transformFns.ts`,
|
|
14
14
|
* `topology/shapeFns.ts`) with the brepjs object model (castResultShape,
|
|
15
15
|
* metadata propagation, evolution tracking) dropped: occt-wasm handles only.
|
|
16
16
|
*/
|
|
@@ -19,7 +19,7 @@ import { type Result } from '../../result/result.js';
|
|
|
19
19
|
/**
|
|
20
20
|
* Apply a 4×4 affine matrix (OpenSCAD `multmatrix` equivalent).
|
|
21
21
|
*
|
|
22
|
-
* The
|
|
22
|
+
* The brepjs fn splits orthogonal (evolution-tracked) and non-orthogonal
|
|
23
23
|
* (`gp_GTrsf`) paths; the core path uses the single L1 `generalTransform`
|
|
24
24
|
* (occt-wasm `gp_GTrsf`, geometrically equivalent for both classes) since
|
|
25
25
|
* `applyMatrix` carries identity naming and needs no face evolution.
|
|
@@ -51,21 +51,21 @@ export declare function locateBrep(...args: unknown[]): Result<BrepHandle>;
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function mirrorBrep(...args: unknown[]): Result<BrepHandle>;
|
|
53
53
|
/**
|
|
54
|
-
* Rotate the shape around an axis (
|
|
54
|
+
* Rotate the shape around an axis (brepjs topology/api.js#rotate + transformFns.ts#rotate).
|
|
55
55
|
*
|
|
56
56
|
* @param args - Resolved arguments (shape, angle in degrees, axis options).
|
|
57
57
|
* @returns The rotated shape as a `BrepHandle`.
|
|
58
58
|
*/
|
|
59
59
|
export declare function rotateBrep(...args: unknown[]): Result<BrepHandle>;
|
|
60
60
|
/**
|
|
61
|
-
* Shell — hollow the shape by removing faces (
|
|
61
|
+
* Shell — hollow the shape by removing faces (brepjs topology/api.js#shell + modifierFns.ts#shell).
|
|
62
62
|
*
|
|
63
63
|
* @param args - Resolved arguments (shape, faces, thickness, options).
|
|
64
64
|
* @returns The shelled (hollowed) shape as a `BrepHandle`.
|
|
65
65
|
*/
|
|
66
66
|
export declare function shellBrep(...args: unknown[]): Result<BrepHandle>;
|
|
67
67
|
/**
|
|
68
|
-
* Offset all faces of the shape (
|
|
68
|
+
* Offset all faces of the shape (brepjs topology/api.js#offset + modifierFns.ts#offset).
|
|
69
69
|
*
|
|
70
70
|
* @param args - Resolved arguments (shape, distance, options).
|
|
71
71
|
* @returns The offset shape as a `BrepHandle`.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* faijs Shapes (or raw handles) and results are returned as BREP handles
|
|
11
11
|
* (wrapped by `wrapBrepOne` → `fromHandle`).
|
|
12
12
|
*
|
|
13
|
-
* Semantics mirror the
|
|
13
|
+
* Semantics mirror the early brepjs fns (`topology/transformFns.ts`,
|
|
14
14
|
* `topology/shapeFns.ts`) with the brepjs object model (castResultShape,
|
|
15
15
|
* metadata propagation, evolution tracking) dropped: occt-wasm handles only.
|
|
16
16
|
*/
|
|
@@ -47,7 +47,7 @@ const APPLY_MATRIX_PARAMS = { name: 'applyMatrix', params: ['shape', 'matrix'],
|
|
|
47
47
|
/**
|
|
48
48
|
* Apply a 4×4 affine matrix (OpenSCAD `multmatrix` equivalent).
|
|
49
49
|
*
|
|
50
|
-
* The
|
|
50
|
+
* The brepjs fn splits orthogonal (evolution-tracked) and non-orthogonal
|
|
51
51
|
* (`gp_GTrsf`) paths; the core path uses the single L1 `generalTransform`
|
|
52
52
|
* (occt-wasm `gp_GTrsf`, geometrically equivalent for both classes) since
|
|
53
53
|
* `applyMatrix` carries identity naming and needs no face evolution.
|
|
@@ -172,10 +172,10 @@ export function mirrorBrep(...args) {
|
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
174
|
// ---------------------------------------------------------------------------
|
|
175
|
-
// rotate — 绕轴旋转(
|
|
175
|
+
// rotate — 绕轴旋转(brepjs topology/api.js#rotate + transformFns.ts#rotate)// ---------------------------------------------------------------------------
|
|
176
176
|
const ROTATE_PARAMS = { name: 'rotate', params: ['shape', 'angle', 'options'], formClass: 'A' };
|
|
177
177
|
/**
|
|
178
|
-
* Rotate the shape around an axis (
|
|
178
|
+
* Rotate the shape around an axis (brepjs topology/api.js#rotate + transformFns.ts#rotate).
|
|
179
179
|
*
|
|
180
180
|
* @param args - Resolved arguments (shape, angle in degrees, axis options).
|
|
181
181
|
* @returns The rotated shape as a `BrepHandle`.
|
|
@@ -218,10 +218,10 @@ export function rotateBrep(...args) {
|
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
// ---------------------------------------------------------------------------
|
|
221
|
-
// shell — 去面掏空(
|
|
221
|
+
// shell — 去面掏空(brepjs topology/api.js#shell + modifierFns.ts#shell)// ---------------------------------------------------------------------------
|
|
222
222
|
const SHELL_PARAMS = { name: 'shell', params: ['shape', 'faces', 'thickness', 'options'], formClass: 'A' };
|
|
223
223
|
/**
|
|
224
|
-
* Shell — hollow the shape by removing faces (
|
|
224
|
+
* Shell — hollow the shape by removing faces (brepjs topology/api.js#shell + modifierFns.ts#shell).
|
|
225
225
|
*
|
|
226
226
|
* @param args - Resolved arguments (shape, faces, thickness, options).
|
|
227
227
|
* @returns The shelled (hollowed) shape as a `BrepHandle`.
|
|
@@ -248,10 +248,10 @@ export function shellBrep(...args) {
|
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
// ---------------------------------------------------------------------------
|
|
251
|
-
// offset — 全表面偏移(
|
|
251
|
+
// offset — 全表面偏移(brepjs topology/api.js#offset + modifierFns.ts#offset)// ---------------------------------------------------------------------------
|
|
252
252
|
const OFFSET_PARAMS = { name: 'offset', params: ['shape', 'distance', 'options'], formClass: 'A' };
|
|
253
253
|
/**
|
|
254
|
-
* Offset all faces of the shape (
|
|
254
|
+
* Offset all faces of the shape (brepjs topology/api.js#offset + modifierFns.ts#offset).
|
|
255
255
|
*
|
|
256
256
|
* @param args - Resolved arguments (shape, distance, options).
|
|
257
257
|
* @returns The offset shape as a `BrepHandle`.
|