@faicad/faijs 0.33.2 → 0.35.2
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/dist/api/api-namespace.d.ts +14 -14
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +40 -14
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/appearance.d.ts +47 -6
- package/dist/api/appearance.d.ts.map +1 -1
- package/dist/api/appearance.js.map +1 -1
- package/dist/api/assembly/solve-tree.d.ts +1 -0
- package/dist/api/assembly/solve-tree.d.ts.map +1 -1
- package/dist/api/assembly/solve-tree.js +42 -17
- package/dist/api/assembly/solve-tree.js.map +1 -1
- package/dist/api/assembly/solve.d.ts +1 -0
- package/dist/api/assembly/solve.d.ts.map +1 -1
- package/dist/api/assembly/solve.js.map +1 -1
- package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
- package/dist/api/assembly/solvers/global-solver.js +130 -23
- package/dist/api/assembly/solvers/global-solver.js.map +1 -1
- package/dist/api/assembly/solvers/pose-from-delta.d.ts +9 -0
- package/dist/api/assembly/solvers/pose-from-delta.d.ts.map +1 -1
- package/dist/api/assembly/solvers/pose-from-delta.js +23 -0
- package/dist/api/assembly/solvers/pose-from-delta.js.map +1 -1
- package/dist/api/assembly/solvers/types.d.ts +20 -2
- package/dist/api/assembly/solvers/types.d.ts.map +1 -1
- package/dist/api/assembly/solvers/types.js.map +1 -1
- package/dist/api/chamfer.d.ts +7 -4
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +57 -13
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/draft.d.ts +7 -4
- package/dist/api/draft.d.ts.map +1 -1
- package/dist/api/draft.js +11 -6
- package/dist/api/draft.js.map +1 -1
- package/dist/api/edge-ref.d.ts +4 -4
- package/dist/api/edge-ref.js +4 -4
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/extrude.d.ts +10 -6
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +50 -25
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts +4 -4
- package/dist/api/face-ref.js +4 -4
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.d.ts +6 -3
- package/dist/api/feature-repair.d.ts.map +1 -1
- package/dist/api/feature-repair.js +12 -7
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +6 -2
- package/dist/api/fillet-variable.d.ts.map +1 -1
- package/dist/api/fillet-variable.js +24 -6
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +7 -4
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +45 -12
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/helix.d.ts +13 -13
- package/dist/api/helix.d.ts.map +1 -1
- package/dist/api/helix.js +19 -24
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts +10 -18
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +17 -25
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts +10 -15
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +24 -29
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/export-members.js.map +1 -1
- package/dist/api/loft-advanced.d.ts +4 -0
- package/dist/api/loft-advanced.d.ts.map +1 -1
- package/dist/api/loft-advanced.js +4 -0
- package/dist/api/loft-advanced.js.map +1 -1
- package/dist/api/loft.d.ts +5 -3
- package/dist/api/loft.d.ts.map +1 -1
- package/dist/api/loft.js +5 -3
- package/dist/api/loft.js.map +1 -1
- package/dist/api/meta.d.ts +42 -6
- package/dist/api/meta.d.ts.map +1 -1
- package/dist/api/meta.js.map +1 -1
- package/dist/api/punch-hole.d.ts +5 -2
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js +4 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/replicate.d.ts +4 -5
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +4 -5
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/selectors-to-refs.d.ts +83 -0
- package/dist/api/selectors-to-refs.d.ts.map +1 -0
- package/dist/api/selectors-to-refs.js +211 -0
- package/dist/api/selectors-to-refs.js.map +1 -0
- package/dist/api/shell.d.ts +17 -8
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +45 -15
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +12 -6
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +31 -4
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts +3 -0
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +3 -0
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/sketch-on-surface.d.ts +4 -1
- package/dist/api/sketch-on-surface.d.ts.map +1 -1
- package/dist/api/sketch-on-surface.js +4 -1
- package/dist/api/sketch-on-surface.js.map +1 -1
- package/dist/api/view/view-projection.d.ts.map +1 -1
- package/dist/api/view/view-projection.js +9 -2
- package/dist/api/view/view-projection.js.map +1 -1
- package/dist/brep/brep-chain.js +2 -2
- package/dist/brep/brep-chain.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +1 -1
- package/dist/brep/brep-ops.js +1 -1
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +45 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +87 -3
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +33 -7
- package/dist/brep/engine/registry.d.ts.map +1 -1
- package/dist/brep/engine/registry.js +47 -16
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +14 -15
- package/dist/brep/handle-bridge.d.ts.map +1 -1
- package/dist/brep/handle-bridge.js +35 -15
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/primitives-brep.js +2 -2
- package/dist/brep/primitives-brep.js.map +1 -1
- package/dist/brep/text/text-to-solid.d.ts +40 -3
- package/dist/brep/text/text-to-solid.d.ts.map +1 -1
- package/dist/brep/text/text-to-solid.js +104 -24
- package/dist/brep/text/text-to-solid.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +2 -2
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +315 -36
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +7 -7
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.d.ts +2 -2
- package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
- package/dist/brepkit-kernel/multi-version-test.js +6 -6
- package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
- package/dist/browser.d.ts +2 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -2
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +9 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +11 -1
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +16 -11
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +16 -8
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +62 -5
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +617 -42
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/interp/closure.d.ts +3 -2
- package/dist/cad-runtime/interp/closure.d.ts.map +1 -1
- package/dist/cad-runtime/interp/closure.js.map +1 -1
- package/dist/cad-runtime/interp/env.d.ts +9 -6
- package/dist/cad-runtime/interp/env.d.ts.map +1 -1
- package/dist/cad-runtime/interp/env.js +4 -2
- package/dist/cad-runtime/interp/env.js.map +1 -1
- package/dist/cad-runtime/lib-decl.d.ts +121 -0
- package/dist/cad-runtime/lib-decl.d.ts.map +1 -0
- package/dist/cad-runtime/lib-decl.js +100 -0
- package/dist/cad-runtime/lib-decl.js.map +1 -0
- package/dist/cad-runtime/ports.d.ts +12 -0
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +59 -5
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +237 -18
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/extra/browser.d.ts +9 -0
- package/dist/extra/browser.d.ts.map +1 -0
- package/dist/extra/browser.js +9 -0
- package/dist/extra/browser.js.map +1 -0
- package/dist/extra/editor-ops.d.ts +22 -0
- package/dist/extra/editor-ops.d.ts.map +1 -0
- package/dist/extra/editor-ops.js +21 -0
- package/dist/extra/editor-ops.js.map +1 -0
- package/dist/extra/extras/svg-extrude.d.ts +45 -0
- package/dist/extra/extras/svg-extrude.d.ts.map +1 -0
- package/dist/extra/extras/svg-extrude.js +110 -0
- package/dist/extra/extras/svg-extrude.js.map +1 -0
- package/dist/extra/extras/text-cjk.d.ts +36 -0
- package/dist/extra/extras/text-cjk.d.ts.map +1 -0
- package/dist/extra/extras/text-cjk.js +86 -0
- package/dist/extra/extras/text-cjk.js.map +1 -0
- package/dist/extra/extras/text-geometry.d.ts +69 -0
- package/dist/extra/extras/text-geometry.d.ts.map +1 -0
- package/dist/extra/extras/text-geometry.js +188 -0
- package/dist/extra/extras/text-geometry.js.map +1 -0
- package/dist/extra/index.d.ts +40 -0
- package/dist/extra/index.d.ts.map +1 -0
- package/dist/extra/index.js +40 -0
- package/dist/extra/index.js.map +1 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts +94 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts.map +1 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.js +282 -0
- package/dist/extra/mesh/drill-hole/DrillHoleCore.js.map +1 -0
- package/dist/extra/mesh/drill-hole/drill-types.d.ts +34 -0
- package/dist/extra/mesh/drill-hole/drill-types.d.ts.map +1 -0
- package/dist/extra/mesh/drill-hole/drill-types.js +7 -0
- package/dist/extra/mesh/drill-hole/drill-types.js.map +1 -0
- package/dist/extra/mesh/engrave-decoration.d.ts +42 -0
- package/dist/extra/mesh/engrave-decoration.d.ts.map +1 -0
- package/dist/extra/mesh/engrave-decoration.js +39 -0
- package/dist/extra/mesh/engrave-decoration.js.map +1 -0
- package/dist/extra/mesh/fai_drill.d.ts +21 -0
- package/dist/extra/mesh/fai_drill.d.ts.map +1 -0
- package/dist/extra/mesh/fai_drill.js +89 -0
- package/dist/extra/mesh/fai_drill.js.map +1 -0
- package/dist/extra/mesh/fai_extrude.d.ts +24 -0
- package/dist/extra/mesh/fai_extrude.d.ts.map +1 -0
- package/dist/extra/mesh/fai_extrude.js +42 -0
- package/dist/extra/mesh/fai_extrude.js.map +1 -0
- package/dist/extra/mesh/fai_split.d.ts +164 -0
- package/dist/extra/mesh/fai_split.d.ts.map +1 -0
- package/dist/extra/mesh/fai_split.js +269 -0
- package/dist/extra/mesh/fai_split.js.map +1 -0
- package/dist/extra/mesh/primitives.d.ts +29 -0
- package/dist/extra/mesh/primitives.d.ts.map +1 -0
- package/dist/extra/mesh/primitives.js +41 -0
- package/dist/extra/mesh/primitives.js.map +1 -0
- package/dist/extra/op-names.d.ts +37 -0
- package/dist/extra/op-names.d.ts.map +1 -0
- package/dist/extra/op-names.js +46 -0
- package/dist/extra/op-names.js.map +1 -0
- package/dist/extra/ops/compound.d.ts +140 -0
- package/dist/extra/ops/compound.d.ts.map +1 -0
- package/dist/extra/ops/compound.js +167 -0
- package/dist/extra/ops/compound.js.map +1 -0
- package/dist/extra/ops/copy.d.ts +40 -0
- package/dist/extra/ops/copy.d.ts.map +1 -0
- package/dist/extra/ops/copy.js +83 -0
- package/dist/extra/ops/copy.js.map +1 -0
- package/dist/extra/ops/fai_drill.d.ts +51 -0
- package/dist/extra/ops/fai_drill.d.ts.map +1 -0
- package/dist/extra/ops/fai_drill.js +233 -0
- package/dist/extra/ops/fai_drill.js.map +1 -0
- package/dist/extra/ops/fai_extrude.d.ts +36 -0
- package/dist/extra/ops/fai_extrude.d.ts.map +1 -0
- package/dist/extra/ops/fai_extrude.js +84 -0
- package/dist/extra/ops/fai_extrude.js.map +1 -0
- package/dist/extra/ops/fai_split.d.ts +46 -0
- package/dist/extra/ops/fai_split.d.ts.map +1 -0
- package/dist/extra/ops/fai_split.js +235 -0
- package/dist/extra/ops/fai_split.js.map +1 -0
- package/dist/extra/ops/load.d.ts +49 -0
- package/dist/extra/ops/load.d.ts.map +1 -0
- package/dist/extra/ops/load.js +385 -0
- package/dist/extra/ops/load.js.map +1 -0
- package/dist/extra/ops/svg-extrude.d.ts +32 -0
- package/dist/extra/ops/svg-extrude.d.ts.map +1 -0
- package/dist/extra/ops/svg-extrude.js +74 -0
- package/dist/extra/ops/svg-extrude.js.map +1 -0
- package/dist/extra/ops/text.d.ts +34 -0
- package/dist/extra/ops/text.d.ts.map +1 -0
- package/dist/extra/ops/text.js +100 -0
- package/dist/extra/ops/text.js.map +1 -0
- package/dist/geometry2d/bridge/lift-on-plane.d.ts +8 -5
- package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.js +8 -5
- package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lang/symbol-table.d.ts +3 -3
- package/dist/lang/symbol-table.generated.d.ts +10 -0
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +10 -0
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/symbol-table.js +3 -3
- package/dist/lang/symbol-table.js.map +1 -1
- package/dist/math3d/index.d.ts +1 -1
- package/dist/math3d/index.js +1 -1
- package/dist/math3d/index.js.map +1 -1
- package/dist/mesh/engrave.d.ts +2 -3
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +4 -11
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/index.d.ts +0 -2
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +0 -2
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/primitives.d.ts +1 -1
- package/dist/mesh/primitives.js +1 -1
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/node-host/cli.d.ts +11 -4
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +53 -28
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/execute-script.d.ts.map +1 -1
- package/dist/node-host/execute-script.js +3 -4
- package/dist/node-host/execute-script.js.map +1 -1
- package/dist/node-host/lib-package-json.d.ts +36 -0
- package/dist/node-host/lib-package-json.d.ts.map +1 -0
- package/dist/node-host/lib-package-json.js +73 -0
- package/dist/node-host/lib-package-json.js.map +1 -0
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +41 -0
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +1 -1
- package/dist/occt-kernel/occtKernel.js +1 -1
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/runtime-state.d.ts +28 -1
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +14 -1
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +11 -2
- package/dist/sdk.js.map +1 -1
- package/dist/sketch/bspline.d.ts +58 -0
- package/dist/sketch/bspline.d.ts.map +1 -0
- package/dist/sketch/bspline.js +104 -0
- package/dist/sketch/bspline.js.map +1 -0
- package/dist/sketch/canonical.d.ts +239 -0
- package/dist/sketch/canonical.d.ts.map +1 -0
- package/dist/sketch/canonical.js +17 -0
- package/dist/sketch/canonical.js.map +1 -0
- package/dist/sketch/contour.d.ts +43 -0
- package/dist/sketch/contour.d.ts.map +1 -0
- package/dist/sketch/contour.js +202 -0
- package/dist/sketch/contour.js.map +1 -0
- package/dist/sketch/dim-spec.d.ts +32 -0
- package/dist/sketch/dim-spec.d.ts.map +1 -0
- package/dist/sketch/dim-spec.js +112 -0
- package/dist/sketch/dim-spec.js.map +1 -0
- package/dist/sketch/faces.d.ts +45 -0
- package/dist/sketch/faces.d.ts.map +1 -0
- package/dist/sketch/faces.js +108 -0
- package/dist/sketch/faces.js.map +1 -0
- package/dist/sketch/fcstd-types.d.ts +194 -0
- package/dist/sketch/fcstd-types.d.ts.map +1 -0
- package/dist/sketch/fcstd-types.js +67 -0
- package/dist/sketch/fcstd-types.js.map +1 -0
- package/dist/sketch/index.d.ts +46 -0
- package/dist/sketch/index.d.ts.map +1 -0
- package/dist/sketch/index.js +39 -0
- package/dist/sketch/index.js.map +1 -0
- package/dist/sketch/node.d.ts +14 -0
- package/dist/sketch/node.d.ts.map +1 -0
- package/dist/sketch/node.js +43 -0
- package/dist/sketch/node.js.map +1 -0
- package/dist/sketch/op.d.ts +111 -0
- package/dist/sketch/op.d.ts.map +1 -0
- package/dist/sketch/op.js +185 -0
- package/dist/sketch/op.js.map +1 -0
- package/dist/sketch/planegcs-backend.d.ts +69 -0
- package/dist/sketch/planegcs-backend.d.ts.map +1 -0
- package/dist/sketch/planegcs-backend.js +812 -0
- package/dist/sketch/planegcs-backend.js.map +1 -0
- package/dist/sketch/project.d.ts +176 -0
- package/dist/sketch/project.d.ts.map +1 -0
- package/dist/sketch/project.js +656 -0
- package/dist/sketch/project.js.map +1 -0
- package/dist/sketch/shapes.d.ts +370 -0
- package/dist/sketch/shapes.d.ts.map +1 -0
- package/dist/sketch/shapes.js +959 -0
- package/dist/sketch/shapes.js.map +1 -0
- package/dist/sketch/solve.d.ts +21 -0
- package/dist/sketch/solve.d.ts.map +1 -0
- package/dist/sketch/solve.js +144 -0
- package/dist/sketch/solve.js.map +1 -0
- package/dist/sketch/solver-loader.d.ts +47 -0
- package/dist/sketch/solver-loader.d.ts.map +1 -0
- package/dist/sketch/solver-loader.js +77 -0
- package/dist/sketch/solver-loader.js.map +1 -0
- package/dist/sketch/solver.d.ts +63 -0
- package/dist/sketch/solver.d.ts.map +1 -0
- package/dist/sketch/solver.js +28 -0
- package/dist/sketch/solver.js.map +1 -0
- package/dist/sketch/verify.d.ts +53 -0
- package/dist/sketch/verify.d.ts.map +1 -0
- package/dist/sketch/verify.js +71 -0
- package/dist/sketch/verify.js.map +1 -0
- package/dist/weapp.d.ts +1 -1
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +1 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +43 -11
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* faijs-extra split — 分割库函数(返回具名对象 { front, back })
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* dispatchPath 静态判定 brep/mesh,双输出以具名对象返回(替代 outputCache 多输出写入)。
|
|
6
|
+
*/
|
|
7
|
+
import { splitWithParams as meshSplitWithParams } from '../mesh/fai_split.js';
|
|
8
|
+
import { bboxCenter, boundingBox } from '../../mesh/query.js';
|
|
9
|
+
import { splitBrep, solidToShape, translateBrep, } from '../../brep/brep-ops.js';
|
|
10
|
+
import { dovetailBooleanSplitBrep, dowelOrTenonBooleanSplitBrep, } from '../../api/brep-operations/joinery-brep.js';
|
|
11
|
+
import { computeBasisFromNormal } from '../mesh/fai_split.js';
|
|
12
|
+
import { getBrepApi } from '../../brep/handle-bridge.js';
|
|
13
|
+
import { solid, fromBrep, brepOf } from '../../shape.js';
|
|
14
|
+
import { defineOp } from '../../sdk.js';
|
|
15
|
+
import { assertNonZeroVec3 } from '../../api/assert.js';
|
|
16
|
+
/** BREP 路径:OCCT 平面/榫卯分割 + 分离位移。 */
|
|
17
|
+
function splitBrepPath(input, params) {
|
|
18
|
+
const kernel = getBrepApi();
|
|
19
|
+
const inputSolid = brepOf(input);
|
|
20
|
+
if (inputSolid === undefined)
|
|
21
|
+
throw new Error('[extra/split] input is not BREP');
|
|
22
|
+
const cutMode = params.cutMode ?? 'plane';
|
|
23
|
+
const normal = params.normal ?? [0, 0, 1];
|
|
24
|
+
const offset = typeof params.offset === 'number' ? params.offset : 0;
|
|
25
|
+
const inPlaneAngle = typeof params.inPlaneAngle === 'number' ? params.inPlaneAngle : 0;
|
|
26
|
+
// 坐标契约(方向 A):bbCenter/bboxSize 是模型局部空间值——宿主生成脚本时已把
|
|
27
|
+
// 交互世界坐标转换好,本 op 不做 world→local(无 partTransform 依赖)。
|
|
28
|
+
const bbCenter = params.bbCenter ?? bboxCenter(input);
|
|
29
|
+
const bboxSize = params.bboxSize ?? boundingBox(input).max.map((v, i) => v - boundingBox(input).min[i]);
|
|
30
|
+
const planeCenter = [
|
|
31
|
+
bbCenter[0] + offset * normal[0],
|
|
32
|
+
bbCenter[1] + offset * normal[1],
|
|
33
|
+
bbCenter[2] + offset * normal[2],
|
|
34
|
+
];
|
|
35
|
+
const planeDistance = normal[0] * planeCenter[0] + normal[1] * planeCenter[1] + normal[2] * planeCenter[2];
|
|
36
|
+
const { widthDir, depthDir } = computeBasisFromNormal(normal, inPlaneAngle);
|
|
37
|
+
const basis = {
|
|
38
|
+
normal: normal,
|
|
39
|
+
widthDir: widthDir,
|
|
40
|
+
depthDir: depthDir,
|
|
41
|
+
planeCenter: planeCenter,
|
|
42
|
+
planeDistance,
|
|
43
|
+
};
|
|
44
|
+
let frontSolid;
|
|
45
|
+
let backSolid;
|
|
46
|
+
if (cutMode === 'dovetail') {
|
|
47
|
+
const groove = {
|
|
48
|
+
depth: params.grooveDepth ?? 0,
|
|
49
|
+
depthTolerance: params.grooveDepthTolerance ?? 0,
|
|
50
|
+
width: params.grooveWidth ?? 0,
|
|
51
|
+
widthTolerance: params.grooveWidthTolerance ?? 0,
|
|
52
|
+
flapsAngle: params.grooveFlapsAngle ?? 0,
|
|
53
|
+
};
|
|
54
|
+
const result = dovetailBooleanSplitBrep(kernel, inputSolid, basis, groove);
|
|
55
|
+
frontSolid = result.front;
|
|
56
|
+
backSolid = result.back;
|
|
57
|
+
}
|
|
58
|
+
else if (cutMode === 'dowel' || cutMode === 'straight-tenon' || cutMode === 'tenon') {
|
|
59
|
+
const shape = cutMode === 'dowel' ? 'dowel' : 'tenon';
|
|
60
|
+
let joineryParams;
|
|
61
|
+
if (cutMode === 'dowel') {
|
|
62
|
+
joineryParams = {
|
|
63
|
+
size: params.dowelDiameter ?? 0,
|
|
64
|
+
sizeTolerance: params.dowelDiameterTolerance ?? 0,
|
|
65
|
+
height: params.dowelHeight ?? 0,
|
|
66
|
+
heightTolerance: params.dowelHeightTolerance ?? 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
joineryParams = {
|
|
71
|
+
size: params.tenonSideLength ?? 0,
|
|
72
|
+
sizeTolerance: params.tenonSideLengthTolerance ?? 0,
|
|
73
|
+
height: params.tenonHeight ?? 0,
|
|
74
|
+
heightTolerance: params.tenonHeightTolerance ?? 0,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const selectedSections = params.selectedSections;
|
|
78
|
+
const result = dowelOrTenonBooleanSplitBrep(kernel, inputSolid, basis, shape, joineryParams, selectedSections ?? null);
|
|
79
|
+
frontSolid = result.front;
|
|
80
|
+
backSolid = result.back;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const splitResult = splitBrep(kernel, inputSolid, {
|
|
84
|
+
normal: normal,
|
|
85
|
+
planeDistance,
|
|
86
|
+
planeCenter: planeCenter,
|
|
87
|
+
});
|
|
88
|
+
frontSolid = splitResult.front;
|
|
89
|
+
backSolid = splitResult.back;
|
|
90
|
+
}
|
|
91
|
+
// 分离位移:与 mesh 路径 finalizeExplode 同公式(bbox 对角线 2% + joinery 深度一半)
|
|
92
|
+
const applyExplode = params.applyExplode ?? true;
|
|
93
|
+
if (applyExplode) {
|
|
94
|
+
const bboxDiagonal = Math.sqrt(bboxSize[0] * bboxSize[0] + bboxSize[1] * bboxSize[1] + bboxSize[2] * bboxSize[2]);
|
|
95
|
+
const baseOffset = bboxDiagonal * 0.02;
|
|
96
|
+
let joineryOffset = 0;
|
|
97
|
+
if (cutMode === 'dovetail') {
|
|
98
|
+
joineryOffset = (params.grooveDepth ?? 0) / 2;
|
|
99
|
+
}
|
|
100
|
+
else if (cutMode === 'dowel') {
|
|
101
|
+
joineryOffset = (params.dowelHeight ?? 0) / 2;
|
|
102
|
+
}
|
|
103
|
+
else if (cutMode === 'straight-tenon' || cutMode === 'tenon') {
|
|
104
|
+
joineryOffset = (params.tenonHeight ?? 0) / 2;
|
|
105
|
+
}
|
|
106
|
+
const frontOffset = baseOffset + joineryOffset;
|
|
107
|
+
const backOffset = -(baseOffset + joineryOffset);
|
|
108
|
+
const frontTranslated = translateBrep(kernel, frontSolid, [
|
|
109
|
+
normal[0] * frontOffset,
|
|
110
|
+
normal[1] * frontOffset,
|
|
111
|
+
normal[2] * frontOffset,
|
|
112
|
+
]);
|
|
113
|
+
const backTranslated = translateBrep(kernel, backSolid, [
|
|
114
|
+
normal[0] * backOffset,
|
|
115
|
+
normal[1] * backOffset,
|
|
116
|
+
normal[2] * backOffset,
|
|
117
|
+
]);
|
|
118
|
+
kernel.release(frontSolid);
|
|
119
|
+
kernel.release(backSolid);
|
|
120
|
+
frontSolid = frontTranslated;
|
|
121
|
+
backSolid = backTranslated;
|
|
122
|
+
}
|
|
123
|
+
const frontShape = fromBrep(solidToShape(kernel, frontSolid), { solid: frontSolid });
|
|
124
|
+
const backShape = fromBrep(solidToShape(kernel, backSolid), { solid: backSolid });
|
|
125
|
+
return { front: frontShape, back: backShape };
|
|
126
|
+
}
|
|
127
|
+
/** mesh 路径:manifold-3d mesh-CSG。 */
|
|
128
|
+
async function splitMeshPath(input, params) {
|
|
129
|
+
const cutMode = params.cutMode ?? 'plane';
|
|
130
|
+
const normal = params.normal ?? [0, 0, 1];
|
|
131
|
+
const offset = typeof params.offset === 'number' ? params.offset : 0;
|
|
132
|
+
const inPlaneAngle = typeof params.inPlaneAngle === 'number' ? params.inPlaneAngle : 0;
|
|
133
|
+
const bbCenter = params.bbCenter ?? bboxCenter(input);
|
|
134
|
+
const bboxSize = params.bboxSize ?? boundingBox(input).max.map((v, i) => v - boundingBox(input).min[i]);
|
|
135
|
+
// 坐标契约(方向 A):bbCenter/bboxSize 是模型局部空间值(宿主生成脚本时已转),
|
|
136
|
+
// 本 op 不做 world→local(无 partTransform 依赖)。
|
|
137
|
+
const result = await meshSplitWithParams({
|
|
138
|
+
shape: input,
|
|
139
|
+
cutMode: cutMode,
|
|
140
|
+
normal,
|
|
141
|
+
offset,
|
|
142
|
+
inPlaneAngle,
|
|
143
|
+
bbCenter,
|
|
144
|
+
bboxSize,
|
|
145
|
+
groove: params.grooveDepth !== undefined ? {
|
|
146
|
+
depth: params.grooveDepth,
|
|
147
|
+
depthTolerance: params.grooveDepthTolerance ?? 0,
|
|
148
|
+
width: params.grooveWidth ?? 0,
|
|
149
|
+
widthTolerance: params.grooveWidthTolerance ?? 0,
|
|
150
|
+
flapsAngle: params.grooveFlapsAngle ?? 0,
|
|
151
|
+
} : undefined,
|
|
152
|
+
dowel: params.dowelDiameter !== undefined ? {
|
|
153
|
+
diameter: params.dowelDiameter,
|
|
154
|
+
diameterTolerance: params.dowelDiameterTolerance ?? 0,
|
|
155
|
+
height: params.dowelHeight ?? 0,
|
|
156
|
+
heightTolerance: params.dowelHeightTolerance ?? 0,
|
|
157
|
+
} : undefined,
|
|
158
|
+
tenon: params.tenonSideLength !== undefined ? {
|
|
159
|
+
sideLength: params.tenonSideLength,
|
|
160
|
+
sideLengthTolerance: params.tenonSideLengthTolerance ?? 0,
|
|
161
|
+
height: params.tenonHeight ?? 0,
|
|
162
|
+
heightTolerance: params.tenonHeightTolerance ?? 0,
|
|
163
|
+
} : undefined,
|
|
164
|
+
selectedSections: params.selectedSections,
|
|
165
|
+
applyExplode: params.applyExplode ?? true,
|
|
166
|
+
});
|
|
167
|
+
return { front: solid(result.front), back: solid(result.back) };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 分割几何,返回具名对象 { front, back } 两个独立零件。
|
|
171
|
+
* @group 特征
|
|
172
|
+
* @inputs 1
|
|
173
|
+
* @async true
|
|
174
|
+
* @qual warn
|
|
175
|
+
* @name fai_split
|
|
176
|
+
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):`fai_` 前缀 op 为编辑器应用提供,不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。
|
|
177
|
+
* @returns { front: Shape; back: Shape } 必须用解构 `const { front: partA, back: partB } = await cad.fai_split(...)` 取出两个零件。
|
|
178
|
+
* @param input - 目标几何。type:Shape required:true
|
|
179
|
+
* @param params.cutMode - 切割模式。type:'plane' | 'dovetail' | 'dowel' | 'tenon' | 'straight-tenon' | 'straight' 默认 'plane'
|
|
180
|
+
* @param params.normal - 切割面法向。type:[x,y,z] 默认 [0,0,1]
|
|
181
|
+
* @param params.offset - 切割面沿法向偏移(过 bbCenter)。type:number 默认 0
|
|
182
|
+
* @param params.inPlaneAngle - 切割面面内旋转角(度)。type:number 默认 0
|
|
183
|
+
* @param params.bbCenter - 包围盒中心(缺省自动推导)。type:[x,y,z] 默认 自动
|
|
184
|
+
* @param params.bboxSize - 包围盒尺寸(缺省自动推导)。type:[x,y,z] 默认 自动
|
|
185
|
+
* @param params.applyExplode - 是否将两侧沿法向分离位移(bbox 对角线 2% + 榫卯深度一半)。type:boolean 默认 true
|
|
186
|
+
* @param params.grooveDepth - 燕尾槽深(cutMode='dovetail')。type:number
|
|
187
|
+
* @param params.grooveWidth - 燕尾槽宽(cutMode='dovetail')。type:number
|
|
188
|
+
* @param params.grooveDepthTolerance - 燕尾槽深公差。type:number
|
|
189
|
+
* @param params.grooveWidthTolerance - 燕尾槽宽公差。type:number
|
|
190
|
+
* @param params.grooveFlapsAngle - 燕尾槽翼角(度)。type:number
|
|
191
|
+
* @param params.dowelDiameter - 定位销直径(cutMode='dowel')。type:number
|
|
192
|
+
* @param params.dowelDiameterTolerance - 定位销直径公差。type:number
|
|
193
|
+
* @param params.dowelHeight - 定位销高度。type:number
|
|
194
|
+
* @param params.dowelHeightTolerance - 定位销高度公差。type:number
|
|
195
|
+
* @param params.tenonSideLength - 直榫边长(cutMode='tenon'/'straight-tenon')。type:number
|
|
196
|
+
* @param params.tenonSideLengthTolerance - 直榫边长公差。type:number
|
|
197
|
+
* @param params.tenonHeight - 直榫高度。type:number
|
|
198
|
+
* @param params.tenonHeightTolerance - 直榫高度公差。type:number
|
|
199
|
+
* @param params.selectedSections - 参与榫卯的截面下标。type:number[]
|
|
200
|
+
* @note 切割面统一用 `normal`/`offset`/`inPlaneAngle` 描述;早期文本层曾与执行层键名断裂(planeRotation/planePosition),已修并统一为上述键名。
|
|
201
|
+
* @example
|
|
202
|
+
* const { front: part1, back: part2 } = await cad.fai_split(part0, { normal: [0, 0, 1], offset: 5, cutMode: 'dovetail', grooveDepth: 3, grooveWidth: 5 })
|
|
203
|
+
*/
|
|
204
|
+
export const fai_split = defineOp({
|
|
205
|
+
mesh: (input, params = {}) => {
|
|
206
|
+
if (!input)
|
|
207
|
+
throw new Error('[extra/split] no input geometry');
|
|
208
|
+
if (params.normal !== undefined && params.normal !== null) {
|
|
209
|
+
assertNonZeroVec3(params.normal, 'split.normal');
|
|
210
|
+
}
|
|
211
|
+
return splitMeshPath(input, params);
|
|
212
|
+
},
|
|
213
|
+
brep: (input, params = {}) => {
|
|
214
|
+
if (!input)
|
|
215
|
+
throw new Error('[extra/split] no input geometry');
|
|
216
|
+
if (params.normal !== undefined && params.normal !== null) {
|
|
217
|
+
assertNonZeroVec3(params.normal, 'split.normal');
|
|
218
|
+
}
|
|
219
|
+
return splitBrepPath(input, params);
|
|
220
|
+
},
|
|
221
|
+
outputs: ['front', 'back'],
|
|
222
|
+
naming: { kind: 'subdivide' },
|
|
223
|
+
// 脚本面参数量纲(单位系统 G3):offset/木销/榫头/榫槽为 length,inPlaneAngle 为 angle。
|
|
224
|
+
paramDims: {
|
|
225
|
+
offset: 'length',
|
|
226
|
+
inPlaneAngle: 'angle',
|
|
227
|
+
grooveDepth: 'length',
|
|
228
|
+
grooveWidth: 'length',
|
|
229
|
+
dowelDiameter: 'length',
|
|
230
|
+
dowelHeight: 'length',
|
|
231
|
+
tenonSideLength: 'length',
|
|
232
|
+
tenonHeight: 'length',
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=fai_split.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fai_split.js","sourceRoot":"","sources":["../../../src/extra/ops/fai_split.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-extra split — 分割库函数(返回具名对象 { front, back })\n *\n *\n * dispatchPath 静态判定 brep/mesh,双输出以具名对象返回(替代 outputCache 多输出写入)。\n */\n\nimport type { Shape, Vec3 } from '../../mesh/types'\nimport { splitWithParams as meshSplitWithParams } from '../mesh/fai_split'\nimport { bboxCenter, boundingBox } from '../../mesh/query'\nimport {\n splitBrep,\n solidToShape,\n translateBrep,\n} from '../../brep/brep-ops'\nimport {\n dovetailBooleanSplitBrep,\n dowelOrTenonBooleanSplitBrep,\n type JoineryBasis,\n type GrooveParams,\n type DowelOrTenonParams,\n} from '../../api/brep-operations/joinery-brep'\nimport { computeBasisFromNormal } from '../mesh/fai_split'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { solid, fromBrep, brepOf } from '../../shape'\nimport { defineOp } from '../../sdk'\nimport type { Provenance } from '../../topology/naming/lineage'\nimport { assertNonZeroVec3 } from '../../api/assert'\nimport type { BrepHandle } from '../../brep/engine/types'\n\n/** BREP 路径:OCCT 平面/榫卯分割 + 分离位移。 */\nfunction splitBrepPath(input: Shape, params: Record<string, unknown>): { front: Shape; back: Shape } {\n const kernel = getBrepApi()\n const inputSolid = brepOf(input) as BrepHandle | undefined\n if (inputSolid === undefined) throw new Error('[extra/split] input is not BREP')\n\n const cutMode = (params.cutMode as string) ?? 'plane'\n const normal = (params.normal as Vec3) ?? [0, 0, 1]\n const offset = typeof params.offset === 'number' ? params.offset : 0\n const inPlaneAngle = typeof params.inPlaneAngle === 'number' ? params.inPlaneAngle : 0\n // 坐标契约(方向 A):bbCenter/bboxSize 是模型局部空间值——宿主生成脚本时已把\n // 交互世界坐标转换好,本 op 不做 world→local(无 partTransform 依赖)。\n const bbCenter = (params.bbCenter as Vec3) ?? bboxCenter(input)\n const bboxSize = (params.bboxSize as Vec3) ?? boundingBox(input).max.map(\n (v, i) => v - boundingBox(input).min[i],\n ) as Vec3\n const planeCenter: Vec3 = [\n bbCenter[0] + offset * normal[0],\n bbCenter[1] + offset * normal[1],\n bbCenter[2] + offset * normal[2],\n ]\n const planeDistance = normal[0] * planeCenter[0] + normal[1] * planeCenter[1] + normal[2] * planeCenter[2]\n\n const { widthDir, depthDir } = computeBasisFromNormal(normal, inPlaneAngle)\n const basis: JoineryBasis = {\n normal: normal as Vec3,\n widthDir: widthDir as Vec3,\n depthDir: depthDir as Vec3,\n planeCenter: planeCenter as Vec3,\n planeDistance,\n }\n\n let frontSolid: BrepHandle\n let backSolid: BrepHandle\n\n if (cutMode === 'dovetail') {\n const groove: GrooveParams = {\n depth: (params.grooveDepth as number) ?? 0,\n depthTolerance: (params.grooveDepthTolerance as number) ?? 0,\n width: (params.grooveWidth as number) ?? 0,\n widthTolerance: (params.grooveWidthTolerance as number) ?? 0,\n flapsAngle: (params.grooveFlapsAngle as number) ?? 0,\n }\n const result = dovetailBooleanSplitBrep(kernel, inputSolid, basis, groove)\n frontSolid = result.front\n backSolid = result.back\n } else if (cutMode === 'dowel' || cutMode === 'straight-tenon' || cutMode === 'tenon') {\n const shape: 'dowel' | 'tenon' = cutMode === 'dowel' ? 'dowel' : 'tenon'\n let joineryParams: DowelOrTenonParams\n if (cutMode === 'dowel') {\n joineryParams = {\n size: (params.dowelDiameter as number) ?? 0,\n sizeTolerance: (params.dowelDiameterTolerance as number) ?? 0,\n height: (params.dowelHeight as number) ?? 0,\n heightTolerance: (params.dowelHeightTolerance as number) ?? 0,\n }\n } else {\n joineryParams = {\n size: (params.tenonSideLength as number) ?? 0,\n sizeTolerance: (params.tenonSideLengthTolerance as number) ?? 0,\n height: (params.tenonHeight as number) ?? 0,\n heightTolerance: (params.tenonHeightTolerance as number) ?? 0,\n }\n }\n const selectedSections = params.selectedSections as number[] | null | undefined\n const result = dowelOrTenonBooleanSplitBrep(\n kernel, inputSolid, basis, shape, joineryParams, selectedSections ?? null,\n )\n frontSolid = result.front\n backSolid = result.back\n } else {\n const splitResult = splitBrep(kernel, inputSolid, {\n normal: normal as Vec3,\n planeDistance,\n planeCenter: planeCenter as Vec3,\n })\n frontSolid = splitResult.front\n backSolid = splitResult.back\n }\n\n // 分离位移:与 mesh 路径 finalizeExplode 同公式(bbox 对角线 2% + joinery 深度一半)\n const applyExplode = (params.applyExplode as boolean | undefined) ?? true\n if (applyExplode) {\n const bboxDiagonal = Math.sqrt(\n bboxSize[0] * bboxSize[0] + bboxSize[1] * bboxSize[1] + bboxSize[2] * bboxSize[2],\n )\n const baseOffset = bboxDiagonal * 0.02\n let joineryOffset = 0\n if (cutMode === 'dovetail') {\n joineryOffset = ((params.grooveDepth as number) ?? 0) / 2\n } else if (cutMode === 'dowel') {\n joineryOffset = ((params.dowelHeight as number) ?? 0) / 2\n } else if (cutMode === 'straight-tenon' || cutMode === 'tenon') {\n joineryOffset = ((params.tenonHeight as number) ?? 0) / 2\n }\n const frontOffset = baseOffset + joineryOffset\n const backOffset = -(baseOffset + joineryOffset)\n const frontTranslated = translateBrep(kernel, frontSolid, [\n normal[0] * frontOffset,\n normal[1] * frontOffset,\n normal[2] * frontOffset,\n ])\n const backTranslated = translateBrep(kernel, backSolid, [\n normal[0] * backOffset,\n normal[1] * backOffset,\n normal[2] * backOffset,\n ])\n kernel.release(frontSolid)\n kernel.release(backSolid)\n frontSolid = frontTranslated\n backSolid = backTranslated\n }\n\n const frontShape = fromBrep(solidToShape(kernel, frontSolid), { solid: frontSolid })\n const backShape = fromBrep(solidToShape(kernel, backSolid), { solid: backSolid })\n return { front: frontShape, back: backShape }\n}\n\n/** mesh 路径:manifold-3d mesh-CSG。 */\nasync function splitMeshPath(input: Shape, params: Record<string, unknown>): Promise<{ front: Shape; back: Shape }> {\n const cutMode = (params.cutMode as string) ?? 'plane'\n const normal = (params.normal as Vec3) ?? [0, 0, 1]\n const offset = typeof params.offset === 'number' ? params.offset : 0\n const inPlaneAngle = typeof params.inPlaneAngle === 'number' ? params.inPlaneAngle : 0\n const bbCenter = (params.bbCenter as Vec3) ?? bboxCenter(input)\n const bboxSize = (params.bboxSize as Vec3) ?? boundingBox(input).max.map(\n (v, i) => v - boundingBox(input).min[i],\n ) as Vec3\n // 坐标契约(方向 A):bbCenter/bboxSize 是模型局部空间值(宿主生成脚本时已转),\n // 本 op 不做 world→local(无 partTransform 依赖)。\n\n const result = await meshSplitWithParams({\n shape: input,\n cutMode: cutMode as 'plane' | 'dovetail' | 'dowel' | 'straight-tenon' | 'tenon' | 'straight',\n normal,\n offset,\n inPlaneAngle,\n bbCenter,\n bboxSize,\n groove: params.grooveDepth !== undefined ? {\n depth: params.grooveDepth as number,\n depthTolerance: (params.grooveDepthTolerance as number) ?? 0,\n width: (params.grooveWidth as number) ?? 0,\n widthTolerance: (params.grooveWidthTolerance as number) ?? 0,\n flapsAngle: (params.grooveFlapsAngle as number) ?? 0,\n } : undefined,\n dowel: params.dowelDiameter !== undefined ? {\n diameter: params.dowelDiameter as number,\n diameterTolerance: (params.dowelDiameterTolerance as number) ?? 0,\n height: (params.dowelHeight as number) ?? 0,\n heightTolerance: (params.dowelHeightTolerance as number) ?? 0,\n } : undefined,\n tenon: params.tenonSideLength !== undefined ? {\n sideLength: params.tenonSideLength as number,\n sideLengthTolerance: (params.tenonSideLengthTolerance as number) ?? 0,\n height: (params.tenonHeight as number) ?? 0,\n heightTolerance: (params.tenonHeightTolerance as number) ?? 0,\n } : undefined,\n selectedSections: params.selectedSections as number[] | null | undefined,\n applyExplode: (params.applyExplode as boolean | undefined) ?? true,\n })\n\n return { front: solid(result.front), back: solid(result.back) }\n}\n\n/**\n * 分割几何,返回具名对象 { front, back } 两个独立零件。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual warn\n * @name fai_split\n * @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):`fai_` 前缀 op 为编辑器应用提供,不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。\n * @returns { front: Shape; back: Shape } 必须用解构 `const { front: partA, back: partB } = await cad.fai_split(...)` 取出两个零件。\n * @param input - 目标几何。type:Shape required:true\n * @param params.cutMode - 切割模式。type:'plane' | 'dovetail' | 'dowel' | 'tenon' | 'straight-tenon' | 'straight' 默认 'plane'\n * @param params.normal - 切割面法向。type:[x,y,z] 默认 [0,0,1]\n * @param params.offset - 切割面沿法向偏移(过 bbCenter)。type:number 默认 0\n * @param params.inPlaneAngle - 切割面面内旋转角(度)。type:number 默认 0\n * @param params.bbCenter - 包围盒中心(缺省自动推导)。type:[x,y,z] 默认 自动\n * @param params.bboxSize - 包围盒尺寸(缺省自动推导)。type:[x,y,z] 默认 自动\n * @param params.applyExplode - 是否将两侧沿法向分离位移(bbox 对角线 2% + 榫卯深度一半)。type:boolean 默认 true\n * @param params.grooveDepth - 燕尾槽深(cutMode='dovetail')。type:number\n * @param params.grooveWidth - 燕尾槽宽(cutMode='dovetail')。type:number\n * @param params.grooveDepthTolerance - 燕尾槽深公差。type:number\n * @param params.grooveWidthTolerance - 燕尾槽宽公差。type:number\n * @param params.grooveFlapsAngle - 燕尾槽翼角(度)。type:number\n * @param params.dowelDiameter - 定位销直径(cutMode='dowel')。type:number\n * @param params.dowelDiameterTolerance - 定位销直径公差。type:number\n * @param params.dowelHeight - 定位销高度。type:number\n * @param params.dowelHeightTolerance - 定位销高度公差。type:number\n * @param params.tenonSideLength - 直榫边长(cutMode='tenon'/'straight-tenon')。type:number\n * @param params.tenonSideLengthTolerance - 直榫边长公差。type:number\n * @param params.tenonHeight - 直榫高度。type:number\n * @param params.tenonHeightTolerance - 直榫高度公差。type:number\n * @param params.selectedSections - 参与榫卯的截面下标。type:number[]\n * @note 切割面统一用 `normal`/`offset`/`inPlaneAngle` 描述;早期文本层曾与执行层键名断裂(planeRotation/planePosition),已修并统一为上述键名。\n * @example\n * const { front: part1, back: part2 } = await cad.fai_split(part0, { normal: [0, 0, 1], offset: 5, cutMode: 'dovetail', grooveDepth: 3, grooveWidth: 5 })\n */\nexport const fai_split = defineOp({\n mesh: (input: Shape, params: Record<string, unknown> = {}) => {\n if (!input) throw new Error('[extra/split] no input geometry')\n if (params.normal !== undefined && params.normal !== null) {\n assertNonZeroVec3(params.normal, 'split.normal')\n }\n return splitMeshPath(input, params)\n },\n brep: (input: Shape, params: Record<string, unknown> = {}) => {\n if (!input) throw new Error('[extra/split] no input geometry')\n if (params.normal !== undefined && params.normal !== null) {\n assertNonZeroVec3(params.normal, 'split.normal')\n }\n return splitBrepPath(input, params)\n },\n outputs: ['front', 'back'],\n naming: { kind: 'subdivide' } as Provenance,\n // 脚本面参数量纲(单位系统 G3):offset/木销/榫头/榫槽为 length,inPlaneAngle 为 angle。\n paramDims: {\n offset: 'length',\n inPlaneAngle: 'angle',\n grooveDepth: 'length',\n grooveWidth: 'length',\n dowelDiameter: 'length',\n dowelHeight: 'length',\n tenonSideLength: 'length',\n tenonHeight: 'length',\n },\n})\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* faijs-extra load — 加载库函数(统一 load 函数)
|
|
3
|
+
*
|
|
4
|
+
* file 指定资产名(用户上传文件名,不含路径、含后缀),经宿主资产解析器按名解析;
|
|
5
|
+
* 格式由 file 后缀白名单自判(不依赖宿主 format 参数),isCadFormat 静态判定 brep/mesh,
|
|
6
|
+
* 产物经 solid()/fromBrep() 构造器创建。
|
|
7
|
+
*
|
|
8
|
+
* @platform occt — 本文件 import `occt-kernel/occtKernel`(BREP 路径的 XCAF /
|
|
9
|
+
* `importBrepToMesh` 平台面)。mesh 路径(STL/3MF)不依赖平台模块;本 op 无
|
|
10
|
+
* `engines` 声明(不按 op 整体做引擎门,运行时按引擎能力静态分派,见下方注释)。
|
|
11
|
+
*/
|
|
12
|
+
import type { Shape } from '../../mesh/types.js';
|
|
13
|
+
import type { CompoundShape } from '../../shape.js';
|
|
14
|
+
/**
|
|
15
|
+
* 执行加载操作(统一 load 函数)
|
|
16
|
+
*
|
|
17
|
+
* 按 params.file(资产名)从宿主资产库解析 buffer。
|
|
18
|
+
*
|
|
19
|
+
* 静态分派:
|
|
20
|
+
* - CAD 源 + kernel + 非 mesh 模式 → BREP 路径(loadBrep 异常 = 未预期错误,冒泡上报)
|
|
21
|
+
* - 非 CAD 源 / 无 kernel / mesh 模式 → mesh 路径
|
|
22
|
+
* - brep 模式且将走 mesh 路径 → 调用前抛 BrepUnsupportedError(不静默回退)
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* 加载几何资产。`file` 指定资产名(用户上传文件名,不含路径、含后缀),内容经宿主资产解析器按名解析,**引用而非拷贝**。
|
|
26
|
+
* @group 创建
|
|
27
|
+
* @inputs 0
|
|
28
|
+
* @async true
|
|
29
|
+
* @qual ok
|
|
30
|
+
* @name load
|
|
31
|
+
* @note 语言正常化后 loadFile/loadUrl/loadByKey 别名已删除(A4),统一为 `load` 一个函数。
|
|
32
|
+
* @returns Shape 加载的几何,永远是 part 的第一条语句,后面可接特征链。
|
|
33
|
+
* @param params.file - 资产文件名(用户上传名,不含路径、含后缀,如 'vise.3mf');内容按名从宿主资产库取。type:string
|
|
34
|
+
* @param params.unit - **强制设置模型的源单位**:仅对无内部单位声明的 mesh 格式
|
|
35
|
+
* (STL/3MF)有效——提供即覆盖/忽略模型内部记录的单位(3MF `<model unit>`),
|
|
36
|
+
* 按指定单位折算坐标;只有调用方确实知道单位时才提供(用户手写脚本)。未提供
|
|
37
|
+
* 时:STL faijs 启发式(guessStlUnit)、3MF 文件声明。**STEP/BREP 不支持**——
|
|
38
|
+
* 走 OCCT 链、单位由文件内部声明决定(读取时折算),提供 unit 直接报错。type:string
|
|
39
|
+
* @note 格式由 `file` 后缀白名单自判:stl/3mf → mesh 路径;step/stp/stpz/brep → BREP 路径。宿主不再传 `format`。
|
|
40
|
+
* @note 后缀白名单未命中 → 报错(不猜格式);3MF 后缀会做 zip 魔数 sanity(后缀与内容明显不符时报错)。
|
|
41
|
+
* @note 本 op 要求导入物含实体(历史契约)。非实体(wire/face/shell)的导入是平台 `cad.import_brep` 的一等能力,不由本 op 承担。
|
|
42
|
+
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用的「文件导入 Feature」提供——`file` 读的是应用侧资产库(按用户上传文件名注册),产物语句位置与命名都是画布语义。不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**。2026-10-06 起多零件文件不再单零件收敛——全量以 compound + `ExecutionResult.importModels` 返回;宿主按 `importModel.parts` 身份批量建 part。
|
|
43
|
+
* @example
|
|
44
|
+
* const p = await cad.load({ file: 'box.stl' })
|
|
45
|
+
* const p = await cad.load({ file: 'box.3mf' })
|
|
46
|
+
* const p = await cad.load({ file: 'model.step' })
|
|
47
|
+
*/
|
|
48
|
+
export declare function load(params: Record<string, unknown>): Promise<Shape | CompoundShape>;
|
|
49
|
+
//# sourceMappingURL=load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/extra/ops/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAyBhD;;;;;;;;;GASG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,CAgK1F"}
|