@faicad/fai-cq-warehouse 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/bearing.d.ts +81 -0
  2. package/dist/bearing.d.ts.map +1 -0
  3. package/dist/bearing.js +462 -0
  4. package/dist/bearing.js.map +1 -0
  5. package/dist/chain.d.ts +96 -0
  6. package/dist/chain.d.ts.map +1 -0
  7. package/dist/chain.js +322 -0
  8. package/dist/chain.js.map +1 -0
  9. package/dist/contract.d.ts +9 -0
  10. package/dist/contract.d.ts.map +1 -0
  11. package/dist/contract.js +10 -0
  12. package/dist/contract.js.map +1 -0
  13. package/dist/data/brad_tee_nut_parameters.json +29 -0
  14. package/dist/data/button_head_parameters.json +82 -0
  15. package/dist/data/button_head_with_collar_parameters.json +98 -0
  16. package/dist/data/chamfered_washer_parameters.json +262 -0
  17. package/dist/data/cheese_head_parameters.json +182 -0
  18. package/dist/data/cheese_head_washer_parameters.json +112 -0
  19. package/dist/data/clearance_hole_sizes.json +427 -0
  20. package/dist/data/countersunk_head_parameters.json +1752 -0
  21. package/dist/data/domed_cap_nut_parameters.json +62 -0
  22. package/dist/data/drill_sizes.json +320 -0
  23. package/dist/data/heatset_nut_parameters.json +354 -0
  24. package/dist/data/hex_head_parameters.json +408 -0
  25. package/dist/data/hex_head_with_flange_parameters.json +114 -0
  26. package/dist/data/hex_nut_parameters.json +250 -0
  27. package/dist/data/hex_nut_with_flange_parameters.json +92 -0
  28. package/dist/data/imperial_set_screw_parameters.json +150 -0
  29. package/dist/data/iso10664def.json +82 -0
  30. package/dist/data/metric_set_screw_parameters.json +50 -0
  31. package/dist/data/nominal_screw_lengths.json +106 -0
  32. package/dist/data/pan_head_parameters.json +322 -0
  33. package/dist/data/pan_head_with_collar_parameters.json +56 -0
  34. package/dist/data/plain_washer_parameters.json +464 -0
  35. package/dist/data/raised_cheese_head_parameters.json +82 -0
  36. package/dist/data/raised_countersunk_oval_head_parameters.json +314 -0
  37. package/dist/data/setscrew_parameters.json +110 -0
  38. package/dist/data/single_row_angular_contact_ball_bearing_parameters.json +209 -0
  39. package/dist/data/single_row_capped_deep_groove_ball_bearing_parameters.json +527 -0
  40. package/dist/data/single_row_cylindrical_roller_bearing_parameters.json +227 -0
  41. package/dist/data/single_row_deep_groove_ball_bearing_parameters.json +653 -0
  42. package/dist/data/single_row_tapered_roller_bearing_parameters.json +756 -0
  43. package/dist/data/socket_head_cap_parameters.json +856 -0
  44. package/dist/data/square_nut_parameters.json +26 -0
  45. package/dist/data/tap_hole_sizes.json +398 -0
  46. package/dist/data/tapered-fillet-drop.json +109 -0
  47. package/dist/data/unchamfered_hex_nut_parameters.json +42 -0
  48. package/dist/holes.d.ts +186 -0
  49. package/dist/holes.d.ts.map +1 -0
  50. package/dist/holes.js +197 -0
  51. package/dist/holes.js.map +1 -0
  52. package/dist/index.d.ts +27 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +36 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/kernel.d.ts +117 -0
  57. package/dist/kernel.d.ts.map +1 -0
  58. package/dist/kernel.js +25 -0
  59. package/dist/kernel.js.map +1 -0
  60. package/dist/measure.d.ts +52 -0
  61. package/dist/measure.d.ts.map +1 -0
  62. package/dist/measure.js +158 -0
  63. package/dist/measure.js.map +1 -0
  64. package/dist/nut.d.ts +315 -0
  65. package/dist/nut.d.ts.map +1 -0
  66. package/dist/nut.js +700 -0
  67. package/dist/nut.js.map +1 -0
  68. package/dist/params.d.ts +178 -0
  69. package/dist/params.d.ts.map +1 -0
  70. package/dist/params.js +330 -0
  71. package/dist/params.js.map +1 -0
  72. package/dist/primitives.d.ts +440 -0
  73. package/dist/primitives.d.ts.map +1 -0
  74. package/dist/primitives.js +597 -0
  75. package/dist/primitives.js.map +1 -0
  76. package/dist/recess.d.ts +129 -0
  77. package/dist/recess.d.ts.map +1 -0
  78. package/dist/recess.js +323 -0
  79. package/dist/recess.js.map +1 -0
  80. package/dist/screw.d.ts +101 -0
  81. package/dist/screw.d.ts.map +1 -0
  82. package/dist/screw.js +945 -0
  83. package/dist/screw.js.map +1 -0
  84. package/dist/sprocket.d.ts +135 -0
  85. package/dist/sprocket.d.ts.map +1 -0
  86. package/dist/sprocket.js +261 -0
  87. package/dist/sprocket.js.map +1 -0
  88. package/dist/test-setup.d.ts +11 -0
  89. package/dist/test-setup.d.ts.map +1 -0
  90. package/dist/test-setup.js +30 -0
  91. package/dist/test-setup.js.map +1 -0
  92. package/dist/thread.d.ts +189 -0
  93. package/dist/thread.d.ts.map +1 -0
  94. package/dist/thread.js +501 -0
  95. package/dist/thread.js.map +1 -0
  96. package/dist/washer.d.ts +126 -0
  97. package/dist/washer.d.ts.map +1 -0
  98. package/dist/washer.js +204 -0
  99. package/dist/washer.js.map +1 -0
  100. package/package.json +55 -0
