flo-mat 3.0.9 → 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 (261) 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 +280 -236
  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/cull-bezier-pieces.d.ts +5 -4
  11. package/node/closest-boundary-point/cull-bezier-pieces.js +9 -8
  12. package/node/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
  13. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +2 -2
  14. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +8 -8
  15. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  16. package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +2 -2
  17. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +8 -8
  18. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
  19. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +1 -1
  20. package/node/closest-boundary-point/get-best-distance-squared.d.ts +1 -1
  21. package/node/closest-boundary-point/get-best-distance-squared.js +6 -6
  22. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  23. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +2 -2
  24. package/node/closest-boundary-point/get-close-boundary-points-certified.js +7 -7
  25. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  26. package/node/contact-point/contact-point.js.map +1 -1
  27. package/node/corner/get-corner.js.map +1 -1
  28. package/node/corner/get-interface-ccw.js.map +1 -1
  29. package/node/cp-node/cp-node-fs.d.ts +2 -1
  30. package/node/cp-node/cp-node-fs.js +1 -2
  31. package/node/cp-node/cp-node-fs.js.map +1 -1
  32. package/node/cp-node/fs/cp-node-comparator.d.ts +3 -0
  33. package/node/cp-node/fs/cp-node-comparator.js +6 -0
  34. package/node/cp-node/fs/cp-node-comparator.js.map +1 -0
  35. package/node/cp-node/fs/find-first.js.map +1 -1
  36. package/node/cp-node/fs/get-all-on-loop.js.map +1 -1
  37. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.d.ts +1 -1
  38. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +11 -16
  39. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
  40. package/node/cp-node/fs/get-boundary-beziers-between.js +4 -6
  41. package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
  42. package/node/cp-node/fs/get-boundary-beziers-to-next.d.ts +10 -1
  43. package/node/cp-node/fs/get-boundary-beziers-to-next.js +70 -35
  44. package/node/cp-node/fs/get-boundary-beziers-to-next.js.map +1 -1
  45. package/node/cp-node/fs/get-branch-beziers.js.map +1 -1
  46. package/node/cp-node/fs/get-branch.js.map +1 -1
  47. package/node/cp-node/fs/get-children.js.map +1 -1
  48. package/node/cp-node/fs/get-first-exit.js.map +1 -1
  49. package/node/cp-node/fs/get-mat-curve-to-next.js.map +1 -1
  50. package/node/cp-node/fs/get-mat-curves-between.js.map +1 -1
  51. package/node/cp-node/fs/get-prong-count.js.map +1 -1
  52. package/node/cp-node/fs/get-real-prong-count.js.map +1 -1
  53. package/node/cp-node/fs/get-salience.js +2 -2
  54. package/node/cp-node/fs/get-salience.js.map +1 -1
  55. package/node/cp-node/fs/get-speed.js +0 -1
  56. package/node/cp-node/fs/get-speed.js.map +1 -1
  57. package/node/cp-node/fs/get-vertex-forward-children.js.map +1 -1
  58. package/node/cp-node/fs/is-fully-terminating.d.ts +1 -1
  59. package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
  60. package/node/cp-node/fs/is-one-prong.js.map +1 -1
  61. package/node/cp-node/fs/is-sharp.js.map +1 -1
  62. package/node/cp-node/fs/is-terminating.js.map +1 -1
  63. package/node/cp-node/fs/traverse-cp.js.map +1 -1
  64. package/node/cp-node/fs/traverse-edges.js.map +1 -1
  65. package/node/cp-node/fs/traverse-vertices.js.map +1 -1
  66. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  67. package/node/debug/functions/draw-elem/draw-cp-node.js +1 -1
  68. package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
  69. package/node/debug/functions/draw-elem/draw-cull.js.map +1 -1
  70. package/node/debug/functions/draw-elem/draw-dull-corner.js.map +1 -1
  71. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  72. package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
  73. package/node/debug/functions/draw-elem/draw-loose-bounding-box.js.map +1 -1
  74. package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
  75. package/node/debug/functions/draw-elem/draw-min-y.js.map +1 -1
  76. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
  77. package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
  78. package/node/debug/functions/draw-elem/draw-sharp-corner.js.map +1 -1
  79. package/node/debug/functions/draw-elem/draw-speed.js.map +1 -1
  80. package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
  81. package/node/debug/functions/draw-elem/draw-tight-bounding-box.js.map +1 -1
  82. package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
  83. package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
  84. package/node/debug/functions/general.js.map +1 -1
  85. package/node/find-2-prong/add-1-prong.js.map +1 -1
  86. package/node/find-2-prong/cull-bezier-pieces.d.ts +4 -4
  87. package/node/find-2-prong/cull-bezier-pieces.js +9 -9
  88. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
  89. package/node/find-2-prong/find-2-prong.js +8 -8
  90. package/node/find-2-prong/find-2-prong.js.map +1 -1
  91. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -1
  92. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +2 -2
  93. package/node/find-2-prong/get-initial-bezier-pieces.js +2 -2
  94. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  95. package/node/find-2-prong/reduce-radius.d.ts +1 -1
  96. package/node/find-2-prong/reduce-radius.js +5 -5
  97. package/node/find-2-prong/reduce-radius.js.map +1 -1
  98. package/node/find-3-prong.ts/calc-better-x.d.ts +2 -2
  99. package/node/find-3-prong.ts/calc-better-x.js +3 -3
  100. package/node/find-3-prong.ts/calc-better-x.js.map +1 -1
  101. package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +2 -2
  102. package/node/find-3-prong.ts/calc-initial-3-prong-center.js +3 -3
  103. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +1 -1
  104. package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +2 -2
  105. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js +16 -16
  106. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +1 -1
  107. package/node/find-3-prong.ts/find-3-prong.js +2 -2
  108. package/node/find-3-prong.ts/find-3-prong.js.map +1 -1
  109. package/node/find-3-prong.ts/find-and-add-3-prong.js.map +1 -1
  110. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +1 -1
  111. package/node/find-3-prong.ts/get-closest-points.d.ts +2 -2
  112. package/node/find-3-prong.ts/get-closest-points.js +4 -4
  113. package/node/find-3-prong.ts/get-closest-points.js.map +1 -1
  114. package/node/find-mat/find-mats.js.map +1 -1
  115. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  116. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  117. package/node/index.d.ts +35 -1
  118. package/node/index.js +36 -1
  119. package/node/index.js.map +1 -1
  120. package/node/mat/create-new-cp-tree.js.map +1 -1
  121. package/node/mat/get-boundary-piece-beziers.js +7 -7
  122. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  123. package/node/mat/get-largest-vertex.js.map +1 -1
  124. package/node/mat/trim-mat.js.map +1 -1
  125. package/node/memoize-primitive.js.map +1 -1
  126. package/node/sat/add-debug-info.js.map +1 -1
  127. package/node/sat/cull.d.ts +7 -5
  128. package/node/sat/cull.js +7 -4
  129. package/node/sat/cull.js.map +1 -1
  130. package/node/sat/get-leaves.js.map +1 -1
  131. package/node/sat/to-scale-axis.d.ts +3 -2
  132. package/node/sat/to-scale-axis.js +3 -2
  133. package/node/sat/to-scale-axis.js.map +1 -1
  134. package/node/svg/get-loop-bounds.js.map +1 -1
  135. package/node/svg/get-min-y-pos.js.map +1 -1
  136. package/node/sweep-line/sweep-line.js.map +1 -1
  137. package/package.json +6 -6
  138. package/src/add-n-prong.ts/join-spokes.ts +11 -11
  139. package/src/closest-boundary-point/cull-bezier-pieces.ts +12 -11
  140. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +8 -8
  141. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +8 -8
  142. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +22 -22
  143. package/src/closest-boundary-point/get-best-distance-squared.ts +6 -6
  144. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +41 -41
  145. package/src/contact-point/contact-point.ts +13 -13
  146. package/src/corner/get-corner.ts +39 -39
  147. package/src/corner/get-interface-ccw.ts +3 -3
  148. package/src/cp-node/cp-node-fs.ts +132 -135
  149. package/src/cp-node/cp-node.ts +30 -30
  150. package/src/cp-node/fs/clone.ts +4 -4
  151. package/src/cp-node/fs/cp-node-comparator.ts +13 -0
  152. package/src/cp-node/fs/find-first.ts +6 -6
  153. package/src/cp-node/fs/get-all-on-loop.ts +1 -1
  154. package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +12 -18
  155. package/src/cp-node/fs/get-boundary-beziers-between.ts +6 -7
  156. package/src/cp-node/fs/get-boundary-beziers-to-next.ts +79 -53
  157. package/src/cp-node/fs/get-branch-beziers.ts +1 -1
  158. package/src/cp-node/fs/get-branch.ts +1 -1
  159. package/src/cp-node/fs/get-children.ts +8 -8
  160. package/src/cp-node/fs/get-first-exit.ts +11 -11
  161. package/src/cp-node/fs/get-mat-curve-to-next.ts +1 -1
  162. package/src/cp-node/fs/get-mat-curves-between.ts +1 -1
  163. package/src/cp-node/fs/get-prong-count.ts +8 -8
  164. package/src/cp-node/fs/get-real-prong-count.ts +3 -3
  165. package/src/cp-node/fs/get-salience.ts +2 -2
  166. package/src/cp-node/fs/get-speed.ts +1 -6
  167. package/src/cp-node/fs/get-vertex-forward-children.ts +10 -10
  168. package/src/cp-node/fs/is-fully-terminating.ts +3 -3
  169. package/src/cp-node/fs/is-one-prong.ts +8 -8
  170. package/src/cp-node/fs/is-sharp.ts +1 -1
  171. package/src/cp-node/fs/is-terminating.ts +1 -1
  172. package/src/cp-node/fs/iterate-all-on-loop.ts +6 -6
  173. package/src/cp-node/fs/traverse-all-forward.ts +11 -11
  174. package/src/cp-node/fs/traverse-cp.ts +19 -17
  175. package/src/cp-node/fs/traverse-edges.ts +10 -10
  176. package/src/cp-node/fs/traverse-vertices.ts +17 -17
  177. package/src/curve/curve.ts +26 -26
  178. package/src/debug/functions/cmp-cp-on-delta.ts +1 -1
  179. package/src/debug/functions/draw-elem/bounding-hull.ts +2 -2
  180. package/src/debug/functions/draw-elem/culls.ts +2 -2
  181. package/src/debug/functions/draw-elem/draw-cp-node.ts +30 -30
  182. package/src/debug/functions/draw-elem/draw-cull.ts +2 -2
  183. package/src/debug/functions/draw-elem/draw-dull-corner.ts +7 -7
  184. package/src/debug/functions/draw-elem/draw-elem.ts +28 -28
  185. package/src/debug/functions/draw-elem/draw-leaves.ts +12 -12
  186. package/src/debug/functions/draw-elem/draw-loose-bounding-box.ts +7 -7
  187. package/src/debug/functions/draw-elem/draw-max-vertex.ts +2 -2
  188. package/src/debug/functions/draw-elem/draw-min-y.ts +2 -2
  189. package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +1 -1
  190. package/src/debug/functions/draw-elem/draw-one-prong.ts +1 -1
  191. package/src/debug/functions/draw-elem/draw-sharp-corner.ts +6 -6
  192. package/src/debug/functions/draw-elem/draw-speed.ts +2 -2
  193. package/src/debug/functions/draw-elem/draw-three-prong.ts +28 -28
  194. package/src/debug/functions/draw-elem/draw-tight-bounding-box.ts +4 -4
  195. package/src/debug/functions/draw-elem/draw-two-prong.ts +51 -51
  196. package/src/debug/functions/draw-elem/draw-vertex.ts +12 -12
  197. package/src/debug/functions/draw-elem/dull-corner.ts +7 -7
  198. package/src/debug/functions/draw-elem/leaves.ts +2 -2
  199. package/src/debug/functions/draw-elem/loose-bounding-box.ts +7 -7
  200. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  201. package/src/debug/functions/draw-elem/min-y.ts +2 -2
  202. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +1 -1
  203. package/src/debug/functions/draw-elem/one-prong.ts +1 -1
  204. package/src/debug/functions/draw-elem/sharp-corner.ts +6 -6
  205. package/src/debug/functions/draw-elem/three-prong.ts +19 -19
  206. package/src/debug/functions/draw-elem/tight-bounding-box.ts +4 -4
  207. package/src/debug/functions/draw-elem/two-prong.ts +44 -44
  208. package/src/debug/functions/draw-elem/vertex.ts +28 -28
  209. package/src/debug/functions/general.ts +18 -18
  210. package/src/debug/functions/three-prong.ts +184 -184
  211. package/src/debug/functions/two-prong.ts +201 -201
  212. package/src/debug/two-prong-for-debugging.ts +26 -26
  213. package/src/find-2-prong/add-1-prong.ts +25 -25
  214. package/src/find-2-prong/add-debug-info.ts +38 -38
  215. package/src/find-2-prong/cull-bezier-pieces.ts +10 -10
  216. package/src/find-2-prong/find-2-prong.ts +158 -158
  217. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +50 -50
  218. package/src/find-2-prong/find-equidistant-point-on-line.ts +27 -27
  219. package/src/find-2-prong/get-initial-bezier-pieces.ts +2 -2
  220. package/src/find-2-prong/reduce-radius.ts +5 -5
  221. package/src/find-3-prong.ts/calc-better-x.ts +3 -3
  222. package/src/find-3-prong.ts/calc-initial-3-prong-center.ts +3 -3
  223. package/src/find-3-prong.ts/find-3-prong-for-delta3s.ts +17 -17
  224. package/src/find-3-prong.ts/find-3-prong.ts +23 -23
  225. package/src/find-3-prong.ts/find-and-add-3-prong.ts +37 -37
  226. package/src/find-3-prong.ts/find-and-add-3-prongs.ts +30 -30
  227. package/src/find-3-prong.ts/get-closest-points.ts +4 -4
  228. package/src/find-mat/add-2-prongs-by-error.ts +8 -8
  229. package/src/find-mat/find-mats.ts +49 -49
  230. package/src/find-mat/fix-ordering.ts +2 -2
  231. package/src/find-mat/get-total-by.ts +12 -12
  232. package/src/geometry/get-closest-square-distance-to-rect.ts +37 -37
  233. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +14 -14
  234. package/src/get-curve/get-curve-between.ts +1 -1
  235. package/src/index.ts +41 -4
  236. package/src/mat/cmp-cp-on-delta.ts +1 -1
  237. package/src/mat/create-new-cp-tree.ts +12 -12
  238. package/src/mat/get-boundary-piece-beziers.ts +7 -7
  239. package/src/mat/get-edges-as-array.ts +9 -9
  240. package/src/mat/get-largest-3-prong.ts +8 -8
  241. package/src/mat/get-largest-three-prong.ts +5 -5
  242. package/src/mat/get-largest-vertex.ts +6 -6
  243. package/src/mat/get-two-prong-type.ts +9 -9
  244. package/src/mat/trim-mat.ts +1 -1
  245. package/src/memoize-primitive.ts +14 -14
  246. package/src/sat/add-debug-info.ts +4 -4
  247. package/src/sat/cull-by-salience.ts +1 -1
  248. package/src/sat/cull.ts +10 -7
  249. package/src/sat/get-leaves.ts +0 -1
  250. package/src/sat/to-scale-axis.ts +18 -17
  251. package/src/svg/get-extreme.ts +8 -8
  252. package/src/svg/get-loop-bounds.ts +84 -84
  253. package/src/svg/get-min-y-pos.ts +1 -1
  254. package/src/sweep-line/sweep-line.ts +23 -23
  255. package/src/utils/bezier-piece-to-bezier.ts +7 -7
  256. package/__tests__/cp-node/fs/check-jsog-eql-calc.spec.ts +0 -30
  257. package/node/cp-node/fs/cp-nodes-to-boundary-beziers.d.ts +0 -3
  258. package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js +0 -6
  259. package/node/cp-node/fs/cp-nodes-to-boundary-beziers.js.map +0 -1
  260. package/src/closest-boundary-point/get-closest-boundary-point-certified.ts +0 -70
  261. package/src/cp-node/fs/cp-nodes-to-boundary-beziers.ts +0 -10
