@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/index.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
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 { ok, err, CONTRACT_VERSION } from '@faicad/faijs';
|
|
18
|
+
import { getGearKernel } from '@faicad/cq-compat';
|
|
19
|
+
import { buildSpurGearSolid, buildHerringboneGearSolid, buildHyperbolicGearSolid, } from './spur_gear.js';
|
|
20
|
+
import { buildRingGearSolid, buildHerringboneRingGearSolid, } from './ring_gear.js';
|
|
21
|
+
import { buildCrossedHelicalSolid } from './crossed_helical_gear.js';
|
|
22
|
+
import { buildRackGearSolid } from './rack_gear.js';
|
|
23
|
+
import { buildWormSolid } from './worm_gear.js';
|
|
24
|
+
import { buildBevelGearSolid } from './bevel_gear.js';
|
|
25
|
+
import { buildBevelGearPair, } from './pairs.js';
|
|
26
|
+
import { buildCrossedGearPair, buildHyperbolicGearPair, } from './crossed_pair.js';
|
|
27
|
+
import { buildPlanetaryGearset, buildHerringbonePlanetaryGearset, } from './planetary.js';
|
|
28
|
+
/** 库契约版本(与 faijs 引擎对齐,勿硬编码)。 */
|
|
29
|
+
export const contractVersion = CONTRACT_VERSION;
|
|
30
|
+
/**
|
|
31
|
+
* 统一内核执行包装:取单例内核、运行构建、失败转 `err`。
|
|
32
|
+
*
|
|
33
|
+
* @param fn 接收原始内核、返回 solid 或装配
|
|
34
|
+
* @returns `Result<T>`
|
|
35
|
+
*/
|
|
36
|
+
async function run(fn) {
|
|
37
|
+
try {
|
|
38
|
+
const kernel = await getGearKernel();
|
|
39
|
+
return ok(fn(kernel));
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
return err(e instanceof Error ? e.message : String(e));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// ── A 族:直纹/扭纹齿面(网格样条曲面)──────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* SpurGear(直齿圆柱齿轮)。
|
|
48
|
+
*
|
|
49
|
+
* @param params 齿轮参数(逐字沿用 Python `SpurGear.__init__`)
|
|
50
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
51
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
52
|
+
*/
|
|
53
|
+
export function spurGear(params, options = {}) {
|
|
54
|
+
return run((k) => buildSpurGearSolid(k, params, options));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* HerringboneGear(人字齿圆柱齿轮)。
|
|
58
|
+
*
|
|
59
|
+
* @param params 齿轮参数(逐字沿用 Python `HerringboneGear.__init__`)
|
|
60
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
61
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
62
|
+
*/
|
|
63
|
+
export function herringboneGear(params, options = {}) {
|
|
64
|
+
return run((k) => buildHerringboneGearSolid(k, params, options));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* RingGear(内齿圈)。
|
|
68
|
+
*
|
|
69
|
+
* @param params 齿轮参数(逐字沿用 Python `RingGear.__init__`)
|
|
70
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
71
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
72
|
+
*/
|
|
73
|
+
export function ringGear(params, options = {}) {
|
|
74
|
+
return run((k) => buildRingGearSolid(k, params, options));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* HerringboneRingGear(人字内齿圈)。
|
|
78
|
+
*
|
|
79
|
+
* @param params 齿轮参数(逐字沿用 Python `HerringboneRingGear.__init__`)
|
|
80
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
81
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
82
|
+
*/
|
|
83
|
+
export function herringboneRingGear(params, options = {}) {
|
|
84
|
+
return run((k) => buildHerringboneRingGearSolid(k, params, options));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* CrossedHelicalGear(交错轴斜齿轮,单体)。
|
|
88
|
+
*
|
|
89
|
+
* @param params 齿轮参数(逐字沿用 Python `CrossedHelicalGear.__init__`)
|
|
90
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
91
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
92
|
+
*/
|
|
93
|
+
export function crossedHelicalGear(params, options = {}) {
|
|
94
|
+
return run((k) => buildCrossedHelicalSolid(k, params, options));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* HyperbolicGear(双曲面齿轮,单体)。
|
|
98
|
+
*
|
|
99
|
+
* @param params 齿轮参数(逐字沿用 Python `HyperbolicGear.__init__`)
|
|
100
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
101
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
102
|
+
*/
|
|
103
|
+
export function hyperbolicGear(params, options = {}) {
|
|
104
|
+
return run((k) => buildHyperbolicGearSolid(k, params, options));
|
|
105
|
+
}
|
|
106
|
+
// ── B 族:球面渐开线(BevelGear)───────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* BevelGear(锥齿轮,单体)。
|
|
109
|
+
*
|
|
110
|
+
* @param params 齿轮参数(逐字沿用 Python `BevelGear.__init__`)
|
|
111
|
+
* @param options 构建选项(齿面策略 / bore_d / trim)
|
|
112
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
113
|
+
*/
|
|
114
|
+
export function bevelGear(params, options = {}) {
|
|
115
|
+
return run((k) => buildBevelGearSolid(k, params, options));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* BevelGearPair(锥齿轮副,装配体)。
|
|
119
|
+
*
|
|
120
|
+
* @param params 齿轮副参数(逐字沿用 Python `BevelGearPair.__init__`)
|
|
121
|
+
* @param options 构建选项(齿面策略 / bore_d / trim)
|
|
122
|
+
* @returns `Result<BevelGearPairOutput>`——具名记录,失败转 `err`
|
|
123
|
+
*/
|
|
124
|
+
export function bevelGearPair(params, options = {}) {
|
|
125
|
+
return run((k) => {
|
|
126
|
+
const b = buildBevelGearPair(k, params, options);
|
|
127
|
+
return { gear: b.gear, pinion: b.pinion };
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
;
|
|
131
|
+
bevelGearPair.outputs = ['gear', 'pinion'];
|
|
132
|
+
// ── C 族:齿条 / 蜗杆 ───────────────────────────────────────────────────────────
|
|
133
|
+
/**
|
|
134
|
+
* RackGear(齿条)。
|
|
135
|
+
*
|
|
136
|
+
* @param params 齿条参数(逐字沿用 Python `RackGear.__init__`)
|
|
137
|
+
* @param options 构建选项(齿面策略)
|
|
138
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
139
|
+
*/
|
|
140
|
+
export function rackGear(params, options = {}) {
|
|
141
|
+
return run((k) => buildRackGearSolid(k, params, options));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* HerringboneRackGear(人字齿条)。
|
|
145
|
+
*
|
|
146
|
+
* @param params 齿条参数(逐字沿用 Python `HerringboneRackGear.__init__`)
|
|
147
|
+
* @param options 构建选项(齿面策略;内部强制 `herringbone: true`)
|
|
148
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
149
|
+
*/
|
|
150
|
+
export function herringboneRackGear(params, options = {}) {
|
|
151
|
+
return run((k) => buildRackGearSolid(k, params, { ...options, herringbone: true }));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Worm(蜗杆)。
|
|
155
|
+
*
|
|
156
|
+
* @param params 蜗杆参数(逐字沿用 Python `Worm.__init__`)
|
|
157
|
+
* @param options 构建选项(策略默认 grid-approx / 缝合与组线容差 / boreD)
|
|
158
|
+
* @returns `Result<BrepHandle>`——solid 句柄,失败转 `err`
|
|
159
|
+
*/
|
|
160
|
+
export function worm(params, options = {}) {
|
|
161
|
+
return run((k) => buildWormSolid(k, params, options));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* CrossedGearPair(交错轴斜齿轮副,装配体)。
|
|
165
|
+
*
|
|
166
|
+
* @param params 齿轮副参数(逐字沿用 Python `CrossedGearPair.__init__`)
|
|
167
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
168
|
+
* @returns `Result<CrossedGearPairOutput>`——具名记录,失败转 `err`
|
|
169
|
+
*/
|
|
170
|
+
export function crossedGearPair(params, options = {}) {
|
|
171
|
+
return run((k) => {
|
|
172
|
+
const b = buildCrossedGearPair(k, params, options);
|
|
173
|
+
return { gear1: b.gear1, gear2: b.gear2 };
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
;
|
|
177
|
+
crossedGearPair.outputs = ['gear1', 'gear2'];
|
|
178
|
+
/**
|
|
179
|
+
* HyperbolicGearPair(双曲面齿轮副,装配体)。
|
|
180
|
+
*
|
|
181
|
+
* @param params 齿轮副参数(逐字沿用 Python `HyperbolicGearPair.__init__`)
|
|
182
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
183
|
+
* @returns `Result<CrossedGearPairOutput>`——具名记录,失败转 `err`
|
|
184
|
+
*/
|
|
185
|
+
export function hyperbolicGearPair(params, options = {}) {
|
|
186
|
+
return run((k) => {
|
|
187
|
+
const b = buildHyperbolicGearPair(k, params, options);
|
|
188
|
+
return { gear1: b.gear1, gear2: b.gear2 };
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
;
|
|
192
|
+
hyperbolicGearPair.outputs = ['gear1', 'gear2'];
|
|
193
|
+
/**
|
|
194
|
+
* PlanetaryGearset(行星轮系,装配体)。
|
|
195
|
+
*
|
|
196
|
+
* @param params 轮系参数(逐字沿用 Python `PlanetaryGearset.__init__`)
|
|
197
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
198
|
+
* @returns `Result<PlanetaryGearsetOutput>`——具名记录,失败转 `err`
|
|
199
|
+
*/
|
|
200
|
+
export function planetaryGearset(params, options = {}) {
|
|
201
|
+
return run((k) => {
|
|
202
|
+
const b = buildPlanetaryGearset(k, params, options);
|
|
203
|
+
return { sun: b.sun, planets: b.planets, ring: b.ring };
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
;
|
|
207
|
+
planetaryGearset.outputs = ['sun', 'planets', 'ring'];
|
|
208
|
+
/**
|
|
209
|
+
* HerringbonePlanetaryGearset(人字行星轮系,装配体)。
|
|
210
|
+
*
|
|
211
|
+
* @param params 轮系参数(逐字沿用 Python `HerringbonePlanetaryGearset.__init__`)
|
|
212
|
+
* @param options 构建选项(齿面策略 / 特征字段)
|
|
213
|
+
* @returns `Result<PlanetaryGearsetOutput>`——具名记录,失败转 `err`
|
|
214
|
+
*/
|
|
215
|
+
export function herringbonePlanetaryGearset(params, options = {}) {
|
|
216
|
+
return run((k) => {
|
|
217
|
+
const b = buildHerringbonePlanetaryGearset(k, params, options);
|
|
218
|
+
return { sun: b.sun, planets: b.planets, ring: b.ring };
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
;
|
|
222
|
+
herringbonePlanetaryGearset.outputs = ['sun', 'planets', 'ring'];
|
|
223
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/math.d.ts
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* math — cq_gears `utils.py` 的 numpy 子集(零依赖,TS 手写)
|
|
3
|
+
*
|
|
4
|
+
* 约定(**与 Python 逐字对齐,不要"修正"**):
|
|
5
|
+
*
|
|
6
|
+
* - `rotationMatrix(axis, alpha)` 返回 cq 的同款 Rodrigues 矩阵 R(列向量约定 `p' = R·p`)。
|
|
7
|
+
* - cq 里齿轮点集用的是 `pts @ r_mat`(**行向量**左乘),等价于 `Rᵀ·p`,即**绕轴转 −alpha**。
|
|
8
|
+
* 这不是笔误——`spur_gear.py::_build_tooth_faces` 就是这么写的,实测
|
|
9
|
+
* (`spur-helix15` 参考数据)确认齿面扭转方向与 `−twist_angle` 一致。
|
|
10
|
+
* 所以本模块同时提供 `applyRowMatrix()`(忠实复刻)与 `rotateRows()`(语义命名)。
|
|
11
|
+
*/
|
|
12
|
+
/** 三维点 / 向量(与 `BrepVec3` 同构)。 */
|
|
13
|
+
export interface Vec3 {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
z: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 构造一个 `Vec3`。
|
|
20
|
+
*
|
|
21
|
+
* @param x x 分量
|
|
22
|
+
* @param y y 分量
|
|
23
|
+
* @param z z 分量
|
|
24
|
+
* @returns 三维向量
|
|
25
|
+
*/
|
|
26
|
+
export declare const vec3: (x: number, y: number, z: number) => Vec3;
|
|
27
|
+
/**
|
|
28
|
+
* 向量加法。
|
|
29
|
+
*
|
|
30
|
+
* @param a 左操作数
|
|
31
|
+
* @param b 右操作数
|
|
32
|
+
* @returns `a + b`
|
|
33
|
+
*/
|
|
34
|
+
export declare const add: (a: Vec3, b: Vec3) => Vec3;
|
|
35
|
+
/**
|
|
36
|
+
* 向量减法。
|
|
37
|
+
*
|
|
38
|
+
* @param a 左操作数
|
|
39
|
+
* @param b 右操作数
|
|
40
|
+
* @returns `a - b`
|
|
41
|
+
*/
|
|
42
|
+
export declare const sub: (a: Vec3, b: Vec3) => Vec3;
|
|
43
|
+
/**
|
|
44
|
+
* 标量乘法。
|
|
45
|
+
*
|
|
46
|
+
* @param a 向量
|
|
47
|
+
* @param k 标量
|
|
48
|
+
* @returns `k·a`
|
|
49
|
+
*/
|
|
50
|
+
export declare const scale: (a: Vec3, k: number) => Vec3;
|
|
51
|
+
/**
|
|
52
|
+
* 点积。
|
|
53
|
+
*
|
|
54
|
+
* @param a 左操作数
|
|
55
|
+
* @param b 右操作数
|
|
56
|
+
* @returns `a·b`
|
|
57
|
+
*/
|
|
58
|
+
export declare const dot: (a: Vec3, b: Vec3) => number;
|
|
59
|
+
/**
|
|
60
|
+
* 叉积。
|
|
61
|
+
*
|
|
62
|
+
* @param a 左操作数
|
|
63
|
+
* @param b 右操作数
|
|
64
|
+
* @returns `a×b`
|
|
65
|
+
*/
|
|
66
|
+
export declare const cross: (a: Vec3, b: Vec3) => Vec3;
|
|
67
|
+
/**
|
|
68
|
+
* 向量模长。
|
|
69
|
+
*
|
|
70
|
+
* @param a 向量
|
|
71
|
+
* @returns 模长
|
|
72
|
+
*/
|
|
73
|
+
export declare const norm: (a: Vec3) => number;
|
|
74
|
+
/**
|
|
75
|
+
* 归一化;零向量返回零向量(避免除零)。
|
|
76
|
+
*
|
|
77
|
+
* @param a 向量
|
|
78
|
+
* @returns 单位向量(零向量输入返回零向量)
|
|
79
|
+
*/
|
|
80
|
+
export declare const normalize: (a: Vec3) => Vec3;
|
|
81
|
+
/**
|
|
82
|
+
* `np.linspace(a, b, n)` —— 闭区间,含两端。
|
|
83
|
+
*
|
|
84
|
+
* @param a 起始值
|
|
85
|
+
* @param b 结束值
|
|
86
|
+
* @param n 点数
|
|
87
|
+
* @returns n 个等距点(n <= 1 时只含 a)
|
|
88
|
+
*/
|
|
89
|
+
export declare function linspace(a: number, b: number, n: number): number[];
|
|
90
|
+
/**
|
|
91
|
+
* 弧度夹到 [0, 2π)。
|
|
92
|
+
*
|
|
93
|
+
* @param t 任意弧度角
|
|
94
|
+
* @returns 归一化后的弧度角
|
|
95
|
+
*/
|
|
96
|
+
export declare function normalizeAngle2pi(t: number): number;
|
|
97
|
+
/** 3×3 矩阵(行主序)。 */
|
|
98
|
+
export type Mat3 = number[][];
|
|
99
|
+
/**
|
|
100
|
+
* `cq_gears.utils.rotation_matrix` 的逐字移植(Rodrigues,列向量约定)。
|
|
101
|
+
*
|
|
102
|
+
* @param axis 旋转轴(无需归一化,内部归一)
|
|
103
|
+
* @param alpha 旋转角(弧度)
|
|
104
|
+
* @returns 3×3 Rodrigues 旋转矩阵(行主序)
|
|
105
|
+
*/
|
|
106
|
+
export declare function rotationMatrix(axis: Vec3, alpha: number): Mat3;
|
|
107
|
+
/**
|
|
108
|
+
* 行向量左乘:`pts @ m`(cq 的实际用法)。
|
|
109
|
+
*
|
|
110
|
+
* 结果第 j 分量 = Σᵢ pᵢ·m[i][j],等价于 `mᵀ · p`。
|
|
111
|
+
*
|
|
112
|
+
* @param points 行向量点集
|
|
113
|
+
* @param m 3×3 矩阵
|
|
114
|
+
* @returns 变换后的点集
|
|
115
|
+
*/
|
|
116
|
+
export declare function applyRowMatrix(points: Vec3[], m: Mat3): Vec3[];
|
|
117
|
+
/**
|
|
118
|
+
* 语义化包装:`applyRowMatrix(pts, rotationMatrix(axis, alpha))`。
|
|
119
|
+
*
|
|
120
|
+
* ⚠️ 因为 cq 用行向量左乘,实际旋转角是 **−alpha**。
|
|
121
|
+
*
|
|
122
|
+
* @param points 点集
|
|
123
|
+
* @param axis 旋转轴
|
|
124
|
+
* @param alpha 名义旋转角(弧度,实际为 −alpha)
|
|
125
|
+
* @returns 旋转后的点集
|
|
126
|
+
*/
|
|
127
|
+
export declare function rotateRows(points: Vec3[], axis: Vec3, alpha: number): Vec3[];
|
|
128
|
+
/**
|
|
129
|
+
* 真正按 +alpha 旋转(标准列向量约定),用于 TS 侧需要正向旋转的场景。
|
|
130
|
+
*
|
|
131
|
+
* @param points 点集
|
|
132
|
+
* @param axis 旋转轴
|
|
133
|
+
* @param alpha 旋转角(弧度)
|
|
134
|
+
* @returns 旋转后的点集
|
|
135
|
+
*/
|
|
136
|
+
export declare function rotatePoints(points: Vec3[], axis: Vec3, alpha: number): Vec3[];
|
|
137
|
+
/**
|
|
138
|
+
* `cq_gears.utils.sphere_to_cartesian` 的逐字移植:球坐标 → 笛卡尔。
|
|
139
|
+
*
|
|
140
|
+
* ⚠️ 注意极点角 `gamma` 是**从 +Z 轴量起**(`z = r·cos(gamma)`),
|
|
141
|
+
* 而不是数学习惯里从 XY 平面量起的仰角——BevelGear 的整套公式都建立在这个约定上。
|
|
142
|
+
*
|
|
143
|
+
* @param r 球半径
|
|
144
|
+
* @param gamma 极角(弧度,自 +Z 轴)
|
|
145
|
+
* @param theta 方位角(弧度)
|
|
146
|
+
* @returns 笛卡尔坐标
|
|
147
|
+
*/
|
|
148
|
+
export declare function sphereToCartesian(r: number, gamma: number, theta: number): Vec3;
|
|
149
|
+
/**
|
|
150
|
+
* `cq_gears.utils.s_inv` 的逐字移植:球面渐开线(给定极角 → 方位角)。
|
|
151
|
+
*
|
|
152
|
+
* `phi = arccos(tan(gamma0)/tan(gamma))`;
|
|
153
|
+
* `return arccos(cos(gamma)/cos(gamma0))/sin(gamma0) − phi`。
|
|
154
|
+
*
|
|
155
|
+
* 定义域外(`|tan(gamma0)/tan(gamma)| > 1`)与 Python 的 numpy 一样返回 NaN——
|
|
156
|
+
* 由调用方决定是否报错,本函数不静默替换。
|
|
157
|
+
*
|
|
158
|
+
* @param gamma0 基锥极角(弧度)
|
|
159
|
+
* @param gamma 曲线上点的极角(弧度)
|
|
160
|
+
* @returns 该点的方位角(弧度)
|
|
161
|
+
*/
|
|
162
|
+
export declare function sInv(gamma0: number, gamma: number): number;
|
|
163
|
+
/**
|
|
164
|
+
* `cq_gears.utils.s_arc` 的逐字移植:球面上的一段圆弧。
|
|
165
|
+
*
|
|
166
|
+
* Python 侧是 `cos(t)·a + sin(t)·(k×a) + (k·a)(1−cos t)·k`(`a` = 球心到弧心方向
|
|
167
|
+
* 偏移 `r_delta` 后的单位向量,`k` = 弧心的单位向量),再整体乘球半径。
|
|
168
|
+
*
|
|
169
|
+
* @param sr 球半径
|
|
170
|
+
* @param cGamma 弧心的极角(弧度)
|
|
171
|
+
* @param cTheta 弧心的方位角(弧度)
|
|
172
|
+
* @param rDelta 弧心与弧上任一点的夹角(弧度)
|
|
173
|
+
* @param start 起始角(弧度)
|
|
174
|
+
* @param end 终止角(弧度)
|
|
175
|
+
* @param n 点数(含两端)
|
|
176
|
+
* @returns 弧上 n 个点
|
|
177
|
+
*/
|
|
178
|
+
export declare function sArc(sr: number, cGamma: number, cTheta: number, rDelta: number, start: number, end: number, n?: number): Vec3[];
|
|
179
|
+
/**
|
|
180
|
+
* `cq_gears.utils.angle_between` 的移植:向量 OA 与 OB 的夹角。
|
|
181
|
+
*
|
|
182
|
+
* @param o 公共起点
|
|
183
|
+
* @param a 向量 OA 的终点
|
|
184
|
+
* @param b 向量 OB 的终点
|
|
185
|
+
* @returns 夹角(弧度)
|
|
186
|
+
*/
|
|
187
|
+
export declare function angleBetween(o: Vec3, a: Vec3, b: Vec3): number;
|
|
188
|
+
/**
|
|
189
|
+
* `cq_gears.utils.circle3d_by3points` 的移植:三点定圆。
|
|
190
|
+
*
|
|
191
|
+
* @param a 第一点
|
|
192
|
+
* @param b 第二点
|
|
193
|
+
* @param c 第三点
|
|
194
|
+
* @returns `{ radius, center }`
|
|
195
|
+
*/
|
|
196
|
+
export declare function circle3dBy3points(a: Vec3, b: Vec3, c: Vec3): {
|
|
197
|
+
radius: number;
|
|
198
|
+
center: Vec3;
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
|