@code3d/screws 0.0.1-alpha.4 → 0.0.1-alpha.7

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.
Files changed (158) hide show
  1. package/README.md +228 -40
  2. package/bld/chunks/chunk-2DGVQRQ5.js +78 -0
  3. package/bld/chunks/chunk-2DGVQRQ5.js.map +7 -0
  4. package/bld/chunks/chunk-4FMUSJBB.js +27 -0
  5. package/bld/chunks/chunk-4FMUSJBB.js.map +7 -0
  6. package/bld/chunks/chunk-7UGU5EFV.js +87 -0
  7. package/bld/chunks/chunk-7UGU5EFV.js.map +7 -0
  8. package/bld/chunks/chunk-DKS4VANI.js +27 -0
  9. package/bld/chunks/chunk-DKS4VANI.js.map +7 -0
  10. package/bld/chunks/chunk-ES62SR3Q.js +21 -0
  11. package/bld/chunks/chunk-ES62SR3Q.js.map +7 -0
  12. package/bld/chunks/chunk-ESLSQKZW.js +25 -0
  13. package/bld/chunks/chunk-ESLSQKZW.js.map +7 -0
  14. package/bld/chunks/chunk-GAX6375G.js +25 -0
  15. package/bld/chunks/chunk-GAX6375G.js.map +7 -0
  16. package/bld/chunks/chunk-GIIOR3XJ.js +49 -0
  17. package/bld/chunks/chunk-GIIOR3XJ.js.map +7 -0
  18. package/bld/chunks/chunk-HPPYZYCK.js +23 -0
  19. package/bld/chunks/chunk-HPPYZYCK.js.map +7 -0
  20. package/bld/chunks/chunk-IXFHRZSY.js +121 -0
  21. package/bld/chunks/chunk-IXFHRZSY.js.map +7 -0
  22. package/bld/chunks/chunk-MEIKYZ23.js +84 -0
  23. package/bld/chunks/chunk-MEIKYZ23.js.map +7 -0
  24. package/bld/chunks/chunk-O34BMYJV.js +84 -0
  25. package/bld/chunks/chunk-O34BMYJV.js.map +7 -0
  26. package/bld/chunks/chunk-P3M5KQ5U.js +46 -0
  27. package/bld/chunks/chunk-P3M5KQ5U.js.map +7 -0
  28. package/bld/chunks/chunk-PFFNLWWR.js +25 -0
  29. package/bld/chunks/chunk-PFFNLWWR.js.map +7 -0
  30. package/bld/chunks/chunk-SDUJLXOE.js +46 -0
  31. package/bld/chunks/chunk-SDUJLXOE.js.map +7 -0
  32. package/bld/chunks/chunk-SDYJF2XK.js +25 -0
  33. package/bld/chunks/chunk-SDYJF2XK.js.map +7 -0
  34. package/bld/chunks/chunk-SGDNOA44.js +92 -0
  35. package/bld/chunks/chunk-SGDNOA44.js.map +7 -0
  36. package/bld/chunks/chunk-SPFHOFBC.js +125 -0
  37. package/bld/chunks/chunk-SPFHOFBC.js.map +7 -0
  38. package/bld/chunks/chunk-VVX3WOBG.js +160 -0
  39. package/bld/chunks/chunk-VVX3WOBG.js.map +7 -0
  40. package/bld/chunks/chunk-W62ASGIP.js +25 -0
  41. package/bld/chunks/chunk-W62ASGIP.js.map +7 -0
  42. package/bld/chunks/chunk-Z5LEGL77.js +464 -0
  43. package/bld/chunks/chunk-Z5LEGL77.js.map +7 -0
  44. package/bld/chunks/chunk-ZNWKI54A.js +25 -0
  45. package/bld/chunks/chunk-ZNWKI54A.js.map +7 -0
  46. package/bld/library/common.d.ts +104 -0
  47. package/bld/library/common.d.ts.map +1 -0
  48. package/bld/library/gb-2672.d.ts +8 -0
  49. package/bld/library/gb-2672.d.ts.map +1 -0
  50. package/bld/library/gb-2672.js +17 -0
  51. package/bld/library/gb-2672.js.map +7 -0
  52. package/bld/library/gb-5281.d.ts +8 -0
  53. package/bld/library/gb-5281.d.ts.map +1 -0
  54. package/bld/library/gb-5281.js +15 -0
  55. package/bld/library/gb-5281.js.map +7 -0
  56. package/bld/library/gb-5782.d.ts +8 -0
  57. package/bld/library/gb-5782.d.ts.map +1 -0
  58. package/bld/library/gb-5782.js +19 -0
  59. package/bld/library/gb-5782.js.map +7 -0
  60. package/bld/library/gb-5783.d.ts +8 -0
  61. package/bld/library/gb-5783.d.ts.map +1 -0
  62. package/bld/library/gb-5783.js +19 -0
  63. package/bld/library/gb-5783.js.map +7 -0
  64. package/bld/library/gb-70-1.d.ts +8 -0
  65. package/bld/library/gb-70-1.d.ts.map +1 -0
  66. package/bld/library/gb-70-1.js +17 -0
  67. package/bld/library/gb-70-1.js.map +7 -0
  68. package/bld/library/gb-70-2.d.ts +8 -0
  69. package/bld/library/gb-70-2.d.ts.map +1 -0
  70. package/bld/library/gb-70-2.js +17 -0
  71. package/bld/library/gb-70-2.js.map +7 -0
  72. package/bld/library/gb-70-3.d.ts +8 -0
  73. package/bld/library/gb-70-3.d.ts.map +1 -0
  74. package/bld/library/gb-70-3.js +17 -0
  75. package/bld/library/gb-70-3.js.map +7 -0
  76. package/bld/library/gb-70-4.d.ts +8 -0
  77. package/bld/library/gb-70-4.d.ts.map +1 -0
  78. package/bld/library/gb-70-4.js +17 -0
  79. package/bld/library/gb-70-4.js.map +7 -0
  80. package/bld/library/gb-80.d.ts +8 -0
  81. package/bld/library/gb-80.d.ts.map +1 -0
  82. package/bld/library/gb-80.js +13 -0
  83. package/bld/library/gb-80.js.map +7 -0
  84. package/bld/library/gb-818.d.ts +8 -0
  85. package/bld/library/gb-818.d.ts.map +1 -0
  86. package/bld/library/gb-818.js +17 -0
  87. package/bld/library/gb-818.js.map +7 -0
  88. package/bld/library/hex-head.d.ts +18 -0
  89. package/bld/library/hex-head.d.ts.map +1 -0
  90. package/bld/library/index.d.ts +19 -0
  91. package/bld/library/index.d.ts.map +1 -1
  92. package/bld/library/index.js +80 -455
  93. package/bld/library/index.js.map +3 -3
  94. package/bld/library/iso-10642.d.ts +51 -0
  95. package/bld/library/iso-10642.d.ts.map +1 -0
  96. package/bld/library/iso-10642.js +16 -0
  97. package/bld/library/iso-10642.js.map +7 -0
  98. package/bld/library/iso-14583.d.ts +35 -0
  99. package/bld/library/iso-14583.d.ts.map +1 -0
  100. package/bld/library/iso-14583.js +16 -0
  101. package/bld/library/iso-14583.js.map +7 -0
  102. package/bld/library/iso-4014.d.ts +20 -0
  103. package/bld/library/iso-4014.d.ts.map +1 -0
  104. package/bld/library/iso-4014.js +18 -0
  105. package/bld/library/iso-4014.js.map +7 -0
  106. package/bld/library/iso-4017.d.ts +20 -0
  107. package/bld/library/iso-4017.d.ts.map +1 -0
  108. package/bld/library/iso-4017.js +18 -0
  109. package/bld/library/iso-4017.js.map +7 -0
  110. package/bld/library/iso-4029.d.ts +32 -0
  111. package/bld/library/iso-4029.d.ts.map +1 -0
  112. package/bld/library/iso-4029.js +12 -0
  113. package/bld/library/iso-4029.js.map +7 -0
  114. package/bld/library/iso-4762.d.ts +10 -152
  115. package/bld/library/iso-4762.d.ts.map +1 -1
  116. package/bld/library/iso-4762.js +16 -0
  117. package/bld/library/iso-4762.js.map +7 -0
  118. package/bld/library/iso-7045.d.ts +33 -0
  119. package/bld/library/iso-7045.d.ts.map +1 -0
  120. package/bld/library/iso-7045.js +16 -0
  121. package/bld/library/iso-7045.js.map +7 -0
  122. package/bld/library/iso-7379.d.ts +56 -0
  123. package/bld/library/iso-7379.d.ts.map +1 -0
  124. package/bld/library/iso-7379.js +14 -0
  125. package/bld/library/iso-7379.js.map +7 -0
  126. package/bld/library/iso-7380-1.d.ts +31 -0
  127. package/bld/library/iso-7380-1.d.ts.map +1 -0
  128. package/bld/library/iso-7380-1.js +16 -0
  129. package/bld/library/iso-7380-1.js.map +7 -0
  130. package/bld/library/iso-7380-2.d.ts +33 -0
  131. package/bld/library/iso-7380-2.d.ts.map +1 -0
  132. package/bld/library/iso-7380-2.js +16 -0
  133. package/bld/library/iso-7380-2.js.map +7 -0
  134. package/package.json +82 -2
  135. package/src/library/common.ts +367 -0
  136. package/src/library/gb-2672.ts +7 -0
  137. package/src/library/gb-5281.ts +7 -0
  138. package/src/library/gb-5782.ts +7 -0
  139. package/src/library/gb-5783.ts +7 -0
  140. package/src/library/gb-70-1.ts +7 -0
  141. package/src/library/gb-70-2.ts +7 -0
  142. package/src/library/gb-70-3.ts +7 -0
  143. package/src/library/gb-70-4.ts +7 -0
  144. package/src/library/gb-80.ts +7 -0
  145. package/src/library/gb-818.ts +7 -0
  146. package/src/library/hex-head.ts +53 -0
  147. package/src/library/index.ts +20 -0
  148. package/src/library/iso-10642.ts +173 -0
  149. package/src/library/iso-14583.ts +181 -0
  150. package/src/library/iso-4014.ts +64 -0
  151. package/src/library/iso-4017.ts +62 -0
  152. package/src/library/iso-4029.ts +101 -0
  153. package/src/library/iso-4762.ts +70 -300
  154. package/src/library/iso-7045.ts +134 -0
  155. package/src/library/iso-7379.ts +230 -0
  156. package/src/library/iso-7380-1.ts +110 -0
  157. package/src/library/iso-7380-2.ts +135 -0
  158. 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
+ }