@@ -5,32 +5,32 @@ import { Loop } from 'flo-boolean';
5
5
  * Represents a bezier curve on the shape boundary / loop.
6
6
  */
7
7
  interface Curve {
8
- /**
9
- * The closed loop of bezier curves representing the shape
10
- * boundary this curve belongs to.
11
- */
12
- loop : Loop;
13
- /**
14
- * The bezier control points.
15
- */
16
- ps : number[][];
17
- /**
18
- * The previous curve (when going in a negative direction around
19
- * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
20
- * for the holes (if any))
21
- */
22
- prev : Curve;
23
- /**
24
- * The next curve (when going in a positive direction around
25
- * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
26
- * for the holes (if any))
27
- */
28
- next : Curve;
29
- /**
30
- * The curve's ordered index in the loop. This imposes a cycling
31
- * ordering of the curves in the loop
32
- */
33
- idx : number;
8
+ /**
9
+ * The closed loop of bezier curves representing the shape
10
+ * boundary this curve belongs to.
11
+ */
12
+ loop: Loop;
13
+ /**
14
+ * The bezier control points.
15
+ */
16
+ ps: number[][];
17
+ /**
18
+ * The previous curve (when going in a negative direction around
19
+ * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
20
+ * for the holes (if any))
21
+ */
22
+ prev: Curve;
23
+ /**
24
+ * The next curve (when going in a positive direction around
25
+ * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
26
+ * for the holes (if any))
27
+ */
28
+ next: Curve;
29
+ /**
30
+ * The curve's ordered index in the loop. This imposes a cycling
31
+ * ordering of the curves in the loop
32
+ */
33
+ idx: number;
34
34
  }
