@itwin/core-geometry 4.2.0-dev.9 → 4.3.0-dev.1

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 (478) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/lib/cjs/Geometry.d.ts +4 -4
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +2 -2
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +4 -3
  7. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  8. package/lib/cjs/clipping/AlternatingConvexClipTree.js +1 -1
  9. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  10. package/lib/cjs/clipping/BooleanClipNode.d.ts +4 -3
  11. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  12. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  13. package/lib/cjs/clipping/ClipPlane.d.ts +2 -1
  14. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  15. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  16. package/lib/cjs/clipping/ClipUtils.d.ts +17 -11
  17. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  18. package/lib/cjs/clipping/ClipUtils.js +14 -8
  19. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  20. package/lib/cjs/clipping/ClipVector.d.ts +6 -5
  21. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  22. package/lib/cjs/clipping/ClipVector.js +1 -1
  23. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +3 -2
  25. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +2 -1
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  30. package/lib/cjs/core-geometry.d.ts +1 -3
  31. package/lib/cjs/core-geometry.d.ts.map +1 -1
  32. package/lib/cjs/core-geometry.js +1 -3
  33. package/lib/cjs/core-geometry.js.map +1 -1
  34. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  35. package/lib/cjs/curve/Arc3d.js +4 -4
  36. package/lib/cjs/curve/Arc3d.js.map +1 -1
  37. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +93 -91
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +171 -152
  40. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.d.ts +19 -19
  42. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  43. package/lib/cjs/curve/CurveCollection.js +20 -22
  44. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  45. package/lib/cjs/curve/CurveCurve.d.ts +47 -30
  46. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  47. package/lib/cjs/curve/CurveCurve.js +81 -46
  48. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  49. package/lib/cjs/curve/CurveFactory.d.ts +1 -1
  50. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  51. package/lib/cjs/curve/CurveLocationDetail.d.ts +17 -5
  52. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurveLocationDetail.js +14 -2
  54. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  55. package/lib/cjs/curve/CurveOps.d.ts +1 -1
  56. package/lib/cjs/curve/CurveOps.js.map +1 -1
  57. package/lib/cjs/curve/CurvePrimitive.d.ts +1 -2
  58. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  59. package/lib/cjs/curve/CurvePrimitive.js +2 -2
  60. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  61. package/lib/cjs/curve/CurveProcessor.d.ts +1 -1
  62. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  63. package/lib/cjs/curve/{CurveChain.d.ts → CurveTypes.d.ts} +6 -6
  64. package/lib/cjs/curve/CurveTypes.d.ts.map +1 -0
  65. package/lib/cjs/curve/{CurveChain.js → CurveTypes.js} +1 -1
  66. package/lib/cjs/curve/CurveTypes.js.map +1 -0
  67. package/lib/cjs/curve/CurveWireMomentsXYZ.d.ts +1 -1
  68. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  69. package/lib/cjs/curve/ParityRegion.d.ts +3 -3
  70. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  71. package/lib/cjs/curve/ParityRegion.js +2 -2
  72. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  73. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  74. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  75. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +2 -2
  76. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  77. package/lib/cjs/curve/Query/CurveSplitContext.d.ts +1 -1
  78. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  79. package/lib/cjs/curve/Query/CylindricalRange.d.ts +1 -1
  80. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  81. package/lib/cjs/curve/Query/InOutTests.d.ts +1 -1
  82. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  83. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +1 -1
  84. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  85. package/lib/cjs/curve/RegionOps.d.ts +54 -5
  86. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  87. package/lib/cjs/curve/RegionOps.js +154 -3
  88. package/lib/cjs/curve/RegionOps.js.map +1 -1
  89. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  90. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  91. package/lib/cjs/curve/StrokeOptions.d.ts +20 -11
  92. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  93. package/lib/cjs/curve/StrokeOptions.js +22 -11
  94. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  95. package/lib/cjs/curve/UnionRegion.d.ts +3 -3
  96. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  97. package/lib/cjs/curve/UnionRegion.js +2 -2
  98. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +1 -1
  100. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  101. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +2 -2
  102. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +233 -0
  104. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  105. package/lib/cjs/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +299 -202
  106. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  107. package/lib/{esm/curve → cjs/curve/internalContexts}/CurveCurveIntersectXY.d.ts +45 -51
  108. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  109. package/lib/cjs/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +104 -115
  110. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  111. package/lib/cjs/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +18 -18
  112. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  113. package/lib/cjs/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +134 -108
  114. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  115. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts +2 -2
  116. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +9 -5
  118. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  120. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  121. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts +1 -0
  122. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  123. package/lib/cjs/geometry3d/BarycentricTriangle.js +1 -0
  124. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  125. package/lib/cjs/geometry3d/FrameBuilder.d.ts +28 -11
  126. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  127. package/lib/cjs/geometry3d/FrameBuilder.js +57 -45
  128. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  129. package/lib/cjs/geometry3d/GeometryHandler.d.ts +15 -26
  130. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  131. package/lib/cjs/geometry3d/GeometryHandler.js +23 -32
  132. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  133. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +0 -8
  134. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  135. package/lib/cjs/geometry3d/GrowableXYZArray.js +0 -16
  136. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  137. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +4 -4
  138. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  139. package/lib/cjs/geometry3d/IndexedXYZCollection.js +12 -0
  140. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  141. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  142. package/lib/cjs/geometry3d/Matrix3d.js +3 -6
  143. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  144. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  145. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  146. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -2
  147. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/Point3dVector3d.js +0 -1
  149. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  150. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  151. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/PolygonOps.js +2 -3
  153. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  154. package/lib/cjs/geometry3d/Range.d.ts +1 -1
  155. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/Range.js +1 -1
  157. package/lib/cjs/geometry3d/Range.js.map +1 -1
  158. package/lib/cjs/geometry3d/Ray3d.d.ts +3 -1
  159. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/Ray3d.js +4 -3
  161. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  162. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +2 -1
  163. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/ReusableObjectCache.js +1 -1
  165. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  166. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -1
  167. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  168. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  169. package/lib/cjs/geometry3d/Transform.js +4 -6
  170. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  171. package/lib/cjs/geometry3d/YawPitchRollAngles.js +1 -1
  172. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  173. package/lib/cjs/geometry4d/Map4d.d.ts +14 -8
  174. package/lib/cjs/geometry4d/Map4d.d.ts.map +1 -1
  175. package/lib/cjs/geometry4d/Map4d.js +38 -16
  176. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  177. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  178. package/lib/cjs/geometry4d/Matrix4d.js +4 -2
  179. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  180. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  181. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  182. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  183. package/lib/cjs/numerics/Polynomials.js +2 -2
  184. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  185. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +18 -6
  186. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  187. package/lib/cjs/polyface/PolyfaceBuilder.js +55 -25
  188. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  189. package/lib/cjs/polyface/PolyfaceClip.d.ts +16 -7
  190. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  191. package/lib/cjs/polyface/PolyfaceClip.js +38 -7
  192. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  193. package/lib/cjs/polyface/PolyfaceData.d.ts +5 -39
  194. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  195. package/lib/cjs/polyface/PolyfaceData.js +7 -41
  196. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  197. package/lib/cjs/polyface/PolyfaceQuery.d.ts +10 -8
  198. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  199. package/lib/cjs/polyface/PolyfaceQuery.js +64 -18
  200. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  201. package/lib/cjs/serialization/GeometrySamples.d.ts +6 -0
  202. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  203. package/lib/cjs/serialization/GeometrySamples.js +68 -2
  204. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  205. package/lib/cjs/solid/LinearSweep.d.ts +1 -1
  206. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  207. package/lib/cjs/solid/RotationalSweep.d.ts +1 -1
  208. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  209. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  210. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  211. package/lib/cjs/solid/SweepContour.d.ts +35 -26
  212. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  213. package/lib/cjs/solid/SweepContour.js +84 -100
  214. package/lib/cjs/solid/SweepContour.js.map +1 -1
  215. package/lib/cjs/topology/Graph.d.ts +29 -11
  216. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  217. package/lib/cjs/topology/Graph.js +45 -26
  218. package/lib/cjs/topology/Graph.js.map +1 -1
  219. package/lib/cjs/topology/HalfEdgeMarkSet.d.ts +2 -2
  220. package/lib/cjs/topology/HalfEdgeMarkSet.d.ts.map +1 -1
  221. package/lib/cjs/topology/HalfEdgeMarkSet.js +4 -4
  222. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  223. package/lib/cjs/topology/Merging.d.ts +3 -0
  224. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  225. package/lib/cjs/topology/Merging.js +19 -5
  226. package/lib/cjs/topology/Merging.js.map +1 -1
  227. package/lib/cjs/topology/Triangulation.d.ts +15 -7
  228. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  229. package/lib/cjs/topology/Triangulation.js +89 -47
  230. package/lib/cjs/topology/Triangulation.js.map +1 -1
  231. package/lib/esm/Geometry.d.ts +4 -4
  232. package/lib/esm/Geometry.d.ts.map +1 -1
  233. package/lib/esm/Geometry.js +2 -2
  234. package/lib/esm/Geometry.js.map +1 -1
  235. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +4 -3
  236. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  237. package/lib/esm/clipping/AlternatingConvexClipTree.js +1 -1
  238. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  239. package/lib/esm/clipping/BooleanClipNode.d.ts +4 -3
  240. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  241. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  242. package/lib/esm/clipping/ClipPlane.d.ts +2 -1
  243. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  244. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  245. package/lib/esm/clipping/ClipUtils.d.ts +17 -11
  246. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  247. package/lib/esm/clipping/ClipUtils.js +14 -8
  248. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  249. package/lib/esm/clipping/ClipVector.d.ts +6 -5
  250. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  251. package/lib/esm/clipping/ClipVector.js +1 -1
  252. package/lib/esm/clipping/ClipVector.js.map +1 -1
  253. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +3 -2
  254. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  255. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  256. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +2 -1
  257. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  258. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  259. package/lib/esm/core-geometry.d.ts +1 -3
  260. package/lib/esm/core-geometry.d.ts.map +1 -1
  261. package/lib/esm/core-geometry.js +1 -3
  262. package/lib/esm/core-geometry.js.map +1 -1
  263. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  264. package/lib/esm/curve/Arc3d.js +4 -4
  265. package/lib/esm/curve/Arc3d.js.map +1 -1
  266. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +93 -91
  267. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  268. package/lib/esm/curve/CurveChainWithDistanceIndex.js +171 -152
  269. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  270. package/lib/esm/curve/CurveCollection.d.ts +19 -19
  271. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  272. package/lib/esm/curve/CurveCollection.js +19 -20
  273. package/lib/esm/curve/CurveCollection.js.map +1 -1
  274. package/lib/esm/curve/CurveCurve.d.ts +47 -30
  275. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  276. package/lib/esm/curve/CurveCurve.js +81 -46
  277. package/lib/esm/curve/CurveCurve.js.map +1 -1
  278. package/lib/esm/curve/CurveFactory.d.ts +1 -1
  279. package/lib/esm/curve/CurveFactory.js.map +1 -1
  280. package/lib/esm/curve/CurveLocationDetail.d.ts +17 -5
  281. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  282. package/lib/esm/curve/CurveLocationDetail.js +12 -1
  283. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  284. package/lib/esm/curve/CurveOps.d.ts +1 -1
  285. package/lib/esm/curve/CurveOps.js.map +1 -1
  286. package/lib/esm/curve/CurvePrimitive.d.ts +1 -2
  287. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  288. package/lib/esm/curve/CurvePrimitive.js +2 -2
  289. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  290. package/lib/esm/curve/CurveProcessor.d.ts +1 -1
  291. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  292. package/lib/esm/curve/{CurveChain.d.ts → CurveTypes.d.ts} +6 -6
  293. package/lib/esm/curve/CurveTypes.d.ts.map +1 -0
  294. package/lib/esm/curve/{CurveChain.js → CurveTypes.js} +1 -1
  295. package/lib/esm/curve/CurveTypes.js.map +1 -0
  296. package/lib/esm/curve/CurveWireMomentsXYZ.d.ts +1 -1
  297. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  298. package/lib/esm/curve/ParityRegion.d.ts +3 -3
  299. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  300. package/lib/esm/curve/ParityRegion.js +2 -2
  301. package/lib/esm/curve/ParityRegion.js.map +1 -1
  302. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts +3 -2
  303. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  304. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -1
  305. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  306. package/lib/esm/curve/Query/CurveSplitContext.d.ts +1 -1
  307. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  308. package/lib/esm/curve/Query/CylindricalRange.d.ts +1 -1
  309. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  310. package/lib/esm/curve/Query/InOutTests.d.ts +1 -1
  311. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  312. package/lib/esm/curve/Query/StrokeCountChain.d.ts +1 -1
  313. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  314. package/lib/esm/curve/RegionOps.d.ts +54 -5
  315. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  316. package/lib/esm/curve/RegionOps.js +153 -3
  317. package/lib/esm/curve/RegionOps.js.map +1 -1
  318. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +1 -1
  319. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  320. package/lib/esm/curve/StrokeOptions.d.ts +20 -11
  321. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  322. package/lib/esm/curve/StrokeOptions.js +22 -11
  323. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  324. package/lib/esm/curve/UnionRegion.d.ts +3 -3
  325. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  326. package/lib/esm/curve/UnionRegion.js +2 -2
  327. package/lib/esm/curve/UnionRegion.js.map +1 -1
  328. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +1 -1
  329. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  330. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +2 -2
  331. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  332. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +233 -0
  333. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -0
  334. package/lib/esm/curve/{CurveCurveCloseApproachXY.js → internalContexts/CurveCurveCloseApproachXY.js} +299 -202
  335. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -0
  336. package/lib/{cjs/curve → esm/curve/internalContexts}/CurveCurveIntersectXY.d.ts +45 -51
  337. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -0
  338. package/lib/esm/curve/{CurveCurveIntersectXY.js → internalContexts/CurveCurveIntersectXY.js} +103 -113
  339. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -0
  340. package/lib/esm/curve/{CurveCurveIntersectXYZ.d.ts → internalContexts/CurveCurveIntersectXYZ.d.ts} +18 -18
  341. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -0
  342. package/lib/esm/curve/{CurveCurveIntersectXYZ.js → internalContexts/CurveCurveIntersectXYZ.js} +134 -108
  343. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -0
  344. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts +2 -2
  345. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.d.ts.map +1 -1
  346. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +9 -5
  347. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  348. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +1 -1
  349. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  350. package/lib/esm/geometry3d/BarycentricTriangle.d.ts +1 -0
  351. package/lib/esm/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  352. package/lib/esm/geometry3d/BarycentricTriangle.js +1 -0
  353. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  354. package/lib/esm/geometry3d/FrameBuilder.d.ts +28 -11
  355. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  356. package/lib/esm/geometry3d/FrameBuilder.js +57 -45
  357. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  358. package/lib/esm/geometry3d/GeometryHandler.d.ts +15 -26
  359. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  360. package/lib/esm/geometry3d/GeometryHandler.js +23 -32
  361. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  362. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +0 -8
  363. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  364. package/lib/esm/geometry3d/GrowableXYZArray.js +0 -16
  365. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  366. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +4 -4
  367. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  368. package/lib/esm/geometry3d/IndexedXYZCollection.js +12 -0
  369. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  370. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  371. package/lib/esm/geometry3d/Matrix3d.js +3 -6
  372. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  373. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  374. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  375. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -2
  376. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  377. package/lib/esm/geometry3d/Point3dVector3d.js +0 -1
  378. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  379. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  380. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  381. package/lib/esm/geometry3d/PolygonOps.js +2 -3
  382. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  383. package/lib/esm/geometry3d/Range.d.ts +1 -1
  384. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  385. package/lib/esm/geometry3d/Range.js +1 -1
  386. package/lib/esm/geometry3d/Range.js.map +1 -1
  387. package/lib/esm/geometry3d/Ray3d.d.ts +3 -1
  388. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  389. package/lib/esm/geometry3d/Ray3d.js +4 -3
  390. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  391. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +2 -1
  392. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  393. package/lib/esm/geometry3d/ReusableObjectCache.js +1 -1
  394. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  395. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -1
  396. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  397. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  398. package/lib/esm/geometry3d/Transform.js +4 -6
  399. package/lib/esm/geometry3d/Transform.js.map +1 -1
  400. package/lib/esm/geometry3d/YawPitchRollAngles.js +1 -1
  401. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  402. package/lib/esm/geometry4d/Map4d.d.ts +14 -8
  403. package/lib/esm/geometry4d/Map4d.d.ts.map +1 -1
  404. package/lib/esm/geometry4d/Map4d.js +38 -16
  405. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  406. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  407. package/lib/esm/geometry4d/Matrix4d.js +4 -2
  408. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  409. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  410. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  411. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  412. package/lib/esm/numerics/Polynomials.js +2 -2
  413. package/lib/esm/numerics/Polynomials.js.map +1 -1
  414. package/lib/esm/polyface/PolyfaceBuilder.d.ts +18 -6
  415. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  416. package/lib/esm/polyface/PolyfaceBuilder.js +55 -25
  417. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  418. package/lib/esm/polyface/PolyfaceClip.d.ts +16 -7
  419. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  420. package/lib/esm/polyface/PolyfaceClip.js +38 -7
  421. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  422. package/lib/esm/polyface/PolyfaceData.d.ts +5 -39
  423. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  424. package/lib/esm/polyface/PolyfaceData.js +7 -41
  425. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  426. package/lib/esm/polyface/PolyfaceQuery.d.ts +10 -8
  427. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  428. package/lib/esm/polyface/PolyfaceQuery.js +64 -18
  429. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  430. package/lib/esm/serialization/GeometrySamples.d.ts +6 -0
  431. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  432. package/lib/esm/serialization/GeometrySamples.js +68 -2
  433. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  434. package/lib/esm/solid/LinearSweep.d.ts +1 -1
  435. package/lib/esm/solid/LinearSweep.js.map +1 -1
  436. package/lib/esm/solid/RotationalSweep.d.ts +1 -1
  437. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  438. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  439. package/lib/esm/solid/RuledSweep.js.map +1 -1
  440. package/lib/esm/solid/SweepContour.d.ts +35 -26
  441. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  442. package/lib/esm/solid/SweepContour.js +84 -100
  443. package/lib/esm/solid/SweepContour.js.map +1 -1
  444. package/lib/esm/topology/Graph.d.ts +29 -11
  445. package/lib/esm/topology/Graph.d.ts.map +1 -1
  446. package/lib/esm/topology/Graph.js +45 -26
  447. package/lib/esm/topology/Graph.js.map +1 -1
  448. package/lib/esm/topology/HalfEdgeMarkSet.d.ts +2 -2
  449. package/lib/esm/topology/HalfEdgeMarkSet.d.ts.map +1 -1
  450. package/lib/esm/topology/HalfEdgeMarkSet.js +2 -2
  451. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  452. package/lib/esm/topology/Merging.d.ts +3 -0
  453. package/lib/esm/topology/Merging.d.ts.map +1 -1
  454. package/lib/esm/topology/Merging.js +19 -5
  455. package/lib/esm/topology/Merging.js.map +1 -1
  456. package/lib/esm/topology/Triangulation.d.ts +15 -7
  457. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  458. package/lib/esm/topology/Triangulation.js +89 -47
  459. package/lib/esm/topology/Triangulation.js.map +1 -1
  460. package/package.json +4 -4
  461. package/lib/cjs/curve/CurveChain.d.ts.map +0 -1
  462. package/lib/cjs/curve/CurveChain.js.map +0 -1
  463. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +0 -175
  464. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  465. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +0 -1
  466. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  467. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +0 -1
  468. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  469. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +0 -1
  470. package/lib/esm/curve/CurveChain.d.ts.map +0 -1
  471. package/lib/esm/curve/CurveChain.js.map +0 -1
  472. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +0 -175
  473. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +0 -1
  474. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +0 -1
  475. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +0 -1
  476. package/lib/esm/curve/CurveCurveIntersectXY.js.map +0 -1
  477. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +0 -1
  478. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurveCurveCloseApproachXY.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveCloseApproachXY.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGzG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,mBAAmB;AAEnB;;;;;;;;;;;;;GAaG;AACH,MAAa,yBAA0B,SAAQ,8BAA8B;IAInE,YAAY,CAAC,SAA+B;QAClD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,SAAS,YAAY,KAAK,EAAE;YAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACnB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;SACF;IACH,CAAC;IAoBD;;;OAGG;IACH,YAAmB,SAA+B;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,0BAA0B,CAAC;QAC/D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,6EAA6E;IAC7E,IAAW,mBAAmB,CAAC,KAAyB;QACtD,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC;YAC1E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACrF,CAAC;IACD,gFAAgF;IAChF,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IACD,mEAAmE;IACnE,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,oBAAoB,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,iHAAiH;IAC1G,aAAa,CAAC,SAAmB;QACtC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IACD,8DAA8D;IACtD,cAAc,CAAC,QAAgB,EAAE,cAAsB,OAAO;QACpE,IAAI,QAAQ,GAAG,CAAC,WAAW;YACzB,OAAO,KAAK,CAAC;QACf,IAAI,QAAQ,GAAG,GAAG,GAAG,WAAW;YAC9B,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;OAGG;IACI,iBAAiB,CAAC,eAAwB,KAAK;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,YAAY;YACd,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,8DAA8D;IACtD,oBAAoB,CAAC,EAAkB,EAAE,QAAgB,EAAE,MAA2B;QAC5F,OAAO,EAAE,KAAK,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC;IACD;;;OAGG;IACK,8BAA8B,CACpC,GAAmB,EAAE,EAAU,EAAE,MAAe,EAAE,GAAmB,EAAE,EAAU,EAAE,MAAe,EAAE,QAAiB;QAErH,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACjC,MAAM,OAAO,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,IAAI,GAAG,uBAAuB,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,QAAQ;gBACV,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1B;IACH,CAAC;IACD;;;;;;;;;;;;OAYG;IACK,6BAA6B,CACnC,cAAsB,EACtB,GAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,cAAsB,EACtB,GAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,QAAiB,EACjB,eAAqD;QAErD,IAAI,eAAe,EAAE,eAAe,CAAC;QACrC,IAAI,gBAAgB,EAAE,gBAAgB,CAAC;QACvC,MAAM,UAAU,GAAG,eAAe,KAAK,SAAS;YAC9C,eAAe,CAAC,OAAO,CAAC,YAAY;YACpC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC;QACvC,IAAI,UAAU,EAAE;YACd,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACjG,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACjG,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,SAAU,EAAE,UAAU,CAAC,CAAC;YACpG,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,SAAU,EAAE,UAAU,CAAC,CAAC;SACrG;aAAM;YACL,eAAe,GAAG,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YAClG,eAAe,GAAG,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;SACnG;QACD,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,IAAI,QAAQ,EAAE;gBACZ,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC7D,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC3D,OAAO;aACV;iBAAM;gBACL,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC7D,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC3D,OAAO;aACV;SACF;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,wBAAwB,CAC1D,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAC3D,CAAC;QACF,MAAM,OAAO,GAAG,mBAAmB,CAAC,wBAAwB,CAC1D,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAC3D,CAAC;QACF,IAAI,UAAU,EAAE;YACd,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACzF;aAAM;YACL,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB;gBAC/B,OAAO;YACT,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACpD,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACrD;QACD,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACnE;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACnE;IACH,CAAC;IACD;;;;;;;;;;;;OAYG;IACK,6BAA6B,CACnC,IAA6B,EAC7B,GAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,GAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,QAAiB;QAEjB,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5F,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5F,uCAAuC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1D,IAAI,QAAQ,EAAE;gBACZ,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC7D,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC3D,OAAO;aACV;iBAAM;gBACL,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC7D,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC;oBAC3D,OAAO;aACV;SACF;QACD,oCAAoC;QACpC,mBAAmB,CAAC,4BAA4B,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrF,mBAAmB,CAAC,4BAA4B,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrF,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,QAAQ;YACV,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD;;;;;;OAMG;IACI,WAAW,CAChB,GAAmB,EAAE,GAAmB,EAAE,KAA4C,EAAE,QAAiB;QAEzG,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,IAAI,CAAC,6BAA6B,CAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAC1E,CAAC;aACH;SACF;IACH,CAAC;IACD;;;;;OAKG;IACI,iBAAiB,CACtB,OAAwC,EAAE,OAAwC,EAAE,QAAiB;QAErG,IAAI,OAAO,IAAI,OAAO,EAAE;YACtB,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aAC7E;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aAC7E;SACF;IACH,CAAC;IACO,MAAM,CAAC,4BAA4B,CACzC,SAAiB,EACjB,MAAe,EACf,OAAgB,EAChB,OAAgB,EAChB,SAAiB,EACjB,kBAA0B,EAC1B,eAAwC;QAExC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,CAAC;YACf,SAAS,GAAG,CAAC,CAAC;aACX,IAAI,SAAS,GAAG,CAAC;YACpB,SAAS,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC9E,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAC7E,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YACvF,OAAO,GAAG,IAAI,CAAC;SAChB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;;;;;OAUG;IACK,MAAM,CAAC,6BAA6B,CAC1C,EAAW,EACX,EAAW,EACX,EAAW,EACX,EAAW,EACX,kBAA0B;QAE1B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,mDAAmD;YAC/F,MAAM,SAAS,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxC,OAAO,uBAAuB,CAAC,aAAa,CAC1C,mBAAmB,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EACjG,mBAAmB,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAClG,CAAC;SACH;QACD,4FAA4F;QAC5F,MAAM,eAAe,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,0CAA0C;QAC9F,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,IAAI,GAAG,IAAI,IAAI,kBAAkB,GAAG,EAAE,EAAE,EAAE,2BAA2B;YACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,CAAC;gBAClG,QAAQ,GAAG,IAAI,CAAC;SACnB;QACD,IAAI,IAAI,GAAG,IAAI,IAAI,kBAAkB,GAAG,EAAE,EAAE,EAAE,2BAA2B;YACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,CAAC;gBAClG,QAAQ,GAAG,IAAI,CAAC;SACnB;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,IAAI,GAAG,IAAI,IAAI,kBAAkB,GAAG,EAAE,EAAE,EAAE,2BAA2B;YACvE,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,CAAC;gBAClG,QAAQ,GAAG,KAAK,CAAC;SACpB;QACD,IAAI,IAAI,GAAG,IAAI,IAAI,kBAAkB,GAAG,EAAE,EAAE,EAAE,2BAA2B;YACvE,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACpE,IAAI,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,CAAC;gBAClG,QAAQ,GAAG,KAAK,CAAC;SACpB;QACD,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,kBAAkB;YAChD,OAAO,SAAS,CAAC;QACnB,IAAI,QAAQ;YACV,eAAe,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,eAAe,CAAC;IACzB,CAAC;IACD;;;;;;;;;;;;;OAaG;IACK,mCAAmC,CACzC,GAAmB,EACnB,GAAW,EACX,GAAW,EACX,iBAA0B,EAC1B,GAAmB,EACnB,GAAW,EACX,GAAW,EACX,iBAA0B,EAC1B,QAAiB;QAEjB,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpF,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpF,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpF,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpF,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACzE,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC1E;QACD,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;SAC3E;IACH,CAAC;IACD,qGAAqG;IAC7F,uBAAuB,CAC7B,GAAmB,EAAE,EAAU,EAAE,MAAe,EAAE,GAAmB,EAAE,GAAW,EAAE,GAAW,EAAE,QAAiB;QAElH,sDAAsD;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE;YACV,MAAM,EAAE,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAClE,IAAI,EAAE,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,oCAAoC;gBAChE,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aACpG;SACF;IACH,CAAC;IACD;;;;;OAKG;IACK,uBAAuB,CAC7B,GAAmB,EACnB,OAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,UAAkB,EAClB,GAAmB,EACnB,OAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,UAAkB,EAClB,QAAiB;QAEjB,kDAAkD;QAClD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,6BAA6B,CACtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAC7D,CAAC;QACF,uFAAuF;QACvF,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SAClH;IACH,CAAC;IACD,kDAAkD;IAC1C,sBAAsB,CAC5B,GAAmB,EACnB,OAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,UAAkB,EAClB,GAAmB,EACnB,OAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,UAAkB,EAClB,QAAiB;QAEjB,IAAI,CAAC,uBAAuB,CAC1B,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAC7C,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAC7C,QAAQ,CACT,CAAC;IACJ,CAAC;IACD;;;;;;;;;;;;;;OAcG;IACK,kBAAkB,CACxB,GAAmB,EACnB,OAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,UAAkB,EAClB,GAAU,EACV,QAAiB;QAEjB,0CAA0C;QAC1C,WAAW;QACX,+DAA+D;QAC/D,kCAAkC;QAClC,wGAAwG;QACxG,gFAAgF;QAChF,mBAAmB;QACnB,mBAAmB;QACnB,wBAAwB;QACxB,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,OAAO,CAAC;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;QAC7G,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAC5G,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAC9G,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,yCAAyC,CAAE,qBAAqB;QAC7F,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAC5C,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CACtC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACpF,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,YAAY,GAAG,WAAW,CAAC,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC5G,2FAA2F;YAC3F,IAAI,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACvG,IAAI,CAAC,6BAA6B,CAChC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAC5E,CAAC;gBACF,iBAAiB,GAAG,IAAI,CAAC;aAC1B;SACF;QACD,IAAI,iBAAiB;YACnB,OAAO;QACT,uEAAuE;QACvE,IAAI,CAAC,mCAAmC,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxG,mCAAmC;QACnC,2GAA2G;QAC3G,6EAA6E;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjD,KAAK,MAAM,QAAQ,IAAI,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9G,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,WAAW,CAAC,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC5G,2FAA2F;YAC3F,IAAI,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACvG,IAAI,CAAC,6BAA6B,CAChC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAC5E,CAAC;aACH;SACF;IACH,CAAC;IACD,6GAA6G;IACrG,+BAA+B,CACrC,GAAU,EAAE,OAAe,EAAE,GAAU,EAAE,OAAe,EAAE,QAAiB;QAE3E,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7G,IAAI,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,qDAAqD;YAClF,OAAO;QACT,qCAAqC;QACrC,4BAA4B;QAC5B,IAAI,CAAC,mCAAmC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvF,2FAA2F;QAC3F,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;YACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACjE,QAAQ,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/B,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;gBACpC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;oBACpC,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;oBACpC,IAAI,eAAe,GAAG,CAAC,EAAE;wBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACxE,IAAI,OAAO,EAAE;4BACX,MAAM,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;4BACxE,IAAI,OAAO;gCACT,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;yBACtD;qBACF;iBACF;aACF;SACF;IACH,CAAC;IACD,mGAAmG;IAC3F,+BAA+B,CACrC,GAAU,EAAE,YAAsB,EAAE,KAAa;QAEjD,+FAA+F;QAC/F,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,QAAQ,GAAG,GAAG;YAChB,OAAO,mBAAmB,CAAC,4BAA4B,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,4EAA4E;IACpE,cAAc,CAAC,GAAU,EAAE,GAAU,EAAE,QAAiB;QAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACnC,OAAO;QACT,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAiB,CAAC;YACvC,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,IAAI,OAAO,IAAI,OAAO;oBACpB,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;oBAE3E,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC9E,OAAO;aACR;SACF;IACH,CAAC;IACD,kEAAkE;IAC1D,yBAAyB,CAAC,GAAU,EAAE,GAAmB,EAAE,QAAiB;QAClF,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,2FAA2F;IACnF,oCAAoC,CAC1C,OAA2B,EAAE,OAA2B,EAAE,QAAiB;QAE3E,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,yEAAyE;IAClE,8BAA8B,CAAC,GAAiB,EAAE,MAAsB,EAAE,QAAiB;QAChG,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,sEAAsE;IAC/D,2BAA2B,CAAC,IAAmB,EAAE,MAAsB,EAAE,QAAiB;QAC/F,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,6DAA6D;IACtD,wBAAwB,CAAC,IAAmB,EAAE,GAAiB,EAAE,QAAiB;QACvF,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YACjC,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,8BAA8B;YAC1D,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAE,qCAAqC;YACrG,GAAG,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7D,GAAG,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC1G;IACH,CAAC;IACD,yDAAyD;IAClD,oBAAoB,CAAC,IAAW,EAAE,GAAiB,EAAE,QAAiB;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACnC,OAAO;QACT,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC;YACR,IAAI,GAAG,CAAC;YACR,GAAG,GAAG,GAAG,CAAC;YACV,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE;gBACrE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzB,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;gBACf,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;aAC3E;SACF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8CAA8C;IACtC,uBAAuB,CAAC,KAAe,EAAE,YAAiC;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAE,OAAO;QACvC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC;YAClE,OAAO;QACT,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAsB,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAE,UAAU;IACtC,CAAC;IACD;;;;;OAKG;IACK,+BAA+B,CAAC,MAAoC,EAAE,MAAoC;QAChH,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3C,IAAI,MAAM,EAAE;gBACV,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvE,IAAI,WAAW;oBACb,eAAe,CAAC,OAAO,GAAG,WAAW,CAAC;aACzC;YACD,IAAI,MAAM,EAAE;gBACV,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvE,IAAI,WAAW;oBACb,eAAe,CAAC,OAAO,GAAG,WAAW,CAAC;aACzC;SACF;IACH,CAAC;IACD,oFAAoF;IAC5E,mCAAmC,CAAC,KAAe,EAAE,YAAiC;QAC5F,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,YAAY,2BAA2B,CAAC;YAC/E,OAAO;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAE,OAAO;QACvC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAE,UAAU;QACtC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,2BAA2B,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,+BAA+B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IACD,0DAA0D;IAC1C,mBAAmB,CAAC,QAAuB;QACzD,IAAI,IAAI,CAAC,UAAU,YAAY,aAAa,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC,sBAAsB,CACzB,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAC1D,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAC1D,KAAK,CACN,CAAC;SACH;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,YAAY,EAAE;YAClD,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACjE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK,EAAE;YAC3C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC7G;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,cAAc,EAAE;YACpD,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,eAAe,EAAE;YACrD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7E;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,2BAA2B,EAAE;YACjE,IAAI,CAAC,mCAAmC,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACzF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;;;;;;;;;OAeG;IACK,wBAAwB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAc;QACnE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;aACX,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC;QAChB,wBAAwB;QACxB,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,IAAI,IAAI,CAAC;aACZ,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,IAAI,IAAI,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,0DAA0D;IAClD,2BAA2B,CAAC,GAAiB,EAAE,GAAiB,EAAE,QAAiB;QACzF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACnC,OAAO;QACT,IAAI,KAAa,CAAC;QAClB,IAAI,KAAa,CAAC;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,OAAO,GAAG,yBAAyB,CAAC,aAAa,CAAC;QACxD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;YACxB,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAClB,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE;gBACrE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;gBACf,GAAG,GAAG,GAAG,CAAC;gBACV,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzB,kEAAkE;gBAClE,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAqB,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;oBACrC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACxB,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACrE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE;wBACpF,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;wBACzB,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBACrE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;wBACf,sFAAsF;wBACtF,oFAAoF;wBACpF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BACvB,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;qBAC3G;iBACF;aACF;SACF;IACH,CAAC;IACD,6DAA6D;IAC7C,kBAAkB,CAAC,GAAiB;QAClD,IAAI,IAAI,CAAC,UAAU,YAAY,YAAY,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SACnD;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,aAAa,EAAE;YACnD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC3D;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK,EAAE;YAC3C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SACvD;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,cAAc,EAAE;YACpD,IAAI,CAAC,8BAA8B,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAClE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,eAAe,EAAE;YACrD,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACvE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,2BAA2B,EAAE;YACjE,IAAI,CAAC,mCAAmC,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACnF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,sDAAsD;IACtC,WAAW,CAAC,IAAW;QACrC,IAAI,IAAI,CAAC,UAAU,YAAY,aAAa,EAAE;YAC5C,IAAI,CAAC,kBAAkB,CACrB,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAC5F,CAAC;SACH;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,YAAY,EAAE;YAClD,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACzD;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK,EAAE;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACnD;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,cAAc,EAAE;YACpD,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC9D;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,eAAe,EAAE;YACrD,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,2BAA2B,EAAE;YACjE,IAAI,CAAC,mCAAmC,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7E;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,gEAAgE;IAChD,oBAAoB,CAAC,KAAqB;QACxD,IAAI,IAAI,CAAC,UAAU,YAAY,aAAa,EAAE;YAC5C,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAChE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,YAAY,EAAE;YAClD,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SACnE;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK,EAAE;YAC3C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9D;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,kBAAkB,EAAE;YACxD,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SAC1E;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,eAAe,EAAE;YACrD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC3E;aAAM,IAAI,IAAI,CAAC,UAAU,YAAY,2BAA2B,EAAE;YACjE,IAAI,CAAC,mCAAmC,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACvF;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8EAA8E;IAC9D,iCAAiC,CAAC,KAAkC;QAClF,KAAK,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,YAAY,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpI,CAAC;IACD,8EAA8E;IAC9D,qBAAqB,CAAC,MAAuB;QAC3D;;;;;;;;;;;;UAYE;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;;AA91Bc,uCAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACjC,uCAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACjC,uCAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACjC,uCAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AACjC,qCAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;SAjCnC,yBAAyB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { GrowableFloat64Array } from \"../../geometry3d/GrowableFloat64Array\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../../geometry3d/Range\";\r\nimport { AnalyticRoots, SmallSystem } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { CurveChainWithDistanceIndex } from \"../CurveChainWithDistanceIndex\";\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { AnyCurve } from \"../CurveTypes\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\n\r\n// cspell:word XYRR\r\n\r\n/**\r\n * Handler class for XY close approach between _geometryB and another geometry.\r\n * * Approach means the XY distance (z is ignored) between _geometryB and another geometry.\r\n * * Closest approach is a measure of the proximity of one curve to another. It's the length of the shortest line\r\n * segment perpendicular to both curves; if the curves intersect, the closest approach is zero. In the context of\r\n * this class, z-coordinates are ignored, so the closest approach is as seen in the top view. If you have coplanar\r\n * input curves and want to find closest approach in their plane, rotate them first into a plane parallel to the\r\n * xy-plane, then afterward, rotate the results back as required.\r\n * * Close approach can also be from a curve endpoint perpendicular to another curve or from a curve endpoint to\r\n * another curve endpoint.\r\n * * Instances are initialized and called from CurveCurve.\r\n * * geometryB is saved for later reference.\r\n * @internal\r\n */\r\nexport class CurveCurveCloseApproachXY extends RecurseToCurvesGeometryHandler {\r\n private _geometryB: AnyCurve | undefined;\r\n private _circularArcB: Arc3d | undefined;\r\n private _circularRadiusB: number | undefined;\r\n private setGeometryB(geometryB: AnyCurve | undefined) {\r\n this._geometryB = geometryB;\r\n this._circularArcB = undefined;\r\n this._circularRadiusB = undefined;\r\n if (geometryB instanceof Arc3d) {\r\n const r = geometryB.circularRadiusXY();\r\n if (r !== undefined) {\r\n this._circularRadiusB = r;\r\n this._circularArcB = geometryB;\r\n }\r\n }\r\n }\r\n /**\r\n * Maximum XY distance (z is ignored). Approach larger than this is not interesting.\r\n * This is caller defined and can be undefined.\r\n */\r\n private _maxDistanceToAccept: number | undefined;\r\n /** Squared max distance. This is private, and is forced to at least small metric distance squared. */\r\n private _maxDistanceSquared: number;\r\n /**\r\n * Start and end points of line segments that meet closest approach criteria, i.e., they are perpendicular to\r\n * both curves and their length is smaller than _maxDistanceToAccept.\r\n */\r\n private _results: CurveLocationDetailPair[];\r\n\r\n private static _workPointAA0 = Point3d.create();\r\n private static _workPointAA1 = Point3d.create();\r\n private static _workPointBB0 = Point3d.create();\r\n private static _workPointBB1 = Point3d.create();\r\n private static _workPointB = Point3d.create();\r\n\r\n /**\r\n * Constructor.\r\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\r\n */\r\n public constructor(geometryB: AnyCurve | undefined) {\r\n super();\r\n this.setGeometryB(geometryB);\r\n this._maxDistanceSquared = Geometry.smallMetricDistanceSquared;\r\n this._results = [];\r\n }\r\n /** Set the (possibly undefined) max XY distance (z is ignored) to accept. */\r\n public set maxDistanceToAccept(value: number | undefined) {\r\n this._maxDistanceToAccept = value;\r\n if (this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0)\r\n this._maxDistanceSquared = this._maxDistanceToAccept * this._maxDistanceToAccept;\r\n }\r\n /** Access the (possibly undefined) max XY distance (z is ignored) to accept. */\r\n public get maxDistanceToAccept(): number | undefined {\r\n return this._maxDistanceToAccept;\r\n }\r\n /** Ask if the maxDistanceToAccept value is defined and positive */\r\n public get isMaxDistanceSet(): boolean {\r\n return this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0;\r\n }\r\n /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */\r\n public resetGeometry(geometryB: AnyCurve) {\r\n this.setGeometryB(geometryB);\r\n }\r\n /** returns true if `fraction` is in [0,1] within tolerance */\r\n private acceptFraction(fraction: number, fractionTol: number = 1.0e-12) {\r\n if (fraction < -fractionTol)\r\n return false;\r\n if (fraction > 1.0 + fractionTol)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.\r\n * @param reinitialize if true, a new results structure is created for use by later calls.\r\n */\r\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\r\n const result = this._results;\r\n if (reinitialize)\r\n this._results = [];\r\n return result;\r\n }\r\n /** Returns `true` if `detail` has same curve and fraction. */\r\n private sameCurveAndFraction(cp: CurvePrimitive, fraction: number, detail: CurveLocationDetail): boolean {\r\n return cp === detail.curve && Geometry.isAlmostEqualNumber(fraction, detail.fraction);\r\n }\r\n /**\r\n * If distance between pointA and pointB is less than maxDistance, record CurveLocationDetailPair which is\r\n * the approach from pointA to pointB.\r\n */\r\n private testAndRecordPointPairApproach(\r\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB: number, pointB: Point3d, reversed: boolean,\r\n ): void {\r\n const d2 = pointA.distanceSquaredXY(pointB);\r\n if (d2 < this._maxDistanceSquared) {\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, fA, pointA);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, fB, pointB);\r\n const pair = CurveLocationDetailPair.createCapture(detailA, detailB);\r\n if (reversed)\r\n pair.swapDetails();\r\n this._results.push(pair);\r\n }\r\n }\r\n /**\r\n * Create a close approach pair if XY distance is within maxDistance.\r\n * @param localFractionA a fraction on first curve\r\n * @param cpA the first curve\r\n * @param fractionA0 start of the first curve\r\n * @param fractionA1 end of the first curve\r\n * @param localFractionB a fraction on second curve\r\n * @param cpB the second curve\r\n * @param fractionB0 start of the second curve\r\n * @param fractionB1 end of the second curve\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n * @param intervalDetails optional CurveLocationDetailPair\r\n */\r\n private recordPointWithLocalFractions(\r\n localFractionA: number,\r\n cpA: CurvePrimitive,\r\n fractionA0: number,\r\n fractionA1: number,\r\n localFractionB: number,\r\n cpB: CurvePrimitive,\r\n fractionB0: number,\r\n fractionB1: number,\r\n reversed: boolean,\r\n intervalDetails?: undefined | CurveLocationDetailPair,\r\n ): void {\r\n let globalFractionA, globalFractionB;\r\n let globalFractionA1, globalFractionB1;\r\n const isInterval = intervalDetails !== undefined &&\r\n intervalDetails.detailA.hasFraction1 &&\r\n intervalDetails.detailB.hasFraction1;\r\n if (isInterval) {\r\n globalFractionA = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction, fractionA1);\r\n globalFractionB = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction, fractionB1);\r\n globalFractionA1 = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction1!, fractionA1);\r\n globalFractionB1 = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction1!, fractionB1);\r\n } else {\r\n globalFractionA = globalFractionA1 = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\r\n globalFractionB = globalFractionB1 = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\r\n }\r\n // ignore duplicate of most recent approach\r\n const numPrevious = this._results.length;\r\n if (numPrevious > 0 && !isInterval) {\r\n const oldDetailA = this._results[numPrevious - 1].detailA;\r\n const oldDetailB = this._results[numPrevious - 1].detailB;\r\n if (reversed) {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) &&\r\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\r\n return;\r\n } else {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) &&\r\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\r\n return;\r\n }\r\n }\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(\r\n cpA, globalFractionA, cpA.fractionToPoint(globalFractionA),\r\n );\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(\r\n cpB, globalFractionB, cpB.fractionToPoint(globalFractionB),\r\n );\r\n if (isInterval) {\r\n detailA.captureFraction1Point1(globalFractionA1, cpA.fractionToPoint(globalFractionA1));\r\n detailB.captureFraction1Point1(globalFractionB1, cpB.fractionToPoint(globalFractionB1));\r\n } else {\r\n const d2 = detailA.point.distanceSquaredXY(detailB.point);\r\n if (d2 > this._maxDistanceSquared)\r\n return;\r\n detailA.setIntervalRole(CurveIntervalRole.isolated);\r\n detailB.setIntervalRole(CurveIntervalRole.isolated);\r\n }\r\n if (reversed) {\r\n this._results.push(new CurveLocationDetailPair(detailB, detailA));\r\n } else {\r\n this._results.push(new CurveLocationDetailPair(detailA, detailB));\r\n }\r\n }\r\n /**\r\n * Capture a close approach pair that has point and local fraction but not curve.\r\n * * Record the pair, each detail modified with global fraction and input curve.\r\n * * Pair is neither modified nor recorded if it would be a duplicate of the last recorded pair.\r\n * @param pair details computed with local fractions\r\n * @param cpA curveA\r\n * @param fractionA0 global start fraction on curveA\r\n * @param fractionA1 global end fraction on curveA\r\n * @param cpB curveB\r\n * @param fractionB0 global start fraction on curveB\r\n * @param fractionB1 global end fraction on curveB\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n */\r\n private capturePairWithLocalFractions(\r\n pair: CurveLocationDetailPair,\r\n cpA: CurvePrimitive,\r\n fractionA0: number,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n fractionB0: number,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ) {\r\n const globalFractionA = Geometry.interpolate(fractionA0, pair.detailA.fraction, fractionA1);\r\n const globalFractionB = Geometry.interpolate(fractionB0, pair.detailB.fraction, fractionB1);\r\n // ignore duplicate of most recent pair\r\n const numPrevious = this._results.length;\r\n if (numPrevious > 0) {\r\n const oldDetailA = this._results[numPrevious - 1].detailA;\r\n const oldDetailB = this._results[numPrevious - 1].detailB;\r\n if (reversed) {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) &&\r\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\r\n return;\r\n } else {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) &&\r\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\r\n return;\r\n }\r\n }\r\n // recompute the points just in case\r\n CurveLocationDetail.createCurveEvaluatedFraction(cpA, globalFractionA, pair.detailA);\r\n CurveLocationDetail.createCurveEvaluatedFraction(cpB, globalFractionB, pair.detailB);\r\n pair.detailA.setIntervalRole(CurveIntervalRole.isolated);\r\n pair.detailB.setIntervalRole(CurveIntervalRole.isolated);\r\n if (reversed)\r\n pair.swapDetails();\r\n this._results.push(pair);\r\n }\r\n /**\r\n * Emit recordPoint for multiple pairs (on full curve) if within maxDistance.\r\n * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible)\r\n * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible)\r\n * @param pairs array of pairs\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n */\r\n public recordPairs(\r\n cpA: CurvePrimitive, cpB: CurvePrimitive, pairs: CurveLocationDetailPair[] | undefined, reversed: boolean,\r\n ): void {\r\n if (pairs !== undefined) {\r\n for (const p of pairs) {\r\n this.recordPointWithLocalFractions(\r\n p.detailA.fraction, cpA, 0, 1, p.detailB.fraction, cpB, 0, 1, reversed, p,\r\n );\r\n }\r\n }\r\n }\r\n /**\r\n * Record fully assembled (but possibly reversed) detail pair.\r\n * @param detailA first detail\r\n * @param detailB second detail\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n */\r\n public captureDetailPair(\r\n detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined, reversed: boolean,\r\n ): void {\r\n if (detailA && detailB) {\r\n if (reversed) {\r\n this._results.push(CurveLocationDetailPair.createCapture(detailB, detailA));\r\n } else {\r\n this._results.push(CurveLocationDetailPair.createCapture(detailA, detailB));\r\n }\r\n }\r\n }\r\n private static updatePointToSegmentDistance(\r\n fractionA: number,\r\n pointA: Point3d,\r\n pointB0: Point3d,\r\n pointB1: Point3d,\r\n fractionB: number,\r\n maxDistanceSquared: number,\r\n closestApproach: CurveLocationDetailPair, // modified on return\r\n ): boolean {\r\n let updated = false;\r\n if (fractionB < 0)\r\n fractionB = 0;\r\n else if (fractionB > 1)\r\n fractionB = 1;\r\n this._workPointB = pointB0.interpolate(fractionB, pointB1, this._workPointB);\r\n const distanceSquared = this._workPointB.distanceSquaredXY(pointA);\r\n if (distanceSquared <= Math.min(maxDistanceSquared, closestApproach.detailA.a)) {\r\n closestApproach.detailA.setFP(fractionA, pointA, undefined, distanceSquared);\r\n closestApproach.detailB.setFP(fractionB, this._workPointB, undefined, distanceSquared);\r\n updated = true;\r\n }\r\n return updated;\r\n }\r\n /**\r\n * Return fractions of close approach within maxDistance between two line segments (a0,a1) and (b0,b1).\r\n * * Math details can be found at core/geometry/internaldocs/Curve.md\r\n * @param a0 start point of line a\r\n * @param a1 end point of line a\r\n * @param b0 start point of line b\r\n * @param b1 end point of line b\r\n * @param maxDistanceSquared maximum distance squared (assumed to be positive)\r\n * @returns the fractional (not xy) coordinates in result.x and result.y. result.x is fraction on line a.\r\n * result.y is fraction on line b.\r\n */\r\n private static segmentSegmentBoundedApproach(\r\n a0: Point3d,\r\n a1: Point3d,\r\n b0: Point3d,\r\n b1: Point3d,\r\n maxDistanceSquared: number,\r\n ): CurveLocationDetailPair | undefined {\r\n const ux = a1.x - a0.x;\r\n const uy = a1.y - a0.y;\r\n const vx = b1.x - b0.x;\r\n const vy = b1.y - b0.y;\r\n const e00x = b0.x - a0.x;\r\n const e00y = b0.y - a0.y;\r\n const e01x = b1.x - a0.x;\r\n const e01y = b1.y - a0.y;\r\n const e10x = b0.x - a1.x;\r\n const e10y = b0.y - a1.y;\r\n const hab0 = Geometry.crossProductXYXY(ux, uy, e00x, e00y);\r\n const hab1 = Geometry.crossProductXYXY(ux, uy, e01x, e01y);\r\n const hba0 = -Geometry.crossProductXYXY(vx, vy, e00x, e00y);\r\n const hba1 = -Geometry.crossProductXYXY(vx, vy, e10x, e10y);\r\n if (hab0 * hab1 < 0.0 && hba0 * hba1 < 0.0) { // true intersection, strictly within both segments\r\n const fractionA = -hba0 / (hba1 - hba0);\r\n const fractionB = -hab0 / (hab1 - hab0);\r\n return CurveLocationDetailPair.createCapture(\r\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionA, a0.interpolate(fractionA, a1)),\r\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionB, b0.interpolate(fractionB, b1)),\r\n );\r\n }\r\n // there's no intersection, so find the closest approach within maxDistance from an endpoint\r\n const closestApproach = new CurveLocationDetailPair();\r\n closestApproach.detailA.a = 2 * maxDistanceSquared; // init to an approach that's too far away\r\n let reversed = false;\r\n const uu = Geometry.hypotenuseSquaredXY(ux, uy);\r\n if (hab0 * hab0 <= maxDistanceSquared * uu) { // test distance of b0 to u\r\n const fractionA = Geometry.dotProductXYXY(ux, uy, e00x, e00y) / uu;\r\n if (this.updatePointToSegmentDistance(0, b0, a0, a1, fractionA, maxDistanceSquared, closestApproach))\r\n reversed = true;\r\n }\r\n if (hab1 * hab1 <= maxDistanceSquared * uu) { // test distance of b1 to u\r\n const fractionA = Geometry.dotProductXYXY(ux, uy, e01x, e01y) / uu;\r\n if (this.updatePointToSegmentDistance(1, b1, a0, a1, fractionA, maxDistanceSquared, closestApproach))\r\n reversed = true;\r\n }\r\n const vv = Geometry.hypotenuseSquaredXY(vx, vy);\r\n if (hba0 * hba0 <= maxDistanceSquared * vv) { // test distance of a0 to v\r\n const fractionB = -Geometry.dotProductXYXY(vx, vy, e00x, e00y) / vv;\r\n if (this.updatePointToSegmentDistance(0, a0, b0, b1, fractionB, maxDistanceSquared, closestApproach))\r\n reversed = false;\r\n }\r\n if (hba1 * hba1 <= maxDistanceSquared * vv) { // test distance of a1 to v\r\n const fractionB = -Geometry.dotProductXYXY(vx, vy, e10x, e10y) / vv;\r\n if (this.updatePointToSegmentDistance(1, a1, b0, b1, fractionB, maxDistanceSquared, closestApproach))\r\n reversed = false;\r\n }\r\n if (closestApproach.detailA.a > maxDistanceSquared)\r\n return undefined;\r\n if (reversed)\r\n closestApproach.swapDetails();\r\n return closestApproach;\r\n }\r\n /**\r\n * Check different combination of fractions on curveA and curveB. If distance between points at 2 fractions\r\n * is less than maxDistance, record CurveLocationDetailPair which is the approach between the 2 points.\r\n * Optionally, record close approaches of one curve's points if they fall between the other curve's points.\r\n * @param cpA curveA\r\n * @param fA0 fraction0 on curveA\r\n * @param fA1 fraction1 on curveA\r\n * @param testProjectionOnA whether to record projections of the given curveB points onto curveA\r\n * @param cpB curveB\r\n * @param fB0 fraction0 on curveB\r\n * @param fB1 fraction0 on curveB\r\n * @param testProjectionOnB whether to record projections of the given curveA points onto curveB\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n */\r\n private testAndRecordFractionalPairApproach(\r\n cpA: CurvePrimitive,\r\n fA0: number,\r\n fA1: number,\r\n testProjectionOnA: boolean,\r\n cpB: CurvePrimitive,\r\n fB0: number,\r\n fB1: number,\r\n testProjectionOnB: boolean,\r\n reversed: boolean,\r\n ): void {\r\n const pointA0 = cpA.fractionToPoint(fA0);\r\n const pointA1 = cpA.fractionToPoint(fA1);\r\n const pointB0 = cpB.fractionToPoint(fB0);\r\n const pointB1 = cpB.fractionToPoint(fB1);\r\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB0, pointB0, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB0, pointB0, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB1, pointB1, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB1, pointB1, reversed);\r\n if (testProjectionOnB) {\r\n this.testAndRecordProjection(cpA, fA0, pointA0, cpB, fB0, fB1, reversed);\r\n this.testAndRecordProjection(cpA, fA1, pointA1, cpB, fB0, fB1, reversed);\r\n }\r\n if (testProjectionOnA) {\r\n this.testAndRecordProjection(cpB, fB0, pointB0, cpA, fA0, fA1, !reversed);\r\n this.testAndRecordProjection(cpB, fB1, pointB1, cpA, fA0, fA1, !reversed);\r\n }\r\n }\r\n /** Find the closest approach between pointA and cpB. Add the approach if it's within fB0 and fB1. */\r\n private testAndRecordProjection(\r\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB0: number, fB1: number, reversed: boolean,\r\n ) {\r\n // NO NO NO -- this is 3D closest point --- need 2d !!\r\n const detail = cpB.closestPoint(pointA, false);\r\n if (detail) {\r\n const fB = Geometry.restrictToInterval(detail.fraction, fB0, fB1);\r\n if (fB === detail.fraction) { // if fraction is within fB0 and fB1\r\n this.testAndRecordPointPairApproach(cpA, fA, pointA, cpB, detail.fraction, detail.point, reversed);\r\n }\r\n }\r\n }\r\n /**\r\n * Compute intersection of two line segments.\r\n * Filter by extension rules.\r\n * Record with fraction mapping.\r\n * * The fraction mappings allow portions of a linestring to be passed here.\r\n */\r\n private computeSegmentSegment3D(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ): void {\r\n // compute a pair with fractions local to segments\r\n const approach = CurveCurveCloseApproachXY.segmentSegmentBoundedApproach(\r\n pointA0, pointA1, pointB0, pointB1, this._maxDistanceSquared,\r\n );\r\n // adjust the pair to refer to input curves and global fractions, then record it if new\r\n if (approach) {\r\n approach.detailA.setCurve(cpA);\r\n approach.detailB.setCurve(cpB);\r\n this.capturePairWithLocalFractions(approach, cpA, fractionA0, fractionA1, cpB, fractionB0, fractionB1, reversed);\r\n }\r\n }\r\n /** Low level dispatch of segment with segment. */\r\n private dispatchSegmentSegment(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ): void {\r\n this.computeSegmentSegment3D(\r\n cpA, pointA0, fractionA0, pointA1, fractionA1,\r\n cpB, pointB0, fractionB0, pointB1, fractionB1,\r\n reversed,\r\n );\r\n }\r\n /**\r\n * Low level dispatch of segment with arc.\r\n * Find close approaches within maxDistance between a line segments (pointA0, pointA1) and an arc.\r\n * To consider:\r\n * 1) intersection between arc and segment.\r\n * 2) arc endpoints to segment endpoints or arc endpoints projection to the segment.\r\n * 3) line parallel to arc tangent.\r\n * @param cpA curve A (line segment or line string)\r\n * @param pointA0 start point of the segment\r\n * @param fractionA0 fraction of the start of the segment\r\n * @param pointA1 end point of the segment\r\n * @param fractionA1 fraction of the end of the segment\r\n * @param arc the arc\r\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\r\n */\r\n private dispatchSegmentArc(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n arc: Arc3d,\r\n reversed: boolean,\r\n ): void {\r\n // 1) intersection between arc and segment\r\n // Suppose:\r\n // Arc: X = C + cU + sV where c = cos(theta) and s = sin(theta)\r\n // Line: contains points A0 and A1\r\n // The arc intersects the line at point X if det(A0, A1, X) = 0 with homogeneous xyw points and vectors.\r\n // With equational X: det(A0, A1, C) + c*det(A0, A1, U) + s*det(A0, A1, V) = 0.\r\n // solve for theta.\r\n // evaluate points.\r\n // project back to line.\r\n let intersectionFound = false;\r\n const data = arc.toTransformedVectors();\r\n const pointA0Local = pointA0;\r\n const pointA1Local = pointA1;\r\n const alpha = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1); // det(A0, A1, C)\r\n const beta = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0); // det(A0, A1, U)\r\n const gamma = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0); // det(A0, A1, V)\r\n const cosines = new GrowableFloat64Array(2);\r\n const sines = new GrowableFloat64Array(2);\r\n const radians = new GrowableFloat64Array(2);\r\n const numRoots = AnalyticRoots.appendImplicitLineUnitCircleIntersections( // solve the equation\r\n alpha, beta, gamma, cosines, sines, radians,\r\n );\r\n for (let i = 0; i < numRoots; i++) {\r\n const arcPoint = data.center.plus2Scaled(\r\n data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i),\r\n );\r\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));\r\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\r\n // only add if the point is within the start and end fractions of both line segment and arc\r\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\r\n this.recordPointWithLocalFractions(\r\n lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed,\r\n );\r\n intersectionFound = true;\r\n }\r\n }\r\n if (intersectionFound)\r\n return;\r\n // 2) endpoints to endpoints or endpoints projection to the other curve\r\n this.testAndRecordFractionalPairApproach(cpA, fractionA0, fractionA1, true, arc, 0, 1, false, reversed);\r\n // 3) line parallel to arc tangent.\r\n // If line does not intersect the arc, then the closest (and/or the furthest) point on arc to the line is a\r\n // point where the tangent line on arc at that point is parallel to the line.\r\n const dotUT = data.vector0.crossProductStartEndXY(pointA0, pointA1);\r\n const dotVT = data.vector90.crossProductStartEndXY(pointA0, pointA1);\r\n const parallelRadians = Math.atan2(dotVT, dotUT);\r\n for (const radians1 of [parallelRadians, parallelRadians + Math.PI]) {\r\n const arcPoint = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));\r\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians1);\r\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\r\n // only add if the point is within the start and end fractions of both line segment and arc\r\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\r\n this.recordPointWithLocalFractions(\r\n lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed,\r\n );\r\n }\r\n }\r\n }\r\n /** Low level dispatch of circular arc with circular arc. radiusA must be larger than or equal to radiusB. */\r\n private dispatchCircularCircularOrdered(\r\n cpA: Arc3d, radiusA: number, cpB: Arc3d, radiusB: number, reversed: boolean,\r\n ): void {\r\n const c = cpA.center.distance(cpB.center);\r\n const e = this._maxDistanceToAccept !== undefined ? this._maxDistanceToAccept : Geometry.smallMetricDistance;\r\n if (c > radiusA + radiusB + e) // distance between circles is more than max distance\r\n return;\r\n // TODO: 1) intersection between arcs\r\n // 2) endpoints to endpoints\r\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, false, cpB, 0, 1, false, reversed);\r\n // 3) line from one arc to another (perpendicular to arc tangents along center-center line)\r\n if (!Geometry.isSmallMetricDistance(c)) {\r\n const vectorAB = Vector3d.createStartEnd(cpA.center, cpB.center);\r\n vectorAB.scaleInPlace(1.0 / c);\r\n for (const rA of [-radiusA, radiusA]) {\r\n for (const rB of [-radiusB, radiusB]) {\r\n const tangentDistance = c - rA + rB;\r\n if (tangentDistance < e) {\r\n const detailA = this.resolveDirectionToArcXYFraction(cpA, vectorAB, rA);\r\n if (detailA) {\r\n const detailB = this.resolveDirectionToArcXYFraction(cpB, vectorAB, rB);\r\n if (detailB)\r\n this.captureDetailPair(detailA, detailB, reversed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Find the fractional point (if any) on the circular `arc` in the direction of `radialVector`. */\r\n private resolveDirectionToArcXYFraction(\r\n arc: Arc3d, radialVector: Vector3d, scale: number,\r\n ): CurveLocationDetail | undefined {\r\n // The scale ultimately only affects the direction --- easiest way to use it is two multiplies.\r\n const c = scale * arc.matrixRef.columnDotXYZ(0, radialVector.x, radialVector.y, 0);\r\n const s = scale * arc.matrixRef.columnDotXYZ(1, radialVector.x, radialVector.y, 0);\r\n const radians = Math.atan2(s, c);\r\n const fraction = arc.sweep.radiansToPositivePeriodicFraction(radians, 0);\r\n if (fraction < 1.0)\r\n return CurveLocationDetail.createCurveEvaluatedFraction(arc, fraction);\r\n return undefined;\r\n }\r\n /** Low level dispatch of arc with arc. Only circular arcs are supported. */\r\n private dispatchArcArc(cpA: Arc3d, cpB: Arc3d, reversed: boolean): void {\r\n const rangeA = cpA.range();\r\n const rangeB = cpB.range();\r\n rangeA.expandInPlace(this._maxDistanceToAccept!);\r\n if (!rangeB.intersectsRangeXY(rangeA))\r\n return;\r\n if (this._circularArcB) {\r\n const radiusB = this._circularRadiusB!;\r\n const radiusA = cpA.circularRadiusXY();\r\n if (radiusA !== undefined) {\r\n if (radiusA >= radiusB)\r\n this.dispatchCircularCircularOrdered(cpA, radiusA, cpB, radiusB, reversed);\r\n else\r\n this.dispatchCircularCircularOrdered(cpB, radiusB, cpA, radiusA, !reversed);\r\n return;\r\n }\r\n }\r\n }\r\n /** Low level dispatch of arc with (beziers of) a bspline curve */\r\n private dispatchArcBsplineCurve3d(cpA: Arc3d, cpB: BSplineCurve3d, reversed: boolean): void {\r\n const ls = LineString3d.create();\r\n cpB.emitStrokes(ls);\r\n this.computeArcLineString(cpA, ls, reversed);\r\n }\r\n /** Low level dispatch of (beziers of) a bspline curve with (beziers of) a bspline curve */\r\n private dispatchBSplineCurve3dBSplineCurve3d(\r\n bcurveA: BSplineCurve3dBase, bcurveB: BSplineCurve3dBase, reversed: boolean,\r\n ): void {\r\n const lsA = LineString3d.create();\r\n bcurveA.emitStrokes(lsA);\r\n const lsB = LineString3d.create();\r\n bcurveB.emitStrokes(lsB);\r\n this.computeLineStringLineString(lsA, lsB, reversed);\r\n }\r\n /** Low level dispatch of linestring with (beziers of) a bspline curve */\r\n public dispatchLineStringBSplineCurve(lsA: LineString3d, curveB: BSplineCurve3d, reversed: boolean): any {\r\n const lsB = LineString3d.create();\r\n curveB.emitStrokes(lsB);\r\n this.computeLineStringLineString(lsA, lsB, reversed);\r\n }\r\n /** Low level dispatch of segment with (beziers of) a bspline curve */\r\n public dispatchSegmentBsplineCurve(segA: LineSegment3d, curveB: BSplineCurve3d, reversed: boolean): any {\r\n const lsB = LineString3d.create();\r\n curveB.emitStrokes(lsB);\r\n this.computeSegmentLineString(segA, lsB, reversed);\r\n }\r\n /** Detail computation for segment approaching linestring. */\r\n public computeSegmentLineString(segA: LineSegment3d, lsB: LineString3d, reversed: boolean): void {\r\n const numB = lsB.numPoints();\r\n const deltaFracB = Geometry.safeDivideFraction(1, numB - 1, 0);\r\n const pointA0 = segA.point0Ref;\r\n const pointA1 = segA.point1Ref;\r\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n for (let i = 0; i < numB - 1; ++i) {\r\n const fB0 = i * deltaFracB; // global linestring fractions\r\n const fB1 = (i + 1 === numB - 1) ? 1.0 : (i + 1) * deltaFracB; // make sure we nail the end fraction\r\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i, pointB0);\r\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i + 1, pointB1);\r\n this.dispatchSegmentSegment(segA, pointA0, 0.0, pointA1, 1.0, lsB, pointB0, fB0, pointB1, fB1, reversed);\r\n }\r\n }\r\n /** Detail computation for arc approaching linestring. */\r\n public computeArcLineString(arcA: Arc3d, lsB: LineString3d, reversed: boolean): any {\r\n const rangeA = arcA.range();\r\n const rangeB = lsB.range();\r\n rangeA.expandInPlace(this._maxDistanceToAccept!);\r\n if (!rangeB.intersectsRangeXY(rangeA))\r\n return;\r\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n const numB = lsB.numPoints();\r\n if (numB > 1) {\r\n const dfB = 1.0 / (numB - 1);\r\n let fB0;\r\n let fB1;\r\n fB0 = 0.0;\r\n lsB.pointAt(0, pointB0);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\r\n lsB.pointAt(ib, pointB1);\r\n fB1 = ib * dfB;\r\n this.dispatchSegmentArc(lsB, pointB0, fB0, pointB1, fB1, arcA, !reversed);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Low level dispatch of curve collection. */\r\n private dispatchCurveCollection(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\r\n const geomB = this._geometryB; // save\r\n if (!geomB || !geomB.children || !(geomB instanceof CurveCollection))\r\n return;\r\n for (const child of geomB.children as AnyCurve[]) {\r\n this.resetGeometry(child);\r\n geomAHandler(geomA);\r\n }\r\n this._geometryB = geomB; // restore\r\n }\r\n /**\r\n * Given a parent chain, convert the corresponding child details so that they refer to the chain's global parameterization.\r\n * * It is assumed that `this._results[i].detailA.curve` is a child of chainA, and similarly for detailB/chainB.\r\n * @param chainA convert each detailA to the global parameterization of chainA\r\n * @param chainB convert each detailB to the global parameterization of chainB\r\n */\r\n private convertChildDetailToChainDetail(chainA?: CurveChainWithDistanceIndex, chainB?: CurveChainWithDistanceIndex): void {\r\n for (const childDetailPair of this._results) {\r\n if (chainA) {\r\n const chainDetail = chainA.computeChainDetail(childDetailPair.detailA);\r\n if (chainDetail)\r\n childDetailPair.detailA = chainDetail;\r\n }\r\n if (chainB) {\r\n const chainDetail = chainB.computeChainDetail(childDetailPair.detailB);\r\n if (chainDetail)\r\n childDetailPair.detailB = chainDetail;\r\n }\r\n }\r\n }\r\n /** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */\r\n private dispatchCurveChainWithDistanceIndex(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\r\n if (!this._geometryB || !(this._geometryB instanceof CurveChainWithDistanceIndex))\r\n return;\r\n const geomB = this._geometryB; // save\r\n for (const child of geomB.path.children) {\r\n this.resetGeometry(child);\r\n geomAHandler(geomA);\r\n }\r\n this.resetGeometry(geomB); // restore\r\n assert(!(geomA instanceof CurveChainWithDistanceIndex));\r\n this.convertChildDetailToChainDetail(undefined, geomB);\r\n }\r\n /** Double dispatch handler for strongly typed segment. */\r\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n const segmentB = this._geometryB;\r\n this.dispatchSegmentSegment(\r\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\r\n segmentB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0,\r\n false,\r\n );\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeSegmentLineString(segmentA, this._geometryB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchSegmentArc(segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._geometryB, false);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Set bits for comparison to range xy\r\n * * bit 0x01 => x smaller than range.low.x\r\n * * bit 0x02 => x larger than range.high.x\r\n * * bit 0x04 => y smaller than range.low.y\r\n * * bit 0x08 => y larger than range.high.y\r\n * * If we divide XY plane into 9 areas using the range, the function returns 0 for points\r\n * inside the range. Below is other binary numbers returned by the function for all 9 areas:\r\n * 1001 | 1000 | 1010\r\n * ------------------\r\n * 1 | 0 | 10\r\n * ------------------\r\n * 101 | 100 | 110\r\n * @param xy point to test\r\n * @param range range for comparison\r\n */\r\n private classifyBitsPointRangeXY(x: number, y: number, range: Range3d): number {\r\n let result = 0;\r\n if (x < range.low.x)\r\n result = 0x01;\r\n else if (x > range.high.x)\r\n result = 0x02;\r\n // note the OR operation\r\n if (y < range.low.y)\r\n result |= 0x04;\r\n else if (y > range.high.y)\r\n result |= 0x08;\r\n return result;\r\n }\r\n /** Low level dispatch of line string with line string. */\r\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean): void {\r\n const rangeA = lsA.range();\r\n const rangeB = lsB.range();\r\n rangeA.expandInPlace(this._maxDistanceToAccept!);\r\n if (!rangeB.intersectsRangeXY(rangeA))\r\n return;\r\n let bitB0: number;\r\n let bitB1: number;\r\n const rangeA1 = Range3d.createNull();\r\n const pointA0 = CurveCurveCloseApproachXY._workPointAA0;\r\n const pointA1 = CurveCurveCloseApproachXY._workPointAA1;\r\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n const numA = lsA.numPoints();\r\n const numB = lsB.numPoints();\r\n if (numA > 1 && numB > 1) {\r\n const dfA = 1.0 / (numA - 1);\r\n const dfB = 1.0 / (numB - 1);\r\n let fA0 = 0.0;\r\n let fA1, fB0, fB1;\r\n lsA.pointAt(0, pointA0);\r\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\r\n fA1 = ia * dfA;\r\n fB0 = 0.0;\r\n lsA.pointAt(ia, pointA1);\r\n // rangeA1 is around line segment [A0,A1] expanded by max distance\r\n rangeA1.setNull();\r\n rangeA1.extendPoint(pointA0);\r\n rangeA1.extendPoint(pointA1);\r\n rangeA1.expandInPlace(this._maxDistanceToAccept!);\r\n if (rangeA1.intersectsRangeXY(rangeB)) {\r\n lsB.pointAt(0, pointB0);\r\n bitB0 = this.classifyBitsPointRangeXY(pointB0.x, pointB0.y, rangeA1);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1, bitB0 = bitB1) {\r\n lsB.pointAt(ib, pointB1);\r\n bitB1 = this.classifyBitsPointRangeXY(pointB1.x, pointB1.y, rangeA1);\r\n fB1 = ib * dfB;\r\n // DO NOT study the segment in detail if both bitB bits are on for any of the 4 planes\r\n // (i.e., no intersection between rangeA1 and the range around line segment [B0,B1])\r\n if ((bitB0 & bitB1) === 0)\r\n this.dispatchSegmentSegment(lsA, pointA0, fA0, pointA1, fA1, lsB, pointB0, fB0, pointB1, fB1, reversed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Double dispatch handler for strongly typed linestring. */\r\n public override handleLineString3d(lsA: LineString3d): any {\r\n if (this._geometryB instanceof LineString3d) {\r\n const lsB = this._geometryB;\r\n this.computeLineStringLineString(lsA, lsB, false);\r\n } else if (this._geometryB instanceof LineSegment3d) {\r\n this.computeSegmentLineString(this._geometryB, lsA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.computeArcLineString(this._geometryB, lsA, true);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed arc. */\r\n public override handleArc3d(arc0: Arc3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentArc(\r\n this._geometryB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, arc0, true,\r\n );\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeArcLineString(arc0, this._geometryB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcArc(arc0, this._geometryB, false);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed bspline curve. */\r\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\r\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\r\n } else if (this._geometryB instanceof CurveCollection) {\r\n this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));\r\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\r\n this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));\r\n }\r\n return undefined;\r\n }\r\n /** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */\r\n public override handleCurveChainWithDistanceIndex(chain: CurveChainWithDistanceIndex): any {\r\n super.handleCurveChainWithDistanceIndex(chain);\r\n this.convertChildDetailToChainDetail(chain, this._geometryB instanceof CurveChainWithDistanceIndex ? this._geometryB : undefined);\r\n }\r\n /** Double dispatch handler for strongly typed homogeneous bspline curve .. */\r\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\r\n /*\r\n //NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH.\r\n // \"easy\" if both present BezierCurve3dH span loaders\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(\r\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\r\n curve, this._extendA, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\r\n }\r\n */\r\n return undefined;\r\n }\r\n}\r\n"]}
