@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
package/dist/api/import-brep.js
CHANGED
|
@@ -18,24 +18,6 @@ import { OpError } from './internal/result-unwrap.js';
|
|
|
18
18
|
import { loadBrep } from '../brep/brep-ops.js';
|
|
19
19
|
import { fromBrep } from '../shape.js';
|
|
20
20
|
import { defineOp } from '../sdk.js';
|
|
21
|
-
/**
|
|
22
|
-
* 平台 BREP 资产导入:把容器 `assets/` 里的冻结 BREP 载体装成持 OCCT 句柄的 Shape。
|
|
23
|
-
*
|
|
24
|
-
* `asset` = 资产名(去扩展名,沿用 `FsAssetResolver` 的 `key = basename(file)` 规则),
|
|
25
|
-
* 由宿主资产解析器按 key 解析(与 `cad.load` 同套解析器)。
|
|
26
|
-
*
|
|
27
|
-
* @group 创建
|
|
28
|
-
* @inputs 0
|
|
29
|
-
* @async true
|
|
30
|
-
* @qual ok
|
|
31
|
-
* @name import_brep
|
|
32
|
-
* @param params.asset - 容器资产名(去扩展名)。type:string required:true
|
|
33
|
-
* @note 非实体一等(C6):wire/face/shell 一律可导入,本 op 不设 `allowNonSolid` 一类开关。需要实体的 op(布尔、up-to 目标面)在**使用点**报错,而不是在导入点拒绝。
|
|
34
|
-
* @note 这是**平台**资产导入 op。编辑器 `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流 + 画布语句位置语义),平台侧不要复用它(C7)。
|
|
35
|
-
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
36
|
-
* @example
|
|
37
|
-
* const a = await cad.import_brep({ asset: 'Array001.Shape' })
|
|
38
|
-
*/
|
|
39
21
|
/**
|
|
40
22
|
* 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。
|
|
41
23
|
*
|
|
@@ -77,13 +59,23 @@ export async function importBrepImpl(params) {
|
|
|
77
59
|
});
|
|
78
60
|
}
|
|
79
61
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
62
|
+
* 平台 BREP 资产导入:把容器 `assets/` 里的冻结 BREP 载体装成持 OCCT 句柄的 Shape。
|
|
63
|
+
*
|
|
64
|
+
* `asset` = 资产名(去扩展名,沿用 `FsAssetResolver` 的 `key = basename(file)` 规则),
|
|
65
|
+
* 由宿主资产解析器按 key 解析(与 `cad.load` 同套解析器)。
|
|
66
|
+
*
|
|
67
|
+
* @group 创建
|
|
68
|
+
* @inputs 0
|
|
69
|
+
* @async true
|
|
70
|
+
* @qual ok
|
|
71
|
+
* @name import_brep
|
|
72
|
+
* @param params.asset - 容器资产名(去扩展名)。type:string required:true
|
|
73
|
+
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
74
|
+
* @example
|
|
75
|
+
* const a = await cad.import_brep({ asset: 'Array001.Shape' })
|
|
76
|
+
* @note 非实体一等(C6):wire/face/shell 一律可导入,本 op 不设 `allowNonSolid` 一类开关。需要实体的 op(布尔、up-to 目标面)在**使用点**报错,而不是在导入点拒绝。
|
|
77
|
+
* @note 这是**平台**资产导入 op。编辑器 `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流 + 画布语句位置语义),平台侧不要复用它(C7)。
|
|
78
|
+
* @note GOTCHA(2026-09-30):必须经 defineOp 包装进入 cad 命名空间,不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts 包装层的 brep 分支登记(shape.ts attachBrep 只落语句键表,因为 fromBrep 时刻 shape 还没被 executor 命名)。裸函数产物没有 part 键表 → 下游 place 的 inputRoleTable(tableOfPart)拿到 undefined → place 产物 roleTable 断流 → edgeRef 报 "input shape has no role table (nameless shape)"(fcstd 语料 43 例,如 ISO4032_Hex_Nut_M10 的 chamfer(Pocket001__place))。
|
|
87
79
|
*/
|
|
88
80
|
export const import_brep = defineOp({
|
|
89
81
|
name: 'import_brep',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-brep.js","sourceRoot":"","sources":["../../src/api/import-brep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAKjC
|
|
1
|
+
{"version":3,"file":"import-brep.js","sourceRoot":"","sources":["../../src/api/import-brep.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api import_brep — 平台 BREP 资产导入 op(H11 / 方案 §4.1)\n *\n *\n * 与编辑器 `cad.load`(`api/load.ts`)的区别见方案 §4.5:\n * - `cad.load` 是 ../3d_editor 的「文件导入 Feature」(key/path/url 三键分流、\n * 语句位置约定、partIndex 画布语义),且历史契约要求实体。\n * - `cad.import_brep` 是 faijs **平台**几何 op:单一 asset 引用(容器资产名,\n * 去扩展名),语义是「把冻结的 BREP 载体装成持 OCCT 句柄的 Shape」。\n *\n * 非实体(wire/face/shell)一等公民(C6):不要求实体,始终 allowNonSolid。\n * 需要实体的操作(布尔、up-to 目标面)在使用点报错(V-C8)。\n *\n * BREP 专属:`.brp` 无 mesh 解析器;mesh / 无内核模式抛 E_BREP_UNSUPPORTED。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state'\nimport { OpError } from './internal/result-unwrap'\nimport { loadBrep } from '../brep/brep-ops'\nimport { fromBrep } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\n\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n/**\n * 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。\n *\n * @param params - op 参数对象;`asset` 为容器资产名(去扩展名)。\n * @returns 持 OCCT 句柄的几何(非实体亦可)。\n */\nexport async function importBrepImpl(params: Record<string, unknown>): Promise<Shape> {\n const assets = getBackends().assets as {\n resolveByKey?(key: string): Promise<{ bytes: ArrayBuffer }>\n } | undefined\n if (!assets || !assets.resolveByKey) {\n throw new OpError('import_brep', 'E_OP_FAILED', '[api/import_brep] assets backend is required')\n }\n\n const asset = params.asset\n if (typeof asset !== 'string' || asset.length === 0) {\n throw new OpError('import_brep', 'E_ARGS', '[api/import_brep] asset name (string) is required')\n }\n\n const buffer = (await assets.resolveByKey(asset)).bytes\n\n const { kernel: kernels } = getBackends()\n const kernel = kernels.brep as BrepEngineApi | null\n if (!kernel) {\n throw new BrepUnsupportedError(\n 'E_BREP_UNSUPPORTED: import_brep requires an OCCT kernel (.brp assets have no mesh parser)',\n )\n }\n\n // C6:非实体一等公民——始终允许导入 wire/face/shell(allowNonSolid=true)。\n const { solid: solidHandle, shape } = loadBrep(\n kernel, buffer, undefined, undefined, { allowNonSolid: true },\n )\n // E3(H12):链根建 roleTable(与 primitives.ts 同源机制)——冻结资产是\n // 无名形状,没有这张表下游 edgeRef/faceRef 无法解析(nameless-shape 缺陷)。\n // Phase 1.6:origin 用导入语句的 StmtId——同一资产导入两次是两条语句,\n // 各自产出的面天然分属不同 origin(旧实现用资产名,两次导入撞 origin)。\n // 3.8: imported:<i> — imported faces have no semantic names (arbitrary geometry),\n // named by enumeration order in the imported file (stable across re-import of same file).\n const stmtId = String(getCurrentStmt()?.id ?? '')\n const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647)\n const roles = new Map<string, number[]>()\n for (let i = 0; i < hashes.length; i++) {\n roles.set(`imported:${i}`, [hashes[i]!])\n }\n return fromBrep(shape, {\n solid: solidHandle,\n roleTable: new Map([[stmtId, roles]]),\n })\n}\n\n/**\n * 平台 BREP 资产导入:把容器 `assets/` 里的冻结 BREP 载体装成持 OCCT 句柄的 Shape。\n *\n * `asset` = 资产名(去扩展名,沿用 `FsAssetResolver` 的 `key = basename(file)` 规则),\n * 由宿主资产解析器按 key 解析(与 `cad.load` 同套解析器)。\n *\n * @group 创建\n * @inputs 0\n * @async true\n * @qual ok\n * @name import_brep\n * @param params.asset - 容器资产名(去扩展名)。type:string required:true\n * @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。\n * @example\n * const a = await cad.import_brep({ asset: 'Array001.Shape' })\n * @note 非实体一等(C6):wire/face/shell 一律可导入,本 op 不设 `allowNonSolid` 一类开关。需要实体的 op(布尔、up-to 目标面)在**使用点**报错,而不是在导入点拒绝。\n * @note 这是**平台**资产导入 op。编辑器 `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流 + 画布语句位置语义),平台侧不要复用它(C7)。\n * @note GOTCHA(2026-09-30):必须经 defineOp 包装进入 cad 命名空间,不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts 包装层的 brep 分支登记(shape.ts attachBrep 只落语句键表,因为 fromBrep 时刻 shape 还没被 executor 命名)。裸函数产物没有 part 键表 → 下游 place 的 inputRoleTable(tableOfPart)拿到 undefined → place 产物 roleTable 断流 → edgeRef 报 \"input shape has no role table (nameless shape)\"(fcstd 语料 43 例,如 ISO4032_Hex_Nut_M10 的 chamfer(Pocket001__place))。\n */\nexport const import_brep = defineOp({\n name: 'import_brep',\n brep: importBrepImpl,\n engines: ['occt'],\n // `imported:0` 是 <i> 采样值(同 extrude 的 `wall:0`):实际产出 imported:0..n-1,\n // 与上面 roleTable 的 `imported:${i}` 逐字对齐。不能写成 semantic 'imported'——\n // 它是结构 kind,出现在串首会被 parseRoleName 读成结构而非语义名(见 role-name.ts RESERVED_KEYWORDS)。\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'imported', index: 0 }] } } as Provenance,\n\n paramDims: {},\n})\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { Shape } from '../mesh/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。
|
|
4
|
+
*
|
|
5
|
+
* @param params - op 参数对象;`path` 为 STEP 文件路径。
|
|
6
|
+
* @returns 持 OCCT 句柄的几何(非实体亦可)。
|
|
7
|
+
*/
|
|
8
|
+
export declare function importStepImpl(params: Record<string, unknown>): Promise<Shape>;
|
|
2
9
|
/**
|
|
3
10
|
* api import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)
|
|
4
11
|
*
|
|
@@ -18,24 +25,12 @@ import type { Shape } from '../mesh/types.js';
|
|
|
18
25
|
* @qual ok
|
|
19
26
|
* @name import_step
|
|
20
27
|
* @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true
|
|
21
|
-
* @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。
|
|
22
|
-
* @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。
|
|
23
28
|
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
24
29
|
* @example
|
|
25
30
|
* const a = await cad.import_step({ path: 'D:/models/box.step' })
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* @param params - op 参数对象;`path` 为 STEP 文件路径。
|
|
31
|
-
* @returns 持 OCCT 句柄的几何(非实体亦可)。
|
|
32
|
-
*/
|
|
33
|
-
export declare function importStepImpl(params: Record<string, unknown>): Promise<Shape>;
|
|
34
|
-
/**
|
|
35
|
-
* GOTCHA(2026-09-30):与 import_brep 同——必须经 defineOp 包装进入 cad 命名空间,
|
|
36
|
-
* 不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts
|
|
37
|
-
* 包装层的 brep 分支登记;裸 async 函数产物没有 part 键表,下游 place/edgeRef
|
|
38
|
-
* 报 "input shape has no role table (nameless shape)"。
|
|
31
|
+
* @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。
|
|
32
|
+
* @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。
|
|
33
|
+
* @note GOTCHA(2026-09-30):与 import_brep 同——必须经 defineOp 包装进入 cad 命名空间,不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts 包装层的 brep 分支登记;裸 async 函数产物没有 part 键表,下游 place/edgeRef 报 "input shape has no role table (nameless shape)"。
|
|
39
34
|
*/
|
|
40
35
|
export declare const import_step: ((params: Record<string, unknown>) => Promise<Shape>) & {
|
|
41
36
|
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-step.d.ts","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAwB1C
|
|
1
|
+
{"version":3,"file":"import-step.d.ts","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAwB1C;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAkDpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,WAAW;;CAUtB,CAAA"}
|
package/dist/api/import-step.js
CHANGED
|
@@ -18,31 +18,6 @@ function decodeStepText(buffer) {
|
|
|
18
18
|
return undefined;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
22
|
-
* api import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)
|
|
23
|
-
*
|
|
24
|
-
* 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:
|
|
25
|
-
* - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),
|
|
26
|
-
* OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。
|
|
27
|
-
* - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);
|
|
28
|
-
* `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、
|
|
29
|
-
* 画布语句位置语义),平台侧不要复用它(C7)。
|
|
30
|
-
*
|
|
31
|
-
* 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。
|
|
32
|
-
* STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。
|
|
33
|
-
*
|
|
34
|
-
* @group 创建
|
|
35
|
-
* @inputs 0
|
|
36
|
-
* @async true
|
|
37
|
-
* @qual ok
|
|
38
|
-
* @name import_step
|
|
39
|
-
* @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true
|
|
40
|
-
* @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。
|
|
41
|
-
* @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。
|
|
42
|
-
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
43
|
-
* @example
|
|
44
|
-
* const a = await cad.import_step({ path: 'D:/models/box.step' })
|
|
45
|
-
*/
|
|
46
21
|
/**
|
|
47
22
|
* 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。
|
|
48
23
|
*
|
|
@@ -94,10 +69,30 @@ export async function importStepImpl(params) {
|
|
|
94
69
|
return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) });
|
|
95
70
|
}
|
|
96
71
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
72
|
+
* api import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)
|
|
73
|
+
*
|
|
74
|
+
* 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:
|
|
75
|
+
* - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),
|
|
76
|
+
* OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。
|
|
77
|
+
* - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);
|
|
78
|
+
* `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、
|
|
79
|
+
* 画布语句位置语义),平台侧不要复用它(C7)。
|
|
80
|
+
*
|
|
81
|
+
* 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。
|
|
82
|
+
* STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。
|
|
83
|
+
*
|
|
84
|
+
* @group 创建
|
|
85
|
+
* @inputs 0
|
|
86
|
+
* @async true
|
|
87
|
+
* @qual ok
|
|
88
|
+
* @name import_step
|
|
89
|
+
* @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true
|
|
90
|
+
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
91
|
+
* @example
|
|
92
|
+
* const a = await cad.import_step({ path: 'D:/models/box.step' })
|
|
93
|
+
* @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。
|
|
94
|
+
* @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。
|
|
95
|
+
* @note GOTCHA(2026-09-30):与 import_brep 同——必须经 defineOp 包装进入 cad 命名空间,不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts 包装层的 brep 分支登记;裸 async 函数产物没有 part 键表,下游 place/edgeRef 报 "input shape has no role table (nameless shape)"。
|
|
101
96
|
*/
|
|
102
97
|
export const import_step = defineOp({
|
|
103
98
|
name: 'import_step',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-step.js","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAGjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,gEAAgE;AAChE,SAAS,cAAc,CAAC,MAAmB;IACzC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACnE,mDAAmD;QACnD,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"import-step.js","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Shape } from '../mesh/types'\nimport { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { OpError } from './internal/result-unwrap'\nimport { loadBrep } from '../brep/brep-ops'\nimport { fromBrep } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { parseStepPartMeta } from '../step/stepMetaParser'\nimport type { ShapeMeta } from './meta'\n\n/** 尽力把 ArrayBuffer 当 UTF-8 文本解出;非文本(如 .brp 二进制)返回 undefined。 */\nfunction decodeStepText(buffer: ArrayBuffer): string | undefined {\n if (!(buffer?.byteLength)) return undefined\n try {\n const s = new TextDecoder('utf-8', { fatal: false }).decode(buffer)\n // STEP 是纯文本 ISO-10303-21;首段要出现 `ISO-10303-21;` 才算。\n return s.includes('ISO-10303-21') ? s : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * 裸实现:契约层测试直调(不经 defineOp 的 dispatch 拦截)。\n *\n * @param params - op 参数对象;`path` 为 STEP 文件路径。\n * @returns 持 OCCT 句柄的几何(非实体亦可)。\n */\nexport async function importStepImpl(params: Record<string, unknown>): Promise<Shape> {\n const path = params.path\n if (typeof path !== 'string' || path.length === 0) {\n throw new OpError('import_step', 'E_ARGS', '[api/import_step] path (string) is required')\n }\n\n const assets = getBackends().assets as {\n resolveFile?(path: string): Promise<ArrayBuffer>\n } | undefined\n if (!assets || !assets.resolveFile) {\n throw new OpError(\n 'import_step',\n 'E_OP_FAILED',\n '[api/import_step] assets backend (resolveFile) is required',\n )\n }\n\n const buffer = await assets.resolveFile(path)\n\n let kernel: BrepEngineApi\n try { kernel = getBrepApi() } catch { throw new BrepUnsupportedError(\n 'E_BREP_UNSUPPORTED: import_step requires a BREP engine (STEP has no mesh parser)',\n )\n }\n\n // C6:非实体一等公民(对齐 import_brep)。loadBrep 自适应:CASCADE Topology\n // 文本走 kernel.fromBREP,其余(STEP/STP)走 kernel.importStep。\n const { solid: solidHandle, shape } = loadBrep(\n kernel, buffer, undefined, undefined, { allowNonSolid: true },\n )\n // P2(设计文档 2026-10-05-meta §5.2 读):从 STEP (P21) 文本捞伙伴级描述/属性\n // 挂 `shape.meta`(name 已由 OCCT label 提供,description/UDA 由纯文本补充)。\n // 非文本/非 STEP 内容跳过,绝不抛。\n const stepText = decodeStepText(buffer)\n if (stepText && shape.meta == null) {\n const partMeta = parseStepPartMeta(stepText)\n const shapeMeta: ShapeMeta = { ...(shape.meta ?? {}) }\n if (partMeta.description) shapeMeta.description = partMeta.description\n if (partMeta.metadata && Object.keys(partMeta.metadata).length > 0) shapeMeta.metadata = partMeta.metadata\n if (Object.keys(shapeMeta).length > 0) shape.meta = shapeMeta\n }\n // E3(H12):链根建 roleTable——导入文件的面没有语义名,按枚举序命名\n // imported:<i>(同一文件重复导入,枚举序稳定,role 名跨次导入保持一致)。\n const stmtId = String(getCurrentStmt()?.id ?? '')\n const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647)\n const roles = new Map<string, number[]>()\n for (let i = 0; i < hashes.length; i++) {\n roles.set(`imported:${i}`, [hashes[i]!])\n }\n return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) })\n}\n\n/**\n * api import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)\n *\n * 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:\n * - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),\n * OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。\n * - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);\n * `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、\n * 画布语句位置语义),平台侧不要复用它(C7)。\n *\n * 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。\n * STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。\n *\n * @group 创建\n * @inputs 0\n * @async true\n * @qual ok\n * @name import_step\n * @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true\n * @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。\n * @example\n * const a = await cad.import_step({ path: 'D:/models/box.step' })\n * @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。\n * @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。\n * @note GOTCHA(2026-09-30):与 import_brep 同——必须经 defineOp 包装进入 cad 命名空间,不能是裸 async 函数。part 键 roleTable(outputTablesByPart)只在 define-op.ts 包装层的 brep 分支登记;裸 async 函数产物没有 part 键表,下游 place/edgeRef 报 \"input shape has no role table (nameless shape)\"。\n */\nexport const import_step = defineOp({\n name: 'import_step',\n brep: importStepImpl,\n // 方案 docs/plans/2026-10-11-brepkit-step-io.md:不做引擎门禁。实现体走\n // getBrepApi() 的 L1 契约(kernel.importStep / fromBREP),brepkit 适配器已实现,\n // 各引擎行为同构;不支持的实体类型按 reader 自身行为处理,faijs 侧不抛错。\n // `imported:0` 是 <i> 采样值(同 extrude 的 `wall:0`),与 import-brep 同构。\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'imported', index: 0 }] } } as Provenance,\n\n paramDims: {},\n})\n"]}
|
package/dist/api/index.js
CHANGED
|
@@ -78,8 +78,8 @@ export { sdf } from './sdf.js';
|
|
|
78
78
|
// 引擎不得 import api/compound;公共 API 经本 re-export 保持)。
|
|
79
79
|
export { applyTransform } from '../mesh/rigid-transform.js';
|
|
80
80
|
// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。
|
|
81
|
-
// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude
|
|
82
|
-
// core
|
|
81
|
+
// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)现已
|
|
82
|
+
// 并入 core(core/src/extra);装配**求解器**(solve/validate/joints/solvers)
|
|
83
83
|
// 仍是平台能力,留在此处。
|
|
84
84
|
export * from './assembly/index.js';
|
|
85
85
|
// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * L3 API 面(api/)— faijs 库函数命名空间\n *\n * 导出全部官方库函数、Shape 构造器与 schema 表。\n * 库函数签名 = .fai.js 源码里的调用形态(无隐式参数);\n * 后端资源经 getBackends() 获取,保留声明经 keep() 表达。\n * 实现来源按 D11:mesh 侧复用 mesh/ 层,brep 侧复用既有 brep/ 层;\n * 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。\n */\n\nexport { box, sphere, cylinder, cone, wedge } from './primitives'\n// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族\n// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),\n// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;\n// 各 op 的 JSDoc 已带校正后的 @deprecated。\n//\n// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——\n// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。\nexport { translate, rotate_euler, scale, scale3d } from './transform'\nexport { union, subtract, intersect, cut } from './boolean'\nexport { engrave } from './engrave'\nexport { chamfer } from './chamfer'\nexport { fillet } from './fillet'\nexport { shell, type ShellParams } from './shell'\nexport { draft, type DraftParams } from './draft'\nexport { thicken } from './thicken'\nexport { defeature, reverseShape, unifySameDomain, sew, sewAndSolidify, removeHolesFromFace, type SewParams } from './feature-repair'\nexport { filletVariable } from './fillet-variable'\nexport { splitByPlane, type SplitByPlaneParams } from './split-by-plane'\nexport { sectionByPlane, type SectionByPlaneParams } from './section-by-plane'\nexport { screw } from './screw'\nexport { profile, buildProfileShape, assertProfileParams } from './profile'\nexport type { ProfileLineSeg, ProfileArcSeg, ProfileSeg, ProfileLoop, ProfileParams } from './profile'\nexport { sketchOnPlane, buildSketchOnPlaneWith } from './sketch-on-plane'\nexport { sketchOnFace, buildSketchOnFaceWith } from './sketch-on-face'\nexport { sketchOnSurface, buildSketchOnSurfaceWith } from './sketch-on-surface'\nexport { punchHole, buildPunchHole, punchSolidOf } from './punch-hole'\nexport type { SketchOnPlaneParams, PlaneSpec } from './sketch-on-plane'\nexport { wire } from './wire'\nexport { helix } from './helix'\nexport { split } from './split'\nexport { sweep } from './sweep'\nexport { sweepAdvanced, type SweepAdvancedOptions, type SweepOrientation, type SweepGuideContact, type SweepLawKind } from './sweep-advanced'\nexport { loft, type LoftOptions } from './loft'\nexport { loftAdvanced, type LoftAdvancedOptions } from './loft-advanced'\n// S3(occt-wasm op 接入):控制点阵 → B 样条面(平台 op engines:['occt'])。\nexport { surface, type SurfaceOptions } from './surface'\n// S3(occt-wasm op 接入):2D 轮廓偏置 → 1D 轮廓(平台 op engines:['occt'])。\nexport { offset2d, type Offset2DOptions, type Offset2DJoinType } from './offset2d'\n// S3(occt-wasm op 接入):面集一次成型为实体(平台 op engines:['occt'])。\nexport { solidFromFaces, type SolidFromFacesParams } from './solid-from-faces'\n// S3(occt-wasm op 接入):无限半空间实体(平台 op engines:['occt'],作无界布尔工具)。\nexport { halfSpace, type HalfSpaceParams } from './half-space'\n// S3(occt-wasm op 接入):导出族——STL(中立,纯数据序列化)/ BREP 文本(平台 op engines:['occt'])。\nexport { exportStl, type ExportStlOptions } from './export-stl'\nexport { exportBrep } from './export-brep'\n// S4(occt-wasm op 接入):类型判定谓词族(平台 op engines:['occt'],布尔返回)。\n// 仅平铺不与 ../shape 既有 TS 守卫同名者;`isCompound` 与 ../shape#isCompound 同名,\n// 只在 cad 脚本面(api-namespace)暴露,避免本桶重复导出。\nexport { isEdge, isFace, isShell, isVertex, isWire, isCompSolid, isEqual } from './shape-type'\n// S4 视图与导出族(平台 op engines:['occt'],字符串/Uint8Array 返回):平铺到 TS 桶。\nexport { toSVG, toMultiviewSVG, toPNG, toMultiviewPNG } from './view-export'\n// S4(occt-wasm op 接入):曲线与草图构造族(平台 op engines:['occt'],方案 §3.4.1)。\nexport {\n edge, circleArc, ellipseEdge, ellipseArc, tangentArc,\n approximatePoints, interpolateWithTangents,\n curveDegreeElevate, curveKnotInsert, curveKnotRemove, curveIsPeriodic,\n} from './curve-sketch'\n// S4(occt-wasm op 接入):曲面与面构造族(平台 op engines:['occt'],方案 §3.4.2)。\nexport { faceOnSurface, nonPlanarFace, makeSolid, reverseSurfaceU, outerWire } from './surface-face'\n// S4(occt-wasm op 接入):实体与偏置族剩余(平台 op engines:['occt'],方案 §3.4.4)。\nexport { draftPrism, pipe } from './solid-offset'\n// S4(occt-wasm op 接入):测量与查询族(平台 op engines:['occt'],方案 §3.4.6)。\nexport {\n containsPoint, distanceBetween, inertia, linearCenterOfMass,\n projectPointOnEdge, projectPointOnFace, classifyPointOnFace,\n uvFromPoint, vertexPosition, subShapeCount, iterShapes,\n liftCurve2d, commonCells,\n type SubShapeType,\n} from './measure-query'\n// S4(occt-wasm op 接入):通用布尔族(方案 §3.4.5)。`boolean` 是 cad 面的名字\n// (`api-namespace.ts` 的键);它此前在库里被整批平铺只是因为「导出面 ⊇ cad 面」\n// 门禁——该门禁已删(§2.7 / DEC-7),且库作者侧全仓无人 `import { boolean }`\n// (DEC-6),故库面只留自解释别名 `booleanOp`(指向同一 op)。\nexport {\n boolean as booleanOp,\n type BooleanKind, type BooleanOptions,\n} from './boolean-op'\n// S4(occt-wasm op 接入):包围盒对齐族(方案 §3.4.9)。\nexport { alignTo, type AlignAxis, type AlignAnchor, type AlignOptions } from './align'\nexport { knurl } from './knurl'\nexport { sdf } from './sdf'\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import api/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。\n// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出\n// core,见 @faicad/faijs-extra;装配**求解器**(solve/validate/joints/solvers)\n// 仍是平台能力,留在此处。\nexport * from './assembly'\n// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──\nexport { import_brep } from './import-brep'\nexport { import_step } from './import-step'\nexport { compound } from './compound-geom'\nexport { place } from './place'\nexport { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom'\nexport { edgeRef } from './edge-ref'\nexport { faceRef } from './face-ref'\nexport { asset } from './asset'\nexport { solid, isShape, isCompound } from '../shape'\nexport { compound as structCompound } from '../shape'\nexport type { ShapeSlot, SolidShape, CompoundShape, CurveShape, StdShape, ShapeKind } from '../shape'\nexport type { Shape } from '../mesh/types'\n// PBR 外观规格(设计文档 2026-10-05 v2 §4.1):类型供宿主/第三方消费;\n// 归一化/合并纯函数供编辑器映射(faijsAppearanceToHost)与导出复用。\nexport type { PbrAppearance, PbrColor, PbrAlphaMode, MaterialSpec, ShapeAppearanceMethods } from './appearance'\nexport { mergeAppearance, normalizeColor } from './appearance'\n// 零件/文件级说明性元数据(设计文档 2026-10-05-meta):类型供宿主/第三方消费;\n// 合并纯函数供编辑器映射与导出复用。\nexport type { ShapeMeta, FileMeta, ShapeMetaMethods } from './meta'\nexport { mergeMeta } from './meta'\n\n// ── P23:脚本面 op 与库面导出面的边界(§2.7 / DEC-5、DEC-6、DEC-7)──\n//\n// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。\n// 这批 op **不再**整批平铺进本桶:库面公开什么只看库的作者是否需要(DEC-6),\n// 脚本 op 是 `.fai.js` 的能力,库作者要的图形 / IO 函数走细粒度子路径\n// (docs/api-contract.zh.md:63、:70),「脚本面有」不构成「库面必须有」的理由。\n// 因此这里只按名保留**有库作者消费者**的脚本面 op(经 @faicad/faijs/api 被\n// sheetmetal 等导入者);其余留在 `cad.*` 脚本面与子路径,不经本聚合面。\nexport { fuse, isValid, rotate, applyMatrix } from './generated/script-face'\n// P25: compat extrude/revolve (brep-only, face→prism / face→lathe) share one\n// definition between the TS surface and the cad scripting surface. The fcstd\n// codegen wires Pad/Pocket/Extrusion/Revolution through these (sketch face →\n// cad.extrude / cad.revolve).\n// extrude 是平台手写 op(承载 upTo;长度形态委托生成投影)——见 api/extrude.ts;\n// revolve 仍直接取生成投影。\nexport { extrude } from './extrude'\nexport { revolve } from './generated/operations'\n//\n// ② 2026-09-25 core-decouple:brepjsCompat 命名空间与全部 op 投影随旧\n// 子包删除(§5.5 第 3 条,裁决 9)。此处只平铺**无 op 语义**的组合器与纯工具\n// (Result / 向量 / 平面 / 错误 / 常量),它们为 core 内联实现(§5.2),\n// 在两个面之间语义一致且无同名冲突。\nexport {\n ok, err, isOk, isErr, unwrap, unwrapOr,\n vecAdd, vecSub, vecScale, vecDot, vecCross, vecLength, vecNormalize,\n createPlane, createNamedPlane, resolvePlane,\n kernelError, validationError,\n DEG2RAD, RAD2DEG,\n} from './geom-types'\nexport type {\n Result, Ok, Err,\n BrepError,\n Plane, PlaneName, PlaneInput,\n Vec3, PointInput,\n} from './geom-types'\n// ── 2026-09-25 core-decouple:旧库建造工厂(makeExternalGear /\n// makeInternalGear / makePlanetaryGear / thread)与其句柄类型\n// (Vertex/Edge/…/Shape3D/ValidSolid/Bounds3D/Gear*)随裁决 9 删除;\n// Result 组合器 map/andThen 为 core 内联(§5.2),保留平铺;\n// brepjsCompat 命名空间整体删除(§5.5 第 3 条)。\nexport { map, andThen } from './geom-types'\n// ── 2026-09-25 core-decouple wrapup §2.2:sheetmetal 拓扑查询 / 构造 / 测量\n// 出口(faijs 风格,裁决 3 补进公开导出)。isValid 不在此面——cad 脚本面\n// 已有同语义出口(见 brep-topology.ts 头部注释)。同步测量(measureVolume\n// / measureArea / measureLength)为 api/generated/measurement.ts 第一方\n// 同步版,一并平铺(cad 面的 volume/area/length 为 async 脚本面重命名)。\nexport * from './brep-topology'\n// CadQuery 拓扑选择器子系统(独立物理边界,与 topo-resolve 隔离):\n// 等价搬运自 cq-compat,子路径直达 @faicad/faijs/api/cadquery-selectors。\nexport * from './cadquery-selectors'\nexport { measureVolume, measureArea, measureLength } from './generated/measurement'\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * L3 API 面(api/)— faijs 库函数命名空间\n *\n * 导出全部官方库函数、Shape 构造器与 schema 表。\n * 库函数签名 = .fai.js 源码里的调用形态(无隐式参数);\n * 后端资源经 getBackends() 获取,保留声明经 keep() 表达。\n * 实现来源按 D11:mesh 侧复用 mesh/ 层,brep 侧复用既有 brep/ 层;\n * 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。\n */\n\nexport { box, sphere, cylinder, cone, wedge } from './primitives'\n// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族\n// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),\n// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;\n// 各 op 的 JSDoc 已带校正后的 @deprecated。\n//\n// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——\n// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。\nexport { translate, rotate_euler, scale, scale3d } from './transform'\nexport { union, subtract, intersect, cut } from './boolean'\nexport { engrave } from './engrave'\nexport { chamfer } from './chamfer'\nexport { fillet } from './fillet'\nexport { shell, type ShellParams } from './shell'\nexport { draft, type DraftParams } from './draft'\nexport { thicken } from './thicken'\nexport { defeature, reverseShape, unifySameDomain, sew, sewAndSolidify, removeHolesFromFace, type SewParams } from './feature-repair'\nexport { filletVariable } from './fillet-variable'\nexport { splitByPlane, type SplitByPlaneParams } from './split-by-plane'\nexport { sectionByPlane, type SectionByPlaneParams } from './section-by-plane'\nexport { screw } from './screw'\nexport { profile, buildProfileShape, assertProfileParams } from './profile'\nexport type { ProfileLineSeg, ProfileArcSeg, ProfileSeg, ProfileLoop, ProfileParams } from './profile'\nexport { sketchOnPlane, buildSketchOnPlaneWith } from './sketch-on-plane'\nexport { sketchOnFace, buildSketchOnFaceWith } from './sketch-on-face'\nexport { sketchOnSurface, buildSketchOnSurfaceWith } from './sketch-on-surface'\nexport { punchHole, buildPunchHole, punchSolidOf } from './punch-hole'\nexport type { SketchOnPlaneParams, PlaneSpec } from './sketch-on-plane'\nexport { wire } from './wire'\nexport { helix } from './helix'\nexport { split } from './split'\nexport { sweep } from './sweep'\nexport { sweepAdvanced, type SweepAdvancedOptions, type SweepOrientation, type SweepGuideContact, type SweepLawKind } from './sweep-advanced'\nexport { loft, type LoftOptions } from './loft'\nexport { loftAdvanced, type LoftAdvancedOptions } from './loft-advanced'\n// S3(occt-wasm op 接入):控制点阵 → B 样条面(平台 op engines:['occt'])。\nexport { surface, type SurfaceOptions } from './surface'\n// S3(occt-wasm op 接入):2D 轮廓偏置 → 1D 轮廓(平台 op engines:['occt'])。\nexport { offset2d, type Offset2DOptions, type Offset2DJoinType } from './offset2d'\n// S3(occt-wasm op 接入):面集一次成型为实体(平台 op engines:['occt'])。\nexport { solidFromFaces, type SolidFromFacesParams } from './solid-from-faces'\n// S3(occt-wasm op 接入):无限半空间实体(平台 op engines:['occt'],作无界布尔工具)。\nexport { halfSpace, type HalfSpaceParams } from './half-space'\n// S3(occt-wasm op 接入):导出族——STL(中立,纯数据序列化)/ BREP 文本(平台 op engines:['occt'])。\nexport { exportStl, type ExportStlOptions } from './export-stl'\nexport { exportBrep } from './export-brep'\n// S4(occt-wasm op 接入):类型判定谓词族(平台 op engines:['occt'],布尔返回)。\n// 仅平铺不与 ../shape 既有 TS 守卫同名者;`isCompound` 与 ../shape#isCompound 同名,\n// 只在 cad 脚本面(api-namespace)暴露,避免本桶重复导出。\nexport { isEdge, isFace, isShell, isVertex, isWire, isCompSolid, isEqual } from './shape-type'\n// S4 视图与导出族(平台 op engines:['occt'],字符串/Uint8Array 返回):平铺到 TS 桶。\nexport { toSVG, toMultiviewSVG, toPNG, toMultiviewPNG } from './view-export'\n// S4(occt-wasm op 接入):曲线与草图构造族(平台 op engines:['occt'],方案 §3.4.1)。\nexport {\n edge, circleArc, ellipseEdge, ellipseArc, tangentArc,\n approximatePoints, interpolateWithTangents,\n curveDegreeElevate, curveKnotInsert, curveKnotRemove, curveIsPeriodic,\n} from './curve-sketch'\n// S4(occt-wasm op 接入):曲面与面构造族(平台 op engines:['occt'],方案 §3.4.2)。\nexport { faceOnSurface, nonPlanarFace, makeSolid, reverseSurfaceU, outerWire } from './surface-face'\n// S4(occt-wasm op 接入):实体与偏置族剩余(平台 op engines:['occt'],方案 §3.4.4)。\nexport { draftPrism, pipe } from './solid-offset'\n// S4(occt-wasm op 接入):测量与查询族(平台 op engines:['occt'],方案 §3.4.6)。\nexport {\n containsPoint, distanceBetween, inertia, linearCenterOfMass,\n projectPointOnEdge, projectPointOnFace, classifyPointOnFace,\n uvFromPoint, vertexPosition, subShapeCount, iterShapes,\n liftCurve2d, commonCells,\n type SubShapeType,\n} from './measure-query'\n// S4(occt-wasm op 接入):通用布尔族(方案 §3.4.5)。`boolean` 是 cad 面的名字\n// (`api-namespace.ts` 的键);它此前在库里被整批平铺只是因为「导出面 ⊇ cad 面」\n// 门禁——该门禁已删(§2.7 / DEC-7),且库作者侧全仓无人 `import { boolean }`\n// (DEC-6),故库面只留自解释别名 `booleanOp`(指向同一 op)。\nexport {\n boolean as booleanOp,\n type BooleanKind, type BooleanOptions,\n} from './boolean-op'\n// S4(occt-wasm op 接入):包围盒对齐族(方案 §3.4.9)。\nexport { alignTo, type AlignAxis, type AlignAnchor, type AlignOptions } from './align'\nexport { knurl } from './knurl'\nexport { sdf } from './sdf'\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import api/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。\n// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)现已\n// 并入 core(core/src/extra);装配**求解器**(solve/validate/joints/solvers)\n// 仍是平台能力,留在此处。\nexport * from './assembly'\n// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──\nexport { import_brep } from './import-brep'\nexport { import_step } from './import-step'\nexport { compound } from './compound-geom'\nexport { place } from './place'\nexport { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom'\nexport { edgeRef } from './edge-ref'\nexport { faceRef } from './face-ref'\nexport { asset } from './asset'\nexport { solid, isShape, isCompound } from '../shape'\nexport { compound as structCompound } from '../shape'\nexport type { ShapeSlot, SolidShape, CompoundShape, CurveShape, StdShape, ShapeKind } from '../shape'\nexport type { Shape } from '../mesh/types'\n// PBR 外观规格(设计文档 2026-10-05 v2 §4.1):类型供宿主/第三方消费;\n// 归一化/合并纯函数供编辑器映射(faijsAppearanceToHost)与导出复用。\nexport type { PbrAppearance, PbrColor, PbrAlphaMode, MaterialSpec, ShapeAppearanceMethods } from './appearance'\nexport { mergeAppearance, normalizeColor } from './appearance'\n// 零件/文件级说明性元数据(设计文档 2026-10-05-meta):类型供宿主/第三方消费;\n// 合并纯函数供编辑器映射与导出复用。\nexport type { ShapeMeta, FileMeta, ShapeMetaMethods } from './meta'\nexport { mergeMeta } from './meta'\n\n// ── P23:脚本面 op 与库面导出面的边界(§2.7 / DEC-5、DEC-6、DEC-7)──\n//\n// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。\n// 这批 op **不再**整批平铺进本桶:库面公开什么只看库的作者是否需要(DEC-6),\n// 脚本 op 是 `.fai.js` 的能力,库作者要的图形 / IO 函数走细粒度子路径\n// (docs/api-contract.zh.md:63、:70),「脚本面有」不构成「库面必须有」的理由。\n// 因此这里只按名保留**有库作者消费者**的脚本面 op(经 @faicad/faijs/api 被\n// sheetmetal 等导入者);其余留在 `cad.*` 脚本面与子路径,不经本聚合面。\nexport { fuse, isValid, rotate, applyMatrix } from './generated/script-face'\n// P25: compat extrude/revolve (brep-only, face→prism / face→lathe) share one\n// definition between the TS surface and the cad scripting surface. The fcstd\n// codegen wires Pad/Pocket/Extrusion/Revolution through these (sketch face →\n// cad.extrude / cad.revolve).\n// extrude 是平台手写 op(承载 upTo;长度形态委托生成投影)——见 api/extrude.ts;\n// revolve 仍直接取生成投影。\nexport { extrude } from './extrude'\nexport { revolve } from './generated/operations'\n//\n// ② 2026-09-25 core-decouple:brepjsCompat 命名空间与全部 op 投影随旧\n// 子包删除(§5.5 第 3 条,裁决 9)。此处只平铺**无 op 语义**的组合器与纯工具\n// (Result / 向量 / 平面 / 错误 / 常量),它们为 core 内联实现(§5.2),\n// 在两个面之间语义一致且无同名冲突。\nexport {\n ok, err, isOk, isErr, unwrap, unwrapOr,\n vecAdd, vecSub, vecScale, vecDot, vecCross, vecLength, vecNormalize,\n createPlane, createNamedPlane, resolvePlane,\n kernelError, validationError,\n DEG2RAD, RAD2DEG,\n} from './geom-types'\nexport type {\n Result, Ok, Err,\n BrepError,\n Plane, PlaneName, PlaneInput,\n Vec3, PointInput,\n} from './geom-types'\n// ── 2026-09-25 core-decouple:旧库建造工厂(makeExternalGear /\n// makeInternalGear / makePlanetaryGear / thread)与其句柄类型\n// (Vertex/Edge/…/Shape3D/ValidSolid/Bounds3D/Gear*)随裁决 9 删除;\n// Result 组合器 map/andThen 为 core 内联(§5.2),保留平铺;\n// brepjsCompat 命名空间整体删除(§5.5 第 3 条)。\nexport { map, andThen } from './geom-types'\n// ── 2026-09-25 core-decouple wrapup §2.2:sheetmetal 拓扑查询 / 构造 / 测量\n// 出口(faijs 风格,裁决 3 补进公开导出)。isValid 不在此面——cad 脚本面\n// 已有同语义出口(见 brep-topology.ts 头部注释)。同步测量(measureVolume\n// / measureArea / measureLength)为 api/generated/measurement.ts 第一方\n// 同步版,一并平铺(cad 面的 volume/area/length 为 async 脚本面重命名)。\nexport * from './brep-topology'\n// CadQuery 拓扑选择器子系统(独立物理边界,与 topo-resolve 隔离):\n// 等价搬运自 cq-compat,子路径直达 @faicad/faijs/api/cadquery-selectors。\nexport * from './cadquery-selectors'\nexport { measureVolume, measureArea, measureLength } from './generated/measurement'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-members.js","sourceRoot":"","sources":["../../../src/api/internal/export-members.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAqB5C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAA4B;IAC1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,QAAsC,CAAA;IACvE,MAAM,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAA;IACnC,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;QAChC,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7E,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,KAAK;YACZ,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;SAC1C,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAuBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAA4B;IACvD,MAAM,IAAI,GAAG,CAAC,CAAQ,EAAE,IAAa,EAAE,KAAyC,EAAoB,EAAE;QACpG,MAAM,IAAI,GAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAwC,CAAA;QACpD,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACxC,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,CAAC,CAAwB,EAAoB,EAAE;QAC3D,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAU,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,QAAsC,CAAA;QACnE,MAAM,KAAK,GAAG,QAAQ,EAAE,WAAW,CAAA;QACnC,MAAM,QAAQ,GAAuB,EAAE,CAAA;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAA;YAC5B,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;gBACvC,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACtE,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAA;gBAC7E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QACD,2DAA2D;QAC3D,kCAAkC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAqB,CAAC,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAc,CAAC,CAAC,CAAA;AACxE,CAAC","sourcesContent":["/**\n * export-members — 导出命令的「入参 Shape → 成员表」(方案 §2.6 定式 3 的共用件)\n *\n * `cad.exportStep`(`api/export-step.ts`)与 `cad.export3mf`(`api/export-3mf.ts`)\n * 是同一个库面序列化器(`brep/export/export-model.ts#exportModelSync`)的两个脚本面\n * 薄壳。两者的差别只有「一个成员交给写出器的载荷是 `solid` 还是 `mesh`」;把入参拆\n * 成成员表这一步完全一致,故收在本文件——两份拷贝各自漂移会让脚本面与库面同源\n * (矩阵 B12 / B14)失去保障。\n *\n * 拆解口径对齐现成先例 `node-host/cli.ts#writeAssemblyStep`:\n * - 成员 = `CompoundShape.children`(同序;嵌套 compound 不递归展开,与先例一致);\n * - 成员名 = `behavior.memberNames[i]`(装配 op 写入的短名,`memberColors` 亦以它为\n * 键),无装配 behavior 时回落 `nameOf(child)`;\n * - 成员色 = `behavior.memberColors[成员名]`(sRGB 0–1,STEP 写 XCAF COLOUR_RGB、\n * 3MF 写 basematerials);\n * - 非 compound 入参 = 单成员、不带名与色,与 `cli.ts#writeOutput`(`:744-758`)同\n * 口径——单件导出不写名。\n *\n * 判定用**结构**判定 `isCompoundLike` 而非 SDK 的 `isShape`/`isCompound`:本 op 吃\n * 的是脚本文本传进来的值,可能是跨库产物,不能对它提「必须由本库构造器创建」的要求\n * (同 `keep-syntax §5.3 D5` 的既有取舍)。\n *\n * 成员几何一律由调用方**现场**读(`brepOf(child)`),不取创建期快照:装配变换在语句\n * 之后才烘进 `slot.solid`,快照对已变换成员是陈旧的(`cli.ts#writeAssemblyStep` 的\n * 同款注释)。\n */\n\nimport type { Shape, Vec3 } from '../../mesh/types'\nimport type { CompoundShape } from '../../shape'\nimport { getSlot, isCompoundLike } from '../../shape'\nimport { nameOf } from '../../runtime-state'\n\n/** 导出成员:一个待导出的几何 + 其身份(名 / 色)。 */\nexport interface ExportMember {\n /** 成员几何:compound 的成员,或单件入参本身。 */\n shape: Shape\n /** 成员名(写 STEP PRODUCT 名 / 3MF `<object name>`);无名时缺省。 */\n name?: string\n /** sRGB 0–1 成员色(来自装配 behavior 的 `memberColors`)。 */\n color?: readonly [number, number, number]\n}\n\n/**\n * 装配 behavior
|
|
1
|
+
{"version":3,"file":"export-members.js","sourceRoot":"","sources":["../../../src/api/internal/export-members.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * export-members — 导出命令的「入参 Shape → 成员表」(方案 §2.6 定式 3 的共用件)\n *\n * `cad.exportStep`(`api/export-step.ts`)与 `cad.export3mf`(`api/export-3mf.ts`)\n * 是同一个库面序列化器(`brep/export/export-model.ts#exportModelSync`)的两个脚本面\n * 薄壳。两者的差别只有「一个成员交给写出器的载荷是 `solid` 还是 `mesh`」;把入参拆\n * 成成员表这一步完全一致,故收在本文件——两份拷贝各自漂移会让脚本面与库面同源\n * (矩阵 B12 / B14)失去保障。\n *\n * 拆解口径对齐现成先例 `node-host/cli.ts#writeAssemblyStep`:\n * - 成员 = `CompoundShape.children`(同序;嵌套 compound 不递归展开,与先例一致);\n * - 成员名 = `behavior.memberNames[i]`(装配 op 写入的短名,`memberColors` 亦以它为\n * 键),无装配 behavior 时回落 `nameOf(child)`;\n * - 成员色 = `behavior.memberColors[成员名]`(sRGB 0–1,STEP 写 XCAF COLOUR_RGB、\n * 3MF 写 basematerials);\n * - 非 compound 入参 = 单成员、不带名与色,与 `cli.ts#writeOutput`(`:744-758`)同\n * 口径——单件导出不写名。\n *\n * 判定用**结构**判定 `isCompoundLike` 而非 SDK 的 `isShape`/`isCompound`:本 op 吃\n * 的是脚本文本传进来的值,可能是跨库产物,不能对它提「必须由本库构造器创建」的要求\n * (同 `keep-syntax §5.3 D5` 的既有取舍)。\n *\n * 成员几何一律由调用方**现场**读(`brepOf(child)`),不取创建期快照:装配变换在语句\n * 之后才烘进 `slot.solid`,快照对已变换成员是陈旧的(`cli.ts#writeAssemblyStep` 的\n * 同款注释)。\n */\n\nimport type { Shape, Vec3 } from '../../mesh/types'\nimport type { CompoundShape } from '../../shape'\nimport { getSlot, isCompoundLike } from '../../shape'\nimport { nameOf } from '../../runtime-state'\n\n/** 导出成员:一个待导出的几何 + 其身份(名 / 色)。 */\nexport interface ExportMember {\n /** 成员几何:compound 的成员,或单件入参本身。 */\n shape: Shape\n /** 成员名(写 STEP PRODUCT 名 / 3MF `<object name>`);无名时缺省。 */\n name?: string\n /** sRGB 0–1 成员色(来自装配 behavior 的 `memberColors`)。 */\n color?: readonly [number, number, number]\n}\n\n/**\n * 装配 behavior 里与导出相关的两个字段(`core/src/extra` 的 `assembly` op 写入;\n * 本文件只读不写,也不 import extra 域——core 内部模块不应跨域依赖)。\n */\ninterface ExportBehavior {\n memberNames?: string[]\n memberColors?: Record<string, [number, number, number]>\n}\n\n/**\n * 把导出命令的入参拆成成员表。\n *\n * @param input - 单件 Shape 或装配 compound(结构判定)。\n * @returns 成员表;空 compound 返回空数组——调用方必须显式报错,不得落空文件。\n */\nexport function exportMembersOf(input: Shape | CompoundShape): ExportMember[] {\n if (!isCompoundLike(input)) return [{ shape: input }]\n const behavior = getSlot(input)?.behavior as ExportBehavior | undefined\n const names = behavior?.memberNames\n const members: ExportMember[] = []\n for (let i = 0; i < input.children.length; i++) {\n const child = input.children[i]!\n const raw = names?.[i] ?? nameOf(child)\n const name = raw === undefined || raw === '' ? undefined : String(raw)\n const color = name === undefined ? undefined : behavior?.memberColors?.[name]\n members.push({\n shape: child,\n ...(name === undefined ? {} : { name }),\n ...(color === undefined ? {} : { color }),\n })\n }\n return members\n}\n\n/** 装配节点位姿(与 `Shape.transform` 同形态,见 mesh/types.ts)。 */\nexport interface ExportTransform {\n translate?: Vec3\n rotate?: { angle: number; axis?: Vec3 }\n matrix?: number[]\n}\n\n/** 导出成员树节点:结构(名 / 色 / 位姿 / 子节点)与几何(shape)分离。 */\nexport interface ExportMemberNode {\n /** 成员几何:compound 的成员,或单件入参本身。 */\n shape: Shape\n /** 成员名(写 3MF `<object name>` / STEP PRODUCT 名);无名时缺省。 */\n name?: string\n /** sRGB 0–1 成员色(来自装配 behavior 的 `memberColors`)。 */\n color?: readonly [number, number, number]\n /** 本节点相对父的位姿(来自 `shape.transform`)。 */\n transform?: ExportTransform\n /** 子节点(嵌套装配);非 compound 叶节点缺省。 */\n children?: ExportMemberNode[]\n}\n\n/**\n * 导出命令入参 → 成员树(方案 §2.1「装配模型 = 节点属性,单一真源」的脚本面投影)。\n * 与 `exportMembersOf`(平铺)不同,本函数**保留嵌套**:compound 的成员若自身是\n * compound 则递归展开为子树(同序),叶节点携带其 `shape.transform` 作为相对父位姿。\n *\n * 名称 / 颜色取自各层 compound 的 behavior(`memberNames` / `memberColors`,装配 op\n * 写入;core 只读不写,不 import extra)。本层只管结构,几何载荷由调用方(各 op)\n * 现场读取——避免创建期快照陈旧(同 `exportMembersOf` 注释)。\n *\n * @param input - 脚本面导出命令的入参形状(叶或 compound 装配)。\n * @returns 保留嵌套结构的成员树;叶节点携带 `shape.transform` 作为相对父位姿。\n */\nexport function exportTreeOf(input: Shape | CompoundShape): ExportMemberNode[] {\n const leaf = (s: Shape, name?: string, color?: readonly [number, number, number]): ExportMemberNode => {\n const node: ExportMemberNode = { shape: s }\n const t = s.transform as ExportTransform | undefined\n if (t) node.transform = t\n if (name !== undefined) node.name = name\n if (color !== undefined) node.color = color\n return node\n }\n const build = (s: Shape | CompoundShape): ExportMemberNode => {\n if (!isCompoundLike(s)) return leaf(s as Shape)\n const behavior = getSlot(s)?.behavior as ExportBehavior | undefined\n const names = behavior?.memberNames\n const children: ExportMemberNode[] = []\n for (let i = 0; i < s.children.length; i++) {\n const child = s.children[i]!\n if (isCompoundLike(child)) {\n children.push(build(child))\n } else {\n const raw = names?.[i] ?? nameOf(child)\n const name = raw === undefined || raw === '' ? undefined : String(raw)\n const color = name === undefined ? undefined : behavior?.memberColors?.[name]\n children.push(leaf(child, name, color))\n }\n }\n // compound 也是 Shape 的鸭子形态(有 children 槽),但类型面与叶 Shape 不重叠——\n // 结构判定后这里的 cast 只对类型系统成立,运行时直接透传。\n const node = leaf(s as unknown as Shape)\n node.children = children\n return node\n }\n return isCompoundLike(input) ? [build(input)] : [leaf(input as Shape)]\n}\n"]}
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
*
|
|
11
11
|
* 实现走 core 直连 occt `loft` / `loftWithVertices`(`BRepOffsetAPI_ThruSections`),
|
|
12
12
|
* 产物经 `fromBrep` 收养。
|
|
13
|
+
*
|
|
14
|
+
* @platform occt — 本文件 import `occt-kernel/occtKernel`(`getOcctKernel()` 的
|
|
15
|
+
* `loft` / `loftWithVertices` 平台面);op 已声明 `engines: ['occt']`,非 occt 引擎
|
|
16
|
+
* 执行前拒绝。文件级标注让守卫①(平台 import 自证身份)识别本文件。
|
|
13
17
|
*/
|
|
14
18
|
import type { Shape } from '../mesh/types.js';
|
|
15
19
|
/** 放样完整配置(occt 平台 op)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loft-advanced.d.ts","sourceRoot":"","sources":["../../src/api/loft-advanced.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loft-advanced.d.ts","sourceRoot":"","sources":["../../src/api/loft-advanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAU1C,0BAA0B;AAC1B,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mBAAmB;IACnB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpF,mBAAmB;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClF,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,YAAY;;CASvB,CAAA"}
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
*
|
|
11
11
|
* 实现走 core 直连 occt `loft` / `loftWithVertices`(`BRepOffsetAPI_ThruSections`),
|
|
12
12
|
* 产物经 `fromBrep` 收养。
|
|
13
|
+
*
|
|
14
|
+
* @platform occt — 本文件 import `occt-kernel/occtKernel`(`getOcctKernel()` 的
|
|
15
|
+
* `loft` / `loftWithVertices` 平台面);op 已声明 `engines: ['occt']`,非 occt 引擎
|
|
16
|
+
* 执行前拒绝。文件级标注让守卫①(平台 import 自证身份)识别本文件。
|
|
13
17
|
*/
|
|
14
18
|
import { defineOp } from '../sdk.js';
|
|
15
19
|
import { getBrepApi } from '../brep/handle-bridge.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loft-advanced.js","sourceRoot":"","sources":["../../src/api/loft-advanced.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loft-advanced.js","sourceRoot":"","sources":["../../src/api/loft-advanced.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api loft-advanced — 放样(完整语义):occt 平台 op。\n *\n * 为什么与基础 `loft` 拆成两个 op(方案 2026-10-10-sweep-loft-dual-engine-plan\n * §3 总览 / §6):基础 `loft` 进 L1(两内核都要支持),选项集必须等于**两内核\n * 交集**;而本 op 承载的 `startPoint`(起点退化到点的蒙皮)与 `tolerance`\n * (ThruSections 缝合公差)在 brepkit 没有对应能力(brepkit 的 `loftWithOptions`\n * 只有 endPoint / ruled)。留在基础 op 上会造成语义分叉 —— 故上移到本 op\n * (与 `sketchOnFace → sketchOnSurface` 同构)。\n *\n * 实现走 core 直连 occt `loft` / `loftWithVertices`(`BRepOffsetAPI_ThruSections`),\n * 产物经 `fromBrep` 收养。\n *\n * @platform occt — 本文件 import `occt-kernel/occtKernel`(`getOcctKernel()` 的\n * `loft` / `loftWithVertices` 平台面);op 已声明 `engines: ['occt']`,非 occt 引擎\n * 执行前拒绝。文件级标注让守卫①(平台 import 自证身份)识别本文件。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\nimport { toProfileWireView } from './internal/profile-wire'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 放样完整配置(occt 平台 op)。 */\nexport interface LoftAdvancedOptions {\n /** 直线插值(ruled)。默认 true。 */\n ruled?: boolean\n /** 起点(退化到点的蒙皮)。 */\n startPoint?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** 终点(退化到点的蒙皮)。 */\n endPoint?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** ThruSections 缝合公差。默认 1e-6。 */\n tolerance?: number\n}\n\n/** PointInput → [x,y,z](旧 toVec3 同口径)。 */\nfunction toVec3(p: LoftAdvancedOptions['startPoint']): [number, number, number] {\n if (Array.isArray(p) && p.length >= 3) return [p[0]!, p[1]!, p[2]!]\n const o = p as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n}\n\n/** BREP 路径:按序蒙皮各截面(wire 视图 → occt-wasm 直连 → fromBrep 收养)。 */\nfunction loftAdvancedBrep(sections: Shape[], opts?: LoftAdvancedOptions): Shape {\n if (!Array.isArray(sections) || sections.length === 0) {\n throw new Error('E_LOFT_NO_SECTIONS: loft requires a non-empty array of section shapes')\n }\n // 每截面:wire 直用;面取外环(孔环不参与放样)。\n const wireViews = sections.map((s) => toProfileWireView(s))\n const { ruled = true, startPoint, endPoint } = opts ?? {}\n const kernel = getBrepApi()\n const k = getOcctKernel()\n const wireHandles = wireViews.map((w) => w.wrapped as never)\n\n try {\n let h: unknown\n if (startPoint !== undefined || endPoint !== undefined) {\n const startVertex = startPoint !== undefined ? k.makeVertex(...toVec3(startPoint)) : undefined\n const endVertex = endPoint !== undefined ? k.makeVertex(...toVec3(endPoint)) : undefined\n try {\n h = k.loftWithVertices(wireHandles, true, ruled, startVertex as never, endVertex as never)\n } finally {\n if (startVertex !== undefined) k.release(startVertex)\n if (endVertex !== undefined) k.release(endVertex)\n }\n } else {\n h = k.loft(wireHandles, true, ruled)\n }\n return fromBrep(solidToShape(kernel, h as BrepHandle), { solid: h as BrepHandle })\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n throw new Error(`E_LOFT_FAILED: loft failed: ${raw}`, { cause: e })\n } finally {\n // 面→外环产出的 wire 是 arena 新句柄(曲线借用不 release)\n for (const w of wireViews) {\n if (!w.borrowed) {\n try { kernel.release(w.wrapped) } catch { /* 已释放 */ }\n }\n }\n }\n}\n\n/**\n * 放样(完整语义):按给定顺序在截面之间蒙皮生成体。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name loftAdvanced\n * @note 平台 op:仅 occt 引擎(BRepOffsetAPI_ThruSections)。截面可为 wire 或面\n * (面取其外环),至少 2 个;`startPoint` / `endPoint` 可做退化到点的蒙皮;\n * `tolerance` 控制缝合公差。非 occt 引擎执行前报错;brep_mock 不拦截。\n * 基础放样(两内核交集)用 `cad.loft`。不做 `loftAll`(数组产物)。\n * @returns Shape 放样体。\n * @param sections - 有序截面集合(wire 或面;面取其外环)。type:Shape[] required:true\n * @param opts - 放样完整配置(ruled / startPoint / endPoint / tolerance)。type:LoftAdvancedOptions required:false\n * @example\n * const bottom = cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -5, y1: -5, x2: 5, y2: -5 },\n * { kind: 'line', x1: 5, y1: -5, x2: 5, y2: 5 },\n * { kind: 'line', x1: 5, y1: 5, x2: -5, y2: 5 },\n * { kind: 'line', x1: -5, y1: 5, x2: -5, y2: -5 },\n * ] }] })\n * const top = cad.translate(cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -3, y1: -3, x2: 3, y2: -3 },\n * { kind: 'line', x1: 3, y1: -3, x2: 3, y2: 3 },\n * { kind: 'line', x1: 3, y1: 3, x2: -3, y2: 3 },\n * { kind: 'line', x1: -3, y1: 3, x2: -3, y2: -3 },\n * ] }] }), [0, 0, 20])\n * const body = await cad.loftAdvanced([bottom, top], { endPoint: [0, 0, 30] })\n */\nexport const loftAdvanced = defineOp({\n name: 'loftAdvanced',\n brep(sections: Shape[], opts?: LoftAdvancedOptions) {\n return loftAdvancedBrep(sections, opts)\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'lofted-body face vocabulary not defined' } as Provenance,\n\n paramDims: {},\n})\n"]}
|
package/dist/api/loft.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* `loftWithOptions`;差异(brepkit 只吃 face)由适配器消化,op 层只看到中立名
|
|
8
8
|
* `BrepEngineApi#loft`。
|
|
9
9
|
*
|
|
10
|
-
* ⚠️ brepkit
|
|
11
|
-
*
|
|
10
|
+
* ⚠️ brepkit 的后端对**顶点数不一致**的截面(如圆 → 方)会把所有截面重采样到
|
|
11
|
+
* 最大顶点数再蒙皮(operations/loft.rs),2026-10-14 起直接放行,不再执行前报
|
|
12
|
+
* `E_LOFT_SECTION_MISMATCH`。`startPoint`(起点退化)与
|
|
12
13
|
* `tolerance` 只有 occt 有 → 归 `cad.loftAdvanced`。
|
|
13
14
|
*/
|
|
14
15
|
import type { Shape } from '../mesh/types.js';
|
|
@@ -34,7 +35,8 @@ export interface LoftOptions {
|
|
|
34
35
|
* brepkit `loft` / `loftSmooth` / `loftWithOptions`)。截面可为 wire 或面
|
|
35
36
|
* (面取其外环),至少 2 个;`endPoint` 可做终点退化到点的蒙皮。选项集 =
|
|
36
37
|
* 两内核交集 = `{ ruled, endPoint }` —— `startPoint` 与 `tolerance` 只有 occt
|
|
37
|
-
* 有,用 `cad.loftAdvanced`。brepkit
|
|
38
|
+
* 有,用 `cad.loftAdvanced`。brepkit 链对顶点数不一致的截面(如圆 → 方)
|
|
39
|
+
* 由内核重采样兜底,直接可达。
|
|
38
40
|
* @returns Shape 放样体。
|
|
39
41
|
* @param sections - 有序截面集合(wire 或面;面取其外环)。type:Shape[] required:true
|
|
40
42
|
* @param opts - 放样配置(ruled / endPoint)。type:LoftOptions required:false
|
package/dist/api/loft.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loft.d.ts","sourceRoot":"","sources":["../../src/api/loft.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loft.d.ts","sourceRoot":"","sources":["../../src/api/loft.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAQ1C,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mBAAmB;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACnF;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,IAAI;;CAQf,CAAA"}
|
package/dist/api/loft.js
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* `loftWithOptions`;差异(brepkit 只吃 face)由适配器消化,op 层只看到中立名
|
|
8
8
|
* `BrepEngineApi#loft`。
|
|
9
9
|
*
|
|
10
|
-
* ⚠️ brepkit
|
|
11
|
-
*
|
|
10
|
+
* ⚠️ brepkit 的后端对**顶点数不一致**的截面(如圆 → 方)会把所有截面重采样到
|
|
11
|
+
* 最大顶点数再蒙皮(operations/loft.rs),2026-10-14 起直接放行,不再执行前报
|
|
12
|
+
* `E_LOFT_SECTION_MISMATCH`。`startPoint`(起点退化)与
|
|
12
13
|
* `tolerance` 只有 occt 有 → 归 `cad.loftAdvanced`。
|
|
13
14
|
*/
|
|
14
15
|
import { defineOp } from '../sdk.js';
|
|
@@ -63,7 +64,8 @@ function loftBrep(sections, opts) {
|
|
|
63
64
|
* brepkit `loft` / `loftSmooth` / `loftWithOptions`)。截面可为 wire 或面
|
|
64
65
|
* (面取其外环),至少 2 个;`endPoint` 可做终点退化到点的蒙皮。选项集 =
|
|
65
66
|
* 两内核交集 = `{ ruled, endPoint }` —— `startPoint` 与 `tolerance` 只有 occt
|
|
66
|
-
* 有,用 `cad.loftAdvanced`。brepkit
|
|
67
|
+
* 有,用 `cad.loftAdvanced`。brepkit 链对顶点数不一致的截面(如圆 → 方)
|
|
68
|
+
* 由内核重采样兜底,直接可达。
|
|
67
69
|
* @returns Shape 放样体。
|
|
68
70
|
* @param sections - 有序截面集合(wire 或面;面取其外环)。type:Shape[] required:true
|
|
69
71
|
* @param opts - 放样配置(ruled / endPoint)。type:LoftOptions required:false
|
package/dist/api/loft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loft.js","sourceRoot":"","sources":["../../src/api/loft.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"loft.js","sourceRoot":"","sources":["../../src/api/loft.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api loft — 放样(基础):多截面按序蒙皮生成体。**两内核都支持**。\n *\n * 为什么不是 occt-only(方案 2026-10-10-sweep-loft-dual-engine-plan §3 总览 / §5):\n * 基础放样(等顶点数的有序截面蒙皮)两个内核都能做 —— occt 走原生 `loft`\n * (`BRepOffsetAPI_ThruSections`),brepkit 走 `loft` / `loftSmooth` /\n * `loftWithOptions`;差异(brepkit 只吃 face)由适配器消化,op 层只看到中立名\n * `BrepEngineApi#loft`。\n *\n * ⚠️ brepkit 的后端对**顶点数不一致**的截面(如圆 → 方)会把所有截面重采样到\n * 最大顶点数再蒙皮(operations/loft.rs),2026-10-14 起直接放行,不再执行前报\n * `E_LOFT_SECTION_MISMATCH`。`startPoint`(起点退化)与\n * `tolerance` 只有 occt 有 → 归 `cad.loftAdvanced`。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { toProfileWireView } from './internal/profile-wire'\n\n/** 放样配置(基础 = 两内核交集)。 */\nexport interface LoftOptions {\n /** 直线插值(ruled)。默认 true。 */\n ruled?: boolean\n /** 终点(退化到点的蒙皮)。 */\n endPoint?: readonly [number, number, number] | { x: number; y: number; z: number }\n}\n\n/** PointInput → BrepVec3(旧 toVec3 同口径)。 */\nfunction toVec3(p: NonNullable<LoftOptions['endPoint']>): { x: number; y: number; z: number } {\n if (Array.isArray(p) && p.length >= 3) return { x: p[0]!, y: p[1]!, z: p[2]! }\n const o = p as { x: number; y: number; z: number }\n return { x: o.x, y: o.y, z: o.z }\n}\n\n/** BREP 路径:按序蒙皮各截面(wire 视图 → L1 中立名 → fromBrep 收养)。 */\nfunction loftBrep(sections: Shape[], opts?: LoftOptions): Shape {\n if (!Array.isArray(sections) || sections.length === 0) {\n throw new Error('E_LOFT_NO_SECTIONS: loft requires a non-empty array of section shapes')\n }\n // 每截面:wire 直用;面取外环(孔环不参与放样)。\n const wireViews = sections.map((s) => toProfileWireView(s))\n const { ruled = true, endPoint } = opts ?? {}\n const kernel = getBrepApi()\n try {\n const h = kernel.loft(\n wireViews.map((w) => w.wrapped),\n ruled,\n endPoint !== undefined ? toVec3(endPoint) : undefined,\n )\n return fromBrep(solidToShape(kernel, h), { solid: h })\n } catch (e) {\n const raw = e instanceof Error ? e.message : String(e)\n throw new Error(`E_LOFT_FAILED: loft failed: ${raw}`, { cause: e })\n } finally {\n // 面→外环产出的 wire 是 arena 新句柄(曲线借用不 release)\n for (const w of wireViews) {\n if (!w.borrowed) {\n try { kernel.release(w.wrapped) } catch { /* 已释放 */ }\n }\n }\n }\n}\n\n/**\n * 放样:按给定顺序在截面之间蒙皮生成体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name loft\n * @note 基础 op:**occt 与 brepkit 两内核都支持**(occt `BRepOffsetAPI_ThruSections`;\n * brepkit `loft` / `loftSmooth` / `loftWithOptions`)。截面可为 wire 或面\n * (面取其外环),至少 2 个;`endPoint` 可做终点退化到点的蒙皮。选项集 =\n * 两内核交集 = `{ ruled, endPoint }` —— `startPoint` 与 `tolerance` 只有 occt\n * 有,用 `cad.loftAdvanced`。brepkit 链对顶点数不一致的截面(如圆 → 方)\n * 由内核重采样兜底,直接可达。\n * @returns Shape 放样体。\n * @param sections - 有序截面集合(wire 或面;面取其外环)。type:Shape[] required:true\n * @param opts - 放样配置(ruled / endPoint)。type:LoftOptions required:false\n * @example\n * const bottom = cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -5, y1: -5, x2: 5, y2: -5 },\n * { kind: 'line', x1: 5, y1: -5, x2: 5, y2: 5 },\n * { kind: 'line', x1: 5, y1: 5, x2: -5, y2: 5 },\n * { kind: 'line', x1: -5, y1: 5, x2: -5, y2: -5 },\n * ] }] })\n * const top = cad.translate(cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -3, y1: -3, x2: 3, y2: -3 },\n * { kind: 'line', x1: 3, y1: -3, x2: 3, y2: 3 },\n * { kind: 'line', x1: 3, y1: 3, x2: -3, y2: 3 },\n * { kind: 'line', x1: -3, y1: 3, x2: -3, y2: -3 },\n * ] }] }), [0, 0, 20])\n * const body = await cad.loft([bottom, top])\n */\nexport const loft = defineOp({\n name: 'loft',\n brep(sections: Shape[], opts?: LoftOptions) {\n return loftBrep(sections, opts)\n },\n naming: { kind: 'unmodeled', reason: 'lofted-body face vocabulary not defined' } as Provenance,\n\n paramDims: {},\n})\n"]}
|