35
35
 
36
36
 
@@ -43,7 +43,7 @@ function cmpCpOnδ(
43
43
  }
44
44
 
45
45
  if (cmpPrev === 0 || cmpNext === 0) {
46
- // console.log('2-PRONG orders are equal.');
46
+ // console.log('2-PRONG orders are equal.');
47
47
  return 0;
48
48
  }
49
49
 
@@ -9,9 +9,9 @@ function boundingHull(
9
9
  delay = 0,
10
10
  scaleFactor = 1) {
11
11
 
12
- const $polygon = drawFs.polygon(g, hull, classes, delay);
12
+ const $polygon = drawFs.polygon(g, hull, classes, delay);
13
13
 
14
- return $polygon;
14
+ return $polygon;
15
15
  }
16
16
 
17
17
 
@@ -2,7 +2,7 @@ import { Circle } from '../../../geometry/circle.js';
2
2
 
3
3
 
4
4
  /** @internal */
5
- function culls(g: SVGGElement, culls: Circle[]) {
5
+ function culls(g: SVGGElement, culls: Circle[]) {
6
6
  const $elems: SVGElement[] = [];
7
7
 
8
8
  for (const circle of culls) {
@@ -11,7 +11,7 @@ function culls(g: SVGGElement, culls: Circle[]) {
11
11
  $elems.push(drawCircle(g, p, 0.4, 'cyan thin5 nofill'));
12
12
  }
13
13
 
14
- return $elems;
14
+ return $elems;
15
15
  }
16
16
 
17
17
 
@@ -7,41 +7,41 @@ import { CpNodeFs } from '../../../cp-node/cp-node-fs.js';
7
7
 
8
8
  /** @internal */
9
9
  function drawCpNode(
10
- g: SVGGElement,
11
- cpNode: CpNode,
12
- classes = 'blue thin2 nofill',
13
- delay = 0,
14
- scaleFactor = 1) {
15
-
16
- const circle = scaleCircle(
17
- cpNode.cp.circle,
18
- 1
19
- );
20
- const { center: c, radius: r } = circle;
21
-
22
- const poss = CpNodeFs.getAllOnCircle(cpNode)
10
+ g: SVGGElement,
11
+ cpNode: CpNode,
12
+ classes = 'blue thin2 nofill',
13
+ delay = 0,
14
+ scaleFactor = 1) {
15
+
16
+ const circle = scaleCircle(
17
+ cpNode.cp.circle,
18
+ 1
19
+ );
20
+ const { center: c, radius: r } = circle;
21
+
22
+ const poss = CpNodeFs.getAllOnCircle(cpNode)
23
23
  .map(cpNode => cpNode.cp.pointOnShape)
24
24
 
25
- const { dot, circle: drawCircle, crossHair } = drawFs;
25
+ const { dot, circle: drawCircle, crossHair } = drawFs;
26
26
 
27
- const $circle = drawCircle(g, circle, classes, delay);
27
+ const $circle = drawCircle(g, circle, classes, delay);
28
28
 
29
- const $cps: SVGElement[] = [];
30
- const $ls: SVGElement[] = [];
31
- for (let i=0; i<poss.length; i++) {
32
- const p = poss[i].p;
33
- $cps.push(...dot(g, p, 0.01*(i+1)*scaleFactor, 'blue', delay));
34
- $ls.push(...drawFs.line(g, [p, c], 'thin5 red', delay));
35
- }
29
+ const $cps: SVGElement[] = [];
30
+ const $ls: SVGElement[] = [];
31
+ for (let i=0; i<poss.length; i++) {
32
+ const p = poss[i].p;
33
+ $cps.push(...dot(g, p, 0.01*(i+1)*scaleFactor, 'blue', delay));
34
+ $ls.push(...drawFs.line(g, [p, c], 'thin5 red', delay));
35
+ }
36
36
 
37
- const $cross = crossHair(g, c, 'orange thin10 nofill', 2*scaleFactor, delay);
38
-
39
- // if (r === 0) {
40
- // const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
41
- // }
42
-
43
- return [...$cps, ...$ls, ...$circle, ...$cross] as SVGElement[];
44
- }
37
+ const $cross = crossHair(g, c, 'orange thin10 nofill', 2*scaleFactor, delay);
38
+
39
+ // if (r === 0) {
40
+ // const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
41
+ // }
42
+
43
+ return [...$cps, ...$ls, ...$circle, ...$cross] as SVGElement[];
44
+ }
45
45
 
46
46
 
47
47
  export { drawCpNode }
@@ -6,7 +6,7 @@ function drawCull(
6
6
  cull: number[],
7
7
  classes = 'thin10 cyan nofill',
8
8
  delay = 0,
9
- scaleFactor = 1) {
9
+ scaleFactor = 1) {
10
10
 
11
11
  const $elems: SVGElement[] = [];
12
12
 
@@ -14,7 +14,7 @@ function drawCull(
14
14
  g, cull, classes, 0.1*scaleFactor, delay)
15
15
  )
16
16
 
17
- return $elems;
17
+ return $elems;
18
18
  }
