@faicad/faijs 0.33.2 → 0.35.8
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/entities.js +14 -4
- package/dist/api/assembly/entities.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 +54 -26
- 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 +92 -12
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/script-face-manifest.js +1 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/topology.js +1 -1
- package/dist/api/generated/topology.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/primitives.d.ts +3 -2
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +3 -2
- package/dist/api/primitives.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/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +5 -6
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +24 -5
- package/dist/api/topo-resolve.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 +328 -38
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +3 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +13 -9
- 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 +252 -20
- 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 +423 -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 +7 -5
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +16 -9
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/types.d.ts +4 -3
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.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/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +39 -12
- package/dist/primitives/brep-primitives.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/topology/naming/geom-hint.d.ts +12 -0
- package/dist/topology/naming/geom-hint.d.ts.map +1 -1
- package/dist/topology/naming/geom-hint.js +1 -1
- package/dist/topology/naming/geom-hint.js.map +1 -1
- package/dist/topology/naming/lineage.d.ts +1 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js +37 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/topology/naming/resolve-face.d.ts +13 -2
- package/dist/topology/naming/resolve-face.d.ts.map +1 -1
- package/dist/topology/naming/resolve-face.js +18 -2
- package/dist/topology/naming/resolve-face.js.map +1 -1
- 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/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":"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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
|
|
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"]}
|
package/dist/api/meta.d.ts
CHANGED
|
@@ -57,17 +57,53 @@ export interface FileMeta {
|
|
|
57
57
|
}
|
|
58
58
|
/** Shape 元数据方法签名(运行时由 attachMetaMethods 挂载;纯数据判定不受影响)。 */
|
|
59
59
|
export interface ShapeMetaMethods {
|
|
60
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* 合并 meta:`{...cur, ...spec}`,spec 中 undefined 字段保留旧值。
|
|
62
|
+
* @param spec - 待合并的元数据字段(空串 = 显式清除该字段)。
|
|
63
|
+
* @returns this(可链式调用)。
|
|
64
|
+
* @example
|
|
65
|
+
* part0.setMeta({ partNumber: 'PN-1001', designer: 'ada' })
|
|
66
|
+
*/
|
|
61
67
|
setMeta(spec: ShapeMeta): this;
|
|
62
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* 便捷:等价 setMeta({ name })(空串视为清除)。
|
|
70
|
+
* @param name - 零件名。
|
|
71
|
+
* @returns this(可链式调用)。
|
|
72
|
+
* @example
|
|
73
|
+
* part0.setName('bracket')
|
|
74
|
+
*/
|
|
63
75
|
setName(name: string): this;
|
|
64
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* 便捷:等价 setMeta({ description })(空串视为清除)。
|
|
78
|
+
* @param description - 描述文本(导出到 3MF Description / STEP FILE_DESCRIPTION)。
|
|
79
|
+
* @returns this(可链式调用)。
|
|
80
|
+
* @example
|
|
81
|
+
* part0.setDescription('left-hand bracket')
|
|
82
|
+
*/
|
|
65
83
|
setDescription(description: string): this;
|
|
66
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* 便捷:等价 setMeta({ partNumber })。
|
|
86
|
+
* @param partNumber - 零件号。
|
|
87
|
+
* @returns this(可链式调用)。
|
|
88
|
+
* @example
|
|
89
|
+
* part0.setPartNumber('PN-1001')
|
|
90
|
+
*/
|
|
67
91
|
setPartNumber(partNumber: string): this;
|
|
68
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* 便捷:等价 setMeta({ metadata: {...cur.metadata, ...kv} });值为空串的键删除。
|
|
94
|
+
* @param key - 自定义 metadata 键(3MF 带前缀名 / STEP header 其余字段)。
|
|
95
|
+
* @param value - 键值;空串删除该键。
|
|
96
|
+
* @returns this(可链式调用)。
|
|
97
|
+
* @example
|
|
98
|
+
* part0.setMetaField('Material', 'AL-6061')
|
|
99
|
+
*/
|
|
69
100
|
setMetaField(key: string, value: string): this;
|
|
70
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* 读取当前 meta(可能 undefined)。
|
|
103
|
+
* @returns 当前元数据的只读快照;从未设置过时为 `undefined`。
|
|
104
|
+
* @example
|
|
105
|
+
* const meta = part0.getMeta()
|
|
106
|
+
*/
|
|
71
107
|
getMeta(): Readonly<ShapeMeta> | undefined;
|
|
72
108
|
}
|
|
73
109
|
/**
|
package/dist/api/meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/api/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAI1C,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/api/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAI1C,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IAC9B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;;;;;;OAMG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;;;OAOG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9C;;;;;OAKG;IACH,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CAC3C;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,CAuBhF;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,gBAAgB,CA2BxE"}
|
package/dist/api/meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/api/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/api/meta.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api/meta — faijs 零件名称/描述/料号 与 整体文件元数据 权威类型与 Shape 方法\n *\n * 定位(与 api/appearance.ts 同款方法模式):\n * - 名称/描述设置**不是 op**(不进 defineOp/api-namespace/args-schema),是 Shape\n * 实例方法(`box1.setName('…')`,复用 `asm1.solve()` 的成员调用语句形态)。\n * - `ShapeMeta`(零件级)与 `FileMeta`(整体级)引擎无关、JSON 可序列化;\n * `Shape.meta` 随 Shape 走 mesh/brep 双链路,编辑器/查看器只读字段。\n * - 本文件零依赖(不 import THREE / occt / store);唯一 import 是 mesh/types\n * 的 `Shape` 类型(type-only),mesh/types 亦只 type-import 本文件的类型,\n * 两者为类型环、无运行时环(值依赖单向:shape.ts → api/meta.ts)。\n *\n * 命名约定(camelCase,faijs 全 TS/JS 生态):\n * - 零件级:`name` / `description` / `partNumber` / `metadata`(键值)。\n * - 方法:`setName` / `setDescription` / `setPartNumber` / `setMetaField` /\n * `setMeta` / `getMeta`。字段名与 3MF/STEP 规范一致(不用 note)。\n * 空串 = 清除:`setName('')` 删除 name(与「undefined 不覆盖」互补,用户可\n * 显式去掉继承来的名称)。\n */\n\nimport type { Shape } from '../mesh/types'\n\n// ── 类型 ──\n\n/** 零件级说明性元数据 —— 引擎无关、JSON 可序列化、随 Shape 走双链路。 */\nexport interface ShapeMeta {\n /** 零件名:3MF `<object name>` / STEP `PRODUCT().name`。 */\n name?: string\n /** 描述:STEP `PRODUCT.description`;3MF 写 `faijs:description` metadatagroup。 */\n description?: string\n /** 料号:3MF `<object partnumber>`;STEP `PRODUCT_IDENTIFICATION` 或 UDA。 */\n partNumber?: string\n /**\n * 自定义键值:3MF `<object><metadatagroup>`(vendor 前缀);STEP UDA。\n * 键为规范/厂商原始名(3MF 含命名空间前缀);faijs 不解释值语义,\n * 读入保留、写出回写。\n */\n metadata?: Record<string, string>\n}\n\n/**\n * 整体/文档级说明性元数据 —— 导入结果 / 导出选项,不挂 Shape。\n *\n * 不叫 `ModelMeta`:CAD 直觉里 \"model\" 偏单个零件(那是 `ShapeMeta` 的活);\n * 本类型承载整个交换文件(3MF `<model>` / STEP P21 header)的元数据,故用\n * `FileMeta`。\n */\nexport interface FileMeta {\n title?: string // 3MF Title / STEP FILE_NAME.name\n description?: string // 3MF Description / STEP FILE_DESCRIPTION.description\n designer?: string // 3MF Designer / STEP FILE_NAME.originator\n author?: string // STEP FILE_NAME.author(3MF 无对应;跨格式不互转)\n organization?: string // STEP FILE_NAME.organization(3MF 无对应)\n copyright?: string // 3MF Copyright(STEP 无标准位置)\n licenseTerms?: string // 3MF LicenseTerms(STEP 无标准位置)\n rating?: string // 3MF Rating(STEP 无标准位置)\n creationDate?: string // 3MF CreationDate / STEP FILE_NAME.timestamp\n modificationDate?: string // 3MF ModificationDate(STEP 无标准位置)\n application?: string // 3MF Application / STEP FILE_NAME.preprocessor\n /** 未知/厂商自定义 metadata 兜底(3MF model 级带前缀名;STEP header 其余字段)。 */\n metadata?: Record<string, string>\n}\n\n/** Shape 元数据方法签名(运行时由 attachMetaMethods 挂载;纯数据判定不受影响)。 */\nexport interface ShapeMetaMethods {\n /**\n * 合并 meta:`{...cur, ...spec}`,spec 中 undefined 字段保留旧值。\n * @param spec - 待合并的元数据字段(空串 = 显式清除该字段)。\n * @returns this(可链式调用)。\n * @example\n * part0.setMeta({ partNumber: 'PN-1001', designer: 'ada' })\n */\n setMeta(spec: ShapeMeta): this\n /**\n * 便捷:等价 setMeta({ name })(空串视为清除)。\n * @param name - 零件名。\n * @returns this(可链式调用)。\n * @example\n * part0.setName('bracket')\n */\n setName(name: string): this\n /**\n * 便捷:等价 setMeta({ description })(空串视为清除)。\n * @param description - 描述文本(导出到 3MF Description / STEP FILE_DESCRIPTION)。\n * @returns this(可链式调用)。\n * @example\n * part0.setDescription('left-hand bracket')\n */\n setDescription(description: string): this\n /**\n * 便捷:等价 setMeta({ partNumber })。\n * @param partNumber - 零件号。\n * @returns this(可链式调用)。\n * @example\n * part0.setPartNumber('PN-1001')\n */\n setPartNumber(partNumber: string): this\n /**\n * 便捷:等价 setMeta({ metadata: {...cur.metadata, ...kv} });值为空串的键删除。\n * @param key - 自定义 metadata 键(3MF 带前缀名 / STEP header 其余字段)。\n * @param value - 键值;空串删除该键。\n * @returns this(可链式调用)。\n * @example\n * part0.setMetaField('Material', 'AL-6061')\n */\n setMetaField(key: string, value: string): this\n /**\n * 读取当前 meta(可能 undefined)。\n * @returns 当前元数据的只读快照;从未设置过时为 `undefined`。\n * @example\n * const meta = part0.getMeta()\n */\n getMeta(): Readonly<ShapeMeta> | undefined\n}\n\n// ── 合并 ──\n\n/**\n * 合并零件级元数据:spec 中 undefined 字段不覆盖旧值;空串覆盖为清除。\n * @param cur 当前 meta(可为 undefined)\n * @param spec 待合并字段(undefined 字段跳过;'' 显式清除)\n * @returns 合并后的 meta(新对象;cur 为 undefined 时仅含 spec 非空字段)\n */\nexport function mergeMeta(cur: ShapeMeta | undefined, spec: ShapeMeta): ShapeMeta {\n const clean: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(spec)) {\n if (v === undefined) continue\n if (k === 'metadata' && v && typeof v === 'object') {\n // 键值子合并:保留旧 metadata 的未覆盖键。\n const base: Record<string, string> = { ...((cur?.metadata as Record<string, string> | undefined) ?? {}) }\n for (const [kk, vv] of Object.entries(v as Record<string, string>)) {\n if (vv === '') delete base[kk] // 空串清除该键\n else base[kk] = vv\n }\n clean[k] = base\n continue\n }\n if (v === '') clean[k] = undefined as unknown as string // 空串清除顶层字段\n else clean[k] = v\n }\n const merged = { ...(cur ?? {}), ...clean } as ShapeMeta\n // 清理合并后为 undefined 的顶层键(空串清除写入 undefined)。\n for (const k of Object.keys(merged)) {\n if ((merged as Record<string, unknown>)[k] === undefined) delete (merged as Record<string, unknown>)[k]\n }\n return merged\n}\n\n// ── Shape 方法挂载 ──\n\n/**\n * 给 Shape 实例挂载元数据方法(幂等:已有 setMeta 则跳过)。\n *\n * 所有产物构造点(solid/curve → fromBrep/fromMeshSolid/fromBrepCurve)统一\n * 调用本函数,保证 mesh/brep 双支路产物都可用 `box1.setName(...)`。\n * 方法**不序列化**(JSON 丢弃函数);`meta` 字段随产物跨打印,编辑器/\n * 查看器只读字段即可,不依赖方法。\n * @param shape 产物 Shape 实例(solid/curve 产物)\n * @returns 挂载后的 shape(类型提升为 `Shape & ShapeMetaMethods`;同一实例原地挂载)\n */\nexport function attachMetaMethods(shape: Shape): Shape & ShapeMetaMethods {\n const s = shape as Shape & ShapeMetaMethods\n if (typeof s.setMeta === 'function') return s\n s.setMeta = function setMeta(this: Shape & ShapeMetaMethods, spec: ShapeMeta) {\n this.meta = mergeMeta(this.meta, spec)\n return this\n }\n s.setName = function setName(this: Shape & ShapeMetaMethods, name: string) {\n this.meta = mergeMeta(this.meta, { name })\n return this\n }\n s.setDescription = function setDescription(this: Shape & ShapeMetaMethods, description: string) {\n this.meta = mergeMeta(this.meta, { description })\n return this\n }\n s.setPartNumber = function setPartNumber(this: Shape & ShapeMetaMethods, partNumber: string) {\n this.meta = mergeMeta(this.meta, { partNumber })\n return this\n }\n s.setMetaField = function setMetaField(this: Shape & ShapeMetaMethods, key: string, value: string) {\n this.meta = mergeMeta(this.meta, { metadata: { [key]: value } })\n return this\n }\n s.getMeta = function getMeta(this: Shape) {\n return this.meta\n }\n return s\n}"]}
|
package/dist/api/primitives.d.ts
CHANGED
|
@@ -52,17 +52,18 @@ export declare function assertWedgeParams(params: Record<string, unknown>): void
|
|
|
52
52
|
* @param params.width - X 方向边长(mm)。type:number required:true
|
|
53
53
|
* @param params.depth - Y 方向边长(mm)。type:number required:true
|
|
54
54
|
* @param params.height - Z 方向边长(mm)。type:number required:true
|
|
55
|
-
* @param params.at -
|
|
55
|
+
* @param params.at - 底面中心(BASE 语义,与 cylinder/cone 一致;与 centered 同给时以 at 为中心)。type:[x,y,z] 可选
|
|
56
56
|
* @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。
|
|
57
57
|
* @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)
|
|
58
58
|
* @example
|
|
59
59
|
* const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)
|
|
60
|
-
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [
|
|
60
|
+
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [15 * MM, 10 * MM, 0], segments: 64 })
|
|
61
61
|
*
|
|
62
62
|
* 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`
|
|
63
63
|
* 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。
|
|
64
64
|
* 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),
|
|
65
65
|
* 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。
|
|
66
|
+
* 锚点(2026-10-16 统一 BASE):默认角点在原点、底面贴地,`box(w, d, h)` ≡ `box(w, d, h, { at: [w/2, d/2, 0] })`。
|
|
66
67
|
*/
|
|
67
68
|
export declare const box: ((params: Record<string, unknown>) => Promise<Shape>) & {
|
|
68
69
|
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAkB1C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvE;AA4HD
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAkB1C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvE;AA4HD;;;;;;;;;;;;;;;;;;;;;;;KAuBK;AACL,eAAO,MAAM,GAAG;;CAwBd,CAAA;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM;;CAgBjB,CAAA;AAWF;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,eAAO,MAAM,QAAQ;;CAgBnB,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,eAAO,MAAM,IAAI;;CAuBf,CAAA;AAEF;;;;;;;;;;;;;;;;IAgBI;AACJ,eAAO,MAAM,KAAK;;CAchB,CAAA"}
|
package/dist/api/primitives.js
CHANGED
|
@@ -223,17 +223,18 @@ function brepPrimitiveMesh(kernel, solid, op, segments) {
|
|
|
223
223
|
* @param params.width - X 方向边长(mm)。type:number required:true
|
|
224
224
|
* @param params.depth - Y 方向边长(mm)。type:number required:true
|
|
225
225
|
* @param params.height - Z 方向边长(mm)。type:number required:true
|
|
226
|
-
* @param params.at -
|
|
226
|
+
* @param params.at - 底面中心(BASE 语义,与 cylinder/cone 一致;与 centered 同给时以 at 为中心)。type:[x,y,z] 可选
|
|
227
227
|
* @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。
|
|
228
228
|
* @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)
|
|
229
229
|
* @example
|
|
230
230
|
* const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)
|
|
231
|
-
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [
|
|
231
|
+
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [15 * MM, 10 * MM, 0], segments: 64 })
|
|
232
232
|
*
|
|
233
233
|
* 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`
|
|
234
234
|
* 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。
|
|
235
235
|
* 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),
|
|
236
236
|
* 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。
|
|
237
|
+
* 锚点(2026-10-16 统一 BASE):默认角点在原点、底面贴地,`box(w, d, h)` ≡ `box(w, d, h, { at: [w/2, d/2, 0] })`。
|
|
237
238
|
*/
|
|
238
239
|
export const box = defineOp({
|
|
239
240
|
name: 'box',
|