@faicad/faijs 0.18.2 → 0.19.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 (129) hide show
  1. package/dist/api/api-namespace.d.ts.map +1 -1
  2. package/dist/api/api-namespace.js +4 -1
  3. package/dist/api/api-namespace.js.map +1 -1
  4. package/dist/api/brep-mirror/joinery-brep.d.ts +1 -1
  5. package/dist/api/brep-mirror/joinery-brep.d.ts.map +1 -1
  6. package/dist/api/brep-mirror/joinery-brep.js +19 -19
  7. package/dist/api/brep-mirror/joinery-brep.js.map +1 -1
  8. package/dist/api/index.d.ts +4 -0
  9. package/dist/api/index.d.ts.map +1 -1
  10. package/dist/api/index.js +3 -0
  11. package/dist/api/index.js.map +1 -1
  12. package/dist/api/profile.d.ts.map +1 -1
  13. package/dist/api/profile.js +113 -182
  14. package/dist/api/profile.js.map +1 -1
  15. package/dist/api/punch-hole.d.ts +74 -0
  16. package/dist/api/punch-hole.d.ts.map +1 -0
  17. package/dist/api/punch-hole.js +207 -0
  18. package/dist/api/punch-hole.js.map +1 -0
  19. package/dist/api/sketch-on-face.d.ts +85 -0
  20. package/dist/api/sketch-on-face.d.ts.map +1 -0
  21. package/dist/api/sketch-on-face.js +136 -0
  22. package/dist/api/sketch-on-face.js.map +1 -0
  23. package/dist/api/sketch-on-plane.d.ts +81 -0
  24. package/dist/api/sketch-on-plane.d.ts.map +1 -0
  25. package/dist/api/sketch-on-plane.js +103 -0
  26. package/dist/api/sketch-on-plane.js.map +1 -0
  27. package/dist/boolean/csg-backend.d.ts +6 -6
  28. package/dist/boolean/csg-backend.d.ts.map +1 -1
  29. package/dist/boolean/csg-backend.js +9 -9
  30. package/dist/boolean/csg-backend.js.map +1 -1
  31. package/dist/boolean/csg-core.d.ts +10 -10
  32. package/dist/boolean/csg-core.d.ts.map +1 -1
  33. package/dist/boolean/csg-core.js +24 -24
  34. package/dist/boolean/csg-core.js.map +1 -1
  35. package/dist/boolean/extrude-helpers.d.ts +8 -8
  36. package/dist/boolean/extrude-helpers.d.ts.map +1 -1
  37. package/dist/boolean/extrude-helpers.js +13 -13
  38. package/dist/boolean/extrude-helpers.js.map +1 -1
  39. package/dist/brep/brep-ops.d.ts +20 -6
  40. package/dist/brep/brep-ops.d.ts.map +1 -1
  41. package/dist/brep/brep-ops.js +38 -12
  42. package/dist/brep/brep-ops.js.map +1 -1
  43. package/dist/browser-host/csg-worker-protocol.d.ts +3 -3
  44. package/dist/browser-host/csg-worker-protocol.d.ts.map +1 -1
  45. package/dist/browser-host/csg-worker-protocol.js.map +1 -1
  46. package/dist/browser-host/csg-worker.js +3 -3
  47. package/dist/browser-host/csg-worker.js.map +1 -1
  48. package/dist/browser-host/inline-csg-backend.d.ts +3 -3
  49. package/dist/browser-host/inline-csg-backend.d.ts.map +1 -1
  50. package/dist/browser-host/inline-csg-backend.js +3 -3
  51. package/dist/browser-host/inline-csg-backend.js.map +1 -1
  52. package/dist/browser-host/worker-csg-backend.d.ts +3 -3
  53. package/dist/browser-host/worker-csg-backend.d.ts.map +1 -1
  54. package/dist/browser-host/worker-csg-backend.js.map +1 -1
  55. package/dist/cad-runtime/ports.d.ts +3 -3
  56. package/dist/cad-runtime/ports.d.ts.map +1 -1
  57. package/dist/cad-runtime/ports.js.map +1 -1
  58. package/dist/geometry2d/adapt.d.ts +46 -0
  59. package/dist/geometry2d/adapt.d.ts.map +1 -0
  60. package/dist/geometry2d/adapt.js +41 -0
  61. package/dist/geometry2d/adapt.js.map +1 -0
  62. package/dist/geometry2d/bbox2d.d.ts +82 -0
  63. package/dist/geometry2d/bbox2d.d.ts.map +1 -0
  64. package/dist/geometry2d/bbox2d.js +123 -0
  65. package/dist/geometry2d/bbox2d.js.map +1 -0
  66. package/dist/geometry2d/blueprint-sketcher.d.ts +27 -0
  67. package/dist/geometry2d/blueprint-sketcher.d.ts.map +1 -0
  68. package/dist/geometry2d/blueprint-sketcher.js +29 -0
  69. package/dist/geometry2d/blueprint-sketcher.js.map +1 -0
  70. package/dist/geometry2d/blueprint.d.ts +102 -0
  71. package/dist/geometry2d/blueprint.d.ts.map +1 -0
  72. package/dist/geometry2d/blueprint.js +225 -0
  73. package/dist/geometry2d/blueprint.js.map +1 -0
  74. package/dist/geometry2d/blueprints.d.ts +58 -0
  75. package/dist/geometry2d/blueprints.d.ts.map +1 -0
  76. package/dist/geometry2d/blueprints.js +72 -0
  77. package/dist/geometry2d/blueprints.js.map +1 -0
  78. package/dist/geometry2d/bridge/lift-on-plane.d.ts +50 -0
  79. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -0
  80. package/dist/geometry2d/bridge/lift-on-plane.js +72 -0
  81. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -0
  82. package/dist/geometry2d/bridge/on-surface.d.ts +98 -0
  83. package/dist/geometry2d/bridge/on-surface.d.ts.map +1 -0
  84. package/dist/geometry2d/bridge/on-surface.js +94 -0
  85. package/dist/geometry2d/bridge/on-surface.js.map +1 -0
  86. package/dist/geometry2d/bridge/plane.d.ts +69 -0
  87. package/dist/geometry2d/bridge/plane.d.ts.map +1 -0
  88. package/dist/geometry2d/bridge/plane.js +96 -0
  89. package/dist/geometry2d/bridge/plane.js.map +1 -0
  90. package/dist/geometry2d/canned-blueprints.d.ts +44 -0
  91. package/dist/geometry2d/canned-blueprints.d.ts.map +1 -0
  92. package/dist/geometry2d/canned-blueprints.js +94 -0
  93. package/dist/geometry2d/canned-blueprints.js.map +1 -0
  94. package/dist/geometry2d/compound-blueprint.d.ts +72 -0
  95. package/dist/geometry2d/compound-blueprint.d.ts.map +1 -0
  96. package/dist/geometry2d/compound-blueprint.js +95 -0
  97. package/dist/geometry2d/compound-blueprint.js.map +1 -0
  98. package/dist/geometry2d/curve2d.d.ts +298 -0
  99. package/dist/geometry2d/curve2d.d.ts.map +1 -0
  100. package/dist/geometry2d/curve2d.js +1110 -0
  101. package/dist/geometry2d/curve2d.js.map +1 -0
  102. package/dist/geometry2d/index.d.ts +22 -0
  103. package/dist/geometry2d/index.d.ts.map +1 -0
  104. package/dist/geometry2d/index.js +21 -0
  105. package/dist/geometry2d/index.js.map +1 -0
  106. package/dist/geometry2d/organise.d.ts +28 -0
  107. package/dist/geometry2d/organise.d.ts.map +1 -0
  108. package/dist/geometry2d/organise.js +108 -0
  109. package/dist/geometry2d/organise.js.map +1 -0
  110. package/dist/geometry2d/pen-sketcher.d.ts +340 -0
  111. package/dist/geometry2d/pen-sketcher.d.ts.map +1 -0
  112. package/dist/geometry2d/pen-sketcher.js +477 -0
  113. package/dist/geometry2d/pen-sketcher.js.map +1 -0
  114. package/dist/geometry2d/point.d.ts +44 -0
  115. package/dist/geometry2d/point.d.ts.map +1 -0
  116. package/dist/geometry2d/point.js +57 -0
  117. package/dist/geometry2d/point.js.map +1 -0
  118. package/dist/geometry2d/svg-ellipse.d.ts +74 -0
  119. package/dist/geometry2d/svg-ellipse.d.ts.map +1 -0
  120. package/dist/geometry2d/svg-ellipse.js +163 -0
  121. package/dist/geometry2d/svg-ellipse.js.map +1 -0
  122. package/dist/lang/symbol-table.generated.d.ts +3 -0
  123. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  124. package/dist/lang/symbol-table.generated.js +3 -0
  125. package/dist/lang/symbol-table.generated.js.map +1 -1
  126. package/dist/mesh/types.d.ts +1 -1
  127. package/dist/mesh/types.d.ts.map +1 -1
  128. package/dist/mesh/types.js.map +1 -1
  129. package/package.json +9 -1
