@itwin/core-geometry 5.1.0-dev.9 → 5.2.0-dev.2

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 (598) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/lib/cjs/Geometry.d.ts +18 -10
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +13 -3
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js +7 -1
  11. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.d.ts +4 -3
  13. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.js +4 -5
  15. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  16. package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
  17. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  18. package/lib/cjs/clipping/ClipPlane.js +9 -5
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js +5 -3
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  25. package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  29. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  30. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  31. package/lib/cjs/core-geometry.d.ts +2 -0
  32. package/lib/cjs/core-geometry.d.ts.map +1 -1
  33. package/lib/cjs/core-geometry.js +2 -0
  34. package/lib/cjs/core-geometry.js.map +1 -1
  35. package/lib/cjs/curve/Arc3d.d.ts +54 -32
  36. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  37. package/lib/cjs/curve/Arc3d.js +56 -37
  38. package/lib/cjs/curve/Arc3d.js.map +1 -1
  39. package/lib/cjs/curve/CurveCollection.d.ts +40 -1
  40. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.js +90 -0
  42. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  43. package/lib/cjs/curve/CurveFactory.d.ts +3 -2
  44. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  45. package/lib/cjs/curve/CurveFactory.js +6 -5
  46. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  47. package/lib/cjs/curve/CurveLocationDetail.d.ts +27 -25
  48. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  49. package/lib/cjs/curve/CurveLocationDetail.js +30 -25
  50. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  51. package/lib/cjs/curve/CurvePrimitive.d.ts +9 -2
  52. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurvePrimitive.js +11 -0
  54. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  55. package/lib/cjs/curve/CurveTypes.d.ts +1 -1
  56. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  57. package/lib/cjs/curve/LineSegment3d.d.ts +2 -0
  58. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  59. package/lib/cjs/curve/LineSegment3d.js +4 -0
  60. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  61. package/lib/cjs/curve/LineString3d.d.ts +7 -0
  62. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  63. package/lib/cjs/curve/LineString3d.js +15 -3
  64. package/lib/cjs/curve/LineString3d.js.map +1 -1
  65. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  66. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  67. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  68. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +34 -8
  69. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  70. package/lib/cjs/curve/Query/PlanarSubdivision.js +129 -33
  71. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  72. package/lib/cjs/curve/Query/StrokeCountChain.d.ts +4 -3
  73. package/lib/cjs/curve/Query/StrokeCountChain.d.ts.map +1 -1
  74. package/lib/cjs/curve/Query/StrokeCountChain.js +20 -9
  75. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  76. package/lib/cjs/curve/RegionMomentsXY.d.ts +2 -1
  77. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  78. package/lib/cjs/curve/RegionMomentsXY.js +26 -41
  79. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  80. package/lib/cjs/curve/RegionOps.d.ts +74 -39
  81. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  82. package/lib/cjs/curve/RegionOps.js +146 -46
  83. package/lib/cjs/curve/RegionOps.js.map +1 -1
  84. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  85. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  86. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +161 -55
  87. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  88. package/lib/cjs/curve/StrokeOptions.d.ts +1 -1
  89. package/lib/cjs/curve/StrokeOptions.js +1 -1
  90. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  93. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  94. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  96. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  98. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  100. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
  101. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  103. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  104. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
  105. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  106. package/lib/cjs/geometry3d/AngleSweep.d.ts +25 -18
  107. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  108. package/lib/cjs/geometry3d/AngleSweep.js +32 -18
  109. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  110. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  111. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  112. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
  113. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  114. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  115. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  116. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +1 -1
  117. package/lib/cjs/geometry3d/GrowableXYArray.js +1 -1
  118. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  119. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +8 -3
  120. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  121. package/lib/cjs/geometry3d/GrowableXYZArray.js +21 -3
  122. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  123. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +11 -1
  124. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  125. package/lib/cjs/geometry3d/IndexedXYZCollection.js +21 -3
  126. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  127. package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
  128. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  129. package/lib/cjs/geometry3d/Plane3d.js +6 -1
  130. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  131. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  132. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  133. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  134. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  135. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  136. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  137. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  138. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  139. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  140. package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
  141. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  142. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
  143. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  144. package/lib/cjs/geometry3d/Point3dVector3d.js +4 -5
  145. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  146. package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
  147. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  148. package/lib/cjs/geometry3d/PointHelpers.js +66 -26
  149. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  150. package/lib/cjs/geometry3d/PolygonOps.d.ts +49 -2
  151. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/PolygonOps.js +38 -2
  153. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  154. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  155. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  157. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  158. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
  159. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/PolylineOps.js +5 -4
  161. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  162. package/lib/cjs/geometry3d/Range.d.ts +18 -10
  163. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  164. package/lib/cjs/geometry3d/Range.js +32 -10
  165. package/lib/cjs/geometry3d/Range.js.map +1 -1
  166. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  167. package/lib/cjs/geometry3d/Ray2d.js +0 -1
  168. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  169. package/lib/cjs/geometry3d/Ray3d.d.ts +7 -9
  170. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  171. package/lib/cjs/geometry3d/Ray3d.js +23 -45
  172. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  173. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts +39 -29
  174. package/lib/cjs/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  175. package/lib/cjs/geometry3d/ReusableObjectCache.js +49 -35
  176. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  177. package/lib/cjs/geometry3d/SortablePolygon.d.ts +1 -4
  178. package/lib/cjs/geometry3d/SortablePolygon.d.ts.map +1 -1
  179. package/lib/cjs/geometry3d/SortablePolygon.js +48 -43
  180. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  181. package/lib/cjs/geometry3d/Transform.d.ts +21 -2
  182. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  183. package/lib/cjs/geometry3d/Transform.js +32 -13
  184. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  185. package/lib/cjs/geometry4d/Point4d.d.ts +8 -5
  186. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  187. package/lib/cjs/geometry4d/Point4d.js +27 -16
  188. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  189. package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
  190. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  191. package/lib/cjs/numerics/BezierPolynomials.js +11 -0
  192. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  193. package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
  194. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  195. package/lib/cjs/numerics/SmallSystem.js +129 -73
  196. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  197. package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
  198. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  199. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  200. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
  201. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  202. package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
  203. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  204. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  205. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  206. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
  207. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  208. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  209. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  210. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +51 -32
  211. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  212. package/lib/cjs/polyface/Polyface.d.ts +19 -5
  213. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  214. package/lib/cjs/polyface/Polyface.js +18 -2
  215. package/lib/cjs/polyface/Polyface.js.map +1 -1
  216. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +1 -1
  217. package/lib/cjs/polyface/PolyfaceBuilder.js +6 -6
  218. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  219. package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
  220. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  221. package/lib/cjs/polyface/PolyfaceClip.js +39 -42
  222. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  223. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  224. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  225. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  226. package/lib/cjs/polyface/PolyfaceQuery.d.ts +119 -78
  227. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  228. package/lib/cjs/polyface/PolyfaceQuery.js +315 -231
  229. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  230. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  231. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  232. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
  233. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  234. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  235. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  236. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  237. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  238. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  239. package/lib/cjs/serialization/BGFBReader.js +2 -3
  240. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  241. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  242. package/lib/cjs/serialization/BGFBWriter.js +2 -4
  243. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  244. package/lib/cjs/serialization/GeometrySamples.d.ts +1 -1
  245. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  246. package/lib/cjs/serialization/GeometrySamples.js +3 -3
  247. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  248. package/lib/cjs/serialization/IModelJsonSchema.d.ts +3 -3
  249. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  250. package/lib/cjs/serialization/IModelJsonSchema.js +5 -5
  251. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  252. package/lib/cjs/solid/Box.d.ts.map +1 -1
  253. package/lib/cjs/solid/Box.js +7 -0
  254. package/lib/cjs/solid/Box.js.map +1 -1
  255. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  256. package/lib/cjs/solid/Cone.js +6 -0
  257. package/lib/cjs/solid/Cone.js.map +1 -1
  258. package/lib/cjs/solid/LinearSweep.d.ts +2 -3
  259. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  260. package/lib/cjs/solid/LinearSweep.js +11 -7
  261. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  262. package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
  263. package/lib/cjs/solid/RotationalSweep.js +2 -2
  264. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  265. package/lib/cjs/solid/RuledSweep.d.ts +1 -1
  266. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  267. package/lib/cjs/solid/RuledSweep.js +5 -1
  268. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  269. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  270. package/lib/cjs/solid/Sphere.js +6 -3
  271. package/lib/cjs/solid/Sphere.js.map +1 -1
  272. package/lib/cjs/solid/SweepContour.d.ts +1 -1
  273. package/lib/cjs/solid/SweepContour.js +1 -1
  274. package/lib/cjs/solid/SweepContour.js.map +1 -1
  275. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  276. package/lib/cjs/solid/TorusPipe.js +4 -0
  277. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  278. package/lib/cjs/topology/ChainMerge.d.ts +1 -1
  279. package/lib/cjs/topology/ChainMerge.js +1 -1
  280. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  281. package/lib/cjs/topology/Graph.d.ts +64 -14
  282. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  283. package/lib/cjs/topology/Graph.js +149 -32
  284. package/lib/cjs/topology/Graph.js.map +1 -1
  285. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +3 -2
  286. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  287. package/lib/cjs/topology/HalfEdgeGraphSearch.js +3 -2
  288. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  289. package/lib/cjs/topology/Merging.d.ts +0 -1
  290. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  291. package/lib/cjs/topology/Merging.js +49 -46
  292. package/lib/cjs/topology/Merging.js.map +1 -1
  293. package/lib/cjs/topology/RegularizeFace.d.ts.map +1 -1
  294. package/lib/cjs/topology/RegularizeFace.js +2 -1
  295. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  296. package/lib/cjs/topology/Triangulation.d.ts +9 -14
  297. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  298. package/lib/cjs/topology/Triangulation.js +29 -22
  299. package/lib/cjs/topology/Triangulation.js.map +1 -1
  300. package/lib/esm/Geometry.d.ts +18 -10
  301. package/lib/esm/Geometry.d.ts.map +1 -1
  302. package/lib/esm/Geometry.js +13 -3
  303. package/lib/esm/Geometry.js.map +1 -1
  304. package/lib/esm/bspline/BSpline1dNd.d.ts +1 -1
  305. package/lib/esm/bspline/BSpline1dNd.js +1 -1
  306. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  307. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  308. package/lib/esm/bspline/BSplineCurve.js +7 -1
  309. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  310. package/lib/esm/bspline/BSplineSurface.d.ts +4 -3
  311. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  312. package/lib/esm/bspline/BSplineSurface.js +4 -5
  313. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  314. package/lib/esm/clipping/ClipPlane.d.ts +7 -5
  315. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  316. package/lib/esm/clipping/ClipPlane.js +9 -5
  317. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  318. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  319. package/lib/esm/clipping/ClipUtils.js +5 -3
  320. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  321. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
  322. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  323. package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
  324. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  325. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  326. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  327. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  328. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  329. package/lib/esm/core-geometry.d.ts +2 -0
  330. package/lib/esm/core-geometry.d.ts.map +1 -1
  331. package/lib/esm/core-geometry.js +2 -0
  332. package/lib/esm/core-geometry.js.map +1 -1
  333. package/lib/esm/curve/Arc3d.d.ts +54 -32
  334. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  335. package/lib/esm/curve/Arc3d.js +56 -37
  336. package/lib/esm/curve/Arc3d.js.map +1 -1
  337. package/lib/esm/curve/CurveCollection.d.ts +40 -1
  338. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  339. package/lib/esm/curve/CurveCollection.js +90 -0
  340. package/lib/esm/curve/CurveCollection.js.map +1 -1
  341. package/lib/esm/curve/CurveFactory.d.ts +3 -2
  342. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  343. package/lib/esm/curve/CurveFactory.js +6 -5
  344. package/lib/esm/curve/CurveFactory.js.map +1 -1
  345. package/lib/esm/curve/CurveLocationDetail.d.ts +27 -25
  346. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  347. package/lib/esm/curve/CurveLocationDetail.js +30 -25
  348. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  349. package/lib/esm/curve/CurvePrimitive.d.ts +9 -2
  350. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  351. package/lib/esm/curve/CurvePrimitive.js +11 -0
  352. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  353. package/lib/esm/curve/CurveTypes.d.ts +1 -1
  354. package/lib/esm/curve/CurveTypes.js.map +1 -1
  355. package/lib/esm/curve/LineSegment3d.d.ts +2 -0
  356. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  357. package/lib/esm/curve/LineSegment3d.js +4 -0
  358. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  359. package/lib/esm/curve/LineString3d.d.ts +7 -0
  360. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  361. package/lib/esm/curve/LineString3d.js +15 -3
  362. package/lib/esm/curve/LineString3d.js.map +1 -1
  363. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  364. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +37 -8
  365. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  366. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +34 -8
  367. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  368. package/lib/esm/curve/Query/PlanarSubdivision.js +131 -35
  369. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  370. package/lib/esm/curve/Query/StrokeCountChain.d.ts +4 -3
  371. package/lib/esm/curve/Query/StrokeCountChain.d.ts.map +1 -1
  372. package/lib/esm/curve/Query/StrokeCountChain.js +20 -9
  373. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  374. package/lib/esm/curve/RegionMomentsXY.d.ts +2 -1
  375. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  376. package/lib/esm/curve/RegionMomentsXY.js +26 -41
  377. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  378. package/lib/esm/curve/RegionOps.d.ts +74 -39
  379. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  380. package/lib/esm/curve/RegionOps.js +146 -46
  381. package/lib/esm/curve/RegionOps.js.map +1 -1
  382. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +36 -27
  383. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  384. package/lib/esm/curve/RegionOpsClassificationSweeps.js +161 -56
  385. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  386. package/lib/esm/curve/StrokeOptions.d.ts +1 -1
  387. package/lib/esm/curve/StrokeOptions.js +1 -1
  388. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  389. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  390. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +2 -2
  391. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +6 -6
  392. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  393. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  394. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  395. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  396. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  397. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  398. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
  399. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  400. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  401. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  402. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
  403. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  404. package/lib/esm/geometry3d/AngleSweep.d.ts +25 -18
  405. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  406. package/lib/esm/geometry3d/AngleSweep.js +32 -18
  407. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  408. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  409. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  410. package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
  411. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  412. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  413. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  414. package/lib/esm/geometry3d/GrowableXYArray.d.ts +1 -1
  415. package/lib/esm/geometry3d/GrowableXYArray.js +1 -1
  416. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  417. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +8 -3
  418. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  419. package/lib/esm/geometry3d/GrowableXYZArray.js +21 -3
  420. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  421. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +11 -1
  422. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  423. package/lib/esm/geometry3d/IndexedXYZCollection.js +21 -3
  424. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  425. package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
  426. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  427. package/lib/esm/geometry3d/Plane3d.js +6 -1
  428. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  429. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  430. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  431. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  432. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  433. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  434. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  435. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  436. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  437. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  438. package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
  439. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  440. package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
  441. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  442. package/lib/esm/geometry3d/Point3dVector3d.js +4 -5
  443. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  444. package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
  445. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  446. package/lib/esm/geometry3d/PointHelpers.js +66 -26
  447. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  448. package/lib/esm/geometry3d/PolygonOps.d.ts +49 -2
  449. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  450. package/lib/esm/geometry3d/PolygonOps.js +38 -2
  451. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  452. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  453. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  454. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  455. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  456. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
  457. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  458. package/lib/esm/geometry3d/PolylineOps.js +5 -4
  459. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  460. package/lib/esm/geometry3d/Range.d.ts +18 -10
  461. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  462. package/lib/esm/geometry3d/Range.js +32 -10
  463. package/lib/esm/geometry3d/Range.js.map +1 -1
  464. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  465. package/lib/esm/geometry3d/Ray2d.js +0 -1
  466. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  467. package/lib/esm/geometry3d/Ray3d.d.ts +7 -9
  468. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  469. package/lib/esm/geometry3d/Ray3d.js +23 -45
  470. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  471. package/lib/esm/geometry3d/ReusableObjectCache.d.ts +39 -29
  472. package/lib/esm/geometry3d/ReusableObjectCache.d.ts.map +1 -1
  473. package/lib/esm/geometry3d/ReusableObjectCache.js +47 -33
  474. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  475. package/lib/esm/geometry3d/SortablePolygon.d.ts +1 -4
  476. package/lib/esm/geometry3d/SortablePolygon.d.ts.map +1 -1
  477. package/lib/esm/geometry3d/SortablePolygon.js +48 -43
  478. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  479. package/lib/esm/geometry3d/Transform.d.ts +21 -2
  480. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  481. package/lib/esm/geometry3d/Transform.js +32 -13
  482. package/lib/esm/geometry3d/Transform.js.map +1 -1
  483. package/lib/esm/geometry4d/Point4d.d.ts +8 -5
  484. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  485. package/lib/esm/geometry4d/Point4d.js +27 -16
  486. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  487. package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
  488. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  489. package/lib/esm/numerics/BezierPolynomials.js +11 -0
  490. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  491. package/lib/esm/numerics/SmallSystem.d.ts +77 -36
  492. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  493. package/lib/esm/numerics/SmallSystem.js +129 -73
  494. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  495. package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
  496. package/lib/esm/polyface/FacetOrientation.js +1 -1
  497. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  498. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
  499. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  500. package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
  501. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  502. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  503. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  504. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
  505. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  506. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  507. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  508. package/lib/esm/polyface/IndexedPolyfaceWalker.js +51 -32
  509. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  510. package/lib/esm/polyface/Polyface.d.ts +19 -5
  511. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  512. package/lib/esm/polyface/Polyface.js +18 -2
  513. package/lib/esm/polyface/Polyface.js.map +1 -1
  514. package/lib/esm/polyface/PolyfaceBuilder.d.ts +1 -1
  515. package/lib/esm/polyface/PolyfaceBuilder.js +6 -6
  516. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  517. package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
  518. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  519. package/lib/esm/polyface/PolyfaceClip.js +39 -42
  520. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  521. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  522. package/lib/esm/polyface/PolyfaceData.js +1 -1
  523. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  524. package/lib/esm/polyface/PolyfaceQuery.d.ts +119 -78
  525. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  526. package/lib/esm/polyface/PolyfaceQuery.js +316 -232
  527. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  528. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  529. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  530. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
  531. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  532. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  533. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  534. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  535. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  536. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  537. package/lib/esm/serialization/BGFBReader.js +2 -3
  538. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  539. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  540. package/lib/esm/serialization/BGFBWriter.js +2 -4
  541. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  542. package/lib/esm/serialization/GeometrySamples.d.ts +1 -1
  543. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  544. package/lib/esm/serialization/GeometrySamples.js +3 -3
  545. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  546. package/lib/esm/serialization/IModelJsonSchema.d.ts +3 -3
  547. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  548. package/lib/esm/serialization/IModelJsonSchema.js +5 -5
  549. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  550. package/lib/esm/solid/Box.d.ts.map +1 -1
  551. package/lib/esm/solid/Box.js +7 -0
  552. package/lib/esm/solid/Box.js.map +1 -1
  553. package/lib/esm/solid/Cone.d.ts.map +1 -1
  554. package/lib/esm/solid/Cone.js +6 -0
  555. package/lib/esm/solid/Cone.js.map +1 -1
  556. package/lib/esm/solid/LinearSweep.d.ts +2 -3
  557. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  558. package/lib/esm/solid/LinearSweep.js +11 -7
  559. package/lib/esm/solid/LinearSweep.js.map +1 -1
  560. package/lib/esm/solid/RotationalSweep.d.ts +2 -2
  561. package/lib/esm/solid/RotationalSweep.js +2 -2
  562. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  563. package/lib/esm/solid/RuledSweep.d.ts +1 -1
  564. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  565. package/lib/esm/solid/RuledSweep.js +5 -1
  566. package/lib/esm/solid/RuledSweep.js.map +1 -1
  567. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  568. package/lib/esm/solid/Sphere.js +6 -3
  569. package/lib/esm/solid/Sphere.js.map +1 -1
  570. package/lib/esm/solid/SweepContour.d.ts +1 -1
  571. package/lib/esm/solid/SweepContour.js +1 -1
  572. package/lib/esm/solid/SweepContour.js.map +1 -1
  573. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  574. package/lib/esm/solid/TorusPipe.js +4 -0
  575. package/lib/esm/solid/TorusPipe.js.map +1 -1
  576. package/lib/esm/topology/ChainMerge.d.ts +1 -1
  577. package/lib/esm/topology/ChainMerge.js +1 -1
  578. package/lib/esm/topology/ChainMerge.js.map +1 -1
  579. package/lib/esm/topology/Graph.d.ts +64 -14
  580. package/lib/esm/topology/Graph.d.ts.map +1 -1
  581. package/lib/esm/topology/Graph.js +149 -32
  582. package/lib/esm/topology/Graph.js.map +1 -1
  583. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +3 -2
  584. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  585. package/lib/esm/topology/HalfEdgeGraphSearch.js +3 -2
  586. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  587. package/lib/esm/topology/Merging.d.ts +0 -1
  588. package/lib/esm/topology/Merging.d.ts.map +1 -1
  589. package/lib/esm/topology/Merging.js +49 -46
  590. package/lib/esm/topology/Merging.js.map +1 -1
  591. package/lib/esm/topology/RegularizeFace.d.ts.map +1 -1
  592. package/lib/esm/topology/RegularizeFace.js +2 -1
  593. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  594. package/lib/esm/topology/Triangulation.d.ts +9 -14
  595. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  596. package/lib/esm/topology/Triangulation.js +29 -22
  597. package/lib/esm/topology/Triangulation.js.map +1 -1
  598. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurveCloseApproachXY.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveCloseApproachXY.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\nimport { Geometry } from \"../../Geometry\";\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\nimport { GrowableFloat64Array } from \"../../geometry3d/GrowableFloat64Array\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range3d } from \"../../geometry3d/Range\";\nimport {\n CurveCurveCloseApproachXYRRtoRRD, CurvePointCloseApproachXYRtoRD, Newton1dUnbounded, Newton2dUnboundedWithDerivative,\n} from \"../../numerics/Newton\";\nimport { AnalyticRoots } from \"../../numerics/Polynomials\";\nimport { SmallSystem } from \"../../numerics/SmallSystem\";\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveChainWithDistanceIndex } from \"../CurveChainWithDistanceIndex\";\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { AnyCurve } from \"../CurveTypes\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\n\n// cspell:word XYRR currentdFdX\n\n/**\n * Handler class for XY close approach between _geometryB and another geometry.\n * * Approach means the XY distance (z is ignored) between _geometryB and another geometry.\n * * Closest approach is a measure of the proximity of one curve to another. It's the length of the shortest line\n * segment perpendicular to both curves; if the curves intersect, the closest approach is zero. In the context of\n * this class, z-coordinates are ignored, so the closest approach is as seen in the top view. If you have coplanar\n * input curves and want to find closest approach in their plane, rotate them first into a plane parallel to the\n * xy-plane, then afterward, rotate the results back as required.\n * * Close approach can also be from a curve endpoint perpendicular to another curve or from a curve endpoint to\n * another curve endpoint.\n * * Instances are initialized and called from CurveCurve.\n * * geometryB is saved for later reference.\n * @internal\n */\nexport class CurveCurveCloseApproachXY extends RecurseToCurvesGeometryHandler {\n private _geometryB: AnyCurve | undefined;\n private setGeometryB(geometryB: AnyCurve | undefined) {\n this._geometryB = geometryB;\n }\n /**\n * Maximum XY distance (z is ignored). Approach larger than this is not interesting.\n * This is caller defined and can be undefined.\n */\n private _maxDistanceToAccept: number | undefined;\n /** Squared max distance. This is private, and is forced to at least small metric distance squared. */\n private _maxDistanceSquared: number;\n /**\n * Start and end points of line segments that meet closest approach criteria, i.e., they are perpendicular to\n * both curves and their length is smaller than _maxDistanceToAccept.\n */\n private _results: CurveLocationDetailPair[];\n\n private static _workPointAA0 = Point3d.create();\n private static _workPointAA1 = Point3d.create();\n private static _workPointBB0 = Point3d.create();\n private static _workPointBB1 = Point3d.create();\n private static _workPointB = Point3d.create();\n\n /**\n * Constructor.\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\n */\n public constructor(geometryB?: AnyCurve) {\n super();\n this.setGeometryB(geometryB);\n this._maxDistanceSquared = Geometry.smallMetricDistanceSquared;\n this._results = [];\n }\n /** Set the (possibly undefined) max XY distance (z is ignored) to accept. */\n public set maxDistanceToAccept(value: number | undefined) {\n this._maxDistanceToAccept = value;\n if (this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0)\n this._maxDistanceSquared = this._maxDistanceToAccept * this._maxDistanceToAccept;\n }\n /** Access the (possibly undefined) max XY distance (z is ignored) to accept. */\n public get maxDistanceToAccept(): number | undefined {\n return this._maxDistanceToAccept;\n }\n /** Ask if the maxDistanceToAccept value is defined and positive */\n public get isMaxDistanceSet(): boolean {\n return this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0;\n }\n /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */\n public resetGeometry(geometryB: AnyCurve) {\n this.setGeometryB(geometryB);\n }\n /** returns true if `fraction` is in [0,1] within tolerance */\n private acceptFraction(fraction: number, fractionTol: number = 1.0e-12) {\n if (fraction < -fractionTol)\n return false;\n if (fraction > 1.0 + fractionTol)\n return false;\n return true;\n }\n /**\n * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.\n * @param reinitialize if true, a new results structure is created for use by later calls.\n */\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\n const result = this._results;\n if (reinitialize)\n this._results = [];\n return result;\n }\n /**\n * If distance between pointA and pointB is less than maxDistance, record CurveLocationDetailPair which is\n * the approach from pointA to pointB.\n */\n private testAndRecordPointPairApproach(\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB: number, pointB: Point3d, reversed: boolean,\n ): void {\n const d2 = pointA.distanceSquaredXY(pointB);\n if (d2 < this._maxDistanceSquared) {\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, fA, pointA);\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, fB, pointB);\n const pair = CurveLocationDetailPair.createCapture(detailA, detailB);\n if (reversed)\n pair.swapDetails();\n this._results.push(pair);\n }\n }\n /**\n * Create a close approach pair if XY distance is within maxDistance.\n * @param localFractionA a fraction on first curve\n * @param cpA the first curve\n * @param fractionA0 start of the first curve\n * @param fractionA1 end of the first curve\n * @param localFractionB a fraction on second curve\n * @param cpB the second curve\n * @param fractionB0 start of the second curve\n * @param fractionB1 end of the second curve\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n * @param intervalDetails optional CurveLocationDetailPair\n */\n private recordPointWithLocalFractions(\n localFractionA: number,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n localFractionB: number,\n cpB: CurvePrimitive,\n fractionB0: number,\n fractionB1: number,\n reversed: boolean,\n intervalDetails?: undefined | CurveLocationDetailPair,\n ): void {\n let globalFractionA, globalFractionB;\n let globalFractionA1, globalFractionB1;\n const isInterval = intervalDetails !== undefined &&\n intervalDetails.detailA.hasFraction1 &&\n intervalDetails.detailB.hasFraction1;\n if (isInterval) {\n globalFractionA = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction, fractionA1);\n globalFractionB = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction, fractionB1);\n globalFractionA1 = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction1!, fractionA1);\n globalFractionB1 = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction1!, fractionB1);\n } else {\n globalFractionA = globalFractionA1 = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\n globalFractionB = globalFractionB1 = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\n }\n // ignore duplicate of most recent approach\n const numPrevious = this._results.length;\n if (numPrevious > 0 && !isInterval) {\n const oldDetailA = this._results[numPrevious - 1].detailA;\n const oldDetailB = this._results[numPrevious - 1].detailB;\n if (reversed) {\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n } else {\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n }\n }\n const detailA = CurveLocationDetail.createCurveFractionPoint(\n cpA, globalFractionA, cpA.fractionToPoint(globalFractionA),\n );\n const detailB = CurveLocationDetail.createCurveFractionPoint(\n cpB, globalFractionB, cpB.fractionToPoint(globalFractionB),\n );\n if (isInterval) {\n detailA.captureFraction1Point1(globalFractionA1, cpA.fractionToPoint(globalFractionA1));\n detailB.captureFraction1Point1(globalFractionB1, cpB.fractionToPoint(globalFractionB1));\n } else {\n const d2 = detailA.point.distanceSquaredXY(detailB.point);\n if (d2 > this._maxDistanceSquared)\n return;\n detailA.setIntervalRole(CurveIntervalRole.isolated);\n detailB.setIntervalRole(CurveIntervalRole.isolated);\n }\n if (reversed) {\n this._results.push(new CurveLocationDetailPair(detailB, detailA));\n } else {\n this._results.push(new CurveLocationDetailPair(detailA, detailB));\n }\n }\n /**\n * Capture a close approach pair that has point and local fraction but not curve.\n * * Record the pair, each detail modified with global fraction and input curve.\n * * Pair is neither modified nor recorded if it would be a duplicate of the last recorded pair.\n * @param pair details computed with local fractions\n * @param cpA curveA\n * @param fractionA0 global start fraction on curveA\n * @param fractionA1 global end fraction on curveA\n * @param cpB curveB\n * @param fractionB0 global start fraction on curveB\n * @param fractionB1 global end fraction on curveB\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private capturePairWithLocalFractions(\n pair: CurveLocationDetailPair,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n cpB: CurvePrimitive,\n fractionB0: number,\n fractionB1: number,\n reversed: boolean,\n ) {\n const globalFractionA = Geometry.interpolate(fractionA0, pair.detailA.fraction, fractionA1);\n const globalFractionB = Geometry.interpolate(fractionB0, pair.detailB.fraction, fractionB1);\n // ignore duplicate of most recent pair\n const numPrevious = this._results.length;\n if (numPrevious > 0) {\n const oldDetailA = this._results[numPrevious - 1].detailA;\n const oldDetailB = this._results[numPrevious - 1].detailB;\n if (reversed) {\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n } else {\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n }\n }\n // recompute the points just in case\n CurveLocationDetail.createCurveEvaluatedFraction(cpA, globalFractionA, pair.detailA);\n CurveLocationDetail.createCurveEvaluatedFraction(cpB, globalFractionB, pair.detailB);\n pair.detailA.setIntervalRole(CurveIntervalRole.isolated);\n pair.detailB.setIntervalRole(CurveIntervalRole.isolated);\n if (reversed)\n pair.swapDetails();\n this._results.push(pair);\n }\n /**\n * Emit recordPoint for multiple pairs (on full curve) if within maxDistance.\n * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible)\n * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible)\n * @param pairs array of pairs\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n public recordPairs(\n cpA: CurvePrimitive, cpB: CurvePrimitive, pairs: CurveLocationDetailPair[] | undefined, reversed: boolean,\n ): void {\n if (pairs !== undefined) {\n for (const p of pairs) {\n this.recordPointWithLocalFractions(\n p.detailA.fraction, cpA, 0, 1, p.detailB.fraction, cpB, 0, 1, reversed, p,\n );\n }\n }\n }\n /**\n * Record fully assembled (but possibly reversed) detail pair.\n * @param detailA first detail\n * @param detailB second detail\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n public captureDetailPair(\n detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined, reversed: boolean,\n ): void {\n if (detailA && detailB) {\n if (reversed) {\n this._results.push(CurveLocationDetailPair.createCapture(detailB, detailA));\n } else {\n this._results.push(CurveLocationDetailPair.createCapture(detailA, detailB));\n }\n }\n }\n private static updatePointToSegmentDistance(\n fractionA: number,\n pointA: Point3d,\n pointB0: Point3d,\n pointB1: Point3d,\n fractionB: number,\n maxDistanceSquared: number,\n closestApproach: CurveLocationDetailPair, // modified on return\n ): boolean {\n let updated = false;\n if (fractionB < 0)\n fractionB = 0;\n else if (fractionB > 1)\n fractionB = 1;\n this._workPointB = pointB0.interpolate(fractionB, pointB1, this._workPointB);\n const distanceSquared = this._workPointB.distanceSquaredXY(pointA);\n if (distanceSquared <= Math.min(maxDistanceSquared, closestApproach.detailA.a)) {\n closestApproach.detailA.setFP(fractionA, pointA, undefined, distanceSquared);\n closestApproach.detailB.setFP(fractionB, this._workPointB, undefined, distanceSquared);\n updated = true;\n }\n return updated;\n }\n /**\n * Return fractions of close approach within maxDistance between two line segments (a0,a1) and (b0,b1).\n * * Math details can be found at core/geometry/internaldocs/Curve.md\n * @param a0 start point of line a\n * @param a1 end point of line a\n * @param b0 start point of line b\n * @param b1 end point of line b\n * @param maxDistanceSquared maximum distance squared (assumed to be positive)\n * @returns the fractional (not xy) coordinates in result.x and result.y. result.x is fraction on line a.\n * result.y is fraction on line b.\n */\n private static segmentSegmentBoundedApproach(\n a0: Point3d,\n a1: Point3d,\n b0: Point3d,\n b1: Point3d,\n maxDistanceSquared: number,\n ): CurveLocationDetailPair | undefined {\n const ux = a1.x - a0.x;\n const uy = a1.y - a0.y;\n const vx = b1.x - b0.x;\n const vy = b1.y - b0.y;\n const e00x = b0.x - a0.x;\n const e00y = b0.y - a0.y;\n const e01x = b1.x - a0.x;\n const e01y = b1.y - a0.y;\n const e10x = b0.x - a1.x;\n const e10y = b0.y - a1.y;\n const hab0 = Geometry.crossProductXYXY(ux, uy, e00x, e00y);\n const hab1 = Geometry.crossProductXYXY(ux, uy, e01x, e01y);\n const hba0 = -Geometry.crossProductXYXY(vx, vy, e00x, e00y);\n const hba1 = -Geometry.crossProductXYXY(vx, vy, e10x, e10y);\n if (hab0 * hab1 < 0.0 && hba0 * hba1 < 0.0) { // true intersection, strictly within both segments\n const fractionA = -hba0 / (hba1 - hba0);\n const fractionB = -hab0 / (hab1 - hab0);\n return CurveLocationDetailPair.createCapture(\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionA, a0.interpolate(fractionA, a1)),\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionB, b0.interpolate(fractionB, b1)),\n );\n }\n // there's no intersection, so find the closest approach within maxDistance from an endpoint\n const closestApproach = new CurveLocationDetailPair();\n closestApproach.detailA.a = 2 * maxDistanceSquared; // init to an approach that's too far away\n let reversed = false;\n const uu = Geometry.hypotenuseSquaredXY(ux, uy);\n if (hab0 * hab0 <= maxDistanceSquared * uu) { // test distance of b0 to u\n const fractionA = Geometry.dotProductXYXY(ux, uy, e00x, e00y) / uu;\n if (this.updatePointToSegmentDistance(0, b0, a0, a1, fractionA, maxDistanceSquared, closestApproach))\n reversed = true;\n }\n if (hab1 * hab1 <= maxDistanceSquared * uu) { // test distance of b1 to u\n const fractionA = Geometry.dotProductXYXY(ux, uy, e01x, e01y) / uu;\n if (this.updatePointToSegmentDistance(1, b1, a0, a1, fractionA, maxDistanceSquared, closestApproach))\n reversed = true;\n }\n const vv = Geometry.hypotenuseSquaredXY(vx, vy);\n if (hba0 * hba0 <= maxDistanceSquared * vv) { // test distance of a0 to v\n const fractionB = -Geometry.dotProductXYXY(vx, vy, e00x, e00y) / vv;\n if (this.updatePointToSegmentDistance(0, a0, b0, b1, fractionB, maxDistanceSquared, closestApproach))\n reversed = false;\n }\n if (hba1 * hba1 <= maxDistanceSquared * vv) { // test distance of a1 to v\n const fractionB = -Geometry.dotProductXYXY(vx, vy, e10x, e10y) / vv;\n if (this.updatePointToSegmentDistance(1, a1, b0, b1, fractionB, maxDistanceSquared, closestApproach))\n reversed = false;\n }\n if (closestApproach.detailA.a > maxDistanceSquared)\n return undefined;\n if (reversed)\n closestApproach.swapDetails();\n return closestApproach;\n }\n /**\n * Check different combination of fractions on curveA and curveB. If distance between points at 2 fractions\n * is less than maxDistance, record CurveLocationDetailPair which is the approach between the 2 points.\n * Optionally, record close approaches of one curve's points if they fall between the other curve's points.\n * * If an input curve is a LineString3d, then the corresponding fractions must define a segment of the line string.\n * @param cpA curveA\n * @param fA0 fraction0 on curveA\n * @param fA1 fraction1 on curveA\n * @param testProjectionOnA whether to record projections of the given curveB points onto curveA\n * @param cpB curveB\n * @param fB0 fraction0 on curveB\n * @param fB1 fraction0 on curveB\n * @param testProjectionOnB whether to record projections of the given curveA points onto curveB\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private testAndRecordFractionalPairApproach(\n cpA: CurvePrimitive,\n fA0: number,\n fA1: number,\n testProjectionOnA: boolean,\n cpB: CurvePrimitive,\n fB0: number,\n fB1: number,\n testProjectionOnB: boolean,\n reversed: boolean,\n ): void {\n const pointA0 = cpA.fractionToPoint(fA0);\n const pointA1 = cpA.fractionToPoint(fA1);\n const pointB0 = cpB.fractionToPoint(fB0);\n const pointB1 = cpB.fractionToPoint(fB1);\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB0, pointB0, reversed);\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB0, pointB0, reversed);\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB1, pointB1, reversed);\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB1, pointB1, reversed);\n if (testProjectionOnB) {\n this.testAndRecordProjection(cpA, fA0, pointA0, cpB, fB0, fB1, reversed);\n this.testAndRecordProjection(cpA, fA1, pointA1, cpB, fB0, fB1, reversed);\n }\n if (testProjectionOnA) {\n this.testAndRecordProjection(cpB, fB0, pointB0, cpA, fA0, fA1, !reversed);\n this.testAndRecordProjection(cpB, fB1, pointB1, cpA, fA0, fA1, !reversed);\n }\n }\n /**\n * Return XY closest approach between a curve primitive and a point.\n * Currently, this function only supports Arc3d and LineSegment.\n * Note that this function doesn't handle endpoints.\n */\n private getPointCurveClosestApproachXYNewton(curveP: CurvePrimitive, pointQ: Point3d): CurveLocationDetail | undefined {\n if (!(curveP instanceof Arc3d) && !(curveP instanceof LineSegment3d)) {\n assert(false, \"getPointCurveClosestApproachXYNewton only supports Arc3d and LineSegment\");\n }\n const seeds = [0.2, 0.4, 0.6, 0.8]; // HEURISTIC: arcs have up to 4 perpendiculars; lines have only 1\n const newtonEvaluator = new CurvePointCloseApproachXYRtoRD(curveP, pointQ);\n const newtonSearcher = new Newton1dUnbounded(newtonEvaluator, 100); // observed convergence to 1.0e-11 in 66 iters\n let minCloseApproachLength = Geometry.largeCoordinateResult;\n let minCurvePFraction: number | undefined;\n let minPointP: Point3d | undefined;\n for (const seed of seeds) {\n newtonSearcher.setX(seed);\n if (newtonSearcher.runIterations()) {\n const curvePFraction = newtonSearcher.getX();\n if (this.acceptFraction(curvePFraction)) {\n const pointP = curveP.fractionToPoint(curvePFraction);\n const closeApproachLength = pointP.distanceSquaredXY(pointQ);\n if (closeApproachLength < minCloseApproachLength) {\n minCloseApproachLength = closeApproachLength;\n minCurvePFraction = curvePFraction;\n minPointP = pointP;\n }\n }\n }\n }\n if (minCurvePFraction && minPointP)\n return CurveLocationDetail.createCurveFractionPoint(curveP, minCurvePFraction, minPointP);\n return undefined;\n }\n /**\n * Find the closest approach between `pointA` and `cpB`. Add the approach if it's within `fB0` and `fB1`.\n * * Does not test the endpoints of `cpB`.\n * * The only types supported for `cpB` are Arc3d, LineSegment3d, and LineString3d.\n * * If `cpB` is a LineString3d, then the interval `[fB0, fB1]` must correspond to a segment of the line string.\n */\n private testAndRecordProjection(\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB0: number, fB1: number, reversed: boolean,\n ) {\n let detail: CurveLocationDetail | undefined;\n if (cpB instanceof LineString3d) {\n const segParamsB = cpB.globalFractionToSegmentIndexAndLocalFraction(fB0 <= fB1 ? fB0 : fB1);\n const segIndexB = (segParamsB.fraction < 0.999999) ? segParamsB.index : segParamsB.index + 1;\n const segmentB = cpB.getIndexedSegment(segIndexB);\n if (segmentB && (detail = this.getPointCurveClosestApproachXYNewton(segmentB, pointA)))\n LineString3d.convertLocalToGlobalDetail(detail, segIndexB, cpB.numEdges(), cpB);\n } else {\n detail = this.getPointCurveClosestApproachXYNewton(cpB, pointA);\n }\n if (detail) {\n const fB = Geometry.restrictToInterval(detail.fraction, fB0, fB1);\n if (fB === detail.fraction) { // if fraction is within fB0 and fB1\n this.testAndRecordPointPairApproach(cpA, fA, pointA, cpB, detail.fraction, detail.point, reversed);\n }\n }\n }\n /**\n * Compute intersection of two line segments.\n * Filter by extension rules.\n * Record with fraction mapping.\n * * The fraction mappings allow portions of a linestring to be passed here.\n */\n private computeSegmentSegment3D(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n cpB: CurvePrimitive,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n reversed: boolean,\n ): void {\n // compute a pair with fractions local to segments\n const approach = CurveCurveCloseApproachXY.segmentSegmentBoundedApproach(\n pointA0, pointA1, pointB0, pointB1, this._maxDistanceSquared,\n );\n // adjust the pair to refer to input curves and global fractions, then record it if new\n if (approach) {\n approach.detailA.setCurve(cpA);\n approach.detailB.setCurve(cpB);\n this.capturePairWithLocalFractions(approach, cpA, fractionA0, fractionA1, cpB, fractionB0, fractionB1, reversed);\n }\n }\n /** Low level dispatch of segment with segment. */\n private dispatchSegmentSegment(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n cpB: CurvePrimitive,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n reversed: boolean,\n ): void {\n this.computeSegmentSegment3D(\n cpA, pointA0, fractionA0, pointA1, fractionA1,\n cpB, pointB0, fractionB0, pointB1, fractionB1,\n reversed,\n );\n }\n /**\n * Compute the perpendiculars between a line segment and an arc, without extending either curve.\n * * One or two perpendiculars will be found.\n * * Each perpendicular segment starts or ends on the arc where the arc tangent is parallel to the line tangent.\n * * Perpendiculars from an endpoint are not explicitly computed.\n * @param cpA line segment or line string; if it is a line string, then the fractions must specify a segment\n * @param pointA0 start point of the segment\n * @param fractionA0 fraction of the start of the segment\n * @param pointA1 end point of the segment\n * @param fractionA1 fraction of the end of the segment\n * @param arc the arc\n * @param reversed swap the details in the recorded pair (default: false)\n */\n public allPerpendicularsSegmentArcBounded(cpA: CurvePrimitive, pointA0: Point3d, fractionA0: number, pointA1: Point3d, fractionA1: number, arc: Arc3d, reversed: boolean = false): void {\n const dotUT = arc.vector0.crossProductStartEndXY(pointA0, pointA1);\n const dotVT = arc.vector90.crossProductStartEndXY(pointA0, pointA1);\n const parallelRadians = Math.atan2(dotVT, dotUT);\n for (const radians1 of [parallelRadians, parallelRadians + Math.PI]) {\n const arcPoint = arc.radiansToPoint(radians1);\n const fArc = arc.sweep.radiansToSignedPeriodicFraction(radians1);\n if (this.acceptFraction(fArc)) { // reject solution outside arc sweep\n const fLine = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0, pointA1, arcPoint);\n if (fLine !== undefined && this.acceptFraction(fLine))\n this.recordPointWithLocalFractions(fLine, cpA, fractionA0, fractionA1, fArc, arc, 0, 1, reversed);\n }\n }\n }\n /**\n * Low level dispatch of line segment with arc.\n * Find close approaches within maxDistance between a line segments (pointA0, pointA1) and an arc.\n * To consider:\n * 1) intersection between arc and segment.\n * 2) endpoints to endpoints or endpoints projection to the other curve.\n * 3) arc tangent parallel to line segment (or line string).\n * @param cpA curve A (line segment or line string; if it is a line string, then the fractions must specify a segment)\n * @param pointA0 start point of the segment\n * @param fractionA0 fraction of the start of the segment\n * @param pointA1 end point of the segment\n * @param fractionA1 fraction of the end of the segment\n * @param arc the arc\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private dispatchSegmentArc(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n arc: Arc3d,\n reversed: boolean,\n ): void {\n // 1) intersection between arc and line segment (or string).\n // Suppose:\n // Arc: X = C + cU + sV where c = cos(theta) and s = sin(theta)\n // Line: contains points A0 and A1\n // The arc intersects the line at point X if det(A0, A1, X) = 0 with homogeneous xyw points and vectors.\n // With equational X: det(A0, A1, C) + c*det(A0, A1, U) + s*det(A0, A1, V) = 0.\n // solve for theta.\n // evaluate points.\n // project back to line.\n let intersectionFound = false;\n const data = arc.toTransformedVectors();\n const pointA0Local = pointA0;\n const pointA1Local = pointA1;\n const alpha = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1); // det(A0, A1, C)\n const beta = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0); // det(A0, A1, U)\n const gamma = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0); // det(A0, A1, V)\n const cosines = new GrowableFloat64Array(2);\n const sines = new GrowableFloat64Array(2);\n const radians = new GrowableFloat64Array(2);\n const numRoots = AnalyticRoots.appendImplicitLineUnitCircleIntersections( // solve the equation\n alpha, beta, gamma, cosines, sines, radians,\n );\n for (let i = 0; i < numRoots; i++) {\n const arcPoint = data.center.plus2Scaled(\n data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i),\n );\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\n // only add if the point is within the start and end fractions of both line segment and arc\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\n this.recordPointWithLocalFractions(\n lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed,\n );\n intersectionFound = true;\n }\n }\n if (intersectionFound)\n return;\n // 2) endpoints to endpoints or endpoints projection to the other curve.\n this.testAndRecordFractionalPairApproach(cpA, fractionA0, fractionA1, true, arc, 0, 1, true, reversed);\n // 3) arc tangent parallel to line segment (or string).\n // If line does not intersect the arc, then the closest (and/or the furthest) point on arc to the line is a\n // point where the tangent line on arc at that point is parallel to the line.\n this.allPerpendicularsSegmentArcBounded(cpA, pointA0, fractionA0, pointA1, fractionA1, arc, reversed);\n }\n /**\n * Compute segments perpendicular to two elliptical arcs, without extending either curve.\n * * Perpendiculars from an endpoint are not explicitly computed.\n * * Intersections are also found by this search: they are reported as zero-length segments.\n * @param reversed swap the details in the recorded pair (default: false)\n */\n public allPerpendicularsArcArcBounded(arc0: Arc3d, arc1: Arc3d, reversed: boolean = false): void {\n const newtonEvaluator = new CurveCurveCloseApproachXYRRtoRRD(arc0, arc1);\n // HEURISTIC: 2 ellipses have up to 8 perpendiculars and up to 4 intersections\n const seedDelta = 1 / 10; // denominator 9 fails the unit test\n const seedStart = seedDelta / 2;\n const newtonSearcher = new Newton2dUnboundedWithDerivative(newtonEvaluator, 100); // observed convergence to 1.0e-11 in 49 iters\n for (let seedU = seedStart; seedU < 1; seedU += seedDelta) {\n for (let seedV = seedStart; seedV < 1; seedV += seedDelta) {\n newtonSearcher.setUV(seedU, seedV);\n if (newtonSearcher.runIterations()) {\n const frac0 = newtonSearcher.getU();\n const frac1 = newtonSearcher.getV();\n if (this.acceptFraction(frac0) && this.acceptFraction(frac1)) {\n this.recordPointWithLocalFractions(frac0, arc0, 0, 1, frac1, arc1, 0, 1, reversed);\n }\n }\n }\n }\n }\n /** Low level dispatch of arc with Arc3d. */\n private dispatchArcArc(cpA: Arc3d, cpB: Arc3d, reversed: boolean): void {\n const rangeA = cpA.range();\n const rangeB = cpB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n // 1) endpoints to endpoints or endpoints projection to the other curve\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, true, cpB, 0, 1, true, reversed);\n // 2) perpendicular line between 2 arcs (includes intersections)\n this.allPerpendicularsArcArcBounded(cpA, cpB, reversed);\n }\n /** Low level dispatch of arc with (beziers of) a bspline curve */\n private dispatchArcBsplineCurve3d(cpA: Arc3d, cpB: BSplineCurve3d, reversed: boolean): void {\n const ls = LineString3d.create();\n cpB.emitStrokes(ls);\n this.computeArcLineString(cpA, ls, reversed);\n }\n /** Low level dispatch of (beziers of) a bspline curve with (beziers of) a bspline curve */\n private dispatchBSplineCurve3dBSplineCurve3d(\n bcurveA: BSplineCurve3dBase, bcurveB: BSplineCurve3dBase, reversed: boolean,\n ): void {\n const lsA = LineString3d.create();\n bcurveA.emitStrokes(lsA);\n const lsB = LineString3d.create();\n bcurveB.emitStrokes(lsB);\n this.computeLineStringLineString(lsA, lsB, reversed);\n }\n /** Low level dispatch of linestring with (beziers of) a bspline curve */\n public dispatchLineStringBSplineCurve(lsA: LineString3d, curveB: BSplineCurve3d, reversed: boolean): any {\n const lsB = LineString3d.create();\n curveB.emitStrokes(lsB);\n this.computeLineStringLineString(lsA, lsB, reversed);\n }\n /** Low level dispatch of segment with (beziers of) a bspline curve */\n public dispatchSegmentBsplineCurve(segA: LineSegment3d, curveB: BSplineCurve3d, reversed: boolean): any {\n const lsB = LineString3d.create();\n curveB.emitStrokes(lsB);\n this.computeSegmentLineString(segA, lsB, reversed);\n }\n /** Detail computation for segment approaching linestring. */\n public computeSegmentLineString(segA: LineSegment3d, lsB: LineString3d, reversed: boolean): void {\n const numB = lsB.numPoints();\n const deltaFracB = Geometry.safeDivideFraction(1, numB - 1, 0);\n const pointA0 = segA.point0Ref;\n const pointA1 = segA.point1Ref;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n for (let i = 0; i < numB - 1; ++i) {\n const fB0 = i * deltaFracB; // global linestring fractions\n const fB1 = (i + 1 === numB - 1) ? 1.0 : (i + 1) * deltaFracB; // make sure we nail the end fraction\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i, pointB0);\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i + 1, pointB1);\n this.dispatchSegmentSegment(segA, pointA0, 0.0, pointA1, 1.0, lsB, pointB0, fB0, pointB1, fB1, reversed);\n }\n }\n /** Detail computation for arc approaching linestring. */\n public computeArcLineString(arcA: Arc3d, lsB: LineString3d, reversed: boolean): any {\n const rangeA = arcA.range();\n const rangeB = lsB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n const numB = lsB.numPoints();\n if (numB > 1) {\n const dfB = 1.0 / (numB - 1);\n let fB0;\n let fB1;\n fB0 = 0.0;\n lsB.pointAt(0, pointB0);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\n lsB.pointAt(ib, pointB1);\n fB1 = ib * dfB;\n this.dispatchSegmentArc(lsB, pointB0, fB0, pointB1, fB1, arcA, !reversed);\n }\n }\n return undefined;\n }\n /** Low level dispatch of curve collection. */\n private dispatchCurveCollection(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n const geomB = this._geometryB; // save\n if (!geomB || !geomB.children || !(geomB instanceof CurveCollection))\n return;\n for (const child of geomB.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this._geometryB = geomB; // restore\n }\n /** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */\n private dispatchCurveChainWithDistanceIndex(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n if (!this._geometryB || !(this._geometryB instanceof CurveChainWithDistanceIndex))\n return;\n if (geomA instanceof CurveChainWithDistanceIndex) {\n assert(false, \"call handleCurveChainWithDistanceIndex(geomA) instead\");\n }\n const index0 = this._results.length;\n const geomB = this._geometryB; // save\n for (const child of geomB.path.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this.resetGeometry(geomB); // restore\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);\n }\n /** Double dispatch handler for strongly typed segment. */\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n const segmentB = this._geometryB;\n this.dispatchSegmentSegment(\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\n segmentB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0,\n false,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeSegmentLineString(segmentA, this._geometryB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchSegmentArc(segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._geometryB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));\n }\n return undefined;\n }\n /**\n * Set bits for comparison to range xy\n * * bit 0x01 => x smaller than range.low.x\n * * bit 0x02 => x larger than range.high.x\n * * bit 0x04 => y smaller than range.low.y\n * * bit 0x08 => y larger than range.high.y\n * * If we divide XY plane into 9 areas using the range, the function returns 0 for points\n * inside the range. Below is other binary numbers returned by the function for all 9 areas:\n * 1001 | 1000 | 1010\n * ------------------\n * 1 | 0 | 10\n * ------------------\n * 101 | 100 | 110\n * @param xy point to test\n * @param range range for comparison\n */\n private classifyBitsPointRangeXY(x: number, y: number, range: Range3d): number {\n let result = 0;\n if (x < range.low.x)\n result = 0x01;\n else if (x > range.high.x)\n result = 0x02;\n // note the OR operation\n if (y < range.low.y)\n result |= 0x04;\n else if (y > range.high.y)\n result |= 0x08;\n return result;\n }\n /** Low level dispatch of line string with line string. */\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean): void {\n const rangeA = lsA.range();\n const rangeB = lsB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n let bitB0: number;\n let bitB1: number;\n const rangeA1 = Range3d.createNull();\n const pointA0 = CurveCurveCloseApproachXY._workPointAA0;\n const pointA1 = CurveCurveCloseApproachXY._workPointAA1;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n const numA = lsA.numPoints();\n const numB = lsB.numPoints();\n if (numA > 1 && numB > 1) {\n const dfA = 1.0 / (numA - 1);\n const dfB = 1.0 / (numB - 1);\n let fA0 = 0.0;\n let fA1, fB0, fB1;\n lsA.pointAt(0, pointA0);\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\n fA1 = ia * dfA;\n fB0 = 0.0;\n lsA.pointAt(ia, pointA1);\n // rangeA1 is around line segment [A0,A1] expanded by max distance\n rangeA1.setNull();\n rangeA1.extendPoint(pointA0);\n rangeA1.extendPoint(pointA1);\n rangeA1.expandInPlace(this._maxDistanceToAccept!);\n if (rangeA1.intersectsRangeXY(rangeB)) {\n lsB.pointAt(0, pointB0);\n bitB0 = this.classifyBitsPointRangeXY(pointB0.x, pointB0.y, rangeA1);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1, bitB0 = bitB1) {\n lsB.pointAt(ib, pointB1);\n bitB1 = this.classifyBitsPointRangeXY(pointB1.x, pointB1.y, rangeA1);\n fB1 = ib * dfB;\n // DO NOT study the segment in detail if both bitB bits are on for any of the 4 planes\n // (i.e., no intersection between rangeA1 and the range around line segment [B0,B1])\n if ((bitB0 & bitB1) === 0)\n this.dispatchSegmentSegment(lsA, pointA0, fA0, pointA1, fA1, lsB, pointB0, fB0, pointB1, fB1, reversed);\n }\n }\n }\n }\n }\n /** Double dispatch handler for strongly typed linestring. */\n public override handleLineString3d(lsA: LineString3d): any {\n if (this._geometryB instanceof LineString3d) {\n const lsB = this._geometryB;\n this.computeLineStringLineString(lsA, lsB, false);\n } else if (this._geometryB instanceof LineSegment3d) {\n this.computeSegmentLineString(this._geometryB, lsA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.computeArcLineString(this._geometryB, lsA, true);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed arc. */\n public override handleArc3d(arc0: Arc3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentArc(\n this._geometryB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, arc0, true,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeArcLineString(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcArc(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed bspline curve. */\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(this._geometryB, curve, true);\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, curve, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, curve, true);\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */\n public override handleCurveChainWithDistanceIndex(chain: CurveChainWithDistanceIndex): any {\n super.handleCurveChainWithDistanceIndex(chain);\n // if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);\n }\n /** Double dispatch handler for strongly typed homogeneous bspline curve .. */\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\n /*\n //NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH.\n // \"easy\" if both present BezierCurve3dH span loaders\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\n curve, this._extendA, true);\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\n }\n */\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"CurveCurveCloseApproachXY.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveCloseApproachXY.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\nimport { Geometry } from \"../../Geometry\";\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\nimport { GrowableFloat64Array } from \"../../geometry3d/GrowableFloat64Array\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range3d } from \"../../geometry3d/Range\";\nimport {\n CurveCurveCloseApproachXYRRtoRRD, CurvePointCloseApproachXYRtoRD, Newton1dUnbounded, Newton2dUnboundedWithDerivative,\n} from \"../../numerics/Newton\";\nimport { AnalyticRoots } from \"../../numerics/Polynomials\";\nimport { SmallSystem } from \"../../numerics/SmallSystem\";\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveChainWithDistanceIndex } from \"../CurveChainWithDistanceIndex\";\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { AnyCurve } from \"../CurveTypes\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\n\n// cspell:word XYRR currentdFdX\n\n/**\n * Handler class for XY close approach between _geometryB and another geometry.\n * * Approach means the XY distance (z is ignored) between _geometryB and another geometry.\n * * Closest approach is a measure of the proximity of one curve to another. It's the length of the shortest line\n * segment perpendicular to both curves; if the curves intersect, the closest approach is zero. In the context of\n * this class, z-coordinates are ignored, so the closest approach is as seen in the top view. If you have coplanar\n * input curves and want to find closest approach in their plane, rotate them first into a plane parallel to the\n * xy-plane, then afterward, rotate the results back as required.\n * * Close approach can also be from a curve endpoint perpendicular to another curve or from a curve endpoint to\n * another curve endpoint.\n * * Instances are initialized and called from CurveCurve.\n * * geometryB is saved for later reference.\n * @internal\n */\nexport class CurveCurveCloseApproachXY extends RecurseToCurvesGeometryHandler {\n private _geometryB: AnyCurve | undefined;\n private setGeometryB(geometryB: AnyCurve | undefined) {\n this._geometryB = geometryB;\n }\n /**\n * Maximum XY distance (z is ignored). Approach larger than this is not interesting.\n * This is caller defined and can be undefined.\n */\n private _maxDistanceToAccept: number | undefined;\n /** Squared max distance. This is private, and is forced to at least small metric distance squared. */\n private _maxDistanceSquared: number;\n /**\n * Start and end points of line segments that meet closest approach criteria, i.e., they are perpendicular to\n * both curves and their length is smaller than _maxDistanceToAccept.\n */\n private _results: CurveLocationDetailPair[];\n\n private static _workPointAA0 = Point3d.create();\n private static _workPointAA1 = Point3d.create();\n private static _workPointBB0 = Point3d.create();\n private static _workPointBB1 = Point3d.create();\n private static _workPointB = Point3d.create();\n\n /**\n * Constructor.\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\n */\n public constructor(geometryB?: AnyCurve) {\n super();\n this.setGeometryB(geometryB);\n this._maxDistanceSquared = Geometry.smallMetricDistanceSquared;\n this._results = [];\n }\n /** Set the (possibly undefined) max XY distance (z is ignored) to accept. */\n public set maxDistanceToAccept(value: number | undefined) {\n this._maxDistanceToAccept = value;\n if (this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0)\n this._maxDistanceSquared = this._maxDistanceToAccept * this._maxDistanceToAccept;\n }\n /** Access the (possibly undefined) max XY distance (z is ignored) to accept. */\n public get maxDistanceToAccept(): number | undefined {\n return this._maxDistanceToAccept;\n }\n /** Ask if the maxDistanceToAccept value is defined and positive */\n public get isMaxDistanceSet(): boolean {\n return this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0;\n }\n /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */\n public resetGeometry(geometryB: AnyCurve) {\n this.setGeometryB(geometryB);\n }\n /** returns true if `fraction` is in [0,1] within tolerance */\n private acceptFraction(fraction: number, fractionTol: number = 1.0e-12) {\n if (fraction < -fractionTol)\n return false;\n if (fraction > 1.0 + fractionTol)\n return false;\n return true;\n }\n /**\n * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.\n * @param reinitialize if true, a new results structure is created for use by later calls.\n */\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\n const result = this._results;\n if (reinitialize)\n this._results = [];\n return result;\n }\n /**\n * If distance between pointA and pointB is less than maxDistance, record CurveLocationDetailPair which is\n * the approach from pointA to pointB.\n */\n private testAndRecordPointPairApproach(\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB: number, pointB: Point3d, reversed: boolean,\n ): void {\n const d2 = pointA.distanceSquaredXY(pointB);\n if (d2 < this._maxDistanceSquared) {\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, fA, pointA);\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, fB, pointB);\n const pair = CurveLocationDetailPair.createCapture(detailA, detailB);\n if (reversed)\n pair.swapDetails();\n this._results.push(pair);\n }\n }\n /**\n * Create a close approach pair if XY distance is within maxDistance.\n * @param localFractionA a fraction on first curve\n * @param cpA the first curve\n * @param fractionA0 start of the first curve\n * @param fractionA1 end of the first curve\n * @param localFractionB a fraction on second curve\n * @param cpB the second curve\n * @param fractionB0 start of the second curve\n * @param fractionB1 end of the second curve\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n * @param intervalDetails optional CurveLocationDetailPair\n */\n private recordPointWithLocalFractions(\n localFractionA: number,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n localFractionB: number,\n cpB: CurvePrimitive,\n fractionB0: number,\n fractionB1: number,\n reversed: boolean,\n intervalDetails?: undefined | CurveLocationDetailPair,\n ): void {\n let globalFractionA, globalFractionB;\n let globalFractionA1, globalFractionB1;\n const isInterval = intervalDetails !== undefined &&\n intervalDetails.detailA.hasFraction1 &&\n intervalDetails.detailB.hasFraction1;\n if (isInterval) {\n globalFractionA = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction, fractionA1);\n globalFractionB = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction, fractionB1);\n globalFractionA1 = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction1!, fractionA1);\n globalFractionB1 = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction1!, fractionB1);\n } else {\n globalFractionA = globalFractionA1 = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\n globalFractionB = globalFractionB1 = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\n }\n // ignore duplicate of most recent approach\n const numPrevious = this._results.length;\n if (numPrevious > 0 && !isInterval) {\n const oldDetailA = this._results[numPrevious - 1].detailA;\n const oldDetailB = this._results[numPrevious - 1].detailB;\n if (reversed) {\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n } else {\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n }\n }\n const detailA = CurveLocationDetail.createCurveFractionPoint(\n cpA, globalFractionA, cpA.fractionToPoint(globalFractionA),\n );\n const detailB = CurveLocationDetail.createCurveFractionPoint(\n cpB, globalFractionB, cpB.fractionToPoint(globalFractionB),\n );\n if (isInterval) {\n detailA.captureFraction1Point1(globalFractionA1, cpA.fractionToPoint(globalFractionA1));\n detailB.captureFraction1Point1(globalFractionB1, cpB.fractionToPoint(globalFractionB1));\n } else {\n const d2 = detailA.point.distanceSquaredXY(detailB.point);\n if (d2 > this._maxDistanceSquared)\n return;\n detailA.setIntervalRole(CurveIntervalRole.isolated);\n detailB.setIntervalRole(CurveIntervalRole.isolated);\n }\n if (reversed) {\n this._results.push(new CurveLocationDetailPair(detailB, detailA));\n } else {\n this._results.push(new CurveLocationDetailPair(detailA, detailB));\n }\n }\n /**\n * Capture a close approach pair that has point and local fraction but not curve.\n * * Record the pair, each detail modified with global fraction and input curve.\n * * Pair is neither modified nor recorded if it would be a duplicate of the last recorded pair.\n * @param pair details computed with local fractions\n * @param cpA curveA\n * @param fractionA0 global start fraction on curveA\n * @param fractionA1 global end fraction on curveA\n * @param cpB curveB\n * @param fractionB0 global start fraction on curveB\n * @param fractionB1 global end fraction on curveB\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private capturePairWithLocalFractions(\n pair: CurveLocationDetailPair,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n cpB: CurvePrimitive,\n fractionB0: number,\n fractionB1: number,\n reversed: boolean,\n ) {\n const globalFractionA = Geometry.interpolate(fractionA0, pair.detailA.fraction, fractionA1);\n const globalFractionB = Geometry.interpolate(fractionB0, pair.detailB.fraction, fractionB1);\n // ignore duplicate of most recent pair\n const numPrevious = this._results.length;\n if (numPrevious > 0) {\n const oldDetailA = this._results[numPrevious - 1].detailA;\n const oldDetailB = this._results[numPrevious - 1].detailB;\n if (reversed) {\n if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n } else {\n if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&\n oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))\n return;\n }\n }\n // recompute the points just in case\n CurveLocationDetail.createCurveEvaluatedFraction(cpA, globalFractionA, pair.detailA);\n CurveLocationDetail.createCurveEvaluatedFraction(cpB, globalFractionB, pair.detailB);\n pair.detailA.setIntervalRole(CurveIntervalRole.isolated);\n pair.detailB.setIntervalRole(CurveIntervalRole.isolated);\n if (reversed)\n pair.swapDetails();\n this._results.push(pair);\n }\n /**\n * Emit recordPoint for multiple pairs (on full curve) if within maxDistance.\n * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible)\n * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible)\n * @param pairs array of pairs\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n public recordPairs(\n cpA: CurvePrimitive, cpB: CurvePrimitive, pairs: CurveLocationDetailPair[] | undefined, reversed: boolean,\n ): void {\n if (pairs !== undefined) {\n for (const p of pairs) {\n this.recordPointWithLocalFractions(\n p.detailA.fraction, cpA, 0, 1, p.detailB.fraction, cpB, 0, 1, reversed, p,\n );\n }\n }\n }\n /**\n * Record fully assembled (but possibly reversed) detail pair.\n * @param detailA first detail\n * @param detailB second detail\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n public captureDetailPair(\n detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined, reversed: boolean,\n ): void {\n if (detailA && detailB) {\n if (reversed) {\n this._results.push(CurveLocationDetailPair.createCapture(detailB, detailA));\n } else {\n this._results.push(CurveLocationDetailPair.createCapture(detailA, detailB));\n }\n }\n }\n private static updatePointToSegmentDistance(\n fractionA: number,\n pointA: Point3d,\n pointB0: Point3d,\n pointB1: Point3d,\n fractionB: number,\n maxDistanceSquared: number,\n closestApproach: CurveLocationDetailPair, // modified on return\n ): boolean {\n let updated = false;\n if (fractionB < 0)\n fractionB = 0;\n else if (fractionB > 1)\n fractionB = 1;\n this._workPointB = pointB0.interpolate(fractionB, pointB1, this._workPointB);\n const distanceSquared = this._workPointB.distanceSquaredXY(pointA);\n if (distanceSquared <= Math.min(maxDistanceSquared, closestApproach.detailA.a)) {\n closestApproach.detailA.setFP(fractionA, pointA, undefined, distanceSquared);\n closestApproach.detailB.setFP(fractionB, this._workPointB, undefined, distanceSquared);\n updated = true;\n }\n return updated;\n }\n /**\n * Return fractions of close approach within maxDistance between two line segments (a0,a1) and (b0,b1).\n * * Math details can be found at core/geometry/internaldocs/Curve.md\n * @param a0 start point of line a\n * @param a1 end point of line a\n * @param b0 start point of line b\n * @param b1 end point of line b\n * @param maxDistanceSquared maximum distance squared (assumed to be positive)\n * @returns the fractional (not xy) coordinates in result.x and result.y. result.x is fraction on line a.\n * result.y is fraction on line b.\n */\n private static segmentSegmentBoundedApproach(\n a0: Point3d,\n a1: Point3d,\n b0: Point3d,\n b1: Point3d,\n maxDistanceSquared: number,\n ): CurveLocationDetailPair | undefined {\n const ux = a1.x - a0.x;\n const uy = a1.y - a0.y;\n const vx = b1.x - b0.x;\n const vy = b1.y - b0.y;\n const e00x = b0.x - a0.x;\n const e00y = b0.y - a0.y;\n const e01x = b1.x - a0.x;\n const e01y = b1.y - a0.y;\n const e10x = b0.x - a1.x;\n const e10y = b0.y - a1.y;\n const hab0 = Geometry.crossProductXYXY(ux, uy, e00x, e00y);\n const hab1 = Geometry.crossProductXYXY(ux, uy, e01x, e01y);\n const hba0 = -Geometry.crossProductXYXY(vx, vy, e00x, e00y);\n const hba1 = -Geometry.crossProductXYXY(vx, vy, e10x, e10y);\n if (hab0 * hab1 < 0.0 && hba0 * hba1 < 0.0) { // true intersection, strictly within both segments\n const fractionA = -hba0 / (hba1 - hba0);\n const fractionB = -hab0 / (hab1 - hab0);\n return CurveLocationDetailPair.createCapture(\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionA, a0.interpolate(fractionA, a1)),\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionB, b0.interpolate(fractionB, b1)),\n );\n }\n // there's no intersection, so find the closest approach within maxDistance from an endpoint\n const closestApproach = new CurveLocationDetailPair();\n closestApproach.detailA.a = 2 * maxDistanceSquared; // init to an approach that's too far away\n let reversed = false;\n const uu = Geometry.hypotenuseSquaredXY(ux, uy);\n if (hab0 * hab0 <= maxDistanceSquared * uu) { // test distance of b0 to u\n const fractionA = Geometry.safeDivideFraction(Geometry.dotProductXYXY(ux, uy, e00x, e00y), uu, 0.0);\n if (this.updatePointToSegmentDistance(0, b0, a0, a1, fractionA, maxDistanceSquared, closestApproach))\n reversed = true;\n }\n if (hab1 * hab1 <= maxDistanceSquared * uu) { // test distance of b1 to u\n const fractionA = Geometry.safeDivideFraction(Geometry.dotProductXYXY(ux, uy, e01x, e01y), uu, 0.0);\n if (this.updatePointToSegmentDistance(1, b1, a0, a1, fractionA, maxDistanceSquared, closestApproach))\n reversed = true;\n }\n const vv = Geometry.hypotenuseSquaredXY(vx, vy);\n if (hba0 * hba0 <= maxDistanceSquared * vv) { // test distance of a0 to v\n const fractionB = Geometry.safeDivideFraction(-Geometry.dotProductXYXY(vx, vy, e00x, e00y), vv, 0.0);\n if (this.updatePointToSegmentDistance(0, a0, b0, b1, fractionB, maxDistanceSquared, closestApproach))\n reversed = false;\n }\n if (hba1 * hba1 <= maxDistanceSquared * vv) { // test distance of a1 to v\n const fractionB = Geometry.safeDivideFraction(-Geometry.dotProductXYXY(vx, vy, e10x, e10y), vv, 0.0);\n if (this.updatePointToSegmentDistance(1, a1, b0, b1, fractionB, maxDistanceSquared, closestApproach))\n reversed = false;\n }\n if (closestApproach.detailA.a > maxDistanceSquared)\n return undefined;\n if (reversed)\n closestApproach.swapDetails();\n return closestApproach;\n }\n /**\n * Check different combination of fractions on curveA and curveB. If distance between points at 2 fractions\n * is less than maxDistance, record CurveLocationDetailPair which is the approach between the 2 points.\n * Optionally, record close approaches of one curve's points if they fall between the other curve's points.\n * * If an input curve is a LineString3d, then the corresponding fractions must define a segment of the line string.\n * @param cpA curveA\n * @param fA0 fraction0 on curveA\n * @param fA1 fraction1 on curveA\n * @param testProjectionOnA whether to record projections of the given curveB points onto curveA\n * @param cpB curveB\n * @param fB0 fraction0 on curveB\n * @param fB1 fraction0 on curveB\n * @param testProjectionOnB whether to record projections of the given curveA points onto curveB\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private testAndRecordFractionalPairApproach(\n cpA: CurvePrimitive,\n fA0: number,\n fA1: number,\n testProjectionOnA: boolean,\n cpB: CurvePrimitive,\n fB0: number,\n fB1: number,\n testProjectionOnB: boolean,\n reversed: boolean,\n ): void {\n const pointA0 = cpA.fractionToPoint(fA0);\n const pointA1 = cpA.fractionToPoint(fA1);\n const pointB0 = cpB.fractionToPoint(fB0);\n const pointB1 = cpB.fractionToPoint(fB1);\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB0, pointB0, reversed);\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB0, pointB0, reversed);\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB1, pointB1, reversed);\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB1, pointB1, reversed);\n if (testProjectionOnB) {\n this.testAndRecordProjection(cpA, fA0, pointA0, cpB, fB0, fB1, reversed);\n this.testAndRecordProjection(cpA, fA1, pointA1, cpB, fB0, fB1, reversed);\n }\n if (testProjectionOnA) {\n this.testAndRecordProjection(cpB, fB0, pointB0, cpA, fA0, fA1, !reversed);\n this.testAndRecordProjection(cpB, fB1, pointB1, cpA, fA0, fA1, !reversed);\n }\n }\n /**\n * Return XY closest approach between a curve primitive and a point.\n * Currently, this function only supports Arc3d and LineSegment.\n * Note that this function doesn't handle endpoints.\n */\n private getPointCurveClosestApproachXYNewton(curveP: CurvePrimitive, pointQ: Point3d): CurveLocationDetail | undefined {\n if (!(curveP instanceof Arc3d) && !(curveP instanceof LineSegment3d)) {\n assert(false, \"getPointCurveClosestApproachXYNewton only supports Arc3d and LineSegment\");\n }\n const seeds = [0.2, 0.4, 0.6, 0.8]; // HEURISTIC: arcs have up to 4 perpendiculars; lines have only 1\n const newtonEvaluator = new CurvePointCloseApproachXYRtoRD(curveP, pointQ);\n const newtonSearcher = new Newton1dUnbounded(newtonEvaluator, 100); // observed convergence to 1.0e-11 in 66 iters\n let minCloseApproachLength = Geometry.largeCoordinateResult;\n let minCurvePFraction: number | undefined;\n let minPointP: Point3d | undefined;\n for (const seed of seeds) {\n newtonSearcher.setX(seed);\n if (newtonSearcher.runIterations()) {\n const curvePFraction = newtonSearcher.getX();\n if (this.acceptFraction(curvePFraction)) {\n const pointP = curveP.fractionToPoint(curvePFraction);\n const closeApproachLength = pointP.distanceSquaredXY(pointQ);\n if (closeApproachLength < minCloseApproachLength) {\n minCloseApproachLength = closeApproachLength;\n minCurvePFraction = curvePFraction;\n minPointP = pointP;\n }\n }\n }\n }\n if (minCurvePFraction && minPointP)\n return CurveLocationDetail.createCurveFractionPoint(curveP, minCurvePFraction, minPointP);\n return undefined;\n }\n /**\n * Find the closest xy approach between `pointA` and `cpB`. Add the approach if it's within `fB0` and `fB1`.\n * * Does not test the endpoints of `cpB`.\n * * The only types supported for `cpB` are Arc3d, LineSegment3d, and LineString3d.\n * * If `cpB` is a LineString3d, then the interval `[fB0, fB1]` must correspond to a segment of the line string.\n */\n private testAndRecordProjection(\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB0: number, fB1: number, reversed: boolean,\n ) {\n let detail: CurveLocationDetail | undefined;\n if (cpB instanceof LineString3d) {\n const segParamsB = cpB.globalFractionToSegmentIndexAndLocalFraction(fB0 <= fB1 ? fB0 : fB1);\n const segIndexB = (segParamsB.fraction < 0.999999) ? segParamsB.index : segParamsB.index + 1;\n const segmentB = cpB.getIndexedSegment(segIndexB);\n if (segmentB && (detail = this.getPointCurveClosestApproachXYNewton(segmentB, pointA)))\n LineString3d.convertLocalToGlobalDetail(detail, segIndexB, cpB.numEdges(), cpB);\n } else {\n detail = this.getPointCurveClosestApproachXYNewton(cpB, pointA);\n }\n if (detail) {\n const fB = Geometry.restrictToInterval(detail.fraction, fB0, fB1);\n if (fB === detail.fraction) { // if fraction is within fB0 and fB1\n this.testAndRecordPointPairApproach(cpA, fA, pointA, cpB, detail.fraction, detail.point, reversed);\n }\n }\n }\n /**\n * Compute closest xy approach of two line segments.\n * Filter by extension rules.\n * Record with fraction mapping.\n * * The fraction mappings allow portions of a linestring to be passed here.\n */\n private computeSegmentSegment3D(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n cpB: CurvePrimitive,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n reversed: boolean,\n ): void {\n // compute a pair with fractions local to segments\n const approach = CurveCurveCloseApproachXY.segmentSegmentBoundedApproach(\n pointA0, pointA1, pointB0, pointB1, this._maxDistanceSquared,\n );\n // adjust the pair to refer to input curves and global fractions, then record it if new\n if (approach) {\n approach.detailA.setCurve(cpA);\n approach.detailB.setCurve(cpB);\n this.capturePairWithLocalFractions(approach, cpA, fractionA0, fractionA1, cpB, fractionB0, fractionB1, reversed);\n }\n }\n /** Low level dispatch of segment with segment. */\n private dispatchSegmentSegment(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n cpB: CurvePrimitive,\n pointB0: Point3d,\n fractionB0: number,\n pointB1: Point3d,\n fractionB1: number,\n reversed: boolean,\n ): void {\n this.computeSegmentSegment3D(\n cpA, pointA0, fractionA0, pointA1, fractionA1,\n cpB, pointB0, fractionB0, pointB1, fractionB1,\n reversed,\n );\n }\n /**\n * Compute the perpendiculars between a line segment and an arc, without extending either curve.\n * * One or two perpendiculars will be found.\n * * Each perpendicular segment starts or ends on the arc where the arc tangent is parallel to the line tangent.\n * * Perpendiculars from an endpoint are not explicitly computed.\n * @param cpA line segment or line string; if it is a line string, then the fractions must specify a segment\n * @param pointA0 start point of the segment\n * @param fractionA0 fraction of the start of the segment\n * @param pointA1 end point of the segment\n * @param fractionA1 fraction of the end of the segment\n * @param arc the arc\n * @param reversed swap the details in the recorded pair (default: false)\n */\n public allPerpendicularsSegmentArcBounded(cpA: CurvePrimitive, pointA0: Point3d, fractionA0: number, pointA1: Point3d, fractionA1: number, arc: Arc3d, reversed: boolean = false): void {\n const dotUT = arc.vector0.crossProductStartEndXY(pointA0, pointA1);\n const dotVT = arc.vector90.crossProductStartEndXY(pointA0, pointA1);\n const parallelRadians = Math.atan2(dotVT, dotUT);\n for (const radians1 of [parallelRadians, parallelRadians + Math.PI]) {\n const arcPoint = arc.radiansToPoint(radians1);\n const fArc = arc.sweep.radiansToSignedPeriodicFraction(radians1);\n if (this.acceptFraction(fArc)) { // reject solution outside arc sweep\n const fLine = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0, pointA1, arcPoint);\n if (fLine !== undefined && this.acceptFraction(fLine))\n this.recordPointWithLocalFractions(fLine, cpA, fractionA0, fractionA1, fArc, arc, 0, 1, reversed);\n }\n }\n }\n /**\n * Low level dispatch of line segment with arc.\n * Find close approaches within maxDistance between a line segments (pointA0, pointA1) and an arc.\n * To consider:\n * 1) intersection between arc and segment.\n * 2) endpoints to endpoints or endpoints projection to the other curve.\n * 3) arc tangent parallel to line segment (or line string).\n * @param cpA curve A (line segment or line string; if it is a line string, then the fractions must specify a segment)\n * @param pointA0 start point of the segment\n * @param fractionA0 fraction of the start of the segment\n * @param pointA1 end point of the segment\n * @param fractionA1 fraction of the end of the segment\n * @param arc the arc\n * @param reversed whether to reverse the details in the pair (e.g., so that detailB refers to geometryB).\n */\n private dispatchSegmentArc(\n cpA: CurvePrimitive,\n pointA0: Point3d,\n fractionA0: number,\n pointA1: Point3d,\n fractionA1: number,\n arc: Arc3d,\n reversed: boolean,\n ): void {\n // 1) intersection between arc and line segment (or string).\n // Suppose:\n // Arc: X = C + cU + sV where c = cos(theta) and s = sin(theta)\n // Line: contains points A0 and A1\n // The arc intersects the line at point X if det(A0, A1, X) = 0 with homogeneous xyw points and vectors.\n // With equational X: det(A0, A1, C) + c*det(A0, A1, U) + s*det(A0, A1, V) = 0.\n // solve for theta.\n // evaluate points.\n // project back to line.\n let intersectionFound = false;\n const data = arc.toTransformedVectors();\n const pointA0Local = pointA0;\n const pointA1Local = pointA1;\n const alpha = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1); // det(A0, A1, C)\n const beta = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0); // det(A0, A1, U)\n const gamma = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0); // det(A0, A1, V)\n const cosines = new GrowableFloat64Array(2);\n const sines = new GrowableFloat64Array(2);\n const radians = new GrowableFloat64Array(2);\n const numRoots = AnalyticRoots.appendImplicitLineUnitCircleIntersections( // solve the equation\n alpha, beta, gamma, cosines, sines, radians,\n );\n for (let i = 0; i < numRoots; i++) {\n const arcPoint = data.center.plus2Scaled(\n data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i),\n );\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\n // only add if the point is within the start and end fractions of both line segment and arc\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\n this.recordPointWithLocalFractions(\n lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed,\n );\n intersectionFound = true;\n }\n }\n if (intersectionFound)\n return;\n // 2) endpoints to endpoints or endpoints projection to the other curve.\n this.testAndRecordFractionalPairApproach(cpA, fractionA0, fractionA1, true, arc, 0, 1, true, reversed);\n // 3) arc tangent parallel to line segment (or string).\n // If line does not intersect the arc, then the closest (and/or the furthest) point on arc to the line is a\n // point where the tangent line on arc at that point is parallel to the line.\n this.allPerpendicularsSegmentArcBounded(cpA, pointA0, fractionA0, pointA1, fractionA1, arc, reversed);\n }\n /**\n * Compute segments perpendicular to two elliptical arcs, without extending either curve.\n * * Perpendiculars from an endpoint are not explicitly computed.\n * * Intersections are also found by this search: they are reported as zero-length segments.\n * @param reversed swap the details in the recorded pair (default: false)\n */\n public allPerpendicularsArcArcBounded(arc0: Arc3d, arc1: Arc3d, reversed: boolean = false): void {\n const newtonEvaluator = new CurveCurveCloseApproachXYRRtoRRD(arc0, arc1);\n // HEURISTIC: 2 ellipses have up to 8 perpendiculars and up to 4 intersections\n const seedDelta = 1 / 10; // denominator 9 fails the unit test\n const seedStart = seedDelta / 2;\n const newtonSearcher = new Newton2dUnboundedWithDerivative(newtonEvaluator, 100); // observed convergence to 1.0e-11 in 49 iters\n for (let seedU = seedStart; seedU < 1; seedU += seedDelta) {\n for (let seedV = seedStart; seedV < 1; seedV += seedDelta) {\n newtonSearcher.setUV(seedU, seedV);\n if (newtonSearcher.runIterations()) {\n const frac0 = newtonSearcher.getU();\n const frac1 = newtonSearcher.getV();\n if (this.acceptFraction(frac0) && this.acceptFraction(frac1)) {\n this.recordPointWithLocalFractions(frac0, arc0, 0, 1, frac1, arc1, 0, 1, reversed);\n }\n }\n }\n }\n }\n /** Low level dispatch of arc with Arc3d. */\n private dispatchArcArc(cpA: Arc3d, cpB: Arc3d, reversed: boolean): void {\n const rangeA = cpA.range();\n const rangeB = cpB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n // 1) endpoints to endpoints or endpoints projection to the other curve\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, true, cpB, 0, 1, true, reversed);\n // 2) perpendicular line between 2 arcs (includes intersections)\n this.allPerpendicularsArcArcBounded(cpA, cpB, reversed);\n }\n /** Low level dispatch of arc with (beziers of) a bspline curve */\n private dispatchArcBsplineCurve3d(cpA: Arc3d, cpB: BSplineCurve3d, reversed: boolean): void {\n const ls = LineString3d.create();\n cpB.emitStrokes(ls);\n this.computeArcLineString(cpA, ls, reversed);\n }\n /** Low level dispatch of (beziers of) a bspline curve with (beziers of) a bspline curve */\n private dispatchBSplineCurve3dBSplineCurve3d(\n bcurveA: BSplineCurve3dBase, bcurveB: BSplineCurve3dBase, reversed: boolean,\n ): void {\n const lsA = LineString3d.create();\n bcurveA.emitStrokes(lsA);\n const lsB = LineString3d.create();\n bcurveB.emitStrokes(lsB);\n this.computeLineStringLineString(lsA, lsB, reversed);\n }\n /** Low level dispatch of linestring with (beziers of) a bspline curve */\n public dispatchLineStringBSplineCurve(lsA: LineString3d, curveB: BSplineCurve3d, reversed: boolean): any {\n const lsB = LineString3d.create();\n curveB.emitStrokes(lsB);\n this.computeLineStringLineString(lsA, lsB, reversed);\n }\n /** Low level dispatch of segment with (beziers of) a bspline curve */\n public dispatchSegmentBsplineCurve(segA: LineSegment3d, curveB: BSplineCurve3d, reversed: boolean): any {\n const lsB = LineString3d.create();\n curveB.emitStrokes(lsB);\n this.computeSegmentLineString(segA, lsB, reversed);\n }\n /** Detail computation for segment approaching linestring. */\n public computeSegmentLineString(segA: LineSegment3d, lsB: LineString3d, reversed: boolean): void {\n const numB = lsB.numPoints();\n const deltaFracB = Geometry.safeDivideFraction(1, numB - 1, 0);\n const pointA0 = segA.point0Ref;\n const pointA1 = segA.point1Ref;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n for (let i = 0; i < numB - 1; ++i) {\n const fB0 = i * deltaFracB; // global linestring fractions\n const fB1 = (i + 1 === numB - 1) ? 1.0 : (i + 1) * deltaFracB; // make sure we nail the end fraction\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i, pointB0);\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(i + 1, pointB1);\n this.dispatchSegmentSegment(segA, pointA0, 0.0, pointA1, 1.0, lsB, pointB0, fB0, pointB1, fB1, reversed);\n }\n }\n /** Detail computation for arc approaching linestring. */\n public computeArcLineString(arcA: Arc3d, lsB: LineString3d, reversed: boolean): any {\n const rangeA = arcA.range();\n const rangeB = lsB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n const numB = lsB.numPoints();\n if (numB > 1) {\n const dfB = 1.0 / (numB - 1);\n let fB0;\n let fB1;\n fB0 = 0.0;\n lsB.pointAt(0, pointB0);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\n lsB.pointAt(ib, pointB1);\n fB1 = ib * dfB;\n this.dispatchSegmentArc(lsB, pointB0, fB0, pointB1, fB1, arcA, !reversed);\n }\n }\n return undefined;\n }\n /** Low level dispatch of curve collection. */\n private dispatchCurveCollection(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n const geomB = this._geometryB; // save\n if (!geomB || !geomB.children || !(geomB instanceof CurveCollection))\n return;\n for (const child of geomB.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this._geometryB = geomB; // restore\n }\n /** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */\n private dispatchCurveChainWithDistanceIndex(geomA: AnyCurve, geomAHandler: (geomA: any) => any): void {\n if (!this._geometryB || !(this._geometryB instanceof CurveChainWithDistanceIndex))\n return;\n if (geomA instanceof CurveChainWithDistanceIndex) {\n assert(false, \"call handleCurveChainWithDistanceIndex(geomA) instead\");\n }\n const index0 = this._results.length;\n const geomB = this._geometryB; // save\n for (const child of geomB.path.children) {\n this.resetGeometry(child);\n geomAHandler(geomA);\n }\n this.resetGeometry(geomB); // restore\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);\n }\n /** Double dispatch handler for strongly typed segment. */\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n const segmentB = this._geometryB;\n this.dispatchSegmentSegment(\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\n segmentB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0,\n false,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeSegmentLineString(segmentA, this._geometryB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchSegmentArc(segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._geometryB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));\n }\n return undefined;\n }\n /**\n * Set bits for comparison to range xy\n * * bit 0x01 => x smaller than range.low.x\n * * bit 0x02 => x larger than range.high.x\n * * bit 0x04 => y smaller than range.low.y\n * * bit 0x08 => y larger than range.high.y\n * * If we divide XY plane into 9 areas using the range, the function returns 0 for points\n * inside the range. Below is other binary numbers returned by the function for all 9 areas:\n * 1001 | 1000 | 1010\n * ------------------\n * 1 | 0 | 10\n * ------------------\n * 101 | 100 | 110\n * @param xy point to test\n * @param range range for comparison\n */\n private classifyBitsPointRangeXY(x: number, y: number, range: Range3d): number {\n let result = 0;\n if (x < range.low.x)\n result = 0x01;\n else if (x > range.high.x)\n result = 0x02;\n // note the OR operation\n if (y < range.low.y)\n result |= 0x04;\n else if (y > range.high.y)\n result |= 0x08;\n return result;\n }\n /** Low level dispatch of line string with line string. */\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean): void {\n const rangeA = lsA.range();\n const rangeB = lsB.range();\n rangeA.expandInPlace(this._maxDistanceToAccept!);\n if (!rangeB.intersectsRangeXY(rangeA))\n return;\n let bitB0: number;\n let bitB1: number;\n const rangeA1 = Range3d.createNull();\n const pointA0 = CurveCurveCloseApproachXY._workPointAA0;\n const pointA1 = CurveCurveCloseApproachXY._workPointAA1;\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n const numA = lsA.numPoints();\n const numB = lsB.numPoints();\n if (numA > 1 && numB > 1) {\n const dfA = 1.0 / (numA - 1);\n const dfB = 1.0 / (numB - 1);\n let fA0 = 0.0;\n let fA1, fB0, fB1;\n lsA.pointAt(0, pointA0);\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\n fA1 = ia * dfA;\n fB0 = 0.0;\n lsA.pointAt(ia, pointA1);\n // rangeA1 is around line segment [A0,A1] expanded by max distance\n rangeA1.setNull();\n rangeA1.extendPoint(pointA0);\n rangeA1.extendPoint(pointA1);\n rangeA1.expandInPlace(this._maxDistanceToAccept!);\n if (rangeA1.intersectsRangeXY(rangeB)) {\n lsB.pointAt(0, pointB0);\n bitB0 = this.classifyBitsPointRangeXY(pointB0.x, pointB0.y, rangeA1);\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1, bitB0 = bitB1) {\n lsB.pointAt(ib, pointB1);\n bitB1 = this.classifyBitsPointRangeXY(pointB1.x, pointB1.y, rangeA1);\n fB1 = ib * dfB;\n // DO NOT study the segment in detail if both bitB bits are on for any of the 4 planes\n // (i.e., no intersection between rangeA1 and the range around line segment [B0,B1])\n if ((bitB0 & bitB1) === 0)\n this.dispatchSegmentSegment(lsA, pointA0, fA0, pointA1, fA1, lsB, pointB0, fB0, pointB1, fB1, reversed);\n }\n }\n }\n }\n }\n /** Double dispatch handler for strongly typed linestring. */\n public override handleLineString3d(lsA: LineString3d): any {\n if (this._geometryB instanceof LineString3d) {\n const lsB = this._geometryB;\n this.computeLineStringLineString(lsA, lsB, false);\n } else if (this._geometryB instanceof LineSegment3d) {\n this.computeSegmentLineString(this._geometryB, lsA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.computeArcLineString(this._geometryB, lsA, true);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed arc. */\n public override handleArc3d(arc0: Arc3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentArc(\n this._geometryB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, arc0, true,\n );\n } else if (this._geometryB instanceof LineString3d) {\n this.computeArcLineString(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcArc(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed bspline curve. */\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(this._geometryB, curve, true);\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, curve, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, curve, true);\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\n } else if (this._geometryB instanceof CurveCollection) {\n this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));\n } else if (this._geometryB instanceof CurveChainWithDistanceIndex) {\n this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));\n }\n return undefined;\n }\n /** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */\n public override handleCurveChainWithDistanceIndex(chain: CurveChainWithDistanceIndex): any {\n super.handleCurveChainWithDistanceIndex(chain);\n // if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex\n this._results = CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);\n }\n /** Double dispatch handler for strongly typed homogeneous bspline curve .. */\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\n /*\n //NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH.\n // \"easy\" if both present BezierCurve3dH span loaders\n if (this._geometryB instanceof LineSegment3d) {\n this.dispatchSegmentBsplineCurve(\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\n curve, this._extendA, true);\n } else if (this._geometryB instanceof LineString3d) {\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\n } else if (this._geometryB instanceof Arc3d) {\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\n }\n */\n return undefined;\n }\n}\n"]}
