@faicad/sheetmetal 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.
Files changed (113) hide show
  1. package/dist/allowanceFns.d.ts +42 -0
  2. package/dist/allowanceFns.d.ts.map +1 -0
  3. package/dist/allowanceFns.js +63 -0
  4. package/dist/allowanceFns.js.map +1 -0
  5. package/dist/api.d.ts +312 -0
  6. package/dist/api.d.ts.map +1 -0
  7. package/dist/api.js +367 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/authorFns.d.ts +118 -0
  10. package/dist/authorFns.d.ts.map +1 -0
  11. package/dist/authorFns.js +562 -0
  12. package/dist/authorFns.js.map +1 -0
  13. package/dist/bendTableFns.d.ts +87 -0
  14. package/dist/bendTableFns.d.ts.map +1 -0
  15. package/dist/bendTableFns.js +345 -0
  16. package/dist/bendTableFns.js.map +1 -0
  17. package/dist/compat.d.ts +90 -0
  18. package/dist/compat.d.ts.map +1 -0
  19. package/dist/compat.js +99 -0
  20. package/dist/compat.js.map +1 -0
  21. package/dist/contourFlangeFns.d.ts +122 -0
  22. package/dist/contourFlangeFns.d.ts.map +1 -0
  23. package/dist/contourFlangeFns.js +403 -0
  24. package/dist/contourFlangeFns.js.map +1 -0
  25. package/dist/cutoutFns.d.ts +95 -0
  26. package/dist/cutoutFns.d.ts.map +1 -0
  27. package/dist/cutoutFns.js +300 -0
  28. package/dist/cutoutFns.js.map +1 -0
  29. package/dist/dxfFns.d.ts +48 -0
  30. package/dist/dxfFns.d.ts.map +1 -0
  31. package/dist/dxfFns.js +236 -0
  32. package/dist/dxfFns.js.map +1 -0
  33. package/dist/facade.d.ts +449 -0
  34. package/dist/facade.d.ts.map +1 -0
  35. package/dist/facade.js +535 -0
  36. package/dist/facade.js.map +1 -0
  37. package/dist/featureTreeFns.d.ts +76 -0
  38. package/dist/featureTreeFns.d.ts.map +1 -0
  39. package/dist/featureTreeFns.js +190 -0
  40. package/dist/featureTreeFns.js.map +1 -0
  41. package/dist/foldFns.d.ts +83 -0
  42. package/dist/foldFns.d.ts.map +1 -0
  43. package/dist/foldFns.js +744 -0
  44. package/dist/foldFns.js.map +1 -0
  45. package/dist/foreignUnfoldFns.d.ts +62 -0
  46. package/dist/foreignUnfoldFns.d.ts.map +1 -0
  47. package/dist/foreignUnfoldFns.js +854 -0
  48. package/dist/foreignUnfoldFns.js.map +1 -0
  49. package/dist/formFns.d.ts +58 -0
  50. package/dist/formFns.d.ts.map +1 -0
  51. package/dist/formFns.js +300 -0
  52. package/dist/formFns.js.map +1 -0
  53. package/dist/hemFns.d.ts +17 -0
  54. package/dist/hemFns.d.ts.map +1 -0
  55. package/dist/hemFns.js +212 -0
  56. package/dist/hemFns.js.map +1 -0
  57. package/dist/index.d.ts +43 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +32 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/internal.d.ts +27 -0
  62. package/dist/internal.d.ts.map +1 -0
  63. package/dist/internal.js +38 -0
  64. package/dist/internal.js.map +1 -0
  65. package/dist/jogFns.d.ts +18 -0
  66. package/dist/jogFns.d.ts.map +1 -0
  67. package/dist/jogFns.js +180 -0
  68. package/dist/jogFns.js.map +1 -0
  69. package/dist/loftedFlangeFns.d.ts +23 -0
  70. package/dist/loftedFlangeFns.d.ts.map +1 -0
  71. package/dist/loftedFlangeFns.js +306 -0
  72. package/dist/loftedFlangeFns.js.map +1 -0
  73. package/dist/materials.d.ts +16 -0
  74. package/dist/materials.d.ts.map +1 -0
  75. package/dist/materials.js +44 -0
  76. package/dist/materials.js.map +1 -0
  77. package/dist/miterFns.d.ts +31 -0
  78. package/dist/miterFns.d.ts.map +1 -0
  79. package/dist/miterFns.js +128 -0
  80. package/dist/miterFns.js.map +1 -0
  81. package/dist/nestFns.d.ts +116 -0
  82. package/dist/nestFns.d.ts.map +1 -0
  83. package/dist/nestFns.js +517 -0
  84. package/dist/nestFns.js.map +1 -0
  85. package/dist/polygonFns.d.ts +144 -0
  86. package/dist/polygonFns.d.ts.map +1 -0
  87. package/dist/polygonFns.js +324 -0
  88. package/dist/polygonFns.js.map +1 -0
  89. package/dist/reliefFns.d.ts +44 -0
  90. package/dist/reliefFns.d.ts.map +1 -0
  91. package/dist/reliefFns.js +367 -0
  92. package/dist/reliefFns.js.map +1 -0
  93. package/dist/reportFns.d.ts +33 -0
  94. package/dist/reportFns.d.ts.map +1 -0
  95. package/dist/reportFns.js +71 -0
  96. package/dist/reportFns.js.map +1 -0
  97. package/dist/tabFns.d.ts +43 -0
  98. package/dist/tabFns.d.ts.map +1 -0
  99. package/dist/tabFns.js +179 -0
  100. package/dist/tabFns.js.map +1 -0
  101. package/dist/types.d.ts +629 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +2 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/unfoldFns.d.ts +120 -0
  106. package/dist/unfoldFns.d.ts.map +1 -0
  107. package/dist/unfoldFns.js +766 -0
  108. package/dist/unfoldFns.js.map +1 -0
  109. package/dist/validateFns.d.ts +18 -0
  110. package/dist/validateFns.d.ts.map +1 -0
  111. package/dist/validateFns.js +196 -0
  112. package/dist/validateFns.js.map +1 -0
  113. package/package.json +45 -0
