@faicad/faijs 0.14.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/api-namespace.d.ts +7 -0
- package/dist/api/api-namespace.d.ts.map +1 -1
- package/dist/api/api-namespace.js +23 -22
- package/dist/api/api-namespace.js.map +1 -1
- package/dist/api/boolean.d.ts.map +1 -1
- package/dist/api/boolean.js +26 -8
- package/dist/api/boolean.js.map +1 -1
- package/dist/api/chamfer.d.ts.map +1 -1
- package/dist/api/chamfer.js +4 -1
- package/dist/api/chamfer.js.map +1 -1
- package/dist/api/generated/cad/script-face.d.ts +1 -1
- package/dist/api/generated/cad/script-face.d.ts.map +1 -1
- package/dist/api/generated/cad/script-face.js +1 -2
- package/dist/api/generated/cad/script-face.js.map +1 -1
- package/dist/api/generated/operations.js +16 -16
- package/dist/api/generated/operations.js.map +1 -1
- package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
- package/dist/api/generated/script-face-manifest.js +0 -1
- package/dist/api/generated/script-face-manifest.js.map +1 -1
- package/dist/api/generated/script-face.d.ts +1 -4
- package/dist/api/generated/script-face.d.ts.map +1 -1
- package/dist/api/generated/script-face.js +2 -3
- package/dist/api/generated/script-face.js.map +1 -1
- package/dist/api/generated/sketching.js +1 -1
- package/dist/api/generated/sketching.js.map +1 -1
- package/dist/api/generated/topology.d.ts +0 -8
- package/dist/api/generated/topology.d.ts.map +1 -1
- package/dist/api/generated/topology.js +19 -26
- package/dist/api/generated/topology.js.map +1 -1
- package/dist/api/index.d.ts +1 -10
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +10 -18
- package/dist/api/index.js.map +1 -1
- package/dist/api/internal/compat-projection.d.ts +3 -1
- package/dist/api/internal/compat-projection.d.ts.map +1 -1
- package/dist/api/internal/compat-projection.js +8 -5
- package/dist/api/internal/compat-projection.js.map +1 -1
- package/dist/api/internal/replica-role-table.d.ts +36 -0
- package/dist/api/internal/replica-role-table.d.ts.map +1 -0
- package/dist/api/internal/replica-role-table.js +73 -0
- package/dist/api/internal/replica-role-table.js.map +1 -0
- package/dist/api/internal/result-unwrap.d.ts +3 -1
- package/dist/api/internal/result-unwrap.d.ts.map +1 -1
- package/dist/api/internal/result-unwrap.js +2 -2
- package/dist/api/internal/result-unwrap.js.map +1 -1
- package/dist/api/occt-kernel-bridge.d.ts +105 -27
- package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
- package/dist/api/occt-kernel-bridge.js +255 -41
- package/dist/api/occt-kernel-bridge.js.map +1 -1
- package/dist/api/pattern.d.ts.map +1 -1
- package/dist/api/pattern.js +25 -61
- package/dist/api/pattern.js.map +1 -1
- package/dist/api/replicate.d.ts +145 -0
- package/dist/api/replicate.d.ts.map +1 -0
- package/dist/api/replicate.js +351 -0
- package/dist/api/replicate.js.map +1 -0
- package/dist/api/revolve.d.ts +36 -0
- package/dist/api/revolve.d.ts.map +1 -0
- package/dist/api/revolve.js +165 -0
- package/dist/api/revolve.js.map +1 -0
- package/dist/api/surface/arg-spec.d.ts +8 -0
- package/dist/api/surface/arg-spec.d.ts.map +1 -1
- package/dist/api/surface/arg-spec.js +37 -36
- package/dist/api/surface/arg-spec.js.map +1 -1
- package/dist/api/surface/projection-overrides.d.ts.map +1 -1
- package/dist/api/surface/projection-overrides.js +6 -0
- package/dist/api/surface/projection-overrides.js.map +1 -1
- package/dist/boolean/deriveNormals.d.ts +5 -4
- package/dist/boolean/deriveNormals.d.ts.map +1 -1
- package/dist/boolean/deriveNormals.js +24 -7
- package/dist/boolean/deriveNormals.js.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brep-mock.js +58 -0
- package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
- package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
- package/dist/brep/engine/adapters/brepkit.js +39 -1
- package/dist/brep/engine/adapters/brepkit.js.map +1 -1
- package/dist/brep/engine/adapters/occt.d.ts +1 -5
- package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
- package/dist/brep/engine/adapters/occt.js +232 -18
- package/dist/brep/engine/adapters/occt.js.map +1 -1
- package/dist/brep/engine/primitives.d.ts +79 -0
- package/dist/brep/engine/primitives.d.ts.map +1 -1
- package/dist/brep/engine/primitives.js.map +1 -1
- package/dist/brep/engine/types.d.ts +18 -1
- package/dist/brep/engine/types.d.ts.map +1 -1
- package/dist/brep/engine/types.js.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
- package/dist/brepkit-kernel/brepkitKernel.js +81 -11
- package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
- package/dist/browser.d.ts +6 -28
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +6 -17
- package/dist/browser.js.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.d.ts +13 -18
- package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
- package/dist/cad-runtime/admit-compat-lib.js +25 -18
- package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
- package/dist/cad-runtime/backend-dispatch.d.ts +4 -2
- package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
- package/dist/cad-runtime/backend-dispatch.js +2 -0
- package/dist/cad-runtime/backend-dispatch.js.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.d.ts +4 -6
- package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
- package/dist/cad-runtime/browser-lib-loader.js +4 -9
- package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
- package/dist/cad-runtime/ports.d.ts +0 -7
- package/dist/cad-runtime/ports.d.ts.map +1 -1
- package/dist/cad-runtime/ports.js.map +1 -1
- package/dist/cad-runtime/runtime.d.ts +1 -3
- package/dist/cad-runtime/runtime.d.ts.map +1 -1
- package/dist/cad-runtime/runtime.js +13 -18
- package/dist/cad-runtime/runtime.js.map +1 -1
- package/dist/env-agnostic.d.ts +38 -0
- package/dist/env-agnostic.d.ts.map +1 -0
- package/dist/env-agnostic.js +29 -0
- package/dist/env-agnostic.js.map +1 -0
- package/dist/fcstd/codegen.d.ts.map +1 -1
- package/dist/fcstd/codegen.js +8 -1
- package/dist/fcstd/codegen.js.map +1 -1
- package/dist/fcstd/expressions.d.ts +24 -0
- package/dist/fcstd/expressions.d.ts.map +1 -1
- package/dist/fcstd/expressions.js +91 -0
- package/dist/fcstd/expressions.js.map +1 -1
- package/dist/fcstd/feature-translate.d.ts.map +1 -1
- package/dist/fcstd/feature-translate.js +16 -2
- package/dist/fcstd/feature-translate.js.map +1 -1
- package/dist/fcstd/structural-types.d.ts.map +1 -1
- package/dist/fcstd/structural-types.js +5 -0
- package/dist/fcstd/structural-types.js.map +1 -1
- package/dist/index.d.ts +7 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -16
- package/dist/index.js.map +1 -1
- package/dist/lang/determinism-scanner.d.ts +9 -0
- package/dist/lang/determinism-scanner.d.ts.map +1 -1
- package/dist/lang/determinism-scanner.js +7 -1
- package/dist/lang/determinism-scanner.js.map +1 -1
- package/dist/lang/symbol-table.d.ts +31 -0
- package/dist/lang/symbol-table.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.d.ts +6 -16
- package/dist/lang/symbol-table.generated.d.ts.map +1 -1
- package/dist/lang/symbol-table.generated.js +6 -16
- package/dist/lang/symbol-table.generated.js.map +1 -1
- package/dist/lang/symbol-table.js +50 -1
- package/dist/lang/symbol-table.js.map +1 -1
- package/dist/mesh/creased-normals.d.ts +50 -0
- package/dist/mesh/creased-normals.d.ts.map +1 -0
- package/dist/mesh/creased-normals.js +114 -0
- package/dist/mesh/creased-normals.js.map +1 -0
- package/dist/mesh/decoration-provider.d.ts +53 -0
- package/dist/mesh/decoration-provider.d.ts.map +1 -0
- package/dist/mesh/decoration-provider.js +21 -0
- package/dist/mesh/decoration-provider.js.map +1 -0
- package/dist/mesh/engrave.d.ts +4 -0
- package/dist/mesh/engrave.d.ts.map +1 -1
- package/dist/mesh/engrave.js +22 -31
- package/dist/mesh/engrave.js.map +1 -1
- package/dist/mesh/index.d.ts +5 -14
- package/dist/mesh/index.d.ts.map +1 -1
- package/dist/mesh/index.js +7 -19
- package/dist/mesh/index.js.map +1 -1
- package/dist/mesh/io.d.ts +2 -1
- package/dist/mesh/io.d.ts.map +1 -1
- package/dist/mesh/io.js +5 -7
- package/dist/mesh/io.js.map +1 -1
- package/dist/mesh/primitives.d.ts +5 -18
- package/dist/mesh/primitives.d.ts.map +1 -1
- package/dist/mesh/primitives.js +4 -48
- package/dist/mesh/primitives.js.map +1 -1
- package/dist/mesh/stl-loader.d.ts +23 -0
- package/dist/mesh/stl-loader.d.ts.map +1 -0
- package/dist/mesh/stl-loader.js +139 -0
- package/dist/mesh/stl-loader.js.map +1 -0
- package/dist/module-resolver/parse-imports.d.ts +37 -0
- package/dist/module-resolver/parse-imports.d.ts.map +1 -0
- package/dist/module-resolver/parse-imports.js +39 -0
- package/dist/module-resolver/parse-imports.js.map +1 -0
- package/dist/module-resolver/resolver.d.ts +1 -1
- package/dist/module-resolver/resolver.js +2 -2
- package/dist/module-resolver/resolver.js.map +1 -1
- package/dist/node-host/cli.d.ts.map +1 -1
- package/dist/node-host/cli.js +1 -22
- package/dist/node-host/cli.js.map +1 -1
- package/dist/primitives/text/cjk-font.d.ts +42 -0
- package/dist/primitives/text/cjk-font.d.ts.map +1 -0
- package/dist/primitives/text/cjk-font.js +86 -0
- package/dist/primitives/text/cjk-font.js.map +1 -0
- package/dist/sdk.d.ts +2 -2
- package/dist/sdk.js +2 -2
- package/dist/sdk.js.map +1 -1
- package/dist/symbol-table.d.ts +15 -0
- package/dist/symbol-table.d.ts.map +1 -0
- package/dist/symbol-table.js +14 -0
- package/dist/symbol-table.js.map +1 -0
- package/dist/topology/naming/lineage-resolve.js +1 -1
- package/dist/topology/naming/lineage-resolve.js.map +1 -1
- package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
- package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
- package/dist/vendored/brepjs/kernel/index.js +11 -0
- package/dist/vendored/brepjs/kernel/index.js.map +1 -1
- package/dist/weapp.d.ts +3 -3
- package/dist/weapp.d.ts.map +1 -1
- package/dist/weapp.js +6 -3
- package/dist/weapp.js.map +1 -1
- package/package.json +16 -14
- package/dist/api/compat/index.d.ts +0 -173
- package/dist/api/compat/index.d.ts.map +0 -1
- package/dist/api/compat/index.js +0 -222
- package/dist/api/compat/index.js.map +0 -1
- package/dist/api/compound.d.ts +0 -110
- package/dist/api/compound.d.ts.map +0 -1
- package/dist/api/compound.js +0 -164
- package/dist/api/compound.js.map +0 -1
- package/dist/api/copy.d.ts +0 -40
- package/dist/api/copy.d.ts.map +0 -1
- package/dist/api/copy.js +0 -83
- package/dist/api/copy.js.map +0 -1
- package/dist/api/fai_drill.d.ts +0 -46
- package/dist/api/fai_drill.d.ts.map +0 -1
- package/dist/api/fai_drill.js +0 -243
- package/dist/api/fai_drill.js.map +0 -1
- package/dist/api/fai_extrude.d.ts +0 -36
- package/dist/api/fai_extrude.d.ts.map +0 -1
- package/dist/api/fai_extrude.js +0 -79
- package/dist/api/fai_extrude.js.map +0 -1
- package/dist/api/fai_split.d.ts +0 -46
- package/dist/api/fai_split.d.ts.map +0 -1
- package/dist/api/fai_split.js +0 -254
- package/dist/api/fai_split.js.map +0 -1
- package/dist/api/load.d.ts +0 -41
- package/dist/api/load.d.ts.map +0 -1
- package/dist/api/load.js +0 -84
- package/dist/api/load.js.map +0 -1
- package/dist/api/svgExtrude.d.ts +0 -32
- package/dist/api/svgExtrude.d.ts.map +0 -1
- package/dist/api/svgExtrude.js +0 -74
- package/dist/api/svgExtrude.js.map +0 -1
- package/dist/api/text.d.ts +0 -34
- package/dist/api/text.d.ts.map +0 -1
- package/dist/api/text.js +0 -101
- package/dist/api/text.js.map +0 -1
- package/dist/brep/text/fontTestHelper.d.ts +0 -30
- package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
- package/dist/brep/text/fontTestHelper.js +0 -57
- package/dist/brep/text/fontTestHelper.js.map +0 -1
- package/dist/cad-runtime/module-executor.d.ts +0 -271
- package/dist/cad-runtime/module-executor.d.ts.map +0 -1
- package/dist/cad-runtime/module-executor.js +0 -630
- package/dist/cad-runtime/module-executor.js.map +0 -1
- package/dist/cad-runtime/terminal-dag.d.ts +0 -65
- package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
- package/dist/cad-runtime/terminal-dag.js +0 -167
- package/dist/cad-runtime/terminal-dag.js.map +0 -1
- package/dist/faqts/browser.d.ts +0 -16
- package/dist/faqts/browser.d.ts.map +0 -1
- package/dist/faqts/browser.js +0 -13
- package/dist/faqts/browser.js.map +0 -1
- package/dist/faqts/exec-blob.d.ts +0 -14
- package/dist/faqts/exec-blob.d.ts.map +0 -1
- package/dist/faqts/exec-blob.js +0 -22
- package/dist/faqts/exec-blob.js.map +0 -1
- package/dist/faqts/exec-node.d.ts +0 -15
- package/dist/faqts/exec-node.d.ts.map +0 -1
- package/dist/faqts/exec-node.js +0 -29
- package/dist/faqts/exec-node.js.map +0 -1
- package/dist/faqts/imports.d.ts +0 -74
- package/dist/faqts/imports.d.ts.map +0 -1
- package/dist/faqts/imports.js +0 -95
- package/dist/faqts/imports.js.map +0 -1
- package/dist/faqts/index.d.ts +0 -22
- package/dist/faqts/index.d.ts.map +0 -1
- package/dist/faqts/index.js +0 -21
- package/dist/faqts/index.js.map +0 -1
- package/dist/faqts/node.d.ts +0 -23
- package/dist/faqts/node.d.ts.map +0 -1
- package/dist/faqts/node.js +0 -23
- package/dist/faqts/node.js.map +0 -1
- package/dist/faqts/run.d.ts +0 -62
- package/dist/faqts/run.d.ts.map +0 -1
- package/dist/faqts/run.js +0 -62
- package/dist/faqts/run.js.map +0 -1
- package/dist/faqts/transform.d.ts +0 -43
- package/dist/faqts/transform.d.ts.map +0 -1
- package/dist/faqts/transform.js +0 -35
- package/dist/faqts/transform.js.map +0 -1
- package/dist/lang/compile.d.ts +0 -50
- package/dist/lang/compile.d.ts.map +0 -1
- package/dist/lang/compile.js +0 -368
- package/dist/lang/compile.js.map +0 -1
- package/dist/lang/keep.d.ts +0 -109
- package/dist/lang/keep.d.ts.map +0 -1
- package/dist/lang/keep.js +0 -226
- package/dist/lang/keep.js.map +0 -1
- package/dist/lang/parser.d.ts +0 -91
- package/dist/lang/parser.d.ts.map +0 -1
- package/dist/lang/parser.js +0 -1594
- package/dist/lang/parser.js.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
- package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
- package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
- package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
- package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
- package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
- package/dist/mesh/drill-hole/drill-types.js +0 -7
- package/dist/mesh/drill-hole/drill-types.js.map +0 -1
- package/dist/mesh/fai_drill.d.ts +0 -21
- package/dist/mesh/fai_drill.d.ts.map +0 -1
- package/dist/mesh/fai_drill.js +0 -92
- package/dist/mesh/fai_drill.js.map +0 -1
- package/dist/mesh/fai_extrude.d.ts +0 -24
- package/dist/mesh/fai_extrude.d.ts.map +0 -1
- package/dist/mesh/fai_extrude.js +0 -42
- package/dist/mesh/fai_extrude.js.map +0 -1
- package/dist/mesh/fai_split.d.ts +0 -164
- package/dist/mesh/fai_split.d.ts.map +0 -1
- package/dist/mesh/fai_split.js +0 -269
- package/dist/mesh/fai_split.js.map +0 -1
- package/dist/primitives/svg-extrude.d.ts +0 -43
- package/dist/primitives/svg-extrude.d.ts.map +0 -1
- package/dist/primitives/svg-extrude.js +0 -78
- package/dist/primitives/svg-extrude.js.map +0 -1
- package/dist/primitives/text/cjk.d.ts +0 -61
- package/dist/primitives/text/cjk.d.ts.map +0 -1
- package/dist/primitives/text/cjk.js +0 -215
- package/dist/primitives/text/cjk.js.map +0 -1
- package/dist/primitives/text-geometry.d.ts +0 -47
- package/dist/primitives/text-geometry.d.ts.map +0 -1
- package/dist/primitives/text-geometry.js +0 -127
- package/dist/primitives/text-geometry.js.map +0 -1
- package/dist/test-helpers.d.ts +0 -31
- package/dist/test-helpers.d.ts.map +0 -1
- package/dist/test-helpers.js +0 -55
- package/dist/test-helpers.js.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
- package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
- package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
- package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
package/dist/api/compound.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* stdlib compound — group/assembly 库函数(compound Shape + AssemblyBehavior)
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* 从 src/ops/assemble.ts 迁出并改写为 stdlib 形态:
|
|
6
|
-
* - `group(params)` → compound Shape(kind='compound',children 为成员 Shape 引用)
|
|
7
|
-
* - `assembly(params)` → compound Shape + AssemblyBehavior(约束列表 + solve 方法)
|
|
8
|
-
* - 装配求解(P1 起)委派 api/assembly/(brepjs solverAdapter 内核):
|
|
9
|
-
* do_assemble/solve 触发求解 → 引擎应用
|
|
10
|
-
* (mesh 顶点烘焙 + BREP 刚体变换 + 下游传播)。
|
|
11
|
-
* P2-f5:旧装配算法与自有四元数实现已删除,求解全链路走 api/assembly。
|
|
12
|
-
*
|
|
13
|
-
* compound 自身无独立 mesh——几何由 children 承载,意义是结构(层级)。
|
|
14
|
-
* do_assemble 编译为 `await ctx.<asm>.do_assemble()`:调用 compound 的求解方法,
|
|
15
|
-
* 对约束定位的成员施加装配变换(mesh 顶点烘焙 + BREP 刚体变换 + 下游传播)。
|
|
16
|
-
*/
|
|
17
|
-
import { compound as makeCompound, ensureSlot } from '../shape.js';
|
|
18
|
-
import { keep, nameOf, setPendingAssemblyTransforms, setPendingAssemblyKinematics } from '../runtime-state.js';
|
|
19
|
-
import { solveAssemblyAndKinematics } from './assembly/solve.js';
|
|
20
|
-
import { validateConstraints } from './assembly/validate.js';
|
|
21
|
-
import { buildKinematicTree } from './assembly/joints.js';
|
|
22
|
-
// ── 求解器 ──
|
|
23
|
-
// P2-f5:旧装配算法与自有四元数实现已整体删除——旋转计算一律走
|
|
24
|
-
// brepjs utils/quaternion.ts,输出经 api/assembly/pose.ts fromBrepjsQuat 重排。
|
|
25
|
-
// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:
|
|
26
|
-
// 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。
|
|
27
|
-
export { applyTransform } from '../mesh/rigid-transform.js';
|
|
28
|
-
/**
|
|
29
|
-
* 纯求解(P6:求解 ≠ 传播):委派 api/assembly/solveAssembly(P1 起)。
|
|
30
|
-
* 不修改任何输入、不触碰引擎状态——引擎负责应用变换并让下游失效重算(F2)。
|
|
31
|
-
*
|
|
32
|
-
* 约束形态(方案 §5):
|
|
33
|
-
* - 遗留 face_mate:规范化为 mate 后降级为 brepjs concentric + 轴编码求解(§3.7.2);
|
|
34
|
-
* - 新形态 mate/align/coincident/concentric/distance/angle/parallel/perpendicular/fixed;
|
|
35
|
-
* - 面参数 `{ topoRef }` 执行期解析(BREP 现场/mesh 行快照),旧 `{ center, normal }`
|
|
36
|
-
* 快照直接使用(兼容已持久化的历史脚本);
|
|
37
|
-
* - 输出为 per-member 终态(L6 修复),锚定成员不输出变换。
|
|
38
|
-
*/
|
|
39
|
-
function solveTransforms(members, behavior) {
|
|
40
|
-
return solveAssemblyAndKinematics(members, behavior.memberNames, behavior.constraints, behavior.joints ?? [], behavior.drive, { solver: behavior.solver, name: behavior.name }).transforms;
|
|
41
|
-
}
|
|
42
|
-
// ── group / assembly 库函数 ──
|
|
43
|
-
/**
|
|
44
|
-
* 成员名推导:显式 memberNames 兼容旧手工构造 IR;否则经 keep() 反查
|
|
45
|
-
* (P3 起经 keep()/nameOfShapes 反查成员名——库不再访问执行上下文,F1)。
|
|
46
|
-
*/
|
|
47
|
-
function memberNamesOf(params, members) {
|
|
48
|
-
if (Array.isArray(params.memberNames) && params.memberNames.length > 0) {
|
|
49
|
-
return params.memberNames;
|
|
50
|
-
}
|
|
51
|
-
return members.map((m) => {
|
|
52
|
-
// 兼容字符串形态的 members(历史 IR 直传 partName):字符串本身就是名字
|
|
53
|
-
if (typeof m === 'string')
|
|
54
|
-
return m;
|
|
55
|
-
return String(nameOf(m) ?? '');
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* `cad.group({ name, members })` → compound Shape。
|
|
60
|
-
* members 是成员 Shape(编译产物 ctx.<var> 引用),成员名经 keep() 反查。
|
|
61
|
-
*
|
|
62
|
-
* 函数体 keep 声明(keep-syntax 设计 §2.5):group 保留其成员且可见(R6)。
|
|
63
|
-
*/
|
|
64
|
-
/**
|
|
65
|
-
* 分组:零约束,保持当前布局。结构语句,无几何输出,成员用变量名引用。
|
|
66
|
-
* @group 结构
|
|
67
|
-
* @inputs 1
|
|
68
|
-
* @async false
|
|
69
|
-
* @qual ok
|
|
70
|
-
* @name group
|
|
71
|
-
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(无几何输出,服务于编辑器画布与时间线),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。**平台侧需要几何复合体请用 `cad.compound`**(内核 `makeCompound`,持 OCCT 句柄,可变换/可导出)。
|
|
72
|
-
* @returns CompoundShape 复合几何(kind='compound',children 为成员 Shape 引用)。
|
|
73
|
-
* @param params.name - 组名。type:string
|
|
74
|
-
* @param params.members - 成员(编译产物 ctx.<var> 引用;结构语句里是裸变量引用,非字符串数组)。type:Shape[]
|
|
75
|
-
* @note members 在 .fai.js 里是裸变量引用(编译为 ctx.<var>),字符串数组形态的成员名经 keep() 反查兼容历史 IR。
|
|
76
|
-
* @example
|
|
77
|
-
* const part0 = cad.box(30, 20, 10, { centered: true })
|
|
78
|
-
* cad.group({ name: '底板组', members: [part0] })
|
|
79
|
-
*/
|
|
80
|
-
export function group(params) {
|
|
81
|
-
const members = params.members ?? [];
|
|
82
|
-
if (members.length > 0)
|
|
83
|
-
keep(...members);
|
|
84
|
-
const memberNames = memberNamesOf(params, members);
|
|
85
|
-
const c = makeCompound(members);
|
|
86
|
-
// 挂最小 behavior(memberNames 供 ExecutionResult.compounds 结构输出;group 无约束)
|
|
87
|
-
ensureSlot(c).behavior = {
|
|
88
|
-
memberNames,
|
|
89
|
-
constraints: [],
|
|
90
|
-
joints: [],
|
|
91
|
-
solve: () => [],
|
|
92
|
-
solveDetailed: () => ({ transforms: [], dof: 0, converged: true, unsupported: [] }),
|
|
93
|
-
};
|
|
94
|
-
return c;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* 装配:成员 + 约束。结构语句,无几何输出,成员用变量名引用、实体用 EntityRef / 拓扑引用。
|
|
98
|
-
* 求解内核复用 vendored brepjs solverAdapter.solveConstraints(链式拓扑调度 / DOF / converged /
|
|
99
|
-
* unsupported 诊断);输出为 per-member 终态变换(每成员一条,恒等位姿不输出)。
|
|
100
|
-
* @group 结构
|
|
101
|
-
* @inputs 1
|
|
102
|
-
* @async false
|
|
103
|
-
* @qual warn
|
|
104
|
-
* @name assembly
|
|
105
|
-
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(成员以编辑器结构语句形态声明,服务于画布与时间线),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。
|
|
106
|
-
* @returns CompoundShape + AssemblyBehavior(含 do_assemble / solve 方法)。
|
|
107
|
-
* @note 约束类型(a=参考、b=从动,移动 b 去贴合 a):`mate` 面对面贴合(法向反向+面中心重合,遗留 face_mate 的新名,求解降级为 concentric + 轴编码);`align` 同向对齐(法向同向+面中心重合);`coincident` 共面/共点/共线(保留面内 2 个平移 DOF);`concentric` 轴重合(孔轴配合,圆柱/圆锥面需 hint.axis,直边/圆边需 EdgeHint.axis);`distance` 定距(mm,带 value);`angle` 夹角(deg,带 value);`parallel`/`perpendicular` 平行/垂直(angle 0°/90° 语法糖);`fixed` 锚定部件(地基);`face_mate` 为遗留别名(规范化为 mate,新代码不再使用)。
|
|
108
|
-
* @note EntityRef 四种形态:`{ part, face: { topoRef } | { surfaceType?, center, normal } }`、`{ part, edge: { topoRef } | { axis: { origin, direction } } }`、`{ part, point: [x,y,z] }`、`{ part, faceIndex }`(1 起,仅调试简写)。
|
|
109
|
-
* @note 不收敛(实体类型不匹配/环/参考不可达)→ 抛错并带 unsupported 明细;成员名为空串 → 求解前抛错;mesh 快照缺 axis 的圆柱/圆锥面作轴实体 → E_TOPO_NOT_FOUND(绝不静默降级)。`mate`(中心重合)与 `coincident`(只共面)是两种不同语义,不互相映射。
|
|
110
|
-
* @note 早期文档/示例曾用 `fixedPartId`/`movingPartId`/`faceRowIndex`/`faceId`/`invalid`——这些键在代码中不存在。真实契约是 `fixedPartName`/`movingPartName` + `fixedFace`/`movingFace`(遗留 face_mate)。`faceId` 字段随 §6.2 移除,不再写入。
|
|
111
|
-
* @param params.name - 装配名。type:string
|
|
112
|
-
* @param params.members - 成员(裸变量引用)。type:Shape[]
|
|
113
|
-
* @param params.constraints - 约束数组(遗留 face_mate 形态或上述新形态 { type, a, b })。type:AssemblyConstraint[]
|
|
114
|
-
* @example
|
|
115
|
-
* let asm1 = cad.assembly({ name: '主轴组件', members: [part0, part1, part2], constraints: [ { type: 'fixed', part: 'part0' }, { type: 'mate', a: { part: 'part0', face: { topoRef: { kind: 'face', origin: 'part0', role: 'box:top', hint: { kind: 'face', surfaceType: 'plane' } } } }, b: { part: 'part1', face: { topoRef: { kind: 'face', origin: 'part1', role: 'box:bottom', hint: { kind: 'face', surfaceType: 'plane' } } } } }, { type: 'concentric', a: { part: 'part1', face: { topoRef: { kind: 'face', origin: 'part1', role: '', hint: { kind: 'face', surfaceType: 'cylinder' } } } }, b: { part: 'part2', face: { topoRef: { kind: 'face', origin: 'part2', role: 'cylinder:lateral', hint: { kind: 'face', surfaceType: 'cylinder' } } } } } ] })
|
|
116
|
-
* asm1.solve()
|
|
117
|
-
*/
|
|
118
|
-
export function assembly(params) {
|
|
119
|
-
const members = params.members ?? [];
|
|
120
|
-
const constraints = params.constraints ?? [];
|
|
121
|
-
const joints = params.joints ?? [];
|
|
122
|
-
const drive = params.drive;
|
|
123
|
-
// P2-f1:约束参数运行期校验(keep() 之前,fail-fast;规则见 api/assembly/validate.ts V1–V6)
|
|
124
|
-
const memberNames = memberNamesOf(params, members);
|
|
125
|
-
validateConstraints(constraints, memberNames);
|
|
126
|
-
// P3:运动副构造期 fail-fast——parent/child ∈ members、child 唯一驱动、多 DOF 类型
|
|
127
|
-
// 在 assembly() 构造时暴露(buildJoint/buildKinematicTree 复用同一份校验实现)
|
|
128
|
-
if (joints.length > 0)
|
|
129
|
-
buildKinematicTree(memberNames, joints);
|
|
130
|
-
if (members.length > 0)
|
|
131
|
-
keep(...members);
|
|
132
|
-
const c = makeCompound(members);
|
|
133
|
-
const behavior = {
|
|
134
|
-
name: params.name,
|
|
135
|
-
memberNames,
|
|
136
|
-
constraints,
|
|
137
|
-
joints,
|
|
138
|
-
drive,
|
|
139
|
-
memberColors: params.memberColors,
|
|
140
|
-
solver: params.solver,
|
|
141
|
-
solve: () => solveTransforms(members, behavior),
|
|
142
|
-
solveDetailed: () => solveAssemblyAndKinematics(members, behavior.memberNames, behavior.constraints, behavior.joints ?? [], behavior.drive, { solver: behavior.solver, name: behavior.name }),
|
|
143
|
-
};
|
|
144
|
-
ensureSlot(c).behavior = behavior;
|
|
145
|
-
// solve / do_assemble 完全同义(方案 §5.5 D2:solve 为新名,do_assemble 保留为别名)
|
|
146
|
-
const solveAndRegister = () => {
|
|
147
|
-
// P6:只求解并登记待应用变换;应用与下游失效由引擎做(F2:库不查询/修改 DAG)
|
|
148
|
-
// P3:约束 + 运动副在库侧一次合并(solveAssemblyAndKinematics),transforms 与
|
|
149
|
-
// kinematics 一起登记(禁止引擎侧两次求解/两次登记)
|
|
150
|
-
const result = behavior.solveDetailed();
|
|
151
|
-
if (result.transforms.length > 0)
|
|
152
|
-
setPendingAssemblyTransforms(c, result.transforms);
|
|
153
|
-
if (result.kinematics)
|
|
154
|
-
setPendingAssemblyKinematics(c, result.kinematics);
|
|
155
|
-
};
|
|
156
|
-
c.do_assemble = solveAndRegister;
|
|
157
|
-
c.solve = solveAndRegister;
|
|
158
|
-
c.add_constraint = () => {
|
|
159
|
-
// Phase 1 semantics: constraints are read from the assembly statement's args.constraints;
|
|
160
|
-
// add_constraint is intentionally a no-op (kept for ABI uniformity).
|
|
161
|
-
};
|
|
162
|
-
return c;
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=compound.js.map
|
package/dist/api/compound.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/api/compound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,UAAU,EAAsB,MAAM,UAAU,CAAA;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,4BAA4B,EAAE,4BAA4B,EAA0B,MAAM,kBAAkB,CAAA;AACnI,OAAO,EAAE,0BAA0B,EAA4B,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAkB,MAAM,mBAAmB,CAAA;AAkDtE,YAAY;AACZ,oCAAoC;AACpC,yEAAyE;AAEzE,yDAAyD;AACzD,uDAAuD;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAuBxD;;;;;;;;;;GAUG;AACH,SAAS,eAAe,CAAC,OAAgB,EAAE,QAA0B;IACnE,OAAO,0BAA0B,CAC/B,OAAO,EACP,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,MAAM,IAAI,EAAE,EACrB,QAAQ,CAAC,KAAK,EACd,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CACjD,CAAC,UAAU,CAAA;AACd,CAAC;AAED,6BAA6B;AAE7B;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAiC,EAAE,OAAgB;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,MAAM,CAAC,WAAuB,CAAA;IACvC,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,gDAAgD;QAChD,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAA;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH;;;;;;;;;;;;;;;IAeI;AACJ,MAAM,UAAU,KAAK,CAAC,MAAmB;IACvC,MAAM,OAAO,GAAI,MAAM,CAAC,OAA+B,IAAI,EAAE,CAAA;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClD,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAC/B,uEAAuE;IACvE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG;QACvB,WAAW;QACX,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;QACf,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;KACpF,CAAA;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;IAqBI;AACJ,MAAM,UAAU,QAAQ,CAAC,MAAsB;IAC7C,MAAM,OAAO,GAAI,MAAM,CAAC,OAA+B,IAAI,EAAE,CAAA;IAC7D,MAAM,WAAW,GAAI,MAAM,CAAC,WAAgD,IAAI,EAAE,CAAA;IAClF,MAAM,MAAM,GAAI,MAAM,CAAC,MAAkC,IAAI,EAAE,CAAA;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAsD,CAAA;IAE3E,0EAA0E;IAC1E,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClD,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAC7C,kEAAkE;IAClE,8DAA8D;IAC9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAE9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;IACxC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAqB;QACjC,IAAI,EAAE,MAAM,CAAC,IAA0B;QACvC,WAAW;QACX,WAAW;QACX,MAAM;QACN,KAAK;QACL,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,aAAa,EAAE,GAAG,EAAE,CAClB,0BAA0B,CACxB,OAAO,EACP,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,MAAM,IAAI,EAAE,EACrB,QAAQ,CAAC,KAAK,EACd,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CACjD;KACJ,CAAA;IACD,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACjC,mEAAmE;IACnE,MAAM,gBAAgB,GAAG,GAAS,EAAE;QAClC,6CAA6C;QAC7C,8DAA8D;QAC9D,kCAAkC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAA;QACvC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACpF,IAAI,MAAM,CAAC,UAAU;YAAE,4BAA4B,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC3E,CAAC,CACA;IAAC,CAAkD,CAAC,WAAW,GAAG,gBAAgB,CAClF;IAAC,CAA4C,CAAC,KAAK,GAAG,gBAAgB,CAGtE;IAAC,CAAqD,CAAC,cAAc,GAAG,GAAG,EAAE;QAC5E,0FAA0F;QAC1F,qEAAqE;IACvE,CAAC,CAAA;IACD,OAAO,CAAC,CAAA;AACV,CAAC","sourcesContent":["/**\n * stdlib compound — group/assembly 库函数(compound Shape + AssemblyBehavior)\n *\n *\n * 从 src/ops/assemble.ts 迁出并改写为 stdlib 形态:\n * - `group(params)` → compound Shape(kind='compound',children 为成员 Shape 引用)\n * - `assembly(params)` → compound Shape + AssemblyBehavior(约束列表 + solve 方法)\n * - 装配求解(P1 起)委派 api/assembly/(brepjs solverAdapter 内核):\n * do_assemble/solve 触发求解 → 引擎应用\n * (mesh 顶点烘焙 + BREP 刚体变换 + 下游传播)。\n * P2-f5:旧装配算法与自有四元数实现已删除,求解全链路走 api/assembly。\n *\n * compound 自身无独立 mesh——几何由 children 承载,意义是结构(层级)。\n * do_assemble 编译为 `await ctx.<asm>.do_assemble()`:调用 compound 的求解方法,\n * 对约束定位的成员施加装配变换(mesh 顶点烘焙 + BREP 刚体变换 + 下游传播)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { compound as makeCompound, ensureSlot, type CompoundShape } from '../shape'\nimport { keep, nameOf, setPendingAssemblyTransforms, setPendingAssemblyKinematics, type AssemblyTransform } from '../runtime-state'\nimport { solveAssemblyAndKinematics, type AssemblySolveResult } from './assembly/solve'\nimport { validateConstraints } from './assembly/validate'\nimport { buildKinematicTree, type JointSpec } from './assembly/joints'\nimport type { AssemblyConstraint } from './assembly/types'\nimport type { SolverStyle } from './assembly/solvers/types'\n\n// ── 参数类型(keep-syntax 设计 §2.5:成员保留由函数体 keep() 显式声明,不再靠类型标注) ──\n\n/** Parameters for the `group` stdlib function: an optional name and ordered members. */\nexport interface GroupParams {\n name?: string\n /** Compound members: read-only references, never mutated by group/assembly. */\n members?: Shape[]\n memberNames?: string[]\n}\n\n/** Parameters for the `assembly` stdlib function: group params plus assembly constraints. */\nexport interface AssemblyParams extends GroupParams {\n constraints?: AssemblyConstraint[]\n /** P3:运动副声明(可选;parent/child 必须是 members 里的名字)。 */\n joints?: JointSpec[]\n /** P3:驱动值覆盖(键 = child 成员名;值 = 主 DOF 数值或多 DOF 数组)。 */\n drive?: Record<string, number | number[]>\n /** cq-compat:成员颜色(sRGB 0..1),导出 STEP 时写入 XCAF。 */\n memberColors?: Record<string, [number, number, number]>\n /** P1:求解风格。'chain'(默认,vendored brepjs 解析链式)| 'global'(CadQuery 兼容全局最小二乘)。 */\n solver?: SolverStyle\n}\n\n// ── 约束类型(P1 起定义收口在 api/assembly/types,此处 re-export 保持既有导出面) ──\n\nexport type {\n AssemblyConstraint,\n FaceMateConstraint,\n FaceMateFace,\n EntityRef,\n FaceRef,\n EdgeRef,\n MateConstraint,\n AlignConstraint,\n CoincidentConstraint,\n ConcentricConstraint,\n DistanceConstraint,\n AngleConstraint,\n ParallelConstraint,\n PerpendicularConstraint,\n FixedConstraint,\n StructuralConstraint,\n AssemblyVec3,\n} from './assembly/types'\nexport type { AssemblySolveResult } from './assembly/solve'\n\n// ── 求解器 ──\n// P2-f5:旧装配算法与自有四元数实现已整体删除——旋转计算一律走\n// brepjs utils/quaternion.ts,输出经 api/assembly/pose.ts fromBrepjsQuat 重排。\n\n// 应用变换(mesh 顶点烘焙)下沉到引擎侧 src/mesh/rigid-transform.ts(E-b:\n// 引擎不得 import stdlib/compound;公共 API 经本 re-export 保持)。\nexport { applyTransform } from '../mesh/rigid-transform'\n\n// ── AssemblyBehavior ──\n\n/** Behavior attached to an assembly compound: its members, constraints, and solver. */\nexport interface AssemblyBehavior {\n name?: string\n memberNames: string[]\n constraints: AssemblyConstraint[]\n /** P3:运动副声明(无 joints 时为空数组)。 */\n joints?: JointSpec[]\n /** P3:驱动值覆盖(键 = child 成员名;缺省 undefined = 用 joint 存储值)。 */\n drive?: Record<string, number | number[]>\n /** cq-compat:成员颜色(sRGB 0..1)。 */\n memberColors?: Record<string, [number, number, number]>\n /** P1:求解风格。 */\n solver?: SolverStyle\n /** 只求解(P6):返回\"成员下标 → 变换\"列表。不改写入参、不传播;可重复调用(幂等)。 */\n solve(): AssemblyTransform[]\n /** 只求解并带诊断量(P1):transforms + dof/converged/unsupported(方案 P1⑤);P3 增 kinematics/warnings。 */\n solveDetailed(): AssemblySolveResult\n}\n\n/**\n * 纯求解(P6:求解 ≠ 传播):委派 api/assembly/solveAssembly(P1 起)。\n * 不修改任何输入、不触碰引擎状态——引擎负责应用变换并让下游失效重算(F2)。\n *\n * 约束形态(方案 §5):\n * - 遗留 face_mate:规范化为 mate 后降级为 brepjs concentric + 轴编码求解(§3.7.2);\n * - 新形态 mate/align/coincident/concentric/distance/angle/parallel/perpendicular/fixed;\n * - 面参数 `{ topoRef }` 执行期解析(BREP 现场/mesh 行快照),旧 `{ center, normal }`\n * 快照直接使用(兼容已持久化的历史脚本);\n * - 输出为 per-member 终态(L6 修复),锚定成员不输出变换。\n */\nfunction solveTransforms(members: Shape[], behavior: AssemblyBehavior): AssemblyTransform[] {\n return solveAssemblyAndKinematics(\n members,\n behavior.memberNames,\n behavior.constraints,\n behavior.joints ?? [],\n behavior.drive,\n { solver: behavior.solver, name: behavior.name },\n ).transforms\n}\n\n// ── group / assembly 库函数 ──\n\n/**\n * 成员名推导:显式 memberNames 兼容旧手工构造 IR;否则经 keep() 反查\n * (P3 起经 keep()/nameOfShapes 反查成员名——库不再访问执行上下文,F1)。\n */\nfunction memberNamesOf(params: { memberNames?: unknown }, members: Shape[]): string[] {\n if (Array.isArray(params.memberNames) && params.memberNames.length > 0) {\n return params.memberNames as string[]\n }\n return members.map((m) => {\n // 兼容字符串形态的 members(历史 IR 直传 partName):字符串本身就是名字\n if (typeof m === 'string') return m\n return String(nameOf(m) ?? '')\n })\n}\n\n/**\n * `cad.group({ name, members })` → compound Shape。\n * members 是成员 Shape(编译产物 ctx.<var> 引用),成员名经 keep() 反查。\n *\n * 函数体 keep 声明(keep-syntax 设计 §2.5):group 保留其成员且可见(R6)。\n */\n/**\n * 分组:零约束,保持当前布局。结构语句,无几何输出,成员用变量名引用。\n * @group 结构\n * @inputs 1\n * @async false\n * @qual ok\n * @name group\n * @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(无几何输出,服务于编辑器画布与时间线),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。**平台侧需要几何复合体请用 `cad.compound`**(内核 `makeCompound`,持 OCCT 句柄,可变换/可导出)。\n * @returns CompoundShape 复合几何(kind='compound',children 为成员 Shape 引用)。\n * @param params.name - 组名。type:string\n * @param params.members - 成员(编译产物 ctx.<var> 引用;结构语句里是裸变量引用,非字符串数组)。type:Shape[]\n * @note members 在 .fai.js 里是裸变量引用(编译为 ctx.<var>),字符串数组形态的成员名经 keep() 反查兼容历史 IR。\n * @example\n * const part0 = cad.box(30, 20, 10, { centered: true })\n * cad.group({ name: '底板组', members: [part0] })\n */\nexport function group(params: GroupParams): CompoundShape {\n const members = (params.members as Shape[] | undefined) ?? []\n if (members.length > 0) keep(...members)\n const memberNames = memberNamesOf(params, members)\n const c = makeCompound(members)\n // 挂最小 behavior(memberNames 供 ExecutionResult.compounds 结构输出;group 无约束)\n ensureSlot(c).behavior = {\n memberNames,\n constraints: [],\n joints: [],\n solve: () => [],\n solveDetailed: () => ({ transforms: [], dof: 0, converged: true, unsupported: [] }),\n }\n return c\n}\n\n/**\n * 装配:成员 + 约束。结构语句,无几何输出,成员用变量名引用、实体用 EntityRef / 拓扑引用。\n * 求解内核复用 vendored brepjs solverAdapter.solveConstraints(链式拓扑调度 / DOF / converged /\n * unsupported 诊断);输出为 per-member 终态变换(每成员一条,恒等位姿不输出)。\n * @group 结构\n * @inputs 1\n * @async false\n * @qual warn\n * @name assembly\n * @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(成员以编辑器结构语句形态声明,服务于画布与时间线),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。\n * @returns CompoundShape + AssemblyBehavior(含 do_assemble / solve 方法)。\n * @note 约束类型(a=参考、b=从动,移动 b 去贴合 a):`mate` 面对面贴合(法向反向+面中心重合,遗留 face_mate 的新名,求解降级为 concentric + 轴编码);`align` 同向对齐(法向同向+面中心重合);`coincident` 共面/共点/共线(保留面内 2 个平移 DOF);`concentric` 轴重合(孔轴配合,圆柱/圆锥面需 hint.axis,直边/圆边需 EdgeHint.axis);`distance` 定距(mm,带 value);`angle` 夹角(deg,带 value);`parallel`/`perpendicular` 平行/垂直(angle 0°/90° 语法糖);`fixed` 锚定部件(地基);`face_mate` 为遗留别名(规范化为 mate,新代码不再使用)。\n * @note EntityRef 四种形态:`{ part, face: { topoRef } | { surfaceType?, center, normal } }`、`{ part, edge: { topoRef } | { axis: { origin, direction } } }`、`{ part, point: [x,y,z] }`、`{ part, faceIndex }`(1 起,仅调试简写)。\n * @note 不收敛(实体类型不匹配/环/参考不可达)→ 抛错并带 unsupported 明细;成员名为空串 → 求解前抛错;mesh 快照缺 axis 的圆柱/圆锥面作轴实体 → E_TOPO_NOT_FOUND(绝不静默降级)。`mate`(中心重合)与 `coincident`(只共面)是两种不同语义,不互相映射。\n * @note 早期文档/示例曾用 `fixedPartId`/`movingPartId`/`faceRowIndex`/`faceId`/`invalid`——这些键在代码中不存在。真实契约是 `fixedPartName`/`movingPartName` + `fixedFace`/`movingFace`(遗留 face_mate)。`faceId` 字段随 §6.2 移除,不再写入。\n * @param params.name - 装配名。type:string\n * @param params.members - 成员(裸变量引用)。type:Shape[]\n * @param params.constraints - 约束数组(遗留 face_mate 形态或上述新形态 { type, a, b })。type:AssemblyConstraint[]\n * @example\n * let asm1 = cad.assembly({ name: '主轴组件', members: [part0, part1, part2], constraints: [ { type: 'fixed', part: 'part0' }, { type: 'mate', a: { part: 'part0', face: { topoRef: { kind: 'face', origin: 'part0', role: 'box:top', hint: { kind: 'face', surfaceType: 'plane' } } } }, b: { part: 'part1', face: { topoRef: { kind: 'face', origin: 'part1', role: 'box:bottom', hint: { kind: 'face', surfaceType: 'plane' } } } } }, { type: 'concentric', a: { part: 'part1', face: { topoRef: { kind: 'face', origin: 'part1', role: '', hint: { kind: 'face', surfaceType: 'cylinder' } } } }, b: { part: 'part2', face: { topoRef: { kind: 'face', origin: 'part2', role: 'cylinder:lateral', hint: { kind: 'face', surfaceType: 'cylinder' } } } } } ] })\n * asm1.solve()\n */\nexport function assembly(params: AssemblyParams): CompoundShape {\n const members = (params.members as Shape[] | undefined) ?? []\n const constraints = (params.constraints as AssemblyConstraint[] | undefined) ?? []\n const joints = (params.joints as JointSpec[] | undefined) ?? []\n const drive = params.drive as Record<string, number | number[]> | undefined\n\n // P2-f1:约束参数运行期校验(keep() 之前,fail-fast;规则见 api/assembly/validate.ts V1–V6)\n const memberNames = memberNamesOf(params, members)\n validateConstraints(constraints, memberNames)\n // P3:运动副构造期 fail-fast——parent/child ∈ members、child 唯一驱动、多 DOF 类型\n // 在 assembly() 构造时暴露(buildJoint/buildKinematicTree 复用同一份校验实现)\n if (joints.length > 0) buildKinematicTree(memberNames, joints)\n\n if (members.length > 0) keep(...members)\n const c = makeCompound(members)\n const behavior: AssemblyBehavior = {\n name: params.name as string | undefined,\n memberNames,\n constraints,\n joints,\n drive,\n memberColors: params.memberColors,\n solver: params.solver,\n solve: () => solveTransforms(members, behavior),\n solveDetailed: () =>\n solveAssemblyAndKinematics(\n members,\n behavior.memberNames,\n behavior.constraints,\n behavior.joints ?? [],\n behavior.drive,\n { solver: behavior.solver, name: behavior.name },\n ),\n }\n ensureSlot(c).behavior = behavior\n // solve / do_assemble 完全同义(方案 §5.5 D2:solve 为新名,do_assemble 保留为别名)\n const solveAndRegister = (): void => {\n // P6:只求解并登记待应用变换;应用与下游失效由引擎做(F2:库不查询/修改 DAG)\n // P3:约束 + 运动副在库侧一次合并(solveAssemblyAndKinematics),transforms 与\n // kinematics 一起登记(禁止引擎侧两次求解/两次登记)\n const result = behavior.solveDetailed()\n if (result.transforms.length > 0) setPendingAssemblyTransforms(c, result.transforms)\n if (result.kinematics) setPendingAssemblyKinematics(c, result.kinematics)\n }\n ;(c as CompoundShape & { do_assemble?: () => void }).do_assemble = solveAndRegister\n ;(c as CompoundShape & { solve?: () => void }).solve = solveAndRegister\n // 统一成员调用 ABI:add_constraint 是 no-op(现状语义:约束由 assembly 语句 args.constraints 读取,\n // 编译产物机械发射 `ctx.<asm>.add_constraint({...})`,调用此方法不崩)\n ;(c as CompoundShape & { add_constraint?: () => void }).add_constraint = () => {\n // Phase 1 semantics: constraints are read from the assembly statement's args.constraints;\n // add_constraint is intentionally a no-op (kept for ABI uniformity).\n }\n return c\n}\n"]}
|
package/dist/api/copy.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* stdlib copy — 深拷贝几何(方案 B:独立新对象,源不变)
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* copy 是"共享读取"(克隆出新对象,源不变),与 drill/transform 的"独占改写"本质不同:
|
|
6
|
-
* - **copy 不消费其源**(从消费方排除,与 group/assembly 同级)
|
|
7
|
-
* - copy 输出是独立新对象 → 归"新名"类(allocate-id.ts 不保名)
|
|
8
|
-
* - **源显示**(part0=box; part1=copy(part0) → 画布显示 box 和副本两份)
|
|
9
|
-
*
|
|
10
|
-
* 双链路:
|
|
11
|
-
* - mesh 路径:深拷贝 positions/indices 到新数组
|
|
12
|
-
* - BREP 路径:kernel.copy(inputSolid) → solidToShape → fromBrep 登记
|
|
13
|
-
*/
|
|
14
|
-
import type { Shape } from '../mesh/types.js';
|
|
15
|
-
/**
|
|
16
|
-
* `cad.copy(input)` → 深拷贝 Shape。
|
|
17
|
-
*
|
|
18
|
-
* 函数体 keep 声明(keep-syntax 设计 §2.5):copy 保留其源(可见)——
|
|
19
|
-
* keep(input) 使源变量保持终端(画布显示 box 和副本两份)。
|
|
20
|
-
*
|
|
21
|
-
* mesh 路径:positions/indices 复制到新数组(改副本不影响源)。
|
|
22
|
-
* BREP 路径:kernel.copy 产出独立 ShapeHandle。
|
|
23
|
-
*/
|
|
24
|
-
/**
|
|
25
|
-
* 深拷贝几何为独立新对象(源不变,源与副本都显示)。
|
|
26
|
-
* @group 特征
|
|
27
|
-
* @inputs 1
|
|
28
|
-
* @async false
|
|
29
|
-
* @qual ok
|
|
30
|
-
* @name copy
|
|
31
|
-
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(语义含编辑器画布显示——源与副本各显示一份),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。
|
|
32
|
-
* @param input - 源几何。type:Shape required:true
|
|
33
|
-
* @returns Shape 源几何的深拷贝。copy 不消费其源(画布显示 box 和副本两份),改副本不影响源。
|
|
34
|
-
* @example
|
|
35
|
-
* const part1 = cad.copy(part0)
|
|
36
|
-
*/
|
|
37
|
-
export declare const copy: ((input: Shape) => Promise<Shape>) & {
|
|
38
|
-
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
39
|
-
};
|
|
40
|
-
//# sourceMappingURL=copy.d.ts.map
|
package/dist/api/copy.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/api/copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAoC1C;;;;;;;;GAQG;AACH;;;;;;;;;;;;IAYI;AACJ,eAAO,MAAM,IAAI;;CAgBf,CAAA"}
|
package/dist/api/copy.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* stdlib copy — 深拷贝几何(方案 B:独立新对象,源不变)
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* copy 是"共享读取"(克隆出新对象,源不变),与 drill/transform 的"独占改写"本质不同:
|
|
6
|
-
* - **copy 不消费其源**(从消费方排除,与 group/assembly 同级)
|
|
7
|
-
* - copy 输出是独立新对象 → 归"新名"类(allocate-id.ts 不保名)
|
|
8
|
-
* - **源显示**(part0=box; part1=copy(part0) → 画布显示 box 和副本两份)
|
|
9
|
-
*
|
|
10
|
-
* 双链路:
|
|
11
|
-
* - mesh 路径:深拷贝 positions/indices 到新数组
|
|
12
|
-
* - BREP 路径:kernel.copy(inputSolid) → solidToShape → fromBrep 登记
|
|
13
|
-
*/
|
|
14
|
-
import { solidToShape } from '../brep/brep-ops.js';
|
|
15
|
-
import { identityEvolution, identityHashEvolution } from '../brep/face-evolution.js';
|
|
16
|
-
import { getBackends, keep } from '../runtime-state.js';
|
|
17
|
-
import { fromBrep, brepOf, inputRoleTable } from '../shape.js';
|
|
18
|
-
import { propagateAllOrigins } from '../topology/naming/roles.js';
|
|
19
|
-
import { defineOp } from '../sdk.js';
|
|
20
|
-
/** BREP 路径:kernel.copy 深拷贝实体 + 恒等面演化 + 恒等 roleTable 传播 + fromBrep 一次登记。 */
|
|
21
|
-
function copyBrep(input) {
|
|
22
|
-
const kernel = getBackends().kernel.brep;
|
|
23
|
-
if (!kernel)
|
|
24
|
-
throw new Error('[stdlib/copy] no OCCT kernel');
|
|
25
|
-
const inputSolid = brepOf(input);
|
|
26
|
-
if (!inputSolid)
|
|
27
|
-
throw new Error('[stdlib/copy] input is not BREP');
|
|
28
|
-
const copiedSolid = kernel.copy(inputSolid);
|
|
29
|
-
// §2.4/§3.3:copy 面 1:1 保留——hash 恒等传播 roleTable(所有 origin)
|
|
30
|
-
const inputTable = inputRoleTable(input);
|
|
31
|
-
let roleTable;
|
|
32
|
-
if (inputTable && inputTable.size > 0) {
|
|
33
|
-
roleTable = propagateAllOrigins(inputTable, identityHashEvolution(kernel, inputSolid, copiedSolid));
|
|
34
|
-
}
|
|
35
|
-
return fromBrep(solidToShape(kernel, copiedSolid), {
|
|
36
|
-
solid: copiedSolid,
|
|
37
|
-
// copy 不改变拓扑,面 ordinal 不变
|
|
38
|
-
faceEvolution: identityEvolution(kernel, copiedSolid),
|
|
39
|
-
roleTable,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* `cad.copy(input)` → 深拷贝 Shape。
|
|
44
|
-
*
|
|
45
|
-
* 函数体 keep 声明(keep-syntax 设计 §2.5):copy 保留其源(可见)——
|
|
46
|
-
* keep(input) 使源变量保持终端(画布显示 box 和副本两份)。
|
|
47
|
-
*
|
|
48
|
-
* mesh 路径:positions/indices 复制到新数组(改副本不影响源)。
|
|
49
|
-
* BREP 路径:kernel.copy 产出独立 ShapeHandle。
|
|
50
|
-
*/
|
|
51
|
-
/**
|
|
52
|
-
* 深拷贝几何为独立新对象(源不变,源与副本都显示)。
|
|
53
|
-
* @group 特征
|
|
54
|
-
* @inputs 1
|
|
55
|
-
* @async false
|
|
56
|
-
* @qual ok
|
|
57
|
-
* @name copy
|
|
58
|
-
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(语义含编辑器画布显示——源与副本各显示一份),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。
|
|
59
|
-
* @param input - 源几何。type:Shape required:true
|
|
60
|
-
* @returns Shape 源几何的深拷贝。copy 不消费其源(画布显示 box 和副本两份),改副本不影响源。
|
|
61
|
-
* @example
|
|
62
|
-
* const part1 = cad.copy(part0)
|
|
63
|
-
*/
|
|
64
|
-
export const copy = defineOp({
|
|
65
|
-
mesh: (input) => {
|
|
66
|
-
if (!input)
|
|
67
|
-
throw new Error('[stdlib/copy] no input geometry');
|
|
68
|
-
keep(input);
|
|
69
|
-
// mesh 路径:深拷贝到新 TypedArray(改副本不影响源)
|
|
70
|
-
return {
|
|
71
|
-
positions: new Float32Array(input.positions),
|
|
72
|
-
indices: new Uint32Array(input.indices),
|
|
73
|
-
};
|
|
74
|
-
},
|
|
75
|
-
brep: (input) => {
|
|
76
|
-
if (!input)
|
|
77
|
-
throw new Error('[stdlib/copy] no input geometry');
|
|
78
|
-
keep(input);
|
|
79
|
-
return copyBrep(input);
|
|
80
|
-
},
|
|
81
|
-
naming: { kind: 'identity' },
|
|
82
|
-
});
|
|
83
|
-
//# sourceMappingURL=copy.js.map
|
package/dist/api/copy.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/api/copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAIjC,2EAA2E;AAC3E,SAAS,QAAQ,CAAC,KAAY;IAC5B,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,IAA4B,CAAA;IAChE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAA2B,CAAA;IAC1D,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAEnE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAE3C,0DAA0D;IAC1D,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAA0B,CAAA;IACjE,IAAI,SAAgC,CAAA;IACpC,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,SAAS,GAAG,mBAAmB,CAAC,UAAU,EAAE,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;IACrG,CAAC;IAED,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;QACjD,KAAK,EAAE,WAAW;QAClB,0BAA0B;QAC1B,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC;QACrD,SAAS;KACV,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;;IAYI;AACJ,MAAM,CAAC,MAAM,IAAI,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,CAAA;QACX,oCAAoC;QACpC,OAAO;YACL,SAAS,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;YAC5C,OAAO,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;SACxC,CAAA;IACH,CAAC;IACD,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAC9D,IAAI,CAAC,KAAK,CAAC,CAAA;QACX,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAgB;CAC3C,CAAC,CAAA","sourcesContent":["/**\n * stdlib copy — 深拷贝几何(方案 B:独立新对象,源不变)\n *\n *\n * copy 是\"共享读取\"(克隆出新对象,源不变),与 drill/transform 的\"独占改写\"本质不同:\n * - **copy 不消费其源**(从消费方排除,与 group/assembly 同级)\n * - copy 输出是独立新对象 → 归\"新名\"类(allocate-id.ts 不保名)\n * - **源显示**(part0=box; part1=copy(part0) → 画布显示 box 和副本两份)\n *\n * 双链路:\n * - mesh 路径:深拷贝 positions/indices 到新数组\n * - BREP 路径:kernel.copy(inputSolid) → solidToShape → fromBrep 登记\n */\n\nimport type { Shape } from '../mesh/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { identityEvolution, identityHashEvolution } from '../brep/face-evolution'\nimport { getBackends, keep } from '../runtime-state'\nimport { fromBrep, brepOf, inputRoleTable } from '../shape'\nimport { propagateAllOrigins } from '../topology/naming/roles'\nimport type { RoleTable } from '../topology/naming/types'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { defineOp } from '../sdk'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\n\n/** BREP 路径:kernel.copy 深拷贝实体 + 恒等面演化 + 恒等 roleTable 传播 + fromBrep 一次登记。 */\nfunction copyBrep(input: Shape): Shape {\n const kernel = getBackends().kernel.brep as BrepEngineApi | null\n if (!kernel) throw new Error('[stdlib/copy] no OCCT kernel')\n const inputSolid = brepOf(input) as BrepHandle | undefined\n if (!inputSolid) throw new Error('[stdlib/copy] input is not BREP')\n\n const copiedSolid = kernel.copy(inputSolid)\n\n // §2.4/§3.3:copy 面 1:1 保留——hash 恒等传播 roleTable(所有 origin)\n const inputTable = inputRoleTable(input) as RoleTable | undefined\n let roleTable: RoleTable | undefined\n if (inputTable && inputTable.size > 0) {\n roleTable = propagateAllOrigins(inputTable, identityHashEvolution(kernel, inputSolid, copiedSolid))\n }\n\n return fromBrep(solidToShape(kernel, copiedSolid), {\n solid: copiedSolid,\n // copy 不改变拓扑,面 ordinal 不变\n faceEvolution: identityEvolution(kernel, copiedSolid),\n roleTable,\n })\n}\n\n/**\n * `cad.copy(input)` → 深拷贝 Shape。\n *\n * 函数体 keep 声明(keep-syntax 设计 §2.5):copy 保留其源(可见)——\n * keep(input) 使源变量保持终端(画布显示 box 和副本两份)。\n *\n * mesh 路径:positions/indices 复制到新数组(改副本不影响源)。\n * BREP 路径:kernel.copy 产出独立 ShapeHandle。\n */\n/**\n * 深拷贝几何为独立新对象(源不变,源与副本都显示)。\n * @group 特征\n * @inputs 1\n * @async false\n * @qual ok\n * @name copy\n * @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):该 op 为编辑器应用提供(语义含编辑器画布显示——源与副本各显示一份),不属 faijs 平台面,但**不是废弃项**——它服务真实负载。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。\n * @param input - 源几何。type:Shape required:true\n * @returns Shape 源几何的深拷贝。copy 不消费其源(画布显示 box 和副本两份),改副本不影响源。\n * @example\n * const part1 = cad.copy(part0)\n */\nexport const copy = defineOp({\n mesh: (input: Shape) => {\n if (!input) throw new Error('[stdlib/copy] no input geometry')\n keep(input)\n // mesh 路径:深拷贝到新 TypedArray(改副本不影响源)\n return {\n positions: new Float32Array(input.positions),\n indices: new Uint32Array(input.indices),\n }\n },\n brep: (input: Shape) => {\n if (!input) throw new Error('[stdlib/copy] no input geometry')\n keep(input)\n return copyBrep(input)\n },\n naming: { kind: 'identity' } as Provenance,\n})\n"]}
|
package/dist/api/fai_drill.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* stdlib drill — 钻孔库函数
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* dispatchPath 静态判定 brep/mesh。
|
|
6
|
-
* BREP 路径:OCCT cut(简单孔)或 threadBrep + cut(螺丝孔)。
|
|
7
|
-
*/
|
|
8
|
-
import type { Shape } from '../mesh/types.js';
|
|
9
|
-
/**
|
|
10
|
-
* Validate drill parameters: `diameter` must be a positive number, `position`
|
|
11
|
-
* (if provided) a vec3, and `depth` (if provided) a number (<= 0 means a through hole).
|
|
12
|
-
* @param params - the raw drill operation parameters.
|
|
13
|
-
*/
|
|
14
|
-
export declare function assertDrillParams(params: Record<string, unknown>): void;
|
|
15
|
-
/**
|
|
16
|
-
* 在几何体上钻孔(CSG 减除)。depth=0 为通孔,>0 为盲孔。
|
|
17
|
-
* @group 特征
|
|
18
|
-
* @inputs 1
|
|
19
|
-
* @async true
|
|
20
|
-
* @qual ok
|
|
21
|
-
* @name fai_drill
|
|
22
|
-
* @deprecated **`../3d_editor` 消费面**(原 `@deprecated` 措辞已于 2026-09-22 校正):`fai_` 前缀 op 为编辑器应用提供,不属 faijs 平台面,但**不是废弃项**——它服务真实负载(3d_editor 38 个文件在用)。**变更其 API 形态必须同步更新 `../3d_editor`**(见 `docs/plans/2026-09-22-topology-identity-development-plan.md` §2)。faijs 平台面不提供等价 op(需要时须按平台需求另行设计,不得直接搬用本 op)。
|
|
23
|
-
* @note 键名以本表为准:`type: 'through'|'blind'` 与 `direction` 为向量的旧素材是无效写法——孔型由 `depth`(0=通孔)推导,`direction` 是 'normal'|'x'|'y'|'z' 枚举。
|
|
24
|
-
* @returns Shape 钻孔后的几何。
|
|
25
|
-
* @param input - 目标几何。type:Shape required:true
|
|
26
|
-
* @param params.diameter - 孔径(mm)。type:number required:true
|
|
27
|
-
* @param params.depth - 孔深(mm);0 = 通孔,> 0 = 盲孔。type:number 默认 0
|
|
28
|
-
* @param params.holeType - 孔类型:simple 简单孔 / screw 螺丝孔。type:'simple' | 'screw' 默认 'simple'
|
|
29
|
-
* @param params.direction - 钻孔轴向(normal 表示沿面法向)。type:'normal' | 'x' | 'y' | 'z' 默认 'normal'
|
|
30
|
-
* @param params.position - 孔心位置。type:[x,y,z] 默认 原点
|
|
31
|
-
* @param params.face - 面引用(§6.2 新形态:`FaceTopoRef`,执行期按输入 Shape 解析派生法向;优先于 `faceNormal`)。type:FaceTopoRef
|
|
32
|
-
* @param params.faceNormal - 面法向(决定朝向;历史兜底,§6.2 起宿主不再写,改由 `face` 解析)。type:[x,y,z] 默认 [0,0,1]
|
|
33
|
-
* @param params.tolerance - 公差(mm)。type:number 默认 0.3
|
|
34
|
-
* @param params.screwSystem - 螺丝孔制式(holeType='screw' 时用)。type:'metric' | 'imperial' 默认 'metric'
|
|
35
|
-
* @param params.screwSpecIdx - 螺丝规格索引(holeType='screw' 时用;4 → M5)。type:number 默认 4
|
|
36
|
-
* @param params.screwThread - 螺丝螺纹类型。type:'coarse' | 'fine' | 'custom' 默认 'coarse'
|
|
37
|
-
* @param params.screwHead - 螺丝头型。type:'hex' | 'chc' | 'none' 默认 'none'
|
|
38
|
-
* @example
|
|
39
|
-
* const p = await cad.fai_drill(part0, { diameter: 5 })
|
|
40
|
-
* const p = await cad.fai_drill(part0, { diameter: 5, depth: 3 })
|
|
41
|
-
* const p = await cad.fai_drill(part0, { diameter: 5.2, depth: 8, holeType: 'screw', screwSystem: 'metric', screwSpecIdx: 4, screwThread: 'coarse', screwHead: 'none' })
|
|
42
|
-
*/
|
|
43
|
-
export declare const fai_drill: ((input: Shape, params: Record<string, unknown>) => Promise<Shape>) & {
|
|
44
|
-
__faijs__dualOp?: import("../define-op.js").DualOpMeta;
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=fai_drill.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fai_drill.d.ts","sourceRoot":"","sources":["../../src/api/fai_drill.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,eAAe,CAAA;AAwBhD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQvE;AAiMD;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BI;AACJ,eAAO,MAAM,SAAS;;CAYpB,CAAA"}
|