flo-mat 3.0.10 → 3.0.11

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 (178) hide show
  1. package/__tests__/jsog/check-jsog-eql-calc.spec.ts +81 -0
  2. package/__tests__/jsog/decode-jsog.ts +85 -0
  3. package/__tests__/jsog/get-mats1.ts +41 -0
  4. package/__tests__/{cp-node/fs → jsog}/mat-dummys.ts +51 -564
  5. package/__tests__/jsog/to-jsog-breath-first.ts +107 -0
  6. package/__tests__/jsog/to-jsog-depth-first.ts +55 -0
  7. package/browser/index.js +87 -46
  8. package/browser/index.min.js +1 -1
  9. package/node/add-n-prong.ts/join-spokes.js.map +1 -1
  10. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +1 -1
  11. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  12. package/node/contact-point/contact-point.js.map +1 -1
  13. package/node/corner/get-corner.js.map +1 -1
  14. package/node/corner/get-interface-ccw.js.map +1 -1
  15. package/node/cp-node/cp-node-fs.d.ts +2 -1
  16. package/node/cp-node/cp-node-fs.js +1 -2
  17. package/node/cp-node/cp-node-fs.js.map +1 -1
  18. package/node/cp-node/fs/cp-node-comparator.d.ts +3 -0
  19. package/node/cp-node/fs/cp-node-comparator.js +6 -0
  20. package/node/cp-node/fs/cp-node-comparator.js.map +1 -0
  21. package/node/cp-node/fs/find-first.js.map +1 -1
  22. package/node/cp-node/fs/get-all-on-loop.js.map +1 -1
  23. package/node/cp-node/fs/get-branch-beziers.js.map +1 -1
  24. package/node/cp-node/fs/get-branch.js.map +1 -1
  25. package/node/cp-node/fs/get-children.js.map +1 -1
  26. package/node/cp-node/fs/get-first-exit.js.map +1 -1
  27. package/node/cp-node/fs/get-mat-curve-to-next.js.map +1 -1
  28. package/node/cp-node/fs/get-mat-curves-between.js.map +1 -1
  29. package/node/cp-node/fs/get-prong-count.js.map +1 -1
  30. package/node/cp-node/fs/get-real-prong-count.js.map +1 -1
  31. package/node/cp-node/fs/get-vertex-forward-children.js.map +1 -1
  32. package/node/cp-node/fs/is-fully-terminating.d.ts +1 -1
  33. package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
  34. package/node/cp-node/fs/is-one-prong.js.map +1 -1
  35. package/node/cp-node/fs/is-sharp.js.map +1 -1
  36. package/node/cp-node/fs/is-terminating.js.map +1 -1
  37. package/node/cp-node/fs/traverse-cp.js.map +1 -1
  38. package/node/cp-node/fs/traverse-edges.js.map +1 -1
  39. package/node/cp-node/fs/traverse-vertices.js.map +1 -1
  40. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  41. package/node/debug/functions/draw-elem/draw-cp-node.js +1 -1
  42. package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
  43. package/node/debug/functions/draw-elem/draw-cull.js.map +1 -1
  44. package/node/debug/functions/draw-elem/draw-dull-corner.js.map +1 -1
  45. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  46. package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
  47. package/node/debug/functions/draw-elem/draw-loose-bounding-box.js.map +1 -1
  48. package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
  49. package/node/debug/functions/draw-elem/draw-min-y.js.map +1 -1
  50. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
  51. package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
  52. package/node/debug/functions/draw-elem/draw-sharp-corner.js.map +1 -1
  53. package/node/debug/functions/draw-elem/draw-speed.js.map +1 -1
  54. package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
  55. package/node/debug/functions/draw-elem/draw-tight-bounding-box.js.map +1 -1
  56. package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
  57. package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
  58. package/node/debug/functions/general.js.map +1 -1
  59. package/node/find-2-prong/add-1-prong.js.map +1 -1
  60. package/node/find-2-prong/find-2-prong.js.map +1 -1
  61. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -1
  62. package/node/find-3-prong.ts/find-3-prong.js.map +1 -1
  63. package/node/find-3-prong.ts/find-and-add-3-prong.js.map +1 -1
  64. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +1 -1
  65. package/node/find-mat/find-mats.js.map +1 -1
  66. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  67. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  68. package/node/index.d.ts +35 -1
  69. package/node/index.js +36 -1
  70. package/node/index.js.map +1 -1
  71. package/node/mat/create-new-cp-tree.js.map +1 -1
  72. package/node/mat/get-largest-vertex.js.map +1 -1
  73. package/node/mat/trim-mat.js.map +1 -1
  74. package/node/memoize-primitive.js.map +1 -1
  75. package/node/sat/add-debug-info.js.map +1 -1
  76. package/node/sat/get-leaves.js.map +1 -1
  77. package/node/svg/get-loop-bounds.js.map +1 -1
  78. package/node/svg/get-min-y-pos.js.map +1 -1
  79. package/node/sweep-line/sweep-line.js.map +1 -1
  80. package/package.json +2 -2
  81. package/src/add-n-prong.ts/join-spokes.ts +11 -11
  82. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +22 -22
  83. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +38 -38
  84. package/src/contact-point/contact-point.ts +13 -13
  85. package/src/corner/get-corner.ts +39 -39
  86. package/src/corner/get-interface-ccw.ts +3 -3
  87. package/src/cp-node/cp-node-fs.ts +132 -135
  88. package/src/cp-node/cp-node.ts +30 -30
  89. package/src/cp-node/fs/clone.ts +4 -4
  90. package/src/cp-node/fs/cp-node-comparator.ts +13 -0
  91. package/src/cp-node/fs/find-first.ts +6 -6
  92. package/src/cp-node/fs/get-all-on-loop.ts +1 -1
  93. package/src/cp-node/fs/get-branch-beziers.ts +1 -1
  94. package/src/cp-node/fs/get-branch.ts +1 -1
  95. package/src/cp-node/fs/get-children.ts +8 -8
  96. package/src/cp-node/fs/get-first-exit.ts +11 -11
  97. package/src/cp-node/fs/get-mat-curve-to-next.ts +1 -1
  98. package/src/cp-node/fs/get-mat-curves-between.ts +1 -1
  99. package/src/cp-node/fs/get-prong-count.ts +8 -8
  100. package/src/cp-node/fs/get-real-prong-count.ts +3 -3
  101. package/src/cp-node/fs/get-vertex-forward-children.ts +10 -10
  102. package/src/cp-node/fs/is-fully-terminating.ts +3 -3
  103. package/src/cp-node/fs/is-one-prong.ts +8 -8
  104. package/src/cp-node/fs/is-sharp.ts +1 -1
  105. package/src/cp-node/fs/is-terminating.ts +1 -1
  106. package/src/cp-node/fs/iterate-all-on-loop.ts +6 -6
  107. package/src/cp-node/fs/traverse-all-forward.ts +11 -11
  108. package/src/cp-node/fs/traverse-cp.ts +19 -17
  109. package/src/cp-node/fs/traverse-edges.ts +10 -10
  110. package/src/cp-node/fs/traverse-vertices.ts +17 -17
  111. package/src/curve/curve.ts +26 -26
  112. package/src/debug/functions/cmp-cp-on-delta.ts +1 -1
  113. package/src/debug/functions/draw-elem/bounding-hull.ts +2 -2
  114. package/src/debug/functions/draw-elem/culls.ts +2 -2
  115. package/src/debug/functions/draw-elem/draw-cp-node.ts +30 -30
  116. package/src/debug/functions/draw-elem/draw-cull.ts +2 -2
  117. package/src/debug/functions/draw-elem/draw-dull-corner.ts +7 -7
  118. package/src/debug/functions/draw-elem/draw-elem.ts +28 -28
  119. package/src/debug/functions/draw-elem/draw-leaves.ts +12 -12
  120. package/src/debug/functions/draw-elem/draw-loose-bounding-box.ts +7 -7
  121. package/src/debug/functions/draw-elem/draw-max-vertex.ts +2 -2
  122. package/src/debug/functions/draw-elem/draw-min-y.ts +2 -2
  123. package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +1 -1
  124. package/src/debug/functions/draw-elem/draw-one-prong.ts +1 -1
  125. package/src/debug/functions/draw-elem/draw-sharp-corner.ts +6 -6
  126. package/src/debug/functions/draw-elem/draw-speed.ts +2 -2
  127. package/src/debug/functions/draw-elem/draw-three-prong.ts +28 -28
  128. package/src/debug/functions/draw-elem/draw-tight-bounding-box.ts +4 -4
  129. package/src/debug/functions/draw-elem/draw-two-prong.ts +51 -51
  130. package/src/debug/functions/draw-elem/draw-vertex.ts +12 -12
  131. package/src/debug/functions/draw-elem/dull-corner.ts +7 -7
  132. package/src/debug/functions/draw-elem/leaves.ts +2 -2
  133. package/src/debug/functions/draw-elem/loose-bounding-box.ts +7 -7
  134. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  135. package/src/debug/functions/draw-elem/min-y.ts +2 -2
  136. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +1 -1
  137. package/src/debug/functions/draw-elem/one-prong.ts +1 -1
  138. package/src/debug/functions/draw-elem/sharp-corner.ts +6 -6
  139. package/src/debug/functions/draw-elem/three-prong.ts +19 -19
  140. package/src/debug/functions/draw-elem/tight-bounding-box.ts +4 -4
  141. package/src/debug/functions/draw-elem/two-prong.ts +34 -34
  142. package/src/debug/functions/draw-elem/vertex.ts +28 -28
  143. package/src/debug/functions/general.ts +18 -18
  144. package/src/debug/functions/three-prong.ts +184 -184
  145. package/src/debug/functions/two-prong.ts +112 -112
  146. package/src/find-2-prong/add-1-prong.ts +25 -25
  147. package/src/find-2-prong/find-2-prong.ts +156 -156
  148. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +50 -50
  149. package/src/find-2-prong/find-equidistant-point-on-line.ts +27 -27
  150. package/src/find-3-prong.ts/find-3-prong-for-delta3s.ts +1 -1
  151. package/src/find-3-prong.ts/find-3-prong.ts +23 -23
  152. package/src/find-3-prong.ts/find-and-add-3-prong.ts +37 -37
  153. package/src/find-3-prong.ts/find-and-add-3-prongs.ts +30 -30
  154. package/src/find-mat/add-2-prongs-by-error.ts +1 -1
  155. package/src/find-mat/find-mats.ts +49 -49
  156. package/src/find-mat/fix-ordering.ts +2 -2
  157. package/src/find-mat/get-total-by.ts +12 -12
  158. package/src/geometry/get-closest-square-distance-to-rect.ts +37 -37
  159. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +14 -14
  160. package/src/get-curve/get-curve-between.ts +1 -1
  161. package/src/index.ts +40 -3
  162. package/src/mat/cmp-cp-on-delta.ts +1 -1
  163. package/src/mat/create-new-cp-tree.ts +12 -12
  164. package/src/mat/get-edges-as-array.ts +9 -9
  165. package/src/mat/get-largest-3-prong.ts +8 -8
  166. package/src/mat/get-largest-three-prong.ts +5 -5
  167. package/src/mat/get-largest-vertex.ts +6 -6
  168. package/src/mat/get-two-prong-type.ts +3 -3
  169. package/src/mat/trim-mat.ts +1 -1
  170. package/src/memoize-primitive.ts +14 -14
  171. package/src/sat/add-debug-info.ts +4 -4
  172. package/src/sat/cull-by-salience.ts +1 -1
  173. package/src/sat/get-leaves.ts +0 -1
  174. package/src/svg/get-extreme.ts +8 -8
  175. package/src/svg/get-loop-bounds.ts +84 -84
  176. package/src/svg/get-min-y-pos.ts +1 -1
  177. package/src/sweep-line/sweep-line.ts +23 -23
  178. package/__tests__/cp-node/fs/check-jsog-eql-calc.spec.ts +0 -30