19
19
 
20
20
 
@@ -4,17 +4,17 @@ import { Curve } from '../../../curve/curve.js';
4
4
 
5
5
  /** @internal */
6
6
  function dullCorner(
7
- g: SVGGElement,
8
- curve: Curve,
7
+ g: SVGGElement,
8
+ curve: Curve,
9
9
  classes = 'orange',
10
10
  delay = 0,
11
11
  scaleFactor = 1) {
12
12
 
13
- const ps = curve.ps;
14
- const p = curve.ps[ps.length-1];
15
- const $pos = drawFs.dot(g, p, 0.1*0.5*scaleFactor, classes, delay);
16
-
17
- return $pos;
13
+ const ps = curve.ps;
14
+ const p = curve.ps[ps.length-1];
15
+ const $pos = drawFs.dot(g, p, 0.1*0.5*scaleFactor, classes, delay);
16
+
17
+ return $pos;
18
18
  }
19
19
 
20
20
 
@@ -22,12 +22,12 @@ import { drawSpeed } from './draw-speed.js';
22
22
 
23
23
 
24
24
  type DrawElemFunction<T extends DebugElemKey> = (
25
- g: SVGGElement,
26
- elem: DebugElem[T],
27
- classes?: string,
28
- delay?: number,
29
- scaleFactor?: number,
30
- options?: any) => SVGElement[];
25
+ g: SVGGElement,
26
+ elem: DebugElem[T],
27
+ classes?: string,
28
+ delay?: number,
29
+ scaleFactor?: number,
30
+ options?: any) => SVGElement[];
31
31
 
