@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
package/dist/washer.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* washer.ts — 垫圈三类移植(上游 `cq_warehouse/fastener.py:2133-2369`,方案 §8 W4)。
|
|
3
|
+
*
|
|
4
|
+
* 类映射(方案 §4.2):`Washer` 基类 → {@link buildWasher};具体类 →
|
|
5
|
+
* `plainWasher()` / `chamferedWasher()` / `cheeseHeadWasher()`;轮廓 →
|
|
6
|
+
* `washerProfilePoints()`(纯几何,不建 kernel 对象,便于单测)。
|
|
7
|
+
*
|
|
8
|
+
* ## 几何路线
|
|
9
|
+
*
|
|
10
|
+
* 上游:`washer_profile()`(XZ 平面闭合轮廓)→ `.toPending().revolve()`(绕 Z 轴 360°)。
|
|
11
|
+
* 本包:轮廓点列(`{r, z}`)→ {@link primitives.polygonWire} 转世界坐标
|
|
12
|
+
* (`{x:r, y:0, z}`)→ {@link primitives.revolveProfile}。
|
|
13
|
+
*
|
|
14
|
+
* probe 实测(`scripts/kernel-nut-probe.ts` 段 3):本内核 `revolve(闭合 wire, +Z, 2π)`
|
|
15
|
+
* 对 XZ 轮廓**精确**——实心矩形 r=3/h=5 → 141.371669(=π·9·5);管 2→4/h=5 →
|
|
16
|
+
* 188.495559(=π·12·5)。故 washer 走直通路径,无退化。
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ 两条 probe 实测约束(见 `docs/analysis/2026-09-14-cq-warehouse-nut-washer-probe.md`):
|
|
19
|
+
* 1. **轮廓点序决定朝向**:反序 → `getVolume` 为负(probe 段 3f 实测 −141.371669)。
|
|
20
|
+
* 本文件统一按上游逆时针序(`x` 由内向外、`z` 由下向上)给出,保证正体积。
|
|
21
|
+
* 2. **内核静默接受未闭合 wire**(probe 段 3h:`makeWire` 与 `revolve` 都不抛错)
|
|
22
|
+
* —— 闭合由 {@link primitives.polygonWire} 承担,勿绕过它直接喂边。
|
|
23
|
+
*
|
|
24
|
+
* ## A 侧基准的已知偏差(`volume` 字段对 washer 不可用)
|
|
25
|
+
*
|
|
26
|
+
* 上游 `Solid.Volume()`(OCP `BRepGProp`)对**revolve 原生生成的内孔管**给出
|
|
27
|
+
* **恰好 2×** 解析值的错值(实测 PlainWasher M6 iso7089:解析 145.669368 /
|
|
28
|
+
* `Volume()` 291.338736 / 三角化 145.609004),nut 侧不受影响。occt-wasm 的
|
|
29
|
+
* `getVolume` 对同一几何**精确**(probe 段 3b),故 STEP 比对不受影响;
|
|
30
|
+
* 但读 A 侧真值必须用 manifest 的 `volume_mesh`,**不要**用 `volume`。
|
|
31
|
+
*/
|
|
32
|
+
import type { BrepHandle } from '@faicad/faijs';
|
|
33
|
+
import { type ParamRow, type WasherClassName } from './params.js';
|
|
34
|
+
/** 垫圈轮廓顶点(XZ 平面极坐标形态:`r` = 到旋转轴距离,`z` = 轴向高度)。 */
|
|
35
|
+
export interface WasherProfilePoint {
|
|
36
|
+
r: number;
|
|
37
|
+
z: number;
|
|
38
|
+
}
|
|
39
|
+
/** `Washer.__init__`(fastener.py:2235)的入参——参数名逐字沿用上游 snake_case。 */
|
|
40
|
+
export interface WasherParams {
|
|
41
|
+
size: string;
|
|
42
|
+
fastener_type: string;
|
|
43
|
+
}
|
|
44
|
+
/** `buildWasher` 的结果:几何句柄 + 上游同名派生量。 */
|
|
45
|
+
export interface WasherResult {
|
|
46
|
+
handle: BrepHandle;
|
|
47
|
+
/** 上游 `washer_class`(`type(self).__name__`)。 */
|
|
48
|
+
washerClass: WasherClassName;
|
|
49
|
+
/** 上游 `self.size`(**不** strip,见 fastener.py:2240)。 */
|
|
50
|
+
size: string;
|
|
51
|
+
/** 上游 `self.thread_size`(垫圈不拆 `-`,等于 `size`)。 */
|
|
52
|
+
threadSize: string;
|
|
53
|
+
/** 上游 `self.thread_diameter`(公制取 `size[1:]` 浮点,英制走 `imperial_str_to_float`)。 */
|
|
54
|
+
threadDiameter: number;
|
|
55
|
+
isMetric: boolean;
|
|
56
|
+
fastenerType: string;
|
|
57
|
+
/** `isolate_fastener_type` 后的该规格行(d1/d2/h)。 */
|
|
58
|
+
washerData: ParamRow;
|
|
59
|
+
/** 上游 `washer_thickness`(最高顶点 z)。 */
|
|
60
|
+
thickness: number;
|
|
61
|
+
/** 上游 `washer_diameter`(2 × 最大水平半径)。 */
|
|
62
|
+
diameter: number;
|
|
63
|
+
/** 上游 `info`。 */
|
|
64
|
+
info: string;
|
|
65
|
+
}
|
|
66
|
+
/** 每个垫圈类的轮廓点(按上游 `washer_profile()` 逐点转写)。 */
|
|
67
|
+
export type WasherProfileFn = (data: ParamRow) => WasherProfilePoint[];
|
|
68
|
+
/**
|
|
69
|
+
* `Washer.default_washer_profile`(fastener.py:2274)——矩形截面。
|
|
70
|
+
*
|
|
71
|
+
* 上游:`moveTo(d1/2, 0).hLineTo(d2/2).vLineTo(h).hLineTo(d1/2).close()`
|
|
72
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
73
|
+
* @returns 逆时针点列(4 点;`close` 的收尾边由 polygonWire 补)。
|
|
74
|
+
*/
|
|
75
|
+
export declare function plainWasherProfile(data: ParamRow): WasherProfilePoint[];
|
|
76
|
+
/**
|
|
77
|
+
* `ChamferedWasher.washer_profile`(fastener.py:2326)——顶面为 0.25h 斜面。
|
|
78
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
79
|
+
* @returns 逆时针点列(5 点)。
|
|
80
|
+
*/
|
|
81
|
+
export declare function chamferedWasherProfile(data: ParamRow): WasherProfilePoint[];
|
|
82
|
+
/**
|
|
83
|
+
* `CheeseHeadWasher.washer_profile`(fastener.py:2354)——内孔带沉窝。
|
|
84
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
85
|
+
* @returns 逆时针点列(6 点)。
|
|
86
|
+
*/
|
|
87
|
+
export declare function cheeseHeadWasherProfile(data: ParamRow): WasherProfilePoint[];
|
|
88
|
+
/**
|
|
89
|
+
* `Washer.default_countersink_profile`(fastener.py:2287)——沉孔切割器轮廓。
|
|
90
|
+
*
|
|
91
|
+
* 上游用 `clearance_hole_diameters[fit]`,缺该规格时抛 `ValueError`(逐字复刻)。
|
|
92
|
+
* @param size - 螺纹规格(如 `M6`),用于查 clearance 表。
|
|
93
|
+
* @param threadDiameter - 螺纹公称直径(mm),用于算 gap。
|
|
94
|
+
* @param data - 该规格的参数行(含 d2/h)。
|
|
95
|
+
* @param fit - 配合等级(`Close` / `Normal` / `Loose`)。
|
|
96
|
+
* @returns 沉孔切割器的矩形轮廓点列(2 点,宽度已含 gap)。
|
|
97
|
+
*/
|
|
98
|
+
export declare function washerCountersinkProfile(size: string, threadDiameter: number, data: ParamRow, fit: 'Close' | 'Normal' | 'Loose'): WasherProfilePoint[];
|
|
99
|
+
/**
|
|
100
|
+
* `Washer.__init__` + `make_washer`(fastener.py:2235 / :2267)。
|
|
101
|
+
*
|
|
102
|
+
* @param className - 垫圈类名(决定参数表)。
|
|
103
|
+
* @param profileOf - 该类的轮廓函数(上游 `washer_profile`)。
|
|
104
|
+
* @param p - 入参(`size` / `fastener_type`)。
|
|
105
|
+
* @returns 垫圈实体与上游派生量。
|
|
106
|
+
*/
|
|
107
|
+
export declare function buildWasher(className: WasherClassName, profileOf: WasherProfileFn, p: WasherParams): WasherResult;
|
|
108
|
+
/**
|
|
109
|
+
* `PlainWasher`(fastener.py:2302)——iso7089 / iso7091 / iso7093 / iso7094。
|
|
110
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 如 `iso7089`)。
|
|
111
|
+
* @returns 垫圈实体与派生量。
|
|
112
|
+
*/
|
|
113
|
+
export declare function plainWasher(p: WasherParams): WasherResult;
|
|
114
|
+
/**
|
|
115
|
+
* `ChamferedWasher`(fastener.py:2317)——iso7090。
|
|
116
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 固定 `iso7090`)。
|
|
117
|
+
* @returns 垫圈实体与派生量。
|
|
118
|
+
*/
|
|
119
|
+
export declare function chamferedWasher(p: WasherParams): WasherResult;
|
|
120
|
+
/**
|
|
121
|
+
* `CheeseHeadWasher`(fastener.py:2343)——iso7092。
|
|
122
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 固定 `iso7092`)。
|
|
123
|
+
* @returns 垫圈实体与派生量。
|
|
124
|
+
*/
|
|
125
|
+
export declare function cheeseHeadWasher(p: WasherParams): WasherResult;
|
|
126
|
+
//# sourceMappingURL=washer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"washer.d.ts","sourceRoot":"","sources":["../src/washer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,eAAe,CAAA;AACzD,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,UAAU,CAAA;AAIjB,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,CAAA;IAClB,gDAAgD;IAChD,WAAW,EAAE,eAAe,CAAA;IAC5B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,UAAU,EAAE,QAAQ,CAAA;IACpB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,8CAA8C;AAC9C,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,kBAAkB,EAAE,CAAA;AAiBtE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAQvE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAS3E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,EAAE,CAU5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAChC,kBAAkB,EAAE,CAiBtB;AAOD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,eAAe,EAC1B,CAAC,EAAE,YAAY,GACd,YAAY,CAsDd;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAE9D"}
|
package/dist/washer.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* washer.ts — 垫圈三类移植(上游 `cq_warehouse/fastener.py:2133-2369`,方案 §8 W4)。
|
|
3
|
+
*
|
|
4
|
+
* 类映射(方案 §4.2):`Washer` 基类 → {@link buildWasher};具体类 →
|
|
5
|
+
* `plainWasher()` / `chamferedWasher()` / `cheeseHeadWasher()`;轮廓 →
|
|
6
|
+
* `washerProfilePoints()`(纯几何,不建 kernel 对象,便于单测)。
|
|
7
|
+
*
|
|
8
|
+
* ## 几何路线
|
|
9
|
+
*
|
|
10
|
+
* 上游:`washer_profile()`(XZ 平面闭合轮廓)→ `.toPending().revolve()`(绕 Z 轴 360°)。
|
|
11
|
+
* 本包:轮廓点列(`{r, z}`)→ {@link primitives.polygonWire} 转世界坐标
|
|
12
|
+
* (`{x:r, y:0, z}`)→ {@link primitives.revolveProfile}。
|
|
13
|
+
*
|
|
14
|
+
* probe 实测(`scripts/kernel-nut-probe.ts` 段 3):本内核 `revolve(闭合 wire, +Z, 2π)`
|
|
15
|
+
* 对 XZ 轮廓**精确**——实心矩形 r=3/h=5 → 141.371669(=π·9·5);管 2→4/h=5 →
|
|
16
|
+
* 188.495559(=π·12·5)。故 washer 走直通路径,无退化。
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ 两条 probe 实测约束(见 `docs/analysis/2026-09-14-cq-warehouse-nut-washer-probe.md`):
|
|
19
|
+
* 1. **轮廓点序决定朝向**:反序 → `getVolume` 为负(probe 段 3f 实测 −141.371669)。
|
|
20
|
+
* 本文件统一按上游逆时针序(`x` 由内向外、`z` 由下向上)给出,保证正体积。
|
|
21
|
+
* 2. **内核静默接受未闭合 wire**(probe 段 3h:`makeWire` 与 `revolve` 都不抛错)
|
|
22
|
+
* —— 闭合由 {@link primitives.polygonWire} 承担,勿绕过它直接喂边。
|
|
23
|
+
*
|
|
24
|
+
* ## A 侧基准的已知偏差(`volume` 字段对 washer 不可用)
|
|
25
|
+
*
|
|
26
|
+
* 上游 `Solid.Volume()`(OCP `BRepGProp`)对**revolve 原生生成的内孔管**给出
|
|
27
|
+
* **恰好 2×** 解析值的错值(实测 PlainWasher M6 iso7089:解析 145.669368 /
|
|
28
|
+
* `Volume()` 291.338736 / 三角化 145.609004),nut 侧不受影响。occt-wasm 的
|
|
29
|
+
* `getVolume` 对同一几何**精确**(probe 段 3b),故 STEP 比对不受影响;
|
|
30
|
+
* 但读 A 侧真值必须用 manifest 的 `volume_mesh`,**不要**用 `volume`。
|
|
31
|
+
*/
|
|
32
|
+
import { clearanceHoleData, isolateFastenerType, typesOf, WASHER_TABLES, } from './params.js';
|
|
33
|
+
import { imperialStrToFloat } from './measure.js';
|
|
34
|
+
import { polygonWire, revolveProfile } from './primitives.js';
|
|
35
|
+
function num(row, key, where) {
|
|
36
|
+
const v = row[key];
|
|
37
|
+
if (typeof v !== 'number')
|
|
38
|
+
throw new Error(`${where}: washer_data["${key}"] is not numeric (got ${JSON.stringify(v)})`);
|
|
39
|
+
return v;
|
|
40
|
+
}
|
|
41
|
+
function requireD1D2H(data, where) {
|
|
42
|
+
return {
|
|
43
|
+
d1: num(data, 'd1', where),
|
|
44
|
+
d2: num(data, 'd2', where),
|
|
45
|
+
h: num(data, 'h', where),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* `Washer.default_washer_profile`(fastener.py:2274)——矩形截面。
|
|
50
|
+
*
|
|
51
|
+
* 上游:`moveTo(d1/2, 0).hLineTo(d2/2).vLineTo(h).hLineTo(d1/2).close()`
|
|
52
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
53
|
+
* @returns 逆时针点列(4 点;`close` 的收尾边由 polygonWire 补)。
|
|
54
|
+
*/
|
|
55
|
+
export function plainWasherProfile(data) {
|
|
56
|
+
const { d1, d2, h } = requireD1D2H(data, 'PlainWasher');
|
|
57
|
+
return [
|
|
58
|
+
{ r: d1 / 2, z: 0 },
|
|
59
|
+
{ r: d2 / 2, z: 0 },
|
|
60
|
+
{ r: d2 / 2, z: h },
|
|
61
|
+
{ r: d1 / 2, z: h },
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* `ChamferedWasher.washer_profile`(fastener.py:2326)——顶面为 0.25h 斜面。
|
|
66
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
67
|
+
* @returns 逆时针点列(5 点)。
|
|
68
|
+
*/
|
|
69
|
+
export function chamferedWasherProfile(data) {
|
|
70
|
+
const { d1, d2, h } = requireD1D2H(data, 'ChamferedWasher');
|
|
71
|
+
return [
|
|
72
|
+
{ r: d1 / 2, z: 0 },
|
|
73
|
+
{ r: d2 / 2, z: 0 },
|
|
74
|
+
{ r: d2 / 2, z: 0.75 * h },
|
|
75
|
+
{ r: d2 / 2 - h * 0.25, z: h },
|
|
76
|
+
{ r: d1 / 2, z: h },
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* `CheeseHeadWasher.washer_profile`(fastener.py:2354)——内孔带沉窝。
|
|
81
|
+
* @param data - 该规格的参数行(含 d1/d2/h)。
|
|
82
|
+
* @returns 逆时针点列(6 点)。
|
|
83
|
+
*/
|
|
84
|
+
export function cheeseHeadWasherProfile(data) {
|
|
85
|
+
const { d1, d2, h } = requireD1D2H(data, 'CheeseHeadWasher');
|
|
86
|
+
return [
|
|
87
|
+
{ r: d1 / 2 + h / 4, z: 0 },
|
|
88
|
+
{ r: d2 / 2, z: 0 },
|
|
89
|
+
{ r: d2 / 2, z: h },
|
|
90
|
+
{ r: d1 / 2 + h / 4, z: h },
|
|
91
|
+
{ r: d1 / 2, z: 0.75 * h },
|
|
92
|
+
{ r: d1 / 2, z: h / 4 },
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* `Washer.default_countersink_profile`(fastener.py:2287)——沉孔切割器轮廓。
|
|
97
|
+
*
|
|
98
|
+
* 上游用 `clearance_hole_diameters[fit]`,缺该规格时抛 `ValueError`(逐字复刻)。
|
|
99
|
+
* @param size - 螺纹规格(如 `M6`),用于查 clearance 表。
|
|
100
|
+
* @param threadDiameter - 螺纹公称直径(mm),用于算 gap。
|
|
101
|
+
* @param data - 该规格的参数行(含 d2/h)。
|
|
102
|
+
* @param fit - 配合等级(`Close` / `Normal` / `Loose`)。
|
|
103
|
+
* @returns 沉孔切割器的矩形轮廓点列(2 点,宽度已含 gap)。
|
|
104
|
+
*/
|
|
105
|
+
export function washerCountersinkProfile(size, threadDiameter, data, fit) {
|
|
106
|
+
const row = clearanceHoleData[size];
|
|
107
|
+
if (!row)
|
|
108
|
+
throw new Error(`Washer: no clearance hole data for size ${size}`);
|
|
109
|
+
const clearance = row[fit];
|
|
110
|
+
if (clearance === undefined)
|
|
111
|
+
throw new Error(`Washer: ${fit} invalid, must be one of ${Object.keys(row).join(', ')}`);
|
|
112
|
+
const { d2, h } = { d2: num(data, 'd2', 'Washer'), h: num(data, 'h', 'Washer') };
|
|
113
|
+
const gap = clearance - threadDiameter;
|
|
114
|
+
return [
|
|
115
|
+
{ r: 0, z: 0 },
|
|
116
|
+
{ r: d2 / 2 + gap, z: 0 },
|
|
117
|
+
{ r: d2 / 2 + gap, z: h },
|
|
118
|
+
{ r: 0, z: h },
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
function pointsToWire(points) {
|
|
122
|
+
const world = points.map((p) => ({ x: p.r, y: 0, z: p.z }));
|
|
123
|
+
return polygonWire(world);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* `Washer.__init__` + `make_washer`(fastener.py:2235 / :2267)。
|
|
127
|
+
*
|
|
128
|
+
* @param className - 垫圈类名(决定参数表)。
|
|
129
|
+
* @param profileOf - 该类的轮廓函数(上游 `washer_profile`)。
|
|
130
|
+
* @param p - 入参(`size` / `fastener_type`)。
|
|
131
|
+
* @returns 垫圈实体与上游派生量。
|
|
132
|
+
*/
|
|
133
|
+
export function buildWasher(className, profileOf, p) {
|
|
134
|
+
const table = WASHER_TABLES[className];
|
|
135
|
+
const types = typesOf(table);
|
|
136
|
+
const size = p.size;
|
|
137
|
+
const threadSize = size;
|
|
138
|
+
const isMetric = threadSize.startsWith('M');
|
|
139
|
+
let threadDiameter;
|
|
140
|
+
if (isMetric) {
|
|
141
|
+
const v = Number(size.slice(1));
|
|
142
|
+
if (!Number.isFinite(v))
|
|
143
|
+
throw new Error(`Washer: size ${JSON.stringify(size)} is not a metric measure`);
|
|
144
|
+
threadDiameter = v;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const v = imperialStrToFloat(size);
|
|
148
|
+
if (typeof v !== 'number')
|
|
149
|
+
throw new Error(`Washer: size ${JSON.stringify(size)} is not an imperial measure`);
|
|
150
|
+
threadDiameter = v;
|
|
151
|
+
}
|
|
152
|
+
if (!types.includes(p.fastener_type))
|
|
153
|
+
throw new Error(`${p.fastener_type} invalid, must be one of ${types.join(', ')}`);
|
|
154
|
+
const isolated = isolateFastenerType(p.fastener_type, table);
|
|
155
|
+
const data = isolated[threadSize];
|
|
156
|
+
if (!data)
|
|
157
|
+
throw new Error(`${size} invalid, must be one of ${Object.keys(isolated).join(', ')}`);
|
|
158
|
+
const points = profileOf(data);
|
|
159
|
+
const handle = revolveProfile(pointsToWire(points), {
|
|
160
|
+
point: { x: 0, y: 0, z: 0 },
|
|
161
|
+
direction: { x: 0, y: 0, z: 1 },
|
|
162
|
+
}, 2 * Math.PI);
|
|
163
|
+
// 派生量取自轮廓(revolve 保半径,与上游读实体 vertex 等价;见文件头 §A 侧基准偏差)
|
|
164
|
+
const thickness = Math.max(...points.map((q) => q.z));
|
|
165
|
+
const diameter = 2 * Math.max(...points.map((q) => q.r));
|
|
166
|
+
return {
|
|
167
|
+
handle,
|
|
168
|
+
washerClass: className,
|
|
169
|
+
size,
|
|
170
|
+
threadSize,
|
|
171
|
+
threadDiameter,
|
|
172
|
+
isMetric,
|
|
173
|
+
fastenerType: p.fastener_type,
|
|
174
|
+
washerData: data,
|
|
175
|
+
thickness,
|
|
176
|
+
diameter,
|
|
177
|
+
info: `${className}(${p.fastener_type}): ${threadSize}`,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* `PlainWasher`(fastener.py:2302)——iso7089 / iso7091 / iso7093 / iso7094。
|
|
182
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 如 `iso7089`)。
|
|
183
|
+
* @returns 垫圈实体与派生量。
|
|
184
|
+
*/
|
|
185
|
+
export function plainWasher(p) {
|
|
186
|
+
return buildWasher('PlainWasher', plainWasherProfile, p);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* `ChamferedWasher`(fastener.py:2317)——iso7090。
|
|
190
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 固定 `iso7090`)。
|
|
191
|
+
* @returns 垫圈实体与派生量。
|
|
192
|
+
*/
|
|
193
|
+
export function chamferedWasher(p) {
|
|
194
|
+
return buildWasher('ChamferedWasher', chamferedWasherProfile, p);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* `CheeseHeadWasher`(fastener.py:2343)——iso7092。
|
|
198
|
+
* @param p - 入参(`size` 如 `M6`;`fastener_type` 固定 `iso7092`)。
|
|
199
|
+
* @returns 垫圈实体与派生量。
|
|
200
|
+
*/
|
|
201
|
+
export function cheeseHeadWasher(p) {
|
|
202
|
+
return buildWasher('CheeseHeadWasher', cheeseHeadWasherProfile, p);
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=washer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"washer.js","sourceRoot":"","sources":["../src/washer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@faicad/fai-cq-warehouse",
|
|
3
|
+
"version": "0.13.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://gitcode.com/Faicad/faijs.git"
|
|
9
|
+
},
|
|
10
|
+
"description": "CadQuery fasteners and hardware (nuts, screws, washers, bearings, sprockets) ported to faijs",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"cad",
|
|
13
|
+
"faijs",
|
|
14
|
+
"cadquery",
|
|
15
|
+
"fastener",
|
|
16
|
+
"hardware",
|
|
17
|
+
"nut",
|
|
18
|
+
"screw",
|
|
19
|
+
"bearing"
|
|
20
|
+
],
|
|
21
|
+
"main": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" }
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"dependencies": {},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@faicad/faijs": "^0.13.0",
|
|
32
|
+
"occt-wasm": "^3.8.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@faicad/cq-compat": "file:../cq-compat",
|
|
36
|
+
"@faicad/faijs": "file:../core",
|
|
37
|
+
"typescript": "*",
|
|
38
|
+
"vitest": "*",
|
|
39
|
+
"yaml": "^2.4.0"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.build.json && node ../../scripts/fix-import-extensions.mjs dist",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"test": "vitest run",
|
|
45
|
+
"lint": "eslint src",
|
|
46
|
+
"gen-data": "tsx scripts/gen-data.ts",
|
|
47
|
+
"check-column-semantics": "tsx scripts/check-column-semantics.ts",
|
|
48
|
+
"gen-reference": "pwsh -NoProfile scripts/gen-reference.ps1",
|
|
49
|
+
"export-ours": "tsx scripts/export-ours.ts",
|
|
50
|
+
"compare:all": "tsx scripts/compare-all.ts",
|
|
51
|
+
"probe:pitfalls": "tsx scripts/kernel-pitfalls-probe.ts",
|
|
52
|
+
"probe:nut": "tsx scripts/kernel-nut-probe.ts",
|
|
53
|
+
"probe:screw": "tsx scripts/kernel-screw-probe.ts"
|
|
54
|
+
}
|
|
55
|
+
}
|