@faicad/fai-cq-gears 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.
- package/dist/bevel_gear.d.ts +113 -0
- package/dist/bevel_gear.d.ts.map +1 -0
- package/dist/bevel_gear.js +327 -0
- package/dist/bevel_gear.js.map +1 -0
- package/dist/crossed_helical_gear.d.ts +24 -0
- package/dist/crossed_helical_gear.d.ts.map +1 -0
- package/dist/crossed_helical_gear.js +24 -0
- package/dist/crossed_helical_gear.js.map +1 -0
- package/dist/crossed_pair.d.ts +177 -0
- package/dist/crossed_pair.d.ts.map +1 -0
- package/dist/crossed_pair.js +237 -0
- package/dist/crossed_pair.js.map +1 -0
- package/dist/features.d.ts +184 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +408 -0
- package/dist/features.js.map +1 -0
- package/dist/index.d.ts +178 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +223 -0
- package/dist/index.js.map +1 -0
- package/dist/math.d.ts +200 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +274 -0
- package/dist/math.js.map +1 -0
- package/dist/pairs.d.ts +161 -0
- package/dist/pairs.d.ts.map +1 -0
- package/dist/pairs.js +183 -0
- package/dist/pairs.js.map +1 -0
- package/dist/planetary.d.ts +96 -0
- package/dist/planetary.d.ts.map +1 -0
- package/dist/planetary.js +139 -0
- package/dist/planetary.js.map +1 -0
- package/dist/profile.d.ts +439 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +592 -0
- package/dist/profile.js.map +1 -0
- package/dist/rack_gear.d.ts +125 -0
- package/dist/rack_gear.d.ts.map +1 -0
- package/dist/rack_gear.js +344 -0
- package/dist/rack_gear.js.map +1 -0
- package/dist/ring_gear.d.ts +54 -0
- package/dist/ring_gear.d.ts.map +1 -0
- package/dist/ring_gear.js +133 -0
- package/dist/ring_gear.js.map +1 -0
- package/dist/spline-face.d.ts +99 -0
- package/dist/spline-face.d.ts.map +1 -0
- package/dist/spline-face.js +94 -0
- package/dist/spline-face.js.map +1 -0
- package/dist/spur_gear.d.ts +112 -0
- package/dist/spur_gear.d.ts.map +1 -0
- package/dist/spur_gear.js +206 -0
- package/dist/spur_gear.js.map +1 -0
- package/dist/worm_gear.d.ts +78 -0
- package/dist/worm_gear.d.ts.map +1 -0
- package/dist/worm_gear.js +256 -0
- package/dist/worm_gear.js.map +1 -0
- package/package.json +47 -0
package/dist/features.js
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* features — 裸齿轮之上的布尔特征(倒角 / 轴孔 / 凹槽 / 轮毂 / 轮辐)
|
|
3
|
+
*
|
|
4
|
+
* 复刻 cq_gears `GearBase._make_chamfer` / `_make_bore`(A1 尖峰
|
|
5
|
+
* `scripts/spike-chamfer.ts` 已验证:spur 裸体 + chamfer0.5 + bore1 → 体积
|
|
6
|
+
* 167.845620 对齐官方 167.8456187,rel 5.6e-9),以及 SpurGear 系的
|
|
7
|
+
* `_make_recess` / `_make_hub` / `_make_spokes`(RingGear 无这些特征)。
|
|
8
|
+
*
|
|
9
|
+
* 实现要点(与 cq 逐字一致):
|
|
10
|
+
* - 倒角是 XZ 平面(法向 -Y)上的三角轮廓 → line-edge → wire → face → revolve 360°
|
|
11
|
+
* 得到旋转体 cutter,再布尔差到裸齿轮;外部齿 / 内齿(ring)的 cutter 轮廓方向相反。
|
|
12
|
+
* - 轴孔是贯穿圆柱 cut(轴心对齐 +Z,高度 = width + 2E 确保穿透)。
|
|
13
|
+
* - 凹槽(recess)是顶/底面上的圆盘或圆环 pocket 布尔差(cq `cutBlind`,深度恰好
|
|
14
|
+
* = recess,与端面齐平——参考构建同款做法,OCCT 可处理共面 cut)。
|
|
15
|
+
* - 轮毂(hub)是顶面上的圆环棱柱(bore_d 作内孔)布尔并(cq `extrude(hub_length)`)。
|
|
16
|
+
* - 轮辐(spokes)是 r1..r2 之间的「直边 + 内外圆弧」窗口棱柱 cutter,绕 Z 轴
|
|
17
|
+
* 逐个旋转 n_spokes 次布尔差;spoke_fillet 对 cutter 的竖直棱边做圆角。
|
|
18
|
+
*/
|
|
19
|
+
/** cq `_make_chamfer` 的小偏移量(避免共面自交)。 */
|
|
20
|
+
export const CHAMFER_E = 0.01;
|
|
21
|
+
function point(u, v) {
|
|
22
|
+
return { x: u, y: 0, z: v };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* cq `_make_chamfer` 的旋转体 cutter 三角轮廓(XZ 平面,4 个顶点:末点=首点闭合重复)。
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ 末点必须与首点相同:`makeChamferCutter` 用 `pts.slice(0, 3).map((p, i) => makeLineEdge(p, pts[i + 1]))`
|
|
28
|
+
* 构造边,i=2 时 `pts[i + 1]` 取 `pts[3]`(即首点)才能闭合三角——这是 A1 尖峰验证过的写法。
|
|
29
|
+
*
|
|
30
|
+
* @param ra 齿顶圆半径(外部齿=齿尖、内齿=内齿尖)
|
|
31
|
+
* @param width 齿宽
|
|
32
|
+
* @param wx 沿半径方向的去除量
|
|
33
|
+
* @param wy 沿 z 方向的去除量
|
|
34
|
+
* @param which 顶面 / 底面
|
|
35
|
+
* @param isRing 内齿(true)使用与 cq `ring_gear.py` 一致的相反轮廓
|
|
36
|
+
*/
|
|
37
|
+
function chamferProfile(ra, width, wx, wy, which, isRing) {
|
|
38
|
+
if (isRing) {
|
|
39
|
+
const top = [
|
|
40
|
+
point(ra - CHAMFER_E, width - wy), point(ra - CHAMFER_E, width + CHAMFER_E), point(ra + wx, width + CHAMFER_E),
|
|
41
|
+
];
|
|
42
|
+
const bottom = [
|
|
43
|
+
point(ra + wx, -CHAMFER_E), point(ra - CHAMFER_E, -CHAMFER_E), point(ra - CHAMFER_E, wy),
|
|
44
|
+
];
|
|
45
|
+
const p = which === 'top' ? top : bottom;
|
|
46
|
+
return [p[0], p[1], p[2], p[0]];
|
|
47
|
+
}
|
|
48
|
+
const top = [
|
|
49
|
+
point(ra - wx, width + CHAMFER_E), point(ra + CHAMFER_E, width + CHAMFER_E), point(ra + CHAMFER_E, width - wy),
|
|
50
|
+
];
|
|
51
|
+
const bottom = [
|
|
52
|
+
point(ra + CHAMFER_E, wy), point(ra + CHAMFER_E, -CHAMFER_E), point(ra - wx, -CHAMFER_E),
|
|
53
|
+
];
|
|
54
|
+
const p = which === 'top' ? top : bottom;
|
|
55
|
+
return [p[0], p[1], p[2], p[0]];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 生成单个倒角 cutter 旋转体(A1 已验证的几何)。
|
|
59
|
+
*
|
|
60
|
+
* 轮廓取自 {@link chamferProfile},绕全局 Z 转 360° 成体,供 `applyChamfer` 布尔差。
|
|
61
|
+
*
|
|
62
|
+
* @param kernel 原始 OCCT 内核
|
|
63
|
+
* @param ra 齿顶圆半径(外部齿=齿尖、内齿=内齿尖)
|
|
64
|
+
* @param width 齿宽
|
|
65
|
+
* @param wx 沿半径方向的去除量
|
|
66
|
+
* @param wy 沿 z 方向的去除量
|
|
67
|
+
* @param which 顶面 / 底面(决定用哪一支轮廓)
|
|
68
|
+
* @param isRing 内齿(true)使用与 cq `ring_gear.py` 一致的相反轮廓
|
|
69
|
+
* @returns 绕 Z 轴 360° 回转得到的 cutter 实体句柄
|
|
70
|
+
*/
|
|
71
|
+
export function makeChamferCutter(kernel, ra, width, wx, wy, which, isRing) {
|
|
72
|
+
const pts = chamferProfile(ra, width, wx, wy, which, isRing);
|
|
73
|
+
// 与 A1 尖峰完全一致:取前 3 顶点 → 2 条边,i=2 时 `pts[3]`(=首点)闭合三角 → wire → face → revolve 360°。
|
|
74
|
+
const edges = pts.slice(0, 3).map((p, i) => kernel.makeLineEdge(p, pts[i + 1]));
|
|
75
|
+
const wire = kernel.makeWire(edges);
|
|
76
|
+
const face = kernel.makeFace(wire);
|
|
77
|
+
return kernel.revolve(face, { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } }, Math.PI * 2);
|
|
78
|
+
}
|
|
79
|
+
function resolveChamfer(spec) {
|
|
80
|
+
if (spec === undefined)
|
|
81
|
+
return undefined;
|
|
82
|
+
return Array.isArray(spec) ? [spec[0], spec[1]] : [spec, spec];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 内核 `BRepAlgoAPI_Cut` 有时会多包一层 compound 外壳(即使结果只是单个实体,
|
|
86
|
+
* 内齿 cutter 即此情况;外部齿则直接返回 solid)。这里把「仅含 1 个 solid 的 compound」
|
|
87
|
+
* 解包成 solid,与 `fixFaceOrientations` 的思路一致,避免调用方无谓地判非 solid。
|
|
88
|
+
*
|
|
89
|
+
* @returns 解包后的 solid;若本就不是 compound 或含多块实体则原样返回(交给调用方校验)。
|
|
90
|
+
*/
|
|
91
|
+
function asSolid(kernel, shape) {
|
|
92
|
+
if (kernel.isSolid(shape))
|
|
93
|
+
return shape;
|
|
94
|
+
if (kernel.getShapeType(shape) === 'compound') {
|
|
95
|
+
const solids = kernel.getSubShapes(shape, 'solid');
|
|
96
|
+
if (solids.length === 1)
|
|
97
|
+
return solids[0];
|
|
98
|
+
}
|
|
99
|
+
return shape;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 复刻 cq `_make_chamfer`:在裸齿轮实体上布尔差上/下倒角旋转体。
|
|
103
|
+
*
|
|
104
|
+
* @param kernel 原始 OCCT 内核
|
|
105
|
+
* @param body 裸齿轮 solid
|
|
106
|
+
* @param ra 齿顶圆半径
|
|
107
|
+
* @param width 齿宽
|
|
108
|
+
* @param opts 倒角选项(chamfer / chamferTop / chamferBottom)
|
|
109
|
+
* @param isRing 内齿(使用 ring 版 cutter 轮廓)
|
|
110
|
+
* @returns 倒角后的 solid(cutter 无效时显式抛错,不静默吞掉)
|
|
111
|
+
*/
|
|
112
|
+
export function applyChamfer(kernel, body, ra, width, opts, isRing = false) {
|
|
113
|
+
const top = resolveChamfer(opts.chamferTop ?? opts.chamfer);
|
|
114
|
+
const bottom = resolveChamfer(opts.chamferBottom ?? opts.chamfer);
|
|
115
|
+
let result = body;
|
|
116
|
+
if (top) {
|
|
117
|
+
const cutter = makeChamferCutter(kernel, ra, width, top[0], top[1], 'top', isRing);
|
|
118
|
+
if (!kernel.isValid(cutter)) {
|
|
119
|
+
throw new Error(`applyChamfer: top cutter invalid (ra=${ra}, width=${width}, wx=${top[0]}, wy=${top[1]})`);
|
|
120
|
+
}
|
|
121
|
+
result = asSolid(kernel, kernel.cut(result, cutter));
|
|
122
|
+
}
|
|
123
|
+
if (bottom) {
|
|
124
|
+
const cutter = makeChamferCutter(kernel, ra, width, bottom[0], bottom[1], 'bottom', isRing);
|
|
125
|
+
if (!kernel.isValid(cutter)) {
|
|
126
|
+
throw new Error(`applyChamfer: bottom cutter invalid (ra=${ra}, width=${width}, wx=${bottom[0]}, wy=${bottom[1]})`);
|
|
127
|
+
}
|
|
128
|
+
result = asSolid(kernel, kernel.cut(result, cutter));
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 复刻 cq `_make_bore`:贯穿圆柱 cut(轴心对齐 +Z,高度 = width + 2E 确保穿透)。
|
|
134
|
+
*
|
|
135
|
+
* @param kernel 原始 OCCT 内核
|
|
136
|
+
* @param body 实体
|
|
137
|
+
* @param boreD 轴孔直径(cq `bore_d`)
|
|
138
|
+
* @param width 齿宽
|
|
139
|
+
* @returns 带轴孔的 solid
|
|
140
|
+
*/
|
|
141
|
+
export function applyBore(kernel, body, boreD, width) {
|
|
142
|
+
const cyl = kernel.makeCylinder(boreD / 2, width + 2 * CHAMFER_E);
|
|
143
|
+
const moved = kernel.translate(cyl, 0, 0, -CHAMFER_E);
|
|
144
|
+
return asSolid(kernel, kernel.cut(body, moved));
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 复刻 cq `_make_recess`:顶/底面上的圆盘或圆环 pocket 布尔差。
|
|
148
|
+
*
|
|
149
|
+
* cq 语义(逐字对齐 `spur_gear.py::_make_recess`):
|
|
150
|
+
* - 仅在传了 `recess`/`bottom_recess` 深度时生效;`recess_d` 缺失应报错(assert)。
|
|
151
|
+
* - 顶面:外径 = recess_d 的圆盘 pocket,深度恰好 = recess(cutBlind(-recess));
|
|
152
|
+
* 有 hub_d 时改为**圆环** pocket(外 recess_d、内 hub_d)——轮毂在 recess 之后
|
|
153
|
+
* 由 `_make_hub` 另行 fuse,故这里挖掉的只是轮毂之外的环槽。
|
|
154
|
+
* - 底面:bottom_recess_d / bottom_hub_d 缺省时分别回退 recess_d / hub_d。
|
|
155
|
+
* - 深度与端面齐平(cutter 顶面在 z=width / z=0),与参考构建一致,共面 cut OCCT 可处理。
|
|
156
|
+
*
|
|
157
|
+
* @param kernel 原始 OCCT 内核
|
|
158
|
+
* @param body 实体(裸齿轮,含 bore 之后的形态)
|
|
159
|
+
* @param width 齿宽
|
|
160
|
+
* @param opts recess / recessD / hubD / bottomRecess / bottomRecessD / bottomHubD
|
|
161
|
+
* @returns 挖槽后的 solid
|
|
162
|
+
*/
|
|
163
|
+
export function applyRecess(kernel, body, width, opts) {
|
|
164
|
+
let result = body;
|
|
165
|
+
const ring = (outerD, innerD, z0, depth) => {
|
|
166
|
+
const outer = kernel.makeCylinder(outerD / 2, depth);
|
|
167
|
+
const at = kernel.translate(outer, 0, 0, z0);
|
|
168
|
+
if (innerD === undefined)
|
|
169
|
+
return at;
|
|
170
|
+
const inner = kernel.makeCylinder(innerD / 2, depth);
|
|
171
|
+
return asSolid(kernel, kernel.cut(at, kernel.translate(inner, 0, 0, z0)));
|
|
172
|
+
};
|
|
173
|
+
if (opts.recess !== undefined && opts.recess > 0) {
|
|
174
|
+
if (opts.recessD === undefined) {
|
|
175
|
+
throw new Error('applyRecess: recess_d is not set (cq assert)');
|
|
176
|
+
}
|
|
177
|
+
const cutter = ring(opts.recessD, opts.hubD, width - opts.recess, opts.recess);
|
|
178
|
+
if (!kernel.isValid(cutter)) {
|
|
179
|
+
throw new Error(`applyRecess: top cutter invalid (recessD=${opts.recessD}, hubD=${String(opts.hubD)})`);
|
|
180
|
+
}
|
|
181
|
+
result = asSolid(kernel, kernel.cut(result, cutter));
|
|
182
|
+
}
|
|
183
|
+
if (opts.bottomRecess !== undefined && opts.bottomRecess > 0) {
|
|
184
|
+
const d = opts.bottomRecessD ?? opts.recessD;
|
|
185
|
+
if (d === undefined) {
|
|
186
|
+
throw new Error('applyRecess: bottom_recess_d (or recess_d) is not set (cq assert)');
|
|
187
|
+
}
|
|
188
|
+
const hub = opts.bottomHubD ?? opts.hubD;
|
|
189
|
+
const cutter = ring(d, hub, 0, opts.bottomRecess);
|
|
190
|
+
if (!kernel.isValid(cutter)) {
|
|
191
|
+
throw new Error(`applyRecess: bottom cutter invalid (d=${d}, hub=${String(hub)})`);
|
|
192
|
+
}
|
|
193
|
+
result = asSolid(kernel, kernel.cut(result, cutter));
|
|
194
|
+
}
|
|
195
|
+
return result;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 复刻 cq `_make_hub`:顶面上的圆环棱柱布尔并(hub_length 为 None 时不建模)。
|
|
199
|
+
*
|
|
200
|
+
* cq 语义(`spur_gear.py::_make_hub`):在顶面 workplane 上,有 bore_d 时先画
|
|
201
|
+
* 内孔圆,再画 hub_d/2 外圆并 `extrude(hub_length)`——得到的是**圆环**棱柱
|
|
202
|
+
* (bore 贯穿轮毂),fuse 到主体上。
|
|
203
|
+
*
|
|
204
|
+
* @param kernel 原始 OCCT 内核
|
|
205
|
+
* @param body 实体
|
|
206
|
+
* @param width 齿宽(轮毂从 z=width 向上生长)
|
|
207
|
+
* @param opts hubD / hubLength / boreD
|
|
208
|
+
* @returns fuse 轮毂后的 solid
|
|
209
|
+
*/
|
|
210
|
+
export function applyHub(kernel, body, width, opts) {
|
|
211
|
+
if (opts.hubLength === undefined || opts.hubLength <= 0)
|
|
212
|
+
return body;
|
|
213
|
+
if (opts.hubD === undefined) {
|
|
214
|
+
throw new Error('applyHub: hub diameter is not set (cq assert)');
|
|
215
|
+
}
|
|
216
|
+
const outer = kernel.makeCylinder(opts.hubD / 2, opts.hubLength);
|
|
217
|
+
const at = kernel.translate(outer, 0, 0, width);
|
|
218
|
+
const hub = opts.boreD !== undefined
|
|
219
|
+
? asSolid(kernel, kernel.cut(at, kernel.translate(kernel.makeCylinder(opts.boreD / 2, opts.hubLength), 0, 0, width)))
|
|
220
|
+
: at;
|
|
221
|
+
if (!kernel.isValid(hub)) {
|
|
222
|
+
throw new Error(`applyHub: hub invalid (hubD=${opts.hubD}, hubLength=${opts.hubLength})`);
|
|
223
|
+
}
|
|
224
|
+
return asSolid(kernel, kernel.fuse(body, hub));
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* 复刻 cq `_make_spokes`:r1..r2 之间的「直边 + 内外圆弧」窗口棱柱 cutter,
|
|
228
|
+
* 绕 Z 轴逐个旋转 n_spokes 次布尔差(n_spokes 为 None 时不建模)。
|
|
229
|
+
*
|
|
230
|
+
* cq 语义(`spur_gear.py::_make_spokes`,角度逐字一致):
|
|
231
|
+
* - r1 = max(spoke_width/2, spokes_id/2)(spokes_id 缺省 = hub_d)、r2 = spokes_od/2;
|
|
232
|
+
* - 两端各收/放 ±0.0001 避免与内/外边界共面;
|
|
233
|
+
* - a1 = asin(sw/2 / id/2)、a2 = asin(sw/2 / od/2),a3 = tau − a2、a4 = tau − a1;
|
|
234
|
+
* - 窗口轮廓 = 内弧(a1→a4, r1) − 直边(r1@a4 → r2@a3) − 外弧(r2: a3→a2, **顺时针**) −
|
|
235
|
+
* 直边(r2@a2 → r1@a1),即外弧反向走;
|
|
236
|
+
* - 高度 = width + 1.0,从 z=-0.1 起完全穿透;spoke_fillet 对窗口的竖直棱边做圆角。
|
|
237
|
+
*
|
|
238
|
+
* 圆弧用 `makeArcEdge(start, mid, end)` 构造(三点定弧,几何精确,无 radiusArc
|
|
239
|
+
* 的正负半径歧义):外弧 a3→a2 取中点角 (a3+a2)/2。
|
|
240
|
+
*
|
|
241
|
+
* @param kernel 原始 OCCT 内核
|
|
242
|
+
* @param body 实体
|
|
243
|
+
* @param width 齿宽
|
|
244
|
+
* @param opts nSpokes / spokeWidth / spokesId / spokesOd / spokeFillet / hubD / recessD
|
|
245
|
+
* @returns 挖去全部轮辐窗口后的 solid
|
|
246
|
+
*/
|
|
247
|
+
export function applySpokes(kernel, body, width, opts) {
|
|
248
|
+
if (opts.nSpokes === undefined)
|
|
249
|
+
return body;
|
|
250
|
+
const nSpokes = opts.nSpokes;
|
|
251
|
+
if (nSpokes <= 1) {
|
|
252
|
+
throw new Error('applySpokes: number of spokes must be > 1 (cq assert)');
|
|
253
|
+
}
|
|
254
|
+
if (opts.spokeWidth === undefined) {
|
|
255
|
+
throw new Error('applySpokes: spoke width is not set (cq assert)');
|
|
256
|
+
}
|
|
257
|
+
if (opts.spokesOd === undefined) {
|
|
258
|
+
throw new Error('applySpokes: outer spokes diameter is not set (cq assert)');
|
|
259
|
+
}
|
|
260
|
+
// cq 语义:spokes_id 缺省 = hub_d;r1/r2 加减 0.0001 避免共面。
|
|
261
|
+
const idD = opts.spokesId ?? opts.hubD;
|
|
262
|
+
const r1 = Math.max(opts.spokeWidth / 2, idD !== undefined ? idD / 2 : 0) + 0.0001;
|
|
263
|
+
const r2 = opts.spokesOd / 2 - 0.0001;
|
|
264
|
+
const tau = (Math.PI * 2) / nSpokes;
|
|
265
|
+
// cq 用 spokes_id/spokes_od(未缩的原始直径)算张角
|
|
266
|
+
const a1 = Math.asin((opts.spokeWidth / 2) / (idD !== undefined ? idD / 2 : opts.spokeWidth / 2));
|
|
267
|
+
const a2 = Math.asin((opts.spokeWidth / 2) / (opts.spokesOd / 2));
|
|
268
|
+
const a3 = tau - a2;
|
|
269
|
+
const a4 = tau - a1;
|
|
270
|
+
// 窗口轮廓(与 cq 同构):p1=(r1,a1) → p2=(r2,a2) 直边 → 外弧 p2→p3=(r2,a3)
|
|
271
|
+
// (cq radiusArc 负半径=顺时针,即弧走大角度方向;此处外弧从 a2 到 a3 顺时针经
|
|
272
|
+
// tau/2 中点)→ 直边 p3→p4=(r1,a4) → 内弧 p4→p1(radiusArc 正半径=逆时针,
|
|
273
|
+
// 从 a4 回 a1 经 (a4+tau+a1)/2 方向的短弧……与 cq 几何等价的取法:内弧凸向圆心外)。
|
|
274
|
+
const pt = (r, ang) => ({ x: Math.cos(ang) * r, y: Math.sin(ang) * r, z: 0 });
|
|
275
|
+
const p1 = pt(r1, a1);
|
|
276
|
+
const p2 = pt(r2, a2);
|
|
277
|
+
const p3 = pt(r2, a3);
|
|
278
|
+
const p4 = pt(r1, a4);
|
|
279
|
+
const edges = [
|
|
280
|
+
kernel.makeLineEdge(p1, p2),
|
|
281
|
+
// 外弧 p2→p3:r2 圆上的短弧(窗口外边界落在外圆上),中点角 = (a2 + a3) / 2
|
|
282
|
+
kernel.makeArcEdge(p2, pt(r2, (a2 + a3) / 2), p3),
|
|
283
|
+
kernel.makeLineEdge(p3, p4),
|
|
284
|
+
// 内弧 p4→p1:r1 圆上的短弧(窗口内边界落在内圆上,与 cq radiusArc(+r1)
|
|
285
|
+
// 的凸向约定几何等价),中点角 = (a1 + a4) / 2。
|
|
286
|
+
kernel.makeArcEdge(p4, pt(r1, (a1 + a4) / 2), p1),
|
|
287
|
+
];
|
|
288
|
+
const wire = kernel.makeWire(edges);
|
|
289
|
+
const face = kernel.makeFace(wire);
|
|
290
|
+
let cutter = kernel.extrude(face, 0, 0, width + 1.0);
|
|
291
|
+
cutter = kernel.translate(cutter, 0, 0, -0.1);
|
|
292
|
+
if (opts.spokeFillet !== undefined && opts.spokeFillet > 0) {
|
|
293
|
+
// cq `cutout.edges('|Z').fillet(spoke_fillet)`:对窗口棱柱的竖直棱边做圆角。
|
|
294
|
+
// 用 bbox 中心识别竖直棱边(z 向棱边的两个端点 (x,y) 相同且非圆弧)。
|
|
295
|
+
const vertEdges = kernel.getSubShapes(cutter, 'edge').filter((e) => {
|
|
296
|
+
const t = kernel.curveType(e);
|
|
297
|
+
if (t !== 'line')
|
|
298
|
+
return false;
|
|
299
|
+
const { a, b } = edgeEndsOf(kernel, e);
|
|
300
|
+
return Math.abs(a.x - b.x) < 1e-9 && Math.abs(a.y - b.y) < 1e-9;
|
|
301
|
+
});
|
|
302
|
+
if (vertEdges.length > 0) {
|
|
303
|
+
cutter = kernel.fillet(cutter, vertEdges, opts.spokeFillet);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (!kernel.isValid(cutter)) {
|
|
307
|
+
throw new Error(`applySpokes: cutter invalid (nSpokes=${nSpokes}, r1=${r1}, r2=${r2}, fillet=${String(opts.spokeFillet)})`);
|
|
308
|
+
}
|
|
309
|
+
let result = body;
|
|
310
|
+
for (let i = 0; i < nSpokes; i++) {
|
|
311
|
+
const rotated = kernel.rotate(cutter, { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } }, tau * i);
|
|
312
|
+
result = asSolid(kernel, kernel.cut(result, rotated));
|
|
313
|
+
}
|
|
314
|
+
return result;
|
|
315
|
+
}
|
|
316
|
+
/** 取边的两个端点(applySpokes 圆角竖直棱边识别用)。 */
|
|
317
|
+
function edgeEndsOf(kernel, edge) {
|
|
318
|
+
const { first, last } = kernel.curveParameters(edge);
|
|
319
|
+
return { a: kernel.curvePointAtParam(edge, first), b: kernel.curvePointAtParam(edge, last) };
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* 复刻 cq `_make_teeth_cutout_wire`:删齿窗口的截面 wire(XY 平面,z=0)。
|
|
323
|
+
*
|
|
324
|
+
* cq 语义(`spur_gear.py::_make_teeth_cutout_wire`,角度逐字一致):
|
|
325
|
+
* - at1/at2 = 齿位角 + tau/2(窗口以齿槽中心对称),中点角 atm=(at1+at2)/2;
|
|
326
|
+
* - 外径 rc = ra + 1.0(超出齿顶)、内径 rin = rd − 0.01(略低于齿根);
|
|
327
|
+
* - 轮廓 = 内弧(at1→at2, rin) − 直边(rin@at2 → rc@at2) − 外弧(at2→at1, rc) −
|
|
328
|
+
* 直边(rc@at1 → rin@at1);内外弧都走各自圆上的短弧(经 atm)。
|
|
329
|
+
*/
|
|
330
|
+
function missingTeethCutoutWire(kernel, ra, rd, tau, t1, t2) {
|
|
331
|
+
const at1 = t1 * tau + tau / 2;
|
|
332
|
+
const at2 = t2 * tau + tau / 2;
|
|
333
|
+
const atm = (at1 + at2) / 2;
|
|
334
|
+
const rc = ra + 1.0;
|
|
335
|
+
const rin = rd - 0.01;
|
|
336
|
+
const pt = (r, a) => ({ x: Math.cos(a) * r, y: Math.sin(a) * r, z: 0 });
|
|
337
|
+
const edges = [
|
|
338
|
+
kernel.makeArcEdge(pt(rin, at1), pt(rin, atm), pt(rin, at2)),
|
|
339
|
+
kernel.makeLineEdge(pt(rin, at2), pt(rc, at2)),
|
|
340
|
+
kernel.makeArcEdge(pt(rc, at2), pt(rc, atm), pt(rc, at1)),
|
|
341
|
+
kernel.makeLineEdge(pt(rc, at1), pt(rin, at1)),
|
|
342
|
+
];
|
|
343
|
+
return kernel.makeWire(edges);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 扭转扫掠 cutter 的多站截面(逼近 cq `twistExtrude` 的螺旋扫掠)。
|
|
347
|
+
*
|
|
348
|
+
* cq `twistExtrude(distance, angle)` 沿线性扭转律把截面从 z0 扫到 z0+distance:
|
|
349
|
+
* 高度 h 处的截面绕 Z 轴旋转 angle·(h−z0)/distance。这里取 N 个站点,每站放一份
|
|
350
|
+
* 「旋转 + 平移」的截面 wire 副本,`loft(ruled=false)` 平滑蒙皮。
|
|
351
|
+
* case04/06 的总扭转仅 16°/8°,站距 ≤1° 时对切出体积的偏差远小于齿面 B-spline
|
|
352
|
+
* 近似本身的误差。
|
|
353
|
+
*/
|
|
354
|
+
function twistCutoutSolid(kernel, wire0, z0, height, totalAngleRad) {
|
|
355
|
+
const n = Math.min(64, Math.max(8, Math.ceil((Math.abs(totalAngleRad) * 180) / Math.PI)));
|
|
356
|
+
const axis = { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } };
|
|
357
|
+
const stations = [];
|
|
358
|
+
for (let i = 0; i <= n; i++) {
|
|
359
|
+
const f = i / n;
|
|
360
|
+
let w = kernel.copy(wire0);
|
|
361
|
+
if (f !== 0)
|
|
362
|
+
w = kernel.rotate(w, axis, totalAngleRad * f);
|
|
363
|
+
const z = z0 + height * f;
|
|
364
|
+
if (z !== 0)
|
|
365
|
+
w = kernel.translate(w, 0, 0, z);
|
|
366
|
+
stations.push(w);
|
|
367
|
+
}
|
|
368
|
+
return kernel.loft(stations, true, false);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* 复刻 cq `_make_missing_teeth` / `_remove_teeth`:按删齿区间切掉轮齿。
|
|
372
|
+
*
|
|
373
|
+
* cq 语义(`spur_gear.py`,逐字一致):
|
|
374
|
+
* - 每个区间 (t1, t2) 生成窗口 cutter(z=-0.1 起、高 width+0.2 完全穿透),逐个 cut;
|
|
375
|
+
* - twist_angle = 0(直齿):截面 `extrude` 直棱柱;
|
|
376
|
+
* - twist_angle ≠ 0(斜齿/人字齿):截面 `twistExtrude(width+0.2, degrees(-twist))`,
|
|
377
|
+
* 本实现用多站旋转截面 loft 逼近(见 `twistCutoutSolid`)。
|
|
378
|
+
*
|
|
379
|
+
* @param kernel 原始 OCCT 内核
|
|
380
|
+
* @param body 实体(cq `_build` 中位于 bore 之后、recess 之前)
|
|
381
|
+
* @param geom 删齿所需几何量(ra/rd/tau/width/twistAngle)
|
|
382
|
+
* @param spec 删齿区间集合
|
|
383
|
+
* @returns 删齿后的 solid
|
|
384
|
+
*/
|
|
385
|
+
export function applyMissingTeeth(kernel, body, geom, spec) {
|
|
386
|
+
const z0 = -0.1;
|
|
387
|
+
const height = geom.width + 0.2;
|
|
388
|
+
let result = body;
|
|
389
|
+
for (const [t1, t2] of spec) {
|
|
390
|
+
const wire = missingTeethCutoutWire(kernel, geom.ra, geom.rd, geom.tau, t1, t2);
|
|
391
|
+
let cutter;
|
|
392
|
+
if (geom.twistAngle === 0) {
|
|
393
|
+
const face = kernel.makeFace(wire);
|
|
394
|
+
cutter = kernel.extrude(face, 0, 0, height);
|
|
395
|
+
cutter = kernel.translate(cutter, 0, 0, z0);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
// cq `degrees(-self.twist_angle)`:负号 = 沿齿的螺旋方向扭转
|
|
399
|
+
cutter = twistCutoutSolid(kernel, wire, z0, height, -geom.twistAngle);
|
|
400
|
+
}
|
|
401
|
+
if (!kernel.isValid(cutter)) {
|
|
402
|
+
throw new Error(`applyMissingTeeth: cutter invalid (t1=${t1}, t2=${t2})`);
|
|
403
|
+
}
|
|
404
|
+
result = asSolid(kernel, kernel.cut(result, cutter));
|
|
405
|
+
}
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../src/features.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index — fai_cq_gears 公共 API 入口(15 个齿轮类 + contractVersion)
|
|
3
|
+
*
|
|
4
|
+
* ## 现状(2026-09-13)
|
|
5
|
+
*
|
|
6
|
+
* 本包经 `@faicad/cq-compat` 的齿轮原语层消费内核(`getGearKernel()`,
|
|
7
|
+
* cq-compat 内部统一归属 occt 内核访问),入口签名(参数名逐字沿用 Python、
|
|
8
|
+
* 返回 `Result`)保持不变。
|
|
9
|
+
*
|
|
10
|
+
* 每个导出函数:
|
|
11
|
+
* - 参数名**逐字沿用 Python**(module / teeth_number / width / helix_angle …),见 `profile.ts`;
|
|
12
|
+
* - 返回 `Promise<Result<…>>`:单体齿轮返回 `BrepHandle`;齿轮对/轮系返回具名记录
|
|
13
|
+
* (`{gear, pinion}` / `{gear1, gear2}` / `{sun, planets, ring}`)并挂 `fn.outputs`
|
|
14
|
+
* (`library-dev-guide.md` §2.6 / 方案 §6.4),宿主据此逐件收编、导出 STEP。
|
|
15
|
+
* - `GearAssembly`(`{name, solid}[]`)保留为脚本侧逐件导出的形态(`*ExportParts`)。
|
|
16
|
+
*/
|
|
17
|
+
import type { BrepHandle } from '@faicad/faijs';
|
|
18
|
+
import { type Result } from '@faicad/faijs';
|
|
19
|
+
import { type BuildSpurGearOptions } from './spur_gear.js';
|
|
20
|
+
import { type BuildRingGearOptions } from './ring_gear.js';
|
|
21
|
+
import { type BuildRackGearOptions } from './rack_gear.js';
|
|
22
|
+
import { type BuildWormOptions } from './worm_gear.js';
|
|
23
|
+
import { type BuildBevelGearOptions } from './bevel_gear.js';
|
|
24
|
+
import { type BevelGearPairParams, type BuildBevelGearPairOptions } from './pairs.js';
|
|
25
|
+
import { type CrossedGearPairParams, type HyperbolicGearPairParams, type BuildCrossedGearPairOptions } from './crossed_pair.js';
|
|
26
|
+
import { type PlanetaryGearsetParams, type BuildPlanetaryGearsetOptions } from './planetary.js';
|
|
27
|
+
import type { SpurGearParams, RingGearParams, CrossedHelicalGearParams, RackGearParams, WormParams, BevelGearParams, HyperbolicGearParams } from './profile.js';
|
|
28
|
+
/** 库契约版本(与 faijs 引擎对齐,勿硬编码)。 */
|
|
29
|
+
export declare const contractVersion = 3;
|
|
30
|
+
/** 齿轮对/轮系的逐件导出条目(名字进 STEP 产品名,供逐件等价比对)。 */
|
|
31
|
+
export type GearAssembly = Array<{
|
|
32
|
+
name: string;
|
|
33
|
+
solid: BrepHandle;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* SpurGear(直齿圆柱齿轮)。
|
|
37
|
+
*
|
|
38
|
+
* @param params 齿轮参数(逐字沿用 Python `SpurGear.__init__`)
|
|
39
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
40
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
41
|
+
*/
|
|
42
|
+
export declare function spurGear(params: SpurGearParams, options?: BuildSpurGearOptions): Promise<Result<BrepHandle, string>>;
|
|
43
|
+
/**
|
|
44
|
+
* HerringboneGear(人字齿圆柱齿轮)。
|
|
45
|
+
*
|
|
46
|
+
* @param params 齿轮参数(逐字沿用 Python `HerringboneGear.__init__`)
|
|
47
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
48
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
49
|
+
*/
|
|
50
|
+
export declare function herringboneGear(params: SpurGearParams, options?: BuildSpurGearOptions): Promise<Result<BrepHandle, string>>;
|
|
51
|
+
/**
|
|
52
|
+
* RingGear(内齿圈)。
|
|
53
|
+
*
|
|
54
|
+
* @param params 齿轮参数(逐字沿用 Python `RingGear.__init__`)
|
|
55
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
56
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
57
|
+
*/
|
|
58
|
+
export declare function ringGear(params: RingGearParams, options?: BuildRingGearOptions): Promise<Result<BrepHandle, string>>;
|
|
59
|
+
/**
|
|
60
|
+
* HerringboneRingGear(人字内齿圈)。
|
|
61
|
+
*
|
|
62
|
+
* @param params 齿轮参数(逐字沿用 Python `HerringboneRingGear.__init__`)
|
|
63
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
64
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
65
|
+
*/
|
|
66
|
+
export declare function herringboneRingGear(params: RingGearParams, options?: BuildRingGearOptions): Promise<Result<BrepHandle, string>>;
|
|
67
|
+
/**
|
|
68
|
+
* CrossedHelicalGear(交错轴斜齿轮,单体)。
|
|
69
|
+
*
|
|
70
|
+
* @param params 齿轮参数(逐字沿用 Python `CrossedHelicalGear.__init__`)
|
|
71
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
72
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
73
|
+
*/
|
|
74
|
+
export declare function crossedHelicalGear(params: CrossedHelicalGearParams, options?: BuildSpurGearOptions): Promise<Result<BrepHandle, string>>;
|
|
75
|
+
/**
|
|
76
|
+
* HyperbolicGear(双曲面齿轮,单体)。
|
|
77
|
+
*
|
|
78
|
+
* @param params 齿轮参数(逐字沿用 Python `HyperbolicGear.__init__`)
|
|
79
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
80
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
81
|
+
*/
|
|
82
|
+
export declare function hyperbolicGear(params: HyperbolicGearParams, options?: BuildSpurGearOptions): Promise<Result<BrepHandle, string>>;
|
|
83
|
+
/**
|
|
84
|
+
* BevelGear(锥齿轮,单体)。
|
|
85
|
+
*
|
|
86
|
+
* @param params 齿轮参数(逐字沿用 Python `BevelGear.__init__`)
|
|
87
|
+
* @param options 构建选项(齿面策略 / bore_d / trim)
|
|
88
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
89
|
+
*/
|
|
90
|
+
export declare function bevelGear(params: BevelGearParams, options?: BuildBevelGearOptions): Promise<Result<BrepHandle, string>>;
|
|
91
|
+
/** BevelGearPair 逐件输出(`fn.outputs` 指定的具名记录,方案 §6.4)。 */
|
|
92
|
+
export interface BevelGearPairOutput {
|
|
93
|
+
/** 大轮 solid(未加定位)。 */
|
|
94
|
+
gear?: BrepHandle;
|
|
95
|
+
/** 小轮 solid(**已加**定位,除非 `transformPinion: false`)。 */
|
|
96
|
+
pinion?: BrepHandle;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* BevelGearPair(锥齿轮副,装配体)。
|
|
100
|
+
*
|
|
101
|
+
* @param params 齿轮副参数(逐字沿用 Python `BevelGearPair.__init__`)
|
|
102
|
+
* @param options 构建选项(齿面策略 / bore_d / trim)
|
|
103
|
+
* @returns `Result<BevelGearPairOutput>`——具名记录,失败转 `err`
|
|
104
|
+
*/
|
|
105
|
+
export declare function bevelGearPair(params: BevelGearPairParams, options?: BuildBevelGearPairOptions): Promise<Result<BevelGearPairOutput, string>>;
|
|
106
|
+
/**
|
|
107
|
+
* RackGear(齿条)。
|
|
108
|
+
*
|
|
109
|
+
* @param params 齿条参数(逐字沿用 Python `RackGear.__init__`)
|
|
110
|
+
* @param options 构建选项(齿面策略)
|
|
111
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
112
|
+
*/
|
|
113
|
+
export declare function rackGear(params: RackGearParams, options?: BuildRackGearOptions): Promise<Result<BrepHandle, string>>;
|
|
114
|
+
/**
|
|
115
|
+
* HerringboneRackGear(人字齿条)。
|
|
116
|
+
*
|
|
117
|
+
* @param params 齿条参数(逐字沿用 Python `HerringboneRackGear.__init__`)
|
|
118
|
+
* @param options 构建选项(齿面策略;内部强制 `herringbone: true`)
|
|
119
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
120
|
+
*/
|
|
121
|
+
export declare function herringboneRackGear(params: RackGearParams, options?: BuildRackGearOptions): Promise<Result<BrepHandle, string>>;
|
|
122
|
+
/**
|
|
123
|
+
* Worm(蜗杆)。
|
|
124
|
+
*
|
|
125
|
+
* @param params 蜗杆参数(逐字沿用 Python `Worm.__init__`)
|
|
126
|
+
* @param options 构建选项(策略默认 grid-approx / 缝合与组线容差 / boreD)
|
|
127
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
128
|
+
*/
|
|
129
|
+
export declare function worm(params: WormParams, options?: BuildWormOptions): Promise<Result<BrepHandle, string>>;
|
|
130
|
+
/** CrossedGearPair / HyperbolicGearPair 逐件输出(`fn.outputs` 指定的具名记录,方案 §6.4)。 */
|
|
131
|
+
export interface CrossedGearPairOutput {
|
|
132
|
+
/** 第一齿轮 solid(未定位)。 */
|
|
133
|
+
gear1?: BrepHandle;
|
|
134
|
+
/** 第二齿轮 solid(已按轴交角定位)。 */
|
|
135
|
+
gear2?: BrepHandle;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* CrossedGearPair(交错轴斜齿轮副,装配体)。
|
|
139
|
+
*
|
|
140
|
+
* @param params 齿轮副参数(逐字沿用 Python `CrossedGearPair.__init__`)
|
|
141
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
142
|
+
* @returns `Result<CrossedGearPairOutput>`——具名记录,失败转 `err`
|
|
143
|
+
*/
|
|
144
|
+
export declare function crossedGearPair(params: CrossedGearPairParams, options?: BuildCrossedGearPairOptions): Promise<Result<CrossedGearPairOutput, string>>;
|
|
145
|
+
/**
|
|
146
|
+
* HyperbolicGearPair(双曲面齿轮副,装配体)。
|
|
147
|
+
*
|
|
148
|
+
* @param params 齿轮副参数(逐字沿用 Python `HyperbolicGearPair.__init__`)
|
|
149
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
150
|
+
* @returns `Result<CrossedGearPairOutput>`——具名记录,失败转 `err`
|
|
151
|
+
*/
|
|
152
|
+
export declare function hyperbolicGearPair(params: HyperbolicGearPairParams, options?: BuildCrossedGearPairOptions): Promise<Result<CrossedGearPairOutput, string>>;
|
|
153
|
+
/** PlanetaryGearset 逐件输出(`fn.outputs` 指定的具名记录,方案 §6.4)。 */
|
|
154
|
+
export interface PlanetaryGearsetOutput {
|
|
155
|
+
/** 太阳轮 solid。 */
|
|
156
|
+
sun?: BrepHandle;
|
|
157
|
+
/** 行星轮 solid 列表(planet_01…planet_NN)。 */
|
|
158
|
+
planets: BrepHandle[];
|
|
159
|
+
/** 内齿圈 solid。 */
|
|
160
|
+
ring?: BrepHandle;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* PlanetaryGearset(行星轮系,装配体)。
|
|
164
|
+
*
|
|
165
|
+
* @param params 轮系参数(逐字沿用 Python `PlanetaryGearset.__init__`)
|
|
166
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
167
|
+
* @returns `Result<PlanetaryGearsetOutput>`——具名记录,失败转 `err`
|
|
168
|
+
*/
|
|
169
|
+
export declare function planetaryGearset(params: PlanetaryGearsetParams, options?: BuildPlanetaryGearsetOptions): Promise<Result<PlanetaryGearsetOutput, string>>;
|
|
170
|
+
/**
|
|
171
|
+
* HerringbonePlanetaryGearset(人字行星轮系,装配体)。
|
|
172
|
+
*
|
|
173
|
+
* @param params 轮系参数(逐字沿用 Python `HerringbonePlanetaryGearset.__init__`)
|
|
174
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
175
|
+
* @returns `Result<PlanetaryGearsetOutput>`——具名记录,失败转 `err`
|
|
176
|
+
*/
|
|
177
|
+
export declare function herringbonePlanetaryGearset(params: PlanetaryGearsetParams, options?: BuildPlanetaryGearsetOptions): Promise<Result<PlanetaryGearsetOutput, string>>;
|
|
178
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|