32
32
 
33
33
  /** @internal */
@@ -36,32 +36,32 @@ type DrawElemFunctions = { [T in DebugElemKey]: DrawElemFunction<T> }
36
36
 
37
37
  /** @internal */
38
38
  const drawElemFs: DrawElemFunctions = {
39
- oneProng: drawOneProng,
40
- // oneProngAtDullCorner,
41
- // csf,
42
- twoProng: drawTwoProng(false, true),
43
- threeProng: drawThreeProng,
44
- boundingHull,
45
- looseBoundingBox,
46
- tightBoundingBox,
47
- // sharpCorner,
48
- // dullCorner,
49
- vertex,
50
- mat: drawMat,
51
- // sat: drawMat('sat'),
52
- maxVertex,
53
- leaves: drawLeaves,
54
- cull: drawCull,
55
- cpNode: drawCpNode,
56
- branch: drawBranch,
57
- holeCloser: drawTwoProng(false, false),
58
- speed: drawSpeed
39
+ oneProng: drawOneProng,
40
+ // oneProngAtDullCorner,
41
+ // csf,
42
+ twoProng: drawTwoProng(false, true),
43
+ threeProng: drawThreeProng,
44
+ boundingHull,
45
+ looseBoundingBox,
46
+ tightBoundingBox,
47
+ // sharpCorner,
48
+ // dullCorner,
49
+ vertex,
50
+ mat: drawMat,
51
+ // sat: drawMat('sat'),
52
+ maxVertex,
53
+ leaves: drawLeaves,
54
+ cull: drawCull,
55
+ cpNode: drawCpNode,
56
+ branch: drawBranch,
57
+ holeCloser: drawTwoProng(false, false),
58
+ speed: drawSpeed
59
59
  }
