@faicad/faijs 0.17.0 → 0.18.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.
Files changed (72) hide show
  1. package/dist/api/api-namespace.js +2 -2
  2. package/dist/api/api-namespace.js.map +1 -1
  3. package/dist/api/boolean.d.ts.map +1 -1
  4. package/dist/api/boolean.js +64 -26
  5. package/dist/api/boolean.js.map +1 -1
  6. package/dist/api/brep-mirror/booleanFns.d.ts.map +1 -1
  7. package/dist/api/brep-mirror/booleanFns.js +11 -6
  8. package/dist/api/brep-mirror/booleanFns.js.map +1 -1
  9. package/dist/api/brep-mirror/topologyFns.d.ts.map +1 -1
  10. package/dist/api/brep-mirror/topologyFns.js +4 -1
  11. package/dist/api/brep-mirror/topologyFns.js.map +1 -1
  12. package/dist/api/chamfer.d.ts +12 -8
  13. package/dist/api/chamfer.d.ts.map +1 -1
  14. package/dist/api/chamfer.js +52 -23
  15. package/dist/api/chamfer.js.map +1 -1
  16. package/dist/api/extrude.d.ts.map +1 -1
  17. package/dist/api/extrude.js +17 -2
  18. package/dist/api/extrude.js.map +1 -1
  19. package/dist/api/generated/operations.js +5 -5
  20. package/dist/api/generated/operations.js.map +1 -1
  21. package/dist/api/generated/script-face-manifest.js +12 -12
  22. package/dist/api/generated/script-face-manifest.js.map +1 -1
  23. package/dist/api/generated/sketching.js +1 -1
  24. package/dist/api/generated/sketching.js.map +1 -1
  25. package/dist/api/generated/topology.js +7 -7
  26. package/dist/api/generated/topology.js.map +1 -1
  27. package/dist/api/index.d.ts +2 -1
  28. package/dist/api/index.d.ts.map +1 -1
  29. package/dist/api/index.js +1 -1
  30. package/dist/api/index.js.map +1 -1
  31. package/dist/api/internal/profile-wire.d.ts +3 -3
  32. package/dist/api/internal/profile-wire.js +3 -3
  33. package/dist/api/internal/profile-wire.js.map +1 -1
  34. package/dist/api/loft.d.ts +3 -3
  35. package/dist/api/loft.js +3 -3
  36. package/dist/api/loft.js.map +1 -1
  37. package/dist/api/profile.d.ts +89 -0
  38. package/dist/api/profile.d.ts.map +1 -0
  39. package/dist/api/profile.js +194 -0
  40. package/dist/api/profile.js.map +1 -0
  41. package/dist/api/replicate.d.ts.map +1 -1
  42. package/dist/api/replicate.js +15 -14
  43. package/dist/api/replicate.js.map +1 -1
  44. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  45. package/dist/api/surface/arg-spec.js +20 -15
  46. package/dist/api/surface/arg-spec.js.map +1 -1
  47. package/dist/api/sweep.d.ts +2 -2
  48. package/dist/api/sweep.js +2 -2
  49. package/dist/api/sweep.js.map +1 -1
  50. package/dist/api/thicken.d.ts +3 -3
  51. package/dist/api/thicken.js +3 -3
  52. package/dist/api/thicken.js.map +1 -1
  53. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  54. package/dist/brep/engine/adapters/brepkit.js +28 -1
  55. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  56. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  57. package/dist/brep/engine/adapters/occt.js +12 -0
  58. package/dist/brep/engine/adapters/occt.js.map +1 -1
  59. package/dist/brep/engine/types.d.ts +1 -1
  60. package/dist/brep/engine/types.d.ts.map +1 -1
  61. package/dist/brep/engine/types.js.map +1 -1
  62. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  63. package/dist/brepkit-kernel/brepkitKernel.js +463 -91
  64. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  65. package/dist/brepkit-kernel/multi-version-test.d.ts +40 -0
  66. package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -0
  67. package/dist/brepkit-kernel/multi-version-test.js +89 -0
  68. package/dist/brepkit-kernel/multi-version-test.js.map +1 -0
  69. package/dist/lang/symbol-table.generated.d.ts +1 -1
  70. package/dist/lang/symbol-table.generated.js +1 -1
  71. package/dist/lang/symbol-table.generated.js.map +1 -1
  72. package/package.json +1 -1
@@ -6,7 +6,7 @@
6
6
  * occt-only)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
7
7
  *
8
8
  * 为什么手写而不走生成投影:与 `api/loft.ts` 同因——截面最常见来源是
9
- * `cad.sketch(...)`(产出 **face**),需「面 → 外环」输入适配
9
+ * `cad.profile(...)`(产出 **face**),需「面 → 外环」输入适配
10
10
  * (`internal/profile-wire.ts` 的唯一步径)。脊柱容忍 face(FCStd 翻译把
11
11
  * 脊柱基对象 sketch 整圈外廓当路径)。
12
12
  *
