@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/holes.d.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* holes — P1-b 孔系列(`extensions.py:865–1363` 的函数式移植)
|
|
3
|
+
*
|
|
4
|
+
* 上游以 Workplane monkey-patch 提供 `clearanceHole` / `tapHole` / `threadedHole` /
|
|
5
|
+
* `insertHole` / `pressFitHole` / `fastenerHole` / `pushFastenerLocations`;
|
|
6
|
+
* 本包按方案红线**不做 monkey-patch**,以函数式 API 提供(目标件显式入参)。
|
|
7
|
+
*
|
|
8
|
+
* 语义对齐(`_fastenerHole` 核心,extensions.py:865–1009):
|
|
9
|
+
* - 孔切割器 = 沉头(轮廓 revolve,下移 head_offset)∪ 杆部圆柱(轴向 −Z)∪ 钻尖圆锥
|
|
10
|
+
* (cskAngle=82°);
|
|
11
|
+
* - `depth=None` → 贯穿(`bboxDiagonal(part)` ≈ `Workplane.largestDimension()`);
|
|
12
|
+
* - 螺纹孔(`threadedHole`)= 间隙孔 + 内螺纹 IsoThread(external=False) 并集;
|
|
13
|
+
* - 逐孔位 `cut`(上游 `cutEach`)。
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ W4 的 `recess.ts` Temp* 临时实现在本文件落地后由 `src/nut.ts` 的 BradTeeNut
|
|
16
|
+
* 改调本文件(`fastenerHole` 路径),Temp 节随替换删除(方案 §8-W4 去重表)。
|
|
17
|
+
*/
|
|
18
|
+
import type { BrepHandle } from '@faicad/faijs';
|
|
19
|
+
import { type Hand } from './thread.js';
|
|
20
|
+
/** 钻尖角(度)—— 上游 `cskAngle = 82`(extensions.py:975)。 */
|
|
21
|
+
export declare const DRILL_TIP_ANGLE = 82;
|
|
22
|
+
/** 沉头轮廓点列(r-z 半剖面,z 轴为旋转轴)。 */
|
|
23
|
+
export interface ProfilePoint {
|
|
24
|
+
r: number;
|
|
25
|
+
z: number;
|
|
26
|
+
}
|
|
27
|
+
/** 孔位(世界坐标,孔口所在点)。 */
|
|
28
|
+
export interface HoleLocation {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
z: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 孔切割器(局部坐标:孔口在 z=0,孔轴向 −Z)—— `_fastenerHole` 的几何核心。
|
|
35
|
+
*
|
|
36
|
+
* @param p.countersinkProfile 沉头轮廓(`null` = 无沉头,如 SetScrew)
|
|
37
|
+
* @param p.holeRadius 孔半径
|
|
38
|
+
* @param p.depth 孔深
|
|
39
|
+
* @param p.threaded 内螺纹:提供则并集一个内螺纹 IsoThread(`threadedHole` 用)
|
|
40
|
+
* @param p.hand 螺纹旋向(threaded 时必填语义上由调用方保证)
|
|
41
|
+
* @param p.simple true → 跳过内螺纹(上游 `simple=True` 只打直孔)
|
|
42
|
+
*/
|
|
43
|
+
export interface FastenerHoleCutterParams {
|
|
44
|
+
countersinkProfile: ProfilePoint[] | null;
|
|
45
|
+
holeRadius: number;
|
|
46
|
+
depth: number;
|
|
47
|
+
threadDiameter?: number;
|
|
48
|
+
threadPitch?: number;
|
|
49
|
+
hand?: Hand;
|
|
50
|
+
simple?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 组装孔切割器实体(沉头 ∪ 杆部 ∪ 钻尖)。
|
|
54
|
+
* @param p - 切割器参数(countersinkProfile 沉头轮廓、holeRadius 孔径、depth 深、可选 threadDiameter/threadPitch/hand/simple)。
|
|
55
|
+
* @returns 切割器句柄,调用方平移到孔位后自行 cut。
|
|
56
|
+
*/
|
|
57
|
+
export declare function fastenerHoleCutter(p: FastenerHoleCutterParams): BrepHandle;
|
|
58
|
+
/**
|
|
59
|
+
* 内螺纹体(threadedHole 用)—— 上游 `_fastenerHole` 里它是**切割后 union 回
|
|
60
|
+
* 零件**的(extensions.py:998–1005),**不是**切割器的一部分;置于孔底
|
|
61
|
+
* `bore_direction * depth`,长 `depth − head_offset`。
|
|
62
|
+
* @param p - 螺纹参数:threadDiameter 公称径、threadPitch 螺距、length 长、可选 hand 旋向。
|
|
63
|
+
* @returns 内螺纹实体句柄(BrepHandle)。
|
|
64
|
+
*/
|
|
65
|
+
export declare function internalThreadSolid(p: {
|
|
66
|
+
threadDiameter: number;
|
|
67
|
+
threadPitch: number;
|
|
68
|
+
length: number;
|
|
69
|
+
hand?: Hand;
|
|
70
|
+
}): BrepHandle;
|
|
71
|
+
/** clearanceHole 参数(语义对齐 `extensions._clearanceHole`)。 */
|
|
72
|
+
export interface ClearanceHoleParams {
|
|
73
|
+
/** 目标件(上游为 Workplane 栈上的实体)。 */
|
|
74
|
+
part: BrepHandle;
|
|
75
|
+
/** 螺纹公称直径(如 'M6')——查 `clearance_hole_sizes`。 */
|
|
76
|
+
size: string;
|
|
77
|
+
/** 孔位列表(世界坐标)。 */
|
|
78
|
+
locations: HoleLocation[];
|
|
79
|
+
fit?: 'Close' | 'Normal' | 'Loose';
|
|
80
|
+
/** 孔深;缺省贯穿(bboxDiagonal)。 */
|
|
81
|
+
depth?: number;
|
|
82
|
+
/** 沉头轮廓;`null` = 无沉头。 */
|
|
83
|
+
countersinkProfile?: ProfilePoint[] | null;
|
|
84
|
+
counterSunk?: boolean;
|
|
85
|
+
/** 螺纹直径(用于 largestDimension 对齐时的最小深度参考;B 侧直接用贯穿)。 */
|
|
86
|
+
threadDiameter?: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* clearanceHole —— 间隙孔(`extensions.py:1080` 起的 `_clearanceHole`)。
|
|
90
|
+
* HeatSetNut 不可用(上游同样拒绝,提示改用 insertHole)。
|
|
91
|
+
* @param p - 间隙孔参数(part 目标件、size 螺纹规格、locations 孔位、可选 fit/depth/countersinkProfile/counterSunk/threadDiameter)。
|
|
92
|
+
* @returns 打孔后的零件实体。
|
|
93
|
+
*/
|
|
94
|
+
export declare function clearanceHole(p: ClearanceHoleParams): BrepHandle;
|
|
95
|
+
/** tapHole 参数(语义对齐 `_tapHole`:material 定孔径)。 */
|
|
96
|
+
export interface TapHoleParams {
|
|
97
|
+
part: BrepHandle;
|
|
98
|
+
size: string;
|
|
99
|
+
locations: HoleLocation[];
|
|
100
|
+
material?: 'Soft' | 'Hard';
|
|
101
|
+
fit?: 'Close' | 'Normal' | 'Loose';
|
|
102
|
+
depth?: number;
|
|
103
|
+
countersinkProfile?: ProfilePoint[] | null;
|
|
104
|
+
counterSunk?: boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* tapHole —— 攻丝底孔(直孔,无螺纹;上游 `_tapHole` → `_fastenerHole(hand=None)`)。
|
|
108
|
+
* @param p - 攻丝孔参数(part、size、locations、可选 material/fit/depth/countersinkProfile/counterSunk)。
|
|
109
|
+
* @returns 打孔后的零件实体。
|
|
110
|
+
*/
|
|
111
|
+
export declare function tapHole(p: TapHoleParams): BrepHandle;
|
|
112
|
+
/** threadedHole 参数(语义对齐 `_threadedHole`:间隙孔 + 内螺纹)。 */
|
|
113
|
+
export interface ThreadedHoleParams {
|
|
114
|
+
part: BrepHandle;
|
|
115
|
+
size: string;
|
|
116
|
+
locations: HoleLocation[];
|
|
117
|
+
/** 螺距(来自紧固件参数行 `pitch`)。 */
|
|
118
|
+
pitch: number;
|
|
119
|
+
hand?: Hand;
|
|
120
|
+
simple?: boolean;
|
|
121
|
+
fit?: 'Close' | 'Normal' | 'Loose';
|
|
122
|
+
depth?: number;
|
|
123
|
+
countersinkProfile?: ProfilePoint[] | null;
|
|
124
|
+
counterSunk?: boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* threadedHole —— 螺纹孔:间隙孔切割后再与内螺纹 IsoThread 求并(上游
|
|
128
|
+
* `_threadedHole` → `_fastenerHole(hand≠None)`,`simple=False` 才有螺纹体)。
|
|
129
|
+
* @param p - 螺纹孔参数(part、size、locations、pitch、可选 hand/simple/fit/depth/countersinkProfile/counterSunk)。
|
|
130
|
+
* @returns 打孔并含内螺纹的零件实体。
|
|
131
|
+
*/
|
|
132
|
+
export declare function threadedHole(p: ThreadedHoleParams): BrepHandle;
|
|
133
|
+
/** insertHole 参数(语义对齐 `_insertHole`:仅 HeatSetNut,间隙孔径)。 */
|
|
134
|
+
export interface InsertHoleParams {
|
|
135
|
+
part: BrepHandle;
|
|
136
|
+
size: string;
|
|
137
|
+
locations: HoleLocation[];
|
|
138
|
+
fit?: 'Close' | 'Normal' | 'Loose';
|
|
139
|
+
depth?: number;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* insertHole —— HeatSetNut 专用直孔(上游拒绝其它紧固件类型)。
|
|
143
|
+
* 注:W4 起 `HeatSetNut` 本体因内核缺 `makeNSidedSurface` 显式抛错;本函数
|
|
144
|
+
* 只依赖间隙孔径表,可用。
|
|
145
|
+
* @param p - 直孔参数(part、size、locations、可选 fit/depth)。
|
|
146
|
+
* @returns 打孔后的零件实体。
|
|
147
|
+
*/
|
|
148
|
+
export declare function insertHole(p: InsertHoleParams): BrepHandle;
|
|
149
|
+
/** pressFitHole 参数(语义对齐 `_pressFitHole`:仅 Bearing,间隙孔径)。 */
|
|
150
|
+
export interface PressFitHoleParams {
|
|
151
|
+
part: BrepHandle;
|
|
152
|
+
size: string;
|
|
153
|
+
locations: HoleLocation[];
|
|
154
|
+
fit?: 'Close' | 'Normal' | 'Loose';
|
|
155
|
+
depth?: number;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* pressFitHole —— 轴承压入孔(上游拒绝非 Bearing;外圈间隙孔径表)。
|
|
159
|
+
* Bearing 的孔径表在 bearing 参数行(`clearance_hole_diameters`),此处按 size 查。
|
|
160
|
+
* @param p - 压入孔参数(part、size、locations、可选 fit/depth)。
|
|
161
|
+
* @returns 打孔后的零件实体。
|
|
162
|
+
*/
|
|
163
|
+
export declare function pressFitHole(p: PressFitHoleParams): BrepHandle;
|
|
164
|
+
/**
|
|
165
|
+
* fastenerHole —— 通用入口(语义对齐 `_fastenerHole` 本体):调用方直接给
|
|
166
|
+
* 孔径/沉头/螺纹参数,不必经过各具名封装。
|
|
167
|
+
*/
|
|
168
|
+
export interface FastenerHoleParams extends FastenerHoleCutterParams {
|
|
169
|
+
part: BrepHandle;
|
|
170
|
+
locations: HoleLocation[];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* fastenerHole —— 通用入口(语义对齐 `_fastenerHole` 本体):调用方直接给
|
|
174
|
+
* 孔径/沉头/螺纹参数,不必经过各具名封装;逐孔位切割。
|
|
175
|
+
* @param p - 通用孔参数(FastenerHoleCutterParams + part + locations)。
|
|
176
|
+
* @returns 打孔后的零件实体。
|
|
177
|
+
*/
|
|
178
|
+
export declare function fastenerHole(p: FastenerHoleParams): BrepHandle;
|
|
179
|
+
/**
|
|
180
|
+
* pushFastenerLocations —— 记录孔位(上游为 Assembly 收集紧固件用;
|
|
181
|
+
* 函数式形态下直接返回入参孔位副本,供调用方装配用)。
|
|
182
|
+
* @param locations - 孔位列表。
|
|
183
|
+
* @returns 孔位副本(HoleLocation[])。
|
|
184
|
+
*/
|
|
185
|
+
export declare function pushFastenerLocations(locations: HoleLocation[]): HoleLocation[];
|
|
186
|
+
//# sourceMappingURL=holes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holes.d.ts","sourceRoot":"","sources":["../src/holes.ts"],"names":[],"mappings":"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"}
|
package/dist/holes.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* holes — P1-b 孔系列(`extensions.py:865–1363` 的函数式移植)
|
|
3
|
+
*
|
|
4
|
+
* 上游以 Workplane monkey-patch 提供 `clearanceHole` / `tapHole` / `threadedHole` /
|
|
5
|
+
* `insertHole` / `pressFitHole` / `fastenerHole` / `pushFastenerLocations`;
|
|
6
|
+
* 本包按方案红线**不做 monkey-patch**,以函数式 API 提供(目标件显式入参)。
|
|
7
|
+
*
|
|
8
|
+
* 语义对齐(`_fastenerHole` 核心,extensions.py:865–1009):
|
|
9
|
+
* - 孔切割器 = 沉头(轮廓 revolve,下移 head_offset)∪ 杆部圆柱(轴向 −Z)∪ 钻尖圆锥
|
|
10
|
+
* (cskAngle=82°);
|
|
11
|
+
* - `depth=None` → 贯穿(`bboxDiagonal(part)` ≈ `Workplane.largestDimension()`);
|
|
12
|
+
* - 螺纹孔(`threadedHole`)= 间隙孔 + 内螺纹 IsoThread(external=False) 并集;
|
|
13
|
+
* - 逐孔位 `cut`(上游 `cutEach`)。
|
|
14
|
+
*
|
|
15
|
+
* ⚠️ W4 的 `recess.ts` Temp* 临时实现在本文件落地后由 `src/nut.ts` 的 BradTeeNut
|
|
16
|
+
* 改调本文件(`fastenerHole` 路径),Temp 节随替换删除(方案 §8-W4 去重表)。
|
|
17
|
+
*/
|
|
18
|
+
import { requireKernel } from './kernel.js';
|
|
19
|
+
import { cone, cylinder, fuse, revolveProfile, polygonWire, translate, bboxDiagonal, } from './primitives.js';
|
|
20
|
+
import { isoThread } from './thread.js';
|
|
21
|
+
import { clearanceHoleDiameters, tapHoleDiameters } from './params.js';
|
|
22
|
+
/** 钻尖角(度)—— 上游 `cskAngle = 82`(extensions.py:975)。 */
|
|
23
|
+
export const DRILL_TIP_ANGLE = 82;
|
|
24
|
+
/** 旋转轴(+Z)。 */
|
|
25
|
+
const AXIS_Z = { point: { x: 0, y: 0, z: 0 }, direction: { x: 0, y: 0, z: 1 } };
|
|
26
|
+
/**
|
|
27
|
+
* 组装孔切割器实体(沉头 ∪ 杆部 ∪ 钻尖)。
|
|
28
|
+
* @param p - 切割器参数(countersinkProfile 沉头轮廓、holeRadius 孔径、depth 深、可选 threadDiameter/threadPitch/hand/simple)。
|
|
29
|
+
* @returns 切割器句柄,调用方平移到孔位后自行 cut。
|
|
30
|
+
*/
|
|
31
|
+
export function fastenerHoleCutter(p) {
|
|
32
|
+
const { countersinkProfile, holeRadius, depth } = p;
|
|
33
|
+
const headOffset = countersinkProfile !== null ? Math.max(...countersinkProfile.map((q) => q.z)) : 0;
|
|
34
|
+
let cutter;
|
|
35
|
+
if (countersinkProfile !== null) {
|
|
36
|
+
// ① 沉头:轮廓绕 +Z 旋转,下移 head_offset → z ∈ [−headOffset, 0]
|
|
37
|
+
const csk = translate(revolveProfile(polygonWire(countersinkProfile.map((q) => ({ x: q.r, y: 0, z: q.z }))), AXIS_Z, 2 * Math.PI), 0, 0, -headOffset);
|
|
38
|
+
// ② 杆部:自 z=0 向 −Z 长 depth
|
|
39
|
+
const shank = translate(cylinder(holeRadius, depth), 0, 0, -depth);
|
|
40
|
+
cutter = fuse(csk, shank);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
cutter = translate(cylinder(holeRadius, depth), 0, 0, -depth);
|
|
44
|
+
}
|
|
45
|
+
// ③ 钻尖:底半径 holeRadius 于 z=−depth,尖顶向下
|
|
46
|
+
const h = holeRadius / Math.tan(((DRILL_TIP_ANGLE / 2) * Math.PI) / 180);
|
|
47
|
+
const tip = translate(cone(0, holeRadius, h), 0, 0, -depth - h);
|
|
48
|
+
return fuse(cutter, tip);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 内螺纹体(threadedHole 用)—— 上游 `_fastenerHole` 里它是**切割后 union 回
|
|
52
|
+
* 零件**的(extensions.py:998–1005),**不是**切割器的一部分;置于孔底
|
|
53
|
+
* `bore_direction * depth`,长 `depth − head_offset`。
|
|
54
|
+
* @param p - 螺纹参数:threadDiameter 公称径、threadPitch 螺距、length 长、可选 hand 旋向。
|
|
55
|
+
* @returns 内螺纹实体句柄(BrepHandle)。
|
|
56
|
+
*/
|
|
57
|
+
export function internalThreadSolid(p) {
|
|
58
|
+
const thread = isoThread({
|
|
59
|
+
major_diameter: p.threadDiameter,
|
|
60
|
+
pitch: p.threadPitch,
|
|
61
|
+
length: p.length,
|
|
62
|
+
external: false,
|
|
63
|
+
hand: p.hand ?? 'right',
|
|
64
|
+
});
|
|
65
|
+
if (thread.handle === null) {
|
|
66
|
+
throw new Error('internalThreadSolid: IsoThread returned no solid');
|
|
67
|
+
}
|
|
68
|
+
return thread.handle;
|
|
69
|
+
}
|
|
70
|
+
/** 逐孔位切割公共实现:对 part 在每个 location 上 cut 同一切割器。 */
|
|
71
|
+
function cutAtLocations(part, cutter, locations) {
|
|
72
|
+
const k = requireKernel();
|
|
73
|
+
let out = part;
|
|
74
|
+
for (const loc of locations) {
|
|
75
|
+
const moved = translate(cutter, loc.x, loc.y, loc.z);
|
|
76
|
+
out = k.cut(out, moved);
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
|
80
|
+
/** 解析孔径:fit(间隙)或 material(攻丝),缺失即抛错(对齐上游 ValueError)。 */
|
|
81
|
+
function resolveDiameter(table, key, what) {
|
|
82
|
+
const k = key ?? 'Normal';
|
|
83
|
+
const v = table[k];
|
|
84
|
+
if (typeof v !== 'number') {
|
|
85
|
+
throw new Error(`${what}: ${k} invalid, must be one of ${Object.keys(table).join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
return v;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* clearanceHole —— 间隙孔(`extensions.py:1080` 起的 `_clearanceHole`)。
|
|
91
|
+
* HeatSetNut 不可用(上游同样拒绝,提示改用 insertHole)。
|
|
92
|
+
* @param p - 间隙孔参数(part 目标件、size 螺纹规格、locations 孔位、可选 fit/depth/countersinkProfile/counterSunk/threadDiameter)。
|
|
93
|
+
* @returns 打孔后的零件实体。
|
|
94
|
+
*/
|
|
95
|
+
export function clearanceHole(p) {
|
|
96
|
+
const fit = p.fit ?? 'Normal';
|
|
97
|
+
const diameters = clearanceHoleDiameters(p.size);
|
|
98
|
+
const holeRadius = resolveDiameter(diameters, fit, 'clearanceHole') / 2;
|
|
99
|
+
const depth = p.depth ?? bboxDiagonal(p.part);
|
|
100
|
+
const csk = p.counterSunk === false ? null : (p.countersinkProfile ?? null);
|
|
101
|
+
const cutter = fastenerHoleCutter({ countersinkProfile: csk, holeRadius, depth });
|
|
102
|
+
return cutAtLocations(p.part, cutter, p.locations);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* tapHole —— 攻丝底孔(直孔,无螺纹;上游 `_tapHole` → `_fastenerHole(hand=None)`)。
|
|
106
|
+
* @param p - 攻丝孔参数(part、size、locations、可选 material/fit/depth/countersinkProfile/counterSunk)。
|
|
107
|
+
* @returns 打孔后的零件实体。
|
|
108
|
+
*/
|
|
109
|
+
export function tapHole(p) {
|
|
110
|
+
const material = p.material ?? 'Soft';
|
|
111
|
+
const diameters = tapHoleDiameters(p.size);
|
|
112
|
+
const holeRadius = resolveDiameter(diameters, material, 'tapHole') / 2;
|
|
113
|
+
const depth = p.depth ?? bboxDiagonal(p.part);
|
|
114
|
+
const csk = p.counterSunk === false ? null : (p.countersinkProfile ?? null);
|
|
115
|
+
const cutter = fastenerHoleCutter({ countersinkProfile: csk, holeRadius, depth });
|
|
116
|
+
return cutAtLocations(p.part, cutter, p.locations);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* threadedHole —— 螺纹孔:间隙孔切割后再与内螺纹 IsoThread 求并(上游
|
|
120
|
+
* `_threadedHole` → `_fastenerHole(hand≠None)`,`simple=False` 才有螺纹体)。
|
|
121
|
+
* @param p - 螺纹孔参数(part、size、locations、pitch、可选 hand/simple/fit/depth/countersinkProfile/counterSunk)。
|
|
122
|
+
* @returns 打孔并含内螺纹的零件实体。
|
|
123
|
+
*/
|
|
124
|
+
export function threadedHole(p) {
|
|
125
|
+
const fit = p.fit ?? 'Normal';
|
|
126
|
+
const diameters = clearanceHoleDiameters(p.size);
|
|
127
|
+
const holeRadius = resolveDiameter(diameters, fit, 'threadedHole') / 2;
|
|
128
|
+
const depth = p.depth ?? bboxDiagonal(p.part);
|
|
129
|
+
const csk = p.counterSunk === false ? null : (p.countersinkProfile ?? null);
|
|
130
|
+
const headOffset = csk !== null ? Math.max(...csk.map((q) => q.z)) : 0;
|
|
131
|
+
const cutter = fastenerHoleCutter({ countersinkProfile: csk, holeRadius, depth });
|
|
132
|
+
let out = cutAtLocations(p.part, cutter, p.locations);
|
|
133
|
+
// 上游:threaded 且非 simple 时,把内螺纹 union 回零件(extensions.py:998–1005)
|
|
134
|
+
if (p.simple !== true) {
|
|
135
|
+
const thread = internalThreadSolid({
|
|
136
|
+
threadDiameter: Number(p.size.replace(/[^0-9.]/g, '')),
|
|
137
|
+
threadPitch: p.pitch,
|
|
138
|
+
length: depth - headOffset,
|
|
139
|
+
hand: p.hand,
|
|
140
|
+
});
|
|
141
|
+
const k = requireKernel();
|
|
142
|
+
for (const loc of p.locations) {
|
|
143
|
+
const moved = translate(thread, loc.x, loc.y, loc.z - depth);
|
|
144
|
+
out = k.fuse(out, moved);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* insertHole —— HeatSetNut 专用直孔(上游拒绝其它紧固件类型)。
|
|
151
|
+
* 注:W4 起 `HeatSetNut` 本体因内核缺 `makeNSidedSurface` 显式抛错;本函数
|
|
152
|
+
* 只依赖间隙孔径表,可用。
|
|
153
|
+
* @param p - 直孔参数(part、size、locations、可选 fit/depth)。
|
|
154
|
+
* @returns 打孔后的零件实体。
|
|
155
|
+
*/
|
|
156
|
+
export function insertHole(p) {
|
|
157
|
+
const fit = p.fit ?? 'Normal';
|
|
158
|
+
const diameters = clearanceHoleDiameters(p.size);
|
|
159
|
+
const holeRadius = resolveDiameter(diameters, fit, 'insertHole') / 2;
|
|
160
|
+
const depth = p.depth ?? bboxDiagonal(p.part);
|
|
161
|
+
const cutter = fastenerHoleCutter({ countersinkProfile: null, holeRadius, depth });
|
|
162
|
+
return cutAtLocations(p.part, cutter, p.locations);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* pressFitHole —— 轴承压入孔(上游拒绝非 Bearing;外圈间隙孔径表)。
|
|
166
|
+
* Bearing 的孔径表在 bearing 参数行(`clearance_hole_diameters`),此处按 size 查。
|
|
167
|
+
* @param p - 压入孔参数(part、size、locations、可选 fit/depth)。
|
|
168
|
+
* @returns 打孔后的零件实体。
|
|
169
|
+
*/
|
|
170
|
+
export function pressFitHole(p) {
|
|
171
|
+
const fit = p.fit ?? 'Normal';
|
|
172
|
+
const diameters = clearanceHoleDiameters(p.size);
|
|
173
|
+
const holeRadius = resolveDiameter(diameters, fit, 'pressFitHole') / 2;
|
|
174
|
+
const depth = p.depth ?? bboxDiagonal(p.part);
|
|
175
|
+
const cutter = fastenerHoleCutter({ countersinkProfile: null, holeRadius, depth });
|
|
176
|
+
return cutAtLocations(p.part, cutter, p.locations);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* fastenerHole —— 通用入口(语义对齐 `_fastenerHole` 本体):调用方直接给
|
|
180
|
+
* 孔径/沉头/螺纹参数,不必经过各具名封装;逐孔位切割。
|
|
181
|
+
* @param p - 通用孔参数(FastenerHoleCutterParams + part + locations)。
|
|
182
|
+
* @returns 打孔后的零件实体。
|
|
183
|
+
*/
|
|
184
|
+
export function fastenerHole(p) {
|
|
185
|
+
const { part, locations, ...cutter } = p;
|
|
186
|
+
return cutAtLocations(part, fastenerHoleCutter(cutter), locations);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* pushFastenerLocations —— 记录孔位(上游为 Assembly 收集紧固件用;
|
|
190
|
+
* 函数式形态下直接返回入参孔位副本,供调用方装配用)。
|
|
191
|
+
* @param locations - 孔位列表。
|
|
192
|
+
* @returns 孔位副本(HoleLocation[])。
|
|
193
|
+
*/
|
|
194
|
+
export function pushFastenerLocations(locations) {
|
|
195
|
+
return locations.map((l) => ({ ...l }));
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=holes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holes.js","sourceRoot":"","sources":["../src/holes.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index — fai_cq_warehouse 公共 API 入口(W8 汇总导出)
|
|
3
|
+
*
|
|
4
|
+
* 移植自 cq_warehouse(上游 0.8.0)的 6 个几何模块:
|
|
5
|
+
* thread(5 类)/ nut(7 类)/ screw(12 类)/ washer(3 类)/ bearing(5 类)/ sprocket(1 类)。
|
|
6
|
+
*
|
|
7
|
+
* 约定(方案 §4.2,与 fai_cq_gears 同构):
|
|
8
|
+
* - 参数名逐字沿用 Python;构建函数返回 `Result`(kernel 阶段失败转 `err`)。
|
|
9
|
+
* - `types()`/`sizes()` 类方法转 `nutTypes()`/`nutSizes()` 等函数式形态(params.ts)。
|
|
10
|
+
* - `contractVersion` 语义见方案 §4.2.1:本包 API 形状 + 参数表来源 + STEP 输出
|
|
11
|
+
* 形态的行为契约版本;与内核契约对齐(照 fai_cq_gears,勿硬编码)。
|
|
12
|
+
* - P1 增项已落地:孔系列(holes.ts,函数式)与 Chain(chain.ts,平面 2+ 链轮),
|
|
13
|
+
* 见 Agent Note 2026-09-15-fai-cq-warehouse-w9-p1-chain-holes。
|
|
14
|
+
*/
|
|
15
|
+
export { contractVersion } from './contract.js';
|
|
16
|
+
export type { Result } from '@faicad/faijs';
|
|
17
|
+
export { type ParamRow, type ParamTable, isolateFastenerType, typesOf, sizesOf, NUT_TABLES, SCREW_TABLES, WASHER_TABLES, BEARING_TABLES, type NutClassName, type ScrewClassName, type WasherClassName, type BearingClassName, nutTypes, nutSizes, screwTypes, screwSizes, bearingTypes, bearingSizes, washerTypes, washerSizes, clearanceHoleDiameters, tapHoleDiameters, selectBySize, } from './params.js';
|
|
18
|
+
export { INCH, metricStrToFloat, imperialStrToFloat, evalArithmetic, evaluateCell, } from './measure.js';
|
|
19
|
+
export { type EndFinish, type Hand, type ThreadSpec, type ThreadResult, type IsoThreadParams, type TrapezoidalParams, type PlasticBottleThreadParams, ACME_PITCH, METRIC_TRAPEZOIDAL_SIZES, buildThread, isoThreadDimensions, isoThread, acmeThreadSizes, acmeThreadParseSize, acmeThread, metricTrapezoidalThreadSizes, metricTrapezoidalThreadParseSize, metricTrapezoidalThread, plasticBottleThreadDimensions, plasticBottleThread, } from './thread.js';
|
|
20
|
+
export { type NutParams, type NutResult, buildNut, hexNut, hexNutWithFlange, unchamferedHexagonNut, squareNut, domedCapNut, bradTeeNut, heatSetNut, polarArrayLocations, } from './nut.js';
|
|
21
|
+
export { type ScrewParams, type ScrewResult, SCREW_CLASSES, screwProfilePoints, buildScrew, } from './screw.js';
|
|
22
|
+
export { type WasherParams, type WasherResult, plainWasher, chamferedWasher, cheeseHeadWasher, } from './washer.js';
|
|
23
|
+
export { type BearingParams, type BearingResult, BEARING_CLASSES, buildBearing, } from './bearing.js';
|
|
24
|
+
export { type SprocketParams, type SprocketResult, buildSprocket, sprocketPitchRadius, sprocketCircumference, } from './sprocket.js';
|
|
25
|
+
export { DRILL_TIP_ANGLE, type ProfilePoint, type HoleLocation, type FastenerHoleCutterParams, fastenerHoleCutter, internalThreadSolid, type ClearanceHoleParams, clearanceHole, type TapHoleParams, tapHole, type ThreadedHoleParams, threadedHole, type InsertHoleParams, insertHole, type PressFitHoleParams, pressFitHole, type FastenerHoleParams, fastenerHole, pushFastenerLocations, } from './holes.js';
|
|
26
|
+
export { type ChainParams, type ChainPart, type ChainResult, buildChain, makeLink, placeSprocket, } from './chain.js';
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAG3C,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,UAAU,EACV,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,4BAA4B,EAC5B,gCAAgC,EAChC,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,mBAAmB,GACpB,MAAM,OAAO,CAAA;AAGd,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,aAAa,EACb,kBAAkB,EAClB,UAAU,GACX,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,eAAe,EACf,YAAY,GACb,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,aAAa,EAClB,OAAO,EACP,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,kBAAkB,EACvB,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,UAAU,EACV,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* index — fai_cq_warehouse 公共 API 入口(W8 汇总导出)
|
|
3
|
+
*
|
|
4
|
+
* 移植自 cq_warehouse(上游 0.8.0)的 6 个几何模块:
|
|
5
|
+
* thread(5 类)/ nut(7 类)/ screw(12 类)/ washer(3 类)/ bearing(5 类)/ sprocket(1 类)。
|
|
6
|
+
*
|
|
7
|
+
* 约定(方案 §4.2,与 fai_cq_gears 同构):
|
|
8
|
+
* - 参数名逐字沿用 Python;构建函数返回 `Result`(kernel 阶段失败转 `err`)。
|
|
9
|
+
* - `types()`/`sizes()` 类方法转 `nutTypes()`/`nutSizes()` 等函数式形态(params.ts)。
|
|
10
|
+
* - `contractVersion` 语义见方案 §4.2.1:本包 API 形状 + 参数表来源 + STEP 输出
|
|
11
|
+
* 形态的行为契约版本;与内核契约对齐(照 fai_cq_gears,勿硬编码)。
|
|
12
|
+
* - P1 增项已落地:孔系列(holes.ts,函数式)与 Chain(chain.ts,平面 2+ 链轮),
|
|
13
|
+
* 见 Agent Note 2026-09-15-fai-cq-warehouse-w9-p1-chain-holes。
|
|
14
|
+
*/
|
|
15
|
+
export { contractVersion } from './contract.js';
|
|
16
|
+
// ── 参数表查询(types()/sizes()/select_by_size 等价面)────────────────────────
|
|
17
|
+
export { isolateFastenerType, typesOf, sizesOf, NUT_TABLES, SCREW_TABLES, WASHER_TABLES, BEARING_TABLES, nutTypes, nutSizes, screwTypes, screwSizes, bearingTypes, bearingSizes, washerTypes, washerSizes, clearanceHoleDiameters, tapHoleDiameters, selectBySize, } from './params.js';
|
|
18
|
+
// ── 字符串度量解析 ────────────────────────────────────────────────────────────
|
|
19
|
+
export { INCH, metricStrToFloat, imperialStrToFloat, evalArithmetic, evaluateCell, } from './measure.js';
|
|
20
|
+
// ── thread:Thread / IsoThread / AcmeThread / MetricTrapezoidalThread / PlasticBottleThread ──
|
|
21
|
+
export { ACME_PITCH, METRIC_TRAPEZOIDAL_SIZES, buildThread, isoThreadDimensions, isoThread, acmeThreadSizes, acmeThreadParseSize, acmeThread, metricTrapezoidalThreadSizes, metricTrapezoidalThreadParseSize, metricTrapezoidalThread, plasticBottleThreadDimensions, plasticBottleThread, } from './thread.js';
|
|
22
|
+
// ── nut:7 类螺母 ─────────────────────────────────────────────────────────────
|
|
23
|
+
export { buildNut, hexNut, hexNutWithFlange, unchamferedHexagonNut, squareNut, domedCapNut, bradTeeNut, heatSetNut, polarArrayLocations, } from './nut.js';
|
|
24
|
+
// ── screw:12 类螺钉 ──────────────────────────────────────────────────────────
|
|
25
|
+
export { SCREW_CLASSES, screwProfilePoints, buildScrew, } from './screw.js';
|
|
26
|
+
// ── washer:3 类垫圈 ──────────────────────────────────────────────────────────
|
|
27
|
+
export { plainWasher, chamferedWasher, cheeseHeadWasher, } from './washer.js';
|
|
28
|
+
// ── bearing:5 类轴承 ─────────────────────────────────────────────────────────
|
|
29
|
+
export { BEARING_CLASSES, buildBearing, } from './bearing.js';
|
|
30
|
+
// ── sprocket:链轮 ────────────────────────────────────────────────────────────
|
|
31
|
+
export { buildSprocket, sprocketPitchRadius, sprocketCircumference, } from './sprocket.js';
|
|
32
|
+
// ── holes:P1-b 孔系列(函数式,不做 monkey-patch)────────────────────────────
|
|
33
|
+
export { DRILL_TIP_ANGLE, fastenerHoleCutter, internalThreadSolid, clearanceHole, tapHole, threadedHole, insertHole, pressFitHole, fastenerHole, pushFastenerLocations, } from './holes.js';
|
|
34
|
+
// ── chain:P1-a 滚子链(平面 2 链轮形态)──────────────────────────────────────
|
|
35
|
+
export { buildChain, makeLink, placeSprocket, } from './chain.js';
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,uEAAuE;AACvE,OAAO,EAGL,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EAKd,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAA;AAEjB,0EAA0E;AAC1E,OAAO,EACL,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,+FAA+F;AAC/F,OAAO,EAQL,UAAU,EACV,wBAAwB,EACxB,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,4BAA4B,EAC5B,gCAAgC,EAChC,uBAAuB,EACvB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,UAAU,CAAA;AAEjB,6EAA6E;AAC7E,OAAO,EAGL,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,mBAAmB,GACpB,MAAM,OAAO,CAAA;AAEd,6EAA6E;AAC7E,OAAO,EAGL,aAAa,EACb,kBAAkB,EAClB,UAAU,GACX,MAAM,SAAS,CAAA;AAEhB,6EAA6E;AAC7E,OAAO,EAGL,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,UAAU,CAAA;AAEjB,6EAA6E;AAC7E,OAAO,EAGL,eAAe,EACf,YAAY,GACb,MAAM,WAAW,CAAA;AAElB,8EAA8E;AAC9E,OAAO,EAGL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB,qEAAqE;AACrE,OAAO,EACL,eAAe,EAIf,kBAAkB,EAClB,mBAAmB,EAEnB,aAAa,EAEb,OAAO,EAEP,YAAY,EAEZ,UAAU,EAEV,YAAY,EAEZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,SAAS,CAAA;AAEhB,qEAAqE;AACrE,OAAO,EAIL,UAAU,EACV,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAA"}
|
package/dist/kernel.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kernel.ts — 本包私有 raw 内核访问层(方案 §5.5.2 第 ①② 层)。
|
|
3
|
+
*
|
|
4
|
+
* 红线(§5.1 约束 2/3):
|
|
5
|
+
* - 本包不 initOcctWasm()、不持有 kernel 单例——内核由 host 经
|
|
6
|
+
* getBackends().kernel.brep 注入;未配置即抛错、禁止兜底。
|
|
7
|
+
* - 全包**只有本文件**调 getBackends();其余文件一律 import { requireKernel }。
|
|
8
|
+
* 将来 core 的 KernelBase backlog(§5.5.1 / D3)修复后只需改这里 1 行。
|
|
9
|
+
* - 不 import occt-wasm / GearKernel(那是另一个第三方库的私有接口)。
|
|
10
|
+
*/
|
|
11
|
+
import type { BrepEngineApi, BrepHandle, BrepVec3 } from '@faicad/faijs';
|
|
12
|
+
/**
|
|
13
|
+
* Get the BREP kernel injected by the host.
|
|
14
|
+
* 与 core 自身消费点同构(`core/src/api/*.ts` 等 19 处同一模式)。
|
|
15
|
+
* @throws when the kernel is absent — never silently falls back to null or a stub
|
|
16
|
+
* (aligned with `runtime-state.ts:364-368`).
|
|
17
|
+
* @returns host 注入的 BREP 引擎 API。
|
|
18
|
+
*/
|
|
19
|
+
export declare function requireKernel(): BrepEngineApi;
|
|
20
|
+
/** Rotation axis (point + direction), mirroring cq `Workplane` axis semantics. */
|
|
21
|
+
export interface WarehouseAxis {
|
|
22
|
+
point: BrepVec3;
|
|
23
|
+
direction: BrepVec3;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* WarehouseKernel extends BrepEngineApi — 只声明本包真正用到的成员
|
|
27
|
+
* (方案 §5.5.2 第 ② 层:结构性匹配,不 import occt-wasm)。
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ 关键认知:这一层是「我认为应该有」的**声明**,不是证明——它只换来
|
|
30
|
+
* 编辑器补全,不提供任何正确性保证。正确性由 kernel-conformance.test.ts
|
|
31
|
+
* (第 ③ 层,两级断言:存在性 + 契约 smoke)兜住;新增成员必须先加进
|
|
32
|
+
* 该测试的清单(§10 内核契约门禁)。
|
|
33
|
+
*/
|
|
34
|
+
export interface WarehouseKernel extends BrepEngineApi {
|
|
35
|
+
/** cq `Wire.makeHelix` 等价:**右手**圆柱螺旋线。
|
|
36
|
+
* ⚠️ 实测(occtWasmAdapter:430):raw wasm 仅 9 参,无 taper/lefthand——
|
|
37
|
+
* 锥螺旋上游 5 类用不到(taper 默认 360°=圆柱);左手螺纹由调用方镜像实现。 */
|
|
38
|
+
makeHelixWire(origin: BrepVec3, axis: BrepVec3, pitch: number, height: number, radius: number): BrepHandle;
|
|
39
|
+
/** 点列 → 逼近 B 样条曲线(thread 端部 fade 的参数曲线,cq parametricCurve 等价)。 */
|
|
40
|
+
approximatePoints(points: BrepVec3[], tolerance?: number): BrepHandle;
|
|
41
|
+
/** 点列 → 插值 B 样条曲线(cq `Workplane.spline` 的内核等价:过点插值,
|
|
42
|
+
* 非逼近;PanHead 等头型轮廓用)。 */
|
|
43
|
+
interpolatePoints(points: BrepVec3[], options?: {
|
|
44
|
+
periodic?: boolean;
|
|
45
|
+
tolerance?: number;
|
|
46
|
+
}): BrepHandle;
|
|
47
|
+
/** 点列 + 端点切向 → 插值三次 B 样条(`GeomAPI_Interpolate.Load(t0, t1, scale=True)`
|
|
48
|
+
* 等价:切向量按弦长缩放,PanHead 头型样条复刻用)。 */
|
|
49
|
+
interpolatePointsWithTangents(points: BrepVec3[], startTangent: BrepVec3, endTangent: BrepVec3): BrepHandle;
|
|
50
|
+
/** 点阵 → B 样条曲面 → Face(齿廓/螺纹曲面逼近)。 */
|
|
51
|
+
bsplineSurface(points: BrepVec3[], rows: number, cols: number): BrepHandle;
|
|
52
|
+
/** `BRepBuilderAPI_Sewing`:faces → shell(thread 的 make_shell 步骤)。 */
|
|
53
|
+
sew(shapes: BrepHandle[], tolerance?: number): BrepHandle;
|
|
54
|
+
/** shell → solid(thread 的 make_solid 步骤)。 */
|
|
55
|
+
makeSolid(shell: BrepHandle): BrepHandle;
|
|
56
|
+
/** face/wire 绕轴旋转扫掠(nut/screw/bearing 的 revolve 轮廓)。 */
|
|
57
|
+
revolve(shape: BrepHandle, axis: WarehouseAxis, angleRad: number): BrepHandle;
|
|
58
|
+
/** 退化为厚度的面拉伸(fastener knurl 面;makeNSidedSurface 缺失期的路径之一)。 */
|
|
59
|
+
thicken(shape: BrepHandle, thickness: number, tolerance: number): BrepHandle;
|
|
60
|
+
/** 非平面 wire → face(HeatSetNut knurl,kernel 层原语——注意与
|
|
61
|
+
* extensions.py 的 Workplane 级 makeNonPlanarFace 封装是两个层,§3.4)。 */
|
|
62
|
+
makeNonPlanarFace(wire: BrepHandle): BrepHandle;
|
|
63
|
+
/** 带拔模角的棱柱拉伸(LocOpe_DPrism 等价,screw 沉孔锥度切割器)。
|
|
64
|
+
* ⚠️ 实测:截面随锥度收缩到自交(如 cross 沉孔臂宽退化)时**直接抛错**——
|
|
65
|
+
* A 侧 LocOpe_DPrism 容忍退化并续生锥面,本内核不能;故 taper=30° 的
|
|
66
|
+
* cross/R 沉孔是 W5 显式缺口(见 recess.ts 文件头)。 */
|
|
67
|
+
draftPrism(shape: BrepHandle, dx: number, dy: number, dz: number, angleDeg: number): BrepHandle;
|
|
68
|
+
/** 反转 shape 的朝向。实测:2×2×2 box 体积 8 → -8,即 getVolume 随之变号;
|
|
69
|
+
* 用于把 sew 得到的反向实体翻正(`primitives.orientOutward`)。 */
|
|
70
|
+
reverseShape(shape: BrepHandle): BrepHandle;
|
|
71
|
+
getSurfaceArea(shape: BrepHandle): number;
|
|
72
|
+
/** 顶点坐标(fillet2D / edge 级 rotate 定位用)。 */
|
|
73
|
+
vertexPosition(vertex: BrepHandle): BrepVec3;
|
|
74
|
+
/** 绕任意轴旋转(右手,弧度)。实测 box 绕 Z 转 π/2 精确落位;
|
|
75
|
+
* edge/vertex 同样可旋转(hexalobular 六分之一轮廓的 polarArray 合成)。 */
|
|
76
|
+
rotate(shape: BrepHandle, axis: WarehouseAxis, angleRad: number): BrepHandle;
|
|
77
|
+
/** 关于平面镜像(point + 法向)。锥度沉孔切割器 = draftPrism 向上收锥后镜像翻转。 */
|
|
78
|
+
mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle;
|
|
79
|
+
/** 三角化(mesh 体积基准)。A 侧 `Shape.tessellate(tol, angular=0.1)` 的等价物。
|
|
80
|
+
* ⚠️ 与 core `getVolume`(BRepGProp 精确曲面积分)并存不是冗余:后者对螺旋
|
|
81
|
+
* B 样条面存在**求积混叠**(A 侧 Thread raw/raw 差 14%),三角化才是真值基准。
|
|
82
|
+
* ⚠️ `tessellate` 会**原地**给 shape 建三角化,之后的 `getBoundingBox` 若按
|
|
83
|
+
* `useTriangulation=true` 取盒会被污染(A 侧 manifest 已因此错 0.0126 mm)——
|
|
84
|
+
* 先量 bbox 再三角化。 */
|
|
85
|
+
tessellate(shape: BrepHandle, options?: TessellateOptionsLite): TessellateResultLite;
|
|
86
|
+
/** NURBS 曲线数据(探针取极点对表用,如 PanHead 样条 vs `GeomAPI_Interpolate`)。
|
|
87
|
+
* ⚠️ 平台契约 `BrepEngineApi.getNurbsCurveData` 只声明了
|
|
88
|
+
* `{degree, periodic, rational}`(core 的类型欠账,已记 backlog);
|
|
89
|
+
* occt-wasm 实际还返回 `knots / multiplicities / poles / weights`——
|
|
90
|
+
* 本包按**真实返回结构**补声明(结构性匹配,不 import occt-wasm),
|
|
91
|
+
* 探针断言依赖它。 */
|
|
92
|
+
getNurbsCurveData(edge: BrepHandle): NurbsCurveDataLite | null;
|
|
93
|
+
}
|
|
94
|
+
/** occt-wasm `NurbsCurveData` 中本包用到的字段(平台契约未声明,见 {@link WarehouseKernel})。 */
|
|
95
|
+
export interface NurbsCurveDataLite {
|
|
96
|
+
degree: number;
|
|
97
|
+
periodic: boolean;
|
|
98
|
+
rational: boolean;
|
|
99
|
+
knots: number[];
|
|
100
|
+
multiplicities: number[];
|
|
101
|
+
poles: number[];
|
|
102
|
+
weights: number[];
|
|
103
|
+
}
|
|
104
|
+
/** `tessellate` 参数(结构性声明,不 import occt-wasm)。 */
|
|
105
|
+
export interface TessellateOptionsLite {
|
|
106
|
+
linearDeflection?: number;
|
|
107
|
+
angularDeflection?: number;
|
|
108
|
+
relative?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/** `tessellate` 返回值的最小结构面。 */
|
|
111
|
+
export interface TessellateResultLite {
|
|
112
|
+
positions: Float32Array;
|
|
113
|
+
indices: Uint32Array;
|
|
114
|
+
vertexCount: number;
|
|
115
|
+
triangleCount: number;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExE;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,aAAa,CAO7C;AAED,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,CAAA;IACf,SAAS,EAAE,QAAQ,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAgB,SAAQ,aAAa;IAEpD;;uDAEmD;IACnD,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1G,kEAAkE;IAClE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACrE;+BAC2B;IAC3B,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAA;IACvG;wCACoC;IACpC,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC3G,qCAAqC;IACrC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1E,qEAAqE;IACrE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACzD,6CAA6C;IAC7C,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAA;IACxC,wDAAwD;IACxD,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;IAC7E,8DAA8D;IAC9D,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAAA;IAC5E;sEACkE;IAClE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;IAC/C;;;gDAG4C;IAC5C,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;IAG/F;yDACqD;IACrD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAA;IAG3C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAA;IACzC,0CAA0C;IAC1C,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5C;gEAC4D;IAC5D,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;IAC5E,yDAAyD;IACzD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAA;IACxE;;;;;wBAKoB;IACpB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAAA;IACpF;;;;;mBAKe;IACf,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG,IAAI,CAAA;CAC/D;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,8BAA8B;AAC9B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;CACtB"}
|
package/dist/kernel.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kernel.ts — 本包私有 raw 内核访问层(方案 §5.5.2 第 ①② 层)。
|
|
3
|
+
*
|
|
4
|
+
* 红线(§5.1 约束 2/3):
|
|
5
|
+
* - 本包不 initOcctWasm()、不持有 kernel 单例——内核由 host 经
|
|
6
|
+
* getBackends().kernel.brep 注入;未配置即抛错、禁止兜底。
|
|
7
|
+
* - 全包**只有本文件**调 getBackends();其余文件一律 import { requireKernel }。
|
|
8
|
+
* 将来 core 的 KernelBase backlog(§5.5.1 / D3)修复后只需改这里 1 行。
|
|
9
|
+
* - 不 import occt-wasm / GearKernel(那是另一个第三方库的私有接口)。
|
|
10
|
+
*/
|
|
11
|
+
import { getBackends } from '@faicad/faijs';
|
|
12
|
+
/**
|
|
13
|
+
* Get the BREP kernel injected by the host.
|
|
14
|
+
* 与 core 自身消费点同构(`core/src/api/*.ts` 等 19 处同一模式)。
|
|
15
|
+
* @throws when the kernel is absent — never silently falls back to null or a stub
|
|
16
|
+
* (aligned with `runtime-state.ts:364-368`).
|
|
17
|
+
* @returns host 注入的 BREP 引擎 API。
|
|
18
|
+
*/
|
|
19
|
+
export function requireKernel() {
|
|
20
|
+
const k = getBackends().kernel.brep;
|
|
21
|
+
if (!k)
|
|
22
|
+
throw new Error('[fai-cq-warehouse] BREP kernel unavailable: call configureBackends({ kernel: { brep } }) first');
|
|
23
|
+
return k;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C;;;;;;GAMG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,IAA4B,CAAA;IAC3D,IAAI,CAAC,CAAC;QACJ,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAA;IACH,OAAO,CAAC,CAAA;AACV,CAAC"}
|