60
60
 
61
61
 
62
62
  const drawElemFsDetailed: DrawElemFunctions = {
63
- ...drawElemFs,
64
- twoProng: drawTwoProng(true, true),
63
+ ...drawElemFs,
64
+ twoProng: drawTwoProng(true, true),
65
65
  }
66
66
 
67
67
 
@@ -10,7 +10,7 @@ function drawLeaves(
10
10
  leaves: CpNode[],
11
11
  classes = 'thin10 deeppink nofill',
12
12
  delay = 0,
13
- scaleFactor = 1) {
13
+ scaleFactor = 1) {
14
14
 
15
15
  const $elems: SVGElement[] = [];
16
16
  const { line, dot, circle: drawCircle } = drawFs;
@@ -32,19 +32,19 @@ function drawLeaves(
32
32
  $cps.push(...dot(g, p, 0.01*(i+1)*scaleFactor, 'pinker', delay));
33
33
  $ls.push(...line(g, [p, c], 'thin5 red', delay));
34
34
  }
35
-
36
- const $circle = drawCircle(g, circle, classes, delay);
37
- // const $cp = dot(g, p, 0.005*scaleFactor, 'pinker', delay);
38
-
39
- $elems.push(...[
40
- ...$circle,
41
- ...$cps,
42
- ...$ls,
43
- ...$center
44
- ]);
35
+
36
+ const $circle = drawCircle(g, circle, classes, delay);
37
+ // const $cp = dot(g, p, 0.005*scaleFactor, 'pinker', delay);
38
+
39
+ $elems.push(...[
40
+ ...$circle,
41
+ ...$cps,
42
+ ...$ls,
43
+ ...$center
44
+ ]);
45
45
  }
46
46
 
47
- return $elems;
47
+ return $elems;
48
48
  }
49
49
 
50
50
 
@@ -3,18 +3,18 @@ import { drawFs } from "flo-draw";
3
3
 
4
4
  /** @internal */
5
5
  function looseBoundingBox(
6
- g: SVGGElement,
7
- box: number[][],
6
+ g: SVGGElement,
7
+ box: number[][],
8
8
  classes = 'thin5 brown nofill',
9
9
  delay = 0,
10
10
  scaleFactor = 1) {
11
11
 
12
- const [[x0, y0],[x1, y1]] = box;
13
- box = [[x0, y0],[x1, y0],[x1,y1],[x0,y1]];
12
+ const [[x0, y0],[x1, y1]] = box;
13
+ box = [[x0, y0],[x1, y0],[x1,y1],[x0,y1]];
14
14
 
15
- const $box = drawFs.polygon(g, box, classes, delay);
16
-
17
- return $box;
15
+ const $box = drawFs.polygon(g, box, classes, delay);
16
+
17
+ return $box;
18
18
  }
19
19
 
20
20
 
@@ -3,12 +3,12 @@ import { CpNode } from '../../../cp-node/cp-node.js';
3
3
 
4
4
 
5
5
  /** @internal */
6
- function maxVertex(g: SVGGElement, cpNode: CpNode) {
6
+ function maxVertex(g: SVGGElement, cpNode: CpNode) {
7
7
  const circle = cpNode.cp.circle;
8
8
 
9
9
  const $elems = drawFs.circle(g, circle, 'brown thin10 nofill');
10
10
 
11
- return $elems;
11
+ return $elems;
12
12
  }
13
13
 
14
14
 
@@ -9,8 +9,8 @@ function minY(g: SVGGElement, pos: PointOnShape) {
9
9
 
10
10
  const $elems = drawFs.crossHair(
11
11
  g, p, 'red thin10 nofill'
12
- );
13
-
12
+ );
13
+
14
14
  return $elems;
15
15
  }
16
16
 
@@ -19,7 +19,7 @@ function oneProngAtDullCorner(
19
19
  const $circle = drawFs.dot(g, oCircle.center, 0.25, 'orange');
20
20
  const $pos = drawFs.circle(g, oCircle, 'orange thin10 nofill');
21
21
 
22
- return [...$center, ...$circle, ...$pos];
22
+ return [...$center, ...$circle, ...$pos];
23
23
  }
