@code3d/screws 0.0.1-alpha.4 → 0.0.1-alpha.6
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/README.md +228 -40
- package/bld/chunks/chunk-2DGVQRQ5.js +78 -0
- package/bld/chunks/chunk-2DGVQRQ5.js.map +7 -0
- package/bld/chunks/chunk-4FMUSJBB.js +27 -0
- package/bld/chunks/chunk-4FMUSJBB.js.map +7 -0
- package/bld/chunks/chunk-7UGU5EFV.js +87 -0
- package/bld/chunks/chunk-7UGU5EFV.js.map +7 -0
- package/bld/chunks/chunk-DKS4VANI.js +27 -0
- package/bld/chunks/chunk-DKS4VANI.js.map +7 -0
- package/bld/chunks/chunk-ES62SR3Q.js +21 -0
- package/bld/chunks/chunk-ES62SR3Q.js.map +7 -0
- package/bld/chunks/chunk-ESLSQKZW.js +25 -0
- package/bld/chunks/chunk-ESLSQKZW.js.map +7 -0
- package/bld/chunks/chunk-GAX6375G.js +25 -0
- package/bld/chunks/chunk-GAX6375G.js.map +7 -0
- package/bld/chunks/chunk-GIIOR3XJ.js +49 -0
- package/bld/chunks/chunk-GIIOR3XJ.js.map +7 -0
- package/bld/chunks/chunk-HPPYZYCK.js +23 -0
- package/bld/chunks/chunk-HPPYZYCK.js.map +7 -0
- package/bld/chunks/chunk-IXFHRZSY.js +121 -0
- package/bld/chunks/chunk-IXFHRZSY.js.map +7 -0
- package/bld/chunks/chunk-MEIKYZ23.js +84 -0
- package/bld/chunks/chunk-MEIKYZ23.js.map +7 -0
- package/bld/chunks/chunk-O34BMYJV.js +84 -0
- package/bld/chunks/chunk-O34BMYJV.js.map +7 -0
- package/bld/chunks/chunk-P3M5KQ5U.js +46 -0
- package/bld/chunks/chunk-P3M5KQ5U.js.map +7 -0
- package/bld/chunks/chunk-PFFNLWWR.js +25 -0
- package/bld/chunks/chunk-PFFNLWWR.js.map +7 -0
- package/bld/chunks/chunk-SDUJLXOE.js +46 -0
- package/bld/chunks/chunk-SDUJLXOE.js.map +7 -0
- package/bld/chunks/chunk-SDYJF2XK.js +25 -0
- package/bld/chunks/chunk-SDYJF2XK.js.map +7 -0
- package/bld/chunks/chunk-SGDNOA44.js +92 -0
- package/bld/chunks/chunk-SGDNOA44.js.map +7 -0
- package/bld/chunks/chunk-SPFHOFBC.js +125 -0
- package/bld/chunks/chunk-SPFHOFBC.js.map +7 -0
- package/bld/chunks/chunk-VVX3WOBG.js +160 -0
- package/bld/chunks/chunk-VVX3WOBG.js.map +7 -0
- package/bld/chunks/chunk-W62ASGIP.js +25 -0
- package/bld/chunks/chunk-W62ASGIP.js.map +7 -0
- package/bld/chunks/chunk-Z5LEGL77.js +464 -0
- package/bld/chunks/chunk-Z5LEGL77.js.map +7 -0
- package/bld/chunks/chunk-ZNWKI54A.js +25 -0
- package/bld/chunks/chunk-ZNWKI54A.js.map +7 -0
- package/bld/library/common.d.ts +104 -0
- package/bld/library/common.d.ts.map +1 -0
- package/bld/library/gb-2672.d.ts +8 -0
- package/bld/library/gb-2672.d.ts.map +1 -0
- package/bld/library/gb-2672.js +17 -0
- package/bld/library/gb-2672.js.map +7 -0
- package/bld/library/gb-5281.d.ts +8 -0
- package/bld/library/gb-5281.d.ts.map +1 -0
- package/bld/library/gb-5281.js +15 -0
- package/bld/library/gb-5281.js.map +7 -0
- package/bld/library/gb-5782.d.ts +8 -0
- package/bld/library/gb-5782.d.ts.map +1 -0
- package/bld/library/gb-5782.js +19 -0
- package/bld/library/gb-5782.js.map +7 -0
- package/bld/library/gb-5783.d.ts +8 -0
- package/bld/library/gb-5783.d.ts.map +1 -0
- package/bld/library/gb-5783.js +19 -0
- package/bld/library/gb-5783.js.map +7 -0
- package/bld/library/gb-70-1.d.ts +8 -0
- package/bld/library/gb-70-1.d.ts.map +1 -0
- package/bld/library/gb-70-1.js +17 -0
- package/bld/library/gb-70-1.js.map +7 -0
- package/bld/library/gb-70-2.d.ts +8 -0
- package/bld/library/gb-70-2.d.ts.map +1 -0
- package/bld/library/gb-70-2.js +17 -0
- package/bld/library/gb-70-2.js.map +7 -0
- package/bld/library/gb-70-3.d.ts +8 -0
- package/bld/library/gb-70-3.d.ts.map +1 -0
- package/bld/library/gb-70-3.js +17 -0
- package/bld/library/gb-70-3.js.map +7 -0
- package/bld/library/gb-70-4.d.ts +8 -0
- package/bld/library/gb-70-4.d.ts.map +1 -0
- package/bld/library/gb-70-4.js +17 -0
- package/bld/library/gb-70-4.js.map +7 -0
- package/bld/library/gb-80.d.ts +8 -0
- package/bld/library/gb-80.d.ts.map +1 -0
- package/bld/library/gb-80.js +13 -0
- package/bld/library/gb-80.js.map +7 -0
- package/bld/library/gb-818.d.ts +8 -0
- package/bld/library/gb-818.d.ts.map +1 -0
- package/bld/library/gb-818.js +17 -0
- package/bld/library/gb-818.js.map +7 -0
- package/bld/library/hex-head.d.ts +18 -0
- package/bld/library/hex-head.d.ts.map +1 -0
- package/bld/library/index.d.ts +19 -0
- package/bld/library/index.d.ts.map +1 -1
- package/bld/library/index.js +80 -455
- package/bld/library/index.js.map +3 -3
- package/bld/library/iso-10642.d.ts +51 -0
- package/bld/library/iso-10642.d.ts.map +1 -0
- package/bld/library/iso-10642.js +16 -0
- package/bld/library/iso-10642.js.map +7 -0
- package/bld/library/iso-14583.d.ts +35 -0
- package/bld/library/iso-14583.d.ts.map +1 -0
- package/bld/library/iso-14583.js +16 -0
- package/bld/library/iso-14583.js.map +7 -0
- package/bld/library/iso-4014.d.ts +20 -0
- package/bld/library/iso-4014.d.ts.map +1 -0
- package/bld/library/iso-4014.js +18 -0
- package/bld/library/iso-4014.js.map +7 -0
- package/bld/library/iso-4017.d.ts +20 -0
- package/bld/library/iso-4017.d.ts.map +1 -0
- package/bld/library/iso-4017.js +18 -0
- package/bld/library/iso-4017.js.map +7 -0
- package/bld/library/iso-4029.d.ts +32 -0
- package/bld/library/iso-4029.d.ts.map +1 -0
- package/bld/library/iso-4029.js +12 -0
- package/bld/library/iso-4029.js.map +7 -0
- package/bld/library/iso-4762.d.ts +10 -152
- package/bld/library/iso-4762.d.ts.map +1 -1
- package/bld/library/iso-4762.js +16 -0
- package/bld/library/iso-4762.js.map +7 -0
- package/bld/library/iso-7045.d.ts +33 -0
- package/bld/library/iso-7045.d.ts.map +1 -0
- package/bld/library/iso-7045.js +16 -0
- package/bld/library/iso-7045.js.map +7 -0
- package/bld/library/iso-7379.d.ts +56 -0
- package/bld/library/iso-7379.d.ts.map +1 -0
- package/bld/library/iso-7379.js +14 -0
- package/bld/library/iso-7379.js.map +7 -0
- package/bld/library/iso-7380-1.d.ts +31 -0
- package/bld/library/iso-7380-1.d.ts.map +1 -0
- package/bld/library/iso-7380-1.js +16 -0
- package/bld/library/iso-7380-1.js.map +7 -0
- package/bld/library/iso-7380-2.d.ts +33 -0
- package/bld/library/iso-7380-2.d.ts.map +1 -0
- package/bld/library/iso-7380-2.js +16 -0
- package/bld/library/iso-7380-2.js.map +7 -0
- package/package.json +82 -2
- package/src/library/common.ts +367 -0
- package/src/library/gb-2672.ts +7 -0
- package/src/library/gb-5281.ts +7 -0
- package/src/library/gb-5782.ts +7 -0
- package/src/library/gb-5783.ts +7 -0
- package/src/library/gb-70-1.ts +7 -0
- package/src/library/gb-70-2.ts +7 -0
- package/src/library/gb-70-3.ts +7 -0
- package/src/library/gb-70-4.ts +7 -0
- package/src/library/gb-80.ts +7 -0
- package/src/library/gb-818.ts +7 -0
- package/src/library/hex-head.ts +53 -0
- package/src/library/index.ts +20 -0
- package/src/library/iso-10642.ts +173 -0
- package/src/library/iso-14583.ts +181 -0
- package/src/library/iso-4014.ts +64 -0
- package/src/library/iso-4017.ts +62 -0
- package/src/library/iso-4029.ts +101 -0
- package/src/library/iso-4762.ts +70 -300
- package/src/library/iso-7045.ts +134 -0
- package/src/library/iso-7379.ts +230 -0
- package/src/library/iso-7380-1.ts +110 -0
- package/src/library/iso-7380-2.ts +135 -0
- package/src/library/thread.ts +7 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/library/gb-70-4.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * GB/T 70.4-2025 (MOD ISO 7380-2:2022).\n * Shares the corresponding ISO module's nominal geometry within our preset\n * range. See the package README for sizes, hole allowances and modeling limits.\n * https://std.samr.gov.cn/gb/search/gbDetailed?id=42BA7D06A4DCE936E06397BE0A0ACDC9\n */\nexport * from './iso-7380-2.js';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export,
|
|
3
|
+
__name,
|
|
4
|
+
atY,
|
|
5
|
+
clearanceHole,
|
|
6
|
+
headedScrew,
|
|
7
|
+
hexSocket,
|
|
8
|
+
metric,
|
|
9
|
+
positive,
|
|
10
|
+
roundHead,
|
|
11
|
+
validateHead
|
|
12
|
+
} from "./chunk-Z5LEGL77.js";
|
|
13
|
+
|
|
14
|
+
// packages/screws/src/library/iso-7380-2.ts
|
|
15
|
+
var iso_7380_2_exports = {};
|
|
16
|
+
__export(iso_7380_2_exports, {
|
|
17
|
+
clearanceHole: () => clearanceHole2,
|
|
18
|
+
resolveSpecification: () => resolveSpecification,
|
|
19
|
+
screw: () => screw,
|
|
20
|
+
specifications: () => specifications,
|
|
21
|
+
threadLength: () => threadLength
|
|
22
|
+
});
|
|
23
|
+
import { cylinder, union } from "@code3d/core";
|
|
24
|
+
function specification(size, headDiameter, buttonDiameter, headHeight, collarHeight, hexSocketWidth, hexSocketDepth, underHeadRadius) {
|
|
25
|
+
return {
|
|
26
|
+
...metric(size),
|
|
27
|
+
headDiameter,
|
|
28
|
+
buttonDiameter,
|
|
29
|
+
headHeight,
|
|
30
|
+
collarHeight,
|
|
31
|
+
hexSocketWidth,
|
|
32
|
+
hexSocketDepth,
|
|
33
|
+
underHeadRadius
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
__name(specification, "specification");
|
|
37
|
+
var specifications = {
|
|
38
|
+
M3: specification("M3", 6.9, 5.2, 1.65, 0.7, 2, 1.04, 0.1),
|
|
39
|
+
M4: specification("M4", 9.4, 7.2, 2.2, 0.8, 2.5, 1.3, 0.2),
|
|
40
|
+
M5: specification("M5", 11.8, 8.8, 2.75, 1, 3, 1.56, 0.2),
|
|
41
|
+
M6: specification("M6", 13.6, 10, 3.3, 1.2, 4, 2.08, 0.25),
|
|
42
|
+
M8: specification("M8", 17.8, 13.2, 4.4, 1.5, 5, 2.6, 0.4),
|
|
43
|
+
M10: specification("M10", 21.9, 16.5, 5.5, 2, 6, 3.12, 0.4),
|
|
44
|
+
M12: specification("M12", 26, 19.4, 6.6, 2.4, 8, 4.16, 0.6)
|
|
45
|
+
};
|
|
46
|
+
function resolveSpecification(input) {
|
|
47
|
+
return typeof input === "string" ? specifications[input] : input;
|
|
48
|
+
}
|
|
49
|
+
__name(resolveSpecification, "resolveSpecification");
|
|
50
|
+
function threadLength(spec, _length) {
|
|
51
|
+
return 2 * spec.nominalDiameter + 12;
|
|
52
|
+
}
|
|
53
|
+
__name(threadLength, "threadLength");
|
|
54
|
+
function screw(input, length) {
|
|
55
|
+
const spec = resolveSpecification(input);
|
|
56
|
+
validateHead(spec);
|
|
57
|
+
positive("Collar height", spec.collarHeight);
|
|
58
|
+
positive("Button diameter", spec.buttonDiameter);
|
|
59
|
+
if (spec.collarHeight >= spec.headHeight || spec.buttonDiameter >= spec.headDiameter)
|
|
60
|
+
throw new Error("Button and collar must fit the head envelope.");
|
|
61
|
+
const collar = cylinder(spec.headDiameter / 2, spec.collarHeight);
|
|
62
|
+
const crown = atY(
|
|
63
|
+
roundHead(
|
|
64
|
+
spec.buttonDiameter,
|
|
65
|
+
spec.headHeight - spec.collarHeight,
|
|
66
|
+
Math.max(spec.nominalDiameter, spec.hexSocketWidth * 1.3)
|
|
67
|
+
),
|
|
68
|
+
spec.headHeight / 2
|
|
69
|
+
);
|
|
70
|
+
const blank = union([collar, crown]);
|
|
71
|
+
return headedScrew(
|
|
72
|
+
hexSocket(blank, spec.hexSocketWidth, spec.hexSocketDepth, spec.headHeight),
|
|
73
|
+
spec,
|
|
74
|
+
length,
|
|
75
|
+
threadLength(spec, length)
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
__name(screw, "screw");
|
|
79
|
+
function clearanceHole2(input, options) {
|
|
80
|
+
return clearanceHole(resolveSpecification(input), options);
|
|
81
|
+
}
|
|
82
|
+
__name(clearanceHole2, "clearanceHole");
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
specifications,
|
|
86
|
+
resolveSpecification,
|
|
87
|
+
threadLength,
|
|
88
|
+
screw,
|
|
89
|
+
clearanceHole2 as clearanceHole,
|
|
90
|
+
iso_7380_2_exports
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=chunk-SGDNOA44.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/library/iso-7380-2.ts"],
|
|
4
|
+
"sourcesContent": ["import {cylinder, union} from '@code3d/core';\nimport {\n metric,\n validateHead,\n positive,\n atY,\n headedScrew,\n hexSocket,\n roundHead,\n clearanceHole as buildClearanceHole,\n type HeadSpecification,\n type MetricSize,\n type Screw,\n type ClearanceHole,\n type CounterboredHole,\n type ClearanceHoleOptions,\n type PlainHoleOptions,\n type CounterboredHoleOptions,\n} from './common.js';\nexport type {\n ClearanceFit,\n Screw,\n ScrewElements,\n ClearanceHole,\n HoleElements,\n CounterboredHole,\n CounterboredHoleElements,\n ClearanceHoleOptions,\n PlainHoleOptions,\n CounterboredHoleOptions,\n CounterboreOptions,\n} from './common.js';\n\nexport type Specification = HeadSpecification &\n Readonly<{\n hexSocketWidth: number;\n hexSocketDepth: number;\n buttonDiameter: number;\n collarHeight: number;\n }>;\n\n// ISO 7380-2:2022, collar diameter dc, button diameter dk and total head height k.\n// https://www.iso.org/standard/78700.html\n// https://eshop-cz.boellhoff.com/out/media/pdf/ISO_7380-2_Edelstahl_A2_Innensechskant___en.pdf\nfunction specification(\n size: MetricSize,\n headDiameter: number,\n buttonDiameter: number,\n headHeight: number,\n collarHeight: number,\n hexSocketWidth: number,\n hexSocketDepth: number,\n underHeadRadius: number,\n): Specification {\n return {\n ...metric(size),\n headDiameter,\n buttonDiameter,\n headHeight,\n collarHeight,\n hexSocketWidth,\n hexSocketDepth,\n underHeadRadius,\n };\n}\nexport const specifications = {\n M3: specification('M3', 6.9, 5.2, 1.65, 0.7, 2, 1.04, 0.1),\n M4: specification('M4', 9.4, 7.2, 2.2, 0.8, 2.5, 1.3, 0.2),\n M5: specification('M5', 11.8, 8.8, 2.75, 1, 3, 1.56, 0.2),\n M6: specification('M6', 13.6, 10, 3.3, 1.2, 4, 2.08, 0.25),\n M8: specification('M8', 17.8, 13.2, 4.4, 1.5, 5, 2.6, 0.4),\n M10: specification('M10', 21.9, 16.5, 5.5, 2, 6, 3.12, 0.4),\n M12: specification('M12', 26, 19.4, 6.6, 2.4, 8, 4.16, 0.6),\n} as const;\nexport type Size = keyof typeof specifications;\nexport type ScrewInput = Size | Specification;\nexport function resolveSpecification(input: ScrewInput): Specification {\n return typeof input === 'string' ? specifications[input] : input;\n}\n/** Nominal partial thread b; the builder limits it to the available shank. */\nexport function threadLength(spec: Specification, _length: number): number {\n return 2 * spec.nominalDiameter + 12;\n}\n/**\n * @code3d.arguments ['M6', 18]\n * @code3d.param length {kind: 'length'}\n */\nexport function screw(input: ScrewInput, length: number): Screw {\n const spec = resolveSpecification(input);\n validateHead(spec);\n positive('Collar height', spec.collarHeight);\n positive('Button diameter', spec.buttonDiameter);\n if (\n spec.collarHeight >= spec.headHeight ||\n spec.buttonDiameter >= spec.headDiameter\n )\n throw new Error('Button and collar must fit the head envelope.');\n const collar = cylinder(spec.headDiameter / 2, spec.collarHeight);\n const crown = atY(\n roundHead(\n spec.buttonDiameter,\n spec.headHeight - spec.collarHeight,\n Math.max(spec.nominalDiameter, spec.hexSocketWidth * 1.3),\n ),\n spec.headHeight / 2,\n );\n const blank = union([collar, crown]);\n return headedScrew(\n hexSocket(blank, spec.hexSocketWidth, spec.hexSocketDepth, spec.headHeight),\n spec,\n length,\n threadLength(spec, length),\n );\n}\n\n/** @code3d.arguments ['M6', 10] */\nexport function clearanceHole(input: ScrewInput, depth: number): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: PlainHoleOptions,\n): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: CounterboredHoleOptions,\n): CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: number | ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole {\n return buildClearanceHole(resolveSpecification(input), options);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA,uBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAQ,UAAU,aAAY;AA4C9B,SAAS,cACP,MACA,cACA,gBACA,YACA,cACA,gBACA,gBACA,iBACe;AACf,SAAO;AAAA,IACL,GAAG,OAAO,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AApBS;AAqBF,IAAM,iBAAiB;AAAA,EAC5B,IAAI,cAAc,MAAM,KAAK,KAAK,MAAM,KAAK,GAAG,MAAM,GAAG;AAAA,EACzD,IAAI,cAAc,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACzD,IAAI,cAAc,MAAM,MAAM,KAAK,MAAM,GAAG,GAAG,MAAM,GAAG;AAAA,EACxD,IAAI,cAAc,MAAM,MAAM,IAAI,KAAK,KAAK,GAAG,MAAM,IAAI;AAAA,EACzD,IAAI,cAAc,MAAM,MAAM,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG;AAAA,EACzD,KAAK,cAAc,OAAO,MAAM,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG;AAAA,EAC1D,KAAK,cAAc,OAAO,IAAI,MAAM,KAAK,KAAK,GAAG,MAAM,GAAG;AAC5D;AAGO,SAAS,qBAAqB,OAAkC;AACrE,SAAO,OAAO,UAAU,WAAW,eAAe,KAAK,IAAI;AAC7D;AAFgB;AAIT,SAAS,aAAa,MAAqB,SAAyB;AACzE,SAAO,IAAI,KAAK,kBAAkB;AACpC;AAFgB;AAOT,SAAS,MAAM,OAAmB,QAAuB;AAC9D,QAAM,OAAO,qBAAqB,KAAK;AACvC,eAAa,IAAI;AACjB,WAAS,iBAAiB,KAAK,YAAY;AAC3C,WAAS,mBAAmB,KAAK,cAAc;AAC/C,MACE,KAAK,gBAAgB,KAAK,cAC1B,KAAK,kBAAkB,KAAK;AAE5B,UAAM,IAAI,MAAM,+CAA+C;AACjE,QAAM,SAAS,SAAS,KAAK,eAAe,GAAG,KAAK,YAAY;AAChE,QAAM,QAAQ;AAAA,IACZ;AAAA,MACE,KAAK;AAAA,MACL,KAAK,aAAa,KAAK;AAAA,MACvB,KAAK,IAAI,KAAK,iBAAiB,KAAK,iBAAiB,GAAG;AAAA,IAC1D;AAAA,IACA,KAAK,aAAa;AAAA,EACpB;AACA,QAAM,QAAQ,MAAM,CAAC,QAAQ,KAAK,CAAC;AACnC,SAAO;AAAA,IACL,UAAU,OAAO,KAAK,gBAAgB,KAAK,gBAAgB,KAAK,UAAU;AAAA,IAC1E;AAAA,IACA;AAAA,IACA,aAAa,MAAM,MAAM;AAAA,EAC3B;AACF;AA1BgB;AA0CT,SAASC,eACd,OACA,SACkC;AAClC,SAAO,cAAmB,qBAAqB,KAAK,GAAG,OAAO;AAChE;AALgB,OAAAA,gBAAA;",
|
|
6
|
+
"names": ["clearanceHole", "clearanceHole"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export,
|
|
3
|
+
__name,
|
|
4
|
+
clearanceHole,
|
|
5
|
+
headedScrew,
|
|
6
|
+
metric,
|
|
7
|
+
panHead,
|
|
8
|
+
positive,
|
|
9
|
+
validateHead
|
|
10
|
+
} from "./chunk-Z5LEGL77.js";
|
|
11
|
+
|
|
12
|
+
// packages/screws/src/library/iso-14583.ts
|
|
13
|
+
var iso_14583_exports = {};
|
|
14
|
+
__export(iso_14583_exports, {
|
|
15
|
+
clearanceHole: () => clearanceHole2,
|
|
16
|
+
resolveSpecification: () => resolveSpecification,
|
|
17
|
+
screw: () => screw,
|
|
18
|
+
specifications: () => specifications,
|
|
19
|
+
threadLength: () => threadLength
|
|
20
|
+
});
|
|
21
|
+
import { cut } from "@code3d/core";
|
|
22
|
+
import {
|
|
23
|
+
definePrimitive,
|
|
24
|
+
replicad
|
|
25
|
+
} from "@code3d/core/replicad";
|
|
26
|
+
function specification(size, headDiameter, headHeight, headCurvatureRadius, underHeadRadius, number, diameter, innerDiameter, depth) {
|
|
27
|
+
return {
|
|
28
|
+
...metric(size),
|
|
29
|
+
headDiameter,
|
|
30
|
+
headHeight,
|
|
31
|
+
headCurvatureRadius,
|
|
32
|
+
underHeadRadius,
|
|
33
|
+
recess: { number, diameter, innerDiameter, depth }
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
__name(specification, "specification");
|
|
37
|
+
var specifications = {
|
|
38
|
+
M3: specification("M3", 5.6, 2.4, 5, 0.1, 10, 2.8, 2.05, 1.01),
|
|
39
|
+
M4: specification("M4", 8, 3.1, 6.5, 0.2, 20, 3.95, 2.85, 1.27),
|
|
40
|
+
M5: specification("M5", 9.5, 3.7, 8, 0.2, 25, 4.5, 3.25, 1.52),
|
|
41
|
+
M6: specification("M6", 12, 4.6, 10, 0.25, 30, 5.6, 4.05, 2.02),
|
|
42
|
+
M8: specification("M8", 16, 6, 13, 0.4, 45, 7.93, 5.64, 2.79),
|
|
43
|
+
M10: specification("M10", 20, 7.5, 16, 0.4, 50, 8.95, 6.45, 3.62)
|
|
44
|
+
};
|
|
45
|
+
function resolveSpecification(input) {
|
|
46
|
+
return typeof input === "string" ? specifications[input] : input;
|
|
47
|
+
}
|
|
48
|
+
__name(resolveSpecification, "resolveSpecification");
|
|
49
|
+
function threadLength(spec, _length) {
|
|
50
|
+
return spec.nominalDiameter <= 3 ? 25 : 38;
|
|
51
|
+
}
|
|
52
|
+
__name(threadLength, "threadLength");
|
|
53
|
+
var hexalobularTool = definePrimitive(
|
|
54
|
+
(diameter, innerDiameter, depth) => {
|
|
55
|
+
positive("Recess diameter", diameter);
|
|
56
|
+
positive("Inner recess diameter", innerDiameter);
|
|
57
|
+
positive("Recess depth", depth);
|
|
58
|
+
const a = diameter / 2, b = innerDiameter / 2, re = diameter * 0.1;
|
|
59
|
+
const p = a - re, c = Math.cos(Math.PI / 6);
|
|
60
|
+
const ri = (re ** 2 - p ** 2 - b ** 2 + 2 * p * b * c) / (2 * (b - p * c - re));
|
|
61
|
+
positive("Recess inner arc radius", ri);
|
|
62
|
+
const radial = /* @__PURE__ */ __name((radius, angle) => [
|
|
63
|
+
radius * Math.cos(angle),
|
|
64
|
+
radius * Math.sin(angle)
|
|
65
|
+
], "radial");
|
|
66
|
+
const tangent = /* @__PURE__ */ __name((angle, side) => {
|
|
67
|
+
const outer = radial(p, angle), inner = radial(b + ri, angle + side * Math.PI / 6);
|
|
68
|
+
return [
|
|
69
|
+
outer[0] + re / (re + ri) * (inner[0] - outer[0]),
|
|
70
|
+
outer[1] + re / (re + ri) * (inner[1] - outer[1])
|
|
71
|
+
];
|
|
72
|
+
}, "tangent");
|
|
73
|
+
const start = tangent(0, -1);
|
|
74
|
+
const drawing = replicad.draw(start);
|
|
75
|
+
for (let i = 0; i < 6; i++) {
|
|
76
|
+
const angle = i * Math.PI / 3;
|
|
77
|
+
drawing.threePointsArcTo(tangent(angle, 1), radial(a, angle));
|
|
78
|
+
drawing.threePointsArcTo(
|
|
79
|
+
i === 5 ? start : tangent(angle + Math.PI / 3, -1),
|
|
80
|
+
radial(b, angle + Math.PI / 6)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
const profile = drawing.close();
|
|
84
|
+
return profile.sketchOnPlane("XY").extrude(depth).rotate(-90, [0, 0, 0], [1, 0, 0]).translate([0, -depth / 2, 0]);
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
function screw(input, length) {
|
|
88
|
+
const spec = resolveSpecification(input);
|
|
89
|
+
validateHead(spec);
|
|
90
|
+
const recess = spec.recess;
|
|
91
|
+
if (recess.innerDiameter >= recess.diameter || recess.diameter >= spec.headDiameter || recess.depth >= spec.headHeight)
|
|
92
|
+
throw new Error("Recess must fit inside the head.");
|
|
93
|
+
const head = panHead(
|
|
94
|
+
spec.headDiameter,
|
|
95
|
+
spec.headHeight,
|
|
96
|
+
recess.diameter * 1.05,
|
|
97
|
+
spec.headCurvatureRadius
|
|
98
|
+
);
|
|
99
|
+
const tool = hexalobularTool(
|
|
100
|
+
recess.diameter,
|
|
101
|
+
recess.innerDiameter,
|
|
102
|
+
recess.depth
|
|
103
|
+
).relate((part) => part.up.on(head.up));
|
|
104
|
+
return headedScrew(
|
|
105
|
+
cut(head, [tool]),
|
|
106
|
+
spec,
|
|
107
|
+
length,
|
|
108
|
+
threadLength(spec, length)
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
__name(screw, "screw");
|
|
112
|
+
function clearanceHole2(input, options) {
|
|
113
|
+
return clearanceHole(resolveSpecification(input), options);
|
|
114
|
+
}
|
|
115
|
+
__name(clearanceHole2, "clearanceHole");
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
specifications,
|
|
119
|
+
resolveSpecification,
|
|
120
|
+
threadLength,
|
|
121
|
+
screw,
|
|
122
|
+
clearanceHole2 as clearanceHole,
|
|
123
|
+
iso_14583_exports
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=chunk-SPFHOFBC.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/library/iso-14583.ts"],
|
|
4
|
+
"sourcesContent": ["import {cut} from '@code3d/core';\nimport {\n definePrimitive,\n replicad,\n type Point2D,\n type Sketch,\n} from '@code3d/core/replicad';\nimport {\n metric,\n validateHead,\n headedScrew,\n panHead,\n positive,\n clearanceHole as buildClearanceHole,\n type HeadSpecification,\n type MetricSize,\n type Screw,\n type ClearanceHole,\n type CounterboredHole,\n type ClearanceHoleOptions,\n type PlainHoleOptions,\n type CounterboredHoleOptions,\n} from './common.js';\nexport type {\n ClearanceFit,\n Screw,\n ScrewElements,\n ClearanceHole,\n HoleElements,\n CounterboredHole,\n CounterboredHoleElements,\n ClearanceHoleOptions,\n PlainHoleOptions,\n CounterboredHoleOptions,\n CounterboreOptions,\n} from './common.js';\n\nexport type HexalobularRecess = Readonly<{\n number: number;\n diameter: number;\n innerDiameter: number;\n depth: number;\n}>;\nexport type Specification = HeadSpecification &\n Readonly<{headCurvatureRadius: number; recess: HexalobularRecess}>;\n// ISO 14583:2011 head dimensions and minimum recess penetration.\n// https://www.finesz.com/ISO14583.php\n// ISO 10664:2014 nominal driving envelopes A/B (size 45 A = 7.93).\nfunction specification(\n size: MetricSize,\n headDiameter: number,\n headHeight: number,\n headCurvatureRadius: number,\n underHeadRadius: number,\n number: number,\n diameter: number,\n innerDiameter: number,\n depth: number,\n): Specification {\n return {\n ...metric(size),\n headDiameter,\n headHeight,\n headCurvatureRadius,\n underHeadRadius,\n recess: {number, diameter, innerDiameter, depth},\n };\n}\nexport const specifications = {\n M3: specification('M3', 5.6, 2.4, 5, 0.1, 10, 2.8, 2.05, 1.01),\n M4: specification('M4', 8, 3.1, 6.5, 0.2, 20, 3.95, 2.85, 1.27),\n M5: specification('M5', 9.5, 3.7, 8, 0.2, 25, 4.5, 3.25, 1.52),\n M6: specification('M6', 12, 4.6, 10, 0.25, 30, 5.6, 4.05, 2.02),\n M8: specification('M8', 16, 6, 13, 0.4, 45, 7.93, 5.64, 2.79),\n M10: specification('M10', 20, 7.5, 16, 0.4, 50, 8.95, 6.45, 3.62),\n} as const;\nexport type Size = keyof typeof specifications;\nexport type ScrewInput = Size | Specification;\nexport function resolveSpecification(input: ScrewInput): Specification {\n return typeof input === 'string' ? specifications[input] : input;\n}\nexport function threadLength(spec: Specification, _length: number): number {\n return spec.nominalDiameter <= 3 ? 25 : 38;\n}\n\n/** Nominal representation: twelve tangent circular arcs, not an inspection gauge. */\nconst hexalobularTool = definePrimitive(\n (diameter: number, innerDiameter: number, depth: number) => {\n positive('Recess diameter', diameter);\n positive('Inner recess diameter', innerDiameter);\n positive('Recess depth', depth);\n const a = diameter / 2,\n b = innerDiameter / 2,\n re = diameter * 0.1;\n const p = a - re,\n c = Math.cos(Math.PI / 6);\n const ri =\n (re ** 2 - p ** 2 - b ** 2 + 2 * p * b * c) / (2 * (b - p * c - re));\n positive('Recess inner arc radius', ri);\n const radial = (radius: number, angle: number): Point2D => [\n radius * Math.cos(angle),\n radius * Math.sin(angle),\n ];\n const tangent = (angle: number, side: number): Point2D => {\n const outer = radial(p, angle),\n inner = radial(b + ri, angle + (side * Math.PI) / 6);\n return [\n outer[0] + (re / (re + ri)) * (inner[0] - outer[0]),\n outer[1] + (re / (re + ri)) * (inner[1] - outer[1]),\n ];\n };\n const start = tangent(0, -1);\n const drawing = replicad.draw(start);\n for (let i = 0; i < 6; i++) {\n const angle = (i * Math.PI) / 3;\n drawing.threePointsArcTo(tangent(angle, 1), radial(a, angle));\n drawing.threePointsArcTo(\n i === 5 ? start : tangent(angle + Math.PI / 3, -1),\n radial(b, angle + Math.PI / 6),\n );\n }\n const profile = drawing.close();\n return (profile.sketchOnPlane('XY') as Sketch)\n .extrude(depth)\n .rotate(-90, [0, 0, 0], [1, 0, 0])\n .translate([0, -depth / 2, 0]);\n },\n);\n\n/**\n * @code3d.arguments ['M6', 18]\n * @code3d.param length {kind: 'length'}\n */\nexport function screw(input: ScrewInput, length: number): Screw {\n const spec = resolveSpecification(input);\n validateHead(spec);\n const recess = spec.recess;\n if (\n recess.innerDiameter >= recess.diameter ||\n recess.diameter >= spec.headDiameter ||\n recess.depth >= spec.headHeight\n )\n throw new Error('Recess must fit inside the head.');\n const head = panHead(\n spec.headDiameter,\n spec.headHeight,\n recess.diameter * 1.05,\n spec.headCurvatureRadius,\n );\n const tool = hexalobularTool(\n recess.diameter,\n recess.innerDiameter,\n recess.depth,\n ).relate(part => part.up.on(head.up));\n return headedScrew(\n cut(head, [tool]),\n spec,\n length,\n threadLength(spec, length),\n );\n}\n/** @code3d.arguments ['M6', 10] */\nexport function clearanceHole(input: ScrewInput, depth: number): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: PlainHoleOptions,\n): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: CounterboredHoleOptions,\n): CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: number | ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole {\n return buildClearanceHole(resolveSpecification(input), options);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["clearanceHole", "clearanceHole"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export,
|
|
3
|
+
__name,
|
|
4
|
+
atY,
|
|
5
|
+
externalThread,
|
|
6
|
+
hexSocket,
|
|
7
|
+
metric,
|
|
8
|
+
positive,
|
|
9
|
+
validateHead,
|
|
10
|
+
withCounterbore
|
|
11
|
+
} from "./chunk-Z5LEGL77.js";
|
|
12
|
+
|
|
13
|
+
// packages/screws/src/library/iso-7379.ts
|
|
14
|
+
var iso_7379_exports = {};
|
|
15
|
+
__export(iso_7379_exports, {
|
|
16
|
+
clearanceHole: () => clearanceHole,
|
|
17
|
+
resolveSpecification: () => resolveSpecification,
|
|
18
|
+
screw: () => screw,
|
|
19
|
+
specifications: () => specifications
|
|
20
|
+
});
|
|
21
|
+
import {
|
|
22
|
+
cylinder,
|
|
23
|
+
frustum,
|
|
24
|
+
union
|
|
25
|
+
} from "@code3d/core";
|
|
26
|
+
function specification(size, shoulderDiameter, shoulderBodyDiameter, threadLength, headDiameter, headHeight, neckDiameter, threadReliefLength, underHeadRadius, hexSocketWidth, hexSocketDepth) {
|
|
27
|
+
return {
|
|
28
|
+
...metric(size),
|
|
29
|
+
shoulderDiameter,
|
|
30
|
+
shoulderBodyDiameter,
|
|
31
|
+
threadLength,
|
|
32
|
+
headDiameter,
|
|
33
|
+
headHeight,
|
|
34
|
+
neckDiameter,
|
|
35
|
+
headReliefLength: 2.5,
|
|
36
|
+
threadReliefLength,
|
|
37
|
+
underHeadRadius,
|
|
38
|
+
hexSocketWidth,
|
|
39
|
+
hexSocketDepth
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
__name(specification, "specification");
|
|
43
|
+
var specifications = {
|
|
44
|
+
6.5: specification("M5", 6.5, 6.49, 9.5, 10, 4.5, 3.86, 2, 0.25, 3, 2.4),
|
|
45
|
+
8: specification("M6", 8, 7.99, 11, 13, 5.5, 4.58, 2.5, 0.4, 4, 3.3),
|
|
46
|
+
10: specification("M8", 10, 9.99, 13, 16, 7, 6.25, 3.1, 0.6, 5, 4.2),
|
|
47
|
+
13: specification("M10", 13, 12.98, 16, 18, 9, 7.91, 3.7, 0.6, 6, 4.9),
|
|
48
|
+
16: specification("M12", 16, 15.98, 18, 24, 11, 9.57, 4.4, 0.6, 8, 6.6)
|
|
49
|
+
};
|
|
50
|
+
function resolveSpecification(input) {
|
|
51
|
+
return typeof input === "number" ? specifications[input] : input;
|
|
52
|
+
}
|
|
53
|
+
__name(resolveSpecification, "resolveSpecification");
|
|
54
|
+
function screw(input, shoulderLength) {
|
|
55
|
+
const spec = resolveSpecification(input);
|
|
56
|
+
validateHead(spec);
|
|
57
|
+
for (const key of [
|
|
58
|
+
"shoulderDiameter",
|
|
59
|
+
"shoulderBodyDiameter",
|
|
60
|
+
"threadLength",
|
|
61
|
+
"neckDiameter",
|
|
62
|
+
"headReliefLength",
|
|
63
|
+
"threadReliefLength"
|
|
64
|
+
])
|
|
65
|
+
positive(key, spec[key]);
|
|
66
|
+
positive("Shoulder length", shoulderLength);
|
|
67
|
+
if (shoulderLength <= spec.headReliefLength)
|
|
68
|
+
throw new Error("Shoulder length must exceed the head relief length.");
|
|
69
|
+
if (spec.shoulderBodyDiameter <= spec.nominalDiameter || spec.shoulderBodyDiameter > spec.shoulderDiameter || spec.shoulderDiameter >= spec.headDiameter)
|
|
70
|
+
throw new Error(
|
|
71
|
+
"Shoulder diameter must lie between thread and head diameters."
|
|
72
|
+
);
|
|
73
|
+
if (spec.neckDiameter >= spec.nominalDiameter || spec.threadLength - spec.threadReliefLength < spec.pitch)
|
|
74
|
+
throw new Error(
|
|
75
|
+
"Thread relief must leave a reduced neck and at least one thread pitch."
|
|
76
|
+
);
|
|
77
|
+
const chamfer = Math.min(0.3, spec.headHeight / 10);
|
|
78
|
+
const barrel = atY(
|
|
79
|
+
cylinder(spec.headDiameter / 2, spec.headHeight - chamfer),
|
|
80
|
+
(spec.headHeight - chamfer) / 2
|
|
81
|
+
);
|
|
82
|
+
const crown = atY(
|
|
83
|
+
frustum(spec.headDiameter / 2, spec.headDiameter / 2 - chamfer, chamfer),
|
|
84
|
+
spec.headHeight - chamfer / 2
|
|
85
|
+
);
|
|
86
|
+
const head = hexSocket(
|
|
87
|
+
union([barrel, crown]),
|
|
88
|
+
spec.hexSocketWidth,
|
|
89
|
+
spec.hexSocketDepth,
|
|
90
|
+
spec.headHeight
|
|
91
|
+
);
|
|
92
|
+
const shoulderDatum = atY(
|
|
93
|
+
cylinder(spec.shoulderBodyDiameter / 2, shoulderLength),
|
|
94
|
+
-shoulderLength / 2
|
|
95
|
+
);
|
|
96
|
+
const relief = atY(
|
|
97
|
+
cylinder(
|
|
98
|
+
spec.shoulderBodyDiameter / 2 - spec.underHeadRadius,
|
|
99
|
+
spec.headReliefLength
|
|
100
|
+
),
|
|
101
|
+
-spec.headReliefLength / 2
|
|
102
|
+
);
|
|
103
|
+
const shoulder = atY(
|
|
104
|
+
cylinder(
|
|
105
|
+
spec.shoulderBodyDiameter / 2,
|
|
106
|
+
shoulderLength - spec.headReliefLength
|
|
107
|
+
),
|
|
108
|
+
-(shoulderLength + spec.headReliefLength) / 2
|
|
109
|
+
);
|
|
110
|
+
const neck = atY(
|
|
111
|
+
cylinder(spec.neckDiameter / 2, spec.threadReliefLength + 0.05),
|
|
112
|
+
-shoulderLength - (spec.threadReliefLength + 0.05) / 2
|
|
113
|
+
);
|
|
114
|
+
const thread = atY(
|
|
115
|
+
externalThread(spec, spec.threadLength - spec.threadReliefLength),
|
|
116
|
+
-shoulderLength - (spec.threadLength + spec.threadReliefLength) / 2
|
|
117
|
+
);
|
|
118
|
+
return union([head, relief, shoulder, neck, thread]).expose({
|
|
119
|
+
headTop: head.up,
|
|
120
|
+
headBottom: head.down,
|
|
121
|
+
shoulderTop: shoulderDatum.up,
|
|
122
|
+
shoulderBottom: shoulderDatum.down,
|
|
123
|
+
shoulderAxis: shoulderDatum.axis,
|
|
124
|
+
threadTop: neck.up,
|
|
125
|
+
threadBottom: thread.down,
|
|
126
|
+
threadAxis: thread.axis
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
__name(screw, "screw");
|
|
130
|
+
function clearanceHole(input, depth) {
|
|
131
|
+
const spec = resolveSpecification(input);
|
|
132
|
+
const options = typeof depth === "number" ? { depth } : depth;
|
|
133
|
+
positive("Hole depth", options.depth);
|
|
134
|
+
const diameter = options.diameter ?? spec.shoulderDiameter + 0.2;
|
|
135
|
+
positive("Clearance diameter", diameter);
|
|
136
|
+
if (diameter <= spec.shoulderBodyDiameter)
|
|
137
|
+
throw new Error(
|
|
138
|
+
"Clearance diameter must exceed the shoulder body diameter."
|
|
139
|
+
);
|
|
140
|
+
const shaft = cylinder(diameter / 2, options.depth);
|
|
141
|
+
return withCounterbore(
|
|
142
|
+
shaft.expose({
|
|
143
|
+
shaftTop: shaft.up,
|
|
144
|
+
shaftBottom: shaft.down,
|
|
145
|
+
shaftAxis: shaft.axis
|
|
146
|
+
}),
|
|
147
|
+
spec,
|
|
148
|
+
options
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
__name(clearanceHole, "clearanceHole");
|
|
152
|
+
|
|
153
|
+
export {
|
|
154
|
+
specifications,
|
|
155
|
+
resolveSpecification,
|
|
156
|
+
screw,
|
|
157
|
+
clearanceHole,
|
|
158
|
+
iso_7379_exports
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=chunk-VVX3WOBG.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/library/iso-7379.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n cylinder,\n frustum,\n union,\n type Bound,\n type CanonicalElements,\n type LineAnchor,\n type SolidModel,\n} from '@code3d/core';\nimport {\n metric,\n atY,\n externalThread,\n hexSocket,\n positive,\n validateHead,\n withCounterbore,\n type HeadSpecification,\n type MetricSize,\n type ClearanceHole,\n type ClearanceHoleOptions as CommonClearanceHoleOptions,\n type CounterboredHole,\n type CounterboreOptions,\n} from './common.js';\nexport type {\n ClearanceHole,\n HoleElements,\n CounterboredHole,\n CounterboredHoleElements,\n CounterboreOptions,\n} from './common.js';\n\nexport type Specification = HeadSpecification &\n Readonly<{\n shoulderDiameter: number;\n shoulderBodyDiameter: number;\n threadLength: number;\n neckDiameter: number;\n headReliefLength: number;\n threadReliefLength: number;\n hexSocketWidth: number;\n hexSocketDepth: number;\n }>;\n// ISO 7379:1983, plain heads, maximum h8 shoulder diameter and nominal b.\n// https://www.finesz.com/ISO7379.php\nfunction specification(\n size: MetricSize,\n shoulderDiameter: number,\n shoulderBodyDiameter: number,\n threadLength: number,\n headDiameter: number,\n headHeight: number,\n neckDiameter: number,\n threadReliefLength: number,\n underHeadRadius: number,\n hexSocketWidth: number,\n hexSocketDepth: number,\n): Specification {\n return {\n ...metric(size),\n shoulderDiameter,\n shoulderBodyDiameter,\n threadLength,\n headDiameter,\n headHeight,\n neckDiameter,\n headReliefLength: 2.5,\n threadReliefLength,\n underHeadRadius,\n hexSocketWidth,\n hexSocketDepth,\n };\n}\nexport const specifications = {\n 6.5: specification('M5', 6.5, 6.49, 9.5, 10, 4.5, 3.86, 2, 0.25, 3, 2.4),\n 8: specification('M6', 8, 7.99, 11, 13, 5.5, 4.58, 2.5, 0.4, 4, 3.3),\n 10: specification('M8', 10, 9.99, 13, 16, 7, 6.25, 3.1, 0.6, 5, 4.2),\n 13: specification('M10', 13, 12.98, 16, 18, 9, 7.91, 3.7, 0.6, 6, 4.9),\n 16: specification('M12', 16, 15.98, 18, 24, 11, 9.57, 4.4, 0.6, 8, 6.6),\n} as const;\nexport type Size = keyof typeof specifications;\nexport type ScrewInput = Size | Specification;\nexport type ScrewElements = CanonicalElements &\n Readonly<{\n headTop: Bound;\n headBottom: Bound;\n shoulderTop: Bound;\n shoulderBottom: Bound;\n shoulderAxis: LineAnchor;\n threadTop: Bound;\n threadBottom: Bound;\n threadAxis: LineAnchor;\n }>;\nexport type Screw = SolidModel<ScrewElements>;\nexport type ClearanceHoleOptions = Omit<CommonClearanceHoleOptions, 'fit'>;\nexport type PlainHoleOptions = ClearanceHoleOptions &\n Readonly<{counterbore?: false}>;\nexport type CounterboredHoleOptions = ClearanceHoleOptions &\n Readonly<{counterbore: true | CounterboreOptions}>;\nexport function resolveSpecification(input: ScrewInput): Specification {\n return typeof input === 'number' ? specifications[input] : input;\n}\n/**\n * Length is the shoulder length L; the fixed threaded projection b is additional.\n * @code3d.arguments [8, 20]\n * @code3d.param shoulderLength {kind: 'length'}\n */\nexport function screw(input: ScrewInput, shoulderLength: number): Screw {\n const spec = resolveSpecification(input);\n validateHead(spec);\n for (const key of [\n 'shoulderDiameter',\n 'shoulderBodyDiameter',\n 'threadLength',\n 'neckDiameter',\n 'headReliefLength',\n 'threadReliefLength',\n ] as const)\n positive(key, spec[key]);\n positive('Shoulder length', shoulderLength);\n if (shoulderLength <= spec.headReliefLength)\n throw new Error('Shoulder length must exceed the head relief length.');\n if (\n spec.shoulderBodyDiameter <= spec.nominalDiameter ||\n spec.shoulderBodyDiameter > spec.shoulderDiameter ||\n spec.shoulderDiameter >= spec.headDiameter\n )\n throw new Error(\n 'Shoulder diameter must lie between thread and head diameters.',\n );\n if (\n spec.neckDiameter >= spec.nominalDiameter ||\n spec.threadLength - spec.threadReliefLength < spec.pitch\n )\n throw new Error(\n 'Thread relief must leave a reduced neck and at least one thread pitch.',\n );\n const chamfer = Math.min(0.3, spec.headHeight / 10);\n const barrel = atY(\n cylinder(spec.headDiameter / 2, spec.headHeight - chamfer),\n (spec.headHeight - chamfer) / 2,\n );\n const crown = atY(\n frustum(spec.headDiameter / 2, spec.headDiameter / 2 - chamfer, chamfer),\n spec.headHeight - chamfer / 2,\n );\n const head = hexSocket(\n union([barrel, crown]),\n spec.hexSocketWidth,\n spec.hexSocketDepth,\n spec.headHeight,\n );\n const shoulderDatum = atY(\n cylinder(spec.shoulderBodyDiameter / 2, shoulderLength),\n -shoulderLength / 2,\n );\n const relief = atY(\n cylinder(\n spec.shoulderBodyDiameter / 2 - spec.underHeadRadius,\n spec.headReliefLength,\n ),\n -spec.headReliefLength / 2,\n );\n const shoulder = atY(\n cylinder(\n spec.shoulderBodyDiameter / 2,\n shoulderLength - spec.headReliefLength,\n ),\n -(shoulderLength + spec.headReliefLength) / 2,\n );\n const neck = atY(\n cylinder(spec.neckDiameter / 2, spec.threadReliefLength + 0.05),\n -shoulderLength - (spec.threadReliefLength + 0.05) / 2,\n );\n const thread = atY(\n externalThread(spec, spec.threadLength - spec.threadReliefLength),\n -shoulderLength - (spec.threadLength + spec.threadReliefLength) / 2,\n );\n return union([head, relief, shoulder, neck, thread]).expose({\n headTop: head.up,\n headBottom: head.down,\n shoulderTop: shoulderDatum.up,\n shoulderBottom: shoulderDatum.down,\n shoulderAxis: shoulderDatum.axis,\n threadTop: neck.up,\n threadBottom: thread.down,\n threadAxis: thread.axis,\n });\n}\n/**\n * Shoulder passage with 0.2 mm diametral clearance and an optional head recess.\n * @code3d.arguments [8, 10]\n */\nexport function clearanceHole(input: ScrewInput, depth: number): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: PlainHoleOptions,\n): ClearanceHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: CounterboredHoleOptions,\n): CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n options: number | ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole;\nexport function clearanceHole(\n input: ScrewInput,\n depth: number | ClearanceHoleOptions,\n): ClearanceHole | CounterboredHole {\n const spec = resolveSpecification(input);\n const options = typeof depth === 'number' ? {depth} : depth;\n positive('Hole depth', options.depth);\n const diameter = options.diameter ?? spec.shoulderDiameter + 0.2;\n positive('Clearance diameter', diameter);\n if (diameter <= spec.shoulderBodyDiameter)\n throw new Error(\n 'Clearance diameter must exceed the shoulder body diameter.',\n );\n const shaft = cylinder(diameter / 2, options.depth);\n return withCounterbore(\n shaft.expose({\n shaftTop: shaft.up,\n shaftBottom: shaft.down,\n shaftAxis: shaft.axis,\n }),\n spec,\n options,\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
clearanceHole,
|
|
3
|
+
resolveSpecification,
|
|
4
|
+
screw,
|
|
5
|
+
specifications,
|
|
6
|
+
threadLength
|
|
7
|
+
} from "./chunk-2DGVQRQ5.js";
|
|
8
|
+
import {
|
|
9
|
+
__export
|
|
10
|
+
} from "./chunk-Z5LEGL77.js";
|
|
11
|
+
|
|
12
|
+
// packages/screws/src/library/gb-70-2.ts
|
|
13
|
+
var gb_70_2_exports = {};
|
|
14
|
+
__export(gb_70_2_exports, {
|
|
15
|
+
clearanceHole: () => clearanceHole,
|
|
16
|
+
resolveSpecification: () => resolveSpecification,
|
|
17
|
+
screw: () => screw,
|
|
18
|
+
specifications: () => specifications,
|
|
19
|
+
threadLength: () => threadLength
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
gb_70_2_exports
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-W62ASGIP.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/library/gb-70-2.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * GB/T 70.2-2025 (MOD ISO 7380-1:2022).\n * Shares the corresponding ISO module's nominal geometry within our preset\n * range. See the package README for sizes, hole allowances and modeling limits.\n * https://openstd.samr.gov.cn/bzgk/std/newGbInfo?hcno=6F19BF92846B48BF27058E2B5299935E\n */\nexport * from './iso-7380-1.js';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|