@@ -0,0 +1,42 @@
1
+ import { type Result } from '@faicad/faijs/brepjs-compat';
2
+ import type { BendRule, SheetMetalWarning } from './types.js';
3
+ /**
4
+ * Bend allowance — the developed (flat) length of material consumed by a bend,
5
+ * measured along the neutral axis. Resolution precedence (see
6
+ * {@link resolveBendAllowance}): a referenced bend table, then an explicit
7
+ * `rule.allowance` override, then the K-factor formula
8
+ * BA = (π/180)·|angle|·(R + K·T). An optional `onWarning` receives the clamp
9
+ * warning when a table query falls outside its tabulated range.
10
+ * @param angleDeg the bend angle in degrees
11
+ * @param thickness the sheet thickness
12
+ * @param rule the bend rule used for the resolution
13
+ * @param onWarning optional callback receiving a clamp warning when a table query
14
+ * falls outside its tabulated range
15
+ * @returns a `Result<number>` — `ok` with the computed bend allowance on success,
16
+ * or `err` with a `validationError` when the inputs are invalid
17
+ */
18
+ export declare function bendAllowance(angleDeg: number, thickness: number, rule: BendRule, onWarning?: (warning: SheetMetalWarning) => void): Result<number>;
19
+ /**
20
+ * Developed length of the bend region when flattened — the neutral-axis arc
21
+ * length that replaces the curved patch in the flat pattern. Identical to the
22
+ * bend allowance (kept distinct in name for the unfold call sites that consume
23
+ * it as a strip width), and routed through the same {@link resolveBendAllowance}
24
+ * resolution (table → explicit allowance → K-factor).
25
+ * @param angleDeg the bend angle in degrees
26
+ * @param thickness the sheet thickness
27
+ * @param rule the bend rule used for the resolution
28
+ * @param onWarning optional callback receiving a clamp warning when a table query
29
+ * falls outside its tabulated range
30
+ * @returns a `Result<number>` — `ok` with the developed length on success,
31
+ * or `err` with a `validationError` when the inputs are invalid
32
+ */
33
+ export declare function developedLength(angleDeg: number, thickness: number, rule: BendRule, onWarning?: (warning: SheetMetalWarning) => void): Result<number>;
34
+ /**
35
+ * Neutral-axis radius R + K·T (the radius the developed arc length is measured at).
36
+ * @param thickness the sheet thickness
37
+ * @param rule the bend rule providing `innerRadius` and `kFactor`
38
+ * @returns a `Result<number>` — `ok` with the neutral-axis radius on success,
39
+ * or `err` with a `validationError` when the inputs are invalid
40
+ */
41
+ export declare function neutralRadius(thickness: number, rule: BendRule): Result<number>;
42
+ //# sourceMappingURL=allowanceFns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowanceFns.d.ts","sourceRoot":"","sources":["../src/allowanceFns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA4B,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAC/C,MAAM,CAAC,MAAM,CAAC,CAEhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,GAC/C,MAAM,CAAC,MAAM,CAAC,CAEhB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAO/E"}
@@ -0,0 +1,63 @@
1
+ import { ok, err, validationError } from '@faicad/faijs/brepjs-compat';
2
+ import { resolveBendAllowance } from './bendTableFns.js';
3
+ function validateRule(rule) {
4
+ if (!Number.isFinite(rule.innerRadius) || rule.innerRadius < 0) {
5
+ return err(validationError('INVALID_RADIUS', `innerRadius must be a finite, non-negative number, got ${rule.innerRadius}`));
6
+ }
7
+ if (!Number.isFinite(rule.kFactor) || rule.kFactor < 0 || rule.kFactor > 1) {
8
+ return err(validationError('INVALID_K_FACTOR', `kFactor must be in [0, 1], got ${rule.kFactor}`));
9
+ }
10
+ return ok(undefined);
11
+ }
12
+ /**
13
+ * Bend allowance — the developed (flat) length of material consumed by a bend,
14
+ * measured along the neutral axis. Resolution precedence (see
15
+ * {@link resolveBendAllowance}): a referenced bend table, then an explicit
16
+ * `rule.allowance` override, then the K-factor formula
17
+ * BA = (π/180)·|angle|·(R + K·T). An optional `onWarning` receives the clamp
18
+ * warning when a table query falls outside its tabulated range.
19
+ * @param angleDeg the bend angle in degrees
20
+ * @param thickness the sheet thickness
21
+ * @param rule the bend rule used for the resolution
22
+ * @param onWarning optional callback receiving a clamp warning when a table query
23
+ * falls outside its tabulated range
24
+ * @returns a `Result<number>` — `ok` with the computed bend allowance on success,
25
+ * or `err` with a `validationError` when the inputs are invalid
26
+ */
27
+ export function bendAllowance(angleDeg, thickness, rule, onWarning) {
28
+ return resolveBendAllowance(rule, angleDeg, thickness, onWarning);
29
+ }
30
+ /**
31
+ * Developed length of the bend region when flattened — the neutral-axis arc
32
+ * length that replaces the curved patch in the flat pattern. Identical to the
33
+ * bend allowance (kept distinct in name for the unfold call sites that consume
34
+ * it as a strip width), and routed through the same {@link resolveBendAllowance}
35
+ * resolution (table → explicit allowance → K-factor).
36
+ * @param angleDeg the bend angle in degrees
37
+ * @param thickness the sheet thickness
38
+ * @param rule the bend rule used for the resolution
39
+ * @param onWarning optional callback receiving a clamp warning when a table query
40
+ * falls outside its tabulated range
41
+ * @returns a `Result<number>` — `ok` with the developed length on success,
42
+ * or `err` with a `validationError` when the inputs are invalid
43
+ */
44
+ export function developedLength(angleDeg, thickness, rule, onWarning) {
45
+ return resolveBendAllowance(rule, angleDeg, thickness, onWarning);
46
+ }
47
+ /**
48
+ * Neutral-axis radius R + K·T (the radius the developed arc length is measured at).
49
+ * @param thickness the sheet thickness
50
+ * @param rule the bend rule providing `innerRadius` and `kFactor`
51
+ * @returns a `Result<number>` — `ok` with the neutral-axis radius on success,
52
+ * or `err` with a `validationError` when the inputs are invalid
53
+ */
54
+ export function neutralRadius(thickness, rule) {
55
+ if (!Number.isFinite(thickness) || thickness <= 0) {
56
+ return err(validationError('INVALID_THICKNESS', `thickness must be a finite, positive number, got ${thickness}`));
57
+ }
58
+ const ruleCheck = validateRule(rule);
59
+ if (!ruleCheck.ok)
60
+ return ruleCheck;
61
+ return ok(rule.innerRadius + rule.kFactor * thickness);
62
+ }
63
+ //# sourceMappingURL=allowanceFns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowanceFns.js","sourceRoot":"","sources":["../src/allowanceFns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,SAAS,YAAY,CAAC,IAAc;IAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,GAAG,CACR,eAAe,CAAC,gBAAgB,EAAE,0DAA0D,IAAI,CAAC,WAAW,EAAE,CAAC,CAChH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3E,OAAO,GAAG,CAAC,eAAe,CAAC,kBAAkB,EAAE,kCAAkC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,SAAiB,EACjB,IAAc,EACd,SAAgD;IAEhD,OAAO,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,SAAiB,EACjB,IAAc,EACd,SAAgD;IAEhD,OAAO,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,IAAc;IAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,GAAG,CAAC,eAAe,CAAC,mBAAmB,EAAE,oDAAoD,SAAS,EAAE,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import { type Result, ok, err, validationError } from '@faicad/faijs/brepjs-compat';\nimport type { BendRule, SheetMetalWarning } from './types.js';\nimport { resolveBendAllowance } from './bendTableFns.js';\n\nfunction validateRule(rule: BendRule): Result<void> {\n if (!Number.isFinite(rule.innerRadius) || rule.innerRadius < 0) {\n return err(\n validationError('INVALID_RADIUS', `innerRadius must be a finite, non-negative number, got ${rule.innerRadius}`)\n );\n }\n if (!Number.isFinite(rule.kFactor) || rule.kFactor < 0 || rule.kFactor > 1) {\n return err(validationError('INVALID_K_FACTOR', `kFactor must be in [0, 1], got ${rule.kFactor}`));\n }\n return ok(undefined);\n}\n\n/**\n * Bend allowance — the developed (flat) length of material consumed by a bend,\n * measured along the neutral axis. Resolution precedence (see\n * {@link resolveBendAllowance}): a referenced bend table, then an explicit\n * `rule.allowance` override, then the K-factor formula\n * BA = (π/180)·|angle|·(R + K·T). An optional `onWarning` receives the clamp\n * warning when a table query falls outside its tabulated range.\n * @param angleDeg the bend angle in degrees\n * @param thickness the sheet thickness\n * @param rule the bend rule used for the resolution\n * @param onWarning optional callback receiving a clamp warning when a table query\n * falls outside its tabulated range\n * @returns a `Result<number>` — `ok` with the computed bend allowance on success,\n * or `err` with a `validationError` when the inputs are invalid\n */\nexport function bendAllowance(\n angleDeg: number,\n thickness: number,\n rule: BendRule,\n onWarning?: (warning: SheetMetalWarning) => void\n): Result<number> {\n return resolveBendAllowance(rule, angleDeg, thickness, onWarning);\n}\n\n/**\n * Developed length of the bend region when flattened — the neutral-axis arc\n * length that replaces the curved patch in the flat pattern. Identical to the\n * bend allowance (kept distinct in name for the unfold call sites that consume\n * it as a strip width), and routed through the same {@link resolveBendAllowance}\n * resolution (table → explicit allowance → K-factor).\n * @param angleDeg the bend angle in degrees\n * @param thickness the sheet thickness\n * @param rule the bend rule used for the resolution\n * @param onWarning optional callback receiving a clamp warning when a table query\n * falls outside its tabulated range\n * @returns a `Result<number>` — `ok` with the developed length on success,\n * or `err` with a `validationError` when the inputs are invalid\n */\nexport function developedLength(\n angleDeg: number,\n thickness: number,\n rule: BendRule,\n onWarning?: (warning: SheetMetalWarning) => void\n): Result<number> {\n return resolveBendAllowance(rule, angleDeg, thickness, onWarning);\n}\n\n/**\n * Neutral-axis radius R + K·T (the radius the developed arc length is measured at).\n * @param thickness the sheet thickness\n * @param rule the bend rule providing `innerRadius` and `kFactor`\n * @returns a `Result<number>` — `ok` with the neutral-axis radius on success,\n * or `err` with a `validationError` when the inputs are invalid\n */\nexport function neutralRadius(thickness: number, rule: BendRule): Result<number> {\n if (!Number.isFinite(thickness) || thickness <= 0) {\n return err(validationError('INVALID_THICKNESS', `thickness must be a finite, positive number, got ${thickness}`));\n }\n const ruleCheck = validateRule(rule);\n if (!ruleCheck.ok) return ruleCheck;\n return ok(rule.innerRadius + rule.kFactor * thickness);\n}\n"]}
package/dist/api.d.ts ADDED
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Public API — short-named wrappers over the sheet-metal `*Fns` modules.
3
+ *
4
+ * These are the canonical entry points for the domain: they delegate to the
5
+ * underlying functional implementations without re-deriving any geometry, and
6
+ * preserve the `Result<T>` / warning-channel contract end to end. The fluent
7
+ * `sheetMetal()` facade in `./facade.js` is built on top of these.
8
+ */
9
+ import { type Result, type Solid } from '@faicad/faijs/brepjs-compat';
10
+ import { type AuthorSpec, type FlangeSpec } from './authorFns.js';
11
+ import { type MiterPlane } from './miterFns.js';
12
+ import { type SlotPlacement } from './tabFns.js';
13
+ import { type DxfOptions } from './dxfFns.js';
14
+ import { type NestOptions, type NestResult } from './nestFns.js';
15
+ import { type BendTable } from './bendTableFns.js';
16
+ import type { SheetMetalPart, FlatPattern, FlatInput, BendReport, BendRule, ReliefSpec, CutoutSpec, TabSpec, ContourFlangeSpec, LoftedFlangeSpec, HemSpec, JogSpec, UnfoldResult, SheetMetalWarning } from './types.js';
17
+ /**
18
+ * Author a straight-bend part: a base flat plus folded-up flanges.
19
+ * @param spec - the part definition: base flat, material thickness, and the flange list to fold up.
20
+ * @returns a `Result<SheetMetalPart>` carrying the authored part, or the first error encountered.
21
+ */
22
+ export declare function author(spec: AuthorSpec): Result<SheetMetalPart>;
23
+ /**
24
+ * Extract the lone 3D solid of an authored part as its own `Result` terminal.
25
+ *
26
+ * `author`/`fold`/`hem` return the data model `SheetMetalPart`; its `.solid`
27
+ * field is the authored BREP solid. `.fai.js` statements cannot read nested
28
+ * member expressions (`p1.solid`), so this explicit terminal is the sanctioned
29
+ * way to pull the geometry out of a part.
30
+ * @param part - the sheet-metal part carrying the authored solid.
31
+ * @returns `Ok` with the part's surface, or `Err` (`NO_SOLID`) when the part
32
+ * has no authored solid yet (e.g. it was only built by `flatPattern`).
33
+ */
34
+ export declare function solidOf(part: SheetMetalPart): Result<Solid>;
35
+ /**
36
+ * Flatten an authored part into a developed flat pattern + bend report + warnings.
37
+ * @param part - the authored sheet-metal part to flatten.
38
+ * @returns a `Result<UnfoldResult>` with the flat pattern, bend report, and any warnings.
39
+ */
40
+ export declare function unfold(part: SheetMetalPart): Result<UnfoldResult>;
41
+ /**
42
+ * Unfold an imported sheet-metal solid that has no feature tree, by detecting its
43
+ * geometry (planar panels + cylindrical bends) numerically. `kFactor` defaults to
44
+ * the mid-surface neutral axis (0.5); supply a known material's K-factor to match
45
+ * its development.
46
+ * @param solid - the imported solid (B-rep) to unfold.
47
+ * @param opts - optional overrides; `opts.kFactor` sets the K-factor used for the bend allowance.
48
+ * @returns a `Result<UnfoldResult>` with the detected flat pattern, report, and any warnings.
49
+ */
50
+ export declare function unfoldSolid(solid: Solid, opts?: {
51
+ kFactor?: number;
52
+ }): Result<UnfoldResult>;
53
+ /**
54
+ * Fold a flat pattern (region-tree) up into a 3D part — the inverse of {@link unfold}.
55
+ * @param input - the flat pattern (region tree) to fold up.
56
+ * @returns a `Result<SheetMetalPart>` carrying the folded 3D part, or the first error.
57
+ */
58
+ export declare function fold(input: FlatInput): Result<SheetMetalPart>;
59
+ /**
60
+ * Cut a part by an oriented plane, removing material on the `+normal` side.
61
+ * @param part - the sheet-metal part to cut.
62
+ * @param plane - the oriented cutting plane; material on the plane's `+normal` side is removed.
63
+ * @returns a `Result<SheetMetalPart>` carrying the mitered part, or the first error.
64
+ */
65
+ export declare function miter(part: SheetMetalPart, plane: MiterPlane): Result<SheetMetalPart>;
66
+ /**
67
+ * Auto-miter the shared corner of two flanges with an optional gap.
68
+ * @param part - the sheet-metal part whose corner is to be mitered.
69
+ * @param flangeIdA - id of the first flange meeting at the corner.
70
+ * @param flangeIdB - id of the second flange meeting at the corner.
71
+ * @param gap - optional gap (in millimetres) left between the two mitered edges; defaults to 0.
72
+ * @returns a `Result<SheetMetalPart>` carrying the mitered part, or the first error.
73
+ */
74
+ export declare function miterCorner(part: SheetMetalPart, flangeIdA: string, flangeIdB: string, gap?: number): Result<SheetMetalPart>;
75
+ /**
76
+ * Add a bend relief slot at each mid-edge end of a partial flange's bend line.
77
+ * @param part - the sheet-metal part to modify.
78
+ * @param flangeId - id of the partial flange whose bend-line ends get the relief.
79
+ * @param spec - optional relief specification overriding the defaults.
80
+ * @returns a `Result<SheetMetalPart>` carrying the part with the relief added, or the first error.
81
+ */
82
+ export declare function bendRelief(part: SheetMetalPart, flangeId: string, spec?: ReliefSpec): Result<SheetMetalPart>;
83
+ /**
84
+ * Add a bend relief to every partial-span bend in the part.
85
+ * @param part - the sheet-metal part to modify.
86
+ * @param spec - optional relief specification applied to every partial bend.
87
+ * @returns a `Result<SheetMetalPart>` carrying the part with all reliefs added, or the first error.
88
+ */
89
+ export declare function autoReliefs(part: SheetMetalPart, spec?: ReliefSpec): Result<SheetMetalPart>;
90
+ /**
91
+ * Cut a corner relief notch at the shared corner of two adjacent flanges.
92
+ * @param part - the sheet-metal part to modify.
93
+ * @param flangeIdA - id of the first flange forming the corner.
94
+ * @param flangeIdB - id of the second flange forming the corner.
95
+ * @param spec - optional relief specification overriding the defaults.
96
+ * @returns a `Result<SheetMetalPart>` carrying the part with the corner relief added, or the first error.
97
+ */
98
+ export declare function relieveCorner(part: SheetMetalPart, flangeIdA: string, flangeIdB: string, spec?: ReliefSpec): Result<SheetMetalPart>;
99
+ /**
100
+ * Punch a cutout (hole / slot / polygon) through a named flat region's thickness.
101
+ * @param part - the sheet-metal part to modify.
102
+ * @param spec - the cutout definition (kind, geometry, and target region).
103
+ * @returns a `Result<SheetMetalPart>` carrying the part with the cutout punched, or the first error.
104
+ */
105
+ export declare function addCutout(part: SheetMetalPart, spec: CutoutSpec): Result<SheetMetalPart>;
106
+ /**
107
+ * Punch a circular hole of `diameter` centred at region-local `(x, y)`.
108
+ * @param part - the sheet-metal part to modify.
109
+ * @param region - name of the flat region the hole is punched through.
110
+ * @param x - region-local X of the hole centre.
111
+ * @param y - region-local Y of the hole centre.
112
+ * @param diameter - hole diameter.
113
+ * @returns a `Result<SheetMetalPart>` carrying the part with the hole punched, or the first error.
114
+ */
115
+ export declare function addHole(part: SheetMetalPart, region: string, x: number, y: number, diameter: number): Result<SheetMetalPart>;
116
+ /**
117
+ * Punch a slot (rectangular or obround) centred at region-local `(x, y)`.
118
+ * @param part - the sheet-metal part to modify.
119
+ * @param region - name of the flat region the slot is punched through.
120
+ * @param opts - slot geometry: centre `(x, y)`, `length`, `width`, optional `angleDeg` rotation, and `round` ends flag.
121
+ * @returns a `Result<SheetMetalPart>` carrying the part with the slot punched, or the first error.
122
+ */
123
+ export declare function addSlot(part: SheetMetalPart, region: string, opts: {
124
+ x: number;
125
+ y: number;
126
+ length: number;
127
+ width: number;
128
+ angleDeg?: number;
129
+ round?: boolean;
130
+ }): Result<SheetMetalPart>;
131
+ /**
132
+ * Punch an arbitrary polygon cutout from its region-local `points`.
133
+ * @param part - the sheet-metal part to modify.
134
+ * @param region - name of the flat region the polygon is punched through.
135
+ * @param points - region-local polygon vertices as `[x, y]` pairs.
136
+ * @returns a `Result<SheetMetalPart>` carrying the part with the polygon cutout, or the first error.
137
+ */
138
+ export declare function addPolygonCutout(part: SheetMetalPart, region: string, points: [number, number][]): Result<SheetMetalPart>;
139
+ /**
140
+ * Fuse a rectangular tab (additive protrusion) onto a region's edge.
141
+ * @param part - the sheet-metal part to modify.
142
+ * @param spec - tab definition: edge, width, and length.
143
+ * @returns a `Result<SheetMetalPart>` carrying the part with the tab added, or the first error.
144
+ */
145
+ export declare function addTab(part: SheetMetalPart, spec: TabSpec): Result<SheetMetalPart>;
146
+ /**
147
+ * Self-fixturing tab-and-slot joint: a tab on one region + a matching slot on another.
148
+ * @param part - the sheet-metal part to modify.
149
+ * @param tab - the tab to add to the first region.
150
+ * @param slot - placement of the matching slot on the second region.
151
+ * @returns a `Result<SheetMetalPart>` carrying the part with the joint added, or the first error.
152
+ */
153
+ export declare function tabAndSlot(part: SheetMetalPart, tab: TabSpec, slot: SlotPlacement): Result<SheetMetalPart>;
154
+ /**
155
+ * Form a louver (vent flap cut on 3 sides, formed up along the hinge) on a region.
156
+ * @param part - the sheet-metal part to modify.
157
+ * @param opts - louver geometry: target `region`, centre `(x, y)`, `length`, `width`, `height`, and optional `direction`.
158
+ * @returns a `Result<SheetMetalPart>` carrying the part with the louver formed, or the first error.
159
+ */
160
+ export declare function louver(part: SheetMetalPart, opts: {
161
+ region: string;
162
+ x: number;
163
+ y: number;
164
+ length: number;
165
+ width: number;
166
+ height: number;
167
+ direction?: 'up' | 'down';
168
+ }): Result<SheetMetalPart>;
169
+ /**
170
+ * Form a round emboss (raised) or dimple (recessed) on a region.
171
+ * @param part - the sheet-metal part to modify.
172
+ * @param opts - emboss geometry: target `region`, centre `(x, y)`, `diameter`, `height`, and `kind` (`dimple` or `emboss`).
173
+ * @returns a `Result<SheetMetalPart>` carrying the part with the form added, or the first error.
174
+ */
175
+ export declare function emboss(part: SheetMetalPart, opts: {
176
+ region: string;
177
+ x: number;
178
+ y: number;
179
+ diameter: number;
180
+ height: number;
181
+ kind: 'dimple' | 'emboss';
182
+ }): Result<SheetMetalPart>;
183
+ /**
184
+ * Author a contour flange: an open line/arc profile swept along a base edge into a
185
+ * multi-bend cross-section. The development is exact (Σ segment developed lengths).
186
+ * @param part - the sheet-metal part the flange is added to.
187
+ * @param spec - contour flange definition: profile, base edge, and bend parameters.
188
+ * @returns a `Result<SheetMetalPart>` carrying the part with the contour flange added, or the first error.
189
+ */
190
+ export declare function contourFlange(part: SheetMetalPart, spec: ContourFlangeSpec): Result<SheetMetalPart>;
191
+ /**
192
+ * Author a lofted / ruled transition flange between two parallel open profiles. The
193
+ * development is by triangulation — exact for a developable transition, an
194
+ * approximation (with a `DEVELOPMENT_APPROXIMATE` unfold warning) otherwise.
195
+ * @param part - the sheet-metal part the flange is added to.
196
+ * @param spec - lofted flange definition: the two open profiles and their alignment.
197
+ * @returns a `Result<SheetMetalPart>` carrying the part with the lofted flange added, or the first error.
198
+ */
199
+ export declare function loftedFlange(part: SheetMetalPart, spec: LoftedFlangeSpec): Result<SheetMetalPart>;
200
+ /**
201
+ * Author a hem: fold a region edge back ~180°+ onto its parent and run a short
202
+ * return leg. The development is exact (Σ curl bend allowances + return length).
203
+ * @param part - the sheet-metal part the hem is added to.
204
+ * @param spec - hem definition: edge, curl radius, and return leg length.
205
+ * @returns a `Result<SheetMetalPart>` carrying the part with the hem added, or the first error.
206
+ */
207
+ export declare function hem(part: SheetMetalPart, spec: HemSpec): Result<SheetMetalPart>;
208
+ /**
209
+ * Author a jog (joggle): two opposite bends stepping the flat by `offsetHeight`
210
+ * perpendicular to its plane, then continuing parallel. Development is exact.
211
+ * @param part - the sheet-metal part the jog is added to.
212
+ * @param spec - jog definition: bend line, offset height, and radii.
213
+ * @returns a `Result<SheetMetalPart>` carrying the part with the jog added, or the first error.
214
+ */
215
+ export declare function jog(part: SheetMetalPart, spec: JogSpec): Result<SheetMetalPart>;
216
+ /**
217
+ * Emit an annotated multi-layer DXF string for a flat pattern.
218
+ * @param pattern - the flat pattern to serialize.
219
+ * @param options - optional DXF output options (layers, precision, units).
220
+ * @returns a `Result<string>` carrying the DXF text, or the first error.
221
+ */
222
+ export declare function toDXF(pattern: FlatPattern, options?: DxfOptions): Result<string>;
223
+ /**
224
+ * Nest developed flat patterns onto stock sheets to reduce waste. The default
225
+ * `strategy: "bbox"` packs each part as its outline bounding box (fast, no
226
+ * interlocking). `strategy: "nfp"` is true-shape / no-fit-polygon nesting: the actual
227
+ * outline polygons are packed so concave (L-shaped) parts interlock for higher
228
+ * utilization. The NFP packer is a HEURISTIC (bottom-left-fill) — not provably
229
+ * optimal — but never overlaps parts and never drops a part silently.
230
+ * @param patterns - the flat patterns to place onto stock sheets.
231
+ * @param options - nesting configuration: stock sheet size, strategy, and spacing.
232
+ * @returns a `Result<NestResult>` carrying the placed sheets and part transforms, or the first error.
233
+ */
234
+ export declare function nest(patterns: FlatPattern[], options: NestOptions): Result<NestResult>;
235
+ /**
236
+ * Emit one fabrication-ready DXF for a single nested sheet (all parts placed).
237
+ * @param result - the nesting result containing the sheet to render.
238
+ * @param patterns - the original flat patterns referenced by `result`.
239
+ * @param sheetIndex - index of the nested sheet to emit.
240
+ * @param options - optional DXF output options (layers, precision, units).
241
+ * @returns a `Result<string>` carrying the DXF text, or the first error.
242
+ */
243
+ export declare function nestToDXF(result: NestResult, patterns: FlatPattern[], sheetIndex: number, options?: DxfOptions): Result<string>;
244
+ /**
245
+ * Build a bend report by walking the part's feature tree.
246
+ * @param part - the sheet-metal part to report on.
247
+ * @returns a `Result<BendReport>` carrying the computed bend report, or the first error.
248
+ */
249
+ export declare function report(part: SheetMetalPart): Result<BendReport>;
250
+ /**
251
+ * Project the report already computed by {@link unfold} without re-walking the tree.
252
+ * @param result - the unfold result whose bend report is to be projected.
253
+ * @returns a `Result<BendReport>` carrying the projected bend report, or the first error.
254
+ */
255
+ export declare function reportFrom(result: UnfoldResult): Result<BendReport>;
256
+ /**
257
+ * Serialize a bend report to stable pretty-printed JSON.
258
+ * @param report - the bend report to serialize.
259
+ * @returns the stable pretty-printed JSON string.
260
+ */
261
+ export declare function reportJSON(report: BendReport): string;
262
+ /**
263
+ * Manufacturability checks — advisory warnings, never errors.
264
+ * @param part - the sheet-metal part to check.
265
+ * @returns the list of manufacturability warnings (empty when the part is clean).
266
+ */
267
+ export declare function validate(part: SheetMetalPart): SheetMetalWarning[];
268
+ /**
269
+ * Bend allowance `BA = (π/180)·|angle|·(R + K·T)` for a single bend.
270
+ * @param angleDeg - the bend angle in degrees.
271
+ * @param thickness - the material thickness, in the same units as the rule radii.
272
+ * @param rule - the bend rule (K-factor, inner radius, or a bend-table reference) to apply.
273
+ * @param onWarning - optional callback invoked for non-fatal warnings during the computation.
274
+ * @returns a `Result<number>` carrying the bend allowance, or the first error.
275
+ */
276
+ export declare function allowance(angleDeg: number, thickness: number, rule: BendRule, onWarning?: (warning: SheetMetalWarning) => void): Result<number>;
277
+ /**
278
+ * Neutral-axis developed length of a bend region (numerically equal to the allowance).
279
+ * @param angleDeg - the bend angle in degrees.
280
+ * @param thickness - the material thickness, in the same units as the rule radii.
281
+ * @param rule - the bend rule (K-factor, inner radius, or a bend-table reference) to apply.
282
+ * @param onWarning - optional callback invoked for non-fatal warnings during the computation.
283
+ * @returns a `Result<number>` carrying the developed length, or the first error.
284
+ */
285
+ export declare function developed(angleDeg: number, thickness: number, rule: BendRule, onWarning?: (warning: SheetMetalWarning) => void): Result<number>;
286
+ /**
287
+ * Register (or replace) a shop bend table so rules can reference it by id.
288
+ * @param table - the bend table to register.
289
+ * @returns a `Result<BendTable>` carrying the registered table, or the first error.
290
+ */
291
+ export declare function addBendTable(table: BendTable): Result<BendTable>;
292
+ /**
293
+ * Look up a registered bend table by id (starter tables included).
294
+ * @param id - the bend table id to look up.
295
+ * @returns the matching `BendTable`, or `undefined` when no such table is registered.
296
+ */
297
+ export declare function bendTable(id: string): BendTable | undefined;
298
+ /**
299
+ * Resolve a bend's developed allowance through the single resolution point:
300
+ * a referenced bend table, then an explicit `rule.allowance`, then the K-factor
301
+ * formula. This is what {@link developed} delegates to.
302
+ * @param rule - the bend rule (bend-table reference, explicit allowance, or K-factor) to resolve.
303
+ * @param angleDeg - the bend angle in degrees.
304
+ * @param thickness - the material thickness, in the same units as the rule radii.
305
+ * @param onWarning - optional callback invoked for non-fatal warnings during the computation.
306
+ * @returns a `Result<number>` carrying the resolved allowance, or the first error.
307
+ */
308
+ export declare function resolveAllowance(rule: BendRule, angleDeg: number, thickness: number, onWarning?: (warning: SheetMetalWarning) => void): Result<number>;
309
+ export type { AuthorSpec, FlangeSpec, MiterPlane, DxfOptions, SlotPlacement, NestOptions, NestResult };
310
+ /** The live bend-table registry (shared resource, §7.3). */
311
+ export { bendTables } from './bendTableFns.js';
312
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}