24
24
 
25
25
 
@@ -16,7 +16,7 @@ function drawOneProng(
16
16
  const $circle = drawFs.dot(g, circle.center, 0.05*scaleFactor, 'deeppink', delay);
17
17
  const $pos = drawFs.circle(g, circle, 'deeppink thin5 nofill', delay);
18
18
 
19
- return [...$center, ...$circle, ...$pos];
19
+ return [...$center, ...$circle, ...$pos];
20
20
  }
21
21
 
22
22
 
@@ -4,16 +4,16 @@ import { Curve } from '../../../curve/curve.js';
4
4
 
5
5
  /** @internal */
6
6
  function sharpCorner(
7
- g: SVGGElement,
8
- curve: Curve,
7
+ g: SVGGElement,
8
+ curve: Curve,
9
9
  classes = 'green',
10
10
  delay = 0,
11
11
  scaleFactor = 1) {
12
12
 
13
- const p = curve.ps[curve.ps.length-1];
14
- const $pos = drawFs.dot(g, p, 0.6*scaleFactor, 'green', delay);
15
-
16
- return $pos;
13
+ const p = curve.ps[curve.ps.length-1];
14
+ const $pos = drawFs.dot(g, p, 0.6*scaleFactor, 'green', delay);
15
+
16
+ return $pos;
17
17
  }
18
18
 
19
19
 
@@ -11,7 +11,7 @@ function drawSpeed(
11
11
  cpNode: CpNode,
12
12
  classes_?: string,
13
13
  delay = 0,
14
- scaleFactor = 1) {
14
+ scaleFactor = 1) {
15
15
 
16
16
  const $elems: SVGElement[] = [];
17
17
 
@@ -28,7 +28,7 @@ function drawSpeed(
28
28
  const n = toLength(normal(ps,t), ss);
29
29
  $elems.push(...drawFs.line(g, [p,translate(p,n)], 'red thin5', delay));
30
30
 
31
- return $elems;
31
+ return $elems;
32
32
  }
33
33
 
34
34
 
@@ -6,39 +6,39 @@ import { CpNodeFs } from '../../../cp-node/cp-node-fs.js';
6
6
 
7
7
  /** @internal */
8
8
  function drawThreeProng(
9
- g: SVGGElement,
10
- // threeProng: ThreeProngForDebugging,
11
- threeProng: CpNode,
12
- classes?: string,
13
- delay = 0,
14
- scaleFactor = 1) {
15
-
16
- const circle = scaleCircle(
17
- threeProng.cp.circle,
18
- 1
19
- );
20
- const { center: c, radius: r } = circle;
21
-
22
- // const poss = threeProng.poss;
23
- const poss = CpNodeFs.getAllOnCircle(threeProng)
9
+ g: SVGGElement,
10
+ // threeProng: ThreeProngForDebugging,
11
+ threeProng: CpNode,
12
+ classes?: string,
13
+ delay = 0,
14
+ scaleFactor = 1) {
15
+
16
+ const circle = scaleCircle(
17
+ threeProng.cp.circle,
18
+ 1
19
+ );
20
+ const { center: c, radius: r } = circle;
21
+
22
+ // const poss = threeProng.poss;
23
+ const poss = CpNodeFs.getAllOnCircle(threeProng)
24
24
  .map(cpNode => cpNode.cp.pointOnShape)
25
25
 
26
- const { dot, circle: drawCircle, crossHair } = drawFs;
26
+ const { dot, circle: drawCircle, crossHair } = drawFs;
27
27
 
28
- const $circle = drawCircle(g, circle, 'blue thin2 nofill', delay);
28
+ const $circle = drawCircle(g, circle, 'blue thin2 nofill', delay);
29
29
 
30
- const $cps: SVGElement[] = [];
31
- const $ls: SVGElement[] = [];
32
- for (let i=0; i<poss.length; i++) {
33
- const p = poss[i].p;
34
- $cps.push(...dot(g, p, 0.01*(i+1)*scaleFactor, 'blue', delay));
35
- $ls.push(...drawFs.line(g, [p, c], 'thin5 red', delay));
36
- }
30
+ const $cps: SVGElement[] = [];
31
+ const $ls: SVGElement[] = [];
32
+ for (let i=0; i<poss.length; i++) {
33
+ const p = poss[i].p;
34
+ $cps.push(...dot(g, p, 0.01*(i+1)*scaleFactor, 'blue', delay));
35
+ $ls.push(...drawFs.line(g, [p, c], 'thin5 red', delay));
36
+ }
37
37
 
38
- const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
39
-
40
- return [...$cps, ...$ls, ...$circle, ...$cross] as SVGElement[];
41
- }
38
+ const $cross = crossHair(g, circle.center, 'red thin2 nofill', 0.02*scaleFactor, delay);
39
+
40
+ return [...$cps, ...$ls, ...$circle, ...$cross] as SVGElement[];
41
+ }
42
42
 
43
43
 
44
44
  export { drawThreeProng }
@@ -3,15 +3,15 @@ import { drawFs } from 'flo-draw';
3
3
 
