@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.
- package/dist/bearing.d.ts +81 -0
- package/dist/bearing.d.ts.map +1 -0
- package/dist/bearing.js +462 -0
- package/dist/bearing.js.map +1 -0
- package/dist/chain.d.ts +96 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +322 -0
- package/dist/chain.js.map +1 -0
- package/dist/contract.d.ts +9 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +10 -0
- package/dist/contract.js.map +1 -0
- package/dist/data/brad_tee_nut_parameters.json +29 -0
- package/dist/data/button_head_parameters.json +82 -0
- package/dist/data/button_head_with_collar_parameters.json +98 -0
- package/dist/data/chamfered_washer_parameters.json +262 -0
- package/dist/data/cheese_head_parameters.json +182 -0
- package/dist/data/cheese_head_washer_parameters.json +112 -0
- package/dist/data/clearance_hole_sizes.json +427 -0
- package/dist/data/countersunk_head_parameters.json +1752 -0
- package/dist/data/domed_cap_nut_parameters.json +62 -0
- package/dist/data/drill_sizes.json +320 -0
- package/dist/data/heatset_nut_parameters.json +354 -0
- package/dist/data/hex_head_parameters.json +408 -0
- package/dist/data/hex_head_with_flange_parameters.json +114 -0
- package/dist/data/hex_nut_parameters.json +250 -0
- package/dist/data/hex_nut_with_flange_parameters.json +92 -0
- package/dist/data/imperial_set_screw_parameters.json +150 -0
- package/dist/data/iso10664def.json +82 -0
- package/dist/data/metric_set_screw_parameters.json +50 -0
- package/dist/data/nominal_screw_lengths.json +106 -0
- package/dist/data/pan_head_parameters.json +322 -0
- package/dist/data/pan_head_with_collar_parameters.json +56 -0
- package/dist/data/plain_washer_parameters.json +464 -0
- package/dist/data/raised_cheese_head_parameters.json +82 -0
- package/dist/data/raised_countersunk_oval_head_parameters.json +314 -0
- package/dist/data/setscrew_parameters.json +110 -0
- package/dist/data/single_row_angular_contact_ball_bearing_parameters.json +209 -0
- package/dist/data/single_row_capped_deep_groove_ball_bearing_parameters.json +527 -0
- package/dist/data/single_row_cylindrical_roller_bearing_parameters.json +227 -0
- package/dist/data/single_row_deep_groove_ball_bearing_parameters.json +653 -0
- package/dist/data/single_row_tapered_roller_bearing_parameters.json +756 -0
- package/dist/data/socket_head_cap_parameters.json +856 -0
- package/dist/data/square_nut_parameters.json +26 -0
- package/dist/data/tap_hole_sizes.json +398 -0
- package/dist/data/tapered-fillet-drop.json +109 -0
- package/dist/data/unchamfered_hex_nut_parameters.json +42 -0
- package/dist/holes.d.ts +186 -0
- package/dist/holes.d.ts.map +1 -0
- package/dist/holes.js +197 -0
- package/dist/holes.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +117 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +25 -0
- package/dist/kernel.js.map +1 -0
- package/dist/measure.d.ts +52 -0
- package/dist/measure.d.ts.map +1 -0
- package/dist/measure.js +158 -0
- package/dist/measure.js.map +1 -0
- package/dist/nut.d.ts +315 -0
- package/dist/nut.d.ts.map +1 -0
- package/dist/nut.js +700 -0
- package/dist/nut.js.map +1 -0
- package/dist/params.d.ts +178 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +330 -0
- package/dist/params.js.map +1 -0
- package/dist/primitives.d.ts +440 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +597 -0
- package/dist/primitives.js.map +1 -0
- package/dist/recess.d.ts +129 -0
- package/dist/recess.d.ts.map +1 -0
- package/dist/recess.js +323 -0
- package/dist/recess.js.map +1 -0
- package/dist/screw.d.ts +101 -0
- package/dist/screw.d.ts.map +1 -0
- package/dist/screw.js +945 -0
- package/dist/screw.js.map +1 -0
- package/dist/sprocket.d.ts +135 -0
- package/dist/sprocket.d.ts.map +1 -0
- package/dist/sprocket.js +261 -0
- package/dist/sprocket.js.map +1 -0
- package/dist/test-setup.d.ts +11 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +30 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/thread.d.ts +189 -0
- package/dist/thread.d.ts.map +1 -0
- package/dist/thread.js +501 -0
- package/dist/thread.js.map +1 -0
- package/dist/washer.d.ts +126 -0
- package/dist/washer.d.ts.map +1 -0
- package/dist/washer.js +204 -0
- package/dist/washer.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bearing.ts — 轴承 5 类(W6)—— 上游 `cq_warehouse.bearing.Bearing` 基类 +
|
|
3
|
+
* 5 个子类的逐位复刻。
|
|
4
|
+
*
|
|
5
|
+
* 装配流(`bearing.py:223 make_bearing`):
|
|
6
|
+
* ```
|
|
7
|
+
* outer_race = revolve(outer_race_section) # XZ 平面轮廓绕 Z 旋 360°
|
|
8
|
+
* inner_race = revolve(inner_race_section)
|
|
9
|
+
* bearing = outer.fuse(inner)
|
|
10
|
+
* if capped: bearing = bearing.fuse(cap).fuse(cap.mirror("XY").translate((0,0,B)))
|
|
11
|
+
* else: for each roller in polarArray(race_center_radius, N):
|
|
12
|
+
* bearing = bearing.fuse(roller.located(Location((0,0,B/2))))
|
|
13
|
+
* if cage: bearing = bearing.fuse(cage)
|
|
14
|
+
* ```
|
|
15
|
+
* 滚子(roller):深沟球/角接触 = 球;圆柱滚子 = 圆柱;圆锥滚子 = 圆锥(绕 X 倾
|
|
16
|
+
* `roller_axis_angle`)。
|
|
17
|
+
*
|
|
18
|
+
* 几何坐标:轮廓画在 XZ 平面(局部 x → 世界 X=半径、局部 y → 世界 +Z),
|
|
19
|
+
* `revolveProfile` 绕 Z 轴 360°。滚子阵列在 XY 平面内半径 `race_center_radius`
|
|
20
|
+
* 处,整体抬升到 `z = B/2`(与上游 `polarArray` + `Location((0,0,B/2))` 完全同构)。
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ **两条本阶段首次确认、并由 `scripts/kernel-bearing-probe.py` 实测锁定的复刻事实**:
|
|
23
|
+
* 1. `Sketch.trapezoid(w,h,a1,a2,angle)`(`sketch.py:284`)经 `.push((cx,cy))` 平移 +
|
|
24
|
+
* `.faces()[0].rotate(Y, −90)` 映射成 (半径=|Y|, z=X) 的凸四边形,其中 `angle`
|
|
25
|
+
* 是绕 Z 的**整体旋转**(不是 a2)。`cup` 用 `angle=90°`、`cone` 用 `angle=−90°`,
|
|
26
|
+
* 两者 a2 恒为 90°,故 v4 的 `h/tan(a2)` 项恒为 0。四角 line-line 圆角(r34/r12)
|
|
27
|
+
* 用本文件的 `lineLineFillet` 精确解,与上游 `vertices().fillet()` 在凸四边形上等价。
|
|
28
|
+
* 2. **圆锥滚子的 `roller_diameter` 是几何测量值**:上游 `roller.faces(">Z").edges()
|
|
29
|
+
* .val().radius()*2.5`,即锥顶(z=B/2 处)那一圈半径 ×2.5;本包直接算
|
|
30
|
+
* `2.5·cone_radii[0]`(cone_radii[0] 是 `makeCone` 顶端半径),无需真建锥再量。
|
|
31
|
+
* 3. **上游 `cone_length` 的著名 quirk**:`(Db/2)/asin(radians(a))`(用了 `asin`
|
|
32
|
+
* 而非 `sin`),`cone_angle` 与 `race_center_radius` 都依赖于此——必须逐字复刻,
|
|
33
|
+
* 否则圆锥几何整体偏移。已写入本文件并在探针中数字比对一致。
|
|
34
|
+
*/
|
|
35
|
+
import type { BrepHandle } from '@faicad/faijs';
|
|
36
|
+
import { type BearingClassName } from './params.js';
|
|
37
|
+
/**
|
|
38
|
+
* 圆锥轴承内圈(cone)截面的角点(radius=x, height=y)由 `buildBearing` 的 tapered
|
|
39
|
+
* 分支内联构造——因为 cx = T − B/2 依赖 T,闭式由 `scripts/kernel-bearing-probe.py`
|
|
40
|
+
* 对照 cadquery 实测锁定(CONE match=True):
|
|
41
|
+
* V1=(|cy+w/2|, cx−B/2), V2=(|cy−w/2|, cx−B/2),
|
|
42
|
+
* V4=(|cy−w/2|, cx+B/2), V3=(|cy+w/2−B·tan(90+coneAngle), cx+B/2),
|
|
43
|
+
* cy = d/2 + (da−d)/2, cx = T − B/2。
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* 球滚子(半圆盘 revolve → 实体球)。
|
|
47
|
+
* @param radius - 球半径。
|
|
48
|
+
* @returns 球体 BREP 句柄。
|
|
49
|
+
*/
|
|
50
|
+
export declare function sphere(radius: number): BrepHandle;
|
|
51
|
+
/** 轴承构造入参(args 逐字取自 manifest)。 */
|
|
52
|
+
export interface BearingParams {
|
|
53
|
+
size: string;
|
|
54
|
+
bearingType: string;
|
|
55
|
+
}
|
|
56
|
+
/** 轴承构造结果(含上游派生量,供测试锁定)。 */
|
|
57
|
+
export interface BearingResult {
|
|
58
|
+
handle: BrepHandle;
|
|
59
|
+
/** 内径 d。 */
|
|
60
|
+
boreDiameter: number;
|
|
61
|
+
/** 外径 D。 */
|
|
62
|
+
outerDiameter: number;
|
|
63
|
+
/** 宽度(tapered = T,其余 = B)。 */
|
|
64
|
+
thickness: number;
|
|
65
|
+
/** 滚子直径。 */
|
|
66
|
+
rollerDiameter: number;
|
|
67
|
+
/** 滚道中心半径。 */
|
|
68
|
+
raceCenterRadius: number;
|
|
69
|
+
/** 滚子数量。 */
|
|
70
|
+
rollerCount: number;
|
|
71
|
+
}
|
|
72
|
+
/** 5 类轴承的 W6 验收清单(方案 §8-W6)。 */
|
|
73
|
+
export declare const BEARING_CLASSES: readonly BearingClassName[];
|
|
74
|
+
/**
|
|
75
|
+
* 构造一个轴承(5 类统一入口)。
|
|
76
|
+
* @param className - 轴承类名。
|
|
77
|
+
* @param p - 构造入参(size / bearing_type)。
|
|
78
|
+
* @returns 轴承实体与上游派生量。
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildBearing(className: BearingClassName, p: BearingParams): BearingResult;
|
|
81
|
+
//# sourceMappingURL=bearing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearing.d.ts","sourceRoot":"","sources":["../src/bearing.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,eAAe,CAAA;AAgBzD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,UAAU,CAAA;AA0PjB;;;;;;;GAOG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAMjD;AAiCD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAA;IAClB,YAAY;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc;IACd,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,gCAAgC;AAChC,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAMtD,CAAA;AAWD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,GAAG,aAAa,CAuJzF"}
|
package/dist/bearing.js
ADDED
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
// Copyright 2026 Faicad. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
/**
|
|
5
|
+
* bearing.ts — 轴承 5 类(W6)—— 上游 `cq_warehouse.bearing.Bearing` 基类 +
|
|
6
|
+
* 5 个子类的逐位复刻。
|
|
7
|
+
*
|
|
8
|
+
* 装配流(`bearing.py:223 make_bearing`):
|
|
9
|
+
* ```
|
|
10
|
+
* outer_race = revolve(outer_race_section) # XZ 平面轮廓绕 Z 旋 360°
|
|
11
|
+
* inner_race = revolve(inner_race_section)
|
|
12
|
+
* bearing = outer.fuse(inner)
|
|
13
|
+
* if capped: bearing = bearing.fuse(cap).fuse(cap.mirror("XY").translate((0,0,B)))
|
|
14
|
+
* else: for each roller in polarArray(race_center_radius, N):
|
|
15
|
+
* bearing = bearing.fuse(roller.located(Location((0,0,B/2))))
|
|
16
|
+
* if cage: bearing = bearing.fuse(cage)
|
|
17
|
+
* ```
|
|
18
|
+
* 滚子(roller):深沟球/角接触 = 球;圆柱滚子 = 圆柱;圆锥滚子 = 圆锥(绕 X 倾
|
|
19
|
+
* `roller_axis_angle`)。
|
|
20
|
+
*
|
|
21
|
+
* 几何坐标:轮廓画在 XZ 平面(局部 x → 世界 X=半径、局部 y → 世界 +Z),
|
|
22
|
+
* `revolveProfile` 绕 Z 轴 360°。滚子阵列在 XY 平面内半径 `race_center_radius`
|
|
23
|
+
* 处,整体抬升到 `z = B/2`(与上游 `polarArray` + `Location((0,0,B/2))` 完全同构)。
|
|
24
|
+
*
|
|
25
|
+
* ⚠️ **两条本阶段首次确认、并由 `scripts/kernel-bearing-probe.py` 实测锁定的复刻事实**:
|
|
26
|
+
* 1. `Sketch.trapezoid(w,h,a1,a2,angle)`(`sketch.py:284`)经 `.push((cx,cy))` 平移 +
|
|
27
|
+
* `.faces()[0].rotate(Y, −90)` 映射成 (半径=|Y|, z=X) 的凸四边形,其中 `angle`
|
|
28
|
+
* 是绕 Z 的**整体旋转**(不是 a2)。`cup` 用 `angle=90°`、`cone` 用 `angle=−90°`,
|
|
29
|
+
* 两者 a2 恒为 90°,故 v4 的 `h/tan(a2)` 项恒为 0。四角 line-line 圆角(r34/r12)
|
|
30
|
+
* 用本文件的 `lineLineFillet` 精确解,与上游 `vertices().fillet()` 在凸四边形上等价。
|
|
31
|
+
* 2. **圆锥滚子的 `roller_diameter` 是几何测量值**:上游 `roller.faces(">Z").edges()
|
|
32
|
+
* .val().radius()*2.5`,即锥顶(z=B/2 处)那一圈半径 ×2.5;本包直接算
|
|
33
|
+
* `2.5·cone_radii[0]`(cone_radii[0] 是 `makeCone` 顶端半径),无需真建锥再量。
|
|
34
|
+
* 3. **上游 `cone_length` 的著名 quirk**:`(Db/2)/asin(radians(a))`(用了 `asin`
|
|
35
|
+
* 而非 `sin`),`cone_angle` 与 `race_center_radius` 都依赖于此——必须逐字复刻,
|
|
36
|
+
* 否则圆锥几何整体偏移。已写入本文件并在探针中数字比对一致。
|
|
37
|
+
*/
|
|
38
|
+
import { arcEdge, cone, cut, cylinderBetween, fuse, interpolateEdgeWithTangents, lineEdge, mirrorAbout, planarFace, revolveProfile, rotateAbout, translate as translateShape, wireFromEdges, } from './primitives.js';
|
|
39
|
+
import { BEARING_TABLES, isolateFastenerType, } from './params.js';
|
|
40
|
+
import TAPERED_FILLET_DROP from './data/tapered-fillet-drop.json';
|
|
41
|
+
const DEG = Math.PI / 180;
|
|
42
|
+
const TWO_PI = 2 * Math.PI;
|
|
43
|
+
/** 旋转轴(Z 轴)——上游 `Workplane("XZ").revolve()` 的隐式轴。 */
|
|
44
|
+
const AXIS_Z = { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } };
|
|
45
|
+
/** 绕 X 轴旋转(圆锥滚子倾角)。 */
|
|
46
|
+
const AXIS_X = { point: { x: 0, y: 0, z: 0 }, direction: { x: 1, y: 0, z: 0 } };
|
|
47
|
+
/** `num(row)`:轴承参数表取数(`isolateFastenerType` 已在生成期求值,运行期只收窄)。 */
|
|
48
|
+
function num(row, key, where) {
|
|
49
|
+
const v = row[key];
|
|
50
|
+
if (typeof v !== 'number')
|
|
51
|
+
throw new Error(`${where}: bearing_data["${key}"] is not numeric (got ${JSON.stringify(v)})`);
|
|
52
|
+
return v;
|
|
53
|
+
}
|
|
54
|
+
/** 局部 (x,y) → 世界 3D(局部 x→X=半径、局部 y→Z)。 */
|
|
55
|
+
function v3(p) {
|
|
56
|
+
return { x: p.x, y: 0, z: p.y };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 查 tapered-fillet-drop.json 行为表:该尺寸的 cup 是否被上游丢 (r=D/2, h=C) 圆角。
|
|
60
|
+
* 表由 `scripts/gen-fillet-drop.py` 在 cadquery 环境实测生成(A 侧真值,非启发式)。
|
|
61
|
+
* @param size - 轴承规格(如 `M17-40-13.25`)。
|
|
62
|
+
* @returns 丢角为 true;非 tapered 尺寸/表外尺寸恒 false(仅 tapered cup 调用)。
|
|
63
|
+
*/
|
|
64
|
+
function dropsTopOuterCorner(size) {
|
|
65
|
+
const hit = TAPERED_FILLET_DROP.sizes.find((r) => r.size === size);
|
|
66
|
+
return hit?.drop_top_outer ?? false;
|
|
67
|
+
}
|
|
68
|
+
/** 段列(XZ 轮廓)→ 封闭 wire → 绕 Z 旋成实体。 */
|
|
69
|
+
function revolveProfileEdges(edges) {
|
|
70
|
+
return revolveProfile(planarFace(wireFromEdges(edges)), AXIS_Z, TWO_PI);
|
|
71
|
+
}
|
|
72
|
+
/** 直线段 edge。 */
|
|
73
|
+
function eLine(a, b) {
|
|
74
|
+
return lineEdge(v3(a), v3(b));
|
|
75
|
+
}
|
|
76
|
+
/** 圆弧段 edge(cq `radiusArc`,radius 带符号决定凸向,与上游逐字一致)。 */
|
|
77
|
+
function eArc(a, b, radius) {
|
|
78
|
+
// 圆弧中点用与 cq `radiusArcMidpoint` 一致的带符号 sagitta 解(见 screw.ts)。
|
|
79
|
+
const dx = b.x - a.x;
|
|
80
|
+
const dy = b.y - a.y;
|
|
81
|
+
const len = Math.hypot(dx, dy) / 2;
|
|
82
|
+
const r2l2 = radius * radius - len * len;
|
|
83
|
+
let sag = Math.abs(radius);
|
|
84
|
+
if (Math.abs(r2l2) >= 1e-7)
|
|
85
|
+
sag -= Math.sqrt(Math.max(0, r2l2));
|
|
86
|
+
const ux = dx / (2 * len);
|
|
87
|
+
const uy = dy / (2 * len);
|
|
88
|
+
const sx = radius > 0 ? -uy * sag : uy * sag;
|
|
89
|
+
const sy = radius > 0 ? ux * sag : -ux * sag;
|
|
90
|
+
const mid = { x: (a.x + b.x) / 2 + sx, y: (a.y + b.y) / 2 + sy };
|
|
91
|
+
return arcEdge(v3(a), v3(mid), v3(b));
|
|
92
|
+
}
|
|
93
|
+
/** 插值样条段 edge(cq `spline(tangents=[t0,t1])`)。tangents 为 2D(局部 x→X、y→Z)。 */
|
|
94
|
+
function eSpline(a, b, t0, t1) {
|
|
95
|
+
return interpolateEdgeWithTangents([v3(a), v3(b)], { x: t0.x, y: 0, z: t0.y }, { x: t1.x, y: 0, z: t1.y });
|
|
96
|
+
}
|
|
97
|
+
/** 直线-直线角圆角(cq `Wire.fillet2D` 的线-线角闭式)。 */
|
|
98
|
+
function lineLineFillet(corner, inDir, outDir, r) {
|
|
99
|
+
const u1 = { x: -inDir.x, y: -inDir.y };
|
|
100
|
+
const cosT = u1.x * outDir.x + u1.y * outDir.y;
|
|
101
|
+
const theta = Math.acos(Math.max(-1, Math.min(1, cosT)));
|
|
102
|
+
const t = r / Math.tan(theta / 2);
|
|
103
|
+
const bis = { x: u1.x + outDir.x, y: u1.y + outDir.y };
|
|
104
|
+
const bl = Math.hypot(bis.x, bis.y) || 1;
|
|
105
|
+
const bn = { x: bis.x / bl, y: bis.y / bl };
|
|
106
|
+
const cdist = r / Math.sin(theta / 2);
|
|
107
|
+
const ctr = { x: corner.x + bn.x * cdist, y: corner.y + bn.y * cdist };
|
|
108
|
+
const near = { x: corner.x - ctr.x, y: corner.y - ctr.y };
|
|
109
|
+
const nl = Math.hypot(near.x, near.y) || 1;
|
|
110
|
+
const mid = { x: ctr.x + (near.x / nl) * r, y: ctr.y + (near.y / nl) * r };
|
|
111
|
+
return {
|
|
112
|
+
p1: { x: corner.x + u1.x * t, y: corner.y + u1.y * t },
|
|
113
|
+
p2: { x: corner.x + outDir.x * t, y: corner.y + outDir.y * t },
|
|
114
|
+
mid,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function unit(v) {
|
|
118
|
+
const l = Math.hypot(v.x, v.y) || 1;
|
|
119
|
+
return { x: v.x / l, y: v.y / l };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 闭合多边形(凸四边形/矩形)带四角 line-line 圆角的轮廓 wire。
|
|
123
|
+
* @param corners - 角点(按轮廓序,凸多边形,闭合)。
|
|
124
|
+
* @param radii - 每个角点的圆角半径(与 corners 等长);为 0 表示尖角(不倒圆)。
|
|
125
|
+
* @param skip - 需要保留尖角(跳过倒圆)的角点索引集合。上游
|
|
126
|
+
* `Sketch.vertices().fillet(r34)` 对 tapered cup 在部分尺寸上会静默丢弃
|
|
127
|
+
* (r=D/2, h=C) 角的圆角(OCC `BRepFilletAPI_MakeFillet2d` quirk,无闭式
|
|
128
|
+
* 分界,14/26 尺寸触发,见 W6 分析文档);该行为由 A 侧行为表
|
|
129
|
+
* `src/data/tapered-fillet-drop.json` 数据驱动,禁止启发式。
|
|
130
|
+
* @returns 倒角后的 edge 列(已闭合)。
|
|
131
|
+
*/
|
|
132
|
+
function filletedPolygonEdges(corners, radii, skip = new Set()) {
|
|
133
|
+
const n = corners.length;
|
|
134
|
+
const p1 = [];
|
|
135
|
+
const p2 = [];
|
|
136
|
+
const mid = [];
|
|
137
|
+
for (let i = 0; i < n; i++) {
|
|
138
|
+
if (skip.has(i) || Math.abs(radii[i] ?? 0) <= 1e-9) {
|
|
139
|
+
p1.push(corners[i]);
|
|
140
|
+
p2.push(corners[i]);
|
|
141
|
+
mid.push(corners[i]);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const prev = corners[(i - 1 + n) % n];
|
|
145
|
+
const cur = corners[i];
|
|
146
|
+
const next = corners[(i + 1) % n];
|
|
147
|
+
const inDir = unit({ x: cur.x - prev.x, y: cur.y - prev.y });
|
|
148
|
+
const outDir = unit({ x: next.x - cur.x, y: next.y - cur.y });
|
|
149
|
+
const g = lineLineFillet(cur, inDir, outDir, radii[i]);
|
|
150
|
+
p1.push(g.p1);
|
|
151
|
+
p2.push(g.p2);
|
|
152
|
+
mid.push(g.mid);
|
|
153
|
+
}
|
|
154
|
+
const edges = [];
|
|
155
|
+
for (let i = 0; i < n; i++) {
|
|
156
|
+
const j = (i + 1) % n;
|
|
157
|
+
// 本角出边:从 p2[i] 到下一角的 p1[j](p 相同时 filletedPolygonEdges 已跳过圆角)
|
|
158
|
+
edges.push(eLine(p2[i], p1[j]));
|
|
159
|
+
// 下一角圆角弧:p1[j] → mid[j] → p2[j](用显式中点,避免 sign 歧义)
|
|
160
|
+
if (!skip.has(j) && Math.abs(radii[j]) > 1e-9) {
|
|
161
|
+
edges.push(arcEdge(v3(p1[j]), v3(mid[j]), v3(p2[j])));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return edges;
|
|
165
|
+
}
|
|
166
|
+
// ── 滚道截面(revolve 前的 XZ 轮廓) ───────────────────────────────────────
|
|
167
|
+
/** 默认滚道截面:矩形(x∈[x0,x1], y∈[0,h])四角圆角 r(深沟球/圆柱滚子用)。 */
|
|
168
|
+
function defaultRaceEdges(x0, x1, h, r) {
|
|
169
|
+
const c = [
|
|
170
|
+
{ x: x0, y: 0 },
|
|
171
|
+
{ x: x1, y: 0 },
|
|
172
|
+
{ x: x1, y: h },
|
|
173
|
+
{ x: x0, y: h },
|
|
174
|
+
];
|
|
175
|
+
return filletedPolygonEdges(c, [r, r, r, r]);
|
|
176
|
+
}
|
|
177
|
+
/** 角接触轴承内圈截面(custom,spline+arc);与 `bearing.py:401` 逐点一致。 */
|
|
178
|
+
function angularInnerEdges(d, d1, d2, r12, B) {
|
|
179
|
+
const S0 = { x: d2 / 2 - r12, y: 0 };
|
|
180
|
+
const A1 = { x: d2 / 2, y: r12 };
|
|
181
|
+
const A2 = { x: d1 / 2, y: B - r12 };
|
|
182
|
+
const A3 = { x: d1 / 2 - r12, y: B };
|
|
183
|
+
const A4 = { x: d / 2 + r12, y: B };
|
|
184
|
+
const A5 = { x: d / 2, y: B - r12 };
|
|
185
|
+
const A6 = { x: d / 2, y: r12 };
|
|
186
|
+
const A7 = { x: d / 2 + r12, y: 0 };
|
|
187
|
+
return [
|
|
188
|
+
eArc(S0, A1, -r12),
|
|
189
|
+
eSpline(A1, A2, { x: 0, y: 1 }, { x: 0, y: 1 }),
|
|
190
|
+
eArc(A2, A3, -r12),
|
|
191
|
+
eLine(A3, A4),
|
|
192
|
+
eArc(A4, A5, -r12),
|
|
193
|
+
eLine(A5, A6),
|
|
194
|
+
eArc(A6, A7, -r12),
|
|
195
|
+
eLine(A7, S0),
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
/** 角接触轴承外圈截面(custom,spline+arc);与 `bearing.py:420` 逐点一致。 */
|
|
199
|
+
function angularOuterEdges(d, D, D1, d2, r12, r34, B) {
|
|
200
|
+
const D2 = D - (d2 - d);
|
|
201
|
+
const S0 = { x: D / 2 - r12, y: 0 };
|
|
202
|
+
const A1 = { x: D / 2, y: r12 };
|
|
203
|
+
const A2 = { x: D / 2, y: B - r34 };
|
|
204
|
+
const A3 = { x: D / 2 - r34, y: B };
|
|
205
|
+
const A4 = { x: D2 / 2 + r12, y: B };
|
|
206
|
+
const A5 = { x: D2 / 2, y: B - r12 };
|
|
207
|
+
const A6 = { x: D1 / 2, y: r12 };
|
|
208
|
+
const A7 = { x: D1 / 2 + r12, y: 0 };
|
|
209
|
+
return [
|
|
210
|
+
eArc(S0, A1, -r12),
|
|
211
|
+
eLine(A1, A2),
|
|
212
|
+
eArc(A2, A3, -r34),
|
|
213
|
+
eLine(A3, A4),
|
|
214
|
+
eArc(A4, A5, -r12),
|
|
215
|
+
eSpline(A5, A6, { x: 0, y: -1 }, { x: 0, y: -1 }),
|
|
216
|
+
eArc(A6, A7, -r12),
|
|
217
|
+
eLine(A7, S0),
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* 圆锥轴承外圈(cup)截面:trapezoid 经 `sketch.py:284` 顶点公式 + 整体 `angle=90°`
|
|
222
|
+
* 旋转 + `rotate(Y,−90)` 映射成 (半径=|Y|, z=X) 后的凸四边形,四角圆角 r34。
|
|
223
|
+
* 闭式由 `scripts/kernel-bearing-probe.py` 对照 cadquery 实测锁定(CUP match=True)。
|
|
224
|
+
* @param D - 外径。@param C - cup 高度。@param Db - Dbmin(小端直径)。
|
|
225
|
+
* @param a - 接触角(度)。@param r34 - 圆角半径。
|
|
226
|
+
*/
|
|
227
|
+
function taperedCupEdges(D, C, Db, a, r34, dropTopOuter) {
|
|
228
|
+
const w = (D - Db) / 2;
|
|
229
|
+
const h = C;
|
|
230
|
+
const cx = C / 2;
|
|
231
|
+
const cy = D / 2 - (D - Db) / 4;
|
|
232
|
+
// 角点序 (V1,V2,V4,V3) 与上游 trapezoid polygon(v1,v2,v4,v3) 一致;
|
|
233
|
+
// 半径 = |y'|、高度 = x'(x',y' 为平移后坐标,y' 对本类恒正)。
|
|
234
|
+
const v1 = { x: Math.abs(cy - w / 2), y: cx + h / 2 };
|
|
235
|
+
const v2 = { x: Math.abs(cy + w / 2), y: cx + h / 2 };
|
|
236
|
+
const v4 = { x: Math.abs(cy + w / 2), y: cx - h / 2 };
|
|
237
|
+
// a1 = a+90 → 1/tan(a1) = −tan(a),故 V3 半径 = cy − w/2 − h·tan(a)
|
|
238
|
+
const v3 = { x: Math.abs(cy - w / 2 - h * Math.tan(a * DEG)), y: cx - h / 2 };
|
|
239
|
+
// V2 = (r=D/2, h=C) 顶边-外圆柱角:上游 `vertices().fillet(r34)` 在部分尺寸
|
|
240
|
+
// 静默丢它的圆角(OCC MakeFillet2d quirk)——由 tapered-fillet-drop.json 行为表驱动。
|
|
241
|
+
const skip = dropTopOuter ? new Set([1]) : new Set();
|
|
242
|
+
return filletedPolygonEdges([v1, v2, v4, v3], [r34, r34, r34, r34], skip);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 圆锥轴承内圈(cone)截面的角点(radius=x, height=y)由 `buildBearing` 的 tapered
|
|
246
|
+
* 分支内联构造——因为 cx = T − B/2 依赖 T,闭式由 `scripts/kernel-bearing-probe.py`
|
|
247
|
+
* 对照 cadquery 实测锁定(CONE match=True):
|
|
248
|
+
* V1=(|cy+w/2|, cx−B/2), V2=(|cy−w/2|, cx−B/2),
|
|
249
|
+
* V4=(|cy−w/2|, cx+B/2), V3=(|cy+w/2−B·tan(90+coneAngle), cx+B/2),
|
|
250
|
+
* cy = d/2 + (da−d)/2, cx = T − B/2。
|
|
251
|
+
*/
|
|
252
|
+
/**
|
|
253
|
+
* 球滚子(半圆盘 revolve → 实体球)。
|
|
254
|
+
* @param radius - 球半径。
|
|
255
|
+
* @returns 球体 BREP 句柄。
|
|
256
|
+
*/
|
|
257
|
+
export function sphere(radius) {
|
|
258
|
+
const A = { x: 0, y: 0, z: radius };
|
|
259
|
+
const M = { x: radius, y: 0, z: 0 };
|
|
260
|
+
const B = { x: 0, y: 0, z: -radius };
|
|
261
|
+
// 半圆 (A→M→B) + 直径闭合线,构成半盘 face,revolve 360° → 完整球。
|
|
262
|
+
return revolveProfileEdges([arcEdge(A, M, B), lineEdge(B, A)]);
|
|
263
|
+
}
|
|
264
|
+
/** 圆柱滚子(轴向 +Z,居中)。 */
|
|
265
|
+
function cylinderRoller(radius, length) {
|
|
266
|
+
return cylinderBetween(radius, -length / 2, length / 2);
|
|
267
|
+
}
|
|
268
|
+
/** 圆锥滚子(锥轴 +Z,居中,再绕 X 倾 `axisAngle` 度)。 */
|
|
269
|
+
function coneRoller(rBottom, rTop, length, axisAngle) {
|
|
270
|
+
const c = translateShape(cone(rBottom, rTop, length), 0, 0, -length / 2);
|
|
271
|
+
return rotateAbout(c, AXIS_X, -axisAngle * DEG);
|
|
272
|
+
}
|
|
273
|
+
/** 密封盖环形(revolve 矩形截面 → 短管),落位于 z∈[B/20, 2·B/20]。 */
|
|
274
|
+
function capRing(rInner, rOuter, B) {
|
|
275
|
+
const base = revolveProfileEdges(defaultRaceEdges(rInner, rOuter, B / 20, 0));
|
|
276
|
+
return translateShape(base, 0, 0, B / 20);
|
|
277
|
+
}
|
|
278
|
+
// ── 轴承参数解析与派生量 ────────────────────────────────────────────────────
|
|
279
|
+
/** 解析轴承参数 dict(size → 剥离 `SKT:` 前缀的逐尺寸行,运行期只读数字维度)。 */
|
|
280
|
+
function resolveBearing(className, bearingType, size) {
|
|
281
|
+
const isolated = isolateFastenerType(bearingType, BEARING_TABLES[className]);
|
|
282
|
+
const row = isolated[size];
|
|
283
|
+
if (!row)
|
|
284
|
+
throw new Error(`bearing ${className}/${bearingType}: size ${size} not found`);
|
|
285
|
+
return row;
|
|
286
|
+
}
|
|
287
|
+
/** 5 类轴承的 W6 验收清单(方案 §8-W6)。 */
|
|
288
|
+
export const BEARING_CLASSES = [
|
|
289
|
+
'SingleRowDeepGrooveBallBearing',
|
|
290
|
+
'SingleRowCappedDeepGrooveBallBearing',
|
|
291
|
+
'SingleRowAngularContactBallBearing',
|
|
292
|
+
'SingleRowCylindricalRollerBearing',
|
|
293
|
+
'SingleRowTaperedRollerBearing',
|
|
294
|
+
];
|
|
295
|
+
/** 圆锥滚子中心半径(cage 用,与上游 `cage()` 同式)。 */
|
|
296
|
+
function cageRadius(coneLength, rollerAxisAngle, l) {
|
|
297
|
+
return (coneLength - l) * Math.sin(rollerAxisAngle * DEG) + 0.5;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* 构造一个轴承(5 类统一入口)。
|
|
301
|
+
* @param className - 轴承类名。
|
|
302
|
+
* @param p - 构造入参(size / bearing_type)。
|
|
303
|
+
* @returns 轴承实体与上游派生量。
|
|
304
|
+
*/
|
|
305
|
+
export function buildBearing(className, p) {
|
|
306
|
+
const row = resolveBearing(className, p.bearingType, p.size);
|
|
307
|
+
const d = num(row, 'd', className);
|
|
308
|
+
const D = num(row, 'D', className);
|
|
309
|
+
const B = num(row, 'B', className);
|
|
310
|
+
let innerEdges;
|
|
311
|
+
let outerEdges;
|
|
312
|
+
let roller;
|
|
313
|
+
let rollerDiameter;
|
|
314
|
+
let raceCenterRadius;
|
|
315
|
+
let capped = false;
|
|
316
|
+
let cage = false;
|
|
317
|
+
let T = B;
|
|
318
|
+
switch (className) {
|
|
319
|
+
case 'SingleRowDeepGrooveBallBearing':
|
|
320
|
+
case 'SingleRowCappedDeepGrooveBallBearing': {
|
|
321
|
+
const D1 = num(row, 'D1', className);
|
|
322
|
+
const d1 = num(row, 'd1', className);
|
|
323
|
+
const r12 = num(row, 'r12', className);
|
|
324
|
+
innerEdges = defaultRaceEdges(d / 2, d1 / 2, B, r12);
|
|
325
|
+
outerEdges = defaultRaceEdges(D / 2, D1 / 2, B, r12);
|
|
326
|
+
rollerDiameter = 0.625 * (D1 - d1);
|
|
327
|
+
raceCenterRadius = (D1 + d1) / 4;
|
|
328
|
+
roller = sphere(rollerDiameter / 2);
|
|
329
|
+
capped = className === 'SingleRowCappedDeepGrooveBallBearing';
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
case 'SingleRowAngularContactBallBearing': {
|
|
333
|
+
const D1 = num(row, 'D1', className);
|
|
334
|
+
const d1 = num(row, 'd1', className);
|
|
335
|
+
const d2 = num(row, 'd2', className);
|
|
336
|
+
const r12 = num(row, 'r12', className);
|
|
337
|
+
const r34 = num(row, 'r34', className);
|
|
338
|
+
innerEdges = angularInnerEdges(d, d1, d2, r12, B);
|
|
339
|
+
outerEdges = angularOuterEdges(d, D, D1, d2, r12, r34, B);
|
|
340
|
+
// 上游 0.4 * (D2 − d2),D2 = D − (d2 − d)
|
|
341
|
+
rollerDiameter = 0.4 * (D - (d2 - d) - d2);
|
|
342
|
+
raceCenterRadius = (D1 + d1) / 4;
|
|
343
|
+
roller = sphere(rollerDiameter / 2);
|
|
344
|
+
capped = true;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
case 'SingleRowCylindricalRollerBearing': {
|
|
348
|
+
const D1 = num(row, 'D1', className);
|
|
349
|
+
const d1 = num(row, 'd1', className);
|
|
350
|
+
const r12 = num(row, 'r12', className);
|
|
351
|
+
innerEdges = defaultRaceEdges(d / 2, d1 / 2, B, r12);
|
|
352
|
+
outerEdges = defaultRaceEdges(D / 2, D1 / 2, B, r12);
|
|
353
|
+
rollerDiameter = 0.625 * (D1 - d1);
|
|
354
|
+
raceCenterRadius = (D1 + d1) / 4;
|
|
355
|
+
const rollerLength = 0.7 * B;
|
|
356
|
+
roller = cylinderRoller(rollerDiameter / 2, rollerLength);
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
case 'SingleRowTaperedRollerBearing': {
|
|
360
|
+
const C = num(row, 'C', className);
|
|
361
|
+
const Db = num(row, 'Dbmin', className);
|
|
362
|
+
const a = num(row, 'a', className);
|
|
363
|
+
const r12 = num(row, 'r12', className);
|
|
364
|
+
const r34 = num(row, 'r34', className);
|
|
365
|
+
const d1 = num(row, 'd1', className);
|
|
366
|
+
const da = num(row, 'da', className);
|
|
367
|
+
T = num(row, 'T', className);
|
|
368
|
+
// ⚠️ 上游 quirk:cone_length = (Db/2) / asin(radians(a))(asin 非 sin)
|
|
369
|
+
const coneLength = (Db / 2) / Math.asin(a * DEG);
|
|
370
|
+
const coneAngle = Math.asin((d1 / 2) / coneLength) / DEG;
|
|
371
|
+
const rollerAxisAngle = (a + coneAngle) / 2;
|
|
372
|
+
const rollerLength = 0.7 * B;
|
|
373
|
+
const rollerConeAngle = a - coneAngle;
|
|
374
|
+
const coneRadii = [
|
|
375
|
+
1.2 * (coneLength - 0) * Math.sin((rollerConeAngle * DEG) / 2),
|
|
376
|
+
1.2 * (coneLength - rollerLength) * Math.sin((rollerConeAngle * DEG) / 2),
|
|
377
|
+
];
|
|
378
|
+
rollerDiameter = 2.5 * coneRadii[0];
|
|
379
|
+
raceCenterRadius = (coneLength - rollerLength / 2) * Math.sin(rollerAxisAngle * DEG);
|
|
380
|
+
// 内圈(cone)截面:cx = T − B/2(上游 push((T − B/2, ...)))
|
|
381
|
+
const w = (da - d) / 2;
|
|
382
|
+
const cyc = d / 2 + (da - d) / 2;
|
|
383
|
+
const a1 = 90 + coneAngle;
|
|
384
|
+
const cxCone = T - B / 2;
|
|
385
|
+
const cV1 = { x: Math.abs(cyc + w / 2), y: cxCone - B / 2 };
|
|
386
|
+
const cV2 = { x: Math.abs(cyc - w / 2), y: cxCone - B / 2 };
|
|
387
|
+
const cV4 = { x: Math.abs(cyc - w / 2), y: cxCone + B / 2 };
|
|
388
|
+
const cV3 = { x: Math.abs(cyc + w / 2 - B / Math.tan(a1 * DEG)), y: cxCone + B / 2 };
|
|
389
|
+
innerEdges = filletedPolygonEdges([cV1, cV2, cV4, cV3], [r12, r12, r12, r12]);
|
|
390
|
+
outerEdges = taperedCupEdges(D, C, Db, a, r34, dropsTopOuterCorner(p.size));
|
|
391
|
+
roller = coneRoller(coneRadii[1], coneRadii[0], rollerLength, rollerAxisAngle);
|
|
392
|
+
cage = true;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
default:
|
|
396
|
+
throw new Error(`buildBearing: unhandled class ${className}`);
|
|
397
|
+
}
|
|
398
|
+
const inner = revolveProfileEdges(innerEdges);
|
|
399
|
+
const outer = revolveProfileEdges(outerEdges);
|
|
400
|
+
let bearing = fuse(outer, inner);
|
|
401
|
+
const rollerCount = Math.floor((1.8 * Math.PI * raceCenterRadius) / rollerDiameter);
|
|
402
|
+
if (capped) {
|
|
403
|
+
let rIn = d / 2;
|
|
404
|
+
let rOut = D / 2;
|
|
405
|
+
if (className === 'SingleRowAngularContactBallBearing') {
|
|
406
|
+
const d2 = num(row, 'd2', className);
|
|
407
|
+
rIn = d2 / 2;
|
|
408
|
+
rOut = (D - (d2 - d)) / 2;
|
|
409
|
+
}
|
|
410
|
+
const cap1 = capRing(rIn, rOut, B);
|
|
411
|
+
const cap2 = translateShape(mirrorAbout(cap1, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 1 }), 0, 0, B);
|
|
412
|
+
bearing = fuse(bearing, cap1);
|
|
413
|
+
bearing = fuse(bearing, cap2);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
for (let i = 0; i < rollerCount; i++) {
|
|
417
|
+
const ang = (TWO_PI * i) / rollerCount;
|
|
418
|
+
const pos = {
|
|
419
|
+
x: raceCenterRadius * Math.cos(ang),
|
|
420
|
+
y: raceCenterRadius * Math.sin(ang),
|
|
421
|
+
z: B / 2,
|
|
422
|
+
};
|
|
423
|
+
// 上游 `polarArray(...).vals()` 的 Location 自带 `Rz(ang)` 自旋
|
|
424
|
+
// (cq.py polarArray rotate=True 默认)——滚子先绕 Z 转到该方位,再平移落位。
|
|
425
|
+
// 对球/圆柱滚子无影响(绕自身对称轴),对圆锥滚子决定倾斜朝向,必须复刻。
|
|
426
|
+
const placed = translateShape(rotateAbout(roller, AXIS_Z, ang), pos.x, pos.y, pos.z);
|
|
427
|
+
bearing = fuse(bearing, placed);
|
|
428
|
+
}
|
|
429
|
+
if (cage) {
|
|
430
|
+
const thickness = 0.9 * T;
|
|
431
|
+
const cr0 = cageRadius(coneLengthForTapered(row, className), rollerAxisAngleForTapered(row, className), 0);
|
|
432
|
+
const cr1 = cageRadius(coneLengthForTapered(row, className), rollerAxisAngleForTapered(row, className), thickness);
|
|
433
|
+
const cageOuter = cone(cr1, cr0, thickness);
|
|
434
|
+
const cageInner = cone(cr1 - 1, cr0 - 1, thickness);
|
|
435
|
+
bearing = fuse(bearing, cut(cageOuter, cageInner));
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
return {
|
|
439
|
+
handle: bearing,
|
|
440
|
+
boreDiameter: d,
|
|
441
|
+
outerDiameter: D,
|
|
442
|
+
thickness: T,
|
|
443
|
+
rollerDiameter,
|
|
444
|
+
raceCenterRadius,
|
|
445
|
+
rollerCount,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
/** 圆锥派生量(与 buildBearing 内同式,供 cage 半径复用)。 */
|
|
449
|
+
function coneLengthForTapered(row, className) {
|
|
450
|
+
const Db = num(row, 'Dbmin', className);
|
|
451
|
+
const a = num(row, 'a', className);
|
|
452
|
+
return (Db / 2) / Math.asin(a * DEG);
|
|
453
|
+
}
|
|
454
|
+
function rollerAxisAngleForTapered(row, className) {
|
|
455
|
+
const Db = num(row, 'Dbmin', className);
|
|
456
|
+
const a = num(row, 'a', className);
|
|
457
|
+
const d1 = num(row, 'd1', className);
|
|
458
|
+
const coneLength = (Db / 2) / Math.asin(a * DEG);
|
|
459
|
+
const coneAngle = Math.asin((d1 / 2) / coneLength) / DEG;
|
|
460
|
+
return (a + coneAngle) / 2;
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=bearing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearing.js","sourceRoot":"","sources":["../src/bearing.ts"],"names":[],"mappings":"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"}
|