@@ -1,15 +1,15 @@
1
- import { BezierCurveBase } from "../bspline/BezierCurveBase";
2
- import { BSplineCurve3d } from "../bspline/BSplineCurve";
3
- import { BSplineCurve3dH } from "../bspline/BSplineCurve3dH";
4
- import { NullGeometryHandler } from "../geometry3d/GeometryHandler";
5
- import { Matrix4d } from "../geometry4d/Matrix4d";
6
- import { NewtonEvaluatorRRtoRRD } from "../numerics/Newton";
7
- import { Arc3d } from "./Arc3d";
8
- import { CurveLocationDetail, CurveLocationDetailPair } from "./CurveLocationDetail";
9
- import { CurvePrimitive } from "./CurvePrimitive";
10
- import { GeometryQuery } from "./GeometryQuery";
11
- import { LineSegment3d } from "./LineSegment3d";
12
- import { LineString3d } from "./LineString3d";
1
+ import { BezierCurveBase } from "../../bspline/BezierCurveBase";
2
+ import { BSplineCurve3d } from "../../bspline/BSplineCurve";
3
+ import { BSplineCurve3dH } from "../../bspline/BSplineCurve3dH";
4
+ import { NullGeometryHandler } from "../../geometry3d/GeometryHandler";
5
+ import { Matrix4d } from "../../geometry4d/Matrix4d";
6
+ import { NewtonEvaluatorRRtoRRD } from "../../numerics/Newton";
7
+ import { Arc3d } from "../Arc3d";
8
+ import { AnyCurve } from "../CurveTypes";
9
+ import { CurveLocationDetailPair } from "../CurveLocationDetail";
10
+ import { CurvePrimitive } from "../CurvePrimitive";
11
+ import { LineSegment3d } from "../LineSegment3d";
12
+ import { LineString3d } from "../LineString3d";
13
13
  /**
14
14
  * Private class for refining bezier-bezier intersections.
15
15
  * * The inputs are assumed pre-transformed so that the target condition is to match x and y coordinates.
@@ -18,26 +18,13 @@ import { LineString3d } from "./LineString3d";
18
18
  export declare class BezierBezierIntersectionXYRRToRRD extends NewtonEvaluatorRRtoRRD {
19
19
  private _curveA;
20
20
  private _curveB;
21
- constructor(curveA: BezierCurveBase, curveB: BezierCurveBase);
22
21
  private _rayA;
23
22
  private _rayB;
23
+ constructor(curveA: BezierCurveBase, curveB: BezierCurveBase);
24
24
  evaluate(fractionA: number, fractionB: number): boolean;
25
25
  }
26
- /**
27
- * Data bundle for a pair of arrays of CurveLocationDetail structures such as produced by CurveCurve,IntersectXY and
28
- * CurveCurve.ClosestApproach
29
- * @public
30
- */
31
- export declare class CurveLocationDetailArrayPair {
32
- /** First array of details ... */
33
- dataA: CurveLocationDetail[];
34
- /** Second array of details ... */
35
- dataB: CurveLocationDetail[];
36
- constructor();
37
- }
38
26
  /**
39
27
  * Handler class for XY intersections between _geometryB and another geometry.
40
- * * **NOTE:** GeometryQuery input (_geometryB) should really be AnyCurve.
41
28
  * * Instances are initialized and called from CurveCurve.
42
29
  * * geometryB is saved for later reference.
43
30
  * @internal
@@ -67,64 +54,69 @@ export declare class CurveCurveIntersectXY extends NullGeometryHandler {
67
54
  private _xyzwA1?;
68
55
  private _xyzwPlane?;
69
56
  private _xyzwB?;
70
- private reinitialize;
71
57
  /**
58
+ * The constructor.
72
59
  * @param worldToLocal optional transform (possibly perspective) to project to xy plane for intersection.
73
- * @param extendA flag to enable using extension of the other geometry.
74
- * @param geometryB second curve for intersection. Saved for reference by specific handler methods.
60
+ * @param extendA flag for extension of the other geometry.
61
+ * @param geometryB second curve for intersection. Saved for reference by specific handler methods.
75
62
  * @param extendB flag for extension of geometryB.
76
- * @param tolerance optional distance tolerance for coincidence
63
+ * @param tolerance optional distance tolerance for coincidence.
77
64
  */
