@faicad/faijs 0.22.2 → 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/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/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.js +2 -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 +1 -1
- package/dist/api/primitives.js +2 -2
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/profile.d.ts +39 -12
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +4 -4
- package/dist/api/profile.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 +7 -5
- package/dist/api/sketch-on-plane.d.ts.map +1 -1
- package/dist/api/sketch-on-plane.js +6 -7
- 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/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 +5 -1
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +62 -11
- 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/brep/brep-ops.d.ts +9 -7
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +23 -24
- 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 +6 -5
- 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.map +1 -1
- package/dist/brep/export/export-model.js +6 -5
- package/dist/brep/export/export-model.js.map +1 -1
- 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/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 +449 -123
- 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 +15 -3
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +33 -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 +42 -7
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +68 -5
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +15 -1
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +10 -1
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +2 -2
- package/dist/env-agnostic.d.ts.map +1 -1
- package/dist/env-agnostic.js +1 -1
- 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 +65 -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/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 +1 -1
- package/dist/lang/code-to-args.js +1 -1
- package/dist/lang/code-to-args.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 +7 -0
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +14 -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 +42 -7
- package/dist/mesh/threemf-loader.d.ts.map +1 -1
- package/dist/mesh/threemf-loader.js +565 -100
- package/dist/mesh/threemf-loader.js.map +1 -1
- 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/node-host/cli.d.ts +44 -6
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +76 -26
- 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 +18 -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 +4 -5
- 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 +85 -9
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +72 -2
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +3 -3
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +5 -5
- 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/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/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 +18 -2
|
@@ -66,6 +66,42 @@ function edgeHintScore(edge, refHint) {
|
|
|
66
66
|
}
|
|
67
67
|
return score;
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* 在候选边集合里按**纯几何** hint(length / midpoint)取最优边。
|
|
71
|
+
*
|
|
72
|
+
* 这是「没有 role 层的边身份」的唯一裁决器,两个消费点共用同一份实现:
|
|
73
|
+
* - `resolveEdgeTopo` 的多公共边裁决与 mesh 降级路径;
|
|
74
|
+
* - 网格实体(近似拓扑)的边解析——那里 `EdgeTopoRef.faces` 只是占位限定符
|
|
75
|
+
* (网格零件没有 role,见 `mesh-primitive.test.ts` 的 Phase 1.8 契约)。
|
|
76
|
+
*
|
|
77
|
+
* 无法区分(最优点与次优点差值 < `HINT_MARGIN`)→ `undefined`,调用方按
|
|
78
|
+
* ambiguous / not-found 如实报错,**绝不**静默拿序号硬取。
|
|
79
|
+
*
|
|
80
|
+
* @param edges - the candidate edges (ordinal + optional handle/hint).
|
|
81
|
+
* @param hint - the edge hint carrying length / midpoint.
|
|
82
|
+
* @returns the best-matching candidate, or undefined when the hint cannot decide.
|
|
83
|
+
*/
|
|
84
|
+
export function matchEdgeByHint(edges, hint) {
|
|
85
|
+
if (hint.length === undefined && hint.midpoint === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
let best;
|
|
88
|
+
let bestScore = Infinity;
|
|
89
|
+
let secondScore = Infinity;
|
|
90
|
+
for (const edge of edges) {
|
|
91
|
+
const score = edgeHintScore(edge, hint);
|
|
92
|
+
if (score < bestScore) {
|
|
93
|
+
secondScore = bestScore;
|
|
94
|
+
bestScore = score;
|
|
95
|
+
best = { ordinal: edge.ordinal, handle: edge.handle };
|
|
96
|
+
}
|
|
97
|
+
else if (score < secondScore) {
|
|
98
|
+
secondScore = score;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (best === undefined || secondScore - bestScore < HINT_MARGIN)
|
|
102
|
+
return undefined;
|
|
103
|
+
return best;
|
|
104
|
+
}
|
|
69
105
|
/**
|
|
70
106
|
* 解析边 TopoRef 到当前快照的边序号。
|
|
71
107
|
*
|
|
@@ -78,6 +114,20 @@ export function resolveEdgeTopo(ref, ctx) {
|
|
|
78
114
|
const facesA = facesForQualifier(qualA, ctx);
|
|
79
115
|
const facesB = facesForQualifier(qualB, ctx);
|
|
80
116
|
if (facesA.length === 0 || facesB.length === 0) {
|
|
117
|
+
// 无 role 层的近似拓扑(网格实体):`faces` 是占位限定符,两个 RoleQualifier
|
|
118
|
+
// 都不可能解析到面——既没有 roleTable(网格零件不冒充 role,Phase 1.8),
|
|
119
|
+
// 限定符本身也不携带几何(类型上只有 origin/role)。边的身份只剩几何一条路:
|
|
120
|
+
// 在整个边表上按 hint 匹配并标注 geometric-fallback。
|
|
121
|
+
//
|
|
122
|
+
// 判据是 `!ctx.faceEdgeAdjacency`:BREP 上下文**总是**带 face→edge 邻接
|
|
123
|
+
// (buildEdgeResolutionContext 现场枚举),故这条分支对 BREP 零影响——
|
|
124
|
+
// BREP 侧解析不到面仍然是 not-found,不会退化成"按长度瞎猜一条边"。
|
|
125
|
+
if (!ctx.faceEdgeAdjacency && ctx.edges && ctx.edges.length > 0) {
|
|
126
|
+
const best = matchEdgeByHint(ctx.edges, ref.hint);
|
|
127
|
+
if (best !== undefined) {
|
|
128
|
+
return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
81
131
|
return { ok: false, reason: 'not-found' };
|
|
82
132
|
}
|
|
83
133
|
// 收集所有 (a, b) 面对的公共边
|
|
@@ -114,25 +164,9 @@ export function resolveEdgeTopo(ref, ctx) {
|
|
|
114
164
|
}
|
|
115
165
|
/** 在候选 ordinal 中按 hint 取最优边;无法区分 → undefined(ambiguous)。 */
|
|
116
166
|
function bestEdgeByHint(ordinals, hint, ctx) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
let secondScore = Infinity;
|
|
122
|
-
for (const ord of ordinals) {
|
|
123
|
-
const edge = ctx.edges?.find((e) => e.ordinal === ord);
|
|
124
|
-
const score = edgeHintScore(edge ?? {}, hint);
|
|
125
|
-
if (score < bestScore) {
|
|
126
|
-
secondScore = bestScore;
|
|
127
|
-
bestScore = score;
|
|
128
|
-
best = { ordinal: ord, handle: edge?.handle };
|
|
129
|
-
}
|
|
130
|
-
else if (score < secondScore) {
|
|
131
|
-
secondScore = score;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (best === undefined || secondScore - bestScore < HINT_MARGIN)
|
|
135
|
-
return undefined;
|
|
136
|
-
return best;
|
|
167
|
+
const pool = ordinals
|
|
168
|
+
.map((o) => ctx.edges?.find((e) => e.ordinal === o))
|
|
169
|
+
.filter((e) => e !== undefined);
|
|
170
|
+
return matchEdgeByHint(pool, hint);
|
|
137
171
|
}
|
|
138
172
|
//# sourceMappingURL=resolve-edge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-edge.js","sourceRoot":"","sources":["../../../src/topology/naming/resolve-edge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * resolve-edge.ts — 边 TopoRef 解析(移植 brepjs edgeRefFns,§4.2/§4.3)\n *\n * 边 = 两邻面之交。EdgeTopoRef.faces 是两个 RoleQualifier(带 origin,faijs 扩展:\n * 布尔合流后两面可能来自不同 origin)。\n *\n * 解析 = 两 role 解析到当前面 → 取公共边:\n * - 1 条公共边 → exact\n * - 多条(两邻面沿多边相接,如圆角面)→ hint(length/midpoint)裁决\n * - 无公共边 / role 缺失 → not-found\n *\n * mesh 无 face→edge 邻接(build-mesh-topology.ts:262,§5.3 能力边界)→\n * lineage 不可用,只能给边 hint;此时解析降级为「纯 hint 匹配」并显式标注。\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { EdgeTopoRef, RoleQualifier, TopoResolution } from './types'\nimport { resolveFaceTopo, type FaceCandidateEntry, type ResolutionContext } from './resolve-face'\n\n/** Hint 距离比这更近视为不可区分(→ ambiguous)。 */\nconst HINT_MARGIN = 1e-6\n\n/** 两点的欧氏距离。 */\nfunction distance(a: readonly number[], b: readonly number[]): number {\n const dx = a[0] - b[0]\n const dy = a[1] - b[1]\n const dz = a[2] - b[2]\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n}\n\n/**\n * 解析一个 RoleQualifier 到当前面候选(exact 优先,几何兜底)。\n *\n * @param qualifier - the face role qualifier (origin + role).\n * @param ctx - the resolution context.\n * @returns the face candidates for the role (possibly several after a split).\n */\nexport function facesForQualifier(\n qualifier: RoleQualifier,\n ctx: ResolutionContext,\n): FaceCandidateEntry[] {\n const targetHashes = ctx.roleTable?.get(qualifier.origin)?.get(qualifier.role)\n if (targetHashes !== undefined && targetHashes.length > 0) {\n const survivors = ctx.faces.filter((f) => f.hash !== undefined && targetHashes.includes(f.hash))\n if (survivors.length > 0) return survivors\n }\n // role 缺失/未命中 → 几何兜底(只取最优面,与 resolveFaceTopo 同口径)\n const resolution = resolveFaceTopo(\n { kind: 'face', origin: qualifier.origin, role: qualifier.role, hint: { kind: 'face' } },\n ctx,\n )\n if (resolution.ok) {\n const hit = ctx.faces.find((f) => f.ordinal === resolution.ordinal)\n if (hit) return [hit]\n }\n return []\n}\n\n/** 两面的公共边 ordinal(face→edge 邻接交集)。 */\nfunction sharedEdgeOrdinals(faceA: FaceCandidateEntry, faceB: FaceCandidateEntry, ctx: ResolutionContext): number[] {\n const aEdges = new Set(ctx.faceEdgeAdjacency?.[faceA.ordinal - 1] ?? [])\n const bEdges = new Set(ctx.faceEdgeAdjacency?.[faceB.ordinal - 1] ?? [])\n const shared: number[] = []\n for (const e of aEdges) if (bEdges.has(e)) shared.push(e)\n return shared\n}\n\n/** 候选边 hint 与 ref hint 的距离分(越小越匹配)。 */\nfunction edgeHintScore(edge: { hint?: { length?: number; midpoint?: readonly number[] } }, refHint: EdgeTopoRef['hint']): number {\n let score = 0\n if (refHint.length !== undefined && edge.hint?.length !== undefined) {\n score += Math.abs(edge.hint.length - refHint.length)\n }\n if (refHint.midpoint !== undefined && edge.hint?.midpoint !== undefined) {\n score += distance(edge.hint.midpoint, refHint.midpoint)\n }\n return score\n}\n\n/**\n * 解析边 TopoRef 到当前快照的边序号。\n *\n * @param ref - the edge TopoRef to resolve.\n * @param ctx - the resolution context (needs faceEdgeAdjacency for lineage).\n * @returns the three-state TopoResolution with the edge ordinal.\n */\nexport function resolveEdgeTopo(\n ref: EdgeTopoRef,\n ctx: ResolutionContext,\n): TopoResolution<{ handle?: BrepHandle }> {\n const [qualA, qualB] = ref.faces\n const facesA = facesForQualifier(qualA, ctx)\n const facesB = facesForQualifier(qualB, ctx)\n if (facesA.length === 0 || facesB.length === 0) {\n return { ok: false, reason: 'not-found' }\n }\n\n // 收集所有 (a, b) 面对的公共边\n const shared = new Set<number>()\n for (const a of facesA) {\n for (const b of facesB) {\n for (const e of sharedEdgeOrdinals(a, b, ctx)) shared.add(e)\n }\n }\n\n const unique = [...shared]\n if (unique.length === 1) {\n const [only] = unique\n if (only !== undefined) {\n const edge = ctx.edges?.find((e) => e.ordinal === only)\n return { ok: true, entity: { handle: edge?.handle }, ordinal: only, confidence: 'exact' }\n }\n }\n\n if (unique.length > 1) {\n // 多公共边 → hint 裁决\n const best = bestEdgeByHint(unique, ref.hint, ctx)\n if (best !== undefined) return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' }\n return { ok: false, reason: 'ambiguous', candidatesOrdinal: unique }\n }\n\n // 无公共边:face→edge 邻接缺失(mesh)→ 纯 hint 匹配整个边表;否则 not-found\n if (!ctx.faceEdgeAdjacency && ctx.edges && ctx.edges.length > 0) {\n const best = bestEdgeByHint(ctx.edges.map((e) => e.ordinal), ref.hint, ctx)\n if (best !== undefined) return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' }\n return { ok: false, reason: 'not-found' }\n }\n\n return { ok: false, reason: 'not-found' }\n}\n\n/** 在候选 ordinal 中按 hint 取最优边;无法区分 → undefined(ambiguous)。 */\nfunction bestEdgeByHint(\n ordinals: readonly number[],\n hint: EdgeTopoRef['hint'],\n ctx: ResolutionContext,\n): { ordinal: number; handle?: BrepHandle } | undefined {\n if (hint.length === undefined && hint.midpoint === undefined) return undefined\n let best: { ordinal: number; handle?: BrepHandle } | undefined\n let bestScore = Infinity\n let secondScore = Infinity\n for (const ord of ordinals) {\n const edge = ctx.edges?.find((e) => e.ordinal === ord)\n const score = edgeHintScore(edge ?? {}, hint)\n if (score < bestScore) {\n secondScore = bestScore\n bestScore = score\n best = { ordinal: ord, handle: edge?.handle }\n } else if (score < secondScore) {\n secondScore = score\n }\n }\n if (best === undefined || secondScore - bestScore < HINT_MARGIN) return undefined\n return best\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resolve-edge.js","sourceRoot":"","sources":["../../../src/topology/naming/resolve-edge.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * resolve-edge.ts — 边 TopoRef 解析(移植 brepjs edgeRefFns,§4.2/§4.3)\n *\n * 边 = 两邻面之交。EdgeTopoRef.faces 是两个 RoleQualifier(带 origin,faijs 扩展:\n * 布尔合流后两面可能来自不同 origin)。\n *\n * 解析 = 两 role 解析到当前面 → 取公共边:\n * - 1 条公共边 → exact\n * - 多条(两邻面沿多边相接,如圆角面)→ hint(length/midpoint)裁决\n * - 无公共边 / role 缺失 → not-found\n *\n * mesh 无 face→edge 邻接(build-mesh-topology.ts:262,§5.3 能力边界)→\n * lineage 不可用,只能给边 hint;此时解析降级为「纯 hint 匹配」并显式标注。\n */\n\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { EdgeTopoRef, RoleQualifier, TopoResolution } from './types'\nimport { resolveFaceTopo, type EdgeCandidateEntry, type FaceCandidateEntry, type ResolutionContext } from './resolve-face'\n\n/** Hint 距离比这更近视为不可区分(→ ambiguous)。 */\nconst HINT_MARGIN = 1e-6\n\n/** 两点的欧氏距离。 */\nfunction distance(a: readonly number[], b: readonly number[]): number {\n const dx = a[0] - b[0]\n const dy = a[1] - b[1]\n const dz = a[2] - b[2]\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n}\n\n/**\n * 解析一个 RoleQualifier 到当前面候选(exact 优先,几何兜底)。\n *\n * @param qualifier - the face role qualifier (origin + role).\n * @param ctx - the resolution context.\n * @returns the face candidates for the role (possibly several after a split).\n */\nexport function facesForQualifier(\n qualifier: RoleQualifier,\n ctx: ResolutionContext,\n): FaceCandidateEntry[] {\n const targetHashes = ctx.roleTable?.get(qualifier.origin)?.get(qualifier.role)\n if (targetHashes !== undefined && targetHashes.length > 0) {\n const survivors = ctx.faces.filter((f) => f.hash !== undefined && targetHashes.includes(f.hash))\n if (survivors.length > 0) return survivors\n }\n // role 缺失/未命中 → 几何兜底(只取最优面,与 resolveFaceTopo 同口径)\n const resolution = resolveFaceTopo(\n { kind: 'face', origin: qualifier.origin, role: qualifier.role, hint: { kind: 'face' } },\n ctx,\n )\n if (resolution.ok) {\n const hit = ctx.faces.find((f) => f.ordinal === resolution.ordinal)\n if (hit) return [hit]\n }\n return []\n}\n\n/** 两面的公共边 ordinal(face→edge 邻接交集)。 */\nfunction sharedEdgeOrdinals(faceA: FaceCandidateEntry, faceB: FaceCandidateEntry, ctx: ResolutionContext): number[] {\n const aEdges = new Set(ctx.faceEdgeAdjacency?.[faceA.ordinal - 1] ?? [])\n const bEdges = new Set(ctx.faceEdgeAdjacency?.[faceB.ordinal - 1] ?? [])\n const shared: number[] = []\n for (const e of aEdges) if (bEdges.has(e)) shared.push(e)\n return shared\n}\n\n/** 候选边 hint 与 ref hint 的距离分(越小越匹配)。 */\nfunction edgeHintScore(edge: { hint?: { length?: number; midpoint?: readonly number[] } }, refHint: EdgeTopoRef['hint']): number {\n let score = 0\n if (refHint.length !== undefined && edge.hint?.length !== undefined) {\n score += Math.abs(edge.hint.length - refHint.length)\n }\n if (refHint.midpoint !== undefined && edge.hint?.midpoint !== undefined) {\n score += distance(edge.hint.midpoint, refHint.midpoint)\n }\n return score\n}\n\n/**\n * 在候选边集合里按**纯几何** hint(length / midpoint)取最优边。\n *\n * 这是「没有 role 层的边身份」的唯一裁决器,两个消费点共用同一份实现:\n * - `resolveEdgeTopo` 的多公共边裁决与 mesh 降级路径;\n * - 网格实体(近似拓扑)的边解析——那里 `EdgeTopoRef.faces` 只是占位限定符\n * (网格零件没有 role,见 `mesh-primitive.test.ts` 的 Phase 1.8 契约)。\n *\n * 无法区分(最优点与次优点差值 < `HINT_MARGIN`)→ `undefined`,调用方按\n * ambiguous / not-found 如实报错,**绝不**静默拿序号硬取。\n *\n * @param edges - the candidate edges (ordinal + optional handle/hint).\n * @param hint - the edge hint carrying length / midpoint.\n * @returns the best-matching candidate, or undefined when the hint cannot decide.\n */\nexport function matchEdgeByHint(\n edges: readonly EdgeCandidateEntry[],\n hint: EdgeTopoRef['hint'],\n): { ordinal: number; handle?: BrepHandle } | undefined {\n if (hint.length === undefined && hint.midpoint === undefined) return undefined\n let best: { ordinal: number; handle?: BrepHandle } | undefined\n let bestScore = Infinity\n let secondScore = Infinity\n for (const edge of edges) {\n const score = edgeHintScore(edge, hint)\n if (score < bestScore) {\n secondScore = bestScore\n bestScore = score\n best = { ordinal: edge.ordinal, handle: edge.handle }\n } else if (score < secondScore) {\n secondScore = score\n }\n }\n if (best === undefined || secondScore - bestScore < HINT_MARGIN) return undefined\n return best\n}\n\n/**\n * 解析边 TopoRef 到当前快照的边序号。\n *\n * @param ref - the edge TopoRef to resolve.\n * @param ctx - the resolution context (needs faceEdgeAdjacency for lineage).\n * @returns the three-state TopoResolution with the edge ordinal.\n */\nexport function resolveEdgeTopo(\n ref: EdgeTopoRef,\n ctx: ResolutionContext,\n): TopoResolution<{ handle?: BrepHandle }> {\n const [qualA, qualB] = ref.faces\n const facesA = facesForQualifier(qualA, ctx)\n const facesB = facesForQualifier(qualB, ctx)\n if (facesA.length === 0 || facesB.length === 0) {\n // 无 role 层的近似拓扑(网格实体):`faces` 是占位限定符,两个 RoleQualifier\n // 都不可能解析到面——既没有 roleTable(网格零件不冒充 role,Phase 1.8),\n // 限定符本身也不携带几何(类型上只有 origin/role)。边的身份只剩几何一条路:\n // 在整个边表上按 hint 匹配并标注 geometric-fallback。\n //\n // 判据是 `!ctx.faceEdgeAdjacency`:BREP 上下文**总是**带 face→edge 邻接\n // (buildEdgeResolutionContext 现场枚举),故这条分支对 BREP 零影响——\n // BREP 侧解析不到面仍然是 not-found,不会退化成\"按长度瞎猜一条边\"。\n if (!ctx.faceEdgeAdjacency && ctx.edges && ctx.edges.length > 0) {\n const best = matchEdgeByHint(ctx.edges, ref.hint)\n if (best !== undefined) {\n return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' }\n }\n }\n return { ok: false, reason: 'not-found' }\n }\n\n // 收集所有 (a, b) 面对的公共边\n const shared = new Set<number>()\n for (const a of facesA) {\n for (const b of facesB) {\n for (const e of sharedEdgeOrdinals(a, b, ctx)) shared.add(e)\n }\n }\n\n const unique = [...shared]\n if (unique.length === 1) {\n const [only] = unique\n if (only !== undefined) {\n const edge = ctx.edges?.find((e) => e.ordinal === only)\n return { ok: true, entity: { handle: edge?.handle }, ordinal: only, confidence: 'exact' }\n }\n }\n\n if (unique.length > 1) {\n // 多公共边 → hint 裁决\n const best = bestEdgeByHint(unique, ref.hint, ctx)\n if (best !== undefined) return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' }\n return { ok: false, reason: 'ambiguous', candidatesOrdinal: unique }\n }\n\n // 无公共边:face→edge 邻接缺失(mesh)→ 纯 hint 匹配整个边表;否则 not-found\n if (!ctx.faceEdgeAdjacency && ctx.edges && ctx.edges.length > 0) {\n const best = bestEdgeByHint(ctx.edges.map((e) => e.ordinal), ref.hint, ctx)\n if (best !== undefined) return { ok: true, entity: { handle: best.handle }, ordinal: best.ordinal, confidence: 'geometric-fallback' }\n return { ok: false, reason: 'not-found' }\n }\n\n return { ok: false, reason: 'not-found' }\n}\n\n/** 在候选 ordinal 中按 hint 取最优边;无法区分 → undefined(ambiguous)。 */\nfunction bestEdgeByHint(\n ordinals: readonly number[],\n hint: EdgeTopoRef['hint'],\n ctx: ResolutionContext,\n): { ordinal: number; handle?: BrepHandle } | undefined {\n const pool = ordinals\n .map((o) => ctx.edges?.find((e) => e.ordinal === o))\n .filter((e): e is EdgeCandidateEntry => e !== undefined)\n return matchEdgeByHint(pool, hint)\n}\n"]}
|
package/dist/weapp.d.ts
CHANGED
|
@@ -14,9 +14,13 @@
|
|
|
14
14
|
export * from './env-agnostic.js';
|
|
15
15
|
export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
|
|
16
16
|
export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit.js';
|
|
17
|
-
export {
|
|
18
|
-
export
|
|
17
|
+
export { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit.js';
|
|
18
|
+
export { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries, registerMeshEngine, getMeshEngine, getActiveMeshEngineId, isMeshEngineRegistered, getMeshSolidBackend } from './brep/engine/registry.js';
|
|
19
|
+
export type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry.js';
|
|
19
20
|
export type { BrepEngineApi } from './brep/engine/primitives.js';
|
|
21
|
+
export { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid.js';
|
|
22
|
+
export type { MeshSolidBackend, MeshSolidResult, MeshSolidKernelOps, MeshSolidInput, MeshSolidNormalizeOptions, } from './brep/mesh-solid.js';
|
|
23
|
+
export { assertShapeSlotExclusive } from './cad-runtime/backend-dispatch.js';
|
|
20
24
|
export { createRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
|
21
25
|
export type { CadRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
|
22
26
|
//# sourceMappingURL=weapp.d.ts.map
|
package/dist/weapp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weapp.d.ts","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAG1G,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAG9H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"weapp.d.ts","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,cAAc,gBAAgB,CAAA;AAG9B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAG1G,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAG9H,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAG5H,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC/O,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxF,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACtI,YAAY,EACV,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,yBAAyB,GACjG,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAIzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA"}
|
package/dist/weapp.js
CHANGED
|
@@ -18,8 +18,14 @@ export * from './env-agnostic.js';
|
|
|
18
18
|
export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
|
|
19
19
|
// brepkit BREP 引擎注册(weapp 只注册 brepkit,不注册 occt)
|
|
20
20
|
export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit.js';
|
|
21
|
+
// brepkit 网格实体后端(网格语义路径;与 BREP 槽独立注册)。weapp 侧装了它,
|
|
22
|
+
// `cad.load` 的 STL/3MF 路径就产出「网格实体 + 近似拓扑」。
|
|
23
|
+
export { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit.js';
|
|
21
24
|
// BREP 引擎注册表(环境无关;ensureBrepChain 见已注册引擎即跳过 OCCT)
|
|
22
|
-
export { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries } from './brep/engine/registry.js';
|
|
25
|
+
export { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries, registerMeshEngine, getMeshEngine, getActiveMeshEngineId, isMeshEngineRegistered, getMeshSolidBackend } from './brep/engine/registry.js';
|
|
26
|
+
// 网格实体(近似拓扑的载体):端口 + 注册表 + 驱动。
|
|
27
|
+
export { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid.js';
|
|
28
|
+
export { assertShapeSlotExclusive } from './cad-runtime/backend-dispatch.js';
|
|
23
29
|
// cad-runtime(环境无关执行栈):createRuntime 为 with-cad 变体(§9.2),与
|
|
24
30
|
// browser/node 入口同口径——自带 cad 命名空间注册,宿主无需手工补注册。
|
|
25
31
|
export { createRuntime } from './cad-runtime/createRuntimeWithCad.js';
|
package/dist/weapp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weapp.js","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sEAAsE;AACtE,wDAAwD;AACxD,cAAc,gBAAgB,CAAA;AAE9B,8DAA8D;AAC9D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAE1G,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"weapp.js","sourceRoot":"","sources":["../src/weapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sEAAsE;AACtE,wDAAwD;AACxD,cAAc,gBAAgB,CAAA;AAE9B,8DAA8D;AAC9D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAE1G,gDAAgD;AAChD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC9H,kDAAkD;AAClD,2CAA2C;AAC3C,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAE5H,kDAAkD;AAClD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAG/O,+BAA+B;AAC/B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAItI,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE,2DAA2D;AAC3D,+CAA+C;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA","sourcesContent":["/**\n * @faicad/faijs-core/weapp — weapp 专用宿主入口(docs/plans/2026-09-20-weapp-host-entry-design.md)\n *\n * 小程序(无 OCCT 环境)宿主的最小导出面:brepkit wasm 装载注入点 + brepkit BREP\n * 引擎注册 + 环境无关执行栈。全部为 re-export,零新实现。\n *\n * 为什么独立成入口:browser umbrella 曾 re-export brepkit 符号,导致 web 端模块图\n * 包含 brepkitWasm.js(其 node 分支 import('brepkit-wasm') 被 vite 静态解析而报错)。\n * 宿主边界必须由静态入口声明,而不是靠构建脚本事后 stub 剔除。\n *\n * 导出面受 entry-boundary.test.ts 白名单守卫约束——新增导出必须同步更新白名单。\n * web/desktop 宿主禁止 import 本入口(brepkit 是 weapp 专属 BREP 引擎)。\n */\n\n// 共享面(env-agnostic:identity + runtime-state + lang/*)——三处 umbrella 统一\n// re-export(§9.1),weapp worker 由此获得 analyzeCode 等语言层符号。\nexport * from './env-agnostic'\n\n// brepkit wasm 装载(weapp 专属注入点;宿主装配期调用一次 setBrepkitWasmInitFn)\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\n\n// brepkit BREP 引擎注册(weapp 只注册 brepkit,不注册 occt)\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\n// brepkit 网格实体后端(网格语义路径;与 BREP 槽独立注册)。weapp 侧装了它,\n// `cad.load` 的 STL/3MF 路径就产出「网格实体 + 近似拓扑」。\nexport { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit'\n\n// BREP 引擎注册表(环境无关;ensureBrepChain 见已注册引擎即跳过 OCCT)\nexport { registerBrepEngine, hasBrepEngine, getBrepEngine, getActiveBrepEngineId, freezeEngineRegistries, registerMeshEngine, getMeshEngine, getActiveMeshEngineId, isMeshEngineRegistered, getMeshSolidBackend } from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry'\nexport type { BrepEngineApi } from './brep/engine/primitives'\n// 网格实体(近似拓扑的载体):端口 + 注册表 + 驱动。\nexport { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid'\nexport type {\n MeshSolidBackend, MeshSolidResult, MeshSolidKernelOps, MeshSolidInput, MeshSolidNormalizeOptions,\n} from './brep/mesh-solid'\nexport { assertShapeSlotExclusive } from './cad-runtime/backend-dispatch'\n\n// cad-runtime(环境无关执行栈):createRuntime 为 with-cad 变体(§9.2),与\n// browser/node 入口同口径——自带 cad 命名空间注册,宿主无需手工补注册。\nexport { createRuntime } from './cad-runtime/createRuntimeWithCad'\nexport type { CadRuntime } from './cad-runtime/createRuntimeWithCad'\n"]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@faicad/faijs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.3",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"license": "
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://gitcode.com/Faicad/faijs.git"
|
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
"types": "./dist/api/brepjs-compat/index.d.ts",
|
|
23
23
|
"default": "./dist/api/brepjs-compat/index.js"
|
|
24
24
|
},
|
|
25
|
+
"./api/cadquery-selectors": {
|
|
26
|
+
"types": "./dist/api/cadquery-selectors/index.d.ts",
|
|
27
|
+
"default": "./dist/api/cadquery-selectors/index.js"
|
|
28
|
+
},
|
|
25
29
|
"./brepjs-compat": {
|
|
26
30
|
"types": "./dist/api/brepjs-compat/index.d.ts",
|
|
27
31
|
"default": "./dist/api/brepjs-compat/index.js"
|
|
@@ -90,6 +94,18 @@
|
|
|
90
94
|
"types": "./dist/mesh/*.d.ts",
|
|
91
95
|
"default": "./dist/mesh/*.js"
|
|
92
96
|
},
|
|
97
|
+
"./io": {
|
|
98
|
+
"types": "./dist/io/index.d.ts",
|
|
99
|
+
"default": "./dist/io/index.js"
|
|
100
|
+
},
|
|
101
|
+
"./io/fai-zip": {
|
|
102
|
+
"types": "./dist/io/fai-zip/index.d.ts",
|
|
103
|
+
"default": "./dist/io/fai-zip/index.js"
|
|
104
|
+
},
|
|
105
|
+
"./io/*": {
|
|
106
|
+
"types": "./dist/io/*.d.ts",
|
|
107
|
+
"default": "./dist/io/*.js"
|
|
108
|
+
},
|
|
93
109
|
"./brep/*": {
|
|
94
110
|
"types": "./dist/brep/*.d.ts",
|
|
95
111
|
"default": "./dist/brep/*.js"
|