@@ -26,7 +26,6 @@ export declare class CurveCurveIntersectXY extends RecurseToCurvesGeometryHandle
26
26
  private _worldToLocalPerspective;
27
27
  private _worldToLocalAffine;
28
28
  private _coincidentGeometryContext;
29
- private static _workVector2dA;
30
29
  private static _workPointA0H;
31
30
  private static _workPointA1H;
32
31
  private static _workPointB0H;
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,6 @@ const CoincidentGeometryOps_1 = require("../../geometry3d/CoincidentGeometryOps"
15
15
  const GeometryHandler_1 = require("../../geometry3d/GeometryHandler");
16
16
  const GrowableFloat64Array_1 = require("../../geometry3d/GrowableFloat64Array");
17
17
  const Matrix3d_1 = require("../../geometry3d/Matrix3d");
18
- const Point2dVector2d_1 = require("../../geometry3d/Point2dVector2d");
19
18
  const Point3dVector3d_1 = require("../../geometry3d/Point3dVector3d");
20
19
  const Point4d_1 = require("../../geometry4d/Point4d");
21
20
  const BezierPolynomials_1 = require("../../numerics/BezierPolynomials");
@@ -47,7 +46,6 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
47
46
  _worldToLocalPerspective;
48
47
  _worldToLocalAffine;
49
48
  _coincidentGeometryContext;
50
- static _workVector2dA = Point2dVector2d_1.Vector2d.create();
51
49
  static _workPointA0H = Point4d_1.Point4d.create();
52
50
  static _workPointA1H = Point4d_1.Point4d.create();
53
51
  static _workPointB0H = Point4d_1.Point4d.create();
@@ -199,21 +197,25 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
199
197
  }