78
- constructor(worldToLocal: Matrix4d | undefined, extendA: boolean, geometryB: GeometryQuery | undefined, extendB: boolean, tolerance?: number);
65
+ constructor(worldToLocal: Matrix4d | undefined, extendA: boolean, geometryB: AnyCurve | undefined, extendB: boolean, tolerance?: number);
79
66
  /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */
80
- resetGeometry(extendA: boolean, geometryB: GeometryQuery, extendB: boolean): void;
67
+ resetGeometry(extendA: boolean, geometryB: AnyCurve, extendB: boolean): void;
81
68
  private acceptFraction;
82
- /**
83
- * Test the fraction by strict parameter, but allow toleranced distance test at ends.
84
- * @param tolerance optional distance tolerance to check proximity to start/end point
85
- */
69
+ /** Test the fraction by strict parameter, but allow toleranced distance test at ends. */
86
70
  private acceptFractionOnLine;
87
71
  /**
88
- * * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair
72
+ * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair
89
73
  * @param reinitialize if true, a new results structure is created for use by later calls.
90
74
  */
91
75
  grabPairedResults(reinitialize?: boolean): CurveLocationDetailPair[];
92
76
  private sameCurveAndFraction;
93
77
  /**
94
- * Compute intersection of two line segments.
95
- * Filter by extension rules.
96
- * Record with fraction mapping.
78
+ * Record the pre-computed intersection between two curves. Filter by extension rules. Record with fraction mapping.
79
+ * @param localFractionA intersection fraction local to the subcurve of cpA between fractionA0 and fractionA1
80
+ * @param cpA the first curve
81
+ * @param fractionA0 start of the subcurve of cpA
82
+ * @param fractionA1 end of the subcurve of cpA
83
+ * @param localFractionB intersection fraction local to the subcurve of cpB between fractionB0 and fractionB1
84
+ * @param cpB the second curve
85
+ * @param fractionB0 start of the subcurve of cpB
86
+ * @param fractionB1 end of the subcurve of cpB
87
+ * @param reversed whether to reverse the details in the recorded intersection pair
88
+ * @param intervalDetails optional data for a coincident segment intersection
97
89
  */