@@ -0,0 +1,440 @@
1
+ /**
2
+ * primitives.ts — 本包私有 extensions 层(方案 §6 W2 交付物):
3
+ * ≈ 上游 extensions.py 里各类 fastener 真正用到的构造路径,收敛成
4
+ * 「kernel 原语 → 可复用几何操作」的一层。只依赖 kernel.ts 的 requireKernel(),
5
+ * 不感知具体 fastener 类。
6
+ *
7
+ * 实测行为备注(kernel-conformance.test.ts probe 结论):
8
+ * - revolve(wire) 内核直接闭合(与 cq「wire 旋转得旋转面」不同)——revolveProfile
9
+ * 直接吃 wire,不再先 makeFace。**订正(W4 实测)**:闭合出的拓扑是 **shell 非 solid**,
10
+ * 故 revolveProfile 内部补 `makeSolid`(详见其 JSDoc 与
11
+ * `scripts/kernel-nut-probe.ts` 段 7)。
12
+ * - loft(wires, isSolid, ruled) 可用——makeRuledSurface 缺失期的 §6 退化路径。
13
+ */
14
+ import type { BrepHandle, BrepVec3 } from '@faicad/faijs';
15
+ import { type TessellateOptionsLite, type WarehouseAxis } from './kernel.js';
16
+ /**
17
+ * cq `Wire.makeHelix` 等价:绕 +Z(axis 指定)的螺旋线。
18
+ * @param origin - 螺旋线起点。
19
+ * @param axis - 螺旋轴方向(一般为 `{x:0,y:0,z:1}`)。
20
+ * @param pitch - 螺距(mm)。
21
+ * @param height - 轴向高度(mm)。
22
+ * @param radius - 螺旋半径(mm)。
23
+ * @returns 螺旋 wire 句柄。
24
+ */
25
+ export declare function makeHelix(origin: BrepVec3, axis: BrepVec3, pitch: number, height: number, radius: number): BrepHandle;
26
+ /**
27
+ * 轮廓 wire 绕轴旋转(nut/screw/bearing 的主体构造)。
28
+ *
29
+ * ⚠️ **内核 `revolve` 返回的是 SHELL,不是 SOLID**(`scripts/kernel-nut-probe.ts` 段 7 实测:
30
+ * 闭合 4 点轮廓旋转后 `getSubShapes(shape,'solid').length === 0`、`'shell'` 为 1)。
31
+ * 上游 cq `Workplane.revolve()` 返回的是 Solid —— 本函数**必须补 `makeSolid`**,
32
+ * 否则:
33
+ * 1. 后续 `common` / `fuse` 拿 shell 当操作数会**静默给出错误实体**
34
+ * (实测 `common(nutShell, blank)` = 108.5043,而 `common(nutSolid, blank)` =
35
+ * 302.2977 = A 侧解析值 302.2977262431188,逐位一致);
36
+ * 2. 导出的 STEP 是 SHELL 而非 SOLID(A 侧 manifest `shapeType` 全是 `Solid`)。
37
+ *
38
+ * 定向经 {@link orientOutward} 兜底(`makeSolid` 的朝向不保证,与 {@link solidFromFaces}
39
+ * 同款处理)。
40
+ *
41
+ * ⚠️ 本内核对 wire 旋转不校验闭合性(probe 段 3h:未闭合 wire 也被静默接受)——
42
+ * 轮廓闭合由调用方保证;未闭合时 `makeSolid` 会抛错,这正是期望的响亮失败。
43
+ * @param profile - 含轴平面内的闭合轮廓 wire。
44
+ * @param axis - 旋转轴({@link WarehouseAxis})。
45
+ * @param angleRad - 旋转角(弧度)。
46
+ * @returns 旋转得到的**实体(solid)**句柄,朝向已翻正。
47
+ */
48
+ export declare function revolveProfile(profile: BrepHandle, axis: WarehouseAxis, angleRad: number): BrepHandle;
49
+ /**
50
+ * cq `loft(ruled=True)` 等价:截面 wire 列 → 直纹实体(§6 退化路径)。
51
+ * @param wires - 截面 wire 列(≥2 条)。
52
+ * @returns 直纹放样实体句柄。
53
+ */
54
+ export declare function loftRuled(wires: BrepHandle[]): BrepHandle;
55
+ /**
56
+ * 点列 → 逼近 B 样条曲线(thread 端部 fade 的参数曲线)。
57
+ * @param points - 采样点列。
58
+ * @param tolerance - 逼近残差容差(mm),默认 1e-6。
59
+ * @returns 曲线(edge/wire)句柄。
60
+ */
61
+ export declare function parametricCurve(points: BrepVec3[], tolerance?: number): BrepHandle;
62
+ /**
63
+ * 点阵(rows×cols,行优先展平)→ B 样条曲面 face。
64
+ * ⚠️ 内核实现是**逼近**而非插值,且有系统性外扩 —— 直纹带请改用 {@link ruledFace}。
65
+ * @param points - 行优先展平的点阵(长度须为 rows×cols)。
66
+ * @param rows - 行数。
67
+ * @param cols - 列数。
68
+ * @returns 曲面 face 句柄。
69
+ */
70
+ export declare function bsplineFace(points: BrepVec3[], rows: number, cols: number): BrepHandle;
71
+ /** faces → sew → shell → solid(thread 螺纹体的封壳步骤)。
72
+ *
73
+ * ⚠️ 两条实测结论(W3 probe;回归锁 `kernel-pitfalls.test.ts`,复现台
74
+ * `scripts/kernel-pitfalls-probe.ts`):
75
+ * 1. **makeSolid 的朝向不可保证**:sew 6 张平面 face 成单壳后 makeSolid 实测体积
76
+ * 为 **−8**(朝内)——朝向随面序变化,故本函数**必须**经 orientOutward 翻正。
77
+ * 2. **容差**:默认 1e-3 与上游 `make_shell` 对齐。旧注释曾声称「1e-6 下完全不缝合
78
+ * (shells=0)」——**已订正**:平面壳与螺纹实体面集实测在 1e-6..1e-2 均可缝成单壳,
79
+ * 该说法未复现,故不再作为选 1e-3 的理由(保留仅为对齐上游 + 给 B 样条端帽留余量)。
80
+ * @param faces - 构成闭合壳的面列。
81
+ * @param tolerance - sew 容差(mm),默认 1e-3(与上游 make_shell 对齐)。
82
+ * @returns 缝合后朝向已翻正的实体句柄。
83
+ */
84
+ export declare function solidFromFaces(faces: BrepHandle[], tolerance?: number): BrepHandle;
85
+ /**
86
+ * 体积为负(实体朝内)时反转朝向;零体积视为缝合失败,显式抛错。
87
+ * @param shape - 待检实体。
88
+ * @returns 朝向朝外的同一实体(体积为正时原样返回)。
89
+ */
90
+ export declare function orientOutward(shape: BrepHandle): BrepHandle;
91
+ /**
92
+ * 平面 face 加厚成体(knurl 纹等薄面构造)。
93
+ * @param face - 待加厚的面。
94
+ * @param thickness - 厚度(mm,正负决定内/外偏)。
95
+ * @param tolerance - 内核容差,默认 1e-6。
96
+ * @returns 加厚得到的实体句柄。
97
+ */
98
+ export declare function thickenFace(face: BrepHandle, thickness: number, tolerance?: number): BrepHandle;
99
+ /**
100
+ * 非平面 wire → face(HeatSetNut knurl;kernel 层原语,§3.4 备注)。
101
+ * @param wire - 构成边界的 wire。
102
+ * @returns 由该 wire 围成的面句柄。
103
+ */
104
+ export declare function faceFromWire(wire: BrepHandle): BrepHandle;
105
+ /**
106
+ * 直线边(薄封装,语义与内核一致)。
107
+ * @param a - 起点。
108
+ * @param b - 终点。
109
+ * @returns 直线边句柄。
110
+ */
111
+ export declare function lineEdge(a: BrepVec3, b: BrepVec3): BrepHandle;
112
+ /**
113
+ * 三点圆弧边(起点 / 弧上一点 / 终点)—— cq `sagittaArc` / `threePointArc` 的落点。
114
+ * @param a - 起点。
115
+ * @param mid - 弧上一点(决定弧的凸向与半径)。
116
+ * @param b - 终点。
117
+ * @returns 圆弧边句柄。
118
+ */
119
+ export declare function arcEdge(a: BrepVec3, mid: BrepVec3, b: BrepVec3): BrepHandle;
120
+ /**
121
+ * 边列 → wire(**不**做去重与自动闭合,交给调用方控制)。
122
+ *
123
+ * ⚠️ 内核 `makeWire` **不校验连通性**:边序接不上时静默丢弃(`kernel-pitfalls.test.ts`
124
+ * 陷阱 1 实测乱序 4 边 → 3 边),未闭合 wire 也被 `revolve` 静默接受(`kernel-nut-probe.ts`
125
+ * 段 3h)。故轮廓闭合必须由调用方保证(见 {@link polygonWire} / nut 的 `profileWire`)。
126
+ * @param edges - 首尾相接的边列。
127
+ * @returns 由这些边构成的 wire 句柄。
128
+ */
129
+ export declare function wireFromEdges(edges: BrepHandle[]): BrepHandle;
130
+ /**
131
+ * 折线闭合 wire(点列首尾自动闭合;若末点与首点重合则不复用该退化边)。
132
+ * @param points - 折线顶点列。
133
+ * @returns 闭合 wire 句柄。
134
+ */
135
+ export declare function polygonWire(points: BrepVec3[]): BrepHandle;
136
+ /**
137
+ * 去掉与首点重合的末点(闭合点列 → 唯一点列)。
138
+ * ⚠️ 不去重会生成一条**零长边**,`makeLineEdge` 直接抛 `construction failed`
139
+ * (W3 probe 实测;此处订正旧注释所说的 makeFace `No geometry` 报错点)。
140
+ * @param points - 顶点列(末点可与首点重合)。
141
+ * @returns 去掉退化末点后的点列(点数 <2 时原样返回)。
142
+ */
143
+ export declare function closeLoop(points: BrepVec3[]): BrepVec3[];
144
+ /**
145
+ * 4 点闭合多边形 face(螺纹端帽:apex0/apex1/root1/root0)。
146
+ * @param corners - 按环序给出的 4 个角点。
147
+ * @returns 四边形平面 face 句柄。
148
+ */
149
+ export declare function quadFace(corners: [BrepVec3, BrepVec3, BrepVec3, BrepVec3]): BrepHandle;
150
+ /** 直纹带曲线拟合容差(mm)。取 1e-6 —— 与内核 `approximatePoints` 的残差同量级
151
+ * (实测该容差下直纹面外扩残差 ≈ 9.8e-7,远小于 1e-3 线性门禁)。 */
152
+ export declare const RULED_FIT_TOLERANCE = 0.000001;
153
+ /**
154
+ * 两条**同参数采样**曲线之间的直纹带 face —— cq `Face.makeRuledSurface` 的等价。
155
+ *
156
+ * ⚠️ 为什么**不用** `bsplineSurface([...rowA, ...rowB], 2, cols)`(W3 probe 实测否决):
157
+ * 内核的 `bsplineSurface` 是**逼近**而非插值,且带**系统性外扩**。实测两行采样点全部
158
+ * 落在 r=3.000000000 时,出来的面 xmax=3.000369534(Δ=3.70e-4),且**与采样密度无关**
159
+ * ——每圈 48→192 点、rows 2→9 全部收敛到 3.699e-4。对 Ø6 螺纹即 0.37‰ 半径超差,
160
+ * 直接撞穿 1e-3 的 bbox 门禁(W3 中间验证实测 3 例 FAIL)。
161
+ *
162
+ * 现行路径:`approximatePoints(row, tol)` → `loft([wireA, wireB], isSolid=false, ruled=true)`。
163
+ * 同一组点实测 xmax=3.000000982 → Δ=9.8e-7,比上面**小 375 倍**。
164
+ *
165
+ * 证据与判定见 docs/analysis/2026-09-14-cq-warehouse-thread-probe.md。
166
+ * @param rowA - 第一条边界的同参数采样点列。
167
+ * @param rowB - 第二条边界的采样点列(长度须与 rowA 相同)。
168
+ * @param tolerance - 曲线逼近容差(mm),默认 {@link RULED_FIT_TOLERANCE}。
169
+ * @returns 两行之间的单个直纹面 face 句柄。
170
+ */
171
+ export declare function ruledFace(rowA: BrepVec3[], rowB: BrepVec3[], tolerance?: number): BrepHandle;
172
+ /**
173
+ * XY 平面圆 wire(两段半圆弧)。
174
+ * @param radius - 半径(mm)。
175
+ * @param center - 圆心(默认原点)。
176
+ * @returns 位于 z=center.z 的整圆 wire 句柄。
177
+ */
178
+ export declare function circleWireXY(radius: number, center?: BrepVec3): BrepHandle;
179
+ /**
180
+ * 含轴平面(XZ,圆心在 (centerR,0,z))圆 wire——revolve 轮廓专用。
181
+ * @param radius - 半径(mm)。
182
+ * @param centerR - 圆心到旋转轴(Z 轴)的距离(mm)。
183
+ * @param z - 圆心高度(mm),默认 0。
184
+ * @returns XZ 平面内的整圆 wire 句柄。
185
+ */
186
+ export declare function circleWireXZ(radius: number, centerR: number, z?: number): BrepHandle;
187
+ /**
188
+ * 平移(薄封装,语义与内核一致:毫米)。
189
+ * @param shape - 待平移的体/面/边。
190
+ * @param dx - X 方向位移(mm)。
191
+ * @param dy - Y 方向位移(mm)。
192
+ * @param dz - Z 方向位移(mm)。
193
+ * @returns 平移后的新句柄(不改动入参)。
194
+ */
195
+ export declare function translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle;
196
+ /**
197
+ * 原点起的长方体(`makeBox(dx,dy,dz)`:0→(dx,dy,dz))。
198
+ * @param dx - X 边长(mm)。
199
+ * @param dy - Y 边长(mm)。
200
+ * @param dz - Z 边长(mm)。
201
+ * @returns 长方体实体句柄。
202
+ */
203
+ export declare function makeBoxOrigin(dx: number, dy: number, dz: number): BrepHandle;
204
+ /**
205
+ * 布尔差 `a − b`。
206
+ * @param a - 被减体。
207
+ * @param b - 减去体。
208
+ * @returns 差集实体句柄。
209
+ */
210
+ export declare function cut(a: BrepHandle, b: BrepHandle): BrepHandle;
211
+ /**
212
+ * 布尔交 `a ∩ b`。
213
+ * @param a - 第一个体。
214
+ * @param b - 第二个体。
215
+ * @returns 交集实体句柄。
216
+ */
217
+ export declare function intersect(a: BrepHandle, b: BrepHandle): BrepHandle;
218
+ /**
219
+ * 布尔并 `a ∪ b`。
220
+ * @param a - 第一个体。
221
+ * @param b - 第二个体。
222
+ * @returns 并集实体句柄。
223
+ */
224
+ export declare function fuse(a: BrepHandle, b: BrepHandle): BrepHandle;
225
+ /**
226
+ * 闭合平面 wire → 填充 face(`nut_plan` 拉伸前的必要一步)。
227
+ *
228
+ * ⚠️ 必须传 **face** 给 {@link extrudeFace}:probe 实测(`scripts/kernel-nut-probe.ts`
229
+ * 段 1)`extrude(wire, 0,0,3)` 对 4×2 矩形返回体积 **−16**(错误),传 face 才得 24
230
+ * (正确)。内核不校验输入拓扑,传错不抛错、只给错几何。
231
+ * @param wire - 位于 XY 平面(或法向为 +Z)的闭合平面 wire。
232
+ * @returns 填充后的平面 face 句柄。
233
+ */
234
+ export declare function planarFace(wire: BrepHandle): BrepHandle;
235
+ /**
236
+ * 平面 face 沿 **+Z** 拉伸高度 `dz`(`cq .toPending().extrude(h)`)。
237
+ *
238
+ * ⚠️ 只支持沿面法向拉伸:probe 段 1 实测 `extrude(face, 1,0,0)`(XY 面沿面内 X 拉)与
239
+ * `extrude(XZ wire, 0,0,3)`(面内 Z 拉)都退化为体积 0。nut_plan 在 XY 平面 + 沿 Z
240
+ * 拉伸,正好落在有效路径上。
241
+ * @param face - 位于 XY 平面(或法向为 +Z)的填充面。
242
+ * @param dz - 拉伸高度(mm,可为负)。
243
+ * @returns 拉伸实体句柄。
244
+ */
245
+ export declare function extrudeFace(face: BrepHandle, dz: number): BrepHandle;
246
+ /**
247
+ * 圆柱(底面在 z=0,轴向 +Z)—— probe 段 5 实测 `makeCylinder(3,10)` 的 bbox z = 0→10、
248
+ * 体积 = π·9·10。
249
+ * @param radius - 半径(mm)。
250
+ * @param height - 高度(mm)。
251
+ * @returns 圆柱实体句柄。
252
+ */
253
+ export declare function cylinder(radius: number, height: number): BrepHandle;
254
+ /**
255
+ * 指定 z 区间内的圆柱(钻孔用;`zTo < zFrom` 时自动反向建体)。
256
+ * @param radius - 半径(mm)。
257
+ * @param zFrom - 起始高度(mm)。
258
+ * @param zTo - 结束高度(mm)。
259
+ * @returns 该 z 区间的圆柱实体句柄。
260
+ */
261
+ export declare function cylinderBetween(radius: number, zFrom: number, zTo: number): BrepHandle;
262
+ /**
263
+ * 圆锥/圆台(底面半径 `r1` 于 z=0,顶面半径 `r2` 于 z=height,轴 +Z)。
264
+ * @param r1 - 底面半径(mm)。
265
+ * @param r2 - 顶面半径(mm),取 0 得尖锥。
266
+ * @param height - 高度(mm)。
267
+ * @returns 圆台实体句柄。
268
+ */
269
+ export declare function cone(r1: number, r2: number, height: number): BrepHandle;
270
+ /**
271
+ * 包围盒对角线长度 —— cq `Workplane.largestDimension()` 的等价物。
272
+ *
273
+ * ⚠️ cq 的实现是 `shape.BoundingBox().DiagonalLength`(cadquery `cq.py`),即**盒子对角线**
274
+ * 而非「最大边长」。BradTeeNut 的钻孔深度取此值(fastener 的 `_fastenerHole` 在
275
+ * `depth=None` 时用 `self.largestDimension()`),实测 nut 侧 = √(36.3²+36.3²+16.5²)
276
+ * = 53.922444(`scripts/probe-bradtee-decomposition.py`)。
277
+ * @param shape - 待测体。
278
+ * @returns 包围盒对角线长度(mm)。
279
+ */
280
+ export declare function bboxDiagonal(shape: BrepHandle): number;
281
+ /** A 侧 `Shape.tessellate(tolerance, angularTolerance)` 的同一组参数
282
+ * (cadquery `tessellate` 默认 angularTolerance=0.1;`gen-reference.py` 传 tolerance=0.002)。 */
283
+ export declare const MESH_LINEAR_DEFLECTION = 0.002;
284
+ /** 同一组参数里的角度容差(弧度),cadquery `tessellate` 默认 0.1。 */
285
+ export declare const MESH_ANGULAR_DEFLECTION = 0.1;
286
+ /**
287
+ * 三角化体积(有符号四面体求和)—— A 侧 manifest 里 `volume_mesh` 的等价量。
288
+ *
289
+ * ⚠️ 为什么体积必须另立 mesh 基准(W3 仲裁实测,2026-09-14):
290
+ * 内核 `getVolume`(= BRepGProp 精确曲面积分)对**螺旋 B 样条面**出现**求积混叠**。
291
+ * A 侧 Thread raw/raw 实测:GProps=49.961532 / 三角化=43.680000(差 14%),且
292
+ * ① 随长度**非单调**(L=10→34.97、11→49.96、12→39.18);
293
+ * ② 布尔分割**不可加**(两半 31.28 + 34.00 ≠ 49.96);
294
+ * ③ 三角化在 deflection 0.05→0.0005 收敛到 43.688,且与 Pappus 解析(43.694)一致。
295
+ * 故 GProps 是离群值,**以 mesh 为准**;`volumeOf`(GProps)仅作参考量。
296
+ *
297
+ * ⚠️ 调用顺序:`tessellate` 会**原地**给 shape 建三角化,之后任何按
298
+ * `useTriangulation=true` 取包围盒的操作都会被污染(A 侧 manifest 曾因此偏大
299
+ * 0.0126 mm)。**先量 bbox/质心,再调本函数。**
300
+ * @param shape - 待测实体。
301
+ * @param options - 覆盖默认线性/角度容差(一般不需要)。
302
+ * @returns 三角化后的有符号体积(mm³);朝内实体为负。
303
+ */
304
+ export declare function meshVolume(shape: BrepHandle, options?: TessellateOptionsLite): number;
305
+ /**
306
+ * GProps 精确曲面积分体积 —— ⚠️ 对螺旋 B 样条面会求积混叠(见 {@link meshVolume}),
307
+ * 仅作参考量;判等价请用 `meshVolume`。
308
+ * @param shape - 待测实体。
309
+ * @returns 内核 `getVolume` 的原始值(mm³)。
310
+ */
311
+ export declare function volumeOf(shape: BrepHandle): number;
312
+ /**
313
+ * 表面积(GProps)。
314
+ * @param shape - 待测体/面。
315
+ * @returns 表面积(mm²)。
316
+ */
317
+ export declare function areaOf(shape: BrepHandle): number;
318
+ /**
319
+ * 精确包围盒(内核 `useTriangulation=false`)。
320
+ * ⚠️ 仍须先取本值再调 {@link meshVolume},避免三角化污染。
321
+ * @param shape - 待测体/面。
322
+ * @returns `{xmin,ymin,zmin,xmax,ymax,zmax}`(mm)。
323
+ */
324
+ export declare function bboxOf(shape: BrepHandle): {
325
+ xmin: number;
326
+ ymin: number;
327
+ zmin: number;
328
+ xmax: number;
329
+ ymax: number;
330
+ zmax: number;
331
+ };
332
+ /**
333
+ * 绕任意轴旋转(内核 `rotate`,弧度、右手)。
334
+ * 实测:box 绕 Z 转 π/2 精确落位;edge 同样可旋转(hexalobular 六分之一轮廓
335
+ * 的 polarArray 合成,上游 `edge.rotate` 等价)。
336
+ * @param shape - 任意 shape/edge/vertex。
337
+ * @param axis - 旋转轴(点 + 方向)。
338
+ * @param angleRad - 弧度。
339
+ * @returns 旋转后的新 handle。
340
+ */
341
+ export declare function rotateAbout(shape: BrepHandle, axis: WarehouseAxis, angleRad: number): BrepHandle;
342
+ /**
343
+ * 关于平面镜像(内核 `mirror`,点 + 法向)。
344
+ * 锥度沉孔切割器 = draftPrism 向上收锥后关于 XY 面镜像翻转(上游
345
+ * `extrude(-depth, taper)` 的语义等价替换,探针 §W5-probe11/12)。
346
+ * @param shape - 待镜像 shape。
347
+ * @param point - 镜像平面上一点。
348
+ * @param normal - 镜像平面法向。
349
+ * @returns 镜像后的新 handle。
350
+ */
351
+ export declare function mirrorAbout(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle;
352
+ /**
353
+ * 顶点坐标(内核 `vertexPosition`)。
354
+ * @param vertex - 顶点 handle。
355
+ * @returns 世界坐标。
356
+ */
357
+ export declare function vertexAt(vertex: BrepHandle): BrepVec3;
358
+ /**
359
+ * 带拔模角的棱柱拉伸(内核 `draftPrism`,角度**度**)。
360
+ * ⚠️ 截面随锥度收缩到自交时内核直接抛错(A 侧 LocOpe_DPrism 容忍退化)——
361
+ * taper=30° 的 cross/R 沉孔因此是 W5 显式缺口(见 recess.ts 文件头)。
362
+ * @param face - 拉伸截面(平面 face)。
363
+ * @param dz - 拉伸高度(mm,正负皆可)。
364
+ * @param angleDeg - 拔模角(度,0 = 直棱柱)。
365
+ * @returns 拉伸实体。
366
+ */
367
+ export declare function draftPrismFace(face: BrepHandle, dz: number, angleDeg: number): BrepHandle;
368
+ /**
369
+ * 点列 → 插值 B 样条边(内核 `interpolatePoints`,cq `Workplane.spline` 等价:
370
+ * 过点插值,非逼近)。
371
+ * @param points - 插值点列(世界坐标)。
372
+ * @returns B 样条 edge handle。
373
+ */
374
+ export declare function interpolateEdge(points: BrepVec3[]): BrepHandle;
375
+ /**
376
+ * 点列 + 端点切向 → 插值三次 B 样条(`GeomAPI_Interpolate.Load(t0, t1, scale=True)`)。
377
+ * A 侧实证(probe73 vs probe72):PanHead M6/M4/M2.5 三规格极点逐位一致——
378
+ * cq `Workplane.spline(tangents=…)` 对两点输入正是这条路径。
379
+ * @param points - 两个插值点(起点、终点,世界坐标)。
380
+ * @param startTangent - 起点切向(内核按 scale=True 处理,无需归一化)。
381
+ * @param endTangent - 终点切向。
382
+ * @returns B 样条 edge handle。
383
+ */
384
+ export declare function interpolateEdgeWithTangents(points: [BrepVec3, BrepVec3], startTangent: BrepVec3, endTangent: BrepVec3): BrepHandle;
385
+ /**
386
+ * cq `radiusArc` 的三点弧中点(`cq.py sagittaArc` 公式逐字复刻)。
387
+ * 约定(上游 docstring):闭合轮廓顺时针绘制;radius>0 = 凸弧,<0 = 凹弧。
388
+ * @param p0 - 弧起点(2D)。
389
+ * @param p1 - 弧终点(2D)。
390
+ * @param radius - 半径(带符号,同 cq 约定)。
391
+ * @returns 弧上中点(2D)——喂给内核 `makeArcEdge(start, mid, end)`。
392
+ * @throws 当半径小于半弦长(弧够不着终点,同上游 ValueError)。
393
+ */
394
+ export declare function radiusArcMidpoint(p0: {
395
+ x: number;
396
+ y: number;
397
+ }, p1: {
398
+ x: number;
399
+ y: number;
400
+ }, radius: number): {
401
+ x: number;
402
+ y: number;
403
+ };
404
+ /**
405
+ * 两直线夹角处的圆角化(`Wire.fillet2D` 的线-线角几何复刻,§6 第 ② 类)。
406
+ * 给定顶点 B 及其前后点 A、C,计算半径 r 的相切圆角:
407
+ * 切点距 B 沿两边各 t = r/tan(θ/2),圆心在角平分线上距 B 为 r/sin(θ/2)。
408
+ * 凹角(材料在外)时圆弧向 B 鼓出 → 面积**增加**(A 侧 cross 沉孔
409
+ * 11.262240 实证)。
410
+ * @param a - 前一点。
411
+ * @param b - 圆角顶点。
412
+ * @param c - 后一点。
413
+ * @param radius - 圆角半径。
414
+ * @returns 切点 P1/P2 与弧中点 mid(2D)。
415
+ * @throws 当半径超过任一边可用长度。
416
+ */
417
+ export declare function filletCorner2D(a: {
418
+ x: number;
419
+ y: number;
420
+ }, b: {
421
+ x: number;
422
+ y: number;
423
+ }, c: {
424
+ x: number;
425
+ y: number;
426
+ }, radius: number): {
427
+ p1: {
428
+ x: number;
429
+ y: number;
430
+ };
431
+ p2: {
432
+ x: number;
433
+ y: number;
434
+ };
435
+ mid: {
436
+ x: number;
437
+ y: number;
438
+ };
439
+ };
440
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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"}