@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fontRegistry.js","sourceRoot":"","sources":["../../../src/brep/text/fontRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fontRegistry.js","sourceRoot":"","sources":["../../../src/brep/text/fontRegistry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 字体加载与注册 — 单一真源\n *\n * 设计原则:\n * - loadFont 只接受 ArrayBuffer(纯函数,无 fs/fetch 环境依赖)\n * - 字体二进制的获取方式由 FontLoader 接口注入(依赖反转)\n * - 浏览器:browserFontLoader.ts 通过 vite ?url + fetch 加载\n * - Node 测试:fontTestHelper.ts 通过 fs.readFileSync 加载\n * - 字体文件唯一真源:src/assets/fonts/OpenSans-Regular.ttf\n */\n\nimport * as opentypeModule from 'opentype.js'\nimport type { Font } from 'opentype.js'\n\n/**\n * `opentype.js` publishes no `exports` map: it ships a UMD bundle (`main`) plus\n * an ESM build (`module`). Node ESM resolves the UMD `main`, whose CommonJS\n * interop exposes a namespace import as `{ default }` only — so\n * `opentypeModule.parse` is undefined there — whereas bundlers (vite/vitest)\n * resolve the ESM build and expose the named exports directly. Resolve once,\n * here, so glyph parsing works in every host (CLI/tsx = Node ESM,\n * vitest/browser = bundler).\n */\nconst opentype: typeof opentypeModule =\n typeof (opentypeModule as { parse?: unknown }).parse === 'function'\n ? opentypeModule\n : (opentypeModule as unknown as { default: typeof opentypeModule }).default\n\nconst FONT_REGISTER: Record<string, Font> = {}\n\n// ─── FontLoader 依赖注入 ───\n\n/**\n * 字体二进制加载器接口。\n *\n * 生产代码(text.ts / engrave.ts)不自己决定字体来源,\n * 而是通过 ensureDefaultFont() / ensureFont() 使用注入的 FontLoader。\n */\nexport interface FontLoader {\n /** 返回默认字体的二进制数据 */\n loadDefaultFont(): Promise<ArrayBuffer>\n /**\n * 可选:按**字体族名**或**文件路径**取字体二进制。\n *\n * 宿主实现(Node 读磁盘/系统字体目录、浏览器按 URL 映射)决定来源;引擎核心\n * 不碰 fs/fetch。返回 `null` 表示宿主无法解析该名字——调用方回退到默认字体\n * (与 CadQuery/OCC `Font_FontMgr::FindFont` 找不到名字时回退默认字体的语义一致)。\n *\n * 未实现该方法的宿主(如浏览器)会让 `ensureFont(name)` 直接回退默认字体。\n *\n * @param nameOrPath - 字体族名(如 `\"Arial\"`)或字体文件路径\n * @returns 字体字节,或 null(无法解析)\n */\n resolveFont?(nameOrPath: string): Promise<ArrayBuffer | null>\n}\n\nlet activeFontLoader: FontLoader | null = null\n\n/**\n * 设置当前环境的字体加载器。\n *\n * 浏览器:由 browserFontLoader.ts 在应用启动时自动调用。\n * 测试:由 fontTestHelper.ts 在 beforeAll 中调用。\n *\n * @param loader - the font loader to install, or null to clear the active one.\n */\nexport function setFontLoader(loader: FontLoader | null): void {\n activeFontLoader = loader\n}\n\n/**\n * Get the currently-installed font loader (may be null).\n * @returns the active font loader, or null when none is set.\n */\nexport function getFontLoader(): FontLoader | null {\n return activeFontLoader\n}\n\n// ─── 核心 API ───\n\n/**\n * 加载并注册一个 OpenType/TrueType 字体。\n *\n * 纯函数:只接受 ArrayBuffer,不处理 fs/fetch。\n * 环境差异由 FontLoader 接口在外部处理。\n *\n * @param fontData 字体文件二进制数据\n * @param fontFamily 注册名(默认 'default')\n * @param force 是否覆盖已注册的同名字体\n * @returns 解析后的 opentype.js Font 对象\n */\nexport async function loadFont(\n fontData: ArrayBuffer,\n fontFamily = 'default',\n force = false,\n): Promise<Font> {\n if (!force && FONT_REGISTER[fontFamily]) {\n return FONT_REGISTER[fontFamily]\n }\n\n let font: Font\n try {\n font = opentype.parse(fontData)\n } catch (e) {\n throw new Error(`Failed to parse font data: ${e instanceof Error ? e.message : String(e)}`, { cause: e })\n }\n\n FONT_REGISTER[fontFamily] = font\n if (!FONT_REGISTER['default']) {\n FONT_REGISTER['default'] = font\n }\n\n return font\n}\n\n/**\n * 确保默认字体已加载(惰性加载)。\n *\n * 使用注入的 FontLoader 获取字体二进制,然后调用 loadFont 解析注册。\n * 如果字体已加载(getFont('default') 返回非 undefined),直接返回。\n *\n * @throws 如果没有设置 FontLoader 且字体尚未加载\n */\nexport async function ensureDefaultFont(): Promise<void> {\n if (getFont('default')) return\n\n if (!activeFontLoader) {\n throw new Error(\n '[fontRegistry] No font loader set. ' +\n 'Call setFontLoader() before using text functions. ' +\n 'Browser: import browserFontLoader.ts; Node tests: use fontTestHelper.ts.',\n )\n }\n\n const data = await activeFontLoader.loadDefaultFont()\n await loadFont(data, 'default', true)\n}\n\n/**\n * 获取已注册的字体。\n *\n * @param fontFamily 注册名(默认 'default')\n * @returns opentype.js Font 对象,如果未加载则返回 undefined\n */\nexport function getFont(fontFamily = 'default'): Font | undefined {\n return FONT_REGISTER[fontFamily]\n}\n\n/**\n * 确保某个**具名字体**可用,并返回它。\n *\n * 语义对齐 CadQuery 的 `font=`/`fontPath=`:\n *\n * - 名字已注册过(含 `loadFont(data, name)` 直接注册)⇒ 直接返回;\n * - `fontPath`(已存在的文件路径)或字体族名 ⇒ 交给 `FontLoader.resolveFont` 解析,\n * 解析成功后**以该名字注册**,后续同名调用命中缓存;\n * - 宿主没有 `resolveFont`、或解析失败(名字不是本机已安装字体)⇒ **回退到默认字体**\n * (OCC `Font_FontMgr::FindFont` 找不到字体时同样回退默认字体,不会抛错)。\n *\n * `null`/`undefined`/空串等价于「不指定」⇒ 默认字体。\n *\n * @param nameOrPath - 字体族名、字体文件路径,或 null/undefined 表示默认字体\n * @returns 解析到的字体(解析不到时是默认字体)\n * @throws 没有安装 FontLoader 且默认字体也未加载时\n */\nexport async function ensureFont(nameOrPath?: string | null): Promise<Font> {\n if (!nameOrPath) {\n await ensureDefaultFont()\n return getFont()!\n }\n\n const already = getFont(nameOrPath)\n if (already) return already\n\n if (nameOrPath === 'default') {\n await ensureDefaultFont()\n return getFont()!\n }\n\n const resolver = activeFontLoader?.resolveFont\n if (resolver) {\n const data = await activeFontLoader!.resolveFont!(nameOrPath)\n if (data) return loadFont(data, nameOrPath, true)\n }\n\n await ensureDefaultFont()\n return getFont()!\n}\n\n/**\n * 清除所有已注册的字体。\n *\n * 主要用于测试:在注入失败 loader 前,先清除已加载的字体,\n * 确保 ensureDefaultFont() 会重新调用 loader。\n */\nexport function clearFonts(): void {\n for (const key of Object.keys(FONT_REGISTER)) {\n delete FONT_REGISTER[key]\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-to-solid.d.ts","sourceRoot":"","sources":["../../../src/brep/text/text-to-solid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"text-to-solid.d.ts","sourceRoot":"","sources":["../../../src/brep/text/text-to-solid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAwDzD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACf,GACL,UAAU,EAAE,CAwHd;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd,GACA,UAAU,CAqCZ"}
|
|
@@ -17,10 +17,15 @@
|
|
|
17
17
|
* - Z (closePath) → 闭合 wire
|
|
18
18
|
*/
|
|
19
19
|
import { getFont } from './fontRegistry.js';
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* 将 opentype.js 坐标转为 OCCT 点(XY 平面,Z=0)。
|
|
22
|
+
*
|
|
23
|
+
* opentype.js 的 path 是 **y 向下**(canvas 约定:字形主体在负 y),OCCT 是
|
|
24
|
+
* **y 向上**,故这里翻转 y —— 与 `../svg/svg-to-solid.ts` 的 `flipY`
|
|
25
|
+
* (SVG Y-down → OCCT Y-up)同一约定。X 不翻转,文字从左到右。
|
|
26
|
+
*/
|
|
21
27
|
function toPt(x, y) {
|
|
22
|
-
|
|
23
|
-
return { x, y, z: 0 };
|
|
28
|
+
return { x, y: -y, z: 0 };
|
|
24
29
|
}
|
|
25
30
|
/**
|
|
26
31
|
* 将 opentype.js 二次贝塞尔转换为三次贝塞尔的控制点。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-to-solid.js","sourceRoot":"","sources":["../../../src/brep/text/text-to-solid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAKxC,2CAA2C;AAC3C,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS;IAChC,6BAA6B;IAC7B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAClB,EAAM,EAAE,EAAM,EAAE,EAAM;IAEtB,MAAM,EAAE,GAAG;QACT,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC;KACL,CAAA;IACD,MAAM,EAAE,GAAG;QACT,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC;KACL,CAAA;IACD,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAC3B,MAAqB,EACrB,EAAM,EAAE,EAAM,EAAE,EAAM,EAAE,EAAM;IAE9B,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,IAAY,EACZ,UAKI,EAAE;IAEN,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,OAAO,CAAA;IAEjF,IAAI,IAAI,GAAqB,OAAO,CAAC,UAAU,CAAC,CAAA;IAChD,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,OAAO,EAAE,CAAA;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;IACnG,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;YAAE,SAAQ;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,+BAA+B,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI;gBAC1F,yEAAyE,CAC1E,CAAA;QACH,CAAC;IACH,CAAC;IAED,SAAS;IACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAyB,CAAA;IAE/C,MAAM,KAAK,GAAiB,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAiB,EAAE,CAAA;IAEjC,IAAI,YAAY,GAAiB,EAAE,CAAA;IACnC,IAAI,MAAM,GAAc,IAAI,CAAA;IAC5B,IAAI,YAAY,GAAc,IAAI,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,gCAAgC;gBAChC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;oBAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;oBAC9B,YAAY,GAAG,EAAE,CAAA;gBACnB,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAE,EAAE,GAAG,CAAC,CAAE,CAAC,CAAA;gBAC7B,YAAY,GAAG,MAAM,CAAA;gBACrB,MAAK;YACP,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAE,EAAE,GAAG,CAAC,CAAE,CAAC,CAAA;oBAC7B,YAAY,GAAG,MAAM,CAAA;oBACrB,MAAK;gBACP,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAE,EAAE,GAAG,CAAC,CAAE,CAAC,CAAA;gBACjC,SAAS;gBACT,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;oBAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;oBAC9C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrB,CAAC;gBACD,MAAM,GAAG,IAAI,CAAA;gBACb,MAAK;YACP,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,IAAI,CAAC,MAAM;oBAAE,MAAK;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAG,EAAE,GAAG,CAAC,EAAG,CAAC,CAAA;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAE,EAAE,GAAG,CAAC,CAAE,CAAC,CAAA;gBAClC,WAAW;gBACX,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;gBAC/C,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;gBAChE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,MAAM,GAAG,KAAK,CAAA;gBACd,MAAK;YACP,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,IAAI,CAAC,MAAM;oBAAE,MAAK;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAG,EAAE,GAAG,CAAC,EAAG,CAAC,CAAA;gBACjC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAG,EAAE,GAAG,CAAC,EAAG,CAAC,CAAA;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAE,EAAE,GAAG,CAAC,CAAE,CAAC,CAAA;gBAClC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;gBAChE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,MAAM,GAAG,KAAK,CAAA;gBACd,MAAK;YACP,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,mBAAmB;gBACnB,IAAI,YAAY,IAAI,MAAM;oBACtB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;oBACtD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACvB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrB,CAAC;gBACD,UAAU;gBACV,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;oBAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;oBAC9B,YAAY,GAAG,EAAE,CAAA;gBACnB,CAAC;gBACD,MAAM,GAAG,IAAI,CAAA;gBACb,YAAY,GAAG,IAAI,CAAA;gBACnB,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;IAChC,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,MAAqB,EACrB,IAAY,EACZ,OAIC;IAED,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAEhE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;IAEpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;YAC/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAA;QACnB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["/**\n * 文字 → OCCT wire/face 转换\n *\n * 适配自 brepjs `src/text/text-to-solid.ts`。\n * 保留文件名和核心算法,适配本项目的 occt-wasm API。\n *\n * 与 brepjs 的差异:\n * - brepjs 用 BlueprintSketcher 构造 wire → 本项目直接用 kernel.makeLineEdge / makeBezierEdge\n * - brepjs 用 organiseBlueprints 处理孔洞 → 本项目用 makeFace 直接构建(OCCT 自动处理内孔)\n * - brepjs 用 sketchOnPlane → 本项目直接在 XY 平面构造然后按需变换\n *\n * opentype.js 路径命令 → OCCT edge 映射:\n * - M (moveTo) → 开始新子路径\n * - L (lineTo) → kernel.makeLineEdge(prev, curr)\n * - C (cubicBezier) → kernel.makeBezierEdge([p0, cp1, cp2, p1])\n * - Q (quadraticBezier) → 转换为三次贝塞尔后用 makeBezierEdge\n * - Z (closePath) → 闭合 wire\n */\n\nimport type { BrepHandle } from '../engine/types'\nimport type { BrepEngineApi } from '../engine/primitives'\nimport type { Font } from 'opentype.js'\nimport type { PathCommand } from 'opentype.js'\nimport { getFont } from './fontRegistry'\n\n/** 点坐标(OCCT 格式) */\ninterface Pt { x: number; y: number; z: number }\n\n/** 将 opentype.js 坐标转为 OCCT 点(XY 平面,Z=0) */\nfunction toPt(x: number, y: number): Pt {\n // 与 mesh 路径一致:不翻转 X 轴,文字从左到右\n return { x, y, z: 0 }\n}\n\n/**\n * 将 opentype.js 二次贝塞尔转换为三次贝塞尔的控制点。\n *\n * Q: P0 → P1 (cp) → P2\n * C: P0 → C1 → C2 → P2\n * C1 = P0 + 2/3 * (P1 - P0) = (2*P1 + P0) / 3\n * C2 = P2 + 2/3 * (P1 - P2) = (2*P1 + P2) / 3\n */\nfunction quadToCubic(\n p0: Pt, cp: Pt, p2: Pt,\n): [Pt, Pt] {\n const c1 = {\n x: (2 * cp.x + p0.x) / 3,\n y: (2 * cp.y + p0.y) / 3,\n z: 0,\n }\n const c2 = {\n x: (2 * cp.x + p2.x) / 3,\n y: (2 * cp.y + p2.y) / 3,\n z: 0,\n }\n return [c1, c2]\n}\n\n/**\n * 用 OCCT 贝塞尔边构造一段三次贝塞尔曲线。\n *\n * 三次贝塞尔曲线有 4 个控制点:P0, C1, C2, P1。\n * occt-wasm 的 makeBezierEdge 接受 Vec3[] 控制点数组。\n */\nfunction makeBezierFromPoints(\n kernel: BrepEngineApi,\n p0: Pt, c1: Pt, c2: Pt, p1: Pt,\n): BrepHandle {\n return kernel.makeBezierEdge([p0, c1, c2, p1])\n}\n\n/**\n * 将文字转换为 OCCT wire 数组(每个闭合轮廓一个 wire)。\n *\n * @param kernel OCCT 内核\n * @param text 文字字符串\n * @param options 配置选项\n * @returns BrepHandle 数组(每个是一个闭合 wire)\n */\nexport function textBlueprints(\n kernel: BrepEngineApi,\n text: string,\n options: {\n startX?: number\n startY?: number\n fontSize?: number\n fontFamily?: string\n } = {},\n): BrepHandle[] {\n const { startX = 0, startY = 0, fontSize = 16, fontFamily = 'default' } = options\n\n let font: Font | undefined = getFont(fontFamily)\n if (!font) font = getFont()\n if (!font) {\n throw new Error('[textBlueprints] No fonts loaded. Call loadFont() before using text functions.')\n }\n\n // 检查缺字形(CJK 字符在 OpenSans Regular 中没有对应字形)\n for (const ch of text) {\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') continue\n const glyph = font.charToGlyph(ch)\n if (glyph.index === 0) {\n throw new Error(\n `[textBlueprints] Character \"${ch}\" (U+${ch.codePointAt(0)!.toString(16).toUpperCase()}) ` +\n `not found in font. If it is a CJK character, a CJK font must be loaded.`,\n )\n }\n }\n\n // 获取文字路径\n const path = font.getPath(text, startX, startY, fontSize)\n const commands = path.commands as PathCommand[]\n\n const wires: BrepHandle[] = []\n const allEdges: BrepHandle[] = []\n\n let currentEdges: BrepHandle[] = []\n let lastPt: Pt | null = null\n let subpathStart: Pt | null = null\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case 'M': {\n // 开始新子路径 — 如果当前有 edges,先构建 wire\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n currentEdges = []\n }\n lastPt = toPt(cmd.x!, cmd.y!)\n subpathStart = lastPt\n break\n }\n case 'L': {\n if (!lastPt) {\n lastPt = toPt(cmd.x!, cmd.y!)\n subpathStart = lastPt\n break\n }\n const curr = toPt(cmd.x!, cmd.y!)\n // 跳过零长度边\n if (Math.abs(curr.x - lastPt.x) > 1e-9 || Math.abs(curr.y - lastPt.y) > 1e-9) {\n const edge = kernel.makeLineEdge(lastPt, curr)\n currentEdges.push(edge)\n allEdges.push(edge)\n }\n lastPt = curr\n break\n }\n case 'Q': {\n if (!lastPt) break\n const cp = toPt(cmd.x1!, cmd.y1!)\n const endPt = toPt(cmd.x!, cmd.y!)\n // 转换为三次贝塞尔\n const [c1, c2] = quadToCubic(lastPt, cp, endPt)\n const edge = makeBezierFromPoints(kernel, lastPt, c1, c2, endPt)\n currentEdges.push(edge)\n allEdges.push(edge)\n lastPt = endPt\n break\n }\n case 'C': {\n if (!lastPt) break\n const c1 = toPt(cmd.x1!, cmd.y1!)\n const c2 = toPt(cmd.x2!, cmd.y2!)\n const endPt = toPt(cmd.x!, cmd.y!)\n const edge = makeBezierFromPoints(kernel, lastPt, c1, c2, endPt)\n currentEdges.push(edge)\n allEdges.push(edge)\n lastPt = endPt\n break\n }\n case 'Z': {\n // 闭合 — 如果有起点,添加闭合边\n if (subpathStart && lastPt &&\n (Math.abs(subpathStart.x - lastPt.x) > 1e-9 || Math.abs(subpathStart.y - lastPt.y) > 1e-9)) {\n const edge = kernel.makeLineEdge(lastPt, subpathStart)\n currentEdges.push(edge)\n allEdges.push(edge)\n }\n // 构建 wire\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n currentEdges = []\n }\n lastPt = null\n subpathStart = null\n break\n }\n }\n }\n\n // 处理最后一个未闭合的子路径\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n }\n\n // 释放所有边(wire 已共享 TShape)\n for (const e of allEdges) {\n kernel.release(e)\n }\n\n return wires\n}\n\n/**\n * 将文字转换为 OCCT 3D solid(face → extrude → fuse)。\n *\n * @param kernel OCCT 内核\n * @param text 文字字符串\n * @param options 配置选项\n * @returns BrepHandle(合并后的 solid)\n */\nexport function textToSolid(\n kernel: BrepEngineApi,\n text: string,\n options: {\n fontSize?: number\n fontFamily?: string\n depth: number\n },\n): BrepHandle {\n const { fontSize = 16, fontFamily = 'default', depth } = options\n\n const wires = textBlueprints(kernel, text, { fontSize, fontFamily })\n\n if (wires.length === 0) {\n throw new Error('[textToSolid] no wires generated from text')\n }\n\n // 为每个 wire 创建 face → extrude\n const solids: BrepHandle[] = []\n for (const wire of wires) {\n try {\n const face = kernel.makeFace(wire)\n const solid = kernel.extrude(face, 0, 0, depth)\n kernel.release(face)\n solids.push(solid)\n } catch {\n // 某些 wire 可能无法构建 face(如开放线框)— 跳过\n }\n kernel.release(wire)\n }\n\n if (solids.length === 0) {\n throw new Error('[textToSolid] no solids generated from wires')\n }\n\n // Fuse 所有 solid\n let result = solids[0]\n for (let i = 1; i < solids.length; i++) {\n const prev = result\n result = kernel.fuse(prev, solids[i])\n kernel.release(prev)\n kernel.release(solids[i])\n }\n\n return result\n}\n"]}
|
|
1
|
+
{"version":3,"file":"text-to-solid.js","sourceRoot":"","sources":["../../../src/brep/text/text-to-solid.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 文字 → OCCT wire/face 转换\n *\n * 适配自 brepjs `src/text/text-to-solid.ts`。\n * 保留文件名和核心算法,适配本项目的 occt-wasm API。\n *\n * 与 brepjs 的差异:\n * - brepjs 用 BlueprintSketcher 构造 wire → 本项目直接用 kernel.makeLineEdge / makeBezierEdge\n * - brepjs 用 organiseBlueprints 处理孔洞 → 本项目用 makeFace 直接构建(OCCT 自动处理内孔)\n * - brepjs 用 sketchOnPlane → 本项目直接在 XY 平面构造然后按需变换\n *\n * opentype.js 路径命令 → OCCT edge 映射:\n * - M (moveTo) → 开始新子路径\n * - L (lineTo) → kernel.makeLineEdge(prev, curr)\n * - C (cubicBezier) → kernel.makeBezierEdge([p0, cp1, cp2, p1])\n * - Q (quadraticBezier) → 转换为三次贝塞尔后用 makeBezierEdge\n * - Z (closePath) → 闭合 wire\n */\n\nimport type { BrepHandle } from '../engine/types'\nimport type { BrepEngineApi } from '../engine/primitives'\nimport type { Font } from 'opentype.js'\nimport type { PathCommand } from 'opentype.js'\nimport { getFont } from './fontRegistry'\n\n/** 点坐标(OCCT 格式) */\ninterface Pt { x: number; y: number; z: number }\n\n/**\n * 将 opentype.js 坐标转为 OCCT 点(XY 平面,Z=0)。\n *\n * opentype.js 的 path 是 **y 向下**(canvas 约定:字形主体在负 y),OCCT 是\n * **y 向上**,故这里翻转 y —— 与 `../svg/svg-to-solid.ts` 的 `flipY`\n * (SVG Y-down → OCCT Y-up)同一约定。X 不翻转,文字从左到右。\n */\nfunction toPt(x: number, y: number): Pt {\n return { x, y: -y, z: 0 }\n}\n\n/**\n * 将 opentype.js 二次贝塞尔转换为三次贝塞尔的控制点。\n *\n * Q: P0 → P1 (cp) → P2\n * C: P0 → C1 → C2 → P2\n * C1 = P0 + 2/3 * (P1 - P0) = (2*P1 + P0) / 3\n * C2 = P2 + 2/3 * (P1 - P2) = (2*P1 + P2) / 3\n */\nfunction quadToCubic(\n p0: Pt, cp: Pt, p2: Pt,\n): [Pt, Pt] {\n const c1 = {\n x: (2 * cp.x + p0.x) / 3,\n y: (2 * cp.y + p0.y) / 3,\n z: 0,\n }\n const c2 = {\n x: (2 * cp.x + p2.x) / 3,\n y: (2 * cp.y + p2.y) / 3,\n z: 0,\n }\n return [c1, c2]\n}\n\n/**\n * 用 OCCT 贝塞尔边构造一段三次贝塞尔曲线。\n *\n * 三次贝塞尔曲线有 4 个控制点:P0, C1, C2, P1。\n * occt-wasm 的 makeBezierEdge 接受 Vec3[] 控制点数组。\n */\nfunction makeBezierFromPoints(\n kernel: BrepEngineApi,\n p0: Pt, c1: Pt, c2: Pt, p1: Pt,\n): BrepHandle {\n return kernel.makeBezierEdge([p0, c1, c2, p1])\n}\n\n/**\n * 将文字转换为 OCCT wire 数组(每个闭合轮廓一个 wire)。\n *\n * @param kernel OCCT 内核\n * @param text 文字字符串\n * @param options 配置选项\n * @returns BrepHandle 数组(每个是一个闭合 wire)\n */\nexport function textBlueprints(\n kernel: BrepEngineApi,\n text: string,\n options: {\n startX?: number\n startY?: number\n fontSize?: number\n fontFamily?: string\n } = {},\n): BrepHandle[] {\n const { startX = 0, startY = 0, fontSize = 16, fontFamily = 'default' } = options\n\n let font: Font | undefined = getFont(fontFamily)\n if (!font) font = getFont()\n if (!font) {\n throw new Error('[textBlueprints] No fonts loaded. Call loadFont() before using text functions.')\n }\n\n // 检查缺字形(CJK 字符在 OpenSans Regular 中没有对应字形)\n for (const ch of text) {\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') continue\n const glyph = font.charToGlyph(ch)\n if (glyph.index === 0) {\n throw new Error(\n `[textBlueprints] Character \"${ch}\" (U+${ch.codePointAt(0)!.toString(16).toUpperCase()}) ` +\n `not found in font. If it is a CJK character, a CJK font must be loaded.`,\n )\n }\n }\n\n // 获取文字路径\n const path = font.getPath(text, startX, startY, fontSize)\n const commands = path.commands as PathCommand[]\n\n const wires: BrepHandle[] = []\n const allEdges: BrepHandle[] = []\n\n let currentEdges: BrepHandle[] = []\n let lastPt: Pt | null = null\n let subpathStart: Pt | null = null\n\n for (const cmd of commands) {\n switch (cmd.type) {\n case 'M': {\n // 开始新子路径 — 如果当前有 edges,先构建 wire\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n currentEdges = []\n }\n lastPt = toPt(cmd.x!, cmd.y!)\n subpathStart = lastPt\n break\n }\n case 'L': {\n if (!lastPt) {\n lastPt = toPt(cmd.x!, cmd.y!)\n subpathStart = lastPt\n break\n }\n const curr = toPt(cmd.x!, cmd.y!)\n // 跳过零长度边\n if (Math.abs(curr.x - lastPt.x) > 1e-9 || Math.abs(curr.y - lastPt.y) > 1e-9) {\n const edge = kernel.makeLineEdge(lastPt, curr)\n currentEdges.push(edge)\n allEdges.push(edge)\n }\n lastPt = curr\n break\n }\n case 'Q': {\n if (!lastPt) break\n const cp = toPt(cmd.x1!, cmd.y1!)\n const endPt = toPt(cmd.x!, cmd.y!)\n // 转换为三次贝塞尔\n const [c1, c2] = quadToCubic(lastPt, cp, endPt)\n const edge = makeBezierFromPoints(kernel, lastPt, c1, c2, endPt)\n currentEdges.push(edge)\n allEdges.push(edge)\n lastPt = endPt\n break\n }\n case 'C': {\n if (!lastPt) break\n const c1 = toPt(cmd.x1!, cmd.y1!)\n const c2 = toPt(cmd.x2!, cmd.y2!)\n const endPt = toPt(cmd.x!, cmd.y!)\n const edge = makeBezierFromPoints(kernel, lastPt, c1, c2, endPt)\n currentEdges.push(edge)\n allEdges.push(edge)\n lastPt = endPt\n break\n }\n case 'Z': {\n // 闭合 — 如果有起点,添加闭合边\n if (subpathStart && lastPt &&\n (Math.abs(subpathStart.x - lastPt.x) > 1e-9 || Math.abs(subpathStart.y - lastPt.y) > 1e-9)) {\n const edge = kernel.makeLineEdge(lastPt, subpathStart)\n currentEdges.push(edge)\n allEdges.push(edge)\n }\n // 构建 wire\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n currentEdges = []\n }\n lastPt = null\n subpathStart = null\n break\n }\n }\n }\n\n // 处理最后一个未闭合的子路径\n if (currentEdges.length > 0) {\n const wire = kernel.makeWire(currentEdges)\n wires.push(wire)\n allEdges.push(...currentEdges)\n }\n\n // 释放所有边(wire 已共享 TShape)\n for (const e of allEdges) {\n kernel.release(e)\n }\n\n return wires\n}\n\n/**\n * 将文字转换为 OCCT 3D solid(face → extrude → fuse)。\n *\n * @param kernel OCCT 内核\n * @param text 文字字符串\n * @param options 配置选项\n * @returns BrepHandle(合并后的 solid)\n */\nexport function textToSolid(\n kernel: BrepEngineApi,\n text: string,\n options: {\n fontSize?: number\n fontFamily?: string\n depth: number\n },\n): BrepHandle {\n const { fontSize = 16, fontFamily = 'default', depth } = options\n\n const wires = textBlueprints(kernel, text, { fontSize, fontFamily })\n\n if (wires.length === 0) {\n throw new Error('[textToSolid] no wires generated from text')\n }\n\n // 为每个 wire 创建 face → extrude\n const solids: BrepHandle[] = []\n for (const wire of wires) {\n try {\n const face = kernel.makeFace(wire)\n const solid = kernel.extrude(face, 0, 0, depth)\n kernel.release(face)\n solids.push(solid)\n } catch {\n // 某些 wire 可能无法构建 face(如开放线框)— 跳过\n }\n kernel.release(wire)\n }\n\n if (solids.length === 0) {\n throw new Error('[textToSolid] no solids generated from wires')\n }\n\n // Fuse 所有 solid\n let result = solids[0]\n for (let i = 1; i < solids.length; i++) {\n const prev = result\n result = kernel.fuse(prev, solids[i])\n kernel.release(prev)\n kernel.release(solids[i])\n }\n\n return result\n}\n"]}
|
|
@@ -20,9 +20,18 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { type BrepKitKernel } from './brepkitWasm.js';
|
|
22
22
|
import type { BrepEngineApi } from '../brep/engine/primitives.js';
|
|
23
|
-
/** brepkit 适配器返回类型:BrepEngineApi + brepkit
|
|
23
|
+
/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断 + 网格实体原语。 */
|
|
24
24
|
type BrepkitEngineExtras = BrepEngineApi & {
|
|
25
25
|
getMeshFallbackCount(): number;
|
|
26
|
+
/**
|
|
27
|
+
* 网格实体原语(`brep/mesh-solid.ts` 的 `MeshSolidKernelOps`)。
|
|
28
|
+
*
|
|
29
|
+
* 为什么放在适配器而不是 L1 契约面:`weldShellsAndFaces` / `unifyFaces` 是
|
|
30
|
+
* brepkit **内核私有**的缝合/合并原语(L1 `BrepEngineApi` 没有对应概念——
|
|
31
|
+
* OCCT 侧用 `sew`+`unifySameDomain` 才有等价语义,形态不同)。挂在适配器
|
|
32
|
+
* 返回对象上,网格后端(`MeshSolidBackend`)经端口取用,契约面保持干净。
|
|
33
|
+
*/
|
|
34
|
+
meshSolid: import('../brep/mesh-solid.js').MeshSolidKernelOps;
|
|
26
35
|
};
|
|
27
36
|
/**
|
|
28
37
|
* 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。
|
|
@@ -41,7 +50,14 @@ export declare function createBrepkitPrimitives(): Promise<BrepkitEngineExtras>;
|
|
|
41
50
|
* @returns the live brepkit wasm kernel singleton.
|
|
42
51
|
*/
|
|
43
52
|
export declare function getBrepkitKernel(): BrepKitKernel;
|
|
44
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* 释放内核单例(测试收尾用;宿主常驻不需调用)。
|
|
55
|
+
*
|
|
56
|
+
* GOTCHA(2026-10-01 修复):旧实现只 `free()` 内核、**不重置** brepkitWasm.ts 里
|
|
57
|
+
* 缓存的 `initPromise`,也不丢 memo 化的原语对象 → 第二次 `createBrepkitPrimitives()`
|
|
58
|
+
* 拿到**已释放**的内核,随后一切内核调用报 `null pointer passed to rust`
|
|
59
|
+
* (实测:`BrepKernel.makeBox`)。现在三样一起清:内核、initPromise、memo 原语。
|
|
60
|
+
*/
|
|
45
61
|
export declare function disposeBrepkit(): void;
|
|
46
62
|
/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */
|
|
47
63
|
export type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brepkitKernel.d.ts","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"brepkitKernel.d.ts","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAGrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAoO9D,6DAA6D;AAC7D,KAAK,mBAAmB,GAAG,aAAa,GAAG;IACzC,oBAAoB,IAAI,MAAM,CAAA;IAC9B;;;;;;;OAOG;IACH,SAAS,EAAE,OAAO,oBAAoB,EAAE,kBAAkB,CAAA;CAC3D,CAAA;AAkDD;;;;;GAKG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA6mC5E;AAwDD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAQrC;AAED,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAA"}
|