@@ -0,0 +1,72 @@
1
+ /**
2
+ * CompoundBlueprint — 2D profile with holes (pure-data port of brepjs, Apache-2.0).
3
+ * `blueprints[0]` is the outer boundary; subsequent entries are holes.
4
+ * @module
5
+ */
6
+ import { Blueprint, type Point2 } from './blueprint.js';
7
+ import { type BBox2d } from './bbox2d.js';
8
+ /**
9
+ * CompoundBlueprint — 2D profile with holes.
10
+ * `blueprints[0]` is the outer boundary; subsequent entries are holes.
11
+ */
12
+ export declare class CompoundBlueprint {
13
+ /** `blueprints[0]` = outer boundary; the rest are holes. */
14
+ readonly blueprints: Blueprint[];
15
+ private _bbox;
16
+ constructor(blueprints: Blueprint[]);
17
+ /**
18
+ * Return a copy of this profile.
19
+ * @returns a new CompoundBlueprint whose boundaries are clones of the originals.
20
+ */
21
+ clone(): CompoundBlueprint;
22
+ /**
23
+ * Bounding box (cached). The box spanning the outer boundary and all holes.
24
+ * @returns a BBox2d enclosing every boundary in this profile.
25
+ */
26
+ get boundingBox(): BBox2d;
27
+ /**
28
+ * Scale this profile about a center point.
29
+ * @param factor - the scale factor to apply.
30
+ * @param center - the scaling center `[x, y]` (defaults to the bounding-box center).
31
+ * @returns a new CompoundBlueprint with every boundary scaled.
32
+ */
33
+ scale(factor: number, center?: Point2): CompoundBlueprint;
34
+ /**
35
+ * Translate this profile by a delta.
36
+ * @param dxOrPoint - the x delta, or a full `[dx, dy]` offset point.
37
+ * @param dy - the y delta (default 0, ignored when `dxOrPoint` is a point).
38
+ * @returns a new CompoundBlueprint with every boundary translated.
39
+ */
40
+ translate(dxOrPoint: number | Point2, dy?: number): CompoundBlueprint;
41
+ /**
42
+ * Rotate this profile about a center point.
43
+ * @param angleDeg - the rotation angle in degrees.
44
+ * @param center - the rotation center `[x, y]` (defaults to the origin).
45
+ * @returns a new CompoundBlueprint with every boundary rotated.
46
+ */
47
+ rotate(angleDeg: number, center?: Point2): CompoundBlueprint;
48
+ /**
49
+ * Mirror this profile.
50
+ * @param centerOrDirection - the mirror center (mode `center`) or the mirror axis direction.
51
+ * @param origin - the axis origin `[x, y]` when mirroring across a plane (defaults to the origin).
52
+ * @param mode - `center` mirrors about a point; `plane` mirrors across an axis.
53
+ * @returns a new CompoundBlueprint with every boundary mirrored.
54
+ */
55
+ mirror(centerOrDirection: Point2, origin?: Point2, mode?: 'center' | 'plane'): CompoundBlueprint;
56
+ /**
57
+ * The starting point of the outer boundary's first curve.
58
+ * @returns the 2D point where this profile begins.
59
+ */
60
+ get firstPoint(): Point2;
61
+ /**
62
+ * The ending point of the outer boundary's last curve.
63
+ * @returns the 2D point where this profile ends.
64
+ */
65
+ get lastPoint(): Point2;
66
+ /**
67
+ * True when the outer boundary closes back on itself.
68
+ * @returns true when the outer boundary's first and last points coincide.
69
+ */
70
+ isClosed(): boolean;
71
+ }
72
+ //# sourceMappingURL=compound-blueprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound-blueprint.d.ts","sourceRoot":"","sources":["../../src/geometry2d/compound-blueprint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAqC,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAEzE;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAA;IAEhC,OAAO,CAAC,KAAK,CAAsB;gBAEvB,UAAU,EAAE,SAAS,EAAE;IAKnC;;;OAGG;IACH,KAAK,IAAI,iBAAiB;IAI1B;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAOxB;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAKzD;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIrE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAI5D;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAAG,iBAAiB;IAI1G;;;OAGG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;OAGG;IACH,QAAQ,IAAI,OAAO;CAGpB"}
@@ -0,0 +1,95 @@
1
+ import { centerOf, createBBox2d, mergeBBox } from './bbox2d.js';
2
+ /**
3
+ * CompoundBlueprint — 2D profile with holes.
4
+ * `blueprints[0]` is the outer boundary; subsequent entries are holes.
5
+ */
6
+ export class CompoundBlueprint {
7
+ /** `blueprints[0]` = outer boundary; the rest are holes. */
8
+ blueprints;
9
+ _bbox = null;
10
+ constructor(blueprints) {
11
+ if (blueprints.length === 0)
12
+ throw new Error('CompoundBlueprint requires at least the outer boundary');
13
+ this.blueprints = blueprints;
14
+ }
15
+ /**
16
+ * Return a copy of this profile.
17
+ * @returns a new CompoundBlueprint whose boundaries are clones of the originals.
18
+ */
19
+ clone() {
20
+ return new CompoundBlueprint(this.blueprints.map((b) => b.clone()));
21
+ }
22
+ /**
23
+ * Bounding box (cached). The box spanning the outer boundary and all holes.
24
+ * @returns a BBox2d enclosing every boundary in this profile.
25
+ */
26
+ get boundingBox() {
27
+ if (!this._bbox) {
28
+ const bb = createBBox2d();
29
+ for (const b of this.blueprints)
30
+ mergeBBox(bb, b.boundingBox);
31
+ this._bbox = bb;
32
+ }
33
+ return this._bbox;
34
+ }
35
+ /**
36
+ * Scale this profile about a center point.
37
+ * @param factor - the scale factor to apply.
38
+ * @param center - the scaling center `[x, y]` (defaults to the bounding-box center).
39
+ * @returns a new CompoundBlueprint with every boundary scaled.
40
+ */
41
+ scale(factor, center) {
42
+ const ctr = center ?? centerOf(this.boundingBox);
43
+ return new CompoundBlueprint(this.blueprints.map((b) => b.scale(factor, ctr)));
44
+ }
45
+ /**
46
+ * Translate this profile by a delta.
47
+ * @param dxOrPoint - the x delta, or a full `[dx, dy]` offset point.
48
+ * @param dy - the y delta (default 0, ignored when `dxOrPoint` is a point).
49
+ * @returns a new CompoundBlueprint with every boundary translated.
50
+ */
51
+ translate(dxOrPoint, dy) {
52
+ return new CompoundBlueprint(this.blueprints.map((b) => b.translate(dxOrPoint, dy ?? 0)));
53
+ }
54
+ /**
55
+ * Rotate this profile about a center point.
56
+ * @param angleDeg - the rotation angle in degrees.
57
+ * @param center - the rotation center `[x, y]` (defaults to the origin).
58
+ * @returns a new CompoundBlueprint with every boundary rotated.
59
+ */
60
+ rotate(angleDeg, center) {
61
+ return new CompoundBlueprint(this.blueprints.map((b) => b.rotate(angleDeg, center)));
62
+ }
63
+ /**
64
+ * Mirror this profile.
65
+ * @param centerOrDirection - the mirror center (mode `center`) or the mirror axis direction.
66
+ * @param origin - the axis origin `[x, y]` when mirroring across a plane (defaults to the origin).
67
+ * @param mode - `center` mirrors about a point; `plane` mirrors across an axis.
68
+ * @returns a new CompoundBlueprint with every boundary mirrored.
69
+ */
70
+ mirror(centerOrDirection, origin, mode = 'center') {
71
+ return new CompoundBlueprint(this.blueprints.map((b) => b.mirror(centerOrDirection, origin, mode)));
72
+ }
73
+ /**
74
+ * The starting point of the outer boundary's first curve.
75
+ * @returns the 2D point where this profile begins.
76
+ */
77
+ get firstPoint() {
78
+ return this.blueprints[0].firstPoint;
79
+ }
80
+ /**
81
+ * The ending point of the outer boundary's last curve.
82
+ * @returns the 2D point where this profile ends.
83
+ */
84
+ get lastPoint() {
85
+ return this.blueprints[0].lastPoint;
86
+ }
87
+ /**
88
+ * True when the outer boundary closes back on itself.
89
+ * @returns true when the outer boundary's first and last points coincide.
90
+ */
91
+ isClosed() {
92
+ return this.blueprints[0].isClosed();
93
+ }
94
+ }
95
+ //# sourceMappingURL=compound-blueprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound-blueprint.js","sourceRoot":"","sources":["../../src/geometry2d/compound-blueprint.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAe,MAAM,UAAU,CAAA;AAEzE;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC5B,4DAA4D;IACnD,UAAU,CAAa;IAExB,KAAK,GAAkB,IAAI,CAAA;IAEnC,YAAY,UAAuB;QACjC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrE,CAAC;IAED;;;OAGG;IACH,IAAI,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,YAAY,EAAE,CAAA;YACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU;gBAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;YAC7D,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAc,EAAE,MAAe;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAChD,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;IAChF,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,SAA0B,EAAE,EAAW;QAC/C,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAgB,EAAE,MAAe;QACtC,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACtF,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,iBAAyB,EAAE,MAAe,EAAE,OAA2B,QAAQ;QACpF,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACrG,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,UAAU,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,SAAS,CAAA;IACtC,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,QAAQ,EAAE,CAAA;IACvC,CAAC;CACF","sourcesContent":["/**\n * CompoundBlueprint — 2D profile with holes (pure-data port of brepjs, Apache-2.0).\n * `blueprints[0]` is the outer boundary; subsequent entries are holes.\n * @module\n */\nimport { Blueprint, type Point2 } from './blueprint'\nimport { centerOf, createBBox2d, mergeBBox, type BBox2d } from './bbox2d'\n\n/**\n * CompoundBlueprint — 2D profile with holes.\n * `blueprints[0]` is the outer boundary; subsequent entries are holes.\n */\nexport class CompoundBlueprint {\n /** `blueprints[0]` = outer boundary; the rest are holes. */\n readonly blueprints: Blueprint[]\n\n private _bbox: BBox2d | null = null\n\n constructor(blueprints: Blueprint[]) {\n if (blueprints.length === 0) throw new Error('CompoundBlueprint requires at least the outer boundary')\n this.blueprints = blueprints\n }\n\n /**\n * Return a copy of this profile.\n * @returns a new CompoundBlueprint whose boundaries are clones of the originals.\n */\n clone(): CompoundBlueprint {\n return new CompoundBlueprint(this.blueprints.map((b) => b.clone()))\n }\n\n /**\n * Bounding box (cached). The box spanning the outer boundary and all holes.\n * @returns a BBox2d enclosing every boundary in this profile.\n */\n get boundingBox(): BBox2d {\n if (!this._bbox) {\n const bb = createBBox2d()\n for (const b of this.blueprints) mergeBBox(bb, b.boundingBox)\n this._bbox = bb\n }\n return this._bbox\n }\n\n /**\n * Scale this profile about a center point.\n * @param factor - the scale factor to apply.\n * @param center - the scaling center `[x, y]` (defaults to the bounding-box center).\n * @returns a new CompoundBlueprint with every boundary scaled.\n */\n scale(factor: number, center?: Point2): CompoundBlueprint {\n const ctr = center ?? centerOf(this.boundingBox)\n return new CompoundBlueprint(this.blueprints.map((b) => b.scale(factor, ctr)))\n }\n\n /**\n * Translate this profile by a delta.\n * @param dxOrPoint - the x delta, or a full `[dx, dy]` offset point.\n * @param dy - the y delta (default 0, ignored when `dxOrPoint` is a point).\n * @returns a new CompoundBlueprint with every boundary translated.\n */\n translate(dxOrPoint: number | Point2, dy?: number): CompoundBlueprint {\n return new CompoundBlueprint(this.blueprints.map((b) => b.translate(dxOrPoint, dy ?? 0)))\n }\n\n /**\n * Rotate this profile about a center point.\n * @param angleDeg - the rotation angle in degrees.\n * @param center - the rotation center `[x, y]` (defaults to the origin).\n * @returns a new CompoundBlueprint with every boundary rotated.\n */\n rotate(angleDeg: number, center?: Point2): CompoundBlueprint {\n return new CompoundBlueprint(this.blueprints.map((b) => b.rotate(angleDeg, center)))\n }\n\n /**\n * Mirror this profile.\n * @param centerOrDirection - the mirror center (mode `center`) or the mirror axis direction.\n * @param origin - the axis origin `[x, y]` when mirroring across a plane (defaults to the origin).\n * @param mode - `center` mirrors about a point; `plane` mirrors across an axis.\n * @returns a new CompoundBlueprint with every boundary mirrored.\n */\n mirror(centerOrDirection: Point2, origin?: Point2, mode: 'center' | 'plane' = 'center'): CompoundBlueprint {\n return new CompoundBlueprint(this.blueprints.map((b) => b.mirror(centerOrDirection, origin, mode)))\n }\n\n /**\n * The starting point of the outer boundary's first curve.\n * @returns the 2D point where this profile begins.\n */\n get firstPoint(): Point2 {\n return this.blueprints[0]!.firstPoint\n }\n\n /**\n * The ending point of the outer boundary's last curve.\n * @returns the 2D point where this profile ends.\n */\n get lastPoint(): Point2 {\n return this.blueprints[0]!.lastPoint\n }\n\n /**\n * True when the outer boundary closes back on itself.\n * @returns true when the outer boundary's first and last points coincide.\n */\n isClosed(): boolean {\n return this.blueprints[0]!.isClosed()\n }\n}"]}
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Pure-TypeScript 2D analytic curve model (faijs port of brepjs).
3
+ *
4
+ * Adapted from brepjs `src/kernel/geometry2d.ts` (Apache-2.0), preserving core
5
+ * algorithms and naming. Differences from brepjs:
6
+ * - discriminant field renamed `__bk2d` → `kind2d` (2026-09-27 decision),
7
+ * bbox discriminant `__bk2d_bbox` → `kind2d_b`.
8
+ * - All curves are plain data objects (no kernel handles, no dispose), per the
9
+ * faijs "2D curves are pure objects" design (docs/plans/2d-sketching: A1/B1).
10
+ *
11
+ * Pure TS, zero WASM, zero external deps. All 2D curves represented as plain
12
+ * objects with a `kind2d` discriminant.
13
+ *
14
+ * License: adapted from brepjs (Apache-2.0). Retained per faijs convention for
15
+ * brepjs-ported files (cf. svg-to-solid.ts).
16
+ *
17
+ * @module
18
+ */
19
+ /** Line: origin + unit direction + length. */
20
+ export interface Line2d {
21
+ readonly kind2d: 'line';
22
+ readonly ox: number;
23
+ readonly oy: number;
24
+ readonly dx: number;
25
+ readonly dy: number;
26
+ readonly len: number;
27
+ }
28
+ /** Full circle. sense=true → CCW. */
29
+ export interface Circle2d {
30
+ readonly kind2d: 'circle';
31
+ readonly cx: number;
32
+ readonly cy: number;
33
+ readonly radius: number;
34
+ readonly sense: boolean;
35
+ }
36
+ /** Ellipse (or arc of one, via trim). */
37
+ export interface Ellipse2d {
38
+ readonly kind2d: 'ellipse';
39
+ readonly cx: number;
40
+ readonly cy: number;
41
+ readonly majorRadius: number;
42
+ readonly minorRadius: number;
43
+ readonly xDirAngle: number;
44
+ readonly sense: boolean;
45
+ }
46
+ /** Bezier curve (De Casteljau). */
47
+ export interface Bezier2d {
48
+ readonly kind2d: 'bezier';
49
+ readonly poles: [number, number][];
50
+ }
51
+ /** B-spline (De Boor). */
52
+ export interface BSpline2d {
53
+ readonly kind2d: 'bspline';
54
+ readonly poles: [number, number][];
55
+ readonly knots: number[];
56
+ readonly multiplicities: number[];
57
+ readonly degree: number;
58
+ readonly isPeriodic: boolean;
59
+ }
60
+ /** Trimmed wrapper over another curve. */
61
+ export interface TrimmedCurve2d {
62
+ readonly kind2d: 'trimmed';
63
+ readonly basis: Curve2dObj;
64
+ readonly tStart: number;
65
+ readonly tEnd: number;
66
+ }
67
+ /**
68
+ * A 2D curve expressed as one of the supported analytic or spline kinds.
69
+ * Discriminated by the `kind2d` field.
70
+ */
71
+ export type Curve2dObj = Line2d | Circle2d | Ellipse2d | Bezier2d | BSpline2d | TrimmedCurve2d;
72
+ /**
73
+ * Mutable 2D bounding box carried by the curve-specific bbox helpers.
74
+ * `kind2d_b` marks the discriminant used to detect this box type.
75
+ */
76
+ export interface CurveBBox2d {
77
+ readonly kind2d_b: true;
78
+ xMin: number;
79
+ yMin: number;
80
+ xMax: number;
81
+ yMax: number;
82
+ }
83
+ /**
84
+ * Evaluate a curve at parameter t to a 2D point.
85
+ * @param c - the curve to evaluate.
86
+ * @param t - the parameter value within the curve's domain.
87
+ * @returns the 2D point `[x, y]` on the curve.
88
+ */
89
+ export declare function evaluateCurve2d(c: Curve2dObj, t: number): [number, number];
90
+ /**
91
+ * Tangent (non-normalized direction derivative) at parameter t.
92
+ * @param c - the curve to differentiate.
93
+ * @param t - the parameter value within the curve's domain.
94
+ * @returns the unnormalized tangent vector `[dx, dy]` at `t`.
95
+ */
96
+ export declare function tangentCurve2d(c: Curve2dObj, t: number): [number, number];
97
+ /**
98
+ * Parameter domain of a curve.
99
+ * @param c - the curve whose domain to read.
100
+ * @returns the inclusive `first` and `last` parameter bounds.
101
+ */
102
+ export declare function curveBounds(c: Curve2dObj): {
103
+ first: number;
104
+ last: number;
105
+ };
106
+ /**
107
+ * OCCT-style type name of a curve.
108
+ * @param c - the curve to name.
109
+ * @returns the uppercase OCCT type name such as `LINE`, `CIRCLE` or `BSPLINE_CURVE`.
110
+ */
111
+ export declare function curveTypeName(c: Curve2dObj): string;
112
+ /**
113
+ * Line segment from (x1,y1) to (x2,y2).
114
+ * @param x1 - the x coordinate of the start point.
115
+ * @param y1 - the y coordinate of the start point.
116
+ * @param x2 - the x coordinate of the end point.
117
+ * @param y2 - the y coordinate of the end point.
118
+ * @returns a Line2d describing the segment.
119
+ */
120
+ export declare function makeLine2d(x1: number, y1: number, x2: number, y2: number): Line2d;
121
+ /**
122
+ * Full circle with the given center, radius and winding sense.
123
+ * @param cx - the x coordinate of the center.
124
+ * @param cy - the y coordinate of the center.
125
+ * @param radius - the circle radius.
126
+ * @param sense - true for counter-clockwise winding (default true).
127
+ * @returns a Circle2d.
128
+ */
129
+ export declare function makeCircle2d(cx: number, cy: number, radius: number, sense?: boolean): Circle2d;
130
+ /**
131
+ * Arc through three points; returns a trimmed circle, or a line if collinear.
132
+ * @param x1 - the x coordinate of the start point.
133
+ * @param y1 - the y coordinate of the start point.
134
+ * @param xm - the x coordinate of the mid point.
135
+ * @param ym - the y coordinate of the mid point.
136
+ * @param x2 - the x coordinate of the end point.
137
+ * @param y2 - the y coordinate of the end point.
138
+ * @returns a Curve2dObj: a trimmed arc circle, or a straight line when the points are collinear.
139
+ */
140
+ export declare function makeArc2dThreePoints(x1: number, y1: number, xm: number, ym: number, x2: number, y2: number): Curve2dObj;
141
+ /**
142
+ * Arc from a start point through a given tangent direction to an end point.
143
+ * @param sx - the x coordinate of the start point.
144
+ * @param sy - the y coordinate of the start point.
145
+ * @param tx - the x component of the tangent direction at the start.
146
+ * @param ty - the y component of the tangent direction at the start.
147
+ * @param ex - the x coordinate of the end point.
148
+ * @param ey - the y coordinate of the end point.
149
+ * @returns a Curve2dObj: a trimmed circle arc, or a line when degenerate.
150
+ */
151
+ export declare function makeArc2dTangent(sx: number, sy: number, tx: number, ty: number, ex: number, ey: number): Curve2dObj;
152
+ /**
153
+ * Ellipse with the given center, radii, major-axis direction and sense.
154
+ * @param cx - the x coordinate of the center.
155
+ * @param cy - the y coordinate of the center.
156
+ * @param majorRadius - the semi-major radius.
157
+ * @param minorRadius - the semi-minor radius.
158
+ * @param xDirX - the x component of the major-axis direction (default 1).
159
+ * @param xDirY - the y component of the major-axis direction (default 0).
160
+ * @param sense - true for counter-clockwise winding (default true).
161
+ * @returns an Ellipse2d.
162
+ */
163
+ export declare function makeEllipse2d(cx: number, cy: number, majorRadius: number, minorRadius: number, xDirX?: number, xDirY?: number, sense?: boolean): Ellipse2d;
164
+ /**
165
+ * Bezier curve from control poles.
166
+ * @param poles - the ordered control points `[x, y]` for the curve.
167
+ * @returns a Bezier2d holding a copy of the poles.
168
+ */
169
+ export declare function makeBezier2d(poles: [number, number][]): Bezier2d;
170
+ /**
171
+ * Translate a curve by an offset.
172
+ * @param c - the curve to translate.
173
+ * @param dx - the x offset.
174
+ * @param dy - the y offset.
175
+ * @returns a new Curve2dObj translated by `(dx, dy)`.
176
+ */
177
+ export declare function translateCurve2d(c: Curve2dObj, dx: number, dy: number): Curve2dObj;
178
+ /**
179
+ * Rotate a curve by an angle about a center point.
180
+ * @param c - the curve to rotate.
181
+ * @param angle - the rotation angle in radians.
182
+ * @param cx - the x coordinate of the rotation center.
183
+ * @param cy - the y coordinate of the rotation center.
184
+ * @returns a new Curve2dObj rotated by `angle` about `(cx, cy)`.
185
+ */
186
+ export declare function rotateCurve2d(c: Curve2dObj, angle: number, cx: number, cy: number): Curve2dObj;
187
+ /**
188
+ * Scale a curve by a factor about a center point.
189
+ * @param c - the curve to scale.
190
+ * @param factor - the scale factor (may be negative to mirror-and-scale).
191
+ * @param cx - the x coordinate of the scaling center.
192
+ * @param cy - the y coordinate of the scaling center.
193
+ * @returns a new Curve2dObj scaled by `factor` about `(cx, cy)`.
194
+ */
195
+ export declare function scaleCurve2d(c: Curve2dObj, factor: number, cx: number, cy: number): Curve2dObj;
196
+ /**
197
+ * Mirror a curve through a center point (a half-turn).
198
+ * @param c - the curve to mirror.
199
+ * @param cx - the x coordinate of the mirror center.
200
+ * @param cy - the y coordinate of the mirror center.
201
+ * @returns a new Curve2dObj rotated 180 degrees about `(cx, cy)`.
202
+ */
203
+ export declare function mirrorAtPoint(c: Curve2dObj, cx: number, cy: number): Curve2dObj;
204
+ /**
205
+ * Mirror a curve across an axis defined by a point and a direction vector.
206
+ * @param c - the curve to mirror.
207
+ * @param ox - the x coordinate of a point on the mirror axis.
208
+ * @param oy - the y coordinate of a point on the mirror axis.
209
+ * @param dx - the x component of the axis direction vector.
210
+ * @param dy - the y component of the axis direction vector.
211
+ * @returns a new Curve2dObj reflected across the given axis.
212
+ */
213
+ export declare function mirrorAcrossAxis(c: Curve2dObj, ox: number, oy: number, dx: number, dy: number): Curve2dObj;
214
+ /**
215
+ * Compute intersection points (and overlapping segments) between two 2D curves.
216
+ * Handles analytic cases (line-line, line-circle, circle-circle) and falls back
217
+ * to numerical sampling + Newton refinement for general curves.
218
+ * @param c1 - the first curve.
219
+ * @param c2 - the second curve.
220
+ * @param tolerance - the geometric tolerance used for candidate filtering.
221
+ * @returns the intersection points and any overlapping curve segments.
222
+ */
223
+ export declare function intersectCurves2dFn(c1: Curve2dObj, c2: Curve2dObj, tolerance: number): {
224
+ points: [number, number][];
225
+ segments: Curve2dObj[];
226
+ };
227
+ /**
228
+ * Serialize a curve (JSON round-trip).
229
+ * @param c - the curve to serialize.
230
+ * @returns the curve as a JSON string.
231
+ */
232
+ export declare function serializeCurve2d(c: Curve2dObj): string;
233
+ /**
234
+ * Deserialize a curve previously produced by {@link serializeCurve2d}.
235
+ * @param data - the JSON string describing the curve.
236
+ * @returns the reconstructed Curve2dObj.
237
+ */
238
+ export declare function deserializeCurve2d(data: string): Curve2dObj;
239
+ /**
240
+ * Create an empty (inverted) curve bounding box.
241
+ * @returns a fresh CurveBBox2d whose mins are +Infinity and maxes are -Infinity.
242
+ */
243
+ export declare function createCurveBBox2d(): CurveBBox2d;
244
+ /**
245
+ * Expand a curve bounding box to include a curve's extent.
246
+ * Uses analytic extremes for lines and circles/arcs and sampling otherwise.
247
+ * @param bbox - the box to expand in place.
248
+ * @param c - the curve whose extent is incorporated.
249
+ * @param _tol - reserved tolerance parameter (unused).
250
+ */
251
+ export declare function addCurveToBBox(bbox: CurveBBox2d, c: Curve2dObj, _tol: number): void;
252
+ /**
253
+ * Parameter on a curve closest to a point.
254
+ *
255
+ * This is the general "point → parameter" primitive used by corner/offset work:
256
+ * it searches the curve's domain for the parameter whose evaluated point is
257
+ * nearest to `(px, py)` and returns it when that nearest distance is within a
258
+ * configurable fraction of the curve's geometric extent. Returns `null` when the
259
+ * point lies too far off the curve (the raw gap-vs-extent guard) so callers can
260
+ * distinguish "on/very near the curve" from "clearly off".
261
+ *
262
+ * @param c - the curve to search (line, arc, ellipse, bezier, bspline, trimmed).
263
+ * @param px - the query point x.
264
+ * @param py - the query point y.
265
+ * @param maxRatio - the maximum acceptable nearest-distance / geometric-extent
266
+ * ratio (default 0.1; raise it to accept points that sit further off the curve).
267
+ * @returns the domain parameter `t`, or `null` when `(px, py)` is off-curve by
268
+ * more than `maxRatio` of the curve's geometric extent.
269
+ */
270
+ export declare function parameterOfPoint(c: Curve2dObj, px: number, py: number, maxRatio?: number): number | null;
271
+ /**
272
+ * Trim a curve to a sub-parameter range given in the basis curve's native domain.
273
+ *
274
+ * The returned `trimmed` curve keeps the full basis; its `t∈[0,1]` domain maps
275
+ * into `[tStart, tEnd]` of the basis (so it is the inverse of `curveBounds` for
276
+ * trimmed curves). Parameters are in the basis's native domain (a line: distance
277
+ * along `[0,len]`; an arc/ellipse: angle `[.., ..]`).
278
+ *
279
+ * @param c - the curve to trim (may itself be already-trimmed; the basis is reused).
280
+ * @param tStart - the basis-domain parameter where the sub-curve starts.
281
+ * @param tEnd - the basis-domain parameter where the sub-curve ends.
282
+ * @returns the trimmed `Curve2dObj`.
283
+ */
284
+ export declare function trimCurve(c: Curve2dObj, tStart: number, tEnd: number): Curve2dObj;
285
+ /**
286
+ * Split a curve at a native-domain parameter into two trimmed sub-curves.
287
+ *
288
+ * This is the splice primitive that D1 boolean-splitting and D3 corner
289
+ * (fillet/chamfer) use: it cuts a single curve at an interior parameter into
290
+ * two `TrimmedCurve2d` sharing the same basis, covering `[first, t]` and
291
+ * `[t, last]`. Returns `null` when `t` is not strictly interior.
292
+ *
293
+ * @param c - the curve to split.
294
+ * @param t - the native-domain split parameter (strictly inside the basis domain).
295
+ * @returns the two sub-curves, or `null` when `t` is outside the interior.
296
+ */
297
+ export declare function splitCurveAt(c: Curve2dObj, t: number): [Curve2dObj, Curve2dObj] | null;
298
+ //# sourceMappingURL=curve2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"curve2d.d.ts","sourceRoot":"","sources":["../../src/geometry2d/curve2d.ts"],"names":[],"mappings":"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"}