98
90
  private recordPointWithLocalFractions;
99
91
  /**
100
- * Emit recordPoint for multiple pairs (on full curve!)
101
- * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible)
102
- * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible)
103
- * @param pairs array of pairs
92
+ * Emit recordPoint for multiple pairs (on full curve).
93
+ * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible).
94
+ * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible).
95
+ * @param pairs array of pairs.
104
96
  * @param reversed true to have order reversed in final structures.
105
97
  */
106
98
  recordPairs(cpA: CurvePrimitive, cpB: CurvePrimitive, pairs: CurveLocationDetailPair[] | undefined, reversed: boolean): void;
99
+ /** Compute intersection of two line segments. Filter by extension rules. Record with fraction mapping. */
100
+ private computeSegmentSegment3D;
107
101
  /**
108
- * Compute intersection of two line segments.
109
- * Filter by extension rules.
110
- * Record with fraction mapping.
102
+ * Compute intersection of projected homogeneous line segments. Filter by extension rules. Record with
103
+ * fraction mapping. Assumes caller knows the _worldToLocal is present.
111
104
  */
112
- private computeSegmentSegment3D;
113
105
  private computeSegmentSegment3DH;
114
106
  private dispatchSegmentSegment;
115
107
  private dispatchSegmentArc;
