@faicad/faijs 0.35.2 → 0.35.8
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/assembly/entities.js +14 -4
- package/dist/api/assembly/entities.js.map +1 -1
- package/dist/api/extrude.d.ts.map +1 -1
- package/dist/api/extrude.js +4 -1
- package/dist/api/extrude.js.map +1 -1
- package/dist/api/fillet.d.ts.map +1 -1
- package/dist/api/fillet.js +47 -0
- package/dist/api/fillet.js.map +1 -1
- package/dist/api/generated/script-face-manifest.js +1 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/topology.js +1 -1
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/primitives.d.ts +3 -2
- package/dist/api/primitives.d.ts.map +1 -1
- package/dist/api/primitives.js +3 -2
- package/dist/api/primitives.js.map +1 -1
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +5 -6
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/topo-resolve.d.ts.map +1 -1
- package/dist/api/topo-resolve.js +24 -5
- package/dist/api/topo-resolve.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +13 -2
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts +3 -1
- package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitWasm.js +6 -2
- package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +15 -2
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/extra/ops/load.d.ts.map +1 -1
- package/dist/extra/ops/load.js +40 -2
- package/dist/extra/ops/load.js.map +1 -1
- package/dist/mesh/primitives.d.ts +6 -4
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +15 -8
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/types.d.ts +4 -3
- package/dist/mesh/types.d.ts.map +1 -1
- package/dist/mesh/types.js.map +1 -1
- package/dist/primitives/brep-primitives.d.ts.map +1 -1
- package/dist/primitives/brep-primitives.js +39 -12
- package/dist/primitives/brep-primitives.js.map +1 -1
- package/dist/topology/naming/geom-hint.d.ts +12 -0
- package/dist/topology/naming/geom-hint.d.ts.map +1 -1
- package/dist/topology/naming/geom-hint.js +1 -1
- package/dist/topology/naming/geom-hint.js.map +1 -1
- package/dist/topology/naming/lineage.d.ts +1 -0
- package/dist/topology/naming/lineage.d.ts.map +1 -1
- package/dist/topology/naming/lineage.js +37 -1
- package/dist/topology/naming/lineage.js.map +1 -1
- package/dist/topology/naming/resolve-face.d.ts +13 -2
- package/dist/topology/naming/resolve-face.d.ts.map +1 -1
- package/dist/topology/naming/resolve-face.js +18 -2
- package/dist/topology/naming/resolve-face.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-face-manifest.js","sourceRoot":"","sources":["../../../src/api/generated/script-face-manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE;IACrC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE
|
|
1
|
+
{"version":3,"file":"script-face-manifest.js","sourceRoot":"","sources":["../../../src/api/generated/script-face-manifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * generated/script-face-manifest.ts — 生成文件,禁手改。\n * 由 packages/core/scripts/gen-l3-surface.ts 依据 api/surface/arg-spec.ts 生成。\n * cad 脚本面新增 op 清单(P23 B1 双源一致:cad 面 ≡ check() 符号表)。\n */\n\n/** 一条 cad 脚本面新增 op。 */\nexport interface ScriptFaceOp {\n /** faijs 面导出名(= brepjs 符号名)。 */\n name: string\n /** 所属分片模块(生成文件名)。 */\n module: string\n /** Phase 5(D11):平台 op 的平台身份(中立 op 缺省)。 */\n engines?: readonly string[]\n /** P26 (unit-system D8):参数量纲声明(参数名 → DimName)。 */\n paramDims?: Record<string, string>\n /** P26 (unit-system D8):返回值量纲。 */\n retDim?: string\n}\n\n/** Cad script-face op manifest (B1: single source for cad namespace, check() symbol table). */\nexport const SCRIPT_FACE_OPS: readonly ScriptFaceOp[] = [\n { name: 'torus', module: 'topology' },\n { name: 'fuse', module: 'topology' },\n { name: 'inspectMassProps', module: 'measurement', engines: [\"occt\"] },\n { name: 'area', module: 'measurement' },\n { name: 'length', module: 'measurement' },\n { name: 'volume', module: 'measurement' },\n { name: 'centerOfMass', module: 'measurement' },\n { name: 'viewCamera', module: 'view' },\n { name: 'projectView', module: 'view' },\n { name: 'projectSheet', module: 'view' },\n { name: 'complexExtrude', module: 'operations', engines: [\"occt\"] },\n { name: 'twistExtrude', module: 'operations', engines: [\"occt\"] },\n { name: 'linearPattern', module: 'operations', engines: [\"occt\"] },\n { name: 'circularPattern', module: 'operations', engines: [\"occt\"] },\n { name: 'gridPattern', module: 'operations', engines: [\"occt\"] },\n { name: 'roof', module: 'operations', engines: [\"occt\"] },\n { name: 'drill', module: 'operations' },\n { name: 'pocket', module: 'operations' },\n { name: 'boss', module: 'operations' },\n { name: 'mirrorJoin', module: 'operations' },\n { name: 'rectangularPattern', module: 'operations', engines: [\"occt\"] },\n { name: 'thread', module: 'operations', engines: [\"occt\"] },\n { name: 'convexHull', module: 'operations' },\n { name: 'makeBaseBox', module: 'sketching' },\n { name: 'ellipsoid', module: 'topology' },\n { name: 'rotate', module: 'topology' },\n { name: 'mirror', module: 'topology' },\n { name: 'clone', module: 'topology' },\n { name: 'applyMatrix', module: 'topology' },\n { name: 'locate', module: 'topology', engines: [\"occt\"] },\n { name: 'split', module: 'topology', engines: [\"occt\"] },\n { name: 'offset', module: 'topology', engines: [\"occt\"] },\n { name: 'heal', module: 'topology', engines: [\"occt\"] },\n { name: 'simplify', module: 'topology', engines: [\"occt\"] },\n { name: 'isValid', module: 'topology' },\n { name: 'isSameShape', module: 'topology' },\n { name: 'autoHeal', module: 'topology', engines: [\"occt\"] },\n { name: 'fixShape', module: 'topology' },\n { name: 'healSolid', module: 'topology' },\n { name: 'fixSelfIntersection', module: 'topology', engines: [\"occt\"] },\n]\n"]}
|
|
@@ -46,7 +46,7 @@ export const torus = defineOp({
|
|
|
46
46
|
*/
|
|
47
47
|
export const fuse = defineOp({
|
|
48
48
|
brep: __own_fuseBrep,
|
|
49
|
-
name: 'fuse', naming: { "kind": "kernel", "newFaces": { "via": "byAdjacency" } },
|
|
49
|
+
name: 'fuse', naming: { "kind": "kernel", "newFaces": { "via": "byAdjacency" } }, paramDims: {},
|
|
50
50
|
});
|
|
51
51
|
/**
|
|
52
52
|
* getBounds — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../src/api/generated/topology.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * generated/topology.ts — 生成文件,勿手改。\n * 由 packages/core/scripts/gen-l3-surface.ts 依据 api/surface/arg-spec.ts 生成(E5/P14 分片)。\n * topology 模块:21 个投影符号;另有 281 个 skip 登记。\n * A6(2026-10-06)口径指认:本文件是 brepjs 投影面的**增量**清单;脚本面全集的\n * 权威来源是 generated/script-face.ts + gen-symbol-table 产物\n * lang/symbol-table.generated.ts(cad 脚本面 95 op)。两个清单回答不同问题,\n * 互不为超集——禁止用本文件的名字反推脚本面能力。\n */\nimport { defineOp } from '../../define-op'\nimport { brepOf } from '../../shape'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { Shape } from '../../mesh/types'\nimport { torusBrep as __own_torusBrep } from '../brep-operations/primitiveFns'\nimport { fuseBrep as __own_fuseBrep } from '../brep-operations/booleanFns'\nimport { ellipsoidBrep as __own_ellipsoidBrep } from '../brep-operations/primitiveFns'\nimport { rotateBrep as __own_rotateBrep } from '../brep-operations/topologyFns'\nimport { mirrorBrep as __own_mirrorBrep } from '../brep-operations/topologyFns'\nimport { cloneBrep as __own_cloneBrep } from '../brep-operations/topologyFns'\nimport { applyMatrixBrep as __own_applyMatrixBrep } from '../brep-operations/topologyFns'\nimport { locateBrep as __own_locateBrep } from '../brep-operations/topologyFns'\nimport { sectionBrep as __own_sectionBrep } from '../brep-operations/booleanFns'\nimport { splitBrep as __own_splitBrep } from '../brep-operations/booleanFns'\nimport { shellBrep as __own_shellBrep } from '../brep-operations/topologyFns'\nimport { offsetBrep as __own_offsetBrep } from '../brep-operations/topologyFns'\nimport { healBrep as __own_healBrep } from '../brep-operations/healingFns'\nimport { simplifyBrep as __own_simplifyBrep } from '../brep-operations/healingFns'\nimport { autoHealBrep as __own_autoHealBrep } from '../brep-operations/healingFns'\nimport { fixShapeBrep as __own_fixShapeBrep } from '../brep-operations/healingFns'\nimport { healSolidBrep as __own_healSolidBrep } from '../brep-operations/healingFns'\nimport { fixSelfIntersectionBrep as __own_fixSelfIntersectionBrep } from '../brep-operations/healingFns'\n\n/**\n * torus — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * (majorRadius: number, minorRadius: number, options?: TorusOptions)\n * 桥接:defineOp({ brep: __own_torusBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const torus = defineOp({\n brep: __own_torusBrep,\n name: 'torus', naming: {\"kind\":\"unmodeled\",\"reason\":\"construct vocabulary pending Phase 3\"}, paramDims: {},\n})\n\n/**\n * fuse — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * (a: Shape3D, b: Shape3D, options?: BooleanOptions) -> Result<Shape3D>\n * 桥接:defineOp({ brep: __own_fuseBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fuse = defineOp({\n brep: __own_fuseBrep,\n name: 'fuse', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * getBounds — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * (shape: Shape) -> BrepBoundingBox(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param shape - 可形状参数(原样透传)\n * @returns { xmin: number; ymin: number; zmin: number; xmax: number; ymax: number; zmax: number } — 纯数据结果(非 Shape)。\n */\nexport function getBounds(shape: Shape): { xmin: number; ymin: number; zmin: number; xmax: number; ymax: number; zmax: number } {\n const h0 = brepOf(shape as Shape) as BrepHandle\n return getBrepApi().getBoundingBox(h0)\n}\n\n/**\n * ellipsoid — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * ellipsoid(rx: number, ry: number, rz: number, options?: EllipsoidOptions): Shape\n * 桥接:defineOp({ brep: __own_ellipsoidBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const ellipsoid = defineOp({\n brep: __own_ellipsoidBrep,\n name: 'ellipsoid', naming: {\"kind\":\"unmodeled\",\"reason\":\"construct vocabulary pending Phase 3\"}, paramDims: {},\n})\n\n/**\n * rotate — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * rotate(shape: Shape, angle: number, options?: { at?, axis? }): Shape\n * 桥接:defineOp({ brep: __own_rotateBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const rotate = defineOp({\n brep: __own_rotateBrep,\n name: 'rotate', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * mirror — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * mirror(shape: Shape, options?: MirrorOptions): Shape\n * 桥接:defineOp({ brep: __own_mirrorBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const mirror = defineOp({\n brep: __own_mirrorBrep,\n name: 'mirror', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * clone — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * clone(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_cloneBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const clone = defineOp({\n brep: __own_cloneBrep,\n name: 'clone', naming: {\"kind\":\"identity\"}, paramDims: {},\n})\n\n/**\n * applyMatrix — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * applyMatrix(shape: Shape, matrix: unknown): Shape\n * 桥接:defineOp({ brep: __own_applyMatrixBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const applyMatrix = defineOp({\n brep: __own_applyMatrixBrep,\n name: 'applyMatrix', naming: {\"kind\":\"identity\"}, paramDims: {},\n})\n\n/**\n * locate — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * locate(shape: Shape, placement: unknown): Shape\n * 桥接:defineOp({ brep: __own_locateBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const locate = defineOp({\n brep: __own_locateBrep,\n name: 'locate', naming: {\"kind\":\"identity\"}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * section — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * section(shape: Shape, plane: PlaneInput): Shape\n * 桥接:defineOp({ brep: __own_sectionBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const section = defineOp({\n brep: __own_sectionBrep,\n name: 'section', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * split — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * split(shape: Shape, tools: Shape[]): Shape\n * 桥接:defineOp({ brep: __own_splitBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const split = defineOp({\n brep: __own_splitBrep,\n name: 'split', naming: {\"kind\":\"subdivide\"}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * shell — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * shell(shape: Shape, faces?: Shape[], thickness: number): Shape\n * 桥接:defineOp({ brep: __own_shellBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const shell = defineOp({\n brep: __own_shellBrep,\n name: 'shell', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * offset — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * offset(shape: Shape, distance: number): Shape\n * 桥接:defineOp({ brep: __own_offsetBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const offset = defineOp({\n brep: __own_offsetBrep,\n name: 'offset', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * heal — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * heal(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_healBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const heal = defineOp({\n brep: __own_healBrep,\n name: 'heal', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * simplify — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * simplify(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_simplifyBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const simplify = defineOp({\n brep: __own_simplifyBrep,\n name: 'simplify', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * isValid — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * isValid(shape: Shape): boolean(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param shape - 可形状参数(原样透传)\n * @returns boolean — 纯数据结果(非 Shape)。\n */\nexport function isValid(shape: Shape): boolean {\n const h0 = brepOf(shape as Shape) as BrepHandle\n return getBrepApi().isValid(h0)\n}\n\n/**\n * isSameShape — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * isSameShape(a: Shape, b: Shape): boolean(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param a - 可形状参数(第一个被比较形状)\n * @param b - 可形状参数(第二个被比较形状)\n * @returns boolean — 纯数据结果(非 Shape)。\n */\nexport function isSameShape(a: Shape, b: Shape): boolean {\n const h0 = brepOf(a as Shape) as BrepHandle\n const h1 = brepOf(b as Shape) as BrepHandle\n return getBrepApi().isSame(h0, h1)\n}\n\n/**\n * autoHeal — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * autoHeal(shape: Shape, options?: AutoHealOptions): { shape: Shape, report }\n * 桥接:defineOp({ brep: __own_autoHealBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const autoHeal = defineOp({\n brep: __own_autoHealBrep,\n name: 'autoHeal', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], outputs: [\"shape\"], paramDims: {},\n})\n\n/**\n * fixShape — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * fixShape(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_fixShapeBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fixShape = defineOp({\n brep: __own_fixShapeBrep,\n name: 'fixShape', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * healSolid — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * healSolid(solid: Shape): Shape\n * 桥接:defineOp({ brep: __own_healSolidBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const healSolid = defineOp({\n brep: __own_healSolidBrep,\n name: 'healSolid', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * fixSelfIntersection — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * fixSelfIntersection(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_fixSelfIntersectionBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fixSelfIntersection = defineOp({\n brep: __own_fixSelfIntersectionBrep,\n name: 'fixSelfIntersection', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n"]}
|
|
1
|
+
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../src/api/generated/topology.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * generated/topology.ts — 生成文件,勿手改。\n * 由 packages/core/scripts/gen-l3-surface.ts 依据 api/surface/arg-spec.ts 生成(E5/P14 分片)。\n * topology 模块:21 个投影符号;另有 281 个 skip 登记。\n * A6(2026-10-06)口径指认:本文件是 brepjs 投影面的**增量**清单;脚本面全集的\n * 权威来源是 generated/script-face.ts + gen-symbol-table 产物\n * lang/symbol-table.generated.ts(cad 脚本面 95 op)。两个清单回答不同问题,\n * 互不为超集——禁止用本文件的名字反推脚本面能力。\n */\nimport { defineOp } from '../../define-op'\nimport { brepOf } from '../../shape'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { Shape } from '../../mesh/types'\nimport { torusBrep as __own_torusBrep } from '../brep-operations/primitiveFns'\nimport { fuseBrep as __own_fuseBrep } from '../brep-operations/booleanFns'\nimport { ellipsoidBrep as __own_ellipsoidBrep } from '../brep-operations/primitiveFns'\nimport { rotateBrep as __own_rotateBrep } from '../brep-operations/topologyFns'\nimport { mirrorBrep as __own_mirrorBrep } from '../brep-operations/topologyFns'\nimport { cloneBrep as __own_cloneBrep } from '../brep-operations/topologyFns'\nimport { applyMatrixBrep as __own_applyMatrixBrep } from '../brep-operations/topologyFns'\nimport { locateBrep as __own_locateBrep } from '../brep-operations/topologyFns'\nimport { sectionBrep as __own_sectionBrep } from '../brep-operations/booleanFns'\nimport { splitBrep as __own_splitBrep } from '../brep-operations/booleanFns'\nimport { shellBrep as __own_shellBrep } from '../brep-operations/topologyFns'\nimport { offsetBrep as __own_offsetBrep } from '../brep-operations/topologyFns'\nimport { healBrep as __own_healBrep } from '../brep-operations/healingFns'\nimport { simplifyBrep as __own_simplifyBrep } from '../brep-operations/healingFns'\nimport { autoHealBrep as __own_autoHealBrep } from '../brep-operations/healingFns'\nimport { fixShapeBrep as __own_fixShapeBrep } from '../brep-operations/healingFns'\nimport { healSolidBrep as __own_healSolidBrep } from '../brep-operations/healingFns'\nimport { fixSelfIntersectionBrep as __own_fixSelfIntersectionBrep } from '../brep-operations/healingFns'\n\n/**\n * torus — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * (majorRadius: number, minorRadius: number, options?: TorusOptions)\n * 桥接:defineOp({ brep: __own_torusBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const torus = defineOp({\n brep: __own_torusBrep,\n name: 'torus', naming: {\"kind\":\"unmodeled\",\"reason\":\"construct vocabulary pending Phase 3\"}, paramDims: {},\n})\n\n/**\n * fuse — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * (a: Shape3D, b: Shape3D, options?: BooleanOptions) -> Result<Shape3D>\n * 桥接:defineOp({ brep: __own_fuseBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fuse = defineOp({\n brep: __own_fuseBrep,\n name: 'fuse', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * getBounds — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * (shape: Shape) -> BrepBoundingBox(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param shape - 可形状参数(原样透传)\n * @returns { xmin: number; ymin: number; zmin: number; xmax: number; ymax: number; zmax: number } — 纯数据结果(非 Shape)。\n */\nexport function getBounds(shape: Shape): { xmin: number; ymin: number; zmin: number; xmax: number; ymax: number; zmax: number } {\n const h0 = brepOf(shape as Shape) as BrepHandle\n return getBrepApi().getBoundingBox(h0)\n}\n\n/**\n * ellipsoid — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * ellipsoid(rx: number, ry: number, rz: number, options?: EllipsoidOptions): Shape\n * 桥接:defineOp({ brep: __own_ellipsoidBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const ellipsoid = defineOp({\n brep: __own_ellipsoidBrep,\n name: 'ellipsoid', naming: {\"kind\":\"unmodeled\",\"reason\":\"construct vocabulary pending Phase 3\"}, paramDims: {},\n})\n\n/**\n * rotate — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * rotate(shape: Shape, angle: number, options?: { at?, axis? }): Shape\n * 桥接:defineOp({ brep: __own_rotateBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const rotate = defineOp({\n brep: __own_rotateBrep,\n name: 'rotate', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * mirror — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * mirror(shape: Shape, options?: MirrorOptions): Shape\n * 桥接:defineOp({ brep: __own_mirrorBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const mirror = defineOp({\n brep: __own_mirrorBrep,\n name: 'mirror', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * clone — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * clone(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_cloneBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const clone = defineOp({\n brep: __own_cloneBrep,\n name: 'clone', naming: {\"kind\":\"identity\"}, paramDims: {},\n})\n\n/**\n * applyMatrix — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * applyMatrix(shape: Shape, matrix: unknown): Shape\n * 桥接:defineOp({ brep: __own_applyMatrixBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const applyMatrix = defineOp({\n brep: __own_applyMatrixBrep,\n name: 'applyMatrix', naming: {\"kind\":\"identity\"}, paramDims: {},\n})\n\n/**\n * locate — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * locate(shape: Shape, placement: unknown): Shape\n * 桥接:defineOp({ brep: __own_locateBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const locate = defineOp({\n brep: __own_locateBrep,\n name: 'locate', naming: {\"kind\":\"identity\"}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * section — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * section(shape: Shape, plane: PlaneInput): Shape\n * 桥接:defineOp({ brep: __own_sectionBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const section = defineOp({\n brep: __own_sectionBrep,\n name: 'section', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * split — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * split(shape: Shape, tools: Shape[]): Shape\n * 桥接:defineOp({ brep: __own_splitBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const split = defineOp({\n brep: __own_splitBrep,\n name: 'split', naming: {\"kind\":\"subdivide\"}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * shell — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * shell(shape: Shape, faces?: Shape[], thickness: number): Shape\n * 桥接:defineOp({ brep: __own_shellBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const shell = defineOp({\n brep: __own_shellBrep,\n name: 'shell', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * offset — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * offset(shape: Shape, distance: number): Shape\n * 桥接:defineOp({ brep: __own_offsetBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const offset = defineOp({\n brep: __own_offsetBrep,\n name: 'offset', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * heal — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * heal(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_healBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const heal = defineOp({\n brep: __own_healBrep,\n name: 'heal', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * simplify — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * simplify(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_simplifyBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const simplify = defineOp({\n brep: __own_simplifyBrep,\n name: 'simplify', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n\n/**\n * isValid — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * isValid(shape: Shape): boolean(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param shape - 可形状参数(原样透传)\n * @returns boolean — 纯数据结果(非 Shape)。\n */\nexport function isValid(shape: Shape): boolean {\n const h0 = brepOf(shape as Shape) as BrepHandle\n return getBrepApi().isValid(h0)\n}\n\n/**\n * isSameShape — 查询(core,生成文件,勿手改;来源 api/surface/arg-spec.ts)。\n * isSameShape(a: Shape, b: Shape): boolean(core)\n * 桥接:getBrepApi().* 直连 occt 引擎(§5.5 第 2 条)——无来源实现中转。\n *\n * @param a - 可形状参数(第一个被比较形状)\n * @param b - 可形状参数(第二个被比较形状)\n * @returns boolean — 纯数据结果(非 Shape)。\n */\nexport function isSameShape(a: Shape, b: Shape): boolean {\n const h0 = brepOf(a as Shape) as BrepHandle\n const h1 = brepOf(b as Shape) as BrepHandle\n return getBrepApi().isSame(h0, h1)\n}\n\n/**\n * autoHeal — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * autoHeal(shape: Shape, options?: AutoHealOptions): { shape: Shape, report }\n * 桥接:defineOp({ brep: __own_autoHealBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const autoHeal = defineOp({\n brep: __own_autoHealBrep,\n name: 'autoHeal', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], outputs: [\"shape\"], paramDims: {},\n})\n\n/**\n * fixShape — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * fixShape(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_fixShapeBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fixShape = defineOp({\n brep: __own_fixShapeBrep,\n name: 'fixShape', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * healSolid — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * healSolid(solid: Shape): Shape\n * 桥接:defineOp({ brep: __own_healSolidBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const healSolid = defineOp({\n brep: __own_healSolidBrep,\n name: 'healSolid', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, paramDims: {},\n})\n\n/**\n * fixSelfIntersection — core 自有实现(生成文件,禁手改;来源 api/surface/arg-spec.ts)。\n * fixSelfIntersection(shape: Shape): Shape\n * 桥接:defineOp({ brep: __own_fixSelfIntersectionBrep })——core 直连 occt 引擎(§5.4),\n * D11 归一在自有实现内部完成(api/brep-operations/)。\n */\nexport const fixSelfIntersection = defineOp({\n brep: __own_fixSelfIntersectionBrep,\n name: 'fixSelfIntersection', naming: {\"kind\":\"kernel\",\"newFaces\":{\"via\":\"byAdjacency\"}}, engines: [\"occt\"], paramDims: {},\n})\n"]}
|
package/dist/api/primitives.d.ts
CHANGED
|
@@ -52,17 +52,18 @@ export declare function assertWedgeParams(params: Record<string, unknown>): void
|
|
|
52
52
|
* @param params.width - X 方向边长(mm)。type:number required:true
|
|
53
53
|
* @param params.depth - Y 方向边长(mm)。type:number required:true
|
|
54
54
|
* @param params.height - Z 方向边长(mm)。type:number required:true
|
|
55
|
-
* @param params.at -
|
|
55
|
+
* @param params.at - 底面中心(BASE 语义,与 cylinder/cone 一致;与 centered 同给时以 at 为中心)。type:[x,y,z] 可选
|
|
56
56
|
* @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。
|
|
57
57
|
* @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)
|
|
58
58
|
* @example
|
|
59
59
|
* const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)
|
|
60
|
-
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [
|
|
60
|
+
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [15 * MM, 10 * MM, 0], segments: 64 })
|
|
61
61
|
*
|
|
62
62
|
* 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`
|
|
63
63
|
* 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。
|
|
64
64
|
* 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),
|
|
65
65
|
* 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。
|
|
66
|
+
* 锚点(2026-10-16 统一 BASE):默认角点在原点、底面贴地,`box(w, d, h)` ≡ `box(w, d, h, { at: [w/2, d/2, 0] })`。
|
|
66
67
|
*/
|
|
67
68
|
export declare const box: ((params: Record<string, unknown>) => Promise<Shape>) & {
|
|
68
69
|
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAkB1C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvE;AA4HD
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAkB1C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS1E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUtE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvE;AA4HD;;;;;;;;;;;;;;;;;;;;;;;KAuBK;AACL,eAAO,MAAM,GAAG;;CAwBd,CAAA;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM;;CAgBjB,CAAA;AAWF;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,eAAO,MAAM,QAAQ;;CAgBnB,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,eAAO,MAAM,IAAI;;CAuBf,CAAA;AAEF;;;;;;;;;;;;;;;;IAgBI;AACJ,eAAO,MAAM,KAAK;;CAchB,CAAA"}
|
package/dist/api/primitives.js
CHANGED
|
@@ -223,17 +223,18 @@ function brepPrimitiveMesh(kernel, solid, op, segments) {
|
|
|
223
223
|
* @param params.width - X 方向边长(mm)。type:number required:true
|
|
224
224
|
* @param params.depth - Y 方向边长(mm)。type:number required:true
|
|
225
225
|
* @param params.height - Z 方向边长(mm)。type:number required:true
|
|
226
|
-
* @param params.at -
|
|
226
|
+
* @param params.at - 底面中心(BASE 语义,与 cylinder/cone 一致;与 centered 同给时以 at 为中心)。type:[x,y,z] 可选
|
|
227
227
|
* @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。
|
|
228
228
|
* @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)
|
|
229
229
|
* @example
|
|
230
230
|
* const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)
|
|
231
|
-
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [
|
|
231
|
+
* const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [15 * MM, 10 * MM, 0], segments: 64 })
|
|
232
232
|
*
|
|
233
233
|
* 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`
|
|
234
234
|
* 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。
|
|
235
235
|
* 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),
|
|
236
236
|
* 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。
|
|
237
|
+
* 锚点(2026-10-16 统一 BASE):默认角点在原点、底面贴地,`box(w, d, h)` ≡ `box(w, d, h, { at: [w/2, d/2, 0] })`。
|
|
237
238
|
*/
|
|
238
239
|
export const box = defineOp({
|
|
239
240
|
name: 'box',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,mGAAmG;AACnG,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAIxE,sDAAsD;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,6EAA6E;YAC7E,0EAA0E,CAC3E,CAAA;IACH,CAAC;IACD,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA+B;IAChE,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,yEAAyE;YACzE,8EAA8E,CAC/E,CAAA;IACH,CAAC;IACD,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACtD,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA+B;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,qEAAqE;YACrE,uFAAuF,CACxF,CAAA;IACH,CAAC;IACD,oBAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAA;IAC9D,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;IAC3D,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IACjD,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACnD,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IACjD,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AACrD,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa,CAAC,EAAU,EAAE,MAA+B;IAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,EAAE,IAAyD,EAAE,MAAe,CAAC,CAAA;IACvH,0DAA0D;IAC1D,gCAAgC;IAChC,2DAA2D;IAC3D,iDAAiD;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACnD,+EAA+E;IAC/E,+EAA+E;IAC/E,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAuB,CAAA;IAC1E,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,iBAAiB,CAAC,CAAA;IAC9F,iDAAiD;IACjD,wDAAwD;IACxD,wDAAwD;IACxD,0DAA0D;IAC1D,kBAAkB;IAClB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAA;IACnF,IAAI,UAAU;QAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;IAC7C,OAAO,QAAQ,CACb,KAAK,EACL,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAC3E,CAAA;AACH,CAAC;AAED,qDAAqD;AACrD,SAAS,cAAc,CACrB,IAAoB,EACpB,QAAgB,EAChB,QAAgB;IAEhB,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAClH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAClH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAClH,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAA;QAChE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAA;QAChE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK;YAAE,SAAQ;QAClD,EAAE,IAAI,EAAE,CAAC;QAAC,EAAE,IAAI,EAAE,CAAC;QAAC,EAAE,IAAI,EAAE,CAAA;IAC9B,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;QAAE,OAAO,IAAI,CAAA;IACvE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACnE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACnE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CACxB,MAAqB,EACrB,KAAiB,EACjB,EAAU,EACV,QAAgB;IAEhB,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACnC,gBAAgB,EAAE,eAAe,EAAE,CAAC,gBAAgB;QACpD,iBAAiB;KAClB,CAAC,CAAA;IACF,MAAM,KAAK,GAAU;QACnB,SAAS,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,OAAO,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;KACvC,CAAA;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAA;IAC1B,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACzB,MAAM,KAAK,GAAkD,EAAE,CAAA;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,qDAAqD;QACrD,MAAM,UAAU,GAA8C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1F,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;YACvD,IAAI,CAAC,EAAE;gBAAE,OAAO,EAAE,KAAK,EAAE,CAAA;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjH,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,KAAK,EAAE,CAAA,CAAC,cAAc;YAClE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC7D,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACvD,MAAM,UAAU,GAAqC,EAAE,CAAA;QACvD,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAA;YACxB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACjE,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBACzE,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3E,CAAC;YACD,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAA;QACtB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,CAAA;IACjE,CAAC;IACD,IAAI,CAAC,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9D,8DAA8D;QAC9D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;IAC5F,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;KAsBK;AACL,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC;IAC1B,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,eAAe,CAAC,MAAM,CAAC,CAAA;QACvB,OAAO,cAAc,CAAC,GAAG,CAAC,MAAe,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,eAAe,CAAC,MAAM,CAAC,CAAA;QACvB,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IACD,4CAA4C;IAC5C,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,QAAQ;QAChB,EAAE,EAAE,OAAO;QACX,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,SAAS;KACpB;IACD,2DAA2D;IAC3D,0CAA0C;IAC1C,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;IAC/C,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAgB;CAC/S,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC1B,OAAO,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAU,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC1B,OAAO,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;IAC/E,4EAA4E;IAC5E,yCAAyC;IACzC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC7B,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,wCAAwC,EAAgB;CAC9F,CAAC,CAAA;AAEF;;;GAGG;AACH,SAAS,YAAY,CAAC,MAA+B;IACnD,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAA;IACpE,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC/B,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAC5B,OAAO,cAAc,CAAC,QAAQ,CAAC,MAAe,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAC5B,OAAO,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IACD,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IACtG,yEAAyE;IACzE,2BAA2B;IAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACvC,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAgB;CACpM,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;IAsBI;AACJ,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACxB,OAAO,cAAc,CAAC,IAAI,CAAC,MAAe,CAAC,CAAA;IAC7C,CAAC;IACD,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,gBAAgB,CAAC,MAAM,CAAC,CAAA;QACxB,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,EAAE;QACN,YAAY,EAAE,QAAQ;QACtB,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,QAAQ;QAChB,EAAE,EAAE,OAAO;QACX,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,SAAS;KACpB;IACD,iFAAiF;IACjF,+DAA+D;IAC/D,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE;IAC1D,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC5E,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAgB;CACpM,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;IAgBI;AACJ,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACzB,OAAO,cAAc,CAAC,KAAK,CAAC,MAAe,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,EAAE,CAAC,MAA+B,EAAE,EAAE;QACxC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QACzB,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IACD,6FAA6F;IAC7F,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;IACzD,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;IAClF,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,uCAAuC,EAAgB;CAC7F,CAAC,CAAA","sourcesContent":["/**\n * api primitives — 基本体创建库函数(box/sphere/cylinder/cone/wedge)\n *\n *\n * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { clampNRad } from '../mesh/types'\n// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.\nimport * as meshPrimitives from '../mesh/primitives'\nimport { primitiveToBrepSolid } from '../primitives/brep-primitives'\nimport { getCurrentStmt, getTessellation } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { assignRoles } from '../topology/naming/roles'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { asPartName } from '../identity'\nimport { defineOp } from '../sdk'\nimport { assertPositiveNumber, assertNonNegativeNumber } from './assert'\nimport type { BrepMeshResult, BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n// ── per-op 参数自校验(Phase 2.2;api 层被直接 import 时的防御层) ──\n\n/**\n * Validate box parameters (brepjs contract, §4.1 A 决策): `width`, `depth` and\n * `height` must be positive numbers. The legacy `{ size }` object form is\n * removed — any call still passing `size` throws an explicit `E_ARGS_FORM`\n * error pointing at the new signature (error hint ≠ compatibility).\n * @param params - the raw box operation parameters.\n */\nexport function assertBoxParams(params: Record<string, unknown>): void {\n if (params.size !== undefined) {\n throw new Error(\n '[faijs/args] box: E_ARGS_FORM: the `box({ size })` object form is removed. ' +\n 'box now uses `box(width, depth, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.width, 'box.width')\n assertPositiveNumber(params.depth, 'box.depth')\n assertPositiveNumber(params.height, 'box.height')\n}\n\n/**\n * Validate sphere parameters: `radius` must be a positive number.\n * @param params - the raw sphere operation parameters.\n */\nexport function assertSphereParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.radius, 'sphere.radius')\n}\n\n/**\n * Validate cylinder parameters (brepjs contract, §4.3 A 决策): `radius` and\n * `height` must be positive. The legacy `{ center }` object key is removed — any\n * call still passing `center` throws an explicit `E_ARGS_FORM` error pointing at\n * the new signature (error hint ≠ compatibility, 裁决 3).\n * @param params - the raw cylinder operation parameters.\n */\nexport function assertCylinderParams(params: Record<string, unknown>): void {\n if (params.center !== undefined || params.size !== undefined) {\n throw new Error(\n '[faijs/args] cylinder: E_ARGS_FORM: the legacy object form is removed. ' +\n 'cylinder now uses `cylinder(radius, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.radius, 'cylinder.radius')\n assertPositiveNumber(params.height, 'cylinder.height')\n}\n\n/**\n * Validate cone parameters (brepjs contract, §4.1 P 决策): `radiusBottom` and\n * `height` must be positive, `radiusTop` must be non-negative. The legacy\n * `{ center }` object key is removed — any call still passing `center` throws an\n * explicit `E_ARGS_FORM` error pointing at the new signature (error hint ≠\n * compatibility, 裁决 3).\n * @param params - the raw cone operation parameters.\n */\nexport function assertConeParams(params: Record<string, unknown>): void {\n if (params.center !== undefined || params.size !== undefined) {\n throw new Error(\n '[faijs/args] cone: E_ARGS_FORM: the legacy object form is removed. ' +\n 'cone now uses `cone(bottomRadius, topRadius, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.radiusBottom, 'cone.radiusBottom')\n assertNonNegativeNumber(params.radiusTop, 'cone.radiusTop')\n assertPositiveNumber(params.height, 'cone.height')\n}\n\n/**\n * Validate wedge parameters: `width`, `height`, `angle`, and `length` must be\n * positive numbers.\n * @param params - the raw wedge operation parameters.\n */\nexport function assertWedgeParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.width, 'wedge.width')\n assertPositiveNumber(params.height, 'wedge.height')\n assertPositiveNumber(params.angle, 'wedge.angle')\n assertPositiveNumber(params.length, 'wedge.length')\n}\n\n/** BREP 路径:OCCT 精确构造 + 三角化 + fromBrep 登记(基本体无面演化;链根建 roleTable)。 */\nfunction primitiveBrep(op: string, params: Record<string, unknown>): Shape {\n const kernel = getBrepApi()\n const type = op === 'box' ? 'cube' : op\n const result = primitiveToBrepSolid(kernel, type as 'cube' | 'sphere' | 'cylinder' | 'cone' | 'wedge', params as never)\n // §3.2:链根建表——语义命名器按 op 类型给面命名(semantic 'top'/'lateral' 等,\n // Phase 1.7 已删 'box:' 前缀与位置兜底)。\n // Phase 1.6:origin 用链根语句的 StmtId(当前语句 id,§2.2/§4.1)——变量名会被\n // 改名/复用,StmtId 全局唯一,保证多个同类型 primitive 不撞 origin。\n const origin = String(getCurrentStmt()?.id ?? op)\n const roles = assignRoles(kernel, result.solid, op)\n // Explicit segments/nRad wins ($fn override); otherwise derive from the global\n // tessellation knob (proposal 2026-10-07) — default still 2π/64 ≈ 64 segments.\n const rawSegments = (params.nRad ?? params.segments) as number | undefined\n const segments = clampNRad(rawSegments ?? (2 * Math.PI) / getTessellation().angularDeflection)\n // P4 面级:brep 链基本体也挂契约序 faceRanges(编辑器默认 brep 链——\n // setFaceColor 必须可用)。box 的 OCCT 面枚举序(实测 0=−X,1=+Y,…)与契约\n // (+X/−X/+Y/−Y/+Z/−Z)不一致,按面法线重排 indices;cylinder/cone 的\n // OCCT 序与契约一致(实测锁定:cylinder 0=侧面,1=顶,2=底;cone radiusTop=0\n // 0=侧面,1=底),直接透传。\n const { shape, faceRanges } = brepPrimitiveMesh(kernel, result.solid, op, segments)\n if (faceRanges) shape.faceRanges = faceRanges\n return fromBrep(\n shape,\n { solid: result.solid, roleTable: new Map([[asPartName(origin), roles]]) },\n )\n}\n\n/** 面法线主轴向:用该面非退化三角形的法线和定轴与符号(OCCT 统一 outward 绕向)。 */\nfunction faceNormalAxis(\n mesh: BrepMeshResult,\n triStart: number,\n triCount: number,\n): { axis: 0 | 1 | 2; sign: 1 | -1 } | null {\n let sx = 0\n let sy = 0\n let sz = 0\n for (let t = 0; t < triCount; t++) {\n const i0 = mesh.indices[(triStart + t) * 3]\n const i1 = mesh.indices[(triStart + t) * 3 + 1]\n const i2 = mesh.indices[(triStart + t) * 3 + 2]\n const p0x = mesh.positions[i0 * 3]; const p0y = mesh.positions[i0 * 3 + 1]; const p0z = mesh.positions[i0 * 3 + 2]\n const p1x = mesh.positions[i1 * 3]; const p1y = mesh.positions[i1 * 3 + 1]; const p1z = mesh.positions[i1 * 3 + 2]\n const p2x = mesh.positions[i2 * 3]; const p2y = mesh.positions[i2 * 3 + 1]; const p2z = mesh.positions[i2 * 3 + 2]\n const ux = p1x - p0x; const uy = p1y - p0y; const uz = p1z - p0z\n const vx = p2x - p0x; const vy = p2y - p0y; const vz = p2z - p0z\n const nx = uy * vz - uz * vy\n const ny = uz * vx - ux * vz\n const nz = ux * vy - uy * vx\n const len = Math.hypot(nx, ny, nz)\n if (!Number.isFinite(len) || len < 1e-12) continue\n sx += nx; sy += ny; sz += nz\n }\n const ax = Math.abs(sx); const ay = Math.abs(sy); const az = Math.abs(sz)\n if (!Number.isFinite(ax + ay + az) || ax + ay + az < 1e-12) return null\n if (ax >= ay && ax >= az) return { axis: 0, sign: sx > 0 ? 1 : -1 }\n if (ay >= ax && ay >= az) return { axis: 1, sign: sy > 0 ? 1 : -1 }\n return { axis: 2, sign: sz > 0 ? 1 : -1 }\n}\n\n/**\n * 三角化基本体并附 P4 契约序 faceRanges。\n * faceGroups 三元组 = [triStart, triCount, faceHash],前两元是索引单位\n * (brep-ops.ts 注释)→ 三角形单位 = 索引/3。\n * - box:6 面 → 按面法线重排 indices 到契约序(0=+X,1=−X,2=+Y,3=−Y,4=+Z,5=−Z)。\n * - cylinder/cone:OCCT 枚举序与契约一致(探针实测锁定),直接透传,不重排。\n * - wedge/sphere 及其它:无契约,不挂 faceRanges(setFaceColor 抛 E_FACE_UNAVAILABLE)。\n */\nfunction brepPrimitiveMesh(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n op: string,\n segments: number,\n): { shape: Shape; faceRanges?: Shape['faceRanges'] } {\n const angularDeflection = (2 * Math.PI) / Math.max(3, segments)\n const mesh = kernel.meshShape(solid, {\n linearDeflection: getTessellation().linearDeflection,\n angularDeflection,\n })\n const shape: Shape = {\n positions: new Float32Array(mesh.positions),\n indices: new Uint32Array(mesh.indices),\n }\n const fg = mesh.faceGroups\n if (!fg) return { shape }\n const faces: Array<{ triStart: number; triCount: number }> = []\n for (let f = 0; f < fg.length / 3; f++) {\n faces.push({ triStart: fg[f * 3] / 3, triCount: fg[f * 3 + 1] / 3 })\n }\n if (op === 'box' && faces.length === 6) {\n // 契约序重排:每面判向 → 契约 idx(+X=0,−X=1,+Y=2,−Y=3,+Z=4,−Z=5)\n const byContract: Array<(typeof faces)[number] | undefined> = new Array(6).fill(undefined)\n for (const f of faces) {\n const na = faceNormalAxis(mesh, f.triStart, f.triCount)\n if (!na) return { shape }\n const idx = na.axis === 0 ? (na.sign > 0 ? 0 : 1) : na.axis === 1 ? (na.sign > 0 ? 2 : 3) : (na.sign > 0 ? 4 : 5)\n if (byContract[idx] !== undefined) return { shape } // 法线判向歧义 → 不挂\n byContract[idx] = f\n }\n if (byContract.some((f) => f === undefined)) return { shape }\n const newIndices = new Uint32Array(mesh.indices.length)\n const faceRanges: NonNullable<Shape['faceRanges']> = []\n let outTri = 0\n for (let c = 0; c < 6; c++) {\n const f = byContract[c]!\n faceRanges.push({ start: outTri, count: f.triCount })\n for (let t = 0; t < f.triCount; t++) {\n newIndices[(outTri + t) * 3] = mesh.indices[(f.triStart + t) * 3]\n newIndices[(outTri + t) * 3 + 1] = mesh.indices[(f.triStart + t) * 3 + 1]\n newIndices[(outTri + t) * 3 + 2] = mesh.indices[(f.triStart + t) * 3 + 2]\n }\n outTri += f.triCount\n }\n return { shape: { ...shape, indices: newIndices }, faceRanges }\n }\n if ((op === 'cylinder' || op === 'cone') && faces.length >= 2) {\n // OCCT 枚举序 = P4a 契约序(探针实测):0=侧面, 1=顶, 2=底(cone 无顶盖时 0=侧面,1=底)\n return { shape, faceRanges: faces.map((f) => ({ start: f.triStart, count: f.triCount })) }\n }\n return { shape }\n}\n\n/**\n * 创建长方体(brepjs 契约,§4.1 A 决策)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name box\n * @returns Shape 长方体几何,可作为后续 op 的输入。\n * @param params.width - X 方向边长(mm)。type:number required:true\n * @param params.depth - Y 方向边长(mm)。type:number required:true\n * @param params.height - Z 方向边长(mm)。type:number required:true\n * @param params.at - 中心点(CENTER 语义,优先于 centered)。type:[x,y,z] 可选\n * @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)\n * const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [1, 2, 3], segments: 64 })\n *\n * 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`\n * 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。\n * 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),\n * 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。\n */\nexport const box = defineOp({\n name: 'box',\n mesh: (params: Record<string, unknown>) => {\n assertBoxParams(params)\n return meshPrimitives.box(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertBoxParams(params)\n return primitiveBrep('box', params)\n },\n // schema feeds codegen/UI parameter panels.\n schema: {\n width: 'number',\n depth: 'number',\n height: 'number',\n at: 'vec3?',\n centered: 'boolean?',\n segments: 'number?',\n },\n // D11 位置→对象(§4.1/§6.2):三个标量装箱成 { width, depth, height },尾参\n // options 经 dual-form-args 的尾参合并(§6.2)并入。\n slotMap: { keys: ['width', 'depth', 'height'] },\n paramDims: { width: 'length', depth: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'front' }, { kind: 'semantic', name: 'back' }, { kind: 'semantic', name: 'left' }, { kind: 'semantic', name: 'right' }] } } as Provenance,\n})\n\n/**\n * 创建球体。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name sphere\n * @returns Shape 球体几何,可作为后续 op 的输入。\n * @param params.radius - 半径(mm)。type:number required:true\n * @param params.segments - 细分度(影响面数)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @param params.center - 球心位置(at 的同义别名)。type:[x,y,z] 默认 [0,0,0](原点)。\n * @param params.at - 球心位置(center 的同义别名,brepjs 契约;裁决 4 双形态合法)。\n * @example\n * const r = cad.sphere({ radius: 10 })\n * const r = cad.sphere(10, { at: [0, 0, 10], segments: 64 })\n * const r = cad.sphere({ radius: 10, segments: 64, center: [0,0,10] })\n */\nexport const sphere = defineOp({\n name: 'sphere',\n mesh: (params: Record<string, unknown>) => {\n assertSphereParams(params)\n return meshPrimitives.sphere(centerParams(params) as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertSphereParams(params)\n return primitiveBrep('sphere', centerParams(params))\n },\n schema: { radius: 'number', segments: 'number?', center: 'vec3?', at: 'vec3?' },\n // D11: `sphere(10)` == `sphere({ radius: 10 })`; 尾参 options({at, segments})\n // 经 dual-form-args 的尾参合并规则归一(裁决 4,§6.2)。\n slotMap: { keys: ['radius'] },\n paramDims: { radius: 'length' },\n naming: { kind: 'unmodeled', reason: 'sphere face vocabulary pending Phase 3' } as Provenance,\n})\n\n/**\n * 位置归一:把 brepjs 契约的 `at`(= faijs 的 `center`,球心语义)归一为一个\n * `center` 输入,mesh/brep 两条消费路径共用(裁决 1/4,§4.2)。\n */\nfunction centerParams(params: Record<string, unknown>): Record<string, unknown> {\n if (params.at !== undefined) return { ...params, center: params.at }\n return params\n}\n\n/**\n * 创建圆柱体(brepjs 契约,§4.3 A 决策)。\n * 锚点:`at` 是**底面轴心**(BASE 语义,默认 [0,0,0],底面在原点、+Z 延伸);`centered:true`\n * 指底面落到 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name cylinder\n * @returns Shape 圆柱体几何,可作为后续 op 的输入。\n * @param params.radius - 底面半径(mm)。type:number required:true\n * @param params.height - 高度(mm),沿 +Z 轴。type:number required:true\n * @param params.at - 底面中心(BASE 语义)。type:[x,y,z] 可选\n * @param params.centered - 是否居中(底面 −h/2;与 at 同给时以 at 为中心)。type:boolean 默认 false\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const c = cad.cylinder(5, 40)\n * const c = cad.cylinder(5, 40, { at: [0, 0, 20], segments: 64 })\n *\n * 位置原生(§4.1/§6.2):`cylinder(5, 40)` 与 `cylinder(5, 40, { at: [0, 0, 20] })`\n * 归一到同一对象(D11 位置→装箱 + 尾参 options 合并)。旧 `{ center }` 对象形态已废弃\n * (裁决 3),传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.3)。\n */\nexport const cylinder = defineOp({\n name: 'cylinder',\n mesh: (params: Record<string, unknown>) => {\n assertCylinderParams(params)\n return meshPrimitives.cylinder(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertCylinderParams(params)\n return primitiveBrep('cylinder', params)\n },\n schema: { radius: 'number', height: 'number', at: 'vec3?', centered: 'boolean?', segments: 'number?' },\n // D11(§4.1/§6.2):`cylinder(5, 40)` 两个标量装箱成 { radius, height };尾参 options\n // 经 dual-form-args 尾参合并并入。\n slotMap: { keys: ['radius', 'height'] },\n paramDims: { radius: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'lateral' }] } } as Provenance,\n})\n\n/**\n * 创建圆锥体(brepjs 契约,§4.1 P 决策)。radiusTop 等于 radiusBottom 时即圆柱,0 为尖锥。\n * 锚点:`at` 是**底面轴心**(BASE 语义,默认 [0,0,0],底面在原点、+Z 延伸);`centered:true`\n * 指底面落到 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name cone\n * @returns Shape 圆锥体几何,可作为后续 op 的输入。\n * @param params.radiusBottom - 底半径(mm)。type:number required:true\n * @param params.radiusTop - 顶半径(mm),0 为尖锥,非负,等于 radiusBottom 得圆柱。type:number required:true\n * @param params.height - 高度(mm),沿 +Z 轴。type:number required:true\n * @param params.at - 底面轴心(BASE 语义)。type:[x,y,z] 可选\n * @param params.centered - 是否居中(底面 −h/2;与 at 同给时以 at 为中心)。type:boolean 默认 false\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const c = cad.cone(10, 4, 30)\n * const c = cad.cone(10, 0, 30, { at: [0, 0, 20], segments: 64 })\n * 位置原生(§4.1/§6.2):`cone(10, 4, 30)` 与 `cone(10, 4, 30, { at: [0, 0, 20] })`\n * 归一到同一对象(D11 位置→装箱 + 尾参 options 合并)。旧 `{ center }`/`{ size }` 对象形态\n * 已废弃(裁决 3),传入会抛 E_ARGS_FORM(错误提示 ≠ 兼容)。\n */\nexport const cone = defineOp({\n name: 'cone',\n mesh: (params: Record<string, unknown>) => {\n assertConeParams(params)\n return meshPrimitives.cone(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertConeParams(params)\n return primitiveBrep('cone', params)\n },\n schema: {\n radiusBottom: 'number',\n radiusTop: 'number',\n height: 'number',\n at: 'vec3?',\n centered: 'boolean?',\n segments: 'number?',\n },\n // D11(§4.1/§6.2): `cone(10, 4, 30)` 三个标量装箱成 { radiusBottom, radiusTop, height }。\n // 尾参 options({at, centered, segments})经 dual-form-args 尾参合并并入。\n slotMap: { keys: ['radiusBottom', 'radiusTop', 'height'] },\n paramDims: { radiusBottom: 'length', radiusTop: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'lateral' }] } } as Provenance,\n})\n\n/**\n * 创建楔形体。唯一契约是 width/height/angle/length(width/height/angle 为正数,length 沿切割方向),\n * 旧文档的 size 形态已废弃,传 { size } 会抛错。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name wedge\n * @note 曾与 UI 面板的 `size` 形态并存并写入文档,但断言层确认唯一合法契约是 width/height/angle/length;传 `{ size }` 直接抛错。已按真源收敛。\n * @returns Shape 楔形体几何,可作为后续 op 的输入。\n * @param params.width - 底面宽度(mm)。type:number required:true\n * @param params.height - 高度(mm)。type:number required:true\n * @param params.angle - 楔形角度(度)。type:number required:true\n * @param params.length - 沿切割方向的长度(mm)。type:number required:true\n * @example\n * const w = cad.wedge({ width: 30, height: 20, angle: 45, length: 10 })\n */\nexport const wedge = defineOp({\n name: 'wedge',\n mesh: (params: Record<string, unknown>) => {\n assertWedgeParams(params)\n return meshPrimitives.wedge(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertWedgeParams(params)\n return primitiveBrep('wedge', params)\n },\n // D11: `wedge(30, 20, 45, 10)` == `wedge({ width: 30, height: 20, angle: 45, length: 10 })`.\n slotMap: { keys: ['width', 'height', 'angle', 'length'] },\n paramDims: { width: 'length', height: 'length', angle: 'angle', length: 'length' },\n naming: { kind: 'unmodeled', reason: 'wedge face vocabulary pending Phase 3' } as Provenance,\n})\n"]}
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/api/primitives.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api primitives — 基本体创建库函数(box/sphere/cylinder/cone/wedge)\n *\n *\n * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { clampNRad } from '../mesh/types'\n// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.\nimport * as meshPrimitives from '../mesh/primitives'\nimport { primitiveToBrepSolid } from '../primitives/brep-primitives'\nimport { getCurrentStmt, getTessellation } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { assignRoles } from '../topology/naming/roles'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { asPartName } from '../identity'\nimport { defineOp } from '../sdk'\nimport { assertPositiveNumber, assertNonNegativeNumber } from './assert'\nimport type { BrepMeshResult, BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n// ── per-op 参数自校验(Phase 2.2;api 层被直接 import 时的防御层) ──\n\n/**\n * Validate box parameters (brepjs contract, §4.1 A 决策): `width`, `depth` and\n * `height` must be positive numbers. The legacy `{ size }` object form is\n * removed — any call still passing `size` throws an explicit `E_ARGS_FORM`\n * error pointing at the new signature (error hint ≠ compatibility).\n * @param params - the raw box operation parameters.\n */\nexport function assertBoxParams(params: Record<string, unknown>): void {\n if (params.size !== undefined) {\n throw new Error(\n '[faijs/args] box: E_ARGS_FORM: the `box({ size })` object form is removed. ' +\n 'box now uses `box(width, depth, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.width, 'box.width')\n assertPositiveNumber(params.depth, 'box.depth')\n assertPositiveNumber(params.height, 'box.height')\n}\n\n/**\n * Validate sphere parameters: `radius` must be a positive number.\n * @param params - the raw sphere operation parameters.\n */\nexport function assertSphereParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.radius, 'sphere.radius')\n}\n\n/**\n * Validate cylinder parameters (brepjs contract, §4.3 A 决策): `radius` and\n * `height` must be positive. The legacy `{ center }` object key is removed — any\n * call still passing `center` throws an explicit `E_ARGS_FORM` error pointing at\n * the new signature (error hint ≠ compatibility, 裁决 3).\n * @param params - the raw cylinder operation parameters.\n */\nexport function assertCylinderParams(params: Record<string, unknown>): void {\n if (params.center !== undefined || params.size !== undefined) {\n throw new Error(\n '[faijs/args] cylinder: E_ARGS_FORM: the legacy object form is removed. ' +\n 'cylinder now uses `cylinder(radius, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.radius, 'cylinder.radius')\n assertPositiveNumber(params.height, 'cylinder.height')\n}\n\n/**\n * Validate cone parameters (brepjs contract, §4.1 P 决策): `radiusBottom` and\n * `height` must be positive, `radiusTop` must be non-negative. The legacy\n * `{ center }` object key is removed — any call still passing `center` throws an\n * explicit `E_ARGS_FORM` error pointing at the new signature (error hint ≠\n * compatibility, 裁决 3).\n * @param params - the raw cone operation parameters.\n */\nexport function assertConeParams(params: Record<string, unknown>): void {\n if (params.center !== undefined || params.size !== undefined) {\n throw new Error(\n '[faijs/args] cone: E_ARGS_FORM: the legacy object form is removed. ' +\n 'cone now uses `cone(bottomRadius, topRadius, height, { at?, centered?, segments? })`.',\n )\n }\n assertPositiveNumber(params.radiusBottom, 'cone.radiusBottom')\n assertNonNegativeNumber(params.radiusTop, 'cone.radiusTop')\n assertPositiveNumber(params.height, 'cone.height')\n}\n\n/**\n * Validate wedge parameters: `width`, `height`, `angle`, and `length` must be\n * positive numbers.\n * @param params - the raw wedge operation parameters.\n */\nexport function assertWedgeParams(params: Record<string, unknown>): void {\n assertPositiveNumber(params.width, 'wedge.width')\n assertPositiveNumber(params.height, 'wedge.height')\n assertPositiveNumber(params.angle, 'wedge.angle')\n assertPositiveNumber(params.length, 'wedge.length')\n}\n\n/** BREP 路径:OCCT 精确构造 + 三角化 + fromBrep 登记(基本体无面演化;链根建 roleTable)。 */\nfunction primitiveBrep(op: string, params: Record<string, unknown>): Shape {\n const kernel = getBrepApi()\n const type = op === 'box' ? 'cube' : op\n const result = primitiveToBrepSolid(kernel, type as 'cube' | 'sphere' | 'cylinder' | 'cone' | 'wedge', params as never)\n // §3.2:链根建表——语义命名器按 op 类型给面命名(semantic 'top'/'lateral' 等,\n // Phase 1.7 已删 'box:' 前缀与位置兜底)。\n // Phase 1.6:origin 用链根语句的 StmtId(当前语句 id,§2.2/§4.1)——变量名会被\n // 改名/复用,StmtId 全局唯一,保证多个同类型 primitive 不撞 origin。\n const origin = String(getCurrentStmt()?.id ?? op)\n const roles = assignRoles(kernel, result.solid, op)\n // Explicit segments/nRad wins ($fn override); otherwise derive from the global\n // tessellation knob (proposal 2026-10-07) — default still 2π/64 ≈ 64 segments.\n const rawSegments = (params.nRad ?? params.segments) as number | undefined\n const segments = clampNRad(rawSegments ?? (2 * Math.PI) / getTessellation().angularDeflection)\n // P4 面级:brep 链基本体也挂契约序 faceRanges(编辑器默认 brep 链——\n // setFaceColor 必须可用)。box 的 OCCT 面枚举序(实测 0=−X,1=+Y,…)与契约\n // (+X/−X/+Y/−Y/+Z/−Z)不一致,按面法线重排 indices;cylinder/cone 的\n // OCCT 序与契约一致(实测锁定:cylinder 0=侧面,1=顶,2=底;cone radiusTop=0\n // 0=侧面,1=底),直接透传。\n const { shape, faceRanges } = brepPrimitiveMesh(kernel, result.solid, op, segments)\n if (faceRanges) shape.faceRanges = faceRanges\n return fromBrep(\n shape,\n { solid: result.solid, roleTable: new Map([[asPartName(origin), roles]]) },\n )\n}\n\n/** 面法线主轴向:用该面非退化三角形的法线和定轴与符号(OCCT 统一 outward 绕向)。 */\nfunction faceNormalAxis(\n mesh: BrepMeshResult,\n triStart: number,\n triCount: number,\n): { axis: 0 | 1 | 2; sign: 1 | -1 } | null {\n let sx = 0\n let sy = 0\n let sz = 0\n for (let t = 0; t < triCount; t++) {\n const i0 = mesh.indices[(triStart + t) * 3]\n const i1 = mesh.indices[(triStart + t) * 3 + 1]\n const i2 = mesh.indices[(triStart + t) * 3 + 2]\n const p0x = mesh.positions[i0 * 3]; const p0y = mesh.positions[i0 * 3 + 1]; const p0z = mesh.positions[i0 * 3 + 2]\n const p1x = mesh.positions[i1 * 3]; const p1y = mesh.positions[i1 * 3 + 1]; const p1z = mesh.positions[i1 * 3 + 2]\n const p2x = mesh.positions[i2 * 3]; const p2y = mesh.positions[i2 * 3 + 1]; const p2z = mesh.positions[i2 * 3 + 2]\n const ux = p1x - p0x; const uy = p1y - p0y; const uz = p1z - p0z\n const vx = p2x - p0x; const vy = p2y - p0y; const vz = p2z - p0z\n const nx = uy * vz - uz * vy\n const ny = uz * vx - ux * vz\n const nz = ux * vy - uy * vx\n const len = Math.hypot(nx, ny, nz)\n if (!Number.isFinite(len) || len < 1e-12) continue\n sx += nx; sy += ny; sz += nz\n }\n const ax = Math.abs(sx); const ay = Math.abs(sy); const az = Math.abs(sz)\n if (!Number.isFinite(ax + ay + az) || ax + ay + az < 1e-12) return null\n if (ax >= ay && ax >= az) return { axis: 0, sign: sx > 0 ? 1 : -1 }\n if (ay >= ax && ay >= az) return { axis: 1, sign: sy > 0 ? 1 : -1 }\n return { axis: 2, sign: sz > 0 ? 1 : -1 }\n}\n\n/**\n * 三角化基本体并附 P4 契约序 faceRanges。\n * faceGroups 三元组 = [triStart, triCount, faceHash],前两元是索引单位\n * (brep-ops.ts 注释)→ 三角形单位 = 索引/3。\n * - box:6 面 → 按面法线重排 indices 到契约序(0=+X,1=−X,2=+Y,3=−Y,4=+Z,5=−Z)。\n * - cylinder/cone:OCCT 枚举序与契约一致(探针实测锁定),直接透传,不重排。\n * - wedge/sphere 及其它:无契约,不挂 faceRanges(setFaceColor 抛 E_FACE_UNAVAILABLE)。\n */\nfunction brepPrimitiveMesh(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n op: string,\n segments: number,\n): { shape: Shape; faceRanges?: Shape['faceRanges'] } {\n const angularDeflection = (2 * Math.PI) / Math.max(3, segments)\n const mesh = kernel.meshShape(solid, {\n linearDeflection: getTessellation().linearDeflection,\n angularDeflection,\n })\n const shape: Shape = {\n positions: new Float32Array(mesh.positions),\n indices: new Uint32Array(mesh.indices),\n }\n const fg = mesh.faceGroups\n if (!fg) return { shape }\n const faces: Array<{ triStart: number; triCount: number }> = []\n for (let f = 0; f < fg.length / 3; f++) {\n faces.push({ triStart: fg[f * 3] / 3, triCount: fg[f * 3 + 1] / 3 })\n }\n if (op === 'box' && faces.length === 6) {\n // 契约序重排:每面判向 → 契约 idx(+X=0,−X=1,+Y=2,−Y=3,+Z=4,−Z=5)\n const byContract: Array<(typeof faces)[number] | undefined> = new Array(6).fill(undefined)\n for (const f of faces) {\n const na = faceNormalAxis(mesh, f.triStart, f.triCount)\n if (!na) return { shape }\n const idx = na.axis === 0 ? (na.sign > 0 ? 0 : 1) : na.axis === 1 ? (na.sign > 0 ? 2 : 3) : (na.sign > 0 ? 4 : 5)\n if (byContract[idx] !== undefined) return { shape } // 法线判向歧义 → 不挂\n byContract[idx] = f\n }\n if (byContract.some((f) => f === undefined)) return { shape }\n const newIndices = new Uint32Array(mesh.indices.length)\n const faceRanges: NonNullable<Shape['faceRanges']> = []\n let outTri = 0\n for (let c = 0; c < 6; c++) {\n const f = byContract[c]!\n faceRanges.push({ start: outTri, count: f.triCount })\n for (let t = 0; t < f.triCount; t++) {\n newIndices[(outTri + t) * 3] = mesh.indices[(f.triStart + t) * 3]\n newIndices[(outTri + t) * 3 + 1] = mesh.indices[(f.triStart + t) * 3 + 1]\n newIndices[(outTri + t) * 3 + 2] = mesh.indices[(f.triStart + t) * 3 + 2]\n }\n outTri += f.triCount\n }\n return { shape: { ...shape, indices: newIndices }, faceRanges }\n }\n if ((op === 'cylinder' || op === 'cone') && faces.length >= 2) {\n // OCCT 枚举序 = P4a 契约序(探针实测):0=侧面, 1=顶, 2=底(cone 无顶盖时 0=侧面,1=底)\n return { shape, faceRanges: faces.map((f) => ({ start: f.triStart, count: f.triCount })) }\n }\n return { shape }\n}\n\n/**\n * 创建长方体(brepjs 契约,§4.1 A 决策)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name box\n * @returns Shape 长方体几何,可作为后续 op 的输入。\n * @param params.width - X 方向边长(mm)。type:number required:true\n * @param params.depth - Y 方向边长(mm)。type:number required:true\n * @param params.height - Z 方向边长(mm)。type:number required:true\n * @param params.at - 底面中心(BASE 语义,与 cylinder/cone 一致;与 centered 同给时以 at 为中心)。type:[x,y,z] 可选\n * @param params.centered - 无 at 时是否居中到原点(type:boolean 默认 false,角点在原点)。\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const part0 = cad.box(10 * MM, 20 * MM, 30 * MM)\n * const part1 = cad.box(30 * MM, 20 * MM, 10 * MM, { at: [15 * MM, 10 * MM, 0], segments: 64 })\n *\n * 位置原生(§4.1/§6.2):`box(width, depth, height)` 与 `box(10 * MM, 20 * MM, 30 * MM, { at: [1, 2, 3] })`\n * 有量纲位必须写单位字面量(基准单位亦然,`10` 裸数字被 D8 R2 拒)。\n * 归一到同一对象(D11 位置→对象 + 尾参 options 合并)。旧 `{ size }` 对象形态已废弃(裁决 3),\n * 传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.1)。\n * 锚点(2026-10-16 统一 BASE):默认角点在原点、底面贴地,`box(w, d, h)` ≡ `box(w, d, h, { at: [w/2, d/2, 0] })`。\n */\nexport const box = defineOp({\n name: 'box',\n mesh: (params: Record<string, unknown>) => {\n assertBoxParams(params)\n return meshPrimitives.box(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertBoxParams(params)\n return primitiveBrep('box', params)\n },\n // schema feeds codegen/UI parameter panels.\n schema: {\n width: 'number',\n depth: 'number',\n height: 'number',\n at: 'vec3?',\n centered: 'boolean?',\n segments: 'number?',\n },\n // D11 位置→对象(§4.1/§6.2):三个标量装箱成 { width, depth, height },尾参\n // options 经 dual-form-args 的尾参合并(§6.2)并入。\n slotMap: { keys: ['width', 'depth', 'height'] },\n paramDims: { width: 'length', depth: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'front' }, { kind: 'semantic', name: 'back' }, { kind: 'semantic', name: 'left' }, { kind: 'semantic', name: 'right' }] } } as Provenance,\n})\n\n/**\n * 创建球体。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name sphere\n * @returns Shape 球体几何,可作为后续 op 的输入。\n * @param params.radius - 半径(mm)。type:number required:true\n * @param params.segments - 细分度(影响面数)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @param params.center - 球心位置(at 的同义别名)。type:[x,y,z] 默认 [0,0,0](原点)。\n * @param params.at - 球心位置(center 的同义别名,brepjs 契约;裁决 4 双形态合法)。\n * @example\n * const r = cad.sphere({ radius: 10 })\n * const r = cad.sphere(10, { at: [0, 0, 10], segments: 64 })\n * const r = cad.sphere({ radius: 10, segments: 64, center: [0,0,10] })\n */\nexport const sphere = defineOp({\n name: 'sphere',\n mesh: (params: Record<string, unknown>) => {\n assertSphereParams(params)\n return meshPrimitives.sphere(centerParams(params) as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertSphereParams(params)\n return primitiveBrep('sphere', centerParams(params))\n },\n schema: { radius: 'number', segments: 'number?', center: 'vec3?', at: 'vec3?' },\n // D11: `sphere(10)` == `sphere({ radius: 10 })`; 尾参 options({at, segments})\n // 经 dual-form-args 的尾参合并规则归一(裁决 4,§6.2)。\n slotMap: { keys: ['radius'] },\n paramDims: { radius: 'length' },\n naming: { kind: 'unmodeled', reason: 'sphere face vocabulary pending Phase 3' } as Provenance,\n})\n\n/**\n * 位置归一:把 brepjs 契约的 `at`(= faijs 的 `center`,球心语义)归一为一个\n * `center` 输入,mesh/brep 两条消费路径共用(裁决 1/4,§4.2)。\n */\nfunction centerParams(params: Record<string, unknown>): Record<string, unknown> {\n if (params.at !== undefined) return { ...params, center: params.at }\n return params\n}\n\n/**\n * 创建圆柱体(brepjs 契约,§4.3 A 决策)。\n * 锚点:`at` 是**底面轴心**(BASE 语义,默认 [0,0,0],底面在原点、+Z 延伸);`centered:true`\n * 指底面落到 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name cylinder\n * @returns Shape 圆柱体几何,可作为后续 op 的输入。\n * @param params.radius - 底面半径(mm)。type:number required:true\n * @param params.height - 高度(mm),沿 +Z 轴。type:number required:true\n * @param params.at - 底面中心(BASE 语义)。type:[x,y,z] 可选\n * @param params.centered - 是否居中(底面 −h/2;与 at 同给时以 at 为中心)。type:boolean 默认 false\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const c = cad.cylinder(5, 40)\n * const c = cad.cylinder(5, 40, { at: [0, 0, 20], segments: 64 })\n *\n * 位置原生(§4.1/§6.2):`cylinder(5, 40)` 与 `cylinder(5, 40, { at: [0, 0, 20] })`\n * 归一到同一对象(D11 位置→装箱 + 尾参 options 合并)。旧 `{ center }` 对象形态已废弃\n * (裁决 3),传入会抛 `E_ARGS_FORM`(错误提示 ≠ 兼容,§4.3)。\n */\nexport const cylinder = defineOp({\n name: 'cylinder',\n mesh: (params: Record<string, unknown>) => {\n assertCylinderParams(params)\n return meshPrimitives.cylinder(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertCylinderParams(params)\n return primitiveBrep('cylinder', params)\n },\n schema: { radius: 'number', height: 'number', at: 'vec3?', centered: 'boolean?', segments: 'number?' },\n // D11(§4.1/§6.2):`cylinder(5, 40)` 两个标量装箱成 { radius, height };尾参 options\n // 经 dual-form-args 尾参合并并入。\n slotMap: { keys: ['radius', 'height'] },\n paramDims: { radius: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'lateral' }] } } as Provenance,\n})\n\n/**\n * 创建圆锥体(brepjs 契约,§4.1 P 决策)。radiusTop 等于 radiusBottom 时即圆柱,0 为尖锥。\n * 锚点:`at` 是**底面轴心**(BASE 语义,默认 [0,0,0],底面在原点、+Z 延伸);`centered:true`\n * 指底面落到 −h/2(无 at 时居中到原点;与 `at` 同给时以 `at` 为中心)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name cone\n * @returns Shape 圆锥体几何,可作为后续 op 的输入。\n * @param params.radiusBottom - 底半径(mm)。type:number required:true\n * @param params.radiusTop - 顶半径(mm),0 为尖锥,非负,等于 radiusBottom 得圆柱。type:number required:true\n * @param params.height - 高度(mm),沿 +Z 轴。type:number required:true\n * @param params.at - 底面轴心(BASE 语义)。type:[x,y,z] 可选\n * @param params.centered - 是否居中(底面 −h/2;与 at 同给时以 at 为中心)。type:boolean 默认 false\n * @param params.segments - 细分度(影响三角化)。type:number 默认 64(= brepjs standard 等效,P0 §5.0/§5.1)\n * @example\n * const c = cad.cone(10, 4, 30)\n * const c = cad.cone(10, 0, 30, { at: [0, 0, 20], segments: 64 })\n * 位置原生(§4.1/§6.2):`cone(10, 4, 30)` 与 `cone(10, 4, 30, { at: [0, 0, 20] })`\n * 归一到同一对象(D11 位置→装箱 + 尾参 options 合并)。旧 `{ center }`/`{ size }` 对象形态\n * 已废弃(裁决 3),传入会抛 E_ARGS_FORM(错误提示 ≠ 兼容)。\n */\nexport const cone = defineOp({\n name: 'cone',\n mesh: (params: Record<string, unknown>) => {\n assertConeParams(params)\n return meshPrimitives.cone(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertConeParams(params)\n return primitiveBrep('cone', params)\n },\n schema: {\n radiusBottom: 'number',\n radiusTop: 'number',\n height: 'number',\n at: 'vec3?',\n centered: 'boolean?',\n segments: 'number?',\n },\n // D11(§4.1/§6.2): `cone(10, 4, 30)` 三个标量装箱成 { radiusBottom, radiusTop, height }。\n // 尾参 options({at, centered, segments})经 dual-form-args 尾参合并并入。\n slotMap: { keys: ['radiusBottom', 'radiusTop', 'height'] },\n paramDims: { radiusBottom: 'length', radiusTop: 'length', height: 'length' },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [{ kind: 'semantic', name: 'top' }, { kind: 'semantic', name: 'bottom' }, { kind: 'semantic', name: 'lateral' }] } } as Provenance,\n})\n\n/**\n * 创建楔形体。唯一契约是 width/height/angle/length(width/height/angle 为正数,length 沿切割方向),\n * 旧文档的 size 形态已废弃,传 { size } 会抛错。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name wedge\n * @note 曾与 UI 面板的 `size` 形态并存并写入文档,但断言层确认唯一合法契约是 width/height/angle/length;传 `{ size }` 直接抛错。已按真源收敛。\n * @returns Shape 楔形体几何,可作为后续 op 的输入。\n * @param params.width - 底面宽度(mm)。type:number required:true\n * @param params.height - 高度(mm)。type:number required:true\n * @param params.angle - 楔形角度(度)。type:number required:true\n * @param params.length - 沿切割方向的长度(mm)。type:number required:true\n * @example\n * const w = cad.wedge({ width: 30, height: 20, angle: 45, length: 10 })\n */\nexport const wedge = defineOp({\n name: 'wedge',\n mesh: (params: Record<string, unknown>) => {\n assertWedgeParams(params)\n return meshPrimitives.wedge(params as never)\n },\n brep: (params: Record<string, unknown>) => {\n assertWedgeParams(params)\n return primitiveBrep('wedge', params)\n },\n // D11: `wedge(30, 20, 45, 10)` == `wedge({ width: 30, height: 20, angle: 45, length: 10 })`.\n slotMap: { keys: ['width', 'height', 'angle', 'length'] },\n paramDims: { width: 'length', height: 'length', angle: 'angle', length: 'length' },\n naming: { kind: 'unmodeled', reason: 'wedge face vocabulary pending Phase 3' } as Provenance,\n})\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arg-spec.d.ts","sourceRoot":"","sources":["../../../src/api/surface/arg-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,kBAAkB;AAClB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAErF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAE/D,uDAAuD;AAEvD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,CAAA;IACpB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,8GAA8G;IAC9G,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,yFAAyF;IACzF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,8NAA8N;IAC9N,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,mCAAmC,EAAE,OAAO,CAAA;IAC7D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,OAAO,CAAC,CAAA;IACzD,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,OAAO,CAAA;IACtC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"arg-spec.d.ts","sourceRoot":"","sources":["../../../src/api/surface/arg-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,kBAAkB;AAClB,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAErF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAE/D,uDAAuD;AAEvD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,cAAc,CAAA;IACpB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,8GAA8G;IAC9G,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,yFAAyF;IACzF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B,8NAA8N;IAC9N,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAA;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,CAAA;IAEnB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,mCAAmC,EAAE,OAAO,CAAA;IAC7D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,OAAO,CAAC,CAAA;IACzD,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,aAAa,EAAE,OAAO,CAAA;IACtC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,YAAY,EAozHlC,CAAA"}
|
|
@@ -55,9 +55,11 @@ export const ARG_SPEC = [
|
|
|
55
55
|
name: 'fuse',
|
|
56
56
|
source: 'brep-operations/booleanFns.ts#fuseBrep',
|
|
57
57
|
kind: 'brep-op',
|
|
58
|
-
//
|
|
59
|
-
// kernel.isNull / kernel.dispose(occt
|
|
60
|
-
//
|
|
58
|
+
// 来源实现 fuseBrep 仅经 getBrepApi().fuse(L1 裸方法,引擎无关):brepkit 内核
|
|
59
|
+
// L1 有 fuse(brepkitKernel.ts)。曾以"依赖 kernel.isNull / kernel.dispose(occt
|
|
60
|
+
// 平台面)"为由声明 engines:['occt'](Phase 5 补漏),2026-10-17 实证当前
|
|
61
|
+
// fuseBrep 无此依赖 → 移除门禁。两引擎下均无面演化(裸 fuse;naming 仅作溯源
|
|
62
|
+
// 标注,同 intersect 的"几何正确、无面演化"处理)。
|
|
61
63
|
args: '(a: Shape3D, b: Shape3D, options?: BooleanOptions) -> Result<Shape3D>',
|
|
62
64
|
// 两个输入都是 faijs Shape → 原样直传给来源实现(引擎不改写入参);第三参 options 透传。
|
|
63
65
|
geometryArgs: [0, 1],
|
|
@@ -65,9 +67,6 @@ export const ARG_SPEC = [
|
|
|
65
67
|
params: ['a', 'b', 'options'],
|
|
66
68
|
formClass: 'A',
|
|
67
69
|
scriptFace: true,
|
|
68
|
-
// 依赖声明(诚实原则):来源实现 fuse 依赖 kernel.isNull / kernel.dispose(occt
|
|
69
|
-
// 平台面)→ 平台 op,声明 engines: ['occt'],在 brepkit / 其它引擎下执行前报错(D11-4)。
|
|
70
|
-
engines: ['occt'],
|
|
71
70
|
naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } },
|
|
72
71
|
},
|
|
73
72
|
{
|