4
4
  /** @internal */
5
5
  function tightBoundingBox(
6
- g: SVGGElement,
7
- box: number[][],
6
+ g: SVGGElement,
7
+ box: number[][],
8
8
  classes = 'thin5 pinker nofill',
9
9
  delay = 0,
10
10
  scaleFactor = 1) {
11
11
 
12
- const $box = drawFs.polygon(g, box, 'thin5 pinker nofill', delay);
12
+ const $box = drawFs.polygon(g, box, 'thin5 pinker nofill', delay);
13
13
 
14
- return $box;
14
+ return $box;
15
15
  }
16
16
 
17
17
 
@@ -4,63 +4,63 @@ import { CpNode } from '../../../cp-node/cp-node.js';
4
4
 
5
5
  /** @internal */
6
6
  function drawTwoProng(
7
- drawCrosshair: boolean,
8
- drawSpokes: boolean) {
7
+ drawCrosshair: boolean,
8
+ drawSpokes: boolean) {
9
9
 
10
- return (g: SVGGElement,
11
- twoProng: CpNode,
12
- classes?: string,
13
- delay = 0,
14
- scaleFactor = 1) => {
10
+ return (g: SVGGElement,
11
+ twoProng: CpNode,
12
+ classes?: string,
13
+ delay = 0,
14
+ scaleFactor = 1) => {
15
15
 
16
- let color;
17
- let thin;
16
+ let color;
17
+ let thin;
18
18
 
19
- switch (twoProng.isHoleClosing) {
20
- case false: {
21
- color = 'red ';
22
- thin = '2';
23
- break;
24
- }
25
- case true: {
26
- color = 'cyan ';
27
- thin = '10';
28
- break;
29
- }
30
- }
19
+ switch (twoProng.isHoleClosing) {
20
+ case false: {
21
+ color = 'red ';
22
+ thin = '2';
23
+ break;
24
+ }
25
+ case true: {
26
+ color = 'cyan ';
27
+ thin = '10';
28
+ break;
29
+ }
30
+ }
31
31
 
32
- const cp = twoProng.cp;
33
- const { circle, pointOnShape: pos } = cp;
34
- const { center: c, radius: r } = circle;
35
- const { isSource, p } = pos;
36
- const p2 = twoProng.nextOnCircle.cp.pointOnShape.p;
37
- const pS = isSource ? p : p2;
38
- const pA = isSource ? p2 : p;
39
-
40
- const { line, dot, circle: drawCircle, crossHair } = drawFs;
41
-
42
- const $center = dot (g, circle.center, 0.02*scaleFactor, 'yellow', delay);
43
- const $circle = drawCircle(g, circle, color + 'thin' + thin + ' nofill', delay);
44
- const $cp1 = dot (g, pS, 0.005*scaleFactor, color, delay);
45
- const $cp2 = dot (g, pA, 0.01*scaleFactor, color, delay);
32
+ const cp = twoProng.cp;
33
+ const { circle, pointOnShape: pos } = cp;
34
+ const { center: c, radius: r } = circle;
35
+ const { isSource, p } = pos;
36
+ const p2 = twoProng.nextOnCircle.cp.pointOnShape.p;
37
+ const pS = isSource ? p : p2;
38
+ const pA = isSource ? p2 : p;
39
+
40
+ const { line, dot, circle: drawCircle, crossHair } = drawFs;
41
+
42
+ const $center = dot (g, circle.center, 0.02*scaleFactor, 'yellow', delay);
43
+ const $circle = drawCircle(g, circle, color + 'thin' + thin + ' nofill', delay);
44
+ const $cp1 = dot (g, pS, 0.005*scaleFactor, color, delay);
45
+ const $cp2 = dot (g, pA, 0.01*scaleFactor, color, delay);
46
46
 
47
- // const $l1 = drawSpokes ? line(g, [pS, c], 'thin5 red nofill', delay) : [];
48
- // const $l2 = drawSpokes ? line(g, [pA, c], 'thin5 red nofill', delay) : [];
47
+ // const $l1 = drawSpokes ? line(g, [pS, c], 'thin5 red nofill', delay) : [];
48
+ // const $l2 = drawSpokes ? line(g, [pA, c], 'thin5 red nofill', delay) : [];
49
49
 
50
- const $cross = drawCrosshair
51
- ? crossHair(g, circle.center, 'red thin2 nofill', 0.002*scaleFactor, delay)
52
- : [];
53
-
54
- return [
55
- ...$circle,
56
- ...$cp1,
57
- ...$cp2,
58
- // ...$l1,
59
- // ...$l2,
60
- ...$cross,
61
- ...$center
62
- ];
63
- }
50
+ const $cross = drawCrosshair
51
+ ? crossHair(g, circle.center, 'red thin2 nofill', 0.002*scaleFactor, delay)
52
+ : [];
53
+
54
+ return [
55
+ ...$circle,
56
+ ...$cp1,
57
+ ...$cp2,
58
+ // ...$l1,
59
+ // ...$l2,
60
+ ...$cross,
61
+ ...$center
62
+ ];
63
+ }
64
64
  }
65
65
 
66
66