116
108
  private dispatchArcArcThisOrder;
117
109
  private dispatchArcArc;
118
110
  private dispatchArcBsplineCurve3d;
119
- /** Apply the transformation to bezier curves. optionally construct ranges. */
111
+ /** Apply the transformation to bezier curves. Optionally construct ranges. */
120
112
  private transformBeziers;
121
113
  private getRanges;
122
114
  private dispatchBezierBezierStrokeFirst;
123
115
  private dispatchBSplineCurve3dBSplineCurve3d;
124
116
  /**
125
- * Apply the projection transform (if any) to (xyz, w)
117
+ * Apply the projection transform (if any) to (xyz, w).
126
118
  * @param xyz xyz parts of input point.
127
- * @param w weight to use for homogeneous effects
119
+ * @param w weight to use for homogeneous effects.
128
120
  */
129
121
  private projectPoint;
130
122
  private mapNPCPlaneToWorld;
@@ -135,6 +127,8 @@ export declare class CurveCurveIntersectXY extends NullGeometryHandler {
135
127
  computeSegmentLineString(lsA: LineSegment3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean): any;
136
128
  /** Detail computation for arc intersecting linestring. */
137
129
  computeArcLineString(arcA: Arc3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean): any;
130
+ /** Detail computation for linestring intersecting linestring. */
131
+ private computeLineStringLineString;
138
132
  private static setTransformedWorkPoints;
139
133
  /** Double dispatch handler for strongly typed segment. */
140
134
  handleLineSegment3d(segmentA: LineSegment3d): any;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}