200
198
  /** Compute intersection of two line segments. Filter by extension rules. Record with fraction mapping. */
201
199
  computeSegmentSegment3D(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, cpB, extendB0, pointB0, fractionB0, pointB1, fractionB1, extendB1, reversed) {
202
- const uv = CurveCurveIntersectXY._workVector2dA;
203
- // Problem: Normal practice is to do the (quick, simple) transverse intersection first
204
- // But the transverse intersector notion of coincidence is based on the determinant ratios, which are hard
205
- // to relate to physical tolerance.
206
- // So do the overlap first. This should do a quick exit in non-coincident case.
207
- const overlap = this._coincidentGeometryContext.coincidentSegmentRangeXY(pointA0, pointA1, pointB0, pointB1, false);
208
- if (overlap) { // the lines are coincident
209
- if (this._coincidentGeometryContext.clampCoincidentOverlapToSegmentBounds(overlap, pointA0, pointA1, pointB0, pointB1, extendA0, extendA1, extendB0, extendB1)) {
200
+ const aDir = { x: pointA1.x - pointA0.x, y: pointA1.y - pointA0.y };
201
+ const bDir = { x: pointB1.x - pointB0.x, y: pointB1.y - pointB0.y };
202
+ const tol = this._coincidentGeometryContext.tolerance;
203
+ const fractions = SmallSystem_1.SmallSystem.lineSegmentXYUVIntersectionUnbounded(pointA0, aDir, pointB0, bDir, tol);
204
+ if (!fractions)
205
+ return;
206
+ if (fractions.f1) { // the lines are coincident
207
+ const detailA = CurveLocationDetail_1.CurveLocationDetail.createCurveFractionPoint(undefined, fractions.f0.x, pointA0.interpolate(fractions.f0.x, pointA1));
208
+ detailA.captureFraction1Point1(fractions.f1.x, pointA0.interpolate(fractions.f1.x, pointA1));
209
+ const detailB = CurveLocationDetail_1.CurveLocationDetail.createCurveFractionPoint(undefined, fractions.f0.y, pointB0.interpolate(fractions.f0.y, pointB1));
210
+ detailB.captureFraction1Point1(fractions.f1.y, pointB0.interpolate(fractions.f1.y, pointB1));
211
+ const overlap = CurveLocationDetail_1.CurveLocationDetailPair.createCapture(detailA, detailB);
212
+ if (this._coincidentGeometryContext.clampCoincidentOverlapToSegmentBounds(overlap, pointA0, pointA1, pointB0, pointB1, extendA0, extendA1, extendB0, extendB1))
210
213
  this.recordPointWithLocalFractions(overlap.detailA.fraction, cpA, fractionA0, fractionA1, overlap.detailB.fraction, cpB, fractionB0, fractionB1, reversed, overlap);
211
- }
212
214
  }
213
- else if (SmallSystem_1.SmallSystem.lineSegment3dXYTransverseIntersectionUnbounded(pointA0, pointA1, pointB0, pointB1, uv)) {
214
- if (this.acceptFractionOnLine(extendA0, uv.x, extendA1, pointA0, pointA1, this._coincidentGeometryContext.tolerance) &&
215
- this.acceptFractionOnLine(extendB0, uv.y, extendB1, pointB0, pointB1, this._coincidentGeometryContext.tolerance)) {
216
- this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
215
+ else { // the lines have a transverse intersection
216
+ if (this.acceptFractionOnLine(extendA0, fractions.f0.x, extendA1, pointA0, pointA1, tol)) {
217
+ if (this.acceptFractionOnLine(extendB0, fractions.f0.y, extendB1, pointB0, pointB1, tol))
218
+ this.recordPointWithLocalFractions(fractions.f0.x, cpA, fractionA0, fractionA1, fractions.f0.y, cpB, fractionB0, fractionB1, reversed);
217
219
  }
218
220
  }
219
221
  }
@@ -261,6 +263,8 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
261
263
  // The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.
262
264
  // The fraction and extend parameters allow all combinations to be passed in.
263
265
  dispatchSegmentArc(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, arc, extendB0, extendB1, reversed) {
266
+ const tol2 = this._coincidentGeometryContext.tolerance * this._coincidentGeometryContext.tolerance;
267
+ let dist2;
264
268
  // Arc: X = C + cU + sV
265
269
  // Line: contains points A0,A1
266
270
  // Arc point colinear with line if det (A0, A1, X) = 0
@@ -271,6 +275,10 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
271
275
  // project back to line.
272
276
  if (this._worldToLocalPerspective) {
273
277
  const data = arc.toTransformedPoint4d(this._worldToLocalPerspective);
278
+ const radians0 = data.sweep.fractionToRadians(0);
279
+ const pointB0H = data.center.plus2Scaled(data.vector0, Math.cos(radians0), data.vector90, Math.sin(radians0));
280
+ const radians1 = data.sweep.fractionToRadians(1);
281
+ const pointB1H = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));
274
282
  const pointA0H = this._worldToLocalPerspective.multiplyPoint3d(pointA0, 1);
275
283
  const pointA1H = this._worldToLocalPerspective.multiplyPoint3d(pointA1, 1);
276
284
  const alpha = Geometry_1.Geometry.tripleProductPoint4dXYW(pointA0H, pointA1H, data.center);
@@ -280,19 +288,31 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
280
288
  const sines = new GrowableFloat64Array_1.GrowableFloat64Array(2);
281
289
  const radians = new GrowableFloat64Array_1.GrowableFloat64Array(2);
282
290
  const numRoots = Polynomials_1.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
291
+ if (numRoots <= 0)
292
+ return;
283
293
  for (let i = 0; i < numRoots; i++) {
284
294
  const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
285
- const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
295
+ let arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
286
296
  const lineFraction = SmallSystem_1.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, arcPoint);
287
- if (lineFraction !== undefined &&
288
- this.acceptFraction(extendA0, lineFraction, extendA1) &&
289
- this.acceptFraction(extendB0, arcFraction, extendB1)) {
290
- this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
297
+ if (lineFraction !== undefined) {
298
+ if (this.acceptFraction(extendA0, lineFraction, extendA1) && this.acceptFraction(extendB0, arcFraction, extendB1)) {
299
+ this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
300
+ }
301
+ else { // check for endpoint intersections beyond parametric tolerance but within point tolerance
302
+ const pointAH = lineFraction < 0.5 ? pointA0H : pointA1H;
303
+ const pointBH = (arcFraction = data.sweep.fractionToSignedPeriodicFraction(arcFraction)) < 0.5 ? pointB0H : pointB1H;
304
+ if ((dist2 = pointAH.realDistanceSquaredXY(pointBH)) !== undefined && Geometry_1.Geometry.isDistanceWithinTol(dist2, tol2))
305
+ this.recordPointWithLocalFractions(lineFraction < 0.5 ? 0 : 1, cpA, fractionA0, fractionA1, arcFraction < 0.5 ? 0 : 1, arc, 0, 1, reversed);
306
+ }
291
307
  }
292
308
  }
293
309
  }
294
310
  else {
295
311
  const data = arc.toTransformedVectors(this._worldToLocalAffine);
312
+ const radians0 = data.sweep.fractionToRadians(0);
313
+ const pointB0Local = data.center.plus2Scaled(data.vector0, Math.cos(radians0), data.vector90, Math.sin(radians0));
314
+ const radians1 = data.sweep.fractionToRadians(1);
315
+ const pointB1Local = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));
296
316
  let pointA0Local = pointA0;
297
317
  let pointA1Local = pointA1;
298
318
  if (this._worldToLocalAffine) {
@@ -306,16 +326,22 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
306
326
  const sines = new GrowableFloat64Array_1.GrowableFloat64Array(2);
307
327
  const radians = new GrowableFloat64Array_1.GrowableFloat64Array(2);
308
328
  const numRoots = Polynomials_1.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
309
- const lineFractionTol = 1.0e-10; // TODO: why are we loosening tolerances here?
310
- const arcFractionTol = 1.0e-7;
329
+ if (numRoots <= 0)
330
+ return;
311
331
  for (let i = 0; i < numRoots; i++) {
312
332
  const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
313
- const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
333
+ let arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
314
334
  const lineFraction = SmallSystem_1.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);
315
- if (lineFraction !== undefined &&
316
- this.acceptFraction(extendA0, lineFraction, extendA1, lineFractionTol) &&
317
- this.acceptFraction(extendB0, arcFraction, extendB1, arcFractionTol)) {
318
- this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
335
+ if (lineFraction !== undefined) {
336
+ if (this.acceptFraction(extendA0, lineFraction, extendA1) && this.acceptFraction(extendB0, arcFraction, extendB1)) {
337
+ this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
338
+ }
339
+ else { // check for endpoint intersections beyond parametric tolerance but within point tolerance
340
+ const pointALocal = lineFraction < 0.5 ? pointA0Local : pointA1Local;
341
+ const pointBLocal = (arcFraction = data.sweep.fractionToSignedPeriodicFraction(arcFraction)) < 0.5 ? pointB0Local : pointB1Local;
342
+ if ((dist2 = pointALocal.distanceSquaredXY(pointBLocal)) !== undefined && Geometry_1.Geometry.isDistanceWithinTol(dist2, tol2))
343
+ this.recordPointWithLocalFractions(lineFraction < 0.5 ? 0 : 1, cpA, fractionA0, fractionA1, arcFraction < 0.5 ? 0 : 1, arc, 0, 1, reversed);
344
+ }
319
345
  }
320
346
  }
321
347
  }
@@ -483,7 +509,7 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
483
509
  }