@@ -0,0 +1,107 @@
1
+
2
+ /*
3
+ Copy/paste this into the Chrome console to serialize an object to JSOG
4
+ and copy the result to clipboard. Replace `temp1` with your root object.
5
+ */
6
+ // (() => {
7
+ // const encoded = toJsogBreathFirst(temp1);
8
+ // copy(JSON.stringify(encoded, null, 2));
9
+ // })();
10
+
11
+
12
+ function toJsogBreathFirst(v: any) {
13
+ const seen = new Map();
14
+ let nextId = 1;
15
+
16
+ type QueueItem =
17
+ | { kind: 'array'; source: any[]; target: any[] }
18
+ | { kind: 'map'; source: Map<any, any>; target: { '@id': string; '@type': 'Map'; entries: any[] } }
19
+ | { kind: 'set'; source: Set<any>; target: { '@id': string; '@type': 'Set'; values: any[] } }
20
+ | { kind: 'object'; source: Record<string, any>; target: Record<string, any> };
21
+
22
+ const queue: QueueItem[] = [];
23
+
24
+ function encodeValue(value: any): any {
25
+ if (value === null || typeof value !== 'object') return value;
26
+
27
+ if (seen.has(value)) {
28
+ return { '@ref': seen.get(value) };
29
+ }
30
+
31
+ // Arrays are encoded by value only because JSON drops custom array props
32
+ // like "@id" during stringify.
33
+ if (Array.isArray(value)) {
34
+ const result: any[] = new Array(value.length);
35
+ queue.push({ kind: 'array', source: value, target: result });
36
+ return result;
37
+ }
38
+
39
+ const id = String(nextId++);
40
+ seen.set(value, id);
41
+
42
+ if (value instanceof Map) {
43
+ const result = {
44
+ '@id': id,
45
+ '@type': 'Map' as const,
46
+ entries: [] as any[]
47
+ };
48
+ queue.push({ kind: 'map', source: value, target: result });
49
+ return result;
50
+ }
51
+
52
+ if (value instanceof Set) {
53
+ const result = {
54
+ '@id': id,
55
+ '@type': 'Set' as const,
56
+ values: [] as any[]
57
+ };
58
+ queue.push({ kind: 'set', source: value, target: result });
59
+ return result;
60
+ }
61
+
62
+ const result: Record<string, any> = { '@id': id };
63
+ queue.push({ kind: 'object', source: value, target: result });
64
+ return result;
65
+ }
66
+
67
+ const encoded = encodeValue(v);
68
+
69
+ while (queue.length > 0) {
70
+ const item = queue.shift()!;
71
+
72
+ if (item.kind === 'array') {
73
+ for (let i = 0; i < item.source.length; i++) {
74
+ item.target[i] = encodeValue(item.source[i]);
75
+ }
76
+ continue;
77
+ }
78
+
79
+ if (item.kind === 'map') {
80
+ for (const [k, val] of item.source.entries()) {
81
+ item.target.entries.push([encodeValue(k), encodeValue(val)]);
82
+ }
83
+ continue;
84
+ }
85
+
86
+ if (item.kind === 'set') {
87
+ for (const val of item.source.values()) {
88
+ item.target.values.push(encodeValue(val));
89
+ }
90
+ continue;
91
+ }
92
+
93
+ for (const [key, val] of Object.entries(item.source)) {
94
+ item.target[key] = encodeValue(val);
95
+ }
96
+ }
97
+
98
+ // `copy` below is only available in the Chrome console.
99
+ // If you want to run this in Node.js, replace it with `console.log`.
100
+ // copy(JSON.stringify(encoded, null, 2));
101
+ // console.log(JSON.stringify(encoded, null, 2));
102
+ // console.log('JSOG copied to clipboard.');
103
+ return encoded;
104
+ }
105
+
106
+
107
+ export { toJsogBreathFirst }
@@ -0,0 +1,55 @@
1
+
2
+ function toJsogDepthFirst(v: any) {
3
+ const seen = new Map();
4
+ let nextId = 1;
5
+
6
+ function encode(obj: any): any {
7
+ if (obj === null || typeof obj !== 'object') return obj;
8
+
9
+ if (seen.has(obj)) {
10
+ return { '@ref': seen.get(obj) };
11
+ }
12
+
13
+ // Arrays are encoded by value only because JSON drops custom array props
14
+ // like "@id" during stringify.
15
+ if (Array.isArray(obj)) {
16
+ return obj.map(encode);
17
+ }
18
+
19
+ const id = String(nextId++);
20
+ seen.set(obj, id);
21
+
22
+ if (obj instanceof Map) {
23
+ return {
24
+ '@id': id,
25
+ '@type': 'Map',
26
+ entries: [...obj.entries()].map(([k, v]) => [encode(k), encode(v)])
27
+ };
28
+ }
29
+
30
+ if (obj instanceof Set) {
31
+ return {
32
+ '@id': id,
33
+ '@type': 'Set',
34
+ values: [...obj.values()].map(value => encode(value))
35
+ };
36
+ }
37
+
38
+ const result: Record<string, any> = { '@id': id };
39
+ for (const [key, value] of Object.entries(obj)) {
40
+ result[key] = encode(value);
41
+ }
42
+ return result;
43
+ }
44
+
45
+ const encoded = encode(v);
46
+
47
+ // `copy` below is only available in the Chrome console.
48
+ // If you want to run this in Node.js, replace it with `console.log`.
49
+ // copy(JSON.stringify(encoded, null, 2));
50
+ console.log(JSON.stringify(encoded, null, 2));
51
+ // console.log('JSOG copied to clipboard.');
52
+ }
53
+
54
+
55
+ export { toJsogDepthFirst }
package/browser/index.js CHANGED
@@ -892,48 +892,6 @@ function floydWarshall(graph) {
892
892
  // INF INF INF 0
893
893
  // floydWarshall(graph);//?
894
894
 
895
- ;// ./src/point-on-shape/compare-poss.ts
896
- /**
897
- * Compares two `PointOnShape`s according to their cyclic ordering imposed
898
- * by their relative positions on the shape boundary.
899
- * @param a The first `PointOnShape`.
900
- * @param b The second `PointOnShape`.
901
- * @internal
902
- */
903
- function comparePoss(a, b) {
904
- let res;
905
- res = a.curve.idx - b.curve.idx;
906
- if (res !== 0) {
907
- return res;
908
- }
909
- res = a.t - b.t;
910
- return res;
911
- }
912
-
913
-
914
- ;// ./src/contact-point/contact-point.ts
915
-
916
- /**
917
- * Primarily for internal use.
918
- *
919
- * Compares the two contact points according to their order along the shape
920
- * boundary. Returns > 0 if a > b, < 0 if a < b or 0 if a === b.
921
- * @param a The first contact point.
922
- * @param b The second contact point.
923
- */
924
- function compareCps(a, b) {
925
- let res = comparePoss(a.pointOnShape, b.pointOnShape);
926
- if (res !== 0) {
927
- return res;
928
- }
929
- res = a.order - b.order;
930
- if (res !== 0) {
931
- return res;
932
- }
933
- return a.order2 - b.order2;
934
- }
935
-
936
-
937
895
  ;// ./src/cp-node/fs/get-all-on-loop.ts
938
896
  function getAllOnLoop(cpNode) {
939
897
  const cpStart = cpNode;
@@ -7174,6 +7132,55 @@ function getAllVertices(cpNode) {
7174
7132
  }
7175
7133
 
7176
7134
 
7135
+ ;// ./src/point-on-shape/compare-poss.ts
7136
+ /**
7137
+ * Compares two `PointOnShape`s according to their cyclic ordering imposed
7138
+ * by their relative positions on the shape boundary.
7139
+ * @param a The first `PointOnShape`.
7140
+ * @param b The second `PointOnShape`.
7141
+ * @internal
7142
+ */
7143
+ function comparePoss(a, b) {
7144
+ let res;
7145
+ res = a.curve.idx - b.curve.idx;
7146
+ if (res !== 0) {
7147
+ return res;
7148
+ }
7149
+ res = a.t - b.t;
7150
+ return res;
7151
+ }
7152
+
7153
+
7154
+ ;// ./src/contact-point/contact-point.ts
7155
+
7156
+ /**
7157
+ * Primarily for internal use.
7158
+ *
7159
+ * Compares the two contact points according to their order along the shape
7160
+ * boundary. Returns > 0 if a > b, < 0 if a < b or 0 if a === b.
7161
+ * @param a The first contact point.
7162
+ * @param b The second contact point.
7163
+ */
7164
+ function compareCps(a, b) {
7165
+ let res = comparePoss(a.pointOnShape, b.pointOnShape);
7166
+ if (res !== 0) {
7167
+ return res;
7168
+ }
7169
+ res = a.order - b.order;
7170
+ if (res !== 0) {
7171
+ return res;
7172
+ }
7173
+ return a.order2 - b.order2;
7174
+ }
7175
+
7176
+
7177
+ ;// ./src/cp-node/fs/cp-node-comparator.ts
7178
+
7179
+ function cpNodeComparator(a, b) {
7180
+ return compareCps(a.cp, b.cp);
7181
+ }
7182
+
7183
+
7177
7184
  ;// ./src/cp-node/cp-node-fs.ts
7178
7185
 
7179
7186
 
@@ -7210,7 +7217,6 @@ function getAllVertices(cpNode) {
7210
7217
 
7211
7218
 
7212
7219
 
7213
- const cpNodeComparator = (a, b) => compareCps(a.cp, b.cp);
7214
7220
  const CpNodeFs = {
7215
7221
  /**
7216
7222
  * Returns the children of this `CpNode` when seen as a MAT edge. Only
@@ -7310,7 +7316,7 @@ const CpNodeFs = {
7310
7316
  * Compares the order of two `CpNode`s. The order is cyclic and depends
7311
7317
  * on a `CpNode`'s relative position along the shape boundary.
7312
7318
  */
7313
- cpNodeComparator,
7319
+ cpNodeComparator: cpNodeComparator,
7314
7320
  /**
7315
7321
  * For debugging
7316
7322
  * @param cpNode
@@ -30261,7 +30267,7 @@ function drawCpNode(g, cpNode, classes = 'blue thin2 nofill', delay = 0, scaleFa
30261
30267
  }
30262
30268
  const $cross = crossHair(g, c, 'orange thin10 nofill', 2 * scaleFactor, delay);
30263
30269
  // if (r === 0) {
30264
- // const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
30270
+ // const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
30265
30271
  // }
30266
30272
  return [...$cps, ...$ls, ...$circle, ...$cross];
30267
30273
  }
@@ -30724,6 +30730,41 @@ function holeCloserNext(pairs, holeCloser) {
30724
30730
 
30725
30731
 
30726
30732
 
30733
+
30734
+
30735
+
30736
+
30737
+
30738
+
30739
+
30740
+
30741
+
30742
+
30743
+
30744
+
30745
+
30746
+
30747
+ // CpNodeFs functions
30748
+
30749
+
30750
+
30751
+
30752
+
30753
+
30754
+
30755
+
30756
+
30757
+
30758
+
30759
+
30760
+
30761
+
30762
+
30763
+
30764
+
30765
+
30766
+
30767
+
30727
30768
 
30728
30769
 
30729
30770
 
@@ -30740,4 +30781,4 @@ function holeCloserNext(pairs, holeCloser) {
30740
30781
 
30741
30782
 
30742
30783
 
30743
- export { CpNodeFs, beziersToSvgPathStr, connectHoleClosers, createInitialCpTree, createPos, debugElemNames, drawBeziersAsSinglePath, drawBranch, drawElemFs, drawElemFsDetailed, drawMat, emptyDebugElems, enableDebugForMat, find2Prong, findAndAdd2Prong, findAndAddHoleClosing2Prongs, findMats, floydWarshall, getBoundaryBeziersToNext, getBoundaryPieceBeziers, getBranches, getCloseBoundaryPointsCertified, getClosestSquareDistanceToRect, getFor2ProngsOnLoop, getGraph, getImpliedBoundaryBezierBetween, getPartialMeta, getPathsFromStr, getPointToCpNode, getPotentialClosestPointsOnCurveCertified, getSatCulls, get_shape_bounds_getShapeBounds as getShapeBounds, getSharpCornersOnLoop, isVertexSpecial, loopFromBeziers, simplifyMat, sweep_line_sweepLine as sweepLine, toScaleAxis, trimMat };
30784
+ export { CpNodeFs, beziersToSvgPathStr, clone, connectHoleClosers, cpNodeComparator, createInitialCpTree, createPos, debugElemNames, drawBeziersAsSinglePath, drawBranch, drawElemFs, drawElemFsDetailed, drawMat, emptyDebugElems, enableDebugForMat, enhanceCpNode, find2Prong, findAndAdd2Prong, findAndAddHoleClosing2Prongs, findMats, floydWarshall, getAllOnCircle, getAllOnLoop, getAllVertices, getBoundaryBezierPartsToNext, getBoundaryBeziersBetween, getBoundaryBeziersToNext, getBoundaryPieceBeziers, getBranch, getBranchBeziers, getBranches, getChildren, getCloseBoundaryPointsCertified, getClosestSquareDistanceToRect, getEdgeDirection, getFirstExit, getFor2ProngsOnLoop, getGraph, getHoleClosers, getImpliedBoundaryBezierBetween, getInitialDegAngleBetweenMatCurves, getMatCurveBetween, getMatCurveToNext, getMatCurvesBetween, getPartialMeta, getPathsFromStr, getPointToCpNode, getPotentialClosestPointsOnCurveCertified, getProngCount, getRealProngCount, getSalience, getSatCulls, get_shape_bounds_getShapeBounds as getShapeBounds, getSharpCornersOnLoop, getSmoothedSpeed$, getSpeed, getVertexForwardChildren, isFullyTerminating, isOnSameCircle, isOneProng, isSharp, isTerminating, isTwoProng, isVertexSpecial, loopFromBeziers, removeVertex, simplifyMat, sweep_line_sweepLine as sweepLine, toScaleAxis, traverseCp, traverseEdges, traverseVertices, trimMat };