@faicad/faijs 0.19.0 → 0.29.3
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/LICENSE +202 -28
- package/dist/api/api-namespace.d.ts +5 -5
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +4 -4
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/assert.d.ts +2 -2
- package/dist/api/assert.js +8 -8
- package/dist/api/assert.js.map +1 -1
- package/dist/api/asset.d.ts +1 -1
- package/dist/api/asset.js +2 -2
- package/dist/api/asset.js.map +1 -1
- package/dist/api/boolean.d.ts +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +128 -16
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/brep-mirror/joinery-brep.d.ts.map +1 -1
- package/dist/api/brep-mirror/joinery-brep.js +3 -1
- package/dist/api/brep-mirror/joinery-brep.js.map +1 -1
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
- package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
- package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
- package/dist/api/cadquery-selectors/edge.d.ts +40 -0
- package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/edge.js +70 -0
- package/dist/api/cadquery-selectors/edge.js.map +1 -0
- package/dist/api/cadquery-selectors/entity.d.ts +121 -0
- package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/entity.js +167 -0
- package/dist/api/cadquery-selectors/entity.js.map +1 -0
- package/dist/api/cadquery-selectors/face.d.ts +33 -0
- package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/face.js +353 -0
- package/dist/api/cadquery-selectors/face.js.map +1 -0
- package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
- package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/grammar.js +345 -0
- package/dist/api/cadquery-selectors/grammar.js.map +1 -0
- package/dist/api/cadquery-selectors/index.d.ts +18 -0
- package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/index.js +17 -0
- package/dist/api/cadquery-selectors/index.js.map +1 -0
- package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
- package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/predicates.js +85 -0
- package/dist/api/cadquery-selectors/predicates.js.map +1 -0
- package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
- package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/resolve.js +243 -0
- package/dist/api/cadquery-selectors/resolve.js.map +1 -0
- package/dist/api/cadquery-selectors/types.d.ts +96 -0
- package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
- package/dist/api/cadquery-selectors/types.js +11 -0
- package/dist/api/cadquery-selectors/types.js.map +1 -0
- package/dist/api/chamfer.d.ts +13 -5
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +63 -7
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/compound-geom.d.ts +1 -1
- package/dist/api/compound-geom.js +1 -1
- package/dist/api/compound-geom.js.map +1 -1
- package/dist/api/draft.d.ts +1 -1
- package/dist/api/draft.js +1 -1
- package/dist/api/draft.js.map +1 -1
- package/dist/api/edge-ref.d.ts +1 -1
- package/dist/api/edge-ref.d.ts.map +1 -1
- package/dist/api/edge-ref.js +11 -3
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.d.ts +1 -1
- package/dist/api/engrave.js +7 -7
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts +6 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +59 -5
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts +1 -1
- package/dist/api/face-ref.js +1 -1
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/feature-repair.d.ts +1 -1
- package/dist/api/feature-repair.js +1 -1
- package/dist/api/feature-repair.js.map +1 -1
- package/dist/api/fillet-variable.d.ts +1 -1
- package/dist/api/fillet-variable.js +1 -1
- package/dist/api/fillet-variable.js.map +1 -1
- package/dist/api/fillet.d.ts +28 -8
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +64 -9
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts +4 -0
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/geom.d.ts +1 -1
- package/dist/api/geom.js +1 -1
- package/dist/api/geom.js.map +1 -1
- package/dist/api/helix.d.ts +1 -1
- package/dist/api/helix.js +1 -1
- package/dist/api/helix.js.map +1 -1
- package/dist/api/import-brep.d.ts +20 -2
- package/dist/api/import-brep.d.ts.map +1 -1
- package/dist/api/import-brep.js +28 -3
- package/dist/api/import-brep.js.map +1 -1
- package/dist/api/import-step.d.ts +17 -2
- package/dist/api/import-step.d.ts.map +1 -1
- package/dist/api/import-step.js +23 -3
- package/dist/api/import-step.js.map +1 -1
- package/dist/api/index.d.ts +2 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +5 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.js +1 -1
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/mesh-solid-op.d.ts +236 -0
- package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
- package/dist/api/internal/mesh-solid-op.js +352 -0
- package/dist/api/internal/mesh-solid-op.js.map +1 -0
- package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
- package/dist/api/internal/svg-asset-resolver.js +1 -1
- package/dist/api/internal/svg-asset-resolver.js.map +1 -1
- package/dist/api/knurl.d.ts +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +3 -2
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/loft.d.ts +1 -1
- package/dist/api/loft.js +1 -1
- package/dist/api/loft.js.map +1 -1
- package/dist/api/measurement/index.d.ts +9 -5
- package/dist/api/measurement/index.d.ts.map +1 -1
- package/dist/api/measurement/index.js +47 -20
- package/dist/api/measurement/index.js.map +1 -1
- package/dist/api/pattern.d.ts +5 -3
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +32 -4
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/place.d.ts +1 -1
- package/dist/api/place.js +1 -1
- package/dist/api/place.js.map +1 -1
- package/dist/api/primitives.d.ts +5 -4
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +11 -5
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/profile.d.ts +64 -8
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +61 -10
- package/dist/api/profile.js.map +1 -1
- package/dist/api/punch-hole.d.ts +3 -0
- package/dist/api/punch-hole.d.ts.map +1 -1
- package/dist/api/punch-hole.js.map +1 -1
- package/dist/api/reconcile.d.ts +1 -1
- package/dist/api/reconcile.js +1 -1
- package/dist/api/reconcile.js.map +1 -1
- package/dist/api/replicate.d.ts.map +1 -1
- package/dist/api/replicate.js +122 -1
- package/dist/api/replicate.js.map +1 -1
- package/dist/api/screw.d.ts +1 -1
- package/dist/api/screw.js +3 -3
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts +1 -1
- package/dist/api/sdf.js +2 -2
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/section-by-plane.d.ts +1 -1
- package/dist/api/section-by-plane.d.ts.map +1 -1
- package/dist/api/section-by-plane.js +2 -1
- package/dist/api/section-by-plane.js.map +1 -1
- package/dist/api/shell.d.ts +11 -4
- package/dist/api/shell.d.ts.map +1 -1
- package/dist/api/shell.js +53 -7
- package/dist/api/shell.js.map +1 -1
- package/dist/api/sketch-on-face.d.ts +41 -0
- package/dist/api/sketch-on-face.d.ts.map +1 -1
- package/dist/api/sketch-on-face.js +100 -1
- package/dist/api/sketch-on-face.js.map +1 -1
- package/dist/api/sketch-on-plane.d.ts +17 -9
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +12 -10
- package/dist/api/sketch-on-plane.js.map +1 -1
- package/dist/api/split-by-plane.d.ts +1 -1
- package/dist/api/split-by-plane.d.ts.map +1 -1
- package/dist/api/split-by-plane.js +2 -1
- package/dist/api/split-by-plane.js.map +1 -1
- package/dist/api/split.d.ts +1 -1
- package/dist/api/split.js +2 -2
- package/dist/api/split.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts +8 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/sweep.d.ts +1 -1
- package/dist/api/sweep.js +1 -1
- package/dist/api/sweep.js.map +1 -1
- package/dist/api/thicken.d.ts +1 -1
- package/dist/api/thicken.js +1 -1
- package/dist/api/thicken.js.map +1 -1
- package/dist/api/topo-resolve.d.ts +74 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +180 -2
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/transform.d.ts +10 -6
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +74 -21
- package/dist/api/transform.js.map +1 -1
- package/dist/api/wire.d.ts +1 -1
- package/dist/api/wire.js +1 -1
- package/dist/api/wire.js.map +1 -1
- package/dist/api/xml-dom.d.ts +27 -0
- package/dist/api/xml-dom.d.ts.map +1 -0
- package/dist/api/xml-dom.js +45 -0
- package/dist/api/xml-dom.js.map +1 -0
- package/dist/brep/brep-ops.d.ts +13 -11
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +31 -30
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/brep-topology.d.ts +5 -4
- package/dist/brep/brep-topology.d.ts.map +1 -1
- package/dist/brep/brep-topology.js +9 -6
- package/dist/brep/brep-topology.js.map +1 -1
- package/dist/brep/effective-deflection.d.ts +35 -0
- package/dist/brep/effective-deflection.d.ts.map +1 -0
- package/dist/brep/effective-deflection.js +49 -0
- package/dist/brep/effective-deflection.js.map +1 -0
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +27 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +46 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -1
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +3 -1
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +29 -7
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/registry.d.ts +24 -1
- package/dist/brep/engine/registry.d.ts.map +1 -1
- package/dist/brep/engine/registry.js +24 -0
- package/dist/brep/engine/registry.js.map +1 -1
- package/dist/brep/engine/types.d.ts +54 -3
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js +10 -0
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/export-model.d.ts +79 -0
- package/dist/brep/export/export-model.d.ts.map +1 -0
- package/dist/brep/export/export-model.js +336 -0
- package/dist/brep/export/export-model.js.map +1 -0
- package/dist/brep/face-evolution.d.ts +1 -1
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +20 -1
- package/dist/brep/face-evolution.js.map +1 -1
- package/dist/brep/handle-bridge.d.ts +1 -1
- package/dist/brep/handle-bridge.js +1 -1
- package/dist/brep/handle-bridge.js.map +1 -1
- package/dist/brep/mesh-solid.d.ts +218 -0
- package/dist/brep/mesh-solid.d.ts.map +1 -0
- package/dist/brep/mesh-solid.js +229 -0
- package/dist/brep/mesh-solid.js.map +1 -0
- package/dist/brep/primitives-brep.d.ts.map +1 -1
- package/dist/brep/primitives-brep.js +3 -1
- package/dist/brep/primitives-brep.js.map +1 -1
- package/dist/brep/text/fontRegistry.d.ts +32 -1
- package/dist/brep/text/fontRegistry.d.ts.map +1 -1
- package/dist/brep/text/fontRegistry.js +51 -1
- package/dist/brep/text/fontRegistry.js.map +1 -1
- package/dist/brep/text/text-to-solid.d.ts.map +1 -1
- package/dist/brep/text/text-to-solid.js +8 -3
- package/dist/brep/text/text-to-solid.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +453 -125
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +10 -0
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/browser-host/browser-font-provider.d.ts +12 -0
- package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
- package/dist/browser-host/browser-font-provider.js +25 -0
- package/dist/browser-host/browser-font-provider.js.map +1 -1
- package/dist/browser.d.ts +6 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +10 -3
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +119 -4
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts +19 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +49 -1
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +3 -3
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/preview-exec.d.ts +4 -4
- package/dist/cad-runtime/preview-exec.js +2 -2
- package/dist/cad-runtime/preview-exec.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +66 -8
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +121 -8
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +37 -1
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +25 -1
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +7 -7
- package/dist/env-agnostic.d.ts.map +1 -1
- package/dist/env-agnostic.js +3 -3
- package/dist/env-agnostic.js.map +1 -1
- package/dist/geometry2d/adapt.d.ts +39 -4
- package/dist/geometry2d/adapt.d.ts.map +1 -1
- package/dist/geometry2d/adapt.js +14 -3
- package/dist/geometry2d/adapt.js.map +1 -1
- package/dist/geometry2d/blueprint.d.ts +2 -2
- package/dist/geometry2d/blueprint.js +2 -2
- package/dist/geometry2d/blueprint.js.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
- package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/lift-on-plane.js +71 -12
- package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
- package/dist/geometry2d/bridge/plane.d.ts +17 -0
- package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
- package/dist/geometry2d/bridge/plane.js +22 -0
- package/dist/geometry2d/bridge/plane.js.map +1 -1
- package/dist/geometry2d/curve2d.d.ts +25 -0
- package/dist/geometry2d/curve2d.d.ts.map +1 -1
- package/dist/geometry2d/curve2d.js +41 -5
- package/dist/geometry2d/curve2d.js.map +1 -1
- package/dist/geometry2d/pen-sketcher.d.ts +25 -0
- package/dist/geometry2d/pen-sketcher.d.ts.map +1 -1
- package/dist/geometry2d/pen-sketcher.js +43 -0
- package/dist/geometry2d/pen-sketcher.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/io/bytes-node.d.ts +11 -0
- package/dist/io/bytes-node.d.ts.map +1 -0
- package/dist/io/bytes-node.js +28 -0
- package/dist/io/bytes-node.js.map +1 -0
- package/dist/io/bytes.d.ts +33 -0
- package/dist/io/bytes.d.ts.map +1 -0
- package/dist/io/bytes.js +41 -0
- package/dist/io/bytes.js.map +1 -0
- package/dist/io/fai-zip/container-read.d.ts +102 -0
- package/dist/io/fai-zip/container-read.d.ts.map +1 -0
- package/dist/io/fai-zip/container-read.js +305 -0
- package/dist/io/fai-zip/container-read.js.map +1 -0
- package/dist/io/fai-zip/container-write.d.ts +70 -0
- package/dist/io/fai-zip/container-write.d.ts.map +1 -0
- package/dist/io/fai-zip/container-write.js +186 -0
- package/dist/io/fai-zip/container-write.js.map +1 -0
- package/dist/io/fai-zip/container.d.ts +107 -0
- package/dist/io/fai-zip/container.d.ts.map +1 -0
- package/dist/io/fai-zip/container.js +89 -0
- package/dist/io/fai-zip/container.js.map +1 -0
- package/dist/io/fai-zip/index.d.ts +18 -0
- package/dist/io/fai-zip/index.d.ts.map +1 -0
- package/dist/io/fai-zip/index.js +4 -0
- package/dist/io/fai-zip/index.js.map +1 -0
- package/dist/io/index.d.ts +10 -0
- package/dist/io/index.d.ts.map +1 -0
- package/dist/io/index.js +13 -0
- package/dist/io/index.js.map +1 -0
- package/dist/io/zip.d.ts +68 -0
- package/dist/io/zip.d.ts.map +1 -0
- package/dist/io/zip.js +147 -0
- package/dist/io/zip.js.map +1 -0
- package/dist/lang/code-to-args.d.ts +30 -4
- package/dist/lang/code-to-args.d.ts.map +1 -1
- package/dist/lang/code-to-args.js +42 -3
- package/dist/lang/code-to-args.js.map +1 -1
- package/dist/lang/codegen.d.ts +45 -1
- package/dist/lang/codegen.d.ts.map +1 -1
- package/dist/lang/codegen.js +135 -6
- package/dist/lang/codegen.js.map +1 -1
- package/dist/lang/host-arg.d.ts +6 -0
- package/dist/lang/host-arg.d.ts.map +1 -1
- package/dist/lang/host-arg.js.map +1 -1
- package/dist/lang/metadata-extractor.d.ts +25 -0
- package/dist/lang/metadata-extractor.d.ts.map +1 -1
- package/dist/lang/metadata-extractor.js +289 -25
- package/dist/lang/metadata-extractor.js.map +1 -1
- package/dist/lang/parse-error.d.ts +7 -1
- package/dist/lang/parse-error.d.ts.map +1 -1
- package/dist/lang/parse-error.js.map +1 -1
- package/dist/lang/security-scanner.d.ts +9 -1
- package/dist/lang/security-scanner.d.ts.map +1 -1
- package/dist/lang/security-scanner.js +38 -1
- package/dist/lang/security-scanner.js.map +1 -1
- package/dist/lang/statement-summary.d.ts +1 -1
- package/dist/lang/statement-summary.js +1 -1
- package/dist/lang/statement-summary.js.map +1 -1
- package/dist/lang/types.d.ts +1 -1
- package/dist/lang/types.js +1 -1
- package/dist/lang/types.js.map +1 -1
- package/dist/mesh/index.d.ts +2 -1
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +2 -1
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +69 -9
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +121 -17
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/reconcile.d.ts +1 -1
- package/dist/mesh/reconcile.js +1 -1
- package/dist/mesh/reconcile.js.map +1 -1
- package/dist/mesh/rigid-transform.d.ts +3 -3
- package/dist/mesh/rigid-transform.js +3 -3
- package/dist/mesh/rigid-transform.js.map +1 -1
- package/dist/mesh/stl-unit.d.ts +24 -0
- package/dist/mesh/stl-unit.d.ts.map +1 -0
- package/dist/mesh/stl-unit.js +17 -0
- package/dist/mesh/stl-unit.js.map +1 -0
- package/dist/mesh/threemf-bambu.d.ts +142 -0
- package/dist/mesh/threemf-bambu.d.ts.map +1 -0
- package/dist/mesh/threemf-bambu.js +334 -0
- package/dist/mesh/threemf-bambu.js.map +1 -0
- package/dist/mesh/threemf-loader.d.ts +50 -0
- package/dist/mesh/threemf-loader.d.ts.map +1 -0
- package/dist/mesh/threemf-loader.js +628 -0
- package/dist/mesh/threemf-loader.js.map +1 -0
- package/dist/mesh/threemf-view.d.ts +71 -0
- package/dist/mesh/threemf-view.d.ts.map +1 -0
- package/dist/mesh/threemf-view.js +100 -0
- package/dist/mesh/threemf-view.js.map +1 -0
- package/dist/mesh/transform.d.ts +2 -2
- package/dist/mesh/transform.d.ts.map +1 -1
- package/dist/mesh/transform.js +3 -3
- package/dist/mesh/transform.js.map +1 -1
- package/dist/mesh/types.d.ts +1 -1
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/node-host/cli.d.ts +44 -6
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +127 -50
- package/dist/node-host/cli.js.map +1 -1
- package/dist/node-host/font-family-index.d.ts +93 -0
- package/dist/node-host/font-family-index.d.ts.map +1 -0
- package/dist/node-host/font-family-index.js +273 -0
- package/dist/node-host/font-family-index.js.map +1 -0
- package/dist/node-host/fs-asset-resolver.d.ts +8 -3
- package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
- package/dist/node-host/fs-asset-resolver.js +13 -5
- package/dist/node-host/fs-asset-resolver.js.map +1 -1
- package/dist/node-host/index.d.ts +8 -0
- package/dist/node-host/index.d.ts.map +1 -1
- package/dist/node-host/index.js +1 -0
- package/dist/node-host/index.js.map +1 -1
- package/dist/node-host/node-font-provider.d.ts +28 -0
- package/dist/node-host/node-font-provider.d.ts.map +1 -1
- package/dist/node-host/node-font-provider.js +49 -0
- package/dist/node-host/node-font-provider.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -0
- package/dist/node.js.map +1 -1
- package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
- package/dist/occt-kernel/occt-primitives.js +35 -2
- package/dist/occt-kernel/occt-primitives.js.map +1 -1
- package/dist/occt-kernel/occtKernel.d.ts +18 -13
- package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
- package/dist/occt-kernel/occtKernel.js +20 -31
- package/dist/occt-kernel/occtKernel.js.map +1 -1
- package/dist/occt-kernel/stepColorParser.d.ts +18 -0
- package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
- package/dist/occt-kernel/stepColorParser.js +38 -0
- package/dist/occt-kernel/stepColorParser.js.map +1 -1
- package/dist/occt-kernel/topologyExt.d.ts +1 -1
- package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
- package/dist/occt-kernel/topologyExt.js +8 -6
- package/dist/occt-kernel/topologyExt.js.map +1 -1
- package/dist/primitives/text/cjk-font.d.ts +2 -15
- package/dist/primitives/text/cjk-font.d.ts.map +1 -1
- package/dist/primitives/text/cjk-font.js +13 -1
- package/dist/primitives/text/cjk-font.js.map +1 -1
- package/dist/runtime-state.d.ts +103 -9
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +95 -2
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +4 -4
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +6 -6
- package/dist/sdk.js.map +1 -1
- package/dist/shape.d.ts +97 -2
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +126 -1
- package/dist/shape.js.map +1 -1
- package/dist/tolerance.d.ts +38 -0
- package/dist/tolerance.d.ts.map +1 -0
- package/dist/tolerance.js +40 -0
- package/dist/tolerance.js.map +1 -0
- package/dist/topology/naming/lineage.d.ts +6 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js +8 -0
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/topology/naming/resolve-edge.d.ts +20 -1
- package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
- package/dist/topology/naming/resolve-edge.js +54 -20
- package/dist/topology/naming/resolve-edge.js.map +1 -1
- package/dist/topology/naming/score.js +3 -3
- package/dist/topology/naming/score.js.map +1 -1
- package/dist/units.d.ts +248 -0
- package/dist/units.d.ts.map +1 -0
- package/dist/units.js +397 -0
- package/dist/units.js.map +1 -0
- package/dist/weapp.d.ts +6 -2
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +7 -1
- package/dist/weapp.js.map +1 -1
- package/package.json +28 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/cad-runtime/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG","sourcesContent":["/**\n * Ports 接口定义 — Host 注入的环境能力\n *\n *\n * L2 CadRuntime 通过这些接口获取所有环境能力(CSG 计算、SDF 求值、字体、纹理、资产、事件)。\n * 不直接 import 任何 ?worker、window、document、zustand store——这些由 Host 实现。\n *\n * 两个宿主各自实现:\n * - browser host: WorkerCsgBackend / WorkerSdfBackend / BrowserFontProvider / ...\n * - node host (P3): InlineCsgBackend / InlineSdfBackend / NodeFontProvider / ...\n */\n\nimport type { PartName } from '../identity'\nimport type {
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/cad-runtime/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG","sourcesContent":["/**\n * Ports 接口定义 — Host 注入的环境能力\n *\n *\n * L2 CadRuntime 通过这些接口获取所有环境能力(CSG 计算、SDF 求值、字体、纹理、资产、事件)。\n * 不直接 import 任何 ?worker、window、document、zustand store——这些由 Host 实现。\n *\n * 两个宿主各自实现:\n * - browser host: WorkerCsgBackend / WorkerSdfBackend / BrowserFontProvider / ...\n * - node host (P3): InlineCsgBackend / InlineSdfBackend / NodeFontProvider / ...\n */\n\nimport type { PartName } from '../identity'\nimport type { LibNamespace } from '../runtime-state'\n\n// ── 共享类型 ──\n\n/** 网格数据(与 csg.ts ManifoldMeshData 同构) */\nexport interface MeshData {\n positions: Float32Array\n indices: Uint32Array\n}\n\n/** 平面参数 */\nexport interface PlaneParams {\n normal: [number, number, number]\n offset: number\n}\n\n// Re-export joinery param types from boolean/geo-convert to ensure\n// structural identity across CsgBackend interface and implementations.\nexport type {\n DovetailGrooveParams,\n DowelSplitParams,\n StraightTenonSplitParams,\n} from '../boolean/geo-convert'\nimport type {\n DovetailGrooveParams,\n DowelSplitParams,\n StraightTenonSplitParams,\n} from '../boolean/geo-convert'\n\n/** 分割结果 */\nexport interface SplitResult {\n front: MeshData\n back: MeshData\n wedge: MeshData | null\n}\n\n// ── CsgBackend ──\n\n/**\n * CSG 后端接口 — mesh 路径的布尔/分割操作。\n *\n * browser 实现:WorkerCsgBackend(经 csg-worker postMessage)\n * node 实现 (P3):InlineCsgBackend(主线程直跑 manifold-3d)\n */\nexport interface CsgBackend {\n boolean(op: 'union' | 'subtract' | 'intersect', meshes: MeshData[]): Promise<MeshData>\n splitPlane(mesh: MeshData, plane: PlaneParams): Promise<{ front: MeshData; back: MeshData }>\n splitDovetail(\n mesh: MeshData,\n params: {\n planeNormal: [number, number, number]\n planeDistance: number\n planeCenter: [number, number, number]\n widthDir: [number, number, number]\n bboxWidthOnWidthDir: number\n groove: DovetailGrooveParams\n },\n ): Promise<SplitResult>\n splitDowel(\n mesh: MeshData,\n params: {\n planeNormal: [number, number, number]\n planeDistance: number\n planeCenter: [number, number, number]\n widthDir: [number, number, number]\n dowel: DowelSplitParams\n selectedSections?: number[] | null\n },\n ): Promise<SplitResult>\n splitStraightTenon(\n mesh: MeshData,\n params: {\n planeNormal: [number, number, number]\n planeDistance: number\n planeCenter: [number, number, number]\n widthDir: [number, number, number]\n tenon: StraightTenonSplitParams\n selectedSections?: number[] | null\n },\n ): Promise<SplitResult>\n}\n\n// ── SdfBackend ──\n\n/**\n * SDF 后端接口 — SDF 求值。\n *\n * browser 实现:WorkerSdfBackend(经 sdf-worker postMessage)\n * node 实现 (P3):InlineSdfBackend(主线程直跑)\n */\nexport interface SdfBackend {\n runSdf(\n code: string,\n params: Record<string, number>,\n bounds: [number, number, number, number, number, number],\n edgeLength: number,\n level?: number,\n tolerance?: number,\n ): Promise<MeshData>\n}\n\n// ── FontProvider ──\n\n/**\n * 字体提供者接口。\n *\n * browser 实现:BrowserFontProvider(?url + fetch + fontRegistry DI)\n * node 实现 (P3):NodeFontProvider(fs 字体加载)\n */\nexport interface FontProvider {\n /** 加载字体字节(按 key/path),返回 ArrayBuffer */\n loadFont(key: string): Promise<ArrayBuffer>\n /** 列出可用字体 key(node 端为资产目录,browser 端为注册表) */\n listFonts(): string[]\n}\n\n// ── TextureSampler ──\n\n/**\n * 纹理采样接口 — knurl 纹理。\n *\n * browser 实现:CanvasTextureSampler(Image + canvas)\n * node 实现 (P3):纯数据解码\n */\nexport interface TextureSampler {\n /** 采样纹理在 (u, v) 处的值 [0,1] */\n sample(u: number, v: number): number\n /** 纹理尺寸 */\n readonly width: number\n readonly height: number\n}\n\n// ── AssetResolver ──\n\n/**\n * 资产解析接口 — load* 操作的字节来源。\n *\n * browser 实现:FaicadAssetResolver(faicad 会话缓存)\n * node 实现 (P3):FsAssetResolver(--assets 目录/manifest)\n */\nexport interface AssetResolver {\n /** loadByKey 的 headless 等价物 */\n resolveByKey(key: string): Promise<{ bytes: ArrayBuffer; format?: string }>\n /** 本地文件路径(browser 下抛错) */\n resolveFile(path: string): Promise<ArrayBuffer>\n /** 网络 URL(两环境通用) */\n resolveUrl(url: string): Promise<ArrayBuffer>\n}\n\n// ── EventSink ──\n\n/**\n * 事件通知接口 — BREP 丢失等事件。\n *\n * browser 实现:BrowserEventSink(window.dispatchEvent → toast)\n * node 实现 (P3):CliEventSink(写入 stderr + 收集到 events 数组)\n */\nexport interface EventSink {\n emit(event: 'part-brep-lost', detail: { partName: PartName; callee: string; reason: string }): void\n}\n\n// ── LibLoader ──\n\n/**\n * 库加载器接口 — 按 packageName 自动装载未注册的第三方库。\n *\n * 宿主实现:\n * - node CLI(createNodePorts):白名单 + Node 原生 `import(name)`(monorepo\n * workspace symlink 直接把裸包解析到包源码)。\n * - browser / demo:静态 `LIB_MODULES` 映射表(value 必须是静态字面量\n * specifier,Vite/Rollup 才能静态分析打包;禁止变量传参的 import(name))。\n * - vitest:复用浏览器映射表写法 + `await import('@faicad/…')`(alias 落位活源码)。\n */\nexport interface LibLoader {\n /** 按 packageName 加载库模块,返回其导出命名空间对象(与 registerLib 的 ns 同形)。 */\n loadLib(packageName: string): Promise<LibNamespace>\n /** 列出当前可加载的 packageName(check 阶段同步校验 import specifier 用)。 */\n listLibs(): string[]\n /** 自动装载的注册选项;缺省由推断式决定(有 dual-op 的库不提升,全裸函数库自动提升,与手动注入一致)。 */\n options?: {\n autoLift?: boolean\n /**\n * 按 packageName 的逐库 `autoLift` 覆盖(优先于 `options.autoLift`)。\n * 返回 `undefined` 时回落到全局选项 / 推断式。用于别名库:如 cq-compat 在\n * 浏览器 host 被全局 autoLift 提升后,compat 边界的 borrowDeep 会把实参里的\n * faijs Shape 替换成 brepjs 借用视图,破坏其内部「以 Shape 受众」的借面逻辑\n * (原 CLI 即按 autoLift=false 运行)。逐库关掉提升恢复 CLI 等价行为。\n */\n autoLiftFor?: (packageName: string) => boolean | undefined\n }\n /**\n * 可选源码扫描钩子(§6.2 ②):宿主返回库源码时走同一 SecurityScanner(A4,固定 strict);\n * 不提供或返回 undefined 则跳过。不改 loadLib 返回值——返回 LibNamespace,\n * 往里挂 source 会被 admitCompatLib 当成导出值并污染命名空间。\n * @param packageName - the npm package name.\n * @returns the library source text if available, otherwise undefined.\n */\n loadSource?(packageName: string): Promise<string | undefined>\n}\n\n// ── ProjectLoader ──\n\n/**\n * 项目文件加载器(多文件,§4.5)——按 moduleKey 读取/枚举项目内 .fai.js 模块源码。\n *\n * moduleKey 约定:host 决定字符串形态(项目根相对路径等);引擎只做最小归一\n * (POSIX 斜杠、去掉 `./`/`../`/前导 `/` 前缀),随后按 `listModules()` 精确匹配。\n *\n * host 实现:\n * - 3d_editor / browser:项目文件表 + session 内缓存;\n * - node / vitest:内存映射表或 fs 读取(fixture 目录)。\n */\nexport interface ProjectLoader {\n /** 列出当前可加载的 moduleKey(装载前预检 / 错误提示用)。 */\n listModules(): string[]\n /** 按 moduleKey 读取模块源码(.fai.js 文本)。 */\n readSource(moduleKey: string): Promise<string>\n /** 模块内容指纹(增量缓存用;不提供则每次全量重读重执行)。 */\n fingerprint?(moduleKey: string): Promise<string>\n}\n\n// ── HostPorts 汇总 ──\n\n/**\n * Host 在 createRuntime 时注入的全部环境能力。\n *\n * 所有字段可选——node 测试环境可只提供 occt kernel(不注入 csg/sdf),\n * BREP-path ops 不依赖这些 Port。\n */\nexport interface HostPorts {\n csg?: CsgBackend\n sdf?: SdfBackend\n fonts?: FontProvider\n texture?: TextureSampler\n assets?: AssetResolver\n events: EventSink // events 必填——断链通知是基础能力\n /** 库加载器(execute 自动装载未注册库;check 用它做 specifier 预检)。可选——无则仅手工 registerLib。 */\n libLoader?: LibLoader\n /** 项目文件加载器(相对 specifier 的多文件模块,§4.5)。可选——不提供则单文件行为不变。 */\n projectLoader?: ProjectLoader\n}\n\n// ── 执行模式 ──\n\n/**\n * 执行模式(设计文档 §4.4)。\n *\n * - `auto`(默认):优先 BREP,断链后自动切 mesh + EventSink 通知\n * - `brep`:强制 BREP,断链即报错 E_BREP_UNSUPPORTED,不自动切换\n * - `mesh`:全部走 mesh 路径\n */\nexport type ExecutionMode = 'auto' | 'brep' | 'mesh'\n"]}
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* preview-exec — 预览(dry-run)执行上下文
|
|
3
3
|
*
|
|
4
4
|
*
|
|
5
|
-
* 供宿主「预览/干跑」直接调用
|
|
5
|
+
* 供宿主「预览/干跑」直接调用 api 库函数(drill/engrave/...)时使用的兼容上下文:
|
|
6
6
|
* - mode 固定为 'mesh':dispatchPath 静态判定走 mesh 路径(预览输入是 mesh Shape,非 BREP solid)。
|
|
7
7
|
* - getSolid/setSolid 只读写恒等槽(identity slot),不写 ctx/output/params。
|
|
8
8
|
* - 不持有持久 solidCache / statementCache,不产生任何副作用。
|
|
9
9
|
*
|
|
10
10
|
* 与正常执行(CadRuntime 主执行路径)的区别:预览 exec 是纯几何计算,
|
|
11
|
-
* 结果与最终 commit 用同一 op(
|
|
11
|
+
* 结果与最终 commit 用同一 op(api 库函数),保证「预览 == 执行结果」。
|
|
12
12
|
*/
|
|
13
13
|
import type { BrepChainState } from '../brep/brep-chain.js';
|
|
14
14
|
import type { HostPorts } from './ports.js';
|
|
15
15
|
import type { Shape } from '../mesh/types.js';
|
|
16
16
|
import type { BrepHandle } from '../brep/engine/types.js';
|
|
17
17
|
/**
|
|
18
|
-
* 预览 exec:宿主直调
|
|
19
|
-
* P5 起
|
|
18
|
+
* 预览 exec:宿主直调 api 层 的兼容上下文。
|
|
19
|
+
* P5 起 api 层已不收 exec(库函数签名 = 源码形态),字段仅作兼容保留。
|
|
20
20
|
*/
|
|
21
21
|
export interface PreviewExec {
|
|
22
22
|
readonly mode: 'mesh';
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* preview-exec — 预览(dry-run)执行上下文
|
|
3
3
|
*
|
|
4
4
|
*
|
|
5
|
-
* 供宿主「预览/干跑」直接调用
|
|
5
|
+
* 供宿主「预览/干跑」直接调用 api 库函数(drill/engrave/...)时使用的兼容上下文:
|
|
6
6
|
* - mode 固定为 'mesh':dispatchPath 静态判定走 mesh 路径(预览输入是 mesh Shape,非 BREP solid)。
|
|
7
7
|
* - getSolid/setSolid 只读写恒等槽(identity slot),不写 ctx/output/params。
|
|
8
8
|
* - 不持有持久 solidCache / statementCache,不产生任何副作用。
|
|
9
9
|
*
|
|
10
10
|
* 与正常执行(CadRuntime 主执行路径)的区别:预览 exec 是纯几何计算,
|
|
11
|
-
* 结果与最终 commit 用同一 op(
|
|
11
|
+
* 结果与最终 commit 用同一 op(api 库函数),保证「预览 == 执行结果」。
|
|
12
12
|
*/
|
|
13
13
|
import { getSlot, ensureSlot } from '../shape.js';
|
|
14
14
|
/** 空事件接收器(预览无宿主事件通知需求)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-exec.js","sourceRoot":"","sources":["../../src/cad-runtime/preview-exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAyB9C,2BAA2B;AAC3B,SAAS,aAAa;IACpB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAA;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IAC1D,MAAM,SAAS,GAAc,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,aAAa,EAAyB,EAAE,CAAA;IAC1G,MAAM,SAAS,GAAmB;QAChC,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,MAAM,EAAE,IAAI;QACZ,kBAAkB,EAAE,IAAI,GAAG,EAAE;QAC7B,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,cAAc,EAAE,IAAI,GAAG,EAAE;KAC1B,CAAA;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,GAAG,EAAE,SAAS,CAAC,GAAG;SACnB;QACD,QAAQ,EAAE,CAAC,KAAY,EAA0B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAA+B;QACnG,QAAQ,EAAE,CAAC,KAAY,EAAE,KAAiB,EAAQ,EAAE;YAClD,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;QACjC,CAAC;QACD,gBAAgB,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa;QACjE,gBAAgB,EAAE,CAAC,KAAY,EAAE,GAA0B,EAAQ,EAAE;YACnE,UAAU,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,GAAG,CAAA;QACvC,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;QACtB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,4CAA4C;QAC5C,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,SAAS;QACT,KAAK,EAAE,SAAS;KACjB,CAAA;AACH,CAAC","sourcesContent":["/**\n * preview-exec — 预览(dry-run)执行上下文\n *\n *\n * 供宿主「预览/干跑」直接调用
|
|
1
|
+
{"version":3,"file":"preview-exec.js","sourceRoot":"","sources":["../../src/cad-runtime/preview-exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAyB9C,2BAA2B;AAC3B,SAAS,aAAa;IACpB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAA;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IAC1D,MAAM,SAAS,GAAc,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,aAAa,EAAyB,EAAE,CAAA;IAC1G,MAAM,SAAS,GAAmB;QAChC,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,MAAM,EAAE,IAAI;QACZ,kBAAkB,EAAE,IAAI,GAAG,EAAE;QAC7B,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,cAAc,EAAE,IAAI,GAAG,EAAE;KAC1B,CAAA;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,GAAG,EAAE,SAAS,CAAC,GAAG;SACnB;QACD,QAAQ,EAAE,CAAC,KAAY,EAA0B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAA+B;QACnG,QAAQ,EAAE,CAAC,KAAY,EAAE,KAAiB,EAAQ,EAAE;YAClD,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;QACjC,CAAC;QACD,gBAAgB,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa;QACjE,gBAAgB,EAAE,CAAC,KAAY,EAAE,GAA0B,EAAQ,EAAE;YACnE,UAAU,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,GAAG,CAAA;QACvC,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;QACtB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,4CAA4C;QAC5C,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,SAAS;QACT,KAAK,EAAE,SAAS;KACjB,CAAA;AACH,CAAC","sourcesContent":["/**\n * preview-exec — 预览(dry-run)执行上下文\n *\n *\n * 供宿主「预览/干跑」直接调用 api 库函数(drill/engrave/...)时使用的兼容上下文:\n * - mode 固定为 'mesh':dispatchPath 静态判定走 mesh 路径(预览输入是 mesh Shape,非 BREP solid)。\n * - getSolid/setSolid 只读写恒等槽(identity slot),不写 ctx/output/params。\n * - 不持有持久 solidCache / statementCache,不产生任何副作用。\n *\n * 与正常执行(CadRuntime 主执行路径)的区别:预览 exec 是纯几何计算,\n * 结果与最终 commit 用同一 op(api 库函数),保证「预览 == 执行结果」。\n */\n\nimport type { BrepChainState } from '../brep/brep-chain'\nimport type { HostPorts } from './ports'\nimport type { Shape } from '../mesh/types'\nimport type { BrepHandle } from '../brep/engine/types'\nimport { getSlot, ensureSlot } from '../shape'\n\n/**\n * 预览 exec:宿主直调 api 层 的兼容上下文。\n * P5 起 api 层已不收 exec(库函数签名 = 源码形态),字段仅作兼容保留。\n */\nexport interface PreviewExec {\n readonly mode: 'mesh'\n readonly brepChain: BrepChainState\n readonly ports: HostPorts\n readonly kernels: { brep: null; csg?: HostPorts['csg']; sdf?: HostPorts['sdf'] }\n readonly getSolid: (shape: Shape) => BrepHandle | undefined\n readonly setSolid: (shape: Shape, solid: BrepHandle) => void\n readonly getFaceEvolution: (shape: Shape) => Map<number, number[]> | undefined\n readonly setFaceEvolution: (shape: Shape, evo: Map<number, number[]>) => void\n readonly dependentsOf: () => Shape[]\n readonly touch: () => void\n readonly keep: () => void\n readonly keepHidden: () => void\n readonly fonts: HostPorts['fonts']\n readonly texture: HostPorts['texture']\n readonly assets: HostPorts['assets']\n readonly events: HostPorts['events']\n}\n\n/** 空事件接收器(预览无宿主事件通知需求)。 */\nfunction noopEventSink(): { emit: () => void } {\n return { emit: () => {} }\n}\n\n/**\n * 创建预览执行上下文。\n *\n * @param ports 可选 HostPorts(csg/sdf/fonts/assets 透传;events 缺省为 no-op)。\n * @returns PreviewExec — mode='mesh'、occt=null、只读写恒等槽的兼容上下文。\n */\nexport function createPreviewExec(ports?: Partial<HostPorts>): PreviewExec {\n const fullPorts: HostPorts = { ...ports, events: ports?.events ?? noopEventSink() as HostPorts['events'] }\n const brepChain: BrepChainState = {\n solidCache: new Map(),\n kernel: null,\n faceEvolutionCache: new Map(),\n roleTableCache: new Map(),\n meshShapeCache: new Map(),\n }\n\n return {\n mode: 'mesh',\n kernels: {\n brep: null,\n csg: fullPorts.csg,\n sdf: fullPorts.sdf,\n },\n getSolid: (shape: Shape): BrepHandle | undefined => getSlot(shape)?.solid as BrepHandle | undefined,\n setSolid: (shape: Shape, solid: BrepHandle): void => {\n ensureSlot(shape).solid = solid\n },\n getFaceEvolution: (shape: Shape) => getSlot(shape)?.faceEvolution,\n setFaceEvolution: (shape: Shape, evo: Map<number, number[]>): void => {\n ensureSlot(shape).faceEvolution = evo\n },\n dependentsOf: () => [],\n touch: () => {},\n // 预览无 internalKeep 登记(函数体 keep 声明在预览场景无消费方)\n keep: () => {},\n keepHidden: () => {},\n fonts: fullPorts.fonts,\n texture: fullPorts.texture,\n assets: fullPorts.assets,\n events: fullPorts.events,\n brepChain,\n ports: fullPorts,\n }\n}\n"]}
|
|
@@ -21,13 +21,15 @@ import type { Shape } from '../mesh/types.js';
|
|
|
21
21
|
import type { BrepChainState } from '../brep/brep-chain.js';
|
|
22
22
|
import type { BrepHandle } from '../brep/engine/types.js';
|
|
23
23
|
import type { BrepEngineApi } from '../brep/engine/primitives.js';
|
|
24
|
+
import { MeshSolidRegistry } from '../brep/mesh-solid.js';
|
|
24
25
|
import type { SecurityPolicy } from '../lang/security-scanner.js';
|
|
25
26
|
import type { HostPorts, ExecutionMode } from './ports.js';
|
|
26
27
|
import type { SelectorRuntimeData } from '../topology/build-selector-runtime.js';
|
|
27
28
|
import type { SelectorRuntime } from '../topology/types.js';
|
|
28
29
|
import { type PartName } from '../identity.js';
|
|
29
30
|
import type { ExecBackendChoice } from './exec-backend.js';
|
|
30
|
-
import { type
|
|
31
|
+
import { type OpDimMap } from '../lang/metadata-extractor.js';
|
|
32
|
+
import { type LibNamespace, type AssemblyKinematicsPose } from '../runtime-state.js';
|
|
31
33
|
export { computeContentKey } from './content-key.js';
|
|
32
34
|
export { stableFingerprint } from './content-key.js';
|
|
33
35
|
import { type CompoundShape } from '../shape.js';
|
|
@@ -38,7 +40,7 @@ import { type DeterminismPolicy } from '../lang/determinism-scanner.js';
|
|
|
38
40
|
*/
|
|
39
41
|
export interface CheckError {
|
|
40
42
|
/** The stage that produced the error ('keep' = keep directive validation). */
|
|
41
|
-
stage: 'parse' | 'symbol' | 'reference' | 'keep' | 'security';
|
|
43
|
+
stage: 'parse' | 'symbol' | 'reference' | 'keep' | 'security' | 'dimension';
|
|
42
44
|
message: string;
|
|
43
45
|
line?: number;
|
|
44
46
|
stmtId?: string;
|
|
@@ -146,6 +148,18 @@ export interface ExecutionResult {
|
|
|
146
148
|
* 消费语义(asm.solve() 保持 R0 语句形态,与 do_assemble 现状一致)。
|
|
147
149
|
*/
|
|
148
150
|
kinematics?: Map<PartName, AssemblyKinematicsPose>;
|
|
151
|
+
/**
|
|
152
|
+
* 文件声明单位(unit-system §10.6):load 语句读出的「文件自己声明的单位」,
|
|
153
|
+
* key 为 PartName。元数据(宿主写进 sourceUnit、导出目标判定),不参与几何
|
|
154
|
+
* 运算——坐标已是基准值,按它再缩放 = 双重换算。
|
|
155
|
+
*/
|
|
156
|
+
detectedUnits?: Map<PartName, string>;
|
|
157
|
+
/**
|
|
158
|
+
* 多零件降级零件数(fileid-container-and-nesting §5.4):本批次 load op 曾读入
|
|
159
|
+
* 多零件文件(多 solid STEP / 多 object 3MF)并只取第一个零件时,记 part → 原文件
|
|
160
|
+
* 零件数(≥2)。宿主据此弹「该文件包含 N 个零件,当前仅加载第一个」警告。
|
|
161
|
+
*/
|
|
162
|
+
multiPartCounts?: Map<PartName, number>;
|
|
149
163
|
}
|
|
150
164
|
/**
|
|
151
165
|
* Options controlling a single CadRuntime execution. All inputs are code text
|
|
@@ -267,6 +281,13 @@ export declare class CadRuntime {
|
|
|
267
281
|
private roleTableCache;
|
|
268
282
|
/** OCCT 内核引用(环境级单例,initOcctWasm() 幂等;mesh 模式为 null)。供顶替释放用。 */
|
|
269
283
|
private kernel;
|
|
284
|
+
/**
|
|
285
|
+
* 网格实体句柄注册表(PartName → BrepHandle,方案 2026-10-01 §3.2)。
|
|
286
|
+
*
|
|
287
|
+
* **与 `solidCache` 并列且互不干扰**:网格零件永不进 BREP 链,BREP 实体也永不
|
|
288
|
+
* 进本表。释放语义与 solidCache 对齐(覆盖不释放、delete/clear 释放)。
|
|
289
|
+
*/
|
|
290
|
+
private readonly meshSolidRegistry;
|
|
270
291
|
/**
|
|
271
292
|
* 惰性初始化的 BREP 链:solidCache / faceEvolutionCache 引用实例持久 Map,
|
|
272
293
|
* kernel 取环境单例。首次需要时创建一次,跨 execute 复用(不再每次新建)。
|
|
@@ -302,7 +323,7 @@ export declare class CadRuntime {
|
|
|
302
323
|
* Register a library namespace. A version mismatch throws (no silent
|
|
303
324
|
* degradation); afterwards compiled products may use the library via
|
|
304
325
|
* `ns.<binding>.<callee>`. `cad` is registered the same way: the root facade
|
|
305
|
-
* injects it through registerLib('cad',
|
|
326
|
+
* injects it through registerLib('cad', createApiNamespace(), { default: true }).
|
|
306
327
|
* @param binding - the namespace binding name.
|
|
307
328
|
* @param ns - the namespace object to register.
|
|
308
329
|
* @param options - `{ default: true }` declares this binding as the default
|
|
@@ -319,8 +340,8 @@ export declare class CadRuntime {
|
|
|
319
340
|
* built-in cad surface uses this since its ops already carry
|
|
320
341
|
* `DUAL_OP_META`).
|
|
321
342
|
* - omitted → inferred: `!hasDualOp(ns)`. Libraries that already declare
|
|
322
|
-
* dual-ops (cad
|
|
323
|
-
* all-bare-function libraries (sheetmetal) auto-lift `true`.
|
|
343
|
+
* dual-ops (cad) auto-lift `false`;
|
|
344
|
+
* all-bare-function libraries (sheetmetal, faijs-gears, faijs-fasteners) auto-lift `true`.
|
|
324
345
|
*
|
|
325
346
|
* The engine's built-in L3 surface is registered without `autoLift` by the
|
|
326
347
|
* facade: inferred `false` (all ops carry `DUAL_OP_META`).
|
|
@@ -332,7 +353,7 @@ export declare class CadRuntime {
|
|
|
332
353
|
* `borrow: false` marks a faijs-native library (sheetmetal): compatOp must
|
|
333
354
|
* not borrow inputs into brepjs handle form (compat-op.ts CompatSpec.borrow).
|
|
334
355
|
*/
|
|
335
|
-
registerLib(binding: string, ns:
|
|
356
|
+
registerLib(binding: string, ns: LibNamespace, options?: {
|
|
336
357
|
default?: boolean;
|
|
337
358
|
autoLift?: boolean;
|
|
338
359
|
packageName?: string;
|
|
@@ -340,7 +361,23 @@ export declare class CadRuntime {
|
|
|
340
361
|
}): void;
|
|
341
362
|
/** The runtime's default namespace binding name (host-declared; 'cad' by default). */
|
|
342
363
|
get defaultNs(): string;
|
|
343
|
-
|
|
364
|
+
/**
|
|
365
|
+
* P4/P6 (unit-system D8): 汇总已注册 op 的量纲声明(callee → { paramDims, retDim }),
|
|
366
|
+
* 供 extractMetadata 的 dimension pass 消费。键 = 脚本面 callee 名(含命名空间内成员名,
|
|
367
|
+
* 如 `cad.box`)。未声明量纲的 op / 非 op 函数跳过。lang/ 不依赖 op 注册表——由本运行时
|
|
368
|
+
* 在此注入,符合 D8「校验器怎么拿到声明」分层。
|
|
369
|
+
*/
|
|
370
|
+
private buildOpDims;
|
|
371
|
+
/**
|
|
372
|
+
* Public accessor for the op dimension declarations built by {@link buildOpDims}
|
|
373
|
+
* (unit-system G4): hosts need the same callee → { paramDims, retDim, slotMap }
|
|
374
|
+
* map the dimension pass consumes so they can serialize with correct unit
|
|
375
|
+
* literals without keeping a second copy of the table.
|
|
376
|
+
*
|
|
377
|
+
* @returns the op dimension map (paramDims / retDim / slotMap per op name).
|
|
378
|
+
*/
|
|
379
|
+
getOpDims(): OpDimMap;
|
|
380
|
+
constructor(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string, LibNamespace>, options?: CadRuntimeOptions);
|
|
344
381
|
/**
|
|
345
382
|
* 认领全局 backends 配置(P2 修复):全局 backends 是单例,任何 runtime 创建都会
|
|
346
383
|
* 覆盖它——后创建的实例(如预览用 mesh runtime)会把 mode/kernel getter 指向自己,
|
|
@@ -538,6 +575,19 @@ export declare class CadRuntime {
|
|
|
538
575
|
* @param data - the serialized topology data.
|
|
539
576
|
*/
|
|
540
577
|
setTopology(partName: PartName, source: TopologySource, data: SelectorRuntimeData): void;
|
|
578
|
+
/**
|
|
579
|
+
* 收编 load op 登记的网格实体句柄 + 近似拓扑(方案 2026-10-01 §3.3)。
|
|
580
|
+
*
|
|
581
|
+
* **顶替防护**:PartName 会被重写(`let a = await cad.load({…})` 之后
|
|
582
|
+
* `a = cad.boxBrep(…)`)。登记前必须核对「当前 ctx 变量槽里挂的就是这个句柄」
|
|
583
|
+
* (即 `fromMeshSolid` 确实为**当前**这个输出跑过)——否则会把网格实体身份写到一个
|
|
584
|
+
* BREP 实体上,破坏 `solid`/`meshSolid` 互斥不变量。核不上就整条跳过(旧句柄由
|
|
585
|
+
* 链释放兜底)。
|
|
586
|
+
*
|
|
587
|
+
* @param solids - 待收编的 网格实体句柄(PartName → handle)。
|
|
588
|
+
* @param topologies - 待收编的 近似拓扑数据(PartName → SelectorRuntimeData)。
|
|
589
|
+
*/
|
|
590
|
+
private applyPendingMeshSolids;
|
|
541
591
|
/**
|
|
542
592
|
* Get the topology data for a part.
|
|
543
593
|
* @param partName - the part name to look up.
|
|
@@ -549,6 +599,14 @@ export declare class CadRuntime {
|
|
|
549
599
|
* @param partName - the part name to delete.
|
|
550
600
|
*/
|
|
551
601
|
deleteTopology(partName: PartName): void;
|
|
602
|
+
/**
|
|
603
|
+
* 网格实体句柄注册表的只读视图(诊断 / 宿主判定用)。
|
|
604
|
+
*
|
|
605
|
+
* 与 `brepChain.solidCache` 平行:宿主想判定"某 part 是不是网格零件",用
|
|
606
|
+
* `shape.hasMeshSolid(shape)`;想拿句柄做网格语义操作,从这里取。
|
|
607
|
+
* @returns the runtime's mesh solid registry.
|
|
608
|
+
*/
|
|
609
|
+
get meshSolids(): MeshSolidRegistry;
|
|
552
610
|
/**
|
|
553
611
|
* 从 BREP solid 构建拓扑数据(接口分离 P0)。
|
|
554
612
|
*
|
|
@@ -624,5 +682,5 @@ export declare class CadRuntime {
|
|
|
624
682
|
* @param options - optional runtime options (e.g. `executor: 'direct' | 'module'`).
|
|
625
683
|
* @returns a new CadRuntime.
|
|
626
684
|
*/
|
|
627
|
-
export declare function createRuntime(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string,
|
|
685
|
+
export declare function createRuntime(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string, LibNamespace>, options?: CadRuntimeOptions): CadRuntime;
|
|
628
686
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* - group/assembly 重建
|
|
17
17
|
* - window.dispatchEvent / toast
|
|
18
18
|
*/
|
|
19
|
-
import { getBrepEngine, hasBrepEngine, getActiveBrepEngineId } from '../brep/engine/registry.js';
|
|
19
|
+
import { getBrepEngine, hasBrepEngine, getActiveBrepEngineId, getMeshSolidBackend } from '../brep/engine/registry.js';
|
|
20
20
|
import { ensureOcctDefaultEngine } from '../brep/engine/adapters/occt.js';
|
|
21
|
+
import { MeshSolidRegistry } from '../brep/mesh-solid.js';
|
|
21
22
|
import { ParseError } from '../lang/parse-error.js';
|
|
22
23
|
import { buildSolidTopologyRuntime } from '../brep/brep-topology.js';
|
|
23
24
|
import { buildTopologyFromMesh } from '../brep/brep-topology.js';
|
|
@@ -28,9 +29,10 @@ import { computeLiveShapes, lineConsumes, blockConsumes } from './live-shapes.js
|
|
|
28
29
|
import { extractMetadata } from '../lang/metadata-extractor.js';
|
|
29
30
|
import { configureBackends, CONTRACT_VERSION, assertContractVersion, } from '../runtime-state.js';
|
|
30
31
|
import { admitCompatLib } from './admit-compat-lib.js';
|
|
31
|
-
import { hasDualOp } from '../define-op.js';
|
|
32
|
+
import { hasDualOp, dualOpMetaOf } from '../define-op.js';
|
|
32
33
|
import { computeLibId } from './lib-id.js';
|
|
33
34
|
import { computeContentKey, stableFingerprint } from './content-key.js';
|
|
35
|
+
import { SCRIPT_UNIT_CONSTANTS } from '../units.js';
|
|
34
36
|
export { computeContentKey } from './content-key.js';
|
|
35
37
|
export { stableFingerprint } from './content-key.js';
|
|
36
38
|
import { isCompoundLike, getSlot, ensureSlot } from '../shape.js';
|
|
@@ -129,6 +131,13 @@ export class CadRuntime {
|
|
|
129
131
|
roleTableCache = new Map();
|
|
130
132
|
/** OCCT 内核引用(环境级单例,initOcctWasm() 幂等;mesh 模式为 null)。供顶替释放用。 */
|
|
131
133
|
kernel = null;
|
|
134
|
+
/**
|
|
135
|
+
* 网格实体句柄注册表(PartName → BrepHandle,方案 2026-10-01 §3.2)。
|
|
136
|
+
*
|
|
137
|
+
* **与 `solidCache` 并列且互不干扰**:网格零件永不进 BREP 链,BREP 实体也永不
|
|
138
|
+
* 进本表。释放语义与 solidCache 对齐(覆盖不释放、delete/clear 释放)。
|
|
139
|
+
*/
|
|
140
|
+
meshSolidRegistry = new MeshSolidRegistry();
|
|
132
141
|
/**
|
|
133
142
|
* 惰性初始化的 BREP 链:solidCache / faceEvolutionCache 引用实例持久 Map,
|
|
134
143
|
* kernel 取环境单例。首次需要时创建一次,跨 execute 复用(不再每次新建)。
|
|
@@ -164,7 +173,7 @@ export class CadRuntime {
|
|
|
164
173
|
* Register a library namespace. A version mismatch throws (no silent
|
|
165
174
|
* degradation); afterwards compiled products may use the library via
|
|
166
175
|
* `ns.<binding>.<callee>`. `cad` is registered the same way: the root facade
|
|
167
|
-
* injects it through registerLib('cad',
|
|
176
|
+
* injects it through registerLib('cad', createApiNamespace(), { default: true }).
|
|
168
177
|
* @param binding - the namespace binding name.
|
|
169
178
|
* @param ns - the namespace object to register.
|
|
170
179
|
* @param options - `{ default: true }` declares this binding as the default
|
|
@@ -181,8 +190,8 @@ export class CadRuntime {
|
|
|
181
190
|
* built-in cad surface uses this since its ops already carry
|
|
182
191
|
* `DUAL_OP_META`).
|
|
183
192
|
* - omitted → inferred: `!hasDualOp(ns)`. Libraries that already declare
|
|
184
|
-
* dual-ops (cad
|
|
185
|
-
* all-bare-function libraries (sheetmetal) auto-lift `true`.
|
|
193
|
+
* dual-ops (cad) auto-lift `false`;
|
|
194
|
+
* all-bare-function libraries (sheetmetal, faijs-gears, faijs-fasteners) auto-lift `true`.
|
|
186
195
|
*
|
|
187
196
|
* The engine's built-in L3 surface is registered without `autoLift` by the
|
|
188
197
|
* facade: inferred `false` (all ops carry `DUAL_OP_META`).
|
|
@@ -223,6 +232,43 @@ export class CadRuntime {
|
|
|
223
232
|
get defaultNs() {
|
|
224
233
|
return this.defaultNsName;
|
|
225
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* P4/P6 (unit-system D8): 汇总已注册 op 的量纲声明(callee → { paramDims, retDim }),
|
|
237
|
+
* 供 extractMetadata 的 dimension pass 消费。键 = 脚本面 callee 名(含命名空间内成员名,
|
|
238
|
+
* 如 `cad.box`)。未声明量纲的 op / 非 op 函数跳过。lang/ 不依赖 op 注册表——由本运行时
|
|
239
|
+
* 在此注入,符合 D8「校验器怎么拿到声明」分层。
|
|
240
|
+
*/
|
|
241
|
+
buildOpDims() {
|
|
242
|
+
const out = {};
|
|
243
|
+
for (const [binding, ns] of Object.entries(this.libs)) {
|
|
244
|
+
if (!ns || typeof ns !== 'object')
|
|
245
|
+
continue;
|
|
246
|
+
for (const [name, value] of Object.entries(ns)) {
|
|
247
|
+
if (typeof value !== 'function')
|
|
248
|
+
continue;
|
|
249
|
+
const meta = dualOpMetaOf(value);
|
|
250
|
+
if (!meta || (!meta.paramDims && !meta.retDim))
|
|
251
|
+
continue;
|
|
252
|
+
out[`${binding}.${name}`] = {
|
|
253
|
+
paramDims: meta.paramDims,
|
|
254
|
+
retDim: meta.retDim,
|
|
255
|
+
...(meta.slotMap ? { slotMap: meta.slotMap } : {}),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return out;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Public accessor for the op dimension declarations built by {@link buildOpDims}
|
|
263
|
+
* (unit-system G4): hosts need the same callee → { paramDims, retDim, slotMap }
|
|
264
|
+
* map the dimension pass consumes so they can serialize with correct unit
|
|
265
|
+
* literals without keeping a second copy of the table.
|
|
266
|
+
*
|
|
267
|
+
* @returns the op dimension map (paramDims / retDim / slotMap per op name).
|
|
268
|
+
*/
|
|
269
|
+
getOpDims() {
|
|
270
|
+
return this.buildOpDims();
|
|
271
|
+
}
|
|
226
272
|
constructor(ports, mode = 'auto', libs = {}, options = {}) {
|
|
227
273
|
this.ports = ports;
|
|
228
274
|
this.mode = mode;
|
|
@@ -230,6 +276,15 @@ export class CadRuntime {
|
|
|
230
276
|
this.namespaces = { ...libs };
|
|
231
277
|
this.securityPolicy = options.security ?? 'strict';
|
|
232
278
|
this.determinismPolicy = options.determinism ?? 'error';
|
|
279
|
+
// P6/D7: register script-side unit constants (MM, INCH, DEGREE, …) on globalThis.
|
|
280
|
+
// Both the VM backend (new Function resolves free identifiers from the global scope)
|
|
281
|
+
// and the interpreter backend (env.ts reads globalThis[name] for S4_SAFE_GLOBALS)
|
|
282
|
+
// need these values. Idempotent — safe to call across multiple runtime instances.
|
|
283
|
+
const g = globalThis;
|
|
284
|
+
for (const [name, value] of Object.entries(SCRIPT_UNIT_CONSTANTS)) {
|
|
285
|
+
if (!(name in g))
|
|
286
|
+
g[name] = value;
|
|
287
|
+
}
|
|
233
288
|
this.directExecutor = new DirectExecutor({
|
|
234
289
|
namespaces: this.namespaces,
|
|
235
290
|
setSolid: (partName, solid) => { this.solidCache.set(partName, solid); },
|
|
@@ -238,7 +293,7 @@ export class CadRuntime {
|
|
|
238
293
|
security: this.securityPolicy,
|
|
239
294
|
...(options.execBackend !== undefined ? { execBackend: options.execBackend } : {}),
|
|
240
295
|
});
|
|
241
|
-
// P2:装配全局 backends(
|
|
296
|
+
// P2:装配全局 backends(api 层经 getBackends() 取资源)。
|
|
242
297
|
this.claimBackends();
|
|
243
298
|
}
|
|
244
299
|
/**
|
|
@@ -281,6 +336,11 @@ export class CadRuntime {
|
|
|
281
336
|
get sdf() {
|
|
282
337
|
return portsOf().sdf;
|
|
283
338
|
},
|
|
339
|
+
get meshSolid() {
|
|
340
|
+
// 网格实体后端来自 mesh 引擎槽(与 BREP 槽独立注册)——换 BREP 引擎
|
|
341
|
+
// 不影响网格零件能力,反之亦然(R2 双槽位正交)。
|
|
342
|
+
return getMeshSolidBackend() ?? undefined;
|
|
343
|
+
},
|
|
284
344
|
},
|
|
285
345
|
fonts: this.ports.fonts,
|
|
286
346
|
texture: this.ports.texture,
|
|
@@ -288,6 +348,8 @@ export class CadRuntime {
|
|
|
288
348
|
events: this.ports.events,
|
|
289
349
|
cad: this.namespaces.cad,
|
|
290
350
|
});
|
|
351
|
+
// 网格实体注册表在装配后认领后端(释放句柄要用它;未装配则 null)。
|
|
352
|
+
this.meshSolidRegistry.setBackend(getMeshSolidBackend());
|
|
291
353
|
}
|
|
292
354
|
/**
|
|
293
355
|
* 确保持久 BREP 链存在(惰性初始化)。
|
|
@@ -726,6 +788,9 @@ export class CadRuntime {
|
|
|
726
788
|
});
|
|
727
789
|
}
|
|
728
790
|
const brepSolids = this.directBrepSolids(terminals, compounds);
|
|
791
|
+
// 网格零件落位(方案 2026-10-01 §3.3):load 的 mesh 路径在 op 内完成规范化 +
|
|
792
|
+
// 近似拓扑构建,把「句柄」与「拓扑数据」登记为 pending;此处收编。
|
|
793
|
+
this.applyPendingMeshSolids(de.meshSolidSnapshot, de.meshTopologySnapshot);
|
|
729
794
|
// T3:拓扑——宿主注入(mesh/primitive,setTopology 缓存)原样带出 + BREP 真拓扑
|
|
730
795
|
// 自动构建(与 collectResult 的 topology='auto'/'brep' 面同构)。solidCache 已由
|
|
731
796
|
// DirectExecutor 的 setSolid 钩子同步(逐单元执行后写入),此处 buildBrepTopology
|
|
@@ -775,6 +840,8 @@ export class CadRuntime {
|
|
|
775
840
|
naming: naming.size > 0 ? naming : undefined,
|
|
776
841
|
compounds: compounds.size > 0 ? compounds : undefined,
|
|
777
842
|
kinematics: de.kinematicsSnapshot.size > 0 ? de.kinematicsSnapshot : undefined,
|
|
843
|
+
detectedUnits: de.detectedUnitsSnapshot.size > 0 ? de.detectedUnitsSnapshot : undefined,
|
|
844
|
+
multiPartCounts: de.multiPartCountSnapshot.size > 0 ? de.multiPartCountSnapshot : undefined,
|
|
778
845
|
changed: deChanged ? deChanged.map(asPartName) : undefined,
|
|
779
846
|
activeValues: activeValues.size > 0 ? activeValues : undefined,
|
|
780
847
|
};
|
|
@@ -1058,6 +1125,36 @@ export class CadRuntime {
|
|
|
1058
1125
|
ensureSlot(v).faceHints = hints;
|
|
1059
1126
|
}
|
|
1060
1127
|
}
|
|
1128
|
+
/**
|
|
1129
|
+
* 收编 load op 登记的网格实体句柄 + 近似拓扑(方案 2026-10-01 §3.3)。
|
|
1130
|
+
*
|
|
1131
|
+
* **顶替防护**:PartName 会被重写(`let a = await cad.load({…})` 之后
|
|
1132
|
+
* `a = cad.boxBrep(…)`)。登记前必须核对「当前 ctx 变量槽里挂的就是这个句柄」
|
|
1133
|
+
* (即 `fromMeshSolid` 确实为**当前**这个输出跑过)——否则会把网格实体身份写到一个
|
|
1134
|
+
* BREP 实体上,破坏 `solid`/`meshSolid` 互斥不变量。核不上就整条跳过(旧句柄由
|
|
1135
|
+
* 链释放兜底)。
|
|
1136
|
+
*
|
|
1137
|
+
* @param solids - 待收编的 网格实体句柄(PartName → handle)。
|
|
1138
|
+
* @param topologies - 待收编的 近似拓扑数据(PartName → SelectorRuntimeData)。
|
|
1139
|
+
*/
|
|
1140
|
+
applyPendingMeshSolids(solids, topologies) {
|
|
1141
|
+
const de = this.directExecutor;
|
|
1142
|
+
const accepted = new Set();
|
|
1143
|
+
for (const [part, handle] of solids) {
|
|
1144
|
+
const v = de.getCtxVar(String(part));
|
|
1145
|
+
if (!v || typeof v !== 'object')
|
|
1146
|
+
continue;
|
|
1147
|
+
if (getSlot(v)?.meshSolid !== handle)
|
|
1148
|
+
continue;
|
|
1149
|
+
this.meshSolidRegistry.set(part, handle);
|
|
1150
|
+
accepted.add(part);
|
|
1151
|
+
}
|
|
1152
|
+
for (const [part, data] of topologies) {
|
|
1153
|
+
if (!accepted.has(part))
|
|
1154
|
+
continue;
|
|
1155
|
+
this.setTopology(part, 'mesh', data);
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1061
1158
|
/**
|
|
1062
1159
|
* Get the topology data for a part.
|
|
1063
1160
|
* @param partName - the part name to look up.
|
|
@@ -1073,6 +1170,16 @@ export class CadRuntime {
|
|
|
1073
1170
|
deleteTopology(partName) {
|
|
1074
1171
|
this.topologyCache.delete(partName);
|
|
1075
1172
|
}
|
|
1173
|
+
/**
|
|
1174
|
+
* 网格实体句柄注册表的只读视图(诊断 / 宿主判定用)。
|
|
1175
|
+
*
|
|
1176
|
+
* 与 `brepChain.solidCache` 平行:宿主想判定"某 part 是不是网格零件",用
|
|
1177
|
+
* `shape.hasMeshSolid(shape)`;想拿句柄做网格语义操作,从这里取。
|
|
1178
|
+
* @returns the runtime's mesh solid registry.
|
|
1179
|
+
*/
|
|
1180
|
+
get meshSolids() {
|
|
1181
|
+
return this.meshSolidRegistry;
|
|
1182
|
+
}
|
|
1076
1183
|
/**
|
|
1077
1184
|
* 从 BREP solid 构建拓扑数据(接口分离 P0)。
|
|
1078
1185
|
*
|
|
@@ -1115,7 +1222,7 @@ export class CadRuntime {
|
|
|
1115
1222
|
*/
|
|
1116
1223
|
check(code) {
|
|
1117
1224
|
try {
|
|
1118
|
-
const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) });
|
|
1225
|
+
const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs), opDims: this.buildOpDims() });
|
|
1119
1226
|
return {
|
|
1120
1227
|
ok: true,
|
|
1121
1228
|
errors: [],
|
|
@@ -1128,7 +1235,9 @@ export class CadRuntime {
|
|
|
1128
1235
|
}
|
|
1129
1236
|
catch (err) {
|
|
1130
1237
|
if (err instanceof ParseError) {
|
|
1131
|
-
const stage = err.code === 'E_SECURITY' ? 'security'
|
|
1238
|
+
const stage = err.code === 'E_SECURITY' ? 'security'
|
|
1239
|
+
: err.code === 'E_DIM_BARE_NUMBER' || err.code === 'E_DIM_MISMATCH' || err.code === 'E_DIM_UNKNOWN_UNIT' ? 'dimension'
|
|
1240
|
+
: 'parse';
|
|
1132
1241
|
return {
|
|
1133
1242
|
ok: false,
|
|
1134
1243
|
errors: [{ stage, message: err.message, line: err.line, ...(err.code ? { code: err.code } : {}), ...(err.ruleId ? { ruleId: err.ruleId } : {}) }],
|
|
@@ -1166,6 +1275,8 @@ export class CadRuntime {
|
|
|
1166
1275
|
}
|
|
1167
1276
|
// brepChain.meshShapeCache
|
|
1168
1277
|
this.brepChain?.meshShapeCache?.delete(name);
|
|
1278
|
+
// 网格实体句柄(网格零件):释放 + 删键(与 solidCache 同语义)
|
|
1279
|
+
this.meshSolidRegistry.delete(name);
|
|
1169
1280
|
// faceEvolutionCache / roleTableCache (same Map refs as runtime's)
|
|
1170
1281
|
this.faceEvolutionCache.delete(name);
|
|
1171
1282
|
this.roleTableCache.delete(name);
|
|
@@ -1377,6 +1488,8 @@ export class CadRuntime {
|
|
|
1377
1488
|
catch { /* 已释放 */ }
|
|
1378
1489
|
}
|
|
1379
1490
|
this.solidCache.clear();
|
|
1491
|
+
// 网格实体句柄(独立注册表,与 solidCache 并列)一并释放
|
|
1492
|
+
this.meshSolidRegistry.clear();
|
|
1380
1493
|
this.faceEvolutionCache.clear();
|
|
1381
1494
|
this.roleTableCache.clear();
|
|
1382
1495
|
this.statementCache.clear();
|