@faicad/faijs 0.13.2 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/api-namespace.d.ts +7 -0
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +44 -17
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean.d.ts +19 -0
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +71 -12
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +12 -8
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/compound-geom.d.ts +45 -0
- package/dist/api/compound-geom.d.ts.map +1 -0
- package/dist/api/compound-geom.js +85 -0
- package/dist/api/compound-geom.js.map +1 -0
- package/dist/api/edge-ref.d.ts.map +1 -1
- package/dist/api/edge-ref.js +7 -4
- package/dist/api/edge-ref.js.map +1 -1
- package/dist/api/engrave.d.ts.map +1 -1
- package/dist/api/engrave.js +1 -0
- package/dist/api/engrave.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +131 -3
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/face-ref.d.ts.map +1 -1
- package/dist/api/face-ref.js +7 -4
- package/dist/api/face-ref.js.map +1 -1
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +6 -5
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/cad/script-face.d.ts +1 -1
- package/dist/api/generated/cad/script-face.d.ts.map +1 -1
- package/dist/api/generated/cad/script-face.js +1 -2
- package/dist/api/generated/cad/script-face.js.map +1 -1
- package/dist/api/generated/operations.js +16 -16
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js +0 -2
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/script-face.d.ts +1 -7
- package/dist/api/generated/script-face.d.ts.map +1 -1
- package/dist/api/generated/script-face.js +2 -4
- package/dist/api/generated/script-face.js.map +1 -1
- package/dist/api/generated/sketching.js +1 -1
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/topology.d.ts +0 -56
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +19 -68
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/import-brep.d.ts +36 -0
- package/dist/api/import-brep.d.ts.map +1 -0
- package/dist/api/import-brep.js +72 -0
- package/dist/api/import-brep.js.map +1 -0
- package/dist/api/import-step.d.ts +28 -0
- package/dist/api/import-step.d.ts.map +1 -0
- package/dist/api/import-step.js +57 -0
- package/dist/api/import-step.js.map +1 -0
- package/dist/api/index.d.ts +8 -12
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +22 -16
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-op.d.ts.map +1 -1
- package/dist/api/internal/compat-op.js +2 -1
- package/dist/api/internal/compat-op.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +3 -1
- package/dist/api/internal/compat-projection.d.ts.map +1 -1
- package/dist/api/internal/compat-projection.js +8 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/replica-role-table.d.ts +36 -0
- package/dist/api/internal/replica-role-table.d.ts.map +1 -0
- package/dist/api/internal/replica-role-table.js +73 -0
- package/dist/api/internal/replica-role-table.js.map +1 -0
- package/dist/api/internal/result-unwrap.d.ts +3 -1
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +2 -2
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/knurl.d.ts.map +1 -1
- package/dist/api/knurl.js +1 -0
- package/dist/api/knurl.js.map +1 -1
- package/dist/api/occt-kernel-bridge.d.ts +105 -27
- package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
- package/dist/api/occt-kernel-bridge.js +255 -41
- package/dist/api/occt-kernel-bridge.js.map +1 -1
- package/dist/api/pattern.d.ts +32 -0
- package/dist/api/pattern.d.ts.map +1 -0
- package/dist/api/pattern.js +85 -0
- package/dist/api/pattern.js.map +1 -0
- package/dist/api/place.d.ts +35 -0
- package/dist/api/place.d.ts.map +1 -0
- package/dist/api/place.js +113 -0
- package/dist/api/place.js.map +1 -0
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +10 -3
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/replicate.d.ts +145 -0
- package/dist/api/replicate.d.ts.map +1 -0
- package/dist/api/replicate.js +351 -0
- package/dist/api/replicate.js.map +1 -0
- package/dist/api/revolve.d.ts +36 -0
- package/dist/api/revolve.d.ts.map +1 -0
- package/dist/api/revolve.js +165 -0
- package/dist/api/revolve.js.map +1 -0
- package/dist/api/screw.d.ts.map +1 -1
- package/dist/api/screw.js +1 -0
- package/dist/api/screw.js.map +1 -1
- package/dist/api/sdf.d.ts.map +1 -1
- package/dist/api/sdf.js +1 -0
- package/dist/api/sdf.js.map +1 -1
- package/dist/api/sketch.d.ts.map +1 -1
- package/dist/api/sketch.js +1 -0
- package/dist/api/sketch.js.map +1 -1
- package/dist/api/split.d.ts +31 -0
- package/dist/api/split.d.ts.map +1 -0
- package/dist/api/split.js +96 -0
- package/dist/api/split.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +17 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +86 -66
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface/projection-overrides.d.ts.map +1 -1
- package/dist/api/surface/projection-overrides.js +6 -0
- package/dist/api/surface/projection-overrides.js.map +1 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +65 -3
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/api/transform.d.ts +4 -0
- package/dist/api/transform.d.ts.map +1 -1
- package/dist/api/transform.js +44 -12
- package/dist/api/transform.js.map +1 -1
- package/dist/boolean/deriveNormals.d.ts +5 -4
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +24 -7
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/brep/brep-ops.d.ts +34 -1
- package/dist/brep/brep-ops.d.ts.map +1 -1
- package/dist/brep/brep-ops.js +62 -22
- package/dist/brep/brep-ops.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +66 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +44 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -5
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +246 -9
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +96 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/types.d.ts +66 -6
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brep/export/step.d.ts.map +1 -1
- package/dist/brep/export/step.js +6 -1
- package/dist/brep/export/step.js.map +1 -1
- package/dist/brep/face-evolution.d.ts +78 -8
- package/dist/brep/face-evolution.d.ts.map +1 -1
- package/dist/brep/face-evolution.js +130 -17
- package/dist/brep/face-evolution.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +108 -12
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +6 -28
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -17
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +13 -0
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +27 -0
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +46 -3
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +48 -3
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +4 -4
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +7 -4
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
- package/dist/cad-runtime/direct-executor.js +14 -4
- package/dist/cad-runtime/direct-executor.js.map +1 -1
- package/dist/cad-runtime/module-registry.d.ts +3 -1
- package/dist/cad-runtime/module-registry.d.ts.map +1 -1
- package/dist/cad-runtime/module-registry.js +13 -1
- package/dist/cad-runtime/module-registry.js.map +1 -1
- package/dist/cad-runtime/runtime-concurrent-error.d.ts +38 -0
- package/dist/cad-runtime/runtime-concurrent-error.d.ts.map +1 -0
- package/dist/cad-runtime/runtime-concurrent-error.js +43 -0
- package/dist/cad-runtime/runtime-concurrent-error.js.map +1 -0
- package/dist/cad-runtime/runtime.d.ts +52 -2
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +180 -9
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/define-op.d.ts +22 -0
- package/dist/define-op.d.ts.map +1 -1
- package/dist/define-op.js +82 -12
- package/dist/define-op.js.map +1 -1
- package/dist/env-agnostic.d.ts +38 -0
- package/dist/env-agnostic.d.ts.map +1 -0
- package/dist/env-agnostic.js +29 -0
- package/dist/env-agnostic.js.map +1 -0
- package/dist/fcstd/attachment.d.ts +8 -1
- package/dist/fcstd/attachment.d.ts.map +1 -1
- package/dist/fcstd/attachment.js +7 -1
- package/dist/fcstd/attachment.js.map +1 -1
- package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
- package/dist/fcstd/build-fai-zip.js +12 -7
- package/dist/fcstd/build-fai-zip.js.map +1 -1
- package/dist/fcstd/codegen.d.ts +10 -1
- package/dist/fcstd/codegen.d.ts.map +1 -1
- package/dist/fcstd/codegen.js +158 -49
- package/dist/fcstd/codegen.js.map +1 -1
- package/dist/fcstd/contour.d.ts.map +1 -1
- package/dist/fcstd/contour.js +23 -24
- package/dist/fcstd/contour.js.map +1 -1
- package/dist/fcstd/convert.d.ts +2 -18
- package/dist/fcstd/convert.d.ts.map +1 -1
- package/dist/fcstd/convert.js +35 -53
- package/dist/fcstd/convert.js.map +1 -1
- package/dist/fcstd/expressions.d.ts +24 -0
- package/dist/fcstd/expressions.d.ts.map +1 -1
- package/dist/fcstd/expressions.js +91 -0
- package/dist/fcstd/expressions.js.map +1 -1
- package/dist/fcstd/external-geo.d.ts +12 -1
- package/dist/fcstd/external-geo.d.ts.map +1 -1
- package/dist/fcstd/external-geo.js +15 -1
- package/dist/fcstd/external-geo.js.map +1 -1
- package/dist/fcstd/feature-translate.d.ts +21 -1
- package/dist/fcstd/feature-translate.d.ts.map +1 -1
- package/dist/fcstd/feature-translate.js +124 -8
- package/dist/fcstd/feature-translate.js.map +1 -1
- package/dist/fcstd/structural-types.d.ts +83 -0
- package/dist/fcstd/structural-types.d.ts.map +1 -0
- package/dist/fcstd/structural-types.js +121 -0
- package/dist/fcstd/structural-types.js.map +1 -0
- package/dist/index.d.ts +7 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -16
- package/dist/index.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts +71 -0
- package/dist/lang/determinism-scanner.d.ts.map +1 -0
- package/dist/lang/determinism-scanner.js +625 -0
- package/dist/lang/determinism-scanner.js.map +1 -0
- package/dist/lang/symbol-table.d.ts +31 -0
- package/dist/lang/symbol-table.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +13 -19
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +13 -19
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/symbol-table.js +50 -1
- package/dist/lang/symbol-table.js.map +1 -1
- package/dist/mesh/creased-normals.d.ts +50 -0
- package/dist/mesh/creased-normals.d.ts.map +1 -0
- package/dist/mesh/creased-normals.js +114 -0
- package/dist/mesh/creased-normals.js.map +1 -0
- package/dist/mesh/decoration-provider.d.ts +53 -0
- package/dist/mesh/decoration-provider.d.ts.map +1 -0
- package/dist/mesh/decoration-provider.js +21 -0
- package/dist/mesh/decoration-provider.js.map +1 -0
- package/dist/mesh/engrave.d.ts +4 -0
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +22 -31
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/index.d.ts +5 -14
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +7 -18
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +2 -1
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +5 -7
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.d.ts +5 -18
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +4 -48
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/stl-loader.d.ts +23 -0
- package/dist/mesh/stl-loader.d.ts.map +1 -0
- package/dist/mesh/stl-loader.js +139 -0
- package/dist/mesh/stl-loader.js.map +1 -0
- package/dist/module-resolver/parse-imports.d.ts +37 -0
- package/dist/module-resolver/parse-imports.d.ts.map +1 -0
- package/dist/module-resolver/parse-imports.js +39 -0
- package/dist/module-resolver/parse-imports.js.map +1 -0
- package/dist/module-resolver/resolver.d.ts +1 -1
- package/dist/module-resolver/resolver.js +2 -2
- package/dist/module-resolver/resolver.js.map +1 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +37 -4
- package/dist/node-host/cli.js.map +1 -1
- package/dist/primitives/text/cjk-font.d.ts +42 -0
- package/dist/primitives/text/cjk-font.d.ts.map +1 -0
- package/dist/primitives/text/cjk-font.js +86 -0
- package/dist/primitives/text/cjk-font.js.map +1 -0
- package/dist/runtime-state.d.ts +18 -6
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +9 -1
- package/dist/runtime-state.js.map +1 -1
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.js +2 -2
- package/dist/sdk.js.map +1 -1
- package/dist/shape.d.ts +15 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +26 -3
- package/dist/shape.js.map +1 -1
- package/dist/symbol-table.d.ts +15 -0
- package/dist/symbol-table.d.ts.map +1 -0
- package/dist/symbol-table.js +14 -0
- package/dist/symbol-table.js.map +1 -0
- package/dist/topology/naming/build-naming.d.ts +14 -30
- package/dist/topology/naming/build-naming.d.ts.map +1 -1
- package/dist/topology/naming/build-naming.js +21 -54
- package/dist/topology/naming/build-naming.js.map +1 -1
- package/dist/topology/naming/capture-topo-ref.d.ts.map +1 -1
- package/dist/topology/naming/capture-topo-ref.js +5 -0
- package/dist/topology/naming/capture-topo-ref.js.map +1 -1
- package/dist/topology/naming/index.d.ts +3 -0
- package/dist/topology/naming/index.d.ts.map +1 -1
- package/dist/topology/naming/index.js +3 -0
- package/dist/topology/naming/index.js.map +1 -1
- package/dist/topology/naming/lineage-resolve.d.ts +80 -0
- package/dist/topology/naming/lineage-resolve.d.ts.map +1 -0
- package/dist/topology/naming/lineage-resolve.js +120 -0
- package/dist/topology/naming/lineage-resolve.js.map +1 -0
- package/dist/topology/naming/lineage.d.ts +349 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -0
- package/dist/topology/naming/lineage.js +398 -0
- package/dist/topology/naming/lineage.js.map +1 -0
- package/dist/topology/naming/migrate.d.ts +41 -0
- package/dist/topology/naming/migrate.d.ts.map +1 -0
- package/dist/topology/naming/migrate.js +88 -0
- package/dist/topology/naming/migrate.js.map +1 -0
- package/dist/topology/naming/role-name.d.ts +176 -0
- package/dist/topology/naming/role-name.d.ts.map +1 -0
- package/dist/topology/naming/role-name.js +344 -0
- package/dist/topology/naming/role-name.js.map +1 -0
- package/dist/topology/naming/roles.d.ts +20 -22
- package/dist/topology/naming/roles.d.ts.map +1 -1
- package/dist/topology/naming/roles.js +51 -49
- package/dist/topology/naming/roles.js.map +1 -1
- package/dist/topology/naming/types.d.ts +65 -18
- package/dist/topology/naming/types.d.ts.map +1 -1
- package/dist/topology/naming/types.js.map +1 -1
- package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
- package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
- package/dist/vendored/brepjs/kernel/index.js +11 -0
- package/dist/vendored/brepjs/kernel/index.js.map +1 -1
- package/dist/weapp.d.ts +4 -4
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +7 -4
- package/dist/weapp.js.map +1 -1
- package/package.json +16 -14
- package/dist/api/compat/index.d.ts +0 -173
- package/dist/api/compat/index.d.ts.map +0 -1
- package/dist/api/compat/index.js +0 -222
- package/dist/api/compat/index.js.map +0 -1
- package/dist/api/compound.d.ts +0 -108
- package/dist/api/compound.d.ts.map +0 -1
- package/dist/api/compound.js +0 -162
- package/dist/api/compound.js.map +0 -1
- package/dist/api/copy.d.ts +0 -39
- package/dist/api/copy.d.ts.map +0 -1
- package/dist/api/copy.js +0 -81
- package/dist/api/copy.js.map +0 -1
- package/dist/api/fai_drill.d.ts +0 -46
- package/dist/api/fai_drill.d.ts.map +0 -1
- package/dist/api/fai_drill.js +0 -230
- package/dist/api/fai_drill.js.map +0 -1
- package/dist/api/fai_extrude.d.ts +0 -36
- package/dist/api/fai_extrude.d.ts.map +0 -1
- package/dist/api/fai_extrude.js +0 -78
- package/dist/api/fai_extrude.js.map +0 -1
- package/dist/api/fai_split.d.ts +0 -46
- package/dist/api/fai_split.d.ts.map +0 -1
- package/dist/api/fai_split.js +0 -253
- package/dist/api/fai_split.js.map +0 -1
- package/dist/api/load.d.ts +0 -39
- package/dist/api/load.d.ts.map +0 -1
- package/dist/api/load.js +0 -82
- package/dist/api/load.js.map +0 -1
- package/dist/api/svgExtrude.d.ts +0 -32
- package/dist/api/svgExtrude.d.ts.map +0 -1
- package/dist/api/svgExtrude.js +0 -73
- package/dist/api/svgExtrude.js.map +0 -1
- package/dist/api/text.d.ts +0 -34
- package/dist/api/text.d.ts.map +0 -1
- package/dist/api/text.js +0 -100
- package/dist/api/text.js.map +0 -1
- package/dist/brep/text/fontTestHelper.d.ts +0 -30
- package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
- package/dist/brep/text/fontTestHelper.js +0 -57
- package/dist/brep/text/fontTestHelper.js.map +0 -1
- package/dist/cad-runtime/module-executor.d.ts +0 -271
- package/dist/cad-runtime/module-executor.d.ts.map +0 -1
- package/dist/cad-runtime/module-executor.js +0 -630
- package/dist/cad-runtime/module-executor.js.map +0 -1
- package/dist/cad-runtime/terminal-dag.d.ts +0 -65
- package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
- package/dist/cad-runtime/terminal-dag.js +0 -167
- package/dist/cad-runtime/terminal-dag.js.map +0 -1
- package/dist/faqts/browser.d.ts +0 -16
- package/dist/faqts/browser.d.ts.map +0 -1
- package/dist/faqts/browser.js +0 -13
- package/dist/faqts/browser.js.map +0 -1
- package/dist/faqts/exec-blob.d.ts +0 -14
- package/dist/faqts/exec-blob.d.ts.map +0 -1
- package/dist/faqts/exec-blob.js +0 -22
- package/dist/faqts/exec-blob.js.map +0 -1
- package/dist/faqts/exec-node.d.ts +0 -15
- package/dist/faqts/exec-node.d.ts.map +0 -1
- package/dist/faqts/exec-node.js +0 -29
- package/dist/faqts/exec-node.js.map +0 -1
- package/dist/faqts/imports.d.ts +0 -74
- package/dist/faqts/imports.d.ts.map +0 -1
- package/dist/faqts/imports.js +0 -95
- package/dist/faqts/imports.js.map +0 -1
- package/dist/faqts/index.d.ts +0 -22
- package/dist/faqts/index.d.ts.map +0 -1
- package/dist/faqts/index.js +0 -21
- package/dist/faqts/index.js.map +0 -1
- package/dist/faqts/node.d.ts +0 -23
- package/dist/faqts/node.d.ts.map +0 -1
- package/dist/faqts/node.js +0 -23
- package/dist/faqts/node.js.map +0 -1
- package/dist/faqts/run.d.ts +0 -62
- package/dist/faqts/run.d.ts.map +0 -1
- package/dist/faqts/run.js +0 -62
- package/dist/faqts/run.js.map +0 -1
- package/dist/faqts/transform.d.ts +0 -43
- package/dist/faqts/transform.d.ts.map +0 -1
- package/dist/faqts/transform.js +0 -35
- package/dist/faqts/transform.js.map +0 -1
- package/dist/lang/compile.d.ts +0 -50
- package/dist/lang/compile.d.ts.map +0 -1
- package/dist/lang/compile.js +0 -368
- package/dist/lang/compile.js.map +0 -1
- package/dist/lang/keep.d.ts +0 -109
- package/dist/lang/keep.d.ts.map +0 -1
- package/dist/lang/keep.js +0 -226
- package/dist/lang/keep.js.map +0 -1
- package/dist/lang/parser.d.ts +0 -91
- package/dist/lang/parser.d.ts.map +0 -1
- package/dist/lang/parser.js +0 -1594
- package/dist/lang/parser.js.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
- package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
- package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
- package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
- package/dist/mesh/drill-hole/drill-types.js +0 -7
- package/dist/mesh/drill-hole/drill-types.js.map +0 -1
- package/dist/mesh/fai_drill.d.ts +0 -21
- package/dist/mesh/fai_drill.d.ts.map +0 -1
- package/dist/mesh/fai_drill.js +0 -92
- package/dist/mesh/fai_drill.js.map +0 -1
- package/dist/mesh/fai_extrude.d.ts +0 -24
- package/dist/mesh/fai_extrude.d.ts.map +0 -1
- package/dist/mesh/fai_extrude.js +0 -42
- package/dist/mesh/fai_extrude.js.map +0 -1
- package/dist/mesh/fai_split.d.ts +0 -164
- package/dist/mesh/fai_split.d.ts.map +0 -1
- package/dist/mesh/fai_split.js +0 -269
- package/dist/mesh/fai_split.js.map +0 -1
- package/dist/primitives/svg-extrude.d.ts +0 -43
- package/dist/primitives/svg-extrude.d.ts.map +0 -1
- package/dist/primitives/svg-extrude.js +0 -78
- package/dist/primitives/svg-extrude.js.map +0 -1
- package/dist/primitives/text/cjk.d.ts +0 -61
- package/dist/primitives/text/cjk.d.ts.map +0 -1
- package/dist/primitives/text/cjk.js +0 -215
- package/dist/primitives/text/cjk.js.map +0 -1
- package/dist/primitives/text-geometry.d.ts +0 -47
- package/dist/primitives/text-geometry.d.ts.map +0 -1
- package/dist/primitives/text-geometry.js +0 -127
- package/dist/primitives/text-geometry.js.map +0 -1
- package/dist/test-helpers.d.ts +0 -31
- package/dist/test-helpers.d.ts.map +0 -1
- package/dist/test-helpers.js +0 -55
- package/dist/test-helpers.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
- package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state.js';
|
|
2
|
+
import { OpError } from './internal/result-unwrap.js';
|
|
3
|
+
import { loadBrep } from '../brep/brep-ops.js';
|
|
4
|
+
import { fromBrep } from '../shape.js';
|
|
5
|
+
/**
|
|
6
|
+
* stdlib import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)
|
|
7
|
+
*
|
|
8
|
+
* 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:
|
|
9
|
+
* - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),
|
|
10
|
+
* OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。
|
|
11
|
+
* - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);
|
|
12
|
+
* `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、
|
|
13
|
+
* 画布语句位置语义),平台侧不要复用它(C7)。
|
|
14
|
+
*
|
|
15
|
+
* 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。
|
|
16
|
+
* STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。
|
|
17
|
+
*
|
|
18
|
+
* @group 创建
|
|
19
|
+
* @inputs 0
|
|
20
|
+
* @async true
|
|
21
|
+
* @qual ok
|
|
22
|
+
* @name import_step
|
|
23
|
+
* @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true
|
|
24
|
+
* @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。
|
|
25
|
+
* @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。
|
|
26
|
+
* @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。
|
|
27
|
+
* @example
|
|
28
|
+
* const a = await cad.import_step({ path: 'D:/models/box.step' })
|
|
29
|
+
*/
|
|
30
|
+
export async function import_step(params) {
|
|
31
|
+
const path = params.path;
|
|
32
|
+
if (typeof path !== 'string' || path.length === 0) {
|
|
33
|
+
throw new OpError('import_step', 'E_ARGS', '[api/import_step] path (string) is required');
|
|
34
|
+
}
|
|
35
|
+
const assets = getBackends().assets;
|
|
36
|
+
if (!assets || !assets.resolveFile) {
|
|
37
|
+
throw new OpError('import_step', 'E_OP_FAILED', '[api/import_step] assets backend (resolveFile) is required');
|
|
38
|
+
}
|
|
39
|
+
const buffer = await assets.resolveFile(path);
|
|
40
|
+
const kernel = getBackends().kernel.brep;
|
|
41
|
+
if (!kernel) {
|
|
42
|
+
throw new BrepUnsupportedError('E_BREP_UNSUPPORTED: import_step requires an OCCT kernel (STEP has no mesh parser)');
|
|
43
|
+
}
|
|
44
|
+
// C6:非实体一等公民(对齐 import_brep)。loadBrep 自适应:CASCADE Topology
|
|
45
|
+
// 文本走 kernel.fromBREP,其余(STEP/STP)走 kernel.importStep。
|
|
46
|
+
const { solid: solidHandle, shape } = loadBrep(kernel, buffer, undefined, undefined, undefined, { allowNonSolid: true });
|
|
47
|
+
// E3(H12):链根建 roleTable——导入文件的面没有语义名,按枚举序命名
|
|
48
|
+
// imported:<i>(同一文件重复导入,枚举序稳定,role 名跨次导入保持一致)。
|
|
49
|
+
const stmtId = String(getCurrentStmt()?.id ?? '');
|
|
50
|
+
const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647);
|
|
51
|
+
const roles = new Map();
|
|
52
|
+
for (let i = 0; i < hashes.length; i++) {
|
|
53
|
+
roles.set(`imported:${i}`, [hashes[i]]);
|
|
54
|
+
}
|
|
55
|
+
return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) });
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=import-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-step.js","sourceRoot":"","sources":["../../src/api/import-step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAA+B;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,6CAA6C,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAEhB,CAAA;IACb,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,OAAO,CACf,aAAa,EACb,aAAa,EACb,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAE7C,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,IAA4B,CAAA;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,oBAAoB,CAC5B,mFAAmF,CACpF,CAAA;IACH,CAAC;IAED,2DAA2D;IAC3D,uDAAuD;IACvD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,QAAQ,CAC5C,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CACzE,CAAA;IACD,4CAA4C;IAC5C,+CAA+C;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAA;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACvF,CAAC","sourcesContent":["import type { Shape } from '../mesh/types'\nimport { getBackends, BrepUnsupportedError, getCurrentStmt } from '../runtime-state'\nimport { OpError } from './internal/result-unwrap'\nimport { loadBrep } from '../brep/brep-ops'\nimport { fromBrep } from '../shape'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n/**\n * stdlib import_step — 任意路径 STEP 文件导入 op(方案 Phase 5 / Q2 真缺口)\n *\n * 与 `import_brep`(容器资产)和 `cad.load`(编辑器 FileRef)的职责切分:\n * - `cad.import_step` 是 faijs **平台**几何 op:单一本地路径(宿主 `resolveFile`),\n * OCCT STEPControl_Reader 读入,返回持 OCCT 句柄 + roleTable 的 Shape。\n * - `import_brep` 读的是容器 `assets/` 里的冻结 BREP 资产(key,去扩展名);\n * `cad.load` 是 `../3d_editor` 的「文件导入 Feature」(key/path/url 三键分流、\n * 画布语句位置语义),平台侧不要复用它(C7)。\n *\n * 非实体(wire/face/shell)一等公民(C6,对齐 import_brep):始终 allowNonSolid。\n * STEP 是 BREP 专属格式:mesh / 无内核模式抛 E_BREP_UNSUPPORTED。\n *\n * @group 创建\n * @inputs 0\n * @async true\n * @qual ok\n * @name import_step\n * @param params.path - 本地绝对路径(宿主 resolveFile 解析)。type:string required:true\n * @note 平台 STEP 导入 op。读文件经宿主资产解析器(`assets.resolveFile`),与 `cad.load` 同一通道;语义为「任意路径 STEP → OCCT 读入的 Shape」。\n * @note 非实体一等(C6):wire/face/shell 一律可导入。需要实体的 op(布尔、up-to 目标面)在**使用点**报错。\n * @returns Promise<Shape> 持 OCCT 句柄的几何(非实体亦可)。\n * @example\n * const a = await cad.import_step({ path: 'D:/models/box.step' })\n */\n\nexport async function import_step(params: Record<string, unknown>): Promise<Shape> {\n const path = params.path\n if (typeof path !== 'string' || path.length === 0) {\n throw new OpError('import_step', 'E_ARGS', '[api/import_step] path (string) is required')\n }\n\n const assets = getBackends().assets as {\n resolveFile?(path: string): Promise<ArrayBuffer>\n } | undefined\n if (!assets || !assets.resolveFile) {\n throw new OpError(\n 'import_step',\n 'E_OP_FAILED',\n '[api/import_step] assets backend (resolveFile) is required',\n )\n }\n\n const buffer = await assets.resolveFile(path)\n\n const kernel = getBackends().kernel.brep as BrepEngineApi | null\n if (!kernel) {\n throw new BrepUnsupportedError(\n 'E_BREP_UNSUPPORTED: import_step requires an OCCT kernel (STEP has no mesh parser)',\n )\n }\n\n // C6:非实体一等公民(对齐 import_brep)。loadBrep 自适应:CASCADE Topology\n // 文本走 kernel.fromBREP,其余(STEP/STP)走 kernel.importStep。\n const { solid: solidHandle, shape } = loadBrep(\n kernel, buffer, undefined, undefined, undefined, { allowNonSolid: true },\n )\n // E3(H12):链根建 roleTable——导入文件的面没有语义名,按枚举序命名\n // imported:<i>(同一文件重复导入,枚举序稳定,role 名跨次导入保持一致)。\n const stmtId = String(getCurrentStmt()?.id ?? '')\n const hashes = kernel.subShapeHashes(solidHandle, 'face', 2147483647)\n const roles = new Map<string, number[]>()\n for (let i = 0; i < hashes.length; i++) {\n roles.set(`imported:${i}`, [hashes[i]!])\n }\n return fromBrep(shape, { solid: solidHandle, roleTable: new Map([[stmtId, roles]]) })\n}\n"]}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -11,30 +11,26 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export { box, sphere, cylinder, cone, wedge } from './primitives.js';
|
|
13
13
|
export { translate, rotate_euler, scale, scale3d } from './transform.js';
|
|
14
|
-
export {
|
|
15
|
-
export { fai_drill } from './fai_drill.js';
|
|
16
|
-
export { fai_split } from './fai_split.js';
|
|
17
|
-
export { union, subtract, intersect } from './boolean.js';
|
|
14
|
+
export { union, subtract, intersect, cut } from './boolean.js';
|
|
18
15
|
export { engrave } from './engrave.js';
|
|
19
16
|
export { chamfer } from './chamfer.js';
|
|
20
17
|
export { fillet } from './fillet.js';
|
|
21
|
-
export { text } from './text.js';
|
|
22
18
|
export { screw } from './screw.js';
|
|
23
|
-
export { svgExtrude } from './svgExtrude.js';
|
|
24
19
|
export { sketch } from './sketch.js';
|
|
25
20
|
export { knurl } from './knurl.js';
|
|
26
|
-
export { load } from './load.js';
|
|
27
21
|
export { sdf } from './sdf.js';
|
|
28
|
-
export {
|
|
29
|
-
export { applyTransform } from './compound.js';
|
|
22
|
+
export { applyTransform } from '../mesh/rigid-transform.js';
|
|
30
23
|
export * from './assembly/index.js';
|
|
31
|
-
export {
|
|
32
|
-
export
|
|
24
|
+
export { import_brep } from './import-brep.js';
|
|
25
|
+
export { import_step } from './import-step.js';
|
|
26
|
+
export { compound } from './compound-geom.js';
|
|
27
|
+
export { place } from './place.js';
|
|
33
28
|
export { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom.js';
|
|
34
29
|
export { edgeRef } from './edge-ref.js';
|
|
35
30
|
export { faceRef } from './face-ref.js';
|
|
36
31
|
export { asset } from './asset.js';
|
|
37
|
-
export { solid,
|
|
32
|
+
export { solid, isShape, isCompound } from '../shape.js';
|
|
33
|
+
export { compound as structCompound } from '../shape.js';
|
|
38
34
|
export type { ShapeSlot, SolidShape, CompoundShape, StdShape, ShapeKind } from '../shape.js';
|
|
39
35
|
export * from './generated/script-face.js';
|
|
40
36
|
export { extrude } from './extrude.js';
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAQjE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAKxD,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,UAAU,CAAA;AACrD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAOzF,cAAc,yBAAyB,CAAA;AAOvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAShD,OAAO,EACL,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EACtC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EACnE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAC3C,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,OAAO,GACjB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,MAAM,EAAE,EAAE,EAAE,GAAG,EACf,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAC1D,KAAK,EAAE,SAAS,EAAE,UAAU,EAC5B,IAAI,EAAE,UAAU,EAChB,QAAQ,GACT,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,EAC7D,GAAG,EAAE,OAAO,GACb,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAC3D,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,aAAa,EAC9D,UAAU,EAAE,UAAU,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAA"}
|
package/dist/api/index.js
CHANGED
|
@@ -10,35 +10,41 @@
|
|
|
10
10
|
* 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。
|
|
11
11
|
*/
|
|
12
12
|
export { box, sphere, cylinder, cone, wedge } from './primitives.js';
|
|
13
|
+
// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族
|
|
14
|
+
// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),
|
|
15
|
+
// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;
|
|
16
|
+
// 各 op 的 JSDoc 已带校正后的 @deprecated。
|
|
17
|
+
//
|
|
18
|
+
// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——
|
|
19
|
+
// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。
|
|
13
20
|
export { translate, rotate_euler, scale, scale3d } from './transform.js';
|
|
14
|
-
|
|
15
|
-
// 项目特有的操作,不属于 faijs 平台面。将来会迁往该项目并从 faijs 删除;各 op 的
|
|
16
|
-
// JSDoc 已带 @deprecated。新代码请勿使用。
|
|
17
|
-
export { fai_extrude } from './fai_extrude.js';
|
|
18
|
-
export { fai_drill } from './fai_drill.js';
|
|
19
|
-
export { fai_split } from './fai_split.js';
|
|
20
|
-
export { union, subtract, intersect } from './boolean.js';
|
|
21
|
+
export { union, subtract, intersect, cut } from './boolean.js';
|
|
21
22
|
export { engrave } from './engrave.js';
|
|
22
23
|
export { chamfer } from './chamfer.js';
|
|
23
24
|
export { fillet } from './fillet.js';
|
|
24
|
-
export { text } from './text.js';
|
|
25
25
|
export { screw } from './screw.js';
|
|
26
|
-
export { svgExtrude } from './svgExtrude.js';
|
|
27
26
|
export { sketch } from './sketch.js';
|
|
28
27
|
export { knurl } from './knurl.js';
|
|
29
|
-
export { load } from './load.js';
|
|
30
28
|
export { sdf } from './sdf.js';
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
29
|
+
// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:
|
|
30
|
+
// 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。
|
|
31
|
+
export { applyTransform } from '../mesh/rigid-transform.js';
|
|
32
|
+
// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。
|
|
33
|
+
// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出
|
|
34
|
+
// core,见 @faicad/faijs-extra;装配**求解器**(solve/validate/joints/solvers)
|
|
35
|
+
// 仍是平台能力,留在此处。
|
|
35
36
|
export * from './assembly/index.js';
|
|
36
|
-
|
|
37
|
+
// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──
|
|
38
|
+
export { import_brep } from './import-brep.js';
|
|
39
|
+
export { import_step } from './import-step.js';
|
|
40
|
+
export { compound } from './compound-geom.js';
|
|
41
|
+
export { place } from './place.js';
|
|
37
42
|
export { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom.js';
|
|
38
43
|
export { edgeRef } from './edge-ref.js';
|
|
39
44
|
export { faceRef } from './face-ref.js';
|
|
40
45
|
export { asset } from './asset.js';
|
|
41
|
-
export { solid,
|
|
46
|
+
export { solid, isShape, isCompound } from '../shape.js';
|
|
47
|
+
export { compound as structCompound } from '../shape.js';
|
|
42
48
|
// ── P23:brepjs 兼容面接线(§4.2 / B1 三源一致)──
|
|
43
49
|
//
|
|
44
50
|
// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACjE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * L3 API 面(api/)— faijs 库函数命名空间(替代原 packages/stdlib)\n *\n * 设计文档:docs/plans/2026-09-01-layered-api-architecture.md §D1/D2(P6 迁入 core)\n *\n * 导出全部官方库函数、Shape 构造器与 schema 表。\n * 库函数签名 = .fai.js 源码里的调用形态(无隐式参数);\n * 后端资源经 getBackends() 获取,保留声明经 keep() 表达。\n * 实现来源按 D11:mesh 侧复用 mesh/ 层,brep 侧复用既有 brep/ 层;\n * 缺失 brep 能力时经 D10 桥接调移植树 L2(见各 op 实现)。\n */\n\nexport { box, sphere, cylinder, cone, wedge } from './primitives'\n// `../3d_editor` 消费面(**不是废弃项**,措辞于 2026-09-22 校正):transform 家族\n// (translate/rotate_euler/scale/scale3d)为编辑器应用提供(拖拽 / 时间线语句),\n// 不属 faijs 平台面,但服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**;\n// 各 op 的 JSDoc 已带校正后的 @deprecated。\n//\n// D1(2026-09-23 扩展库拆分,选项 C):四个 transform op **全部留 core**——\n// `translate` 是通用几何变换且是小程序端唯一在用的 transform op,同族不拆散。\nexport { translate, rotate_euler, scale, scale3d } from './transform'\nexport { union, subtract, intersect, cut } from './boolean'\nexport { engrave } from './engrave'\nexport { chamfer } from './chamfer'\nexport { fillet } from './fillet'\nexport { screw } from './screw'\nexport { sketch } from './sketch'\nexport { knurl } from './knurl'\nexport { sdf } from './sdf'\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n// P2-f3:装配子层全量导出(solvePreview/entityFromGeometry 等经此到门面)。\n// A/B 组 op(fai_* / group / assembly / copy / load / text / svgExtrude)已迁出\n// core,见 @faicad/faijs-extra;装配**求解器**(solve/validate/joints/solvers)\n// 仍是平台能力,留在此处。\nexport * from './assembly'\n// ── H11:平台几何 op(方案 §4,替代 FCStd 迁移对编辑器 op 的借用)──\nexport { import_brep } from './import-brep'\nexport { import_step } from './import-step'\nexport { compound } from './compound-geom'\nexport { place } from './place'\nexport { faceNormal, bboxCenter, bboxMin, bboxMax } from './geom'\nexport { edgeRef } from './edge-ref'\nexport { faceRef } from './face-ref'\nexport { asset } from './asset'\nexport { solid, isShape, isCompound } from '../shape'\nexport { compound as structCompound } from '../shape'\nexport type { ShapeSlot, SolidShape, CompoundShape, StdShape, ShapeKind } from '../shape'\n\n// ── P23:brepjs 兼容面接线(§4.2 / B1 三源一致)──\n//\n// ① 生成脚本面 op(与 api-namespace 的 cad 面同源:api/generated/script-face.ts)。\n// 这批 op 经 `compatOp(projectBrepOp(…))` 包装,faijs 形态(Shape 进 / Shape 出、\n// 布尔双形态、brep-only),TS 侧与 `.fai.js` 侧同语义。\nexport * from './generated/script-face'\n// P25: compat extrude/revolve (brep-only, face→prism / face→lathe) share one\n// definition between the TS surface and the cad scripting surface. The fcstd\n// codegen wires Pad/Pocket/Extrusion/Revolution through these (sketch face →\n// cad.extrude / cad.revolve).\n// extrude 是平台手写 op(承载 upTo;长度形态委托生成投影)——见 api/extrude.ts;\n// revolve 仍直接取生成投影。\nexport { extrude } from './extrude'\nexport { revolve } from './generated/operations'\n//\n// ② brepjs 形态的 TS 兼容面(P21)以 `brepjsCompat` 命名空间整体导出(库作者面:\n// 句柄进出、Result 语义)。**op 符号不在此处平铺**——`brepjsCompat.fuse`(brepjs\n// 句柄形态)与脚本面 `fuse`(compatOp 包装的 faijs 形态)是同一 vendored\n// 实现的两个投影,按「一个名字一份实现」红线(§6.3),平铺面只保留脚本面\n// 那份;库作者继续 `import { brepjsCompat } from '@faicad/faijs'` 用上游形态。\n// 此处只平铺**无 op 语义**的组合器与纯工具(Result / 向量 / 平面 / 错误 /\n// 常量),它们在两个面之间语义一致且无同名冲突。\nexport {\n ok, err, isOk, isErr, unwrap, unwrapOr,\n vecAdd, vecSub, vecScale, vecDot, vecCross, vecLength, vecNormalize,\n createPlane, createNamedPlane, resolvePlane,\n kernelError, validationError,\n DEG2RAD, RAD2DEG,\n} from './brepjs-compat'\nexport type {\n Result, Ok, Err,\n Vertex, Edge, Wire, Face, Shell, Solid, CompSolid, Shape3D,\n Plane, PlaneName, PlaneInput,\n Vec3, PointInput,\n Bounds3D,\n} from './brepjs-compat'\n// ── P24(§8.1):库建造工厂与 Result 组合器平铺。它们不是脚本面 op(不在\n// 符号表/`cad` 面),也不是 dual op——是库作者面的函数,与 P23 平铺的纯\n// 组合器同一规则(`makeExternalGear`/`thread`/`map` 无同名冲突,§6.3)。\nexport {\n makeExternalGear, makeInternalGear, makePlanetaryGear, thread,\n map, andThen,\n} from './brepjs-compat'\nexport type {\n ExternalGearParams, InternalGearParams, PlanetaryGearParams,\n GearGeometry, GearResult, PlanetaryGearAssembly, ThreadOptions,\n ValidSolid, ClosedWire,\n} from './brepjs-compat'\nexport * as brepjsCompat from './brepjs-compat'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-op.d.ts","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAEL,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,aAAa,EAGnB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,kFAAkF;AAClF,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IACtE,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAA;CACb;AAID;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AA6ED,gFAAgF;AAChF,KAAK,WAAW,GAAG;IAAE,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAA;CAAE,CAAA;AAElD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACnC,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"compat-op.d.ts","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAEL,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,aAAa,EAGnB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,kFAAkF;AAClF,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IACtE,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAA;CACb;AAID;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D;AA6ED,gFAAgF;AAChF,KAAK,WAAW,GAAG;IAAE,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAA;CAAE,CAAA;AAElD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CACtB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACnC,IAAI,EAAE,UAAU,GACf,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAcxD"}
|
|
@@ -167,7 +167,7 @@ function buildAdapter(fn, spec) {
|
|
|
167
167
|
* @returns the compat op facade, carrying dual-op metadata.
|
|
168
168
|
*/
|
|
169
169
|
export function compatOp(fn, spec) {
|
|
170
|
-
const { outputs, capabilities, schema, slotMap } = spec;
|
|
170
|
+
const { outputs, capabilities, schema, slotMap, naming } = spec;
|
|
171
171
|
// `outputs` flows through defineOp's own wrapping path: the adapter adopts
|
|
172
172
|
// per declared field, then defineOp wraps — isShape passthrough, so no
|
|
173
173
|
// double wrapping (§3.2).
|
|
@@ -178,6 +178,7 @@ export function compatOp(fn, spec) {
|
|
|
178
178
|
outputs,
|
|
179
179
|
schema,
|
|
180
180
|
slotMap,
|
|
181
|
+
naming,
|
|
181
182
|
});
|
|
182
183
|
}
|
|
183
184
|
//# sourceMappingURL=compat-op.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-op.js","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * compat-op — lift an arbitrary brepjs-shaped function into a faijs statement\n * op, built **on top of** defineOp (single implementation entry, v1).\n *\n * Design: docs/plans/2026-09-06-compatop-on-defineop.md §3\n *\n * compatOp is NOT a second implementation path parallel to defineOp: every\n * shared mechanism is owned by defineOp — dispatch (dispatchPath + capability\n * routing), the Result boundary (runImpl + unwrapResult), product wrapping\n * (wrapBrepOne / wrapByKeys), `DUAL_OP_META` mounting and\n * `assertLibConforms` validation. compatOp only does two things:\n * - spec pass-through: `CompatSpec` is a combinatorial inheritance of\n * `DualOpOptions` (single source of truth, fields auto-sync — §3.1);\n * - adapter construction: a brepjs-shaped bridge feeding the brep impl — the\n * three bridging steps that cannot be shared (all reuse shared\n * infrastructure, §3.2):\n * 1. borrowDeep — inward borrow: deep walk, any faijs Shape →\n * borrowBrepjsShape view (zero-copy; library-private handles pass\n * through untouched);\n * 2. call + unwrap — callBrepjs through the shared unwrapResult\n * (`err` throws an OpError carrying the op name + BrepError code);\n * async library fns are awaited first, so `Promise<Result<…>>` —\n * the shape every kernel-awaiting library returns — unwraps too;\n * 3. adoptOut — outward adoption: top-level handle / `outputs`-declared\n * fields (single handle or handle array) → adoptEntity\n * (unregister finalizer + fromHandle).\n *\n * The keep / keepHidden contract is untouched: compatOp neither blocks nor\n * rewrites it — any function running inside a DirectExecutor context can use\n * function-body declarations (C1), and call-site declarations override them\n * (`lang/keep.ts` resolveKeep). The decorated product therefore behaves like\n * any defineOp product: `keep`-safe, capability-aware, multi-output\n * (`DUAL_OP_META.outputs` visible).\n *\n * No self-invented fields: `CompatSpec` extends `Omit<DualOpOptions, 'mesh' |\n * 'brep'>` and declares nothing else; the only tweak is `name` tightened\n * (inherited field, not a new one).\n *\n * @module\n */\n\nimport {\n defineOp,\n DUAL_OP_META,\n type DualOpMeta,\n type DualOpOptions,\n type BrepImpl,\n type BrepProduct,\n} from '../../define-op'\nimport { isShape } from '../../shape'\nimport { borrowBrepjsShape, adoptEntity, callBrepjs } from './l3-bridge'\nimport { unwrapResult } from './result-unwrap'\nimport type { Shape } from '../../mesh/types'\n\n/** compatOp's static spec: combinatorial inheritance (single source of truth). */\nexport interface CompatSpec extends Omit<DualOpOptions, 'mesh' | 'brep'> {\n /** Op name (error messages + metadata; required, unlike defineOp's optional name). */\n name: string\n}\n\nconst MAX_WALK_DEPTH = 4\n\n/**\n * Inward bridging step: deep walk with faijs Shapes replaced by borrowed\n * brepjs views (zero-copy); everything else passes through.\n * Class instances are not traversed (defensive); library-private handles\n * pass through (§4.3.4 of the design).\n *\n * @param v - the value to borrow from (plain object, array, or primitive).\n * @param depth - current traversal depth (guard against deep recursion).\n * @returns the value with faijs Shapes replaced by borrowed views.\n */\nexport function borrowDeep(v: unknown, depth: number): unknown {\n if (depth > MAX_WALK_DEPTH || v === null || typeof v !== 'object') return v\n if (isShape(v)) return borrowBrepjsShape(v)\n if (Array.isArray(v)) return v.map((x) => borrowDeep(x, depth + 1))\n if (Object.getPrototypeOf(v) !== Object.prototype) return v\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(v)) out[k] = borrowDeep(x, depth + 1)\n return out\n}\n\n/**\n * Statement-boundary unwrap — `err` becomes an execution error carrying the op\n * name and the `BrepError` code. Delegates to the shared\n * {@link unwrapResult} so the compat boundary and defineOp's Result boundary\n * share one leaf implementation (no drift).\n *\n * @param r - the Result-like value to unwrap.\n * @param name - the op name used in error messages.\n * @returns the unwrapped ok value.\n */\nexport function unwrapOrThrow(r: unknown, name: string): unknown {\n return unwrapResult(r, name)\n}\n\n/**\n * Bridging step: outward adoption — top-level handle or `outputs`-declared\n * fields → adoptEntity (unregister finalizer + fromHandle). `outputs` may also\n * name an array field of handles; every element is adopted individually.\n * Deduplication of already-adopted handles lives inside adoptEntity. A field\n * already being a faijs Shape passes through untouched (no double adoption).\n *\n * @param v - the library product.\n * @param spec - the compat spec (name + optional `outputs`).\n * @param segments - caller-provided `segments` (裁决 1,§5.2), forwarded so the\n * adopted handles' tessellation honors it.\n * @returns the adopted record / Shape, or the plain data untouched.\n */\nfunction adoptOut(v: unknown, spec: CompatSpec, segments?: number): unknown {\n if (isShape(v)) return v\n if (spec.outputs && typeof v === 'object' && v !== null && !Array.isArray(v)) {\n const rec = v as Record<string, unknown>\n for (const f of spec.outputs) {\n const field = rec[f]\n rec[f] = Array.isArray(field)\n ? field.map((x) => adoptEntity(x, spec.name, segments))\n : adoptEntity(field, spec.name, segments)\n }\n return v\n }\n return adoptEntity(v, spec.name, segments)\n}\n\n/**\n * Read the caller-supplied tessellation density from a compat op's args.\n *\n * 裁决 1:faijs 的 `segments` 显式超集在 brepjs 投影侧也必须可选;这里从调用点\n * 的尾参 options(或任一 plain-object 实参)抓取 `segments`,在产出句柄被收编为\n * faijs Shape 时透传给 `fromHandle` 的三角化(§5.2 机制)。默认不传 = 由\n * handle-bridge 的 64 兜底。\n */\nfunction readSegmentsFromArgs(args: unknown[]): number | undefined {\n for (let i = args.length - 1; i >= 0; i--) {\n const a = args[i]\n if (\n a !== null &&\n typeof a === 'object' &&\n !Array.isArray(a) &&\n Object.getPrototypeOf(a) === Object.prototype\n ) {\n const seg = (a as Record<string, unknown>).segments\n if (typeof seg === 'number' && Number.isFinite(seg)) return seg\n }\n }\n return undefined\n}\n\n/**\n * Build the brep-only adapter: borrow inputs → call the vendor function through\n * the shared unwrap → adopt the product (with the caller's `segments`,\n * 裁决 1/§5.2). The adapter never dispatches and never mounts metadata —\n * those are defineOp's.\n *\n * @param fn the brepjs-shaped function (dual-form normalization inside, D11).\n * @param spec the static op spec (name + options pass-through).\n * @returns a `BrepImpl` compatible with defineOp's brep-only decl.\n */\nfunction buildAdapter(fn: (...args: unknown[]) => unknown, spec: CompatSpec): BrepImpl<unknown[]> {\n return async (...args: unknown[]): Promise<BrepProduct> => {\n const borrowed = args.map((a) => borrowDeep(a, 0))\n // Async library fns are supported: a library that awaits its kernel (every\n // `@faicad/fai-cq-gears` factory does — `await getGearKernel()`) returns\n // `Promise<Result<…>>`, and the shared unwrap is a sync leaf that only\n // recognizes settled Result records. Awaiting a non-promise product is a\n // no-op, so sync libraries are unaffected.\n const value = unwrapOrThrow(await callBrepjs(fn as never, borrowed), spec.name)\n return adoptOut(value, spec, readSegmentsFromArgs(args)) as BrepProduct\n }\n}\n\n/** Carrier of the DualOpMeta mounted by defineOp (same shape as defineOp's). */\ntype MetaCarrier = { [DUAL_OP_META]?: DualOpMeta }\n\n/**\n * Lift a brepjs-shaped function into a defineOp-decorated op facade (brep-only).\n *\n * The decorated product is identical to a defineOp product: same `DUAL_OP_META`\n * field set (kind 'dual-op', brep impl, name, capabilities, outputs, schema,\n * slotMap), same dispatch semantics, same Result boundary. The adapter carries\n * only the brepjs bridging (borrow / call / adopt); every other mechanism\n * belongs to defineOp.\n *\n * @param fn the brepjs-shaped function.\n * @param spec the static spec (name required; capabilities/outputs/slotMap/\n * schema pass through and take effect).\n * @returns the compat op facade, carrying dual-op metadata.\n */\nexport function compatOp(\n fn: (...args: unknown[]) => unknown,\n spec: CompatSpec,\n): ((...args: unknown[]) => Promise<Shape>) & MetaCarrier {\n const { outputs, capabilities, schema, slotMap } = spec\n // `outputs` flows through defineOp's own wrapping path: the adapter adopts\n // per declared field, then defineOp wraps — isShape passthrough, so no\n // double wrapping (§3.2).\n return defineOp({\n brep: buildAdapter(fn, spec),\n name: spec.name,\n capabilities,\n outputs,\n schema,\n slotMap,\n }) as unknown as ((...args: unknown[]) => Promise<Shape>) & MetaCarrier\n}"]}
|
|
1
|
+
{"version":3,"file":"compat-op.js","sourceRoot":"","sources":["../../../src/api/internal/compat-op.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * compat-op — lift an arbitrary brepjs-shaped function into a faijs statement\n * op, built **on top of** defineOp (single implementation entry, v1).\n *\n * Design: docs/plans/2026-09-06-compatop-on-defineop.md §3\n *\n * compatOp is NOT a second implementation path parallel to defineOp: every\n * shared mechanism is owned by defineOp — dispatch (dispatchPath + capability\n * routing), the Result boundary (runImpl + unwrapResult), product wrapping\n * (wrapBrepOne / wrapByKeys), `DUAL_OP_META` mounting and\n * `assertLibConforms` validation. compatOp only does two things:\n * - spec pass-through: `CompatSpec` is a combinatorial inheritance of\n * `DualOpOptions` (single source of truth, fields auto-sync — §3.1);\n * - adapter construction: a brepjs-shaped bridge feeding the brep impl — the\n * three bridging steps that cannot be shared (all reuse shared\n * infrastructure, §3.2):\n * 1. borrowDeep — inward borrow: deep walk, any faijs Shape →\n * borrowBrepjsShape view (zero-copy; library-private handles pass\n * through untouched);\n * 2. call + unwrap — callBrepjs through the shared unwrapResult\n * (`err` throws an OpError carrying the op name + BrepError code);\n * async library fns are awaited first, so `Promise<Result<…>>` —\n * the shape every kernel-awaiting library returns — unwraps too;\n * 3. adoptOut — outward adoption: top-level handle / `outputs`-declared\n * fields (single handle or handle array) → adoptEntity\n * (unregister finalizer + fromHandle).\n *\n * The keep / keepHidden contract is untouched: compatOp neither blocks nor\n * rewrites it — any function running inside a DirectExecutor context can use\n * function-body declarations (C1), and call-site declarations override them\n * (`lang/keep.ts` resolveKeep). The decorated product therefore behaves like\n * any defineOp product: `keep`-safe, capability-aware, multi-output\n * (`DUAL_OP_META.outputs` visible).\n *\n * No self-invented fields: `CompatSpec` extends `Omit<DualOpOptions, 'mesh' |\n * 'brep'>` and declares nothing else; the only tweak is `name` tightened\n * (inherited field, not a new one).\n *\n * @module\n */\n\nimport {\n defineOp,\n DUAL_OP_META,\n type DualOpMeta,\n type DualOpOptions,\n type BrepImpl,\n type BrepProduct,\n} from '../../define-op'\nimport { isShape } from '../../shape'\nimport { borrowBrepjsShape, adoptEntity, callBrepjs } from './l3-bridge'\nimport { unwrapResult } from './result-unwrap'\nimport type { Shape } from '../../mesh/types'\n\n/** compatOp's static spec: combinatorial inheritance (single source of truth). */\nexport interface CompatSpec extends Omit<DualOpOptions, 'mesh' | 'brep'> {\n /** Op name (error messages + metadata; required, unlike defineOp's optional name). */\n name: string\n}\n\nconst MAX_WALK_DEPTH = 4\n\n/**\n * Inward bridging step: deep walk with faijs Shapes replaced by borrowed\n * brepjs views (zero-copy); everything else passes through.\n * Class instances are not traversed (defensive); library-private handles\n * pass through (§4.3.4 of the design).\n *\n * @param v - the value to borrow from (plain object, array, or primitive).\n * @param depth - current traversal depth (guard against deep recursion).\n * @returns the value with faijs Shapes replaced by borrowed views.\n */\nexport function borrowDeep(v: unknown, depth: number): unknown {\n if (depth > MAX_WALK_DEPTH || v === null || typeof v !== 'object') return v\n if (isShape(v)) return borrowBrepjsShape(v)\n if (Array.isArray(v)) return v.map((x) => borrowDeep(x, depth + 1))\n if (Object.getPrototypeOf(v) !== Object.prototype) return v\n const out: Record<string, unknown> = {}\n for (const [k, x] of Object.entries(v)) out[k] = borrowDeep(x, depth + 1)\n return out\n}\n\n/**\n * Statement-boundary unwrap — `err` becomes an execution error carrying the op\n * name and the `BrepError` code. Delegates to the shared\n * {@link unwrapResult} so the compat boundary and defineOp's Result boundary\n * share one leaf implementation (no drift).\n *\n * @param r - the Result-like value to unwrap.\n * @param name - the op name used in error messages.\n * @returns the unwrapped ok value.\n */\nexport function unwrapOrThrow(r: unknown, name: string): unknown {\n return unwrapResult(r, name)\n}\n\n/**\n * Bridging step: outward adoption — top-level handle or `outputs`-declared\n * fields → adoptEntity (unregister finalizer + fromHandle). `outputs` may also\n * name an array field of handles; every element is adopted individually.\n * Deduplication of already-adopted handles lives inside adoptEntity. A field\n * already being a faijs Shape passes through untouched (no double adoption).\n *\n * @param v - the library product.\n * @param spec - the compat spec (name + optional `outputs`).\n * @param segments - caller-provided `segments` (裁决 1,§5.2), forwarded so the\n * adopted handles' tessellation honors it.\n * @returns the adopted record / Shape, or the plain data untouched.\n */\nfunction adoptOut(v: unknown, spec: CompatSpec, segments?: number): unknown {\n if (isShape(v)) return v\n if (spec.outputs && typeof v === 'object' && v !== null && !Array.isArray(v)) {\n const rec = v as Record<string, unknown>\n for (const f of spec.outputs) {\n const field = rec[f]\n rec[f] = Array.isArray(field)\n ? field.map((x) => adoptEntity(x, spec.name, segments))\n : adoptEntity(field, spec.name, segments)\n }\n return v\n }\n return adoptEntity(v, spec.name, segments)\n}\n\n/**\n * Read the caller-supplied tessellation density from a compat op's args.\n *\n * 裁决 1:faijs 的 `segments` 显式超集在 brepjs 投影侧也必须可选;这里从调用点\n * 的尾参 options(或任一 plain-object 实参)抓取 `segments`,在产出句柄被收编为\n * faijs Shape 时透传给 `fromHandle` 的三角化(§5.2 机制)。默认不传 = 由\n * handle-bridge 的 64 兜底。\n */\nfunction readSegmentsFromArgs(args: unknown[]): number | undefined {\n for (let i = args.length - 1; i >= 0; i--) {\n const a = args[i]\n if (\n a !== null &&\n typeof a === 'object' &&\n !Array.isArray(a) &&\n Object.getPrototypeOf(a) === Object.prototype\n ) {\n const seg = (a as Record<string, unknown>).segments\n if (typeof seg === 'number' && Number.isFinite(seg)) return seg\n }\n }\n return undefined\n}\n\n/**\n * Build the brep-only adapter: borrow inputs → call the vendor function through\n * the shared unwrap → adopt the product (with the caller's `segments`,\n * 裁决 1/§5.2). The adapter never dispatches and never mounts metadata —\n * those are defineOp's.\n *\n * @param fn the brepjs-shaped function (dual-form normalization inside, D11).\n * @param spec the static op spec (name + options pass-through).\n * @returns a `BrepImpl` compatible with defineOp's brep-only decl.\n */\nfunction buildAdapter(fn: (...args: unknown[]) => unknown, spec: CompatSpec): BrepImpl<unknown[]> {\n return async (...args: unknown[]): Promise<BrepProduct> => {\n const borrowed = args.map((a) => borrowDeep(a, 0))\n // Async library fns are supported: a library that awaits its kernel (every\n // `@faicad/fai-cq-gears` factory does — `await getGearKernel()`) returns\n // `Promise<Result<…>>`, and the shared unwrap is a sync leaf that only\n // recognizes settled Result records. Awaiting a non-promise product is a\n // no-op, so sync libraries are unaffected.\n const value = unwrapOrThrow(await callBrepjs(fn as never, borrowed), spec.name)\n return adoptOut(value, spec, readSegmentsFromArgs(args)) as BrepProduct\n }\n}\n\n/** Carrier of the DualOpMeta mounted by defineOp (same shape as defineOp's). */\ntype MetaCarrier = { [DUAL_OP_META]?: DualOpMeta }\n\n/**\n * Lift a brepjs-shaped function into a defineOp-decorated op facade (brep-only).\n *\n * The decorated product is identical to a defineOp product: same `DUAL_OP_META`\n * field set (kind 'dual-op', brep impl, name, capabilities, outputs, schema,\n * slotMap), same dispatch semantics, same Result boundary. The adapter carries\n * only the brepjs bridging (borrow / call / adopt); every other mechanism\n * belongs to defineOp.\n *\n * @param fn the brepjs-shaped function.\n * @param spec the static spec (name required; capabilities/outputs/slotMap/\n * schema pass through and take effect).\n * @returns the compat op facade, carrying dual-op metadata.\n */\nexport function compatOp(\n fn: (...args: unknown[]) => unknown,\n spec: CompatSpec,\n): ((...args: unknown[]) => Promise<Shape>) & MetaCarrier {\n const { outputs, capabilities, schema, slotMap, naming } = spec\n // `outputs` flows through defineOp's own wrapping path: the adapter adopts\n // per declared field, then defineOp wraps — isShape passthrough, so no\n // double wrapping (§3.2).\n return defineOp({\n brep: buildAdapter(fn, spec),\n name: spec.name,\n capabilities,\n outputs,\n schema,\n slotMap,\n naming,\n }) as unknown as ((...args: unknown[]) => Promise<Shape>) & MetaCarrier\n}"]}
|
|
@@ -24,7 +24,9 @@ import { type FormClass } from './dual-form-args.js';
|
|
|
24
24
|
*
|
|
25
25
|
* Reads the configured backend's kernel slot, guarding against the throw that
|
|
26
26
|
* `getBackends()` performs before host configuration. Falls back to the
|
|
27
|
-
*
|
|
27
|
+
* vendored kernel-registry injection flag (engine-neutral, Phase 2 P2-5: the
|
|
28
|
+
* registry is injected with the current BREP engine during assembly, not
|
|
29
|
+
* hard-bound to occt) when nothing is configured.
|
|
28
30
|
*
|
|
29
31
|
* @param name - op name, used in the guiding error message.
|
|
30
32
|
* @throws when no BREP kernel is bound (the message tells the host what to do,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-projection.d.ts","sourceRoot":"","sources":["../../../src/api/internal/compat-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK9D
|
|
1
|
+
{"version":3,"file":"compat-projection.d.ts","sourceRoot":"","sources":["../../../src/api/internal/compat-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAcpD;AAED,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAE9D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GAClC,gBAAgB,CAMlB"}
|
|
@@ -20,14 +20,16 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { resolveArgs } from './dual-form-args.js';
|
|
22
22
|
import { callBrepjs } from './l3-bridge.js';
|
|
23
|
-
import {
|
|
23
|
+
import { isKernelInjected } from '../occt-kernel-bridge.js';
|
|
24
24
|
import { getBackends } from '../../runtime-state.js';
|
|
25
25
|
/**
|
|
26
26
|
* Assert that a BREP kernel is bound before invoking a compat op.
|
|
27
27
|
*
|
|
28
28
|
* Reads the configured backend's kernel slot, guarding against the throw that
|
|
29
29
|
* `getBackends()` performs before host configuration. Falls back to the
|
|
30
|
-
*
|
|
30
|
+
* vendored kernel-registry injection flag (engine-neutral, Phase 2 P2-5: the
|
|
31
|
+
* registry is injected with the current BREP engine during assembly, not
|
|
32
|
+
* hard-bound to occt) when nothing is configured.
|
|
31
33
|
*
|
|
32
34
|
* @param name - op name, used in the guiding error message.
|
|
33
35
|
* @throws when no BREP kernel is bound (the message tells the host what to do,
|
|
@@ -41,9 +43,10 @@ export function assertKernelBound(name) {
|
|
|
41
43
|
catch {
|
|
42
44
|
// backends not configured yet — that is not an error, just no kernel
|
|
43
45
|
}
|
|
44
|
-
if (!kernelBound && !
|
|
45
|
-
throw new Error(`[compat:${name}] no BREP kernel bound; run host init/
|
|
46
|
-
`before the first compat.${name} call.
|
|
46
|
+
if (!kernelBound && !isKernelInjected()) {
|
|
47
|
+
throw new Error(`[compat:${name}] no BREP kernel bound; run host init/inject (e.g. initOcct + ` +
|
|
48
|
+
`injectCurrentBrepEngineAsKernel) before the first compat.${name} call. ` +
|
|
49
|
+
`Library code must not install kernels itself.`);
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-projection.js","sourceRoot":"","sources":["../../../src/api/internal/compat-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compat-projection.js","sourceRoot":"","sources":["../../../src/api/internal/compat-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,CAAC;QACH,WAAW,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAA;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;IACvE,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,gEAAgE;YAC7E,4DAA4D,IAAI,SAAS;YACzE,+CAA+C,CAClD,CAAA;IACH,CAAC;AACH,CAAC;AAKD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,MAAgB,EAChB,SAAoB,EACpB,IAAmC;IAEnC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvB,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QACjE,OAAO,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACrC,CAAC,CAAA;AACH,CAAC","sourcesContent":["/**\n * compat-projection — the single BREP-TS projection wrapper factory (P23, §4.2).\n *\n * Design: docs/plans/2026-09-03-faijs-brepjs-compat-api.md §4.2 / §4.3.2\n *\n * Every symbol on the TS compat face and every generated `compatOp` op funnels\n * through {@link projectBrepOp}. That is what makes the generated face and the\n * hand-curated `api/brepjs-compat` face one mechanism rather than two:\n *\n * 1. single-kernel assert (D10) — library code never installs a kernel;\n * 2. D11 dual-form normalization — object form → positional form, in the\n * exported function (§4.2 「归一化位置」), not in a script-side adapter;\n * 3. the vendored call itself, through `callBrepjs` (Result shape preserved).\n *\n * P21's `api/brepjs-compat` used a private copy of steps 1–3 (`wrapDual`); P23 lifts it\n * here so `gen-l3-surface.ts` can emit one `compatOp(projectBrepOp(…), …)` line\n * per symbol instead of re-expanding the template for each op.\n *\n * @module\n */\n\nimport { resolveArgs, type FormClass } from './dual-form-args'\nimport { callBrepjs } from './l3-bridge'\nimport { isKernelInjected } from '../occt-kernel-bridge'\nimport { getBackends } from '../../runtime-state'\n\n/**\n * Assert that a BREP kernel is bound before invoking a compat op.\n *\n * Reads the configured backend's kernel slot, guarding against the throw that\n * `getBackends()` performs before host configuration. Falls back to the\n * vendored kernel-registry injection flag (engine-neutral, Phase 2 P2-5: the\n * registry is injected with the current BREP engine during assembly, not\n * hard-bound to occt) when nothing is configured.\n *\n * @param name - op name, used in the guiding error message.\n * @throws when no BREP kernel is bound (the message tells the host what to do,\n * because library code must never install a kernel itself — §4.2 rule 1).\n */\nexport function assertKernelBound(name: string): void {\n let kernelBound = false\n try {\n kernelBound = getBackends().kernel.brep != null\n } catch {\n // backends not configured yet — that is not an error, just no kernel\n }\n if (!kernelBound && !isKernelInjected()) {\n throw new Error(\n `[compat:${name}] no BREP kernel bound; run host init/inject (e.g. initOcct + ` +\n `injectCurrentBrepEngineAsKernel) before the first compat.${name} call. ` +\n `Library code must not install kernels itself.`\n )\n }\n}\n\n/** Signature of a projected compat op (inputs normalized before the call). */\nexport type CompatProjection = (...args: unknown[]) => unknown\n\n/**\n * Project a vendored brepjs function onto the faijs TS compat face.\n *\n * The returned function is brepjs-shaped: positional arguments in, `Result`\n * (or whatever the vendored function returns) out — no faijs `Shape`, no\n * adoption. Adoption and the statement-boundary unwrap are `compatOp`'s job\n * (§4.3.2 steps 4/5), which is why the script face can wrap the very same\n * projection the TS face exports.\n *\n * @param name - op name (error messages + D11 discriminant context).\n * @param params - machine parameter-name table (object form → positional).\n * @param formClass - D11 form class (A single-name dual-form / B1 options-only /\n * B2 two names).\n * @param impl - the vendored function.\n * @returns the projected compat op.\n */\nexport function projectBrepOp(\n name: string,\n params: string[],\n formClass: FormClass,\n impl: (...args: never[]) => unknown,\n): CompatProjection {\n return (...args: unknown[]) => {\n assertKernelBound(name)\n const positional = resolveArgs(args, { name, params, formClass })\n return callBrepjs(impl, positional)\n }\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* replica-role-table — generalized replica[k] role-table builder (Phase 3 L3).
|
|
3
|
+
*
|
|
4
|
+
* Shared by the handwritten replicate ops (circularPattern / gridPattern /
|
|
5
|
+
* rectangularPattern / mirrorJoin). Every replica is a rigid transform T_k of
|
|
6
|
+
* the input; result faces = ∪ T_k(input faces). For each result face, its
|
|
7
|
+
* centroid is mapped back through T_k⁻¹ into input coordinates and matched to
|
|
8
|
+
* the nearest input-face centroid, recovering the input role, prefixed with
|
|
9
|
+
* the replica label: `replica[k]/<inner>`.
|
|
10
|
+
*
|
|
11
|
+
* Same mechanism as pattern.ts linearPattern (centroid clustering), generalized
|
|
12
|
+
* from a projection along one direction to arbitrary per-replica inverses.
|
|
13
|
+
*/
|
|
14
|
+
import type { Shape } from '../../mesh/types.js';
|
|
15
|
+
import type { BrepHandle, BrepVec3 } from '../../brep/engine/types.js';
|
|
16
|
+
import type { BrepEngineApi } from '../../brep/engine/primitives.js';
|
|
17
|
+
import type { RoleTable } from '../../topology/naming/types.js';
|
|
18
|
+
/** One replica: role-table label prefix + inverse of its placement transform. */
|
|
19
|
+
export interface ReplicaTransform {
|
|
20
|
+
/** Label prefix, e.g. 'replica[2]' / 'replica[1_0]'. */
|
|
21
|
+
label: string;
|
|
22
|
+
/** Map a result-face centroid back into the input coordinate frame (T_k⁻¹). */
|
|
23
|
+
inverse: (c: BrepVec3) => BrepVec3;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build the `replica[*]/<inner>` role table for a fused multi-replica result.
|
|
27
|
+
*
|
|
28
|
+
* @param kernel - the BREP engine api.
|
|
29
|
+
* @param input - the source Shape (its role table provides inner roles).
|
|
30
|
+
* @param resultSolid - the fused result handle.
|
|
31
|
+
* @param replicas - per-replica label + inverse transform.
|
|
32
|
+
* @param outStmt - the output statement id (role-table key).
|
|
33
|
+
* @returns the role table keyed by outStmt.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildReplicaRoleTable(kernel: BrepEngineApi, input: Shape, resultSolid: BrepHandle, replicas: ReplicaTransform[], outStmt: string): RoleTable;
|
|
36
|
+
//# sourceMappingURL=replica-role-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replica-role-table.d.ts","sourceRoot":"","sources":["../../../src/api/internal/replica-role-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAI5D,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAA;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,UAAU,EACvB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,EAAE,MAAM,GACd,SAAS,CA8CX"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* replica-role-table — generalized replica[k] role-table builder (Phase 3 L3).
|
|
3
|
+
*
|
|
4
|
+
* Shared by the handwritten replicate ops (circularPattern / gridPattern /
|
|
5
|
+
* rectangularPattern / mirrorJoin). Every replica is a rigid transform T_k of
|
|
6
|
+
* the input; result faces = ∪ T_k(input faces). For each result face, its
|
|
7
|
+
* centroid is mapped back through T_k⁻¹ into input coordinates and matched to
|
|
8
|
+
* the nearest input-face centroid, recovering the input role, prefixed with
|
|
9
|
+
* the replica label: `replica[k]/<inner>`.
|
|
10
|
+
*
|
|
11
|
+
* Same mechanism as pattern.ts linearPattern (centroid clustering), generalized
|
|
12
|
+
* from a projection along one direction to arbitrary per-replica inverses.
|
|
13
|
+
*/
|
|
14
|
+
import { brepOf, inputRoleTable } from '../../shape.js';
|
|
15
|
+
import { getFaceHashes } from '../../brep/face-evolution.js';
|
|
16
|
+
/**
|
|
17
|
+
* Build the `replica[*]/<inner>` role table for a fused multi-replica result.
|
|
18
|
+
*
|
|
19
|
+
* @param kernel - the BREP engine api.
|
|
20
|
+
* @param input - the source Shape (its role table provides inner roles).
|
|
21
|
+
* @param resultSolid - the fused result handle.
|
|
22
|
+
* @param replicas - per-replica label + inverse transform.
|
|
23
|
+
* @param outStmt - the output statement id (role-table key).
|
|
24
|
+
* @returns the role table keyed by outStmt.
|
|
25
|
+
*/
|
|
26
|
+
export function buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt) {
|
|
27
|
+
const inputSolid = brepOf(input);
|
|
28
|
+
const inputTable = inputRoleTable(input);
|
|
29
|
+
// input face hash → role (for inner-role recovery)
|
|
30
|
+
const inputHashes = getFaceHashes(kernel, inputSolid);
|
|
31
|
+
const inputHashToRole = new Map();
|
|
32
|
+
if (inputTable) {
|
|
33
|
+
for (const roles of inputTable.values()) {
|
|
34
|
+
for (const [role, hashes] of roles)
|
|
35
|
+
for (const h of hashes)
|
|
36
|
+
inputHashToRole.set(h, role);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const inputFaces = kernel.getSubShapes(inputSolid, 'face');
|
|
40
|
+
const inputCentroids = inputFaces.map((f) => kernel.getSurfaceCenterOfMass(f));
|
|
41
|
+
const resultHashes = getFaceHashes(kernel, resultSolid);
|
|
42
|
+
const resultFaces = kernel.getSubShapes(resultSolid, 'face');
|
|
43
|
+
const resultCentroids = resultFaces.map((f) => kernel.getSurfaceCenterOfMass(f));
|
|
44
|
+
const roleTable = new Map();
|
|
45
|
+
const inner = new Map();
|
|
46
|
+
for (let i = 0; i < resultHashes.length; i++) {
|
|
47
|
+
const c = resultCentroids[i];
|
|
48
|
+
// Try every replica inverse; the one mapping closest to an input face
|
|
49
|
+
// centroid wins (identifies both the replica k and the inner role).
|
|
50
|
+
let bestLabel = replicas[0].label;
|
|
51
|
+
let bestRole;
|
|
52
|
+
let bestDist = Infinity;
|
|
53
|
+
for (const r of replicas) {
|
|
54
|
+
const p = r.inverse(c);
|
|
55
|
+
for (let j = 0; j < inputCentroids.length; j++) {
|
|
56
|
+
const ic = inputCentroids[j];
|
|
57
|
+
const d = (p.x - ic.x) ** 2 + (p.y - ic.y) ** 2 + (p.z - ic.z) ** 2;
|
|
58
|
+
if (d < bestDist) {
|
|
59
|
+
bestDist = d;
|
|
60
|
+
bestLabel = r.label;
|
|
61
|
+
bestRole = inputHashToRole.get(inputHashes[j]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const role = `${bestLabel}/${bestRole ?? 'face'}`;
|
|
66
|
+
if (!inner.has(role))
|
|
67
|
+
inner.set(role, []);
|
|
68
|
+
inner.get(role).push(resultHashes[i]);
|
|
69
|
+
}
|
|
70
|
+
roleTable.set(outStmt, inner);
|
|
71
|
+
return roleTable;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=replica-role-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replica-role-table.js","sourceRoot":"","sources":["../../../src/api/internal/replica-role-table.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * replica-role-table — generalized replica[k] role-table builder (Phase 3 L3).\n *\n * Shared by the handwritten replicate ops (circularPattern / gridPattern /\n * rectangularPattern / mirrorJoin). Every replica is a rigid transform T_k of\n * the input; result faces = ∪ T_k(input faces). For each result face, its\n * centroid is mapped back through T_k⁻¹ into input coordinates and matched to\n * the nearest input-face centroid, recovering the input role, prefixed with\n * the replica label: `replica[k]/<inner>`.\n *\n * Same mechanism as pattern.ts linearPattern (centroid clustering), generalized\n * from a projection along one direction to arbitrary per-replica inverses.\n */\n\nimport type { Shape } from '../../mesh/types'\nimport type { BrepHandle, BrepVec3 } from '../../brep/engine/types'\nimport type { BrepEngineApi } from '../../brep/engine/primitives'\nimport type { RoleTable } from '../../topology/naming/types'\nimport { brepOf, inputRoleTable } from '../../shape'\nimport { getFaceHashes } from '../../brep/face-evolution'\n\n/** One replica: role-table label prefix + inverse of its placement transform. */\nexport interface ReplicaTransform {\n /** Label prefix, e.g. 'replica[2]' / 'replica[1_0]'. */\n label: string\n /** Map a result-face centroid back into the input coordinate frame (T_k⁻¹). */\n inverse: (c: BrepVec3) => BrepVec3\n}\n\n/**\n * Build the `replica[*]/<inner>` role table for a fused multi-replica result.\n *\n * @param kernel - the BREP engine api.\n * @param input - the source Shape (its role table provides inner roles).\n * @param resultSolid - the fused result handle.\n * @param replicas - per-replica label + inverse transform.\n * @param outStmt - the output statement id (role-table key).\n * @returns the role table keyed by outStmt.\n */\nexport function buildReplicaRoleTable(\n kernel: BrepEngineApi,\n input: Shape,\n resultSolid: BrepHandle,\n replicas: ReplicaTransform[],\n outStmt: string,\n): RoleTable {\n const inputSolid = brepOf(input) as BrepHandle\n const inputTable = inputRoleTable(input) as RoleTable | undefined\n\n // input face hash → role (for inner-role recovery)\n const inputHashes = getFaceHashes(kernel, inputSolid)\n const inputHashToRole = new Map<number, string>()\n if (inputTable) {\n for (const roles of inputTable.values()) {\n for (const [role, hashes] of roles) for (const h of hashes) inputHashToRole.set(h, role)\n }\n }\n const inputFaces = kernel.getSubShapes(inputSolid, 'face')\n const inputCentroids = inputFaces.map((f) => kernel.getSurfaceCenterOfMass(f))\n\n const resultHashes = getFaceHashes(kernel, resultSolid)\n const resultFaces = kernel.getSubShapes(resultSolid, 'face')\n const resultCentroids = resultFaces.map((f) => kernel.getSurfaceCenterOfMass(f))\n\n const roleTable = new Map<string, Map<string, number[]>>()\n const inner = new Map<string, number[]>()\n for (let i = 0; i < resultHashes.length; i++) {\n const c = resultCentroids[i]!\n // Try every replica inverse; the one mapping closest to an input face\n // centroid wins (identifies both the replica k and the inner role).\n let bestLabel = replicas[0]!.label\n let bestRole: string | undefined\n let bestDist = Infinity\n for (const r of replicas) {\n const p = r.inverse(c)\n for (let j = 0; j < inputCentroids.length; j++) {\n const ic = inputCentroids[j]!\n const d = (p.x - ic.x) ** 2 + (p.y - ic.y) ** 2 + (p.z - ic.z) ** 2\n if (d < bestDist) {\n bestDist = d\n bestLabel = r.label\n bestRole = inputHashToRole.get(inputHashes[j]!)\n }\n }\n }\n const role = `${bestLabel}/${bestRole ?? 'face'}`\n if (!inner.has(role)) inner.set(role, [])\n inner.get(role)!.push(resultHashes[i]!)\n }\n roleTable.set(outStmt as never, inner)\n return roleTable as unknown as RoleTable\n}\n"]}
|
|
@@ -47,7 +47,9 @@ export declare class OpError extends Error {
|
|
|
47
47
|
readonly op: string;
|
|
48
48
|
/** The `BrepError.code`, or `'E_OP_FAILED'` when the library sent none. */
|
|
49
49
|
readonly code: string;
|
|
50
|
-
constructor(op: string, code: string, message: string
|
|
50
|
+
constructor(op: string, code: string, message: string, options?: {
|
|
51
|
+
cause?: unknown;
|
|
52
|
+
});
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
55
|
* Structural test for a Result value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-unwrap.d.ts","sourceRoot":"","sources":["../../../src/api/internal/result-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAE7D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,OAAQ,SAAQ,KAAK;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"result-unwrap.d.ts","sourceRoot":"","sources":["../../../src/api/internal/result-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,oGAAoG;AACpG,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAE7D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,OAAQ,SAAQ,KAAK;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAMrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAExD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAO3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAO/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAU9D"}
|
|
@@ -36,8 +36,8 @@ export class OpError extends Error {
|
|
|
36
36
|
op;
|
|
37
37
|
/** The `BrepError.code`, or `'E_OP_FAILED'` when the library sent none. */
|
|
38
38
|
code;
|
|
39
|
-
constructor(op, code, message) {
|
|
40
|
-
super(message);
|
|
39
|
+
constructor(op, code, message, options) {
|
|
40
|
+
super(message, options);
|
|
41
41
|
this.name = 'OpError';
|
|
42
42
|
this.op = op;
|
|
43
43
|
this.code = code;
|