@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
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* planetary — 行星轮系(PlanetaryGearset / HerringbonePlanetaryGearset)
|
|
3
|
+
*
|
|
4
|
+
* 对应 `ring_gear.py`:一个太阳轮 + n 个行星轮 + 一个内齿圈,按中心距均布装配。
|
|
5
|
+
* 三件各自用现成的实体构造(`buildSpurGearSolid` / `buildRingGearSolid` 及其人字变体),
|
|
6
|
+
* 差异只在**参数分配**与**装配定位**:
|
|
7
|
+
*
|
|
8
|
+
* ## 参数分配(PlanetaryGearset)
|
|
9
|
+
* - `ring_z = sun_z + planet_z·2`(内齿圈齿数由太阳/行星决定)
|
|
10
|
+
* - 太阳:`helix_angle`(给定)
|
|
11
|
+
* - 行星:`helix_angle = -helix_angle`(旋向相反)
|
|
12
|
+
* - 内齿圈:`helix_angle = -helix_angle`
|
|
13
|
+
* - `orbit_r = sun.r0 + planet.r0`(行星公转半径)
|
|
14
|
+
*
|
|
15
|
+
* ## 装配定位(逐件,复刻 Python `assemble`)
|
|
16
|
+
* - 太阳:仅在 `planet.z` 为**奇数**时绕 Z 转 `tau_sun/2`(否则恒等);
|
|
17
|
+
* - 行星 i:先绕 Z 自转 `tau_planet/2`,再平移到 `(cos(i·a)·orbit_r, sin(i·a)·orbit_r, 0)`,
|
|
18
|
+
* `a = 2π/n_planets`;
|
|
19
|
+
* - 内齿圈:绕 Z 转 `tau_ring/2`。
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ `cq.Location(Vector(p), Z, angle)` 的语义是「先绕原点 Z 转 angle,再平移 p」
|
|
22
|
+
* (见 `pairs.ts` 文件头实测结论),故行星定位是 **rotate → translate**,不是反过来。
|
|
23
|
+
*
|
|
24
|
+
* HerringbonePlanetaryGearset 继承 PlanetaryGearset,仅把 `gear_cls = HerringboneGear`、
|
|
25
|
+
* `ring_gear_cls = HerringboneRingGear`——即三件全部走人字齿构建。
|
|
26
|
+
*/
|
|
27
|
+
import type { BrepHandle } from '@faicad/faijs';
|
|
28
|
+
import type { GearKernel } from '@faicad/cq-compat';
|
|
29
|
+
import { type SpurGearGeometry } from './profile.js';
|
|
30
|
+
import { type BuildSpurGearOptions } from './spur_gear.js';
|
|
31
|
+
/** 行星轮系参数(逐字沿用 `PlanetaryGearset.__init__`)。 */
|
|
32
|
+
export interface PlanetaryGearsetParams {
|
|
33
|
+
module: number;
|
|
34
|
+
sun_teeth_number: number;
|
|
35
|
+
planet_teeth_number: number;
|
|
36
|
+
width: number;
|
|
37
|
+
rim_width: number;
|
|
38
|
+
n_planets: number;
|
|
39
|
+
pressure_angle?: number;
|
|
40
|
+
helix_angle?: number;
|
|
41
|
+
clearance?: number;
|
|
42
|
+
backlash?: number;
|
|
43
|
+
}
|
|
44
|
+
/** 行星轮系构造选项(扩展单体特征选项 + 装配开关)。 */
|
|
45
|
+
export interface BuildPlanetaryGearsetOptions extends BuildSpurGearOptions {
|
|
46
|
+
/** 是否构建太阳轮(默认 true)。 */
|
|
47
|
+
buildSun?: boolean;
|
|
48
|
+
/** 是否构建行星轮(默认 true)。 */
|
|
49
|
+
buildPlanets?: boolean;
|
|
50
|
+
/** 是否构建内齿圈(默认 true)。 */
|
|
51
|
+
buildRing?: boolean;
|
|
52
|
+
/** 是否为人字齿(HerringbonePlanetaryGearset 传 true)。 */
|
|
53
|
+
herringbone?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** 行星轮系的构建结果。 */
|
|
56
|
+
export interface PlanetaryGearsetBuild {
|
|
57
|
+
sun?: BrepHandle;
|
|
58
|
+
planets: BrepHandle[];
|
|
59
|
+
ring?: BrepHandle;
|
|
60
|
+
sunGeometry: SpurGearGeometry;
|
|
61
|
+
planetGeometry: SpurGearGeometry;
|
|
62
|
+
ringGeometry: SpurGearGeometry;
|
|
63
|
+
/** 行星公转半径(= sun.r0 + planet.r0)。 */
|
|
64
|
+
orbitR: number;
|
|
65
|
+
/** 行星个数。 */
|
|
66
|
+
nPlanets: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 构建行星轮系(PlanetaryGearset / HerringbonePlanetaryGearset 共用)。
|
|
70
|
+
*
|
|
71
|
+
* @param kernel 原始 OCCT 内核
|
|
72
|
+
* @param params 轮系参数
|
|
73
|
+
* @param options 构造选项(`herringbone` 控制是否人字齿)
|
|
74
|
+
* @returns 太阳 / 行星数组 / 内齿圈 solid 与几何量
|
|
75
|
+
*/
|
|
76
|
+
export declare function buildPlanetaryGearset(kernel: GearKernel, params: PlanetaryGearsetParams, options?: BuildPlanetaryGearsetOptions): PlanetaryGearsetBuild;
|
|
77
|
+
/**
|
|
78
|
+
* 人字行星轮系(HerringbonePlanetaryGearset)——三件全部人字齿。
|
|
79
|
+
*
|
|
80
|
+
* @param kernel 原始 OCCT 内核
|
|
81
|
+
* @param params 行星轮系参数(逐字沿用 Python `HerringbonePlanetaryGearset.__init__`)
|
|
82
|
+
* @param options 构建选项(strategy / 特征字段,透传单体构造)
|
|
83
|
+
* @returns sun + planets[] + ring 的构建记录
|
|
84
|
+
*/
|
|
85
|
+
export declare function buildHerringbonePlanetaryGearset(kernel: GearKernel, params: PlanetaryGearsetParams, options?: BuildPlanetaryGearsetOptions): PlanetaryGearsetBuild;
|
|
86
|
+
/**
|
|
87
|
+
* 行星轮系的导出条目(sun → planet_00.. → ring)。
|
|
88
|
+
*
|
|
89
|
+
* @param build 行星轮系构建结果(成员可能为空——只有 `shafts_connected` 时存在)
|
|
90
|
+
* @returns 具名实体数组(名字进 STEP 产品名,供逐件等价比对)
|
|
91
|
+
*/
|
|
92
|
+
export declare function planetaryExportParts(build: PlanetaryGearsetBuild): Array<{
|
|
93
|
+
name: string;
|
|
94
|
+
solid: BrepHandle;
|
|
95
|
+
}>;
|
|
96
|
+
//# sourceMappingURL=planetary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planetary.d.ts","sourceRoot":"","sources":["../src/planetary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAC+B,KAAK,gBAAgB,EAC1D,MAAM,WAAW,CAAA;AAClB,OAAO,EAC0C,KAAK,oBAAoB,EACzE,MAAM,aAAa,CAAA;AAKpB,gDAAgD;AAChD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,iCAAiC;AACjC,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,iBAAiB;AACjB,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,WAAW,EAAE,gBAAgB,CAAA;IAC7B,cAAc,EAAE,gBAAgB,CAAA;IAChC,YAAY,EAAE,gBAAgB,CAAA;IAC9B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAgFvB;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAEvB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,qBAAqB,GAC3B,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAQ5C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* planetary — 行星轮系(PlanetaryGearset / HerringbonePlanetaryGearset)
|
|
3
|
+
*
|
|
4
|
+
* 对应 `ring_gear.py`:一个太阳轮 + n 个行星轮 + 一个内齿圈,按中心距均布装配。
|
|
5
|
+
* 三件各自用现成的实体构造(`buildSpurGearSolid` / `buildRingGearSolid` 及其人字变体),
|
|
6
|
+
* 差异只在**参数分配**与**装配定位**:
|
|
7
|
+
*
|
|
8
|
+
* ## 参数分配(PlanetaryGearset)
|
|
9
|
+
* - `ring_z = sun_z + planet_z·2`(内齿圈齿数由太阳/行星决定)
|
|
10
|
+
* - 太阳:`helix_angle`(给定)
|
|
11
|
+
* - 行星:`helix_angle = -helix_angle`(旋向相反)
|
|
12
|
+
* - 内齿圈:`helix_angle = -helix_angle`
|
|
13
|
+
* - `orbit_r = sun.r0 + planet.r0`(行星公转半径)
|
|
14
|
+
*
|
|
15
|
+
* ## 装配定位(逐件,复刻 Python `assemble`)
|
|
16
|
+
* - 太阳:仅在 `planet.z` 为**奇数**时绕 Z 转 `tau_sun/2`(否则恒等);
|
|
17
|
+
* - 行星 i:先绕 Z 自转 `tau_planet/2`,再平移到 `(cos(i·a)·orbit_r, sin(i·a)·orbit_r, 0)`,
|
|
18
|
+
* `a = 2π/n_planets`;
|
|
19
|
+
* - 内齿圈:绕 Z 转 `tau_ring/2`。
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ `cq.Location(Vector(p), Z, angle)` 的语义是「先绕原点 Z 转 angle,再平移 p」
|
|
22
|
+
* (见 `pairs.ts` 文件头实测结论),故行星定位是 **rotate → translate**,不是反过来。
|
|
23
|
+
*
|
|
24
|
+
* HerringbonePlanetaryGearset 继承 PlanetaryGearset,仅把 `gear_cls = HerringboneGear`、
|
|
25
|
+
* `ring_gear_cls = HerringboneRingGear`——即三件全部走人字齿构建。
|
|
26
|
+
*/
|
|
27
|
+
import { spurGearGeometry, ringGearGeometry, } from './profile.js';
|
|
28
|
+
import { buildSpurGearSolid, buildHerringboneGearSolid, } from './spur_gear.js';
|
|
29
|
+
import { buildRingGearSolid, buildHerringboneRingGearSolid } from './ring_gear.js';
|
|
30
|
+
const Z_AXIS = { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } };
|
|
31
|
+
/**
|
|
32
|
+
* 构建行星轮系(PlanetaryGearset / HerringbonePlanetaryGearset 共用)。
|
|
33
|
+
*
|
|
34
|
+
* @param kernel 原始 OCCT 内核
|
|
35
|
+
* @param params 轮系参数
|
|
36
|
+
* @param options 构造选项(`herringbone` 控制是否人字齿)
|
|
37
|
+
* @returns 太阳 / 行星数组 / 内齿圈 solid 与几何量
|
|
38
|
+
*/
|
|
39
|
+
export function buildPlanetaryGearset(kernel, params, options = {}) {
|
|
40
|
+
const herringbone = options.herringbone ?? false;
|
|
41
|
+
const ringZ = params.sun_teeth_number + params.planet_teeth_number * 2;
|
|
42
|
+
const sunParams = {
|
|
43
|
+
module: params.module,
|
|
44
|
+
teeth_number: params.sun_teeth_number,
|
|
45
|
+
width: params.width,
|
|
46
|
+
pressure_angle: params.pressure_angle,
|
|
47
|
+
helix_angle: params.helix_angle,
|
|
48
|
+
clearance: params.clearance,
|
|
49
|
+
backlash: params.backlash,
|
|
50
|
+
};
|
|
51
|
+
const planetParams = {
|
|
52
|
+
module: params.module,
|
|
53
|
+
teeth_number: params.planet_teeth_number,
|
|
54
|
+
width: params.width,
|
|
55
|
+
pressure_angle: params.pressure_angle,
|
|
56
|
+
helix_angle: -(params.helix_angle ?? 0.0),
|
|
57
|
+
clearance: params.clearance,
|
|
58
|
+
backlash: params.backlash,
|
|
59
|
+
};
|
|
60
|
+
const ringParams = {
|
|
61
|
+
module: params.module,
|
|
62
|
+
teeth_number: ringZ,
|
|
63
|
+
width: params.width,
|
|
64
|
+
rim_width: params.rim_width,
|
|
65
|
+
pressure_angle: params.pressure_angle,
|
|
66
|
+
helix_angle: -(params.helix_angle ?? 0.0),
|
|
67
|
+
clearance: params.clearance,
|
|
68
|
+
backlash: params.backlash,
|
|
69
|
+
};
|
|
70
|
+
const sunGeom = spurGearGeometry(sunParams);
|
|
71
|
+
const planetGeom = spurGearGeometry(planetParams);
|
|
72
|
+
const ringGeom = ringGearGeometry(ringParams);
|
|
73
|
+
const orbitR = sunGeom.r0 + planetGeom.r0;
|
|
74
|
+
const nPlanets = params.n_planets;
|
|
75
|
+
const out = {
|
|
76
|
+
planets: [], sunGeometry: sunGeom, planetGeometry: planetGeom,
|
|
77
|
+
ringGeometry: ringGeom, orbitR, nPlanets,
|
|
78
|
+
};
|
|
79
|
+
// 太阳:仅在 planet.z 为奇数时绕 Z 转 tau_sun/2
|
|
80
|
+
if (options.buildSun !== false) {
|
|
81
|
+
let sun = herringbone
|
|
82
|
+
? buildHerringboneGearSolid(kernel, sunParams, options)
|
|
83
|
+
: buildSpurGearSolid(kernel, sunParams, options);
|
|
84
|
+
if (params.planet_teeth_number % 2 !== 0) {
|
|
85
|
+
sun = kernel.rotate(sun, Z_AXIS, sunGeom.tau / 2);
|
|
86
|
+
}
|
|
87
|
+
out.sun = sun;
|
|
88
|
+
}
|
|
89
|
+
// 行星:先自转 tau_planet/2,再平移到均布位置
|
|
90
|
+
if (options.buildPlanets !== false && nPlanets > 0) {
|
|
91
|
+
const planetA = (Math.PI * 2.0) / nPlanets;
|
|
92
|
+
for (let i = 0; i < nPlanets; i++) {
|
|
93
|
+
let p = herringbone
|
|
94
|
+
? buildHerringboneGearSolid(kernel, planetParams, options)
|
|
95
|
+
: buildSpurGearSolid(kernel, planetParams, options);
|
|
96
|
+
p = kernel.rotate(p, Z_AXIS, planetGeom.tau / 2);
|
|
97
|
+
p = kernel.translate(p, Math.cos(i * planetA) * orbitR, Math.sin(i * planetA) * orbitR, 0);
|
|
98
|
+
out.planets.push(p);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 内齿圈:绕 Z 转 tau_ring/2
|
|
102
|
+
if (options.buildRing !== false) {
|
|
103
|
+
let ring = herringbone
|
|
104
|
+
? buildHerringboneRingGearSolid(kernel, ringParams, options)
|
|
105
|
+
: buildRingGearSolid(kernel, ringParams, options);
|
|
106
|
+
ring = kernel.rotate(ring, Z_AXIS, ringGeom.tau / 2);
|
|
107
|
+
out.ring = ring;
|
|
108
|
+
}
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 人字行星轮系(HerringbonePlanetaryGearset)——三件全部人字齿。
|
|
113
|
+
*
|
|
114
|
+
* @param kernel 原始 OCCT 内核
|
|
115
|
+
* @param params 行星轮系参数(逐字沿用 Python `HerringbonePlanetaryGearset.__init__`)
|
|
116
|
+
* @param options 构建选项(strategy / 特征字段,透传单体构造)
|
|
117
|
+
* @returns sun + planets[] + ring 的构建记录
|
|
118
|
+
*/
|
|
119
|
+
export function buildHerringbonePlanetaryGearset(kernel, params, options = {}) {
|
|
120
|
+
return buildPlanetaryGearset(kernel, params, { ...options, herringbone: true });
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 行星轮系的导出条目(sun → planet_00.. → ring)。
|
|
124
|
+
*
|
|
125
|
+
* @param build 行星轮系构建结果(成员可能为空——只有 `shafts_connected` 时存在)
|
|
126
|
+
* @returns 具名实体数组(名字进 STEP 产品名,供逐件等价比对)
|
|
127
|
+
*/
|
|
128
|
+
export function planetaryExportParts(build) {
|
|
129
|
+
const parts = [];
|
|
130
|
+
if (build.sun)
|
|
131
|
+
parts.push({ name: 'sun', solid: build.sun });
|
|
132
|
+
build.planets.forEach((p, i) => {
|
|
133
|
+
parts.push({ name: `planet_${String(i).padStart(2, '0')}`, solid: p });
|
|
134
|
+
});
|
|
135
|
+
if (build.ring)
|
|
136
|
+
parts.push({ name: 'ring', solid: build.ring });
|
|
137
|
+
return parts;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=planetary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planetary.js","sourceRoot":"","sources":["../src/planetary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* profile — SpurGear 齿廓与齿面点阵(cq_gears `spur_gear.py` 的数学部分)
|
|
3
|
+
*
|
|
4
|
+
* 只做**纯数学**,不碰内核:输出的是点集,可直接与 Python 侧
|
|
5
|
+
* `SpurGear.t_lflank_pts` 等内部数组逐点比对(见 `profile.test.ts`)。
|
|
6
|
+
*
|
|
7
|
+
* 参数名**逐字沿用 Python**(`module` / `teeth_number` / `pressure_angle` …),
|
|
8
|
+
* 这样 `regression_test_cases.json` 可以零转换直接喂进来。
|
|
9
|
+
*/
|
|
10
|
+
import { type Vec3 } from './math.js';
|
|
11
|
+
/** `GearBase` 的类级常量(cq_gears `spur_gear.py:27-39`),逐字保留。 */
|
|
12
|
+
export declare const GEAR_BASE_CONSTANTS: {
|
|
13
|
+
readonly ka: 1;
|
|
14
|
+
readonly kd: 1.25;
|
|
15
|
+
readonly curve_points: 20;
|
|
16
|
+
readonly surface_splines: 5;
|
|
17
|
+
readonly wire_comb_tol: 0.01;
|
|
18
|
+
readonly spline_approx_tol: 0.01;
|
|
19
|
+
readonly shell_sewing_tol: 0.01;
|
|
20
|
+
readonly isection_tol: 1e-7;
|
|
21
|
+
readonly spline_approx_min_deg: 3;
|
|
22
|
+
readonly spline_approx_max_deg: 8;
|
|
23
|
+
};
|
|
24
|
+
/** SpurGear 构造参数(参数名逐字沿用 Python `SpurGear.__init__`)。 */
|
|
25
|
+
export interface SpurGearParams {
|
|
26
|
+
module: number;
|
|
27
|
+
teeth_number: number;
|
|
28
|
+
width: number;
|
|
29
|
+
pressure_angle?: number;
|
|
30
|
+
helix_angle?: number;
|
|
31
|
+
clearance?: number;
|
|
32
|
+
backlash?: number;
|
|
33
|
+
addendum_coeff?: number | null;
|
|
34
|
+
dedendum_coeff?: number | null;
|
|
35
|
+
}
|
|
36
|
+
/** HyperbolicGear 构造参数(参数名逐字沿用 `crossed_helical_gear.py::HyperbolicGear.__init__`)。
|
|
37
|
+
*
|
|
38
|
+
* 与 `SpurGear` 不同:把 `helix_angle` 换成**显式** `twist_angle`(度),其余齿轮几何
|
|
39
|
+
* 仍是标准渐开线(它继承 `SpurGear`,`__init__` 内部以 `helix_angle=0.0` 调用父类)。 */
|
|
40
|
+
export interface HyperbolicGearParams {
|
|
41
|
+
module: number;
|
|
42
|
+
teeth_number: number;
|
|
43
|
+
width: number;
|
|
44
|
+
/** 喉部扭转角(度,cq `twist_angle`)。 */
|
|
45
|
+
twist_angle: number;
|
|
46
|
+
pressure_angle?: number;
|
|
47
|
+
clearance?: number;
|
|
48
|
+
backlash?: number;
|
|
49
|
+
}
|
|
50
|
+
/** HyperbolicGear 的全部派生几何量(复用 `SpurGearGeometry` 布局 + `throatR`)。 */
|
|
51
|
+
export type HyperbolicGearGeometry = SpurGearGeometry & {
|
|
52
|
+
throatR: number;
|
|
53
|
+
};
|
|
54
|
+
/** RingGear 构造参数(参数名逐字沿用 Python `RingGear.__init__`)。
|
|
55
|
+
*
|
|
56
|
+
* 注意:内部齿(ring)在 `e73874c` 沿用固定的 `ka=1.0 / kd=1.25`
|
|
57
|
+
* (`addendum_coeff` 仅 `SpurGear` 支持,见 commit `a6bedc0` 之后的改动),
|
|
58
|
+
* 所以这里没有 `addendum_coeff` / `dedendum_coeff`。 */
|
|
59
|
+
export interface RingGearParams {
|
|
60
|
+
module: number;
|
|
61
|
+
teeth_number: number;
|
|
62
|
+
width: number;
|
|
63
|
+
rim_width: number;
|
|
64
|
+
pressure_angle?: number;
|
|
65
|
+
helix_angle?: number;
|
|
66
|
+
clearance?: number;
|
|
67
|
+
backlash?: number;
|
|
68
|
+
}
|
|
69
|
+
/** SpurGear 的全部派生几何量与四段齿廓点集(`SpurGear.__init__` 的产物)。 */
|
|
70
|
+
export interface SpurGearGeometry {
|
|
71
|
+
/** 模数 m */
|
|
72
|
+
m: number;
|
|
73
|
+
/** 齿数 z */
|
|
74
|
+
z: number;
|
|
75
|
+
/** 压力角(弧度) */
|
|
76
|
+
a0: number;
|
|
77
|
+
clearance: number;
|
|
78
|
+
backlash: number;
|
|
79
|
+
/** 螺旋角(弧度) */
|
|
80
|
+
helixAngle: number;
|
|
81
|
+
width: number;
|
|
82
|
+
ka: number;
|
|
83
|
+
kd: number;
|
|
84
|
+
/** 分度圆直径 */
|
|
85
|
+
d0: number;
|
|
86
|
+
/** 齿顶高 */
|
|
87
|
+
adn: number;
|
|
88
|
+
/** 齿根高 */
|
|
89
|
+
ddn: number;
|
|
90
|
+
/** 齿顶圆直径 */
|
|
91
|
+
da: number;
|
|
92
|
+
/** 齿根圆直径 */
|
|
93
|
+
dd: number;
|
|
94
|
+
/** 分度圆齿厚 */
|
|
95
|
+
s0: number;
|
|
96
|
+
invA0: number;
|
|
97
|
+
/** 分度圆半径 */
|
|
98
|
+
r0: number;
|
|
99
|
+
/** 齿顶圆半径 */
|
|
100
|
+
ra: number;
|
|
101
|
+
/** 齿根圆半径 */
|
|
102
|
+
rd: number;
|
|
103
|
+
/** 基圆半径 */
|
|
104
|
+
rb: number;
|
|
105
|
+
/** 齿根过渡起始半径 max(rb, rd) */
|
|
106
|
+
rr: number;
|
|
107
|
+
/** 齿距角 2π/z */
|
|
108
|
+
tau: number;
|
|
109
|
+
/** 扭转角(弧度,= 0 当 helix_angle = 0) */
|
|
110
|
+
twistAngle: number;
|
|
111
|
+
/** 齿面点阵行数(helix_angle = 0 时为 2,否则 5) */
|
|
112
|
+
surfaceSplines: number;
|
|
113
|
+
curvePoints: number;
|
|
114
|
+
/** 左齿廓渐开线点集 */
|
|
115
|
+
t_lflank_pts: Vec3[];
|
|
116
|
+
/** 齿顶圆弧点集 */
|
|
117
|
+
t_tip_pts: Vec3[];
|
|
118
|
+
/** 右齿廓渐开线点集 */
|
|
119
|
+
t_rflank_pts: Vec3[];
|
|
120
|
+
/** 齿根圆弧点集 */
|
|
121
|
+
t_root_pts: Vec3[];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 计算 SpurGear 的全部几何量(`SpurGear.__init__` 的移植)。
|
|
125
|
+
*
|
|
126
|
+
* @throws 与 Python 同款校验:`addendum_coeff <= 0` / `dedendum_coeff <= 0` /
|
|
127
|
+
* 齿根圆直径 <= 0。
|
|
128
|
+
*
|
|
129
|
+
* @param params 齿轮参数(模数/齿数/宽度等)
|
|
130
|
+
* @returns 全部派生几何量
|
|
131
|
+
*/
|
|
132
|
+
export declare function spurGearGeometry(params: SpurGearParams): SpurGearGeometry;
|
|
133
|
+
/**
|
|
134
|
+
* 计算 HyperbolicGear(双曲面齿轮)的全部几何量
|
|
135
|
+
* (`crossed_helical_gear.py::HyperbolicGear.__init__` 的移植)。
|
|
136
|
+
*
|
|
137
|
+
* 它继承 `SpurGear`,**齿廓数学与 SpurGear 同构**——父类以 `helix_angle=0.0` 构造
|
|
138
|
+
* (故 `twistAngle=0` / `surfaceSplines=2`),然后本函数**覆盖**两处:
|
|
139
|
+
* - `self.twist_angle = radians(twist_angle)`:扭转角来自显式构造参数,而非 helix 推导;
|
|
140
|
+
* - `throat_r`(`throat_r = sqrt(rpx² + rpy²)`,`rpx=(r0+ln)/2`、`rpy=ht/2`、
|
|
141
|
+
* `ln=cos(twist)·r0`、`ht=sin(twist)·r0`):喉部半径,用于齿轮对装配的 X 向偏移。
|
|
142
|
+
*
|
|
143
|
+
* 返回的仍是 `SpurGearGeometry`(点集布局一致),可直接喂给 `buildGearSolid` /
|
|
144
|
+
* `toothFaceGrids`;`throatR` 作为扩展字段附带。
|
|
145
|
+
*
|
|
146
|
+
* @throws `twist_angle` 缺失(无默认值,与 Python 同款签名)由调用方负责。
|
|
147
|
+
*
|
|
148
|
+
* @param params 双曲面齿轮参数(模数/齿数/宽度/扭转角等)
|
|
149
|
+
* @returns `SpurGearGeometry` + `throatR`
|
|
150
|
+
*/
|
|
151
|
+
export declare function hyperbolicGearGeometry(params: HyperbolicGearParams): HyperbolicGearGeometry;
|
|
152
|
+
/**
|
|
153
|
+
* 计算 RingGear(内部齿)的全部几何量(`RingGear.__init__` 的移植)。
|
|
154
|
+
*
|
|
155
|
+
* 与 SpurGear 的关键差异(内部齿):
|
|
156
|
+
* - 齿顶圆 `da = d0 − 2·adn`(比分度圆小)、齿根圆 `dd = d0 + 2·ddn + 2·clearance`(比分度圆大);
|
|
157
|
+
* - 齿厚 `s0 = m·(π/2 + backlash·tan(a0))`(注意是 **+**,外齿是 −);
|
|
158
|
+
* - 渐开线 `r = linspace(ra, rr)`:从齿顶圆(内)走向齿根圆(外),与外齿方向相反;
|
|
159
|
+
* - 齿顶圆弧落在 `rd`(外齿是 `ra`)、齿根圆弧落在 `ra`(外齿是 `rd`)——齿尖朝外、齿根朝内。
|
|
160
|
+
*
|
|
161
|
+
* `ka` / `kd` 固定取 `GEAR_BASE_CONSTANTS`(内部齿在 `e73874c` 不支持 `addendum_coeff`)。
|
|
162
|
+
* 返回的仍是 `SpurGearGeometry`(点集布局一致),可直接喂给 `toothFaceGrids` /
|
|
163
|
+
* `buildToothFaces`,无需为 RingGear 另写齿面构造。
|
|
164
|
+
*
|
|
165
|
+
* @throws 与 Python 同款校验:齿根圆直径 <= 0。
|
|
166
|
+
*
|
|
167
|
+
* @param params 内部齿参数(模数/齿数/宽度/轮缘宽等)
|
|
168
|
+
* @returns 全部派生几何量(与 `SpurGearGeometry` 同构)
|
|
169
|
+
*/
|
|
170
|
+
export declare function ringGearGeometry(params: RingGearParams): SpurGearGeometry;
|
|
171
|
+
/** CrossedHelicalGear 构造参数(逐字沿用 `crossed_helical_gear.py::CrossedHelicalGear.__init__`)。
|
|
172
|
+
*
|
|
173
|
+
* 与 `SpurGear` 不同:**不接受** `addendum_coeff` / `dedendum_coeff`(源码该构造函数没有这两个形参)。 */
|
|
174
|
+
export interface CrossedHelicalGearParams {
|
|
175
|
+
module: number;
|
|
176
|
+
teeth_number: number;
|
|
177
|
+
width: number;
|
|
178
|
+
pressure_angle?: number;
|
|
179
|
+
helix_angle?: number;
|
|
180
|
+
clearance?: number;
|
|
181
|
+
backlash?: number;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 计算 CrossedHelicalGear(交错轴斜齿轮)的全部几何量
|
|
185
|
+
* (`crossed_helical_gear.py::CrossedHelicalGear.__init__` 的移植)。
|
|
186
|
+
*
|
|
187
|
+
* 与 SpurGear 的**根本差异**是「端面模数」而非「法向模数」:
|
|
188
|
+
* - 端面压力角 `at0 = arctan(a0 / cos(helix))`——⚠️ 源码里 `a0` 是**弧度值**直接除以
|
|
189
|
+
* `cos(helix)`(并非 `tan(a0)`),这是 cq_gears 的原始写法,必须逐字复刻,
|
|
190
|
+
* 否则 `rb` 会偏(实测 case30 rb 由 20.2898 偏到 20.1227);
|
|
191
|
+
* - 端面模数 `mt = m / cos(helix)`,分度圆直径 `d0 = mt·z`(SpurGear 是 `m·z`);
|
|
192
|
+
* - 分度圆齿厚 `s0 = r0·π/z`(SpurGear 是 `m·(π/2 − backlash·tan(a0))`);
|
|
193
|
+
* - 基圆半径 `rb = cos(at0)·r0`。
|
|
194
|
+
*
|
|
195
|
+
* 其余(渐开线采样、齿顶/齿根圆弧、扭转角、齿面行数)与 SpurGear 同构,返回的仍是
|
|
196
|
+
* `SpurGearGeometry`,可直接喂给 `toothFaceGrids` / `buildToothFaces`。
|
|
197
|
+
*
|
|
198
|
+
* 源码此处**没有**齿根圆直径校验(与 SpurGear 不同),故不复刻该抛错。
|
|
199
|
+
*
|
|
200
|
+
* @param params 交错轴斜齿轮参数(模数/齿数/宽度/螺旋角等)
|
|
201
|
+
* @returns 全部派生几何量(与 `SpurGearGeometry` 同构)
|
|
202
|
+
*/
|
|
203
|
+
export declare function crossedHelicalGearGeometry(params: CrossedHelicalGearParams): SpurGearGeometry;
|
|
204
|
+
/** BevelGear 构造参数(逐字沿用 `bevel_gear.py::BevelGear.__init__`)。
|
|
205
|
+
*
|
|
206
|
+
* ⚠️ 与 SpurGear 不同:用 `cone_angle`(分度锥角,度)而不是 `width`;
|
|
207
|
+
* 且 `cone_angle` / `face_width` 是**位置参数**(Python 签名里排在压力角之前)。 */
|
|
208
|
+
export interface BevelGearParams {
|
|
209
|
+
module: number;
|
|
210
|
+
teeth_number: number;
|
|
211
|
+
/** 分度锥角(度) */
|
|
212
|
+
cone_angle: number;
|
|
213
|
+
/** 齿宽(沿分度锥母线的长度) */
|
|
214
|
+
face_width: number;
|
|
215
|
+
pressure_angle?: number;
|
|
216
|
+
helix_angle?: number;
|
|
217
|
+
clearance?: number;
|
|
218
|
+
backlash?: number;
|
|
219
|
+
}
|
|
220
|
+
/** `BevelGear` 覆写 `GearBase` 的类常量(`bevel_gear.py:32`;`helix_angle = 0` 时被改成 2)。 */
|
|
221
|
+
export declare const BEVEL_SURFACE_SPLINES = 12;
|
|
222
|
+
/** BevelGear 的全部派生几何量与四段齿廓点集(`BevelGear.__init__` 的产物)。
|
|
223
|
+
*
|
|
224
|
+
* ⚠️ 四段点集与 SpurGear 不同:它们是**单位球面上的点**(`r = 1`),
|
|
225
|
+
* 真正落到齿面上要乘以每行的锥距 `r ∈ [tc_f, pc_f]`(见 `bevel_gear.ts`)。 */
|
|
226
|
+
export interface BevelGearGeometry {
|
|
227
|
+
/** 模数 m */
|
|
228
|
+
m: number;
|
|
229
|
+
/** 齿数 z */
|
|
230
|
+
z: number;
|
|
231
|
+
/** 压力角(弧度) */
|
|
232
|
+
a0: number;
|
|
233
|
+
clearance: number;
|
|
234
|
+
backlash: number;
|
|
235
|
+
/** 螺旋角(弧度) */
|
|
236
|
+
helixAngle: number;
|
|
237
|
+
/** 齿宽(锥距方向) */
|
|
238
|
+
faceWidth: number;
|
|
239
|
+
ka: number;
|
|
240
|
+
kd: number;
|
|
241
|
+
/** 分度圆半径 rp = m·z/2 */
|
|
242
|
+
rp: number;
|
|
243
|
+
/** 大球半径(= 分度锥母线长)gs_r = rp / sin(gamma_p) */
|
|
244
|
+
gsR: number;
|
|
245
|
+
/** 分度锥角(弧度) */
|
|
246
|
+
gammaP: number;
|
|
247
|
+
/** 基锥角(弧度) */
|
|
248
|
+
gammaB: number;
|
|
249
|
+
/** 面锥角(弧度) */
|
|
250
|
+
gammaF: number;
|
|
251
|
+
/** 根锥角(弧度) */
|
|
252
|
+
gammaR: number;
|
|
253
|
+
/** 齿距角 2π/z */
|
|
254
|
+
tau: number;
|
|
255
|
+
/** 锥顶到齿轮底面的距离 cone_h = cos(gamma_r)·gs_r */
|
|
256
|
+
coneH: number;
|
|
257
|
+
/** 齿镜像点方位角 mp_theta = π/z + 2·s_inv(gamma_b, gamma_p) */
|
|
258
|
+
mpTheta: number;
|
|
259
|
+
/** 扭转角(弧度;helix_angle = 0 时为 0) */
|
|
260
|
+
twistAngle: number;
|
|
261
|
+
/** 齿面点阵行数(helix_angle = 0 时为 2,否则 12) */
|
|
262
|
+
surfaceSplines: number;
|
|
263
|
+
curvePoints: number;
|
|
264
|
+
/** 左齿廓渐开线点集(**单位球面**) */
|
|
265
|
+
t_lflank_pts: Vec3[];
|
|
266
|
+
/** 齿顶圆弧点集(**单位球面**) */
|
|
267
|
+
t_tip_pts: Vec3[];
|
|
268
|
+
/** 右齿廓渐开线点集(**单位球面**) */
|
|
269
|
+
t_rflank_pts: Vec3[];
|
|
270
|
+
/** 齿根圆弧点集(**单位球面**) */
|
|
271
|
+
t_root_pts: Vec3[];
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* 计算 BevelGear(锥齿轮)的全部几何量(`BevelGear.__init__` 的移植)。
|
|
275
|
+
*
|
|
276
|
+
* 与 SpurGear 的根本差异:齿廓画在**单位球面**上(球面渐开线),
|
|
277
|
+
* 齿面是「球面齿廓 × 锥距」的直纹面;`gamma_b/_f/_r` 分别是基/面/根锥角,
|
|
278
|
+
* 高度一律用 `r·cos(gamma)` 折算到齿轮轴(+Z)上。
|
|
279
|
+
*
|
|
280
|
+
* @throws `gs_r <= face_width` 时抛 RangeError(Python 同款 assert);
|
|
281
|
+
* `twist_angle` 为 NaN 时抛 Error(Python 同款 assert)。
|
|
282
|
+
*
|
|
283
|
+
* @param params 锥齿轮参数(模数/齿数/锥角/齿宽等)
|
|
284
|
+
* @returns 全部派生几何量
|
|
285
|
+
*/
|
|
286
|
+
export declare function bevelGearGeometry(params: BevelGearParams): BevelGearGeometry;
|
|
287
|
+
/** 四段齿廓的名字(`_build_tooth_faces` 的迭代顺序,勿改)。 */
|
|
288
|
+
export declare const TOOTH_SEGMENTS: readonly ["lflank", "tip", "rflank", "root"];
|
|
289
|
+
/** 单个齿廓段的名字。 */
|
|
290
|
+
export type ToothSegment = typeof TOOTH_SEGMENTS[number];
|
|
291
|
+
/**
|
|
292
|
+
* 取某段齿廓的基础点集(z=0 平面上的轮廓点,与 Python 内部数组逐点一致)。
|
|
293
|
+
*
|
|
294
|
+
* @param g 已计算的齿轮几何量
|
|
295
|
+
* @param seg 齿廓段名
|
|
296
|
+
* @returns 该段的点集
|
|
297
|
+
*/
|
|
298
|
+
export declare function segmentPoints(g: SpurGearGeometry | WormGeometry | BevelGearGeometry, seg: ToothSegment): Vec3[];
|
|
299
|
+
/** 一个齿面段的行 × 列点阵。 */
|
|
300
|
+
export interface ToothGrid {
|
|
301
|
+
segment: ToothSegment;
|
|
302
|
+
rows: number;
|
|
303
|
+
cols: number;
|
|
304
|
+
/** 行主序,`points[r][c]` */
|
|
305
|
+
points: Vec3[][];
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* 复现 `SpurGear._build_tooth_faces` 的点阵构造。
|
|
309
|
+
*
|
|
310
|
+
* 注意扭转用 `pts @ rotation_matrix(...)`(行向量左乘 ⇒ 实际转 −a,见 `math.ts` 顶部说明),
|
|
311
|
+
* 与 Python 逐字一致。
|
|
312
|
+
*
|
|
313
|
+
* @param twistA 起始扭转角(弧度)
|
|
314
|
+
* @param twistB 终止扭转角(弧度)
|
|
315
|
+
* @param zPos 起始 z
|
|
316
|
+
* @param width 该段宽度
|
|
317
|
+
* @param g 齿轮几何量
|
|
318
|
+
* @returns 4 段齿廓各自的 row×col 点阵
|
|
319
|
+
*/
|
|
320
|
+
export declare function toothFaceGrids(g: SpurGearGeometry, twistA?: number, twistB?: number, zPos?: number, width?: number): ToothGrid[];
|
|
321
|
+
/**
|
|
322
|
+
* 按 cq_gears 类名分派到对应的齿廓几何计算(manifest 的 `class` 字段直接驱动)。
|
|
323
|
+
*
|
|
324
|
+
* `HerringboneGear` 继承 `SpurGear`、`HerringboneRingGear` 继承 `RingGear`,
|
|
325
|
+
* 其**齿廓数学**与父类相同(人字形的差异只体现在建面阶段的 `_build_tooth_faces` 覆盖),
|
|
326
|
+
* 故分派到同一函数。
|
|
327
|
+
*
|
|
328
|
+
* @throws 未支持的类名直接抛错(不静默退回 SpurGear,避免掩盖分派错误)
|
|
329
|
+
*
|
|
330
|
+
* @param className cq_gears 类名(`SpurGear` / `RingGear` / `CrossedHelicalGear` …)
|
|
331
|
+
* @param args 该类构造函数的参数(逐字取自 manifest)
|
|
332
|
+
* @returns 全部派生几何量
|
|
333
|
+
*/
|
|
334
|
+
export declare function gearGeometryForClass(className: string, args: Record<string, unknown>): SpurGearGeometry | WormGeometry | BevelGearGeometry | HyperbolicGearGeometry;
|
|
335
|
+
/** RackGear 构造参数(参数名逐字沿用 Python `RackGear.__init__`)。 */
|
|
336
|
+
export interface RackGearParams {
|
|
337
|
+
module: number;
|
|
338
|
+
length: number;
|
|
339
|
+
width: number;
|
|
340
|
+
height: number;
|
|
341
|
+
pressure_angle?: number;
|
|
342
|
+
helix_angle?: number;
|
|
343
|
+
clearance?: number;
|
|
344
|
+
backlash?: number;
|
|
345
|
+
}
|
|
346
|
+
/** RackGear 的全部派生几何量与四段齿廓点集(`RackGear.__init__` 的产物)。 */
|
|
347
|
+
export interface RackGearGeometry {
|
|
348
|
+
m: number;
|
|
349
|
+
/** 压力角(弧度) */
|
|
350
|
+
a0: number;
|
|
351
|
+
clearance: number;
|
|
352
|
+
backlash: number;
|
|
353
|
+
/** 螺旋角(弧度) */
|
|
354
|
+
helixAngle: number;
|
|
355
|
+
width: number;
|
|
356
|
+
length: number;
|
|
357
|
+
height: number;
|
|
358
|
+
/** 齿顶线(+y) */
|
|
359
|
+
la: number;
|
|
360
|
+
/** 齿根线(−y) */
|
|
361
|
+
ld: number;
|
|
362
|
+
/** 分度线上的齿厚(x 向) */
|
|
363
|
+
s0: number;
|
|
364
|
+
/** 齿廓总高(la − ld) */
|
|
365
|
+
toothHeight: number;
|
|
366
|
+
/** 齿数 z = ceil(length / (π·m)) */
|
|
367
|
+
z: number;
|
|
368
|
+
t_lflank_pts: Vec3[];
|
|
369
|
+
t_tip_pts: Vec3[];
|
|
370
|
+
t_rflank_pts: Vec3[];
|
|
371
|
+
t_root_pts: Vec3[];
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* 计算 RackGear 的全部几何量(`RackGear.__init__` 的移植)。
|
|
375
|
+
*
|
|
376
|
+
* 齿条齿廓是**梯形直线段**(每段只有 2 个点),沿 X 以 π·m 为周期重复;
|
|
377
|
+
* 齿深方向是 +y(la 在上、ld 在下),实体沿 Z 挤出 width。
|
|
378
|
+
* `ka`/`kd` 沿用 GearBase 类常量(RackGear 构造函数不接受 addendum/dedendum 覆盖)。
|
|
379
|
+
*
|
|
380
|
+
* @param params 齿条参数(模数/长度/宽/高/螺旋角等)
|
|
381
|
+
* @returns 全部派生几何量
|
|
382
|
+
*/
|
|
383
|
+
export declare function rackGearGeometry(params: RackGearParams): RackGearGeometry;
|
|
384
|
+
/** Worm 构造参数(参数名逐字沿用 Python `Worm.__init__`)。 */
|
|
385
|
+
export interface WormParams {
|
|
386
|
+
module: number;
|
|
387
|
+
/** 导程角(度) */
|
|
388
|
+
lead_angle: number;
|
|
389
|
+
/** 蜗杆头数 */
|
|
390
|
+
n_threads: number;
|
|
391
|
+
/** 蜗杆长度(轴向,沿 X) */
|
|
392
|
+
length: number;
|
|
393
|
+
pressure_angle?: number;
|
|
394
|
+
clearance?: number;
|
|
395
|
+
backlash?: number;
|
|
396
|
+
}
|
|
397
|
+
/** Worm 的全部派生几何量与四段齿廓点集(`Worm.__init__` 的产物)。 */
|
|
398
|
+
export interface WormGeometry {
|
|
399
|
+
m: number;
|
|
400
|
+
/** 压力角(弧度) */
|
|
401
|
+
a0: number;
|
|
402
|
+
clearance: number;
|
|
403
|
+
backlash: number;
|
|
404
|
+
/** 导程角(弧度) */
|
|
405
|
+
leadAngle: number;
|
|
406
|
+
length: number;
|
|
407
|
+
/** 头数 */
|
|
408
|
+
nThreads: number;
|
|
409
|
+
/** 分度圆半径 */
|
|
410
|
+
r0: number;
|
|
411
|
+
/** 齿顶圆半径 */
|
|
412
|
+
ra: number;
|
|
413
|
+
/** 齿根圆半径 */
|
|
414
|
+
rd: number;
|
|
415
|
+
/** 齿顶线(+y) */
|
|
416
|
+
la: number;
|
|
417
|
+
/** 齿根线(−y) */
|
|
418
|
+
ld: number;
|
|
419
|
+
/** 分度线上的齿厚(x 向,半齿距) */
|
|
420
|
+
s0: number;
|
|
421
|
+
/** 齿廓总高(la − ld,Python `self.tooth_height`) */
|
|
422
|
+
toothHeight: number;
|
|
423
|
+
t_lflank_pts: Vec3[];
|
|
424
|
+
t_tip_pts: Vec3[];
|
|
425
|
+
t_rflank_pts: Vec3[];
|
|
426
|
+
t_root_pts: Vec3[];
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* 计算 Worm 的全部几何量(`Worm.__init__` 的移植)。
|
|
430
|
+
*
|
|
431
|
+
* 齿廓公式与 `RackGear.__init__` **逐字同构**(梯形直线段 p1–p5)——cq 里 Worm
|
|
432
|
+
* 的齿廓本来就是「展开到分度圆柱切平面上的齿条」。差异只在分度半径:
|
|
433
|
+
* `d0 = n_threads·m / |tan(lead_angle)|`,以及半径向的 ra/rd。
|
|
434
|
+
*
|
|
435
|
+
* @param params 蜗杆参数(模数/导程角/头数/长度等)
|
|
436
|
+
* @returns 全部派生几何量
|
|
437
|
+
*/
|
|
438
|
+
export declare function wormGeometry(params: WormParams): WormGeometry;
|
|
439
|
+
//# sourceMappingURL=profile.d.ts.map
|