@@ -41,7 +41,7 @@ export interface SweepOptions {
41
41
  * @param opts - 扫掠配置(frenet / mode / tolerance 等)。type:SweepOptions required:false
42
42
  * @example
43
43
  * const path = cad.wire([[0, 0, 0], [0, 0, 50]])
44
- * const section = cad.sketch({ contours: [{ segments: [
44
+ * const section = cad.profile({ contours: [{ segments: [
45
45
  * { kind: 'line', x1: -4, y1: -4, x2: 4, y2: -4 },
46
46
  * { kind: 'line', x1: 4, y1: -4, x2: 4, y2: 4 },
47
47
  * { kind: 'line', x1: 4, y1: 4, x2: -4, y2: 4 },
package/dist/api/sweep.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * occt-only)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
7
7
  *
8
8
  * 为什么手写而不走生成投影:与 `api/loft.ts` 同因——截面最常见来源是
9
- * `cad.sketch(...)`(产出 **face**),需「面 → 外环」输入适配
9
+ * `cad.profile(...)`(产出 **face**),需「面 → 外环」输入适配
10
10
  * (`internal/profile-wire.ts` 的唯一步径)。脊柱容忍 face(FCStd 翻译把
11
11
  * 脊柱基对象 sketch 整圈外廓当路径)。
12
12
  *
@@ -67,7 +67,7 @@ function sweepBrep(profile, spine, opts) {
67
67
  * @param opts - 扫掠配置(frenet / mode / tolerance 等)。type:SweepOptions required:false
68
68
  * @example
69
69
  * const path = cad.wire([[0, 0, 0], [0, 0, 50]])
70
- * const section = cad.sketch({ contours: [{ segments: [
70
+ * const section = cad.profile({ contours: [{ segments: [
71
71
  * { kind: 'line', x1: -4, y1: -4, x2: 4, y2: -4 },
72
72
  * { kind: 'line', x1: 4, y1: -4, x2: 4, y2: 4 },
73
73
  * { kind: 'line', x1: 4, y1: 4, x2: -4, y2: 4 },
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/api/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAevD,+DAA+D;AAC/D,SAAS,SAAS,CAAC,OAAc,EAAE,KAAY,EAAE,IAAmB;IAClE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IAC7F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACpF,iCAAiC;IACjC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IACpE,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAe,CAAA;IAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;YAAS,CAAC;QACT,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,OAAO;IACb,IAAI,CAAC,OAAc,EAAE,KAAY,EAAE,IAAmB;QACpD,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,wCAAwC,EAAgB;CAC9F,CAAC,CAAA","sourcesContent":["/**\n * stdlib sweep — 扫掠:截面沿脊柱路径生成扫掠体(手写平台 op,Phase 4 → G5 core 直连)\n *\n * @platform occt — 实现走 core 自有 `brep-mirror/sweepFns.ts#sweepBrep`\n * (occt-wasm simplePipe / sweepPipeShell;engine-method-map 里 `sweep` 为\n * occt-only)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。\n *\n * 为什么手写而不走生成投影:与 `api/loft.ts` 同因——截面最常见来源是\n * `cad.sketch(...)`(产出 **face**),需「面 → 外环」输入适配\n * (`internal/profile-wire.ts` 的唯一步径)。脊柱容忍 face(FCStd 翻译把\n * 脊柱基对象 sketch 整圈外廓当路径)。\n *\n * core-decouple G5:vendored `sweep`(brepjs)替换为 brep-mirror 自有实现直连,\n * 产物经 `fromBrep` 收养(替代 l3-bridge adoptEntity)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { sweepBrep as selfhostedSweep } from './brep-mirror/sweepFns'\nimport { toProfileWireView } from './internal/profile-wire'\nimport { unwrapResult } from './internal/result-unwrap'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 扫掠配置(与 vendored SweepOptions 同形;本文件自持,去 brepjs 依赖)。 */\nexport interface SweepOptions {\n /** Frenet 参考系(默认 false)。 */\n frenet?: boolean\n /** 扫掠模式:'simple'(MakePipe)或 undefined(PipeShell)。 */\n mode?: 'simple'\n /** 过渡模式:仅支持默认 'right'(selfhost 后限制,见 sweepFns)。 */\n transitionMode?: string\n /** 公差等其余 vendored 字段(保留以兼容调用方)。 */\n tolerance?: number\n}\n\n/** BREP 路径:截面沿脊柱扫掠(wire 视图 → brep-mirror 直连 → fromBrep 收养)。 */\nfunction sweepBrep(profile: Shape, spine: Shape, opts?: SweepOptions): Shape {\n if (!profile) throw new Error('E_SWEEP_NO_PROFILE: sweep requires a profile (section) shape')\n if (!spine) throw new Error('E_SWEEP_NO_SPINE: sweep requires a spine (path) shape')\n // 截面 / 脊柱:wire 直用;面取外环(孔环不参与扫掠)。\n const profileWire = toProfileWireView(profile)\n const spineWire = toProfileWireView(spine)\n const r = selfhostedSweep(profileWire, spineWire, opts ?? {}, false)\n const h = unwrapResult(r, 'sweep') as BrepHandle\n const kernel = getBrepApi()\n try {\n return fromBrep(solidToShape(kernel, h), { solid: h })\n } finally {\n // 面→外环产出的 wire 是 arena 新句柄(曲线借用不 release)\n if (!profileWire.borrowed) {\n try { kernel.release(profileWire.wrapped) } catch { /* 已释放 */ }\n }\n if (!spineWire.borrowed) {\n try { kernel.release(spineWire.wrapped) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 扫掠:截面沿脊柱路径生成扫掠体。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name sweep\n * @note 平台 op:仅 occt 引擎(BRepOffsetAPI_MakePipeShell / MakePipe)。截面接受\n * wire 或面(面取其外环);脊柱必须为 wire。非 occt 引擎执行前报错;\n * brep_mock 不拦截。`shellMode` 不暴露(元组产物跨不过单产物边界)。\n * @returns Shape 扫掠体。\n * @param profile - 截面几何(wire 或面;面取其外环)。type:Shape required:true\n * @param spine - 脊柱路径(wire)。type:Shape required:true\n * @param opts - 扫掠配置(frenet / mode / tolerance 等)。type:SweepOptions required:false\n * @example\n * const path = cad.wire([[0, 0, 0], [0, 0, 50]])\n * const section = cad.sketch({ contours: [{ segments: [\n * { kind: 'line', x1: -4, y1: -4, x2: 4, y2: -4 },\n * { kind: 'line', x1: 4, y1: -4, x2: 4, y2: 4 },\n * { kind: 'line', x1: 4, y1: 4, x2: -4, y2: 4 },\n * { kind: 'line', x1: -4, y1: 4, x2: -4, y2: -4 },\n * ] }] })\n * const body = await cad.sweep(section, path)\n */\nexport const sweep = defineOp({\n name: 'sweep',\n brep(profile: Shape, spine: Shape, opts?: SweepOptions) {\n return sweepBrep(profile, spine, opts)\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'swept-body face vocabulary not defined' } as Provenance,\n})\n"]}
1
+ {"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/api/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAevD,+DAA+D;AAC/D,SAAS,SAAS,CAAC,OAAc,EAAE,KAAY,EAAE,IAAmB;IAClE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IAC7F,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IACpF,iCAAiC;IACjC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,CAAC,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IACpE,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAe,CAAA;IAChD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;YAAS,CAAC;QACT,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,OAAO;IACb,IAAI,CAAC,OAAc,EAAE,KAAY,EAAE,IAAmB;QACpD,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,wCAAwC,EAAgB;CAC9F,CAAC,CAAA","sourcesContent":["/**\n * stdlib sweep — 扫掠:截面沿脊柱路径生成扫掠体(手写平台 op,Phase 4 → G5 core 直连)\n *\n * @platform occt — 实现走 core 自有 `brep-mirror/sweepFns.ts#sweepBrep`\n * (occt-wasm simplePipe / sweepPipeShell;engine-method-map 里 `sweep` 为\n * occt-only)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。\n *\n * 为什么手写而不走生成投影:与 `api/loft.ts` 同因——截面最常见来源是\n * `cad.profile(...)`(产出 **face**),需「面 → 外环」输入适配\n * (`internal/profile-wire.ts` 的唯一步径)。脊柱容忍 face(FCStd 翻译把\n * 脊柱基对象 sketch 整圈外廓当路径)。\n *\n * core-decouple G5:vendored `sweep`(brepjs)替换为 brep-mirror 自有实现直连,\n * 产物经 `fromBrep` 收养(替代 l3-bridge adoptEntity)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { sweepBrep as selfhostedSweep } from './brep-mirror/sweepFns'\nimport { toProfileWireView } from './internal/profile-wire'\nimport { unwrapResult } from './internal/result-unwrap'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 扫掠配置(与 vendored SweepOptions 同形;本文件自持,去 brepjs 依赖)。 */\nexport interface SweepOptions {\n /** Frenet 参考系(默认 false)。 */\n frenet?: boolean\n /** 扫掠模式:'simple'(MakePipe)或 undefined(PipeShell)。 */\n mode?: 'simple'\n /** 过渡模式:仅支持默认 'right'(selfhost 后限制,见 sweepFns)。 */\n transitionMode?: string\n /** 公差等其余 vendored 字段(保留以兼容调用方)。 */\n tolerance?: number\n}\n\n/** BREP 路径:截面沿脊柱扫掠(wire 视图 → brep-mirror 直连 → fromBrep 收养)。 */\nfunction sweepBrep(profile: Shape, spine: Shape, opts?: SweepOptions): Shape {\n if (!profile) throw new Error('E_SWEEP_NO_PROFILE: sweep requires a profile (section) shape')\n if (!spine) throw new Error('E_SWEEP_NO_SPINE: sweep requires a spine (path) shape')\n // 截面 / 脊柱:wire 直用;面取外环(孔环不参与扫掠)。\n const profileWire = toProfileWireView(profile)\n const spineWire = toProfileWireView(spine)\n const r = selfhostedSweep(profileWire, spineWire, opts ?? {}, false)\n const h = unwrapResult(r, 'sweep') as BrepHandle\n const kernel = getBrepApi()\n try {\n return fromBrep(solidToShape(kernel, h), { solid: h })\n } finally {\n // 面→外环产出的 wire 是 arena 新句柄(曲线借用不 release)\n if (!profileWire.borrowed) {\n try { kernel.release(profileWire.wrapped) } catch { /* 已释放 */ }\n }\n if (!spineWire.borrowed) {\n try { kernel.release(spineWire.wrapped) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 扫掠:截面沿脊柱路径生成扫掠体。\n * @group 特征\n * @inputs 2\n * @async true\n * @qual ok\n * @name sweep\n * @note 平台 op:仅 occt 引擎(BRepOffsetAPI_MakePipeShell / MakePipe)。截面接受\n * wire 或面(面取其外环);脊柱必须为 wire。非 occt 引擎执行前报错;\n * brep_mock 不拦截。`shellMode` 不暴露(元组产物跨不过单产物边界)。\n * @returns Shape 扫掠体。\n * @param profile - 截面几何(wire 或面;面取其外环)。type:Shape required:true\n * @param spine - 脊柱路径(wire)。type:Shape required:true\n * @param opts - 扫掠配置(frenet / mode / tolerance 等)。type:SweepOptions required:false\n * @example\n * const path = cad.wire([[0, 0, 0], [0, 0, 50]])\n * const section = cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -4, y1: -4, x2: 4, y2: -4 },\n * { kind: 'line', x1: 4, y1: -4, x2: 4, y2: 4 },\n * { kind: 'line', x1: 4, y1: 4, x2: -4, y2: 4 },\n * { kind: 'line', x1: -4, y1: 4, x2: -4, y2: -4 },\n * ] }] })\n * const body = await cad.sweep(section, path)\n */\nexport const sweep = defineOp({\n name: 'sweep',\n brep(profile: Shape, spine: Shape, opts?: SweepOptions) {\n return sweepBrep(profile, spine, opts)\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'swept-body face vocabulary not defined' } as Provenance,\n})\n"]}
@@ -16,13 +16,13 @@ import type { Shape } from '../mesh/types.js';
16
16
  * @async true
17
17
  * @qual ok
18
18
  * @name thicken
19
- * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.sketch 产物);
19
+ * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.profile 产物);
20
20
  * 正厚度沿法向、负厚度反向。非 occt 引擎执行前报错;brep_mock 不拦截。
21
21
  * @returns Shape 加厚后的实体。
22
- * @param input - 面/壳几何(cad.sketch 产物等)。type:Shape required:true
22
+ * @param input - 面/壳几何(cad.profile 产物等)。type:Shape required:true
23
23
  * @param thickness - 厚度(mm,≠0;正沿法向,负反向)。type:number required:true
24
24
  * @example
25
- * const face = cad.sketch({ contours: [{ segments: [
25
+ * const face = cad.profile({ contours: [{ segments: [
26
26
  * { kind: 'line', x1: -10, y1: -10, x2: 10, y2: -10 },
27
27
  * { kind: 'line', x1: 10, y1: -10, x2: 10, y2: 10 },
28
28
  * { kind: 'line', x1: 10, y1: 10, x2: -10, y2: 10 },
@@ -20,13 +20,13 @@ import { getOcctKernel } from '../occt-kernel/occtKernel.js';
20
20
  * @async true
21
21
  * @qual ok
22
22
  * @name thicken
23
- * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.sketch 产物);
23
+ * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.profile 产物);
24
24
  * 正厚度沿法向、负厚度反向。非 occt 引擎执行前报错;brep_mock 不拦截。
25
25
  * @returns Shape 加厚后的实体。
26
- * @param input - 面/壳几何(cad.sketch 产物等)。type:Shape required:true
26
+ * @param input - 面/壳几何(cad.profile 产物等)。type:Shape required:true
27
27
  * @param thickness - 厚度(mm,≠0;正沿法向,负反向)。type:number required:true
28
28
  * @example
29
- * const face = cad.sketch({ contours: [{ segments: [
29
+ * const face = cad.profile({ contours: [{ segments: [
30
30
  * { kind: 'line', x1: -10, y1: -10, x2: 10, y2: -10 },
31
31
  * { kind: 'line', x1: 10, y1: -10, x2: 10, y2: 10 },
32
32
  * { kind: 'line', x1: 10, y1: 10, x2: -10, y2: 10 },
@@ -1 +1 @@
1
- {"version":3,"file":"thicken.js","sourceRoot":"","sources":["../../src/api/thicken.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAGzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,CAAC,KAAY,EAAE,SAAiB;QAClC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QACtF,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAA2B,CAAA;QACtD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC,OAAO,CAAC,MAAe,EAAE,SAAS,EAAE,IAAI,CAA0B,CAAA;QAC5F,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAU,CAAA;IACjE,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,4CAA4C,EAAgB;CAClG,CAAC,CAAA","sourcesContent":["/**\n * stdlib thicken — 加厚:把面(或壳)沿法向偏置成等厚实体(手写平台 op,Phase 4 → G5 core 直连)\n *\n * @platform occt — 实现走 occt-wasm 原生 `thicken`(BRepOffsetAPI_MakeThickSolid;\n * engine-method-map 里 `thicken` 为 occt-only)⇒ 平台 op:defineOp 声明\n * `engines: ['occt']`(D11)。\n *\n * core-decouple G5:vendored `thicken`(brepjs modifierFns,thickenWithHistory)\n * 替换为 occt-wasm 原生直连,产物经 `fromBrep` 收养(替代 l3-bridge adoptEntity)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * 加厚:把面(或壳)沿法向偏置成等厚实体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name thicken\n * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.sketch 产物);\n * 正厚度沿法向、负厚度反向。非 occt 引擎执行前报错;brep_mock 不拦截。\n * @returns Shape 加厚后的实体。\n * @param input - 面/壳几何(cad.sketch 产物等)。type:Shape required:true\n * @param thickness - 厚度(mm,≠0;正沿法向,负反向)。type:number required:true\n * @example\n * const face = cad.sketch({ contours: [{ segments: [\n * { kind: 'line', x1: -10, y1: -10, x2: 10, y2: -10 },\n * { kind: 'line', x1: 10, y1: -10, x2: 10, y2: 10 },\n * { kind: 'line', x1: 10, y1: 10, x2: -10, y2: 10 },\n * { kind: 'line', x1: -10, y1: 10, x2: -10, y2: -10 },\n * ] }] })\n * const solid = await cad.thicken(face, 2)\n */\nexport const thicken = defineOp({\n name: 'thicken',\n brep(input: Shape, thickness: number) {\n if (!input) throw new Error('E_THICKEN_NO_SHAPE: thicken requires a face/shell shape')\n if (typeof thickness !== 'number' || !Number.isFinite(thickness) || thickness === 0) {\n throw new Error('E_THICKEN_BAD_THICKNESS: thicken.thickness must be a non-zero number')\n }\n const kernel = getBrepApi()\n const handle = brepOf(input) as BrepHandle | undefined\n if (!handle) throw new Error('[thicken] input is not BREP')\n const h = getOcctKernel().thicken(handle as never, thickness, 1e-6) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, h), { solid: h }) as Shape\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'thickened-body face vocabulary not defined' } as Provenance,\n})\n"]}
1
+ {"version":3,"file":"thicken.js","sourceRoot":"","sources":["../../src/api/thicken.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAGzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,CAAC,KAAY,EAAE,SAAiB;QAClC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QACtF,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAA2B,CAAA;QACtD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC,OAAO,CAAC,MAAe,EAAE,SAAS,EAAE,IAAI,CAA0B,CAAA;QAC5F,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAU,CAAA;IACjE,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,4CAA4C,EAAgB;CAClG,CAAC,CAAA","sourcesContent":["/**\n * stdlib thicken — 加厚:把面(或壳)沿法向偏置成等厚实体(手写平台 op,Phase 4 → G5 core 直连)\n *\n * @platform occt — 实现走 occt-wasm 原生 `thicken`(BRepOffsetAPI_MakeThickSolid;\n * engine-method-map 里 `thicken` 为 occt-only)⇒ 平台 op:defineOp 声明\n * `engines: ['occt']`(D11)。\n *\n * core-decouple G5:vendored `thicken`(brepjs modifierFns,thickenWithHistory)\n * 替换为 occt-wasm 原生直连,产物经 `fromBrep` 收养(替代 l3-bridge adoptEntity)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * 加厚:把面(或壳)沿法向偏置成等厚实体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name thicken\n * @note 平台 op:仅 occt 引擎(BRepOffset)。输入为面/壳 Shape(如 cad.profile 产物);\n * 正厚度沿法向、负厚度反向。非 occt 引擎执行前报错;brep_mock 不拦截。\n * @returns Shape 加厚后的实体。\n * @param input - 面/壳几何(cad.profile 产物等)。type:Shape required:true\n * @param thickness - 厚度(mm,≠0;正沿法向,负反向)。type:number required:true\n * @example\n * const face = cad.profile({ contours: [{ segments: [\n * { kind: 'line', x1: -10, y1: -10, x2: 10, y2: -10 },\n * { kind: 'line', x1: 10, y1: -10, x2: 10, y2: 10 },\n * { kind: 'line', x1: 10, y1: 10, x2: -10, y2: 10 },\n * { kind: 'line', x1: -10, y1: 10, x2: -10, y2: -10 },\n * ] }] })\n * const solid = await cad.thicken(face, 2)\n */\nexport const thicken = defineOp({\n name: 'thicken',\n brep(input: Shape, thickness: number) {\n if (!input) throw new Error('E_THICKEN_NO_SHAPE: thicken requires a face/shell shape')\n if (typeof thickness !== 'number' || !Number.isFinite(thickness) || thickness === 0) {\n throw new Error('E_THICKEN_BAD_THICKNESS: thicken.thickness must be a non-zero number')\n }\n const kernel = getBrepApi()\n const handle = brepOf(input) as BrepHandle | undefined\n if (!handle) throw new Error('[thicken] input is not BREP')\n const h = getOcctKernel().thicken(handle as never, thickness, 1e-6) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, h), { solid: h }) as Shape\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'thickened-body face vocabulary not defined' } as Provenance,\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoE/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE"}
1
+ {"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+F/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE"}
@@ -60,13 +60,18 @@ export async function registerBrepkitBrepEngine() {
60
60
  'intersect',
61
61
  'makeCylinder',
62
62
  // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——
63
- // makeEllipsoid/makeTorus/makeVertex/mirror/shell;extrude/section/split 语义
63
+ // makeEllipsoid/makeTorus/makeVertex/mirror/shell;section/split 语义
64
64
  // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。
65
+ // extrude 已于 B 批接线(makeRectangle 产出 knownFace → extrude 沿向量挤出,:446)。
65
66
  'makeEllipsoid',
66
67
  'makeTorus',
67
68
  'makeVertex',
68
69
  'mirror',
69
70
  'shell',
71
+ // 2026-09-26 B 批:brepkitKernel.hullFromPoints 真实现接线
72
+ // (→ kernel.convexHull,brepkitKernel.ts:477)——convexHull op 由
73
+ // engines:['occt'] 降级为 capabilities:['hullFromPoints'],故如实声明。
74
+ 'hullFromPoints',
70
75
  'makeFace',
71
76
  'makeLineEdge',
72
77
  // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。
@@ -79,6 +84,28 @@ export async function registerBrepkitBrepEngine() {
79
84
  'surfaceType',
80
85
  'translate',
81
86
  'uvBounds',
87
+ // 2026-09-26 A 批:brepkitKernel 已实现 dispose(GC 型 no-op,:226)与
88
+ // copyShape(调 kernel.copySolid,:397)——此前未声明导致 torus/pattern 族/
89
+ // clone 在静态判定被拒。声明 ⊆ 实例(engine-switch-p3 守卫)。
90
+ 'dispose',
91
+ 'copyShape',
92
+ // 2026-09-26 B 批:brepkitKernel 真实现 makeRectangle(:436)/extrude(:446,要求
93
+ // knownFace 输入——makeRectangle 产出的面已登记进 knownFaces,makeBaseBox 链可用)/
94
+ // transform(:563)/generalTransform(:572,二者均经 cloneAndTransform 深拷贝+原地仿射,
95
+ // 与 occt STEP-safe BRepBuilderAPI_Transform 同语义)。声明 ⊆ 实例(engine-switch-p3 守卫)。
96
+ 'makeRectangle',
97
+ 'extrude',
98
+ 'transform',
99
+ 'generalTransform',
100
+ // 2026-09-26 C batch (section/drill/pocket/boss/mirrorJoin downgrade):
101
+ // brepkitKernel real wiring - sectionByPlane(:492 returns face group, occt returns
102
+ // edge/wire group; semantic diff noted), makeCompound(:668 virtual compound for non-solid
103
+ // children), located(:566 drill cylinder placement), getSubShapes(:775 face selection).
104
+ // declared <= instance (engine-switch-p3 guard).
105
+ 'sectionByPlane',
106
+ 'makeCompound',
107
+ 'located',
108
+ 'getSubShapes',
82
109
  ],
83
110
  heal: true,
84
111
  directEdit: true,
@@ -1 +1 @@
1
- {"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAExG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,gBAAgB;gBAChB,4DAA4D;gBAC5D,oEAAoE;gBACpE,WAAW;gBACX,gBAAgB;gBAChB,WAAW;gBACX,iBAAiB;gBACjB,qBAAqB;gBACrB,iBAAiB;gBACjB,mBAAmB;gBACnB,cAAc;gBACd,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,oDAAoD;gBACpD,2EAA2E;gBAC3E,0DAA0D;gBAC1D,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;aACX;YACD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC","sourcesContent":["/**\n * engine/adapters/brepkit — brepkit BREP 引擎适配器(对照 adapters/occt.ts 形态)\n *\n * 把 createBrepkitPrimitives 包装为 BrepEngine 注册进注册表。业务层只经注册表取\n * 引擎,不直接 import brepkit 初始化函数——引擎本体可整体替换(换适配器即换引擎)。\n *\n * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,\n * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。\n */\n\nimport { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine, type BrepEngine } from '../registry'\nimport type { AssertSatisfiesBrepEngineApi } from '../primitives'\nimport { createBrepkitPrimitives, type BrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel'\n\n/** brepkit 引擎注册 id。 */\nexport const BREPKIT_BREP_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 createBrepkitPrimitives():wasm 装载完成后立即注册——注册返回后\n * provider 直接返回就绪实例。幂等:已注册则跳过。\n *\n * 能力表(设计文档 §5.2 v1 建议值,随单测逐项校正):\n * evolution 仅覆盖 fuse/cut/fillet(chamferWithHistory 未提供,诚实报错);\n * meshLift/assembly/advSurface 均为 false,命中即静态报错,禁止伪造。\n */\nexport async function registerBrepkitBrepEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isBrepEngineRegistered(BREPKIT_BREP_ENGINE_ID)) return\n registerBrepEngine(BREPKIT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREPKIT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n exact: true,\n // 面演化:逐核函数如实声明(Phase 0.2,不是族级布尔)。\n // brepkit 只实现 fillet/cut/fuse 三个 *WithHistory,其余(chamfer/intersect/\n // translate/rotate/mirror/scale/shell/offset/thicken)在\n // brepkit-kernel/brepkitKernel.ts:224-537 一律 unsupported(...)。\n // 声明里少写一项 = 让该 op 静默通过静态判定后死在运行时(红线违规)。\n evolution: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n methods: [\n 'addHolesInFace',\n // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——\n // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。\n 'getBoundingBox',\n // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、\n // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'surfaceCenterOfMass',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'cut',\n 'fixShape',\n 'fuse',\n 'fuseAll',\n 'hashCode',\n 'healSolid',\n 'intersect',\n 'makeCylinder',\n // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——\n // makeEllipsoid/makeTorus/makeVertex/mirror/shell;extrude/section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\n 'makeFace',\n 'makeLineEdge',\n // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'scale',\n 'sewAndSolidify',\n 'surfaceNormal',\n 'surfaceType',\n 'translate',\n 'uvBounds',\n ],\n heal: true,\n directEdit: true,\n advSurface: false,\n assembly: false,\n meshLift: false,\n exactMeasurement: true,\n brepExport: true,\n tessellationModel: 'extract-time',\n },\n }))\n}\n\n/** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerBrepkitBrepEngine()\n}\n\n// §7.8 编译期完整性守卫:brepkit 原语集合必须满足 BrepEngineApi。\n// 实现缺方法或签名不兼容 → tsc 在此报错列出缺失(与 occt 适配器同守卫)。\ntype _AssertBrepkitApi = AssertSatisfiesBrepEngineApi<BrepkitPrimitives>\n"]}
1
+ {"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAExG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,gBAAgB;gBAChB,4DAA4D;gBAC5D,oEAAoE;gBACpE,WAAW;gBACX,gBAAgB;gBAChB,WAAW;gBACX,iBAAiB;gBACjB,qBAAqB;gBACrB,iBAAiB;gBACjB,mBAAmB;gBACnB,cAAc;gBACd,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,oDAAoD;gBACpD,mEAAmE;gBACnE,0DAA0D;gBAC1D,qEAAqE;gBACrE,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,oDAAoD;gBACpD,8DAA8D;gBAC9D,8DAA8D;gBAC9D,gBAAgB;gBAChB,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;gBACV,6DAA6D;gBAC7D,+DAA+D;gBAC/D,8CAA8C;gBAC9C,SAAS;gBACT,WAAW;gBACX,uEAAuE;gBACvE,oEAAoE;gBACpE,yEAAyE;gBACzE,+EAA+E;gBAC/E,eAAe;gBACf,SAAS;gBACT,WAAW;gBACX,kBAAkB;gBAClB,uEAAuE;gBACvE,mFAAmF;gBACnF,0FAA0F;gBAC1F,wFAAwF;gBACxF,iDAAiD;gBACjD,gBAAgB;gBAChB,cAAc;gBACd,SAAS;gBACT,cAAc;aACf;YACD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC","sourcesContent":["/**\n * engine/adapters/brepkit — brepkit BREP 引擎适配器(对照 adapters/occt.ts 形态)\n *\n * 把 createBrepkitPrimitives 包装为 BrepEngine 注册进注册表。业务层只经注册表取\n * 引擎,不直接 import brepkit 初始化函数——引擎本体可整体替换(换适配器即换引擎)。\n *\n * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,\n * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。\n */\n\nimport { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine, type BrepEngine } from '../registry'\nimport type { AssertSatisfiesBrepEngineApi } from '../primitives'\nimport { createBrepkitPrimitives, type BrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel'\n\n/** brepkit 引擎注册 id。 */\nexport const BREPKIT_BREP_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 createBrepkitPrimitives():wasm 装载完成后立即注册——注册返回后\n * provider 直接返回就绪实例。幂等:已注册则跳过。\n *\n * 能力表(设计文档 §5.2 v1 建议值,随单测逐项校正):\n * evolution 仅覆盖 fuse/cut/fillet(chamferWithHistory 未提供,诚实报错);\n * meshLift/assembly/advSurface 均为 false,命中即静态报错,禁止伪造。\n */\nexport async function registerBrepkitBrepEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isBrepEngineRegistered(BREPKIT_BREP_ENGINE_ID)) return\n registerBrepEngine(BREPKIT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREPKIT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n exact: true,\n // 面演化:逐核函数如实声明(Phase 0.2,不是族级布尔)。\n // brepkit 只实现 fillet/cut/fuse 三个 *WithHistory,其余(chamfer/intersect/\n // translate/rotate/mirror/scale/shell/offset/thicken)在\n // brepkit-kernel/brepkitKernel.ts:224-537 一律 unsupported(...)。\n // 声明里少写一项 = 让该 op 静默通过静态判定后死在运行时(红线违规)。\n evolution: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n methods: [\n 'addHolesInFace',\n // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——\n // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。\n 'getBoundingBox',\n // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、\n // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'surfaceCenterOfMass',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'cut',\n 'fixShape',\n 'fuse',\n 'fuseAll',\n 'hashCode',\n 'healSolid',\n 'intersect',\n 'makeCylinder',\n // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——\n // makeEllipsoid/makeTorus/makeVertex/mirror/shell;section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n // extrude 已于 B 批接线(makeRectangle 产出 knownFace → extrude 沿向量挤出,:446)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\n // 2026-09-26 B 批:brepkitKernel.hullFromPoints 真实现接线\n // (→ kernel.convexHull,brepkitKernel.ts:477)——convexHull op 由\n // engines:['occt'] 降级为 capabilities:['hullFromPoints'],故如实声明。\n 'hullFromPoints',\n 'makeFace',\n 'makeLineEdge',\n // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'scale',\n 'sewAndSolidify',\n 'surfaceNormal',\n 'surfaceType',\n 'translate',\n 'uvBounds',\n // 2026-09-26 A 批:brepkitKernel 已实现 dispose(GC 型 no-op,:226)与\n // copyShape(调 kernel.copySolid,:397)——此前未声明导致 torus/pattern 族/\n // clone 在静态判定被拒。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'dispose',\n 'copyShape',\n // 2026-09-26 B 批:brepkitKernel 真实现 makeRectangle(:436)/extrude(:446,要求\n // knownFace 输入——makeRectangle 产出的面已登记进 knownFaces,makeBaseBox 链可用)/\n // transform(:563)/generalTransform(:572,二者均经 cloneAndTransform 深拷贝+原地仿射,\n // 与 occt STEP-safe BRepBuilderAPI_Transform 同语义)。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'makeRectangle',\n 'extrude',\n 'transform',\n 'generalTransform',\n // 2026-09-26 C batch (section/drill/pocket/boss/mirrorJoin downgrade):\n // brepkitKernel real wiring - sectionByPlane(:492 returns face group, occt returns\n // edge/wire group; semantic diff noted), makeCompound(:668 virtual compound for non-solid\n // children), located(:566 drill cylinder placement), getSubShapes(:775 face selection).\n // declared <= instance (engine-switch-p3 guard).\n 'sectionByPlane',\n 'makeCompound',\n 'located',\n 'getSubShapes',\n ],\n heal: true,\n directEdit: true,\n advSurface: false,\n assembly: false,\n meshLift: false,\n exactMeasurement: true,\n brepExport: true,\n tessellationModel: 'extract-time',\n },\n }))\n}\n\n/** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerBrepkitBrepEngine()\n}\n\n// §7.8 编译期完整性守卫:brepkit 原语集合必须满足 BrepEngineApi。\n// 实现缺方法或签名不兼容 → tsc 在此报错列出缺失(与 occt 适配器同守卫)。\ntype _AssertBrepkitApi = AssertSatisfiesBrepEngineApi<BrepkitPrimitives>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAuHzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
1
+ {"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAmIzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
@@ -132,6 +132,18 @@ const OCCT_METHOD_KINDS = [
132
132
  'chamferDistAngle',
133
133
  'fillet',
134
134
  'filletVariable',
135
+ // 2026-09-26 B 批:rotate/applyMatrix 从 engines:[occt] 降级为能力路由后,occt 侧须
136
+ // 如实声明 transform(:228,BRepBuilderAPI_Transform 深拷贝,STEP-safe)/
137
+ // generalTransform(:231,gp_GTrsf)——此前两方法在 primitives 上实现但未登记进能力表。
138
+ 'transform',
139
+ 'generalTransform',
140
+ // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade - OCCT already implements
141
+ // sectionByPlane(:162)/makeCompound(:285)/located(:229)/getSubShapes(:314) but previously undeclared
142
+ // (engines:[occt] bypassed the gate). Now declared honestly for capability routing.
143
+ 'sectionByPlane',
144
+ 'makeCompound',
145
+ 'located',
146
+ 'getSubShapes',
135
147
  ];
136
148
  /**
137
149
  * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。
@@ -1 +1 @@
1
- {"version":3,"file":"occt.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)\n *\n * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/\n * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。\n * 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化\n * 函数——引擎本体可整体替换(换一个适配器即换引擎)。\n *\n * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):\n * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个\n * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型\n * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。\n *\n * 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、\n * XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。\n */\n\nimport { registerBrepEngine, hasBrepEngine, isBrepEngineRegistered, type BrepEngine } from '../registry'\nimport type { BrepEvolutionKind, BrepMethodKind } from '../types'\nimport { createOcctPrimitives } from '../../../occt-kernel/occt-primitives'\n\n/** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */\nexport const OCCT_BREP_ENGINE_ID = 'occt'\n\n/**\n * OCCT 实际提供的 `*WithHistory` 核函数名(Phase 0.2:逐核函数如实声明)。\n *\n * 12 个全部由 `occt-wasm@3.8.4` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。\n * L1 契约只含前三员 + filletWithHistory(双方都有对齐实现);其余 8 个是 occt\n * 平台面能力(brepkit 无对应 API),存在性由本能力表如实声明,op 侧用\n * `engines: ['occt']`(Phase 5 D11)表达平台归属。\n */\nconst OCCT_EVOLUTION_KINDS = [\n 'fuseWithHistory',\n 'cutWithHistory',\n 'intersectWithHistory',\n 'filletWithHistory',\n 'chamferWithHistory',\n 'translateWithHistory',\n 'rotateWithHistory',\n 'mirrorWithHistory',\n 'scaleWithHistory',\n 'shellWithHistory',\n 'offsetWithHistory',\n 'thickenWithHistory',\n] as const satisfies readonly BrepEvolutionKind[]\n\n/**\n * 非演化内核方法全集(BrepMethodKind)——逐核如实声明(Phase 1,P2 缺口补齐)。\n *\n * ⚠️ Phase 2 修正(能力声明=可执行语义):\n * - 保留 `gridPattern`:occt-wasm 无原生 gridPattern,但适配器有组合实现\n * (嵌套 linearPattern + fuseAll,见 occt-primitives.ts)——occt 下\n * gridPattern op 可执行,声明成立;\n * - 移除 `rectangularPattern`:occt-wasm 无此内核方法,vendored rectangularPattern\n * 是纯 JS 组合(compoundOpsFns.ts translate+fuseAll,不调内核)——无 op 依赖\n * 该能力名,声明即虚假(capability-map 实证 36 op 无一依赖)。\n */\nconst OCCT_METHOD_KINDS = [\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'mirror',\n 'rotate',\n 'translate',\n 'scale',\n 'makeRectangle',\n 'shell',\n 'extrude',\n 'loft',\n 'loftAdvanced',\n 'section',\n 'sweepPipeShell',\n 'simplePipe',\n 'revolveVec',\n 'buildExtrusionLaw',\n 'fuse',\n 'cut',\n 'intersect',\n 'fuseAll',\n 'makeArcEdge',\n 'makeBezierEdge',\n 'makeCylinder',\n 'makeEllipsoid',\n 'makeFace',\n 'makeFaceOnSurface',\n 'makeLineEdge',\n 'makeTorus',\n 'makeVertex',\n 'makeWireFromMixed',\n 'buildEdgeOnSurface',\n 'addHolesInFace',\n 'buildTriFace',\n 'sew',\n 'sewAndSolidify',\n 'healFace',\n 'healSolid',\n 'healWire',\n 'fixShape',\n 'fixSelfIntersection',\n 'isValid',\n 'removeDegenerateEdges',\n 'simplify',\n 'split',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'hullFromPoints',\n 'isNull',\n 'iterShapes',\n 'locate',\n 'shapeType',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n // Phase 5(D5):测量族能力名统一为 L1 中立名(getBoundingBox/getVolume/...)——\n // vendored 面按 brepjs 自身命名(volume/area/length),core 能力表用 L1 中立名。\n 'getBoundingBox',\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'composeTransform',\n 'applyComposedTransformWithHistory',\n 'generalTransformNonOrthogonal',\n 'generalTransformWithHistory',\n 'importStl',\n 'createXCAFDocument',\n 'importXCAFFromSTEP',\n 'copyShape',\n 'dispose',\n 'downcast',\n 'hashCode',\n // chamfer/fillet 基础方法(directEdit 族逐核真名;occt-wasm 原生提供)\n 'chamfer',\n 'chamferDistAngle',\n 'fillet',\n 'filletVariable',\n] as const satisfies readonly BrepMethodKind[]\n\n/**\n * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后\n * 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或\n * 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。\n */\nexport async function registerOcctBrepEngine(): Promise<void> {\n const primitives = await createOcctPrimitives()\n if (isBrepEngineRegistered(OCCT_BREP_ENGINE_ID)) return\n registerBrepEngine(OCCT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: OCCT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n // 面演化:逐核函数名单(不是族级布尔——见 BrepEvolutionKind)。\n evolution: OCCT_EVOLUTION_KINDS,\n // 非演化内核方法:逐核如实声明(Phase 1,P2 缺口补齐;op 声明按此静态判定)。\n methods: OCCT_METHOD_KINDS,\n heal: true,\n directEdit: true,\n advSurface: true,\n assembly: true,\n // P7 并入(D4):OCCT 是精确 B-rep 内核——如实声明 brepjs KernelCapabilities 字段。\n exact: true,\n brepExport: true,\n exactMeasurement: true,\n tessellationModel: 'extract-time',\n },\n }))\n // 2026-09-25 core-decouple Phase 2(§5.1):删除 occt-kernel-bridge 后,本注册\n // 流程只管 core 引擎注册表,不再向 vendored kernel registry 注入——vendored\n // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 vendored 面的\n // 宿主/测试自行装配 vendored registry。\n}\n\n/**\n * 内置默认 BREP 引擎装配(OCCT):宿主未注册任何引擎时的缺省值。\n *\n * OCCT 是 faijs 的默认 BREP 引擎——低频率、静态的替换:换引擎 = 宿主在\n * 装配期显式注册其它引擎(首个注册者为默认),或改本处默认。宿主无需为\n * 每次使用自行提供引擎;本函数幂等,已注册任何引擎则 no-op。\n */\nexport async function ensureOcctDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerOcctBrepEngine()\n}\n"]}
1
+ {"version":3,"file":"occt.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)\n *\n * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/\n * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。\n * 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化\n * 函数——引擎本体可整体替换(换一个适配器即换引擎)。\n *\n * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):\n * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个\n * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型\n * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。\n *\n * 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、\n * XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。\n */\n\nimport { registerBrepEngine, hasBrepEngine, isBrepEngineRegistered, type BrepEngine } from '../registry'\nimport type { BrepEvolutionKind, BrepMethodKind } from '../types'\nimport { createOcctPrimitives } from '../../../occt-kernel/occt-primitives'\n\n/** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */\nexport const OCCT_BREP_ENGINE_ID = 'occt'\n\n/**\n * OCCT 实际提供的 `*WithHistory` 核函数名(Phase 0.2:逐核函数如实声明)。\n *\n * 12 个全部由 `occt-wasm@3.8.4` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。\n * L1 契约只含前三员 + filletWithHistory(双方都有对齐实现);其余 8 个是 occt\n * 平台面能力(brepkit 无对应 API),存在性由本能力表如实声明,op 侧用\n * `engines: ['occt']`(Phase 5 D11)表达平台归属。\n */\nconst OCCT_EVOLUTION_KINDS = [\n 'fuseWithHistory',\n 'cutWithHistory',\n 'intersectWithHistory',\n 'filletWithHistory',\n 'chamferWithHistory',\n 'translateWithHistory',\n 'rotateWithHistory',\n 'mirrorWithHistory',\n 'scaleWithHistory',\n 'shellWithHistory',\n 'offsetWithHistory',\n 'thickenWithHistory',\n] as const satisfies readonly BrepEvolutionKind[]\n\n/**\n * 非演化内核方法全集(BrepMethodKind)——逐核如实声明(Phase 1,P2 缺口补齐)。\n *\n * ⚠️ Phase 2 修正(能力声明=可执行语义):\n * - 保留 `gridPattern`:occt-wasm 无原生 gridPattern,但适配器有组合实现\n * (嵌套 linearPattern + fuseAll,见 occt-primitives.ts)——occt 下\n * gridPattern op 可执行,声明成立;\n * - 移除 `rectangularPattern`:occt-wasm 无此内核方法,vendored rectangularPattern\n * 是纯 JS 组合(compoundOpsFns.ts translate+fuseAll,不调内核)——无 op 依赖\n * 该能力名,声明即虚假(capability-map 实证 36 op 无一依赖)。\n */\nconst OCCT_METHOD_KINDS = [\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'mirror',\n 'rotate',\n 'translate',\n 'scale',\n 'makeRectangle',\n 'shell',\n 'extrude',\n 'loft',\n 'loftAdvanced',\n 'section',\n 'sweepPipeShell',\n 'simplePipe',\n 'revolveVec',\n 'buildExtrusionLaw',\n 'fuse',\n 'cut',\n 'intersect',\n 'fuseAll',\n 'makeArcEdge',\n 'makeBezierEdge',\n 'makeCylinder',\n 'makeEllipsoid',\n 'makeFace',\n 'makeFaceOnSurface',\n 'makeLineEdge',\n 'makeTorus',\n 'makeVertex',\n 'makeWireFromMixed',\n 'buildEdgeOnSurface',\n 'addHolesInFace',\n 'buildTriFace',\n 'sew',\n 'sewAndSolidify',\n 'healFace',\n 'healSolid',\n 'healWire',\n 'fixShape',\n 'fixSelfIntersection',\n 'isValid',\n 'removeDegenerateEdges',\n 'simplify',\n 'split',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'hullFromPoints',\n 'isNull',\n 'iterShapes',\n 'locate',\n 'shapeType',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n // Phase 5(D5):测量族能力名统一为 L1 中立名(getBoundingBox/getVolume/...)——\n // vendored 面按 brepjs 自身命名(volume/area/length),core 能力表用 L1 中立名。\n 'getBoundingBox',\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'composeTransform',\n 'applyComposedTransformWithHistory',\n 'generalTransformNonOrthogonal',\n 'generalTransformWithHistory',\n 'importStl',\n 'createXCAFDocument',\n 'importXCAFFromSTEP',\n 'copyShape',\n 'dispose',\n 'downcast',\n 'hashCode',\n // chamfer/fillet 基础方法(directEdit 族逐核真名;occt-wasm 原生提供)\n 'chamfer',\n 'chamferDistAngle',\n 'fillet',\n 'filletVariable',\n // 2026-09-26 B 批:rotate/applyMatrix 从 engines:[occt] 降级为能力路由后,occt 侧须\n // 如实声明 transform(:228,BRepBuilderAPI_Transform 深拷贝,STEP-safe)/\n // generalTransform(:231,gp_GTrsf)——此前两方法在 primitives 上实现但未登记进能力表。\n 'transform',\n 'generalTransform',\n // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade - OCCT already implements\n // sectionByPlane(:162)/makeCompound(:285)/located(:229)/getSubShapes(:314) but previously undeclared\n // (engines:[occt] bypassed the gate). Now declared honestly for capability routing.\n 'sectionByPlane',\n 'makeCompound',\n 'located',\n 'getSubShapes',\n] as const satisfies readonly BrepMethodKind[]\n\n/**\n * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后\n * 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或\n * 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。\n */\nexport async function registerOcctBrepEngine(): Promise<void> {\n const primitives = await createOcctPrimitives()\n if (isBrepEngineRegistered(OCCT_BREP_ENGINE_ID)) return\n registerBrepEngine(OCCT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: OCCT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n // 面演化:逐核函数名单(不是族级布尔——见 BrepEvolutionKind)。\n evolution: OCCT_EVOLUTION_KINDS,\n // 非演化内核方法:逐核如实声明(Phase 1,P2 缺口补齐;op 声明按此静态判定)。\n methods: OCCT_METHOD_KINDS,\n heal: true,\n directEdit: true,\n advSurface: true,\n assembly: true,\n // P7 并入(D4):OCCT 是精确 B-rep 内核——如实声明 brepjs KernelCapabilities 字段。\n exact: true,\n brepExport: true,\n exactMeasurement: true,\n tessellationModel: 'extract-time',\n },\n }))\n // 2026-09-25 core-decouple Phase 2(§5.1):删除 occt-kernel-bridge 后,本注册\n // 流程只管 core 引擎注册表,不再向 vendored kernel registry 注入——vendored\n // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 vendored 面的\n // 宿主/测试自行装配 vendored registry。\n}\n\n/**\n * 内置默认 BREP 引擎装配(OCCT):宿主未注册任何引擎时的缺省值。\n *\n * OCCT 是 faijs 的默认 BREP 引擎——低频率、静态的替换:换引擎 = 宿主在\n * 装配期显式注册其它引擎(首个注册者为默认),或改本处默认。宿主无需为\n * 每次使用自行提供引擎;本函数幂等,已注册任何引擎则 no-op。\n */\nexport async function ensureOcctDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerOcctBrepEngine()\n}\n"]}
@@ -181,7 +181,7 @@ export type BrepEvolutionKind = 'fuseWithHistory' | 'cutWithHistory' | 'intersec
181
181
  * 初始全集 = Phase 0 能力映射表(`api/surface/capability-map.json`)盘点的
182
182
  * compat op 依赖内核方法 + 方案初始项;Phase 3 全量收敛时按映射表滚动补全。
183
183
  */
184
- export type BrepMethodKind = 'linearPattern' | 'circularPattern' | 'gridPattern' | 'rectangularPattern' | 'mirror' | 'rotate' | 'translate' | 'scale' | 'chamfer' | 'chamferDistAngle' | 'fillet' | 'filletVariable' | 'makeRectangle' | 'shell' | 'extrude' | 'loft' | 'loftAdvanced' | 'section' | 'sweepPipeShell' | 'simplePipe' | 'revolveVec' | 'buildExtrusionLaw' | 'fuse' | 'cut' | 'intersect' | 'fuseAll' | 'makeArcEdge' | 'makeBezierEdge' | 'makeCylinder' | 'makeEllipsoid' | 'makeFace' | 'makeFaceOnSurface' | 'makeLineEdge' | 'makeTorus' | 'makeVertex' | 'makeWireFromMixed' | 'buildEdgeOnSurface' | 'addHolesInFace' | 'buildTriFace' | 'sew' | 'sewAndSolidify' | 'healFace' | 'healSolid' | 'healWire' | 'fixShape' | 'fixSelfIntersection' | 'isValid' | 'removeDegenerateEdges' | 'simplify' | 'split' | 'getBoundingBox' | 'getVolume' | 'getSurfaceArea' | 'getLength' | 'getCenterOfMass' | 'curveParameters' | 'curvePointAtParam' | 'curveTangent' | 'hullFromPoints' | 'isNull' | 'iterShapes' | 'locate' | 'shapeType' | 'surfaceCenterOfMass' | 'surfaceNormal' | 'surfaceType' | 'uvBounds' | 'composeTransform' | 'applyComposedTransformWithHistory' | 'generalTransformNonOrthogonal' | 'generalTransformWithHistory' | 'importStl' | 'createXCAFDocument' | 'importXCAFFromSTEP' | 'copyShape' | 'dispose' | 'downcast' | 'hashCode';
184
+ export type BrepMethodKind = 'linearPattern' | 'circularPattern' | 'gridPattern' | 'rectangularPattern' | 'mirror' | 'rotate' | 'translate' | 'scale' | 'chamfer' | 'chamferDistAngle' | 'fillet' | 'filletVariable' | 'makeRectangle' | 'shell' | 'extrude' | 'loft' | 'loftAdvanced' | 'section' | 'sweepPipeShell' | 'simplePipe' | 'revolveVec' | 'buildExtrusionLaw' | 'fuse' | 'cut' | 'intersect' | 'fuseAll' | 'makeArcEdge' | 'makeBezierEdge' | 'makeCylinder' | 'makeEllipsoid' | 'makeFace' | 'makeFaceOnSurface' | 'makeLineEdge' | 'makeTorus' | 'makeVertex' | 'makeWireFromMixed' | 'buildEdgeOnSurface' | 'addHolesInFace' | 'buildTriFace' | 'sew' | 'sewAndSolidify' | 'healFace' | 'healSolid' | 'healWire' | 'fixShape' | 'fixSelfIntersection' | 'isValid' | 'removeDegenerateEdges' | 'simplify' | 'split' | 'getBoundingBox' | 'getVolume' | 'getSurfaceArea' | 'getLength' | 'getCenterOfMass' | 'curveParameters' | 'curvePointAtParam' | 'curveTangent' | 'hullFromPoints' | 'isNull' | 'iterShapes' | 'locate' | 'shapeType' | 'surfaceCenterOfMass' | 'surfaceNormal' | 'surfaceType' | 'uvBounds' | 'composeTransform' | 'applyComposedTransformWithHistory' | 'generalTransformNonOrthogonal' | 'generalTransformWithHistory' | 'sectionByPlane' | 'makeCompound' | 'located' | 'getSubShapes' | 'transform' | 'generalTransform' | 'importStl' | 'createXCAFDocument' | 'importXCAFFromSTEP' | 'copyShape' | 'dispose' | 'downcast' | 'hashCode';
185
185
  /**
186
186
  * 可选能力槽声明(§7.5,Phase 1 钉死成员)。
187
187
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAU,CAAA","sourcesContent":["/**\n * engine/types — BREP 引擎中立类型(零具体实现依赖,不 import 任何内核包)\n *\n *\n * 契约(对应 brepjs 的 KernelShape 约定):\n * - L1 及以上代码永远不对句柄调用任何方法,只把它传回产生它的那个引擎;\n * - 句柄不得跨引擎传递——跨引擎必须先经 mesh 层(§8.3 的结构保证)。\n * - OCCT 适配器的句柄运行时就是 number,加 brand 是零成本的类型层转换。\n */\n\n/**\n * BREP 引擎身份(D11-1,2026-09-24 narrowing plan)。\n *\n * 三个值来自三个已存在的引擎 id 常量(`OCCT_BREP_ENGINE_ID` / `BREPKIT_BREP_ENGINE_ID`\n * / `BREP_MOCK_ENGINE_ID`,各自适配器导出);本类型由常量数组推导,禁止裸 `string`。\n * 适配器常量用 `satisfies BrepEngineId` 收窄(typecheck 钉住集合一致)。\n *\n * 消费点:`defineOp` 的 `engines` 声明(平台 op 自证身份)、`dispatchPath` 的平台\n * 身份分支(D11-2)、`script-face-manifest` 的平台 op 标注(§3.8)。\n */\nexport const BREP_ENGINE_IDS = ['occt', 'brepkit', 'brep_mock'] as const\n\n/** BREP 引擎身份(固定三值联合;由 {@link BREP_ENGINE_IDS} 推导)。 */\nexport type BrepEngineId = (typeof BREP_ENGINE_IDS)[number]\n\ndeclare const BrepHandleBrand: unique symbol\n\n/**\n * BREP 实体句柄——不透明值。\n *\n * 与 occt-wasm 的 ShapeHandle 同构(number & brand)。OCCT 适配器\n * (occt-kernel/)内部以 `as unknown as` 双向转换,跨适配器边界零运行时成本。\n */\nexport type BrepHandle = number & { readonly [BrepHandleBrand]: never }\n\n/** 三维点/向量(与内核无关的中立形态)。 */\nexport interface BrepVec3 {\n x: number\n y: number\n z: number\n}\n\n/** 轴对齐包围盒。 */\nexport interface BrepBoundingBox {\n xmin: number\n ymin: number\n zmin: number\n xmax: number\n ymax: number\n zmax: number\n}\n\n/** BRepMesh 三角化输出(镜像 occt-wasm Mesh 的中立形态)。 */\nexport interface BrepMeshResult {\n /** XYZ 交错顶点坐标,长度 = vertexCount * 3 */\n positions: Float32Array\n /** XYZ 交错顶点法线,长度 = vertexCount * 3 */\n normals: Float32Array\n /** 三角形索引 */\n indices: Uint32Array\n /** 顶点数(positions.length / 3) */\n vertexCount: number\n /** 三角形数(indices.length / 3) */\n triangleCount: number\n /** 面组:[triStart, triCount, faceHash] 三元组(meshShape 时存在) */\n faceGroups?: Int32Array\n /** 面组数(meshShape 时存在) */\n faceCount?: number\n}\n\n/** 三角化精度选项。 */\nexport interface BrepTessellateOptions {\n /** 最大弦偏差(mm),默认 0.1 */\n linearDeflection?: number\n /** 最大角偏差(弧度),默认 0.5 */\n angularDeflection?: number\n /** 按每条边长度相对解释 linearDeflection */\n relative?: boolean\n}\n\n/** 边折线数据(wireframe 输出)。 */\nexport interface BrepEdgeData {\n /** XYZ 交错边采样点 */\n points: Float32Array\n /** 每边分组:[pointStart, pointCount, edgeHash] 三元组 */\n edgeGroups: Int32Array\n /** points 中的浮点数总数(= XYZ 坐标数) */\n pointCount: number\n /** 不同边的数量 */\n edgeCount: number\n}\n\n/**\n * *WithHistory 面演化数据(modified/generated/deleted 用面 hash 编码)。\n *\n * ⚠️ **三个字段的编码不同,实测于 2026-09-22(`brep/engine/phase0-kernel-probes.test.ts`),\n * 与 occt-wasm 自己的文档(`dist/types.d.ts:227-231`)不符**:\n *\n * | 字段 | 实际编码 | 键/值语义 |\n * |---|---|---|\n * | `modified` | **分段** `[inHash, count, outHash…] × N` | 键 = 输入面 hash;值 = 该输入面在结果里的**后继**(可 1→N) |\n * | `generated` | **同构分段**,**键集与 `modified` 相同** | 值 = 该输入面派生出的**中间形**(实测结果里 0 存活) |\n * | `deleted` | **扁平** hash 数组 | 输入面中已不存在的面 |\n *\n * 「扁平数组」的读法会把 `generated` 的 count 字段当成 hash——\n * 实测 `cut` 的 `generated` 里真的含 `2`(一个 count),故该误读不会自己暴露。\n *\n * ⚠️ **未受影响的面有两种上报形态,两种都表示\"未变\"**:自映射(`i -> [i]`)。\n * 或者**整个不上报**(`fillet` 实测两者并存)。⇒ 读法必须是\n * `modified.get(h) ?? [h]`,不能只看\"是否出现在 `modified` 里\"。\n *\n * ⇒ 结果面的三种命运(判据见 `phase0-kernel-probes.test.ts`):\n * **原样幸存**(hash ∈ 输入 hash 集合,hash 逐字不变)/ **改型幸存**(在 `modified` 输出里)/\n * **新造**(两者皆非——这才是真正需要派生词汇命名的面,如 `fillet` 的过渡面)。\n */\nexport interface BrepEvolutionData {\n /** 结果句柄 */\n result: BrepHandle\n /** 分段:`[inHash, count, outHash…] × N`;值 = 该输入面的结果后继 */\n modified: number[]\n /** 分段(键集同 `modified`):该输入面派生的中间形 hash,实测结果里 0 存活 */\n generated: number[]\n /** 扁平:输入面中已不存在的面 hash */\n deleted: number[]\n}\n\n/** 曲线参数区间(与内核 curveParameters 返回同构:first/last)。 */\nexport interface BrepCurveParameters {\n first: number\n last: number\n}\n\n/** 曲面 UV 边界。 */\nexport interface BrepUvBounds {\n uMin: number\n uMax: number\n vMin: number\n vMax: number\n}\n\n/** 子形状类型(getSubShapes / subShapeHashes 等)。 */\nexport type BrepSubShapeType = 'vertex' | 'edge' | 'wire' | 'face' | 'shell' | 'solid'\n\n/**\n * XCAF 装配文档句柄(可选能力槽 AssemblyCapability 的文档形态)。\n *\n * 形态来自 occt-wasm XCAFDocumentImpl 的被调用子集(step.ts / occt-kernel 装配链)。\n */\nexport interface BrepXcafDocument {\n addShape(shape: BrepHandle, opts?: { name?: string; color?: [number, number, number] }): void\n exportSTEP(): string\n close(): void\n}\n\n/**\n * 曲面细分精度控制模型(与 brepjs KernelCapabilities.tessellationModel 同构的中立镜像,\n * P7 并入;faijs 侧零内核依赖,不 import vendored 树——D8 反向只允许发生在 api/)。\n *\n * - `'build-time'` — 网格在实体构造时固定(如 manifold 全局分段设置);质量参数须在构造前应用。\n * - `'extract-time'`— 形状是精确的,按需以每调用 deflection 细分(如 OCCT);质量是\n * `mesh()`/导出时的默认 deflection。\n * - `'none'` — 无细分控制(或非网格内核)。\n */\nexport type BrepTessellationModel = 'build-time' | 'extract-time' | 'none'\n\n/**\n * 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**声明。\n *\n * ⚠️ **为什么不能是一个布尔位**(2026-09-22 Phase 0.2):`evolution: true` 是**族级**声明。\n * 而「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,\n * 内核可以只提供其中一部分。`brepkit` 就是活例:它提供 `fuse`/`cut`/`fillet`,\n * `chamfer`/`intersect`/`translate`/… 一律 `unsupported(...)`\n * (`brepkit-kernel/brepkitKernel.ts:220-537`)。\n *\n * 族级布尔的后果不是\"少报\"而是**多报**:`cad.intersect` 声明需要 `evolution`,\n * 在 `evolution: true` 下通过静态判定 → 落到运行时才撞 `unsupported('intersectWithHistory')`。\n * 这直接违反 AGENTS.md 红线「BREP 路径能否走由静态规则判定,禁止运行时回退」——\n * 静态判定之所以能成立,前提是引擎的能力声明**说的是逐核函数的实话**。\n *\n * ⇒ 引擎声明\"我提供哪几个\"(`BrepCapabilities.evolution`),op 声明\"我要哪一个\"\n * (`defineOp.capabilities`),两者**按名字求交集**(`cad-runtime/backend-dispatch.ts`)。\n */\nexport type BrepEvolutionKind =\n // 布尔族\n | 'fuseWithHistory'\n | 'cutWithHistory'\n | 'intersectWithHistory'\n // 倒圆/倒角族\n | 'filletWithHistory'\n | 'chamferWithHistory'\n // 刚体变换族\n | 'translateWithHistory'\n | 'rotateWithHistory'\n | 'mirrorWithHistory'\n | 'scaleWithHistory'\n // 抽壳/偏置/加厚族\n | 'shellWithHistory'\n | 'offsetWithHistory'\n | 'thickenWithHistory'\n\n/**\n * 非演化内核方法真名(`*WithHistory` 之外的 `BrepEngineApi` 方法)。\n *\n * 与 `BrepEvolutionKind` 分名(P3 冲突消除):`'mirror'` 一个字符串不能同时表示\n * \"提供 `mirrorWithHistory`\"与\"提供 `mirror`\",两族必须互不共用字符串。\n * 语义与 evolution 相同——**逐核函数**声明:声明 = 实现(诚实原则),\n * 缺省/空 = 一个都不提供。\n *\n * 初始全集 = Phase 0 能力映射表(`api/surface/capability-map.json`)盘点的\n * compat op 依赖内核方法 + 方案初始项;Phase 3 全量收敛时按映射表滚动补全。\n */\nexport type BrepMethodKind =\n // pattern 族\n | 'linearPattern'\n | 'circularPattern'\n | 'gridPattern'\n | 'rectangularPattern'\n // 基础方法族(裸方法,无历史)\n | 'mirror'\n | 'rotate'\n | 'translate'\n | 'scale'\n // 倒角/圆角基础方法(directEdit 族下的逐核真名,Phase 2:chamfer op 能力声明\n // 精确到内核方法——brepkit 无 chamfer/chamferDistAngle,静态判定执行前报错)\n | 'chamfer'\n | 'chamferDistAngle'\n | 'fillet'\n | 'filletVariable'\n // 构形/拉伸/放样族\n | 'makeRectangle'\n | 'shell'\n | 'extrude'\n | 'loft'\n | 'loftAdvanced'\n | 'section'\n | 'sweepPipeShell'\n | 'simplePipe'\n | 'revolveVec'\n | 'buildExtrusionLaw'\n // 布尔/装配辅助(裸方法)\n | 'fuse'\n | 'cut'\n | 'intersect'\n | 'fuseAll'\n // 构造方法族\n | 'makeArcEdge'\n | 'makeBezierEdge'\n | 'makeCylinder'\n | 'makeEllipsoid'\n | 'makeFace'\n | 'makeFaceOnSurface'\n | 'makeLineEdge'\n | 'makeTorus'\n | 'makeVertex'\n | 'makeWireFromMixed'\n | 'buildEdgeOnSurface'\n | 'addHolesInFace'\n | 'buildTriFace'\n | 'sew'\n | 'sewAndSolidify'\n // 修复/校验族\n | 'healFace'\n | 'healSolid'\n | 'healWire'\n | 'fixShape'\n | 'fixSelfIntersection'\n | 'isValid'\n | 'removeDegenerateEdges'\n | 'simplify'\n | 'split'\n // 查询/测量族\n // ⚠️ 测量族能力名用 L1 中立名(D5,narrowing plan):`getBoundingBox` / `getVolume`\n // / `getSurfaceArea` / `getLength` / `getCenterOfMass` ——能力名 == BrepEngineApi 接口名,\n // 守卫「能力声明诚实」据此逐名断言适配器是 function。vendored 面自己的原生名\n // (boundingBox/volume/area/length)按其自身命名,\n // 不是能力名空间成员。\n | 'getBoundingBox'\n | 'getVolume'\n | 'getSurfaceArea'\n | 'getLength'\n | 'getCenterOfMass'\n | 'curveParameters'\n | 'curvePointAtParam'\n | 'curveTangent'\n | 'hullFromPoints'\n | 'isNull'\n | 'iterShapes'\n | 'locate'\n | 'shapeType'\n | 'surfaceCenterOfMass'\n | 'surfaceNormal'\n | 'surfaceType'\n | 'uvBounds'\n // 变换族(非演化真名)\n | 'composeTransform'\n | 'applyComposedTransformWithHistory'\n | 'generalTransformNonOrthogonal'\n | 'generalTransformWithHistory'\n // 交换/导入族\n | 'importStl'\n | 'createXCAFDocument'\n | 'importXCAFFromSTEP'\n // 生命周期辅助\n | 'copyShape'\n | 'dispose'\n | 'downcast'\n | 'hashCode'\n\n/**\n * 可选能力槽声明(§7.5,Phase 1 钉死成员)。\n *\n * 缺失的能力 → 依赖它的功能静态降级走 mesh(§8.4),绝不伪造。\n *\n * P7 并入(D4):移植 brepjs `KernelCapabilities` 的数据字段(exact/brepExport/\n * exactMeasurement/tessellationModel)进本模型,由适配器在注册时如实声明;分派逻辑\n * (backend-dispatch 的 BrepCapabilityName 路由)不改——新字段是引擎本质描述,不是\n * 逐 op 路由键。\n *\n * 未并入 `disposalModel`(D5 决策,与 vendored port 一致):faijs 的句柄释放由\n * `cad-runtime` 顶替释放统一编排(增量失败回滚前提),brepjs 的 DisposalScope/arena\n * 语义不强制统一,故不作为能力位记录。\n */\nexport interface BrepCapabilities {\n /**\n * 面演化族:本引擎**实际提供**的 `*WithHistory` 核函数名(不是族级布尔,见\n * `BrepEvolutionKind`)。空数组 / 缺省 = 一个都不提供。\n */\n evolution?: readonly BrepEvolutionKind[]\n /**\n * 非演化内核方法族:本引擎**实际提供**的 `BrepEngineApi` 方法真名\n * (逐核声明,与 `evolution` 同语义;空数组 / 缺省 = 一个都不提供)。\n */\n methods?: readonly BrepMethodKind[]\n /** 修复族(healSolid/fixShape/fixFaceOrientations/...) */\n heal?: boolean\n /** 直接编辑族(C1:moveFace/replaceFace/...) */\n directEdit?: boolean\n /** 高级曲面族(C1:boundarySurface/fillSurface/...) */\n advSurface?: boolean\n /** XCAF 装配族 */\n assembly?: boolean\n /** mesh→BREP 提升(buildTriFace/sewAndSolidify) */\n meshLift?: boolean\n /** 精确 B-rep 几何(vs mesh 近似)——brepjs KernelCapabilities.exact 并入 */\n exact?: boolean\n /** 可序列化为 B-rep 交换格式(BREP/STEP)——brepjs brepExport 并入 */\n brepExport?: boolean\n /** 体积/面积/长度匹配解析值(vs mesh 近似)——brepjs exactMeasurement 并入 */\n exactMeasurement?: boolean\n /** 细分精度控制模型——brepjs tessellationModel 并入 */\n tessellationModel?: BrepTessellationModel\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/brep/engine/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAU,CAAA","sourcesContent":["/**\n * engine/types — BREP 引擎中立类型(零具体实现依赖,不 import 任何内核包)\n *\n *\n * 契约(对应 brepjs 的 KernelShape 约定):\n * - L1 及以上代码永远不对句柄调用任何方法,只把它传回产生它的那个引擎;\n * - 句柄不得跨引擎传递——跨引擎必须先经 mesh 层(§8.3 的结构保证)。\n * - OCCT 适配器的句柄运行时就是 number,加 brand 是零成本的类型层转换。\n */\n\n/**\n * BREP 引擎身份(D11-1,2026-09-24 narrowing plan)。\n *\n * 三个值来自三个已存在的引擎 id 常量(`OCCT_BREP_ENGINE_ID` / `BREPKIT_BREP_ENGINE_ID`\n * / `BREP_MOCK_ENGINE_ID`,各自适配器导出);本类型由常量数组推导,禁止裸 `string`。\n * 适配器常量用 `satisfies BrepEngineId` 收窄(typecheck 钉住集合一致)。\n *\n * 消费点:`defineOp` 的 `engines` 声明(平台 op 自证身份)、`dispatchPath` 的平台\n * 身份分支(D11-2)、`script-face-manifest` 的平台 op 标注(§3.8)。\n */\nexport const BREP_ENGINE_IDS = ['occt', 'brepkit', 'brep_mock'] as const\n\n/** BREP 引擎身份(固定三值联合;由 {@link BREP_ENGINE_IDS} 推导)。 */\nexport type BrepEngineId = (typeof BREP_ENGINE_IDS)[number]\n\ndeclare const BrepHandleBrand: unique symbol\n\n/**\n * BREP 实体句柄——不透明值。\n *\n * 与 occt-wasm 的 ShapeHandle 同构(number & brand)。OCCT 适配器\n * (occt-kernel/)内部以 `as unknown as` 双向转换,跨适配器边界零运行时成本。\n */\nexport type BrepHandle = number & { readonly [BrepHandleBrand]: never }\n\n/** 三维点/向量(与内核无关的中立形态)。 */\nexport interface BrepVec3 {\n x: number\n y: number\n z: number\n}\n\n/** 轴对齐包围盒。 */\nexport interface BrepBoundingBox {\n xmin: number\n ymin: number\n zmin: number\n xmax: number\n ymax: number\n zmax: number\n}\n\n/** BRepMesh 三角化输出(镜像 occt-wasm Mesh 的中立形态)。 */\nexport interface BrepMeshResult {\n /** XYZ 交错顶点坐标,长度 = vertexCount * 3 */\n positions: Float32Array\n /** XYZ 交错顶点法线,长度 = vertexCount * 3 */\n normals: Float32Array\n /** 三角形索引 */\n indices: Uint32Array\n /** 顶点数(positions.length / 3) */\n vertexCount: number\n /** 三角形数(indices.length / 3) */\n triangleCount: number\n /** 面组:[triStart, triCount, faceHash] 三元组(meshShape 时存在) */\n faceGroups?: Int32Array\n /** 面组数(meshShape 时存在) */\n faceCount?: number\n}\n\n/** 三角化精度选项。 */\nexport interface BrepTessellateOptions {\n /** 最大弦偏差(mm),默认 0.1 */\n linearDeflection?: number\n /** 最大角偏差(弧度),默认 0.5 */\n angularDeflection?: number\n /** 按每条边长度相对解释 linearDeflection */\n relative?: boolean\n}\n\n/** 边折线数据(wireframe 输出)。 */\nexport interface BrepEdgeData {\n /** XYZ 交错边采样点 */\n points: Float32Array\n /** 每边分组:[pointStart, pointCount, edgeHash] 三元组 */\n edgeGroups: Int32Array\n /** points 中的浮点数总数(= XYZ 坐标数) */\n pointCount: number\n /** 不同边的数量 */\n edgeCount: number\n}\n\n/**\n * *WithHistory 面演化数据(modified/generated/deleted 用面 hash 编码)。\n *\n * ⚠️ **三个字段的编码不同,实测于 2026-09-22(`brep/engine/phase0-kernel-probes.test.ts`),\n * 与 occt-wasm 自己的文档(`dist/types.d.ts:227-231`)不符**:\n *\n * | 字段 | 实际编码 | 键/值语义 |\n * |---|---|---|\n * | `modified` | **分段** `[inHash, count, outHash…] × N` | 键 = 输入面 hash;值 = 该输入面在结果里的**后继**(可 1→N) |\n * | `generated` | **同构分段**,**键集与 `modified` 相同** | 值 = 该输入面派生出的**中间形**(实测结果里 0 存活) |\n * | `deleted` | **扁平** hash 数组 | 输入面中已不存在的面 |\n *\n * 「扁平数组」的读法会把 `generated` 的 count 字段当成 hash——\n * 实测 `cut` 的 `generated` 里真的含 `2`(一个 count),故该误读不会自己暴露。\n *\n * ⚠️ **未受影响的面有两种上报形态,两种都表示\"未变\"**:自映射(`i -> [i]`)。\n * 或者**整个不上报**(`fillet` 实测两者并存)。⇒ 读法必须是\n * `modified.get(h) ?? [h]`,不能只看\"是否出现在 `modified` 里\"。\n *\n * ⇒ 结果面的三种命运(判据见 `phase0-kernel-probes.test.ts`):\n * **原样幸存**(hash ∈ 输入 hash 集合,hash 逐字不变)/ **改型幸存**(在 `modified` 输出里)/\n * **新造**(两者皆非——这才是真正需要派生词汇命名的面,如 `fillet` 的过渡面)。\n */\nexport interface BrepEvolutionData {\n /** 结果句柄 */\n result: BrepHandle\n /** 分段:`[inHash, count, outHash…] × N`;值 = 该输入面的结果后继 */\n modified: number[]\n /** 分段(键集同 `modified`):该输入面派生的中间形 hash,实测结果里 0 存活 */\n generated: number[]\n /** 扁平:输入面中已不存在的面 hash */\n deleted: number[]\n}\n\n/** 曲线参数区间(与内核 curveParameters 返回同构:first/last)。 */\nexport interface BrepCurveParameters {\n first: number\n last: number\n}\n\n/** 曲面 UV 边界。 */\nexport interface BrepUvBounds {\n uMin: number\n uMax: number\n vMin: number\n vMax: number\n}\n\n/** 子形状类型(getSubShapes / subShapeHashes 等)。 */\nexport type BrepSubShapeType = 'vertex' | 'edge' | 'wire' | 'face' | 'shell' | 'solid'\n\n/**\n * XCAF 装配文档句柄(可选能力槽 AssemblyCapability 的文档形态)。\n *\n * 形态来自 occt-wasm XCAFDocumentImpl 的被调用子集(step.ts / occt-kernel 装配链)。\n */\nexport interface BrepXcafDocument {\n addShape(shape: BrepHandle, opts?: { name?: string; color?: [number, number, number] }): void\n exportSTEP(): string\n close(): void\n}\n\n/**\n * 曲面细分精度控制模型(与 brepjs KernelCapabilities.tessellationModel 同构的中立镜像,\n * P7 并入;faijs 侧零内核依赖,不 import vendored 树——D8 反向只允许发生在 api/)。\n *\n * - `'build-time'` — 网格在实体构造时固定(如 manifold 全局分段设置);质量参数须在构造前应用。\n * - `'extract-time'`— 形状是精确的,按需以每调用 deflection 细分(如 OCCT);质量是\n * `mesh()`/导出时的默认 deflection。\n * - `'none'` — 无细分控制(或非网格内核)。\n */\nexport type BrepTessellationModel = 'build-time' | 'extract-time' | 'none'\n\n/**\n * 面演化(`*WithHistory`)核函数名——与内核方法同名,**逐核函数**声明。\n *\n * ⚠️ **为什么不能是一个布尔位**(2026-09-22 Phase 0.2):`evolution: true` 是**族级**声明。\n * 而「本内核提供面演化」这句话在建面上不成立——每个 `*WithHistory` 是一个独立核函数,\n * 内核可以只提供其中一部分。`brepkit` 就是活例:它提供 `fuse`/`cut`/`fillet`,\n * `chamfer`/`intersect`/`translate`/… 一律 `unsupported(...)`\n * (`brepkit-kernel/brepkitKernel.ts:220-537`)。\n *\n * 族级布尔的后果不是\"少报\"而是**多报**:`cad.intersect` 声明需要 `evolution`,\n * 在 `evolution: true` 下通过静态判定 → 落到运行时才撞 `unsupported('intersectWithHistory')`。\n * 这直接违反 AGENTS.md 红线「BREP 路径能否走由静态规则判定,禁止运行时回退」——\n * 静态判定之所以能成立,前提是引擎的能力声明**说的是逐核函数的实话**。\n *\n * ⇒ 引擎声明\"我提供哪几个\"(`BrepCapabilities.evolution`),op 声明\"我要哪一个\"\n * (`defineOp.capabilities`),两者**按名字求交集**(`cad-runtime/backend-dispatch.ts`)。\n */\nexport type BrepEvolutionKind =\n // 布尔族\n | 'fuseWithHistory'\n | 'cutWithHistory'\n | 'intersectWithHistory'\n // 倒圆/倒角族\n | 'filletWithHistory'\n | 'chamferWithHistory'\n // 刚体变换族\n | 'translateWithHistory'\n | 'rotateWithHistory'\n | 'mirrorWithHistory'\n | 'scaleWithHistory'\n // 抽壳/偏置/加厚族\n | 'shellWithHistory'\n | 'offsetWithHistory'\n | 'thickenWithHistory'\n\n/**\n * 非演化内核方法真名(`*WithHistory` 之外的 `BrepEngineApi` 方法)。\n *\n * 与 `BrepEvolutionKind` 分名(P3 冲突消除):`'mirror'` 一个字符串不能同时表示\n * \"提供 `mirrorWithHistory`\"与\"提供 `mirror`\",两族必须互不共用字符串。\n * 语义与 evolution 相同——**逐核函数**声明:声明 = 实现(诚实原则),\n * 缺省/空 = 一个都不提供。\n *\n * 初始全集 = Phase 0 能力映射表(`api/surface/capability-map.json`)盘点的\n * compat op 依赖内核方法 + 方案初始项;Phase 3 全量收敛时按映射表滚动补全。\n */\nexport type BrepMethodKind =\n // pattern 族\n | 'linearPattern'\n | 'circularPattern'\n | 'gridPattern'\n | 'rectangularPattern'\n // 基础方法族(裸方法,无历史)\n | 'mirror'\n | 'rotate'\n | 'translate'\n | 'scale'\n // 倒角/圆角基础方法(directEdit 族下的逐核真名,Phase 2:chamfer op 能力声明\n // 精确到内核方法——brepkit 无 chamfer/chamferDistAngle,静态判定执行前报错)\n | 'chamfer'\n | 'chamferDistAngle'\n | 'fillet'\n | 'filletVariable'\n // 构形/拉伸/放样族\n | 'makeRectangle'\n | 'shell'\n | 'extrude'\n | 'loft'\n | 'loftAdvanced'\n | 'section'\n | 'sweepPipeShell'\n | 'simplePipe'\n | 'revolveVec'\n | 'buildExtrusionLaw'\n // 布尔/装配辅助(裸方法)\n | 'fuse'\n | 'cut'\n | 'intersect'\n | 'fuseAll'\n // 构造方法族\n | 'makeArcEdge'\n | 'makeBezierEdge'\n | 'makeCylinder'\n | 'makeEllipsoid'\n | 'makeFace'\n | 'makeFaceOnSurface'\n | 'makeLineEdge'\n | 'makeTorus'\n | 'makeVertex'\n | 'makeWireFromMixed'\n | 'buildEdgeOnSurface'\n | 'addHolesInFace'\n | 'buildTriFace'\n | 'sew'\n | 'sewAndSolidify'\n // 修复/校验族\n | 'healFace'\n | 'healSolid'\n | 'healWire'\n | 'fixShape'\n | 'fixSelfIntersection'\n | 'isValid'\n | 'removeDegenerateEdges'\n | 'simplify'\n | 'split'\n // 查询/测量族\n // ⚠️ 测量族能力名用 L1 中立名(D5,narrowing plan):`getBoundingBox` / `getVolume`\n // / `getSurfaceArea` / `getLength` / `getCenterOfMass` ——能力名 == BrepEngineApi 接口名,\n // 守卫「能力声明诚实」据此逐名断言适配器是 function。vendored 面自己的原生名\n // (boundingBox/volume/area/length)按其自身命名,\n // 不是能力名空间成员。\n | 'getBoundingBox'\n | 'getVolume'\n | 'getSurfaceArea'\n | 'getLength'\n | 'getCenterOfMass'\n | 'curveParameters'\n | 'curvePointAtParam'\n | 'curveTangent'\n | 'hullFromPoints'\n | 'isNull'\n | 'iterShapes'\n | 'locate'\n | 'shapeType'\n | 'surfaceCenterOfMass'\n | 'surfaceNormal'\n | 'surfaceType'\n | 'uvBounds'\n // 变换族(非演化真名)\n | 'composeTransform'\n | 'applyComposedTransformWithHistory'\n | 'generalTransformNonOrthogonal'\n | 'generalTransformWithHistory'\n // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade wiring.\n | 'sectionByPlane'\n | 'makeCompound'\n | 'located'\n | 'getSubShapes'\n | 'transform'\n | 'generalTransform'\n // 交换/导入族\n | 'importStl'\n | 'createXCAFDocument'\n | 'importXCAFFromSTEP'\n // 生命周期辅助\n | 'copyShape'\n | 'dispose'\n | 'downcast'\n | 'hashCode'\n\n/**\n * 可选能力槽声明(§7.5,Phase 1 钉死成员)。\n *\n * 缺失的能力 → 依赖它的功能静态降级走 mesh(§8.4),绝不伪造。\n *\n * P7 并入(D4):移植 brepjs `KernelCapabilities` 的数据字段(exact/brepExport/\n * exactMeasurement/tessellationModel)进本模型,由适配器在注册时如实声明;分派逻辑\n * (backend-dispatch 的 BrepCapabilityName 路由)不改——新字段是引擎本质描述,不是\n * 逐 op 路由键。\n *\n * 未并入 `disposalModel`(D5 决策,与 vendored port 一致):faijs 的句柄释放由\n * `cad-runtime` 顶替释放统一编排(增量失败回滚前提),brepjs 的 DisposalScope/arena\n * 语义不强制统一,故不作为能力位记录。\n */\nexport interface BrepCapabilities {\n /**\n * 面演化族:本引擎**实际提供**的 `*WithHistory` 核函数名(不是族级布尔,见\n * `BrepEvolutionKind`)。空数组 / 缺省 = 一个都不提供。\n */\n evolution?: readonly BrepEvolutionKind[]\n /**\n * 非演化内核方法族:本引擎**实际提供**的 `BrepEngineApi` 方法真名\n * (逐核声明,与 `evolution` 同语义;空数组 / 缺省 = 一个都不提供)。\n */\n methods?: readonly BrepMethodKind[]\n /** 修复族(healSolid/fixShape/fixFaceOrientations/...) */\n heal?: boolean\n /** 直接编辑族(C1:moveFace/replaceFace/...) */\n directEdit?: boolean\n /** 高级曲面族(C1:boundarySurface/fillSurface/...) */\n advSurface?: boolean\n /** XCAF 装配族 */\n assembly?: boolean\n /** mesh→BREP 提升(buildTriFace/sewAndSolidify) */\n meshLift?: boolean\n /** 精确 B-rep 几何(vs mesh 近似)——brepjs KernelCapabilities.exact 并入 */\n exact?: boolean\n /** 可序列化为 B-rep 交换格式(BREP/STEP)——brepjs brepExport 并入 */\n brepExport?: boolean\n /** 体积/面积/长度匹配解析值(vs mesh 近似)——brepjs exactMeasurement 并入 */\n exactMeasurement?: boolean\n /** 细分精度控制模型——brepjs tessellationModel 并入 */\n tessellationModel?: BrepTessellationModel\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"brepkitKernel.d.ts","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAiI9D,oDAAoD;AACpD,KAAK,mBAAmB,GAAG,aAAa,GAAG;IAAE,oBAAoB,IAAI,MAAM,CAAA;CAAE,CAAA;AAuC7E;;;;;GAKG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAgnB5E;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"brepkitKernel.d.ts","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAwI9D,oDAAoD;AACpD,KAAK,mBAAmB,GAAG,aAAa,GAAG;IAAE,oBAAoB,IAAI,MAAM,CAAA;CAAE,CAAA;AAuC7E;;;;;GAKG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CA65B5E;AAoDD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI,IAAI,CAKrC;AAED,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAA"}