484
510
  return ranges;
485
511
  }
486
- dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients.
512
+ dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients
487
513
  reversed) {
488
514
  if (!this._xyzwA0)
489
515
  this._xyzwA0 = Point4d_1.Point4d.create();
@@ -527,7 +553,7 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
527
553
  let bezierBFraction = r;
528
554
  bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);
529
555
  const segmentAFraction = SmallSystem_1.SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);
530
- if (segmentAFraction && Geometry_1.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
556
+ if (segmentAFraction !== undefined && Geometry_1.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
531
557
  let bezierAFraction = Geometry_1.Geometry.interpolate(f0, segmentAFraction, f1);
532
558
  // We have a near intersection at fractions on the two beziers
533
559
  // Iterate on the curves for a true intersection
@@ -562,7 +588,7 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
562
588
  }
563
589
  }
564
590
  }
565
- dispatchBSplineCurve3dBSplineCurve3d(bcurveA, bcurveB, _reversed) {
591
+ dispatchBSplineCurve3dBSplineCurve3d(bcurveA, bcurveB, reversed) {
566
592
  const bezierSpanA = bcurveA.collectBezierSpans(true);
567
593
  const bezierSpanB = bcurveB.collectBezierSpans(true);
568
594
  const numA = bezierSpanA.length;
@@ -581,9 +607,9 @@ class CurveCurveIntersectXY extends GeometryHandler_1.RecurseToCurvesGeometryHan
581
607
  const strokeCountA = bezierSpanA[a].computeStrokeCountForOptions();
582
608
  const strokeCountB = bezierSpanB[b].computeStrokeCountForOptions();
583
609
  if (strokeCountA < strokeCountB)
584
- this.dispatchBezierBezierStrokeFirst(bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, _reversed);
610
+ this.dispatchBezierBezierStrokeFirst(bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, reversed);
585
611
  else
586
- this.dispatchBezierBezierStrokeFirst(bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !_reversed);
612
+ this.dispatchBezierBezierStrokeFirst(bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !reversed);
587
613
  }
588
614
  }
589
615
  }