@itwin/core-geometry 4.1.0-dev.8 → 4.1.0-dev.80

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 (896) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  7. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js +2 -2
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  15. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
  19. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  20. package/lib/cjs/bspline/BezierCurveBase.js +2 -2
  21. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  22. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  23. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  24. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  25. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
  26. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  27. package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
  28. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  29. package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
  30. package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
  31. package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
  32. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  33. package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
  34. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  35. package/lib/cjs/clipping/BooleanClipNode.js +11 -11
  36. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  37. package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
  38. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ClipPlane.js +105 -86
  40. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  41. package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
  42. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  43. package/lib/cjs/clipping/ClipPrimitive.js +112 -54
  44. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  45. package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
  46. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  47. package/lib/cjs/clipping/ClipUtils.js +33 -29
  48. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  49. package/lib/cjs/clipping/ClipVector.d.ts +39 -25
  50. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  51. package/lib/cjs/clipping/ClipVector.js +35 -23
  52. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  53. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
  54. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  55. package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
  56. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  57. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  58. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  60. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  62. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  63. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  64. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  65. package/lib/cjs/core-geometry.d.ts +5 -1
  66. package/lib/cjs/core-geometry.d.ts.map +1 -1
  67. package/lib/cjs/core-geometry.js +5 -1
  68. package/lib/cjs/core-geometry.js.map +1 -1
  69. package/lib/cjs/curve/Arc3d.d.ts +4 -3
  70. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  71. package/lib/cjs/curve/Arc3d.js +7 -5
  72. package/lib/cjs/curve/Arc3d.js.map +1 -1
  73. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  74. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  75. package/lib/cjs/curve/CurveChain.js.map +1 -1
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  78. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
  79. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  80. package/lib/cjs/curve/CurveCollection.d.ts +36 -26
  81. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  82. package/lib/cjs/curve/CurveCollection.js +46 -39
  83. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  84. package/lib/cjs/curve/CurveCurve.d.ts +6 -2
  85. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  86. package/lib/cjs/curve/CurveCurve.js +13 -9
  87. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  88. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +74 -68
  89. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
  90. package/lib/cjs/curve/CurveCurveCloseApproachXY.js +100 -108
  91. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
  92. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +46 -48
  93. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurveCurveIntersectXY.js +72 -61
  95. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  96. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts +32 -38
  97. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
  98. package/lib/cjs/curve/CurveCurveIntersectXYZ.js +86 -97
  99. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
  100. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  101. package/lib/cjs/curve/CurveFactory.d.ts +67 -3
  102. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  103. package/lib/cjs/curve/CurveFactory.js +75 -7
  104. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  105. package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
  106. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  107. package/lib/cjs/curve/CurveLocationDetail.js +9 -7
  108. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  109. package/lib/cjs/curve/CurveOps.d.ts +77 -0
  110. package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
  111. package/lib/cjs/curve/CurveOps.js +160 -0
  112. package/lib/cjs/curve/CurveOps.js.map +1 -0
  113. package/lib/cjs/curve/CurvePrimitive.d.ts +26 -18
  114. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  115. package/lib/cjs/curve/CurvePrimitive.js +4 -3
  116. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  117. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  118. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  119. package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
  120. package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
  121. package/lib/cjs/curve/GeometryQuery.js +2 -2
  122. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  123. package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
  124. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  125. package/lib/cjs/curve/LineSegment3d.js +6 -6
  126. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  127. package/lib/cjs/curve/LineString3d.d.ts +2 -2
  128. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  129. package/lib/cjs/curve/LineString3d.js +3 -3
  130. package/lib/cjs/curve/LineString3d.js.map +1 -1
  131. package/lib/cjs/curve/Loop.d.ts +7 -5
  132. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  133. package/lib/cjs/curve/Loop.js +18 -6
  134. package/lib/cjs/curve/Loop.js.map +1 -1
  135. package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
  136. package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
  137. package/lib/cjs/curve/OffsetOptions.js +166 -0
  138. package/lib/cjs/curve/OffsetOptions.js.map +1 -0
  139. package/lib/cjs/curve/ParityRegion.d.ts +7 -7
  140. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  141. package/lib/cjs/curve/ParityRegion.js +19 -11
  142. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  143. package/lib/cjs/curve/Path.d.ts +6 -6
  144. package/lib/cjs/curve/Path.d.ts.map +1 -1
  145. package/lib/cjs/curve/Path.js +15 -9
  146. package/lib/cjs/curve/Path.js.map +1 -1
  147. package/lib/cjs/curve/PointString3d.js.map +1 -1
  148. package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
  149. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  150. package/lib/cjs/curve/ProxyCurve.js +7 -7
  151. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  152. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  153. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  154. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  155. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  156. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  157. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  158. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  159. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  160. package/lib/cjs/curve/RegionOps.d.ts +76 -56
  161. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  162. package/lib/cjs/curve/RegionOps.js +83 -60
  163. package/lib/cjs/curve/RegionOps.js.map +1 -1
  164. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
  165. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  166. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  167. package/lib/cjs/curve/StrokeOptions.js +6 -2
  168. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  169. package/lib/cjs/curve/UnionRegion.d.ts +6 -5
  170. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  171. package/lib/cjs/curve/UnionRegion.js +17 -8
  172. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  173. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  174. package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  175. package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  176. package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  177. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  178. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  179. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  180. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  181. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  182. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  183. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  184. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
  185. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  186. package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
  187. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  188. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  189. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  190. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
  191. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  192. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  193. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  194. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  195. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  196. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  197. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  198. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  199. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
  200. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  201. package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  202. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
  203. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  204. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  205. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  206. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  207. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  208. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  209. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  210. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  211. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
  212. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  213. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  214. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  215. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  216. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  217. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  218. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  219. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
  220. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  221. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
  222. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  223. package/lib/cjs/geometry3d/Angle.d.ts +9 -0
  224. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  225. package/lib/cjs/geometry3d/Angle.js +13 -0
  226. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  227. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  228. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  229. package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
  230. package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
  232. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  233. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  234. package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
  235. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  236. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  237. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  238. package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
  239. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  240. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  241. package/lib/cjs/geometry3d/GeometryHandler.d.ts +103 -97
  242. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  243. package/lib/cjs/geometry3d/GeometryHandler.js +247 -124
  244. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  245. package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  246. package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
  247. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  248. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  249. package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
  250. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  251. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  252. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  253. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  254. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  255. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  256. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  257. package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
  258. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  259. package/lib/cjs/geometry3d/Matrix3d.js +32 -5
  260. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  261. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  262. package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
  263. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  264. package/lib/cjs/geometry3d/Plane3d.js +11 -8
  265. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  266. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  267. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  268. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  269. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  270. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  271. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  272. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  273. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  274. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  275. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
  276. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  277. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
  278. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  279. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  280. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
  281. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  282. package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
  283. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  284. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  285. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  286. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  287. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  288. package/lib/cjs/geometry3d/PolygonOps.d.ts +6 -2
  289. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  290. package/lib/cjs/geometry3d/PolygonOps.js +31 -22
  291. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  292. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  293. package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
  294. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  295. package/lib/cjs/geometry3d/PolylineOps.js +55 -0
  296. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  297. package/lib/cjs/geometry3d/Range.d.ts +134 -94
  298. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  299. package/lib/cjs/geometry3d/Range.js +297 -145
  300. package/lib/cjs/geometry3d/Range.js.map +1 -1
  301. package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
  302. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
  303. package/lib/cjs/geometry3d/Ray2d.js +146 -0
  304. package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
  305. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  306. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  307. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  308. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  309. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  310. package/lib/cjs/geometry3d/Transform.d.ts +10 -3
  311. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  312. package/lib/cjs/geometry3d/Transform.js +18 -6
  313. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  314. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  315. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  316. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  317. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  318. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  319. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  320. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  321. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  322. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  323. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  324. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  325. package/lib/cjs/numerics/Complex.js.map +1 -1
  326. package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
  327. package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
  328. package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
  329. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  330. package/lib/cjs/numerics/Newton.js.map +1 -1
  331. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  332. package/lib/cjs/numerics/PolarData.js.map +1 -1
  333. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  334. package/lib/cjs/numerics/Polynomials.js +0 -2
  335. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  336. package/lib/cjs/numerics/Quadrature.js +5 -5
  337. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  338. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  339. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  340. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  341. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  342. package/lib/cjs/polyface/AuxData.js.map +1 -1
  343. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  344. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  345. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  346. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  347. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  348. package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
  349. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  350. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  351. package/lib/cjs/polyface/Polyface.js.map +1 -1
  352. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  353. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  354. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  355. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  356. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  357. package/lib/cjs/polyface/PolyfaceQuery.d.ts +93 -14
  358. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  359. package/lib/cjs/polyface/PolyfaceQuery.js +173 -34
  360. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  361. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  362. package/lib/cjs/polyface/TaggedNumericData.js +1 -1
  363. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  364. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  365. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  366. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  367. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
  368. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
  369. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
  370. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  371. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
  372. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
  373. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
  374. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  375. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
  376. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
  377. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
  378. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  379. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  380. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
  381. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
  382. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  383. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  384. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
  385. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  386. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +104 -1
  387. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  388. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  389. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  390. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  391. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  392. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  393. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  394. package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
  395. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  396. package/lib/cjs/serialization/GeometrySamples.js +30 -0
  397. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  398. package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
  399. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  400. package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
  401. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  402. package/lib/cjs/solid/Box.js.map +1 -1
  403. package/lib/cjs/solid/Cone.js.map +1 -1
  404. package/lib/cjs/solid/LinearSweep.d.ts +2 -1
  405. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  406. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  407. package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
  408. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  409. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  410. package/lib/cjs/solid/RuledSweep.d.ts +2 -1
  411. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  412. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  413. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  414. package/lib/cjs/solid/Sphere.js.map +1 -1
  415. package/lib/cjs/solid/SweepContour.d.ts +2 -2
  416. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  417. package/lib/cjs/solid/SweepContour.js +9 -0
  418. package/lib/cjs/solid/SweepContour.js.map +1 -1
  419. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  420. package/lib/cjs/topology/ChainMerge.js +1 -1
  421. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  422. package/lib/cjs/topology/Graph.js.map +1 -1
  423. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  424. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  425. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
  426. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  427. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
  428. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  429. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  430. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  431. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  432. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  433. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  434. package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  435. package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
  436. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  437. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  438. package/lib/cjs/topology/MaskManager.js.map +1 -1
  439. package/lib/cjs/topology/Merging.js.map +1 -1
  440. package/lib/cjs/topology/RegularizeFace.js +3 -3
  441. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  442. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  443. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  444. package/lib/cjs/topology/Triangulation.js +1 -1
  445. package/lib/cjs/topology/Triangulation.js.map +1 -1
  446. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  447. package/lib/esm/Constant.js.map +1 -1
  448. package/lib/esm/Geometry.js.map +1 -1
  449. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  450. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  451. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  452. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  453. package/lib/esm/bspline/BSplineCurve.js +1 -1
  454. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  455. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  456. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  457. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  458. package/lib/esm/bspline/BSplineSurface.js +1 -1
  459. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  460. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  461. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  462. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  463. package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
  464. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  465. package/lib/esm/bspline/BezierCurveBase.js +1 -1
  466. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  467. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  468. package/lib/esm/bspline/KnotVector.js.map +1 -1
  469. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  470. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
  471. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  472. package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
  473. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  474. package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
  475. package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
  476. package/lib/esm/clipping/BooleanClipFactory.js +28 -28
  477. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  478. package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
  479. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  480. package/lib/esm/clipping/BooleanClipNode.js +11 -11
  481. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  482. package/lib/esm/clipping/ClipPlane.d.ts +73 -76
  483. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  484. package/lib/esm/clipping/ClipPlane.js +105 -86
  485. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  486. package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
  487. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  488. package/lib/esm/clipping/ClipPrimitive.js +112 -54
  489. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  490. package/lib/esm/clipping/ClipUtils.d.ts +54 -44
  491. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  492. package/lib/esm/clipping/ClipUtils.js +33 -29
  493. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  494. package/lib/esm/clipping/ClipVector.d.ts +39 -25
  495. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  496. package/lib/esm/clipping/ClipVector.js +35 -23
  497. package/lib/esm/clipping/ClipVector.js.map +1 -1
  498. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
  499. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  500. package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
  501. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  502. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  503. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  504. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  505. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  506. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  507. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  508. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  509. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  510. package/lib/esm/core-geometry.d.ts +5 -1
  511. package/lib/esm/core-geometry.d.ts.map +1 -1
  512. package/lib/esm/core-geometry.js +5 -1
  513. package/lib/esm/core-geometry.js.map +1 -1
  514. package/lib/esm/curve/Arc3d.d.ts +4 -3
  515. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  516. package/lib/esm/curve/Arc3d.js +6 -4
  517. package/lib/esm/curve/Arc3d.js.map +1 -1
  518. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  519. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  520. package/lib/esm/curve/CurveChain.js.map +1 -1
  521. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  522. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  523. package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
  524. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  525. package/lib/esm/curve/CurveCollection.d.ts +36 -26
  526. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  527. package/lib/esm/curve/CurveCollection.js +46 -39
  528. package/lib/esm/curve/CurveCollection.js.map +1 -1
  529. package/lib/esm/curve/CurveCurve.d.ts +6 -2
  530. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  531. package/lib/esm/curve/CurveCurve.js +13 -9
  532. package/lib/esm/curve/CurveCurve.js.map +1 -1
  533. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +74 -68
  534. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
  535. package/lib/esm/curve/CurveCurveCloseApproachXY.js +100 -108
  536. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
  537. package/lib/esm/curve/CurveCurveIntersectXY.d.ts +46 -48
  538. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  539. package/lib/esm/curve/CurveCurveIntersectXY.js +72 -61
  540. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  541. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts +32 -38
  542. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
  543. package/lib/esm/curve/CurveCurveIntersectXYZ.js +86 -97
  544. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
  545. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  546. package/lib/esm/curve/CurveFactory.d.ts +67 -3
  547. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  548. package/lib/esm/curve/CurveFactory.js +74 -6
  549. package/lib/esm/curve/CurveFactory.js.map +1 -1
  550. package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
  551. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  552. package/lib/esm/curve/CurveLocationDetail.js +9 -7
  553. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  554. package/lib/esm/curve/CurveOps.d.ts +77 -0
  555. package/lib/esm/curve/CurveOps.d.ts.map +1 -0
  556. package/lib/esm/curve/CurveOps.js +156 -0
  557. package/lib/esm/curve/CurveOps.js.map +1 -0
  558. package/lib/esm/curve/CurvePrimitive.d.ts +26 -18
  559. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  560. package/lib/esm/curve/CurvePrimitive.js +4 -3
  561. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  562. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  563. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  564. package/lib/esm/curve/GeometryQuery.d.ts +2 -2
  565. package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
  566. package/lib/esm/curve/GeometryQuery.js +2 -2
  567. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  568. package/lib/esm/curve/LineSegment3d.d.ts +7 -5
  569. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  570. package/lib/esm/curve/LineSegment3d.js +5 -5
  571. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  572. package/lib/esm/curve/LineString3d.d.ts +2 -2
  573. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  574. package/lib/esm/curve/LineString3d.js +2 -2
  575. package/lib/esm/curve/LineString3d.js.map +1 -1
  576. package/lib/esm/curve/Loop.d.ts +7 -5
  577. package/lib/esm/curve/Loop.d.ts.map +1 -1
  578. package/lib/esm/curve/Loop.js +18 -6
  579. package/lib/esm/curve/Loop.js.map +1 -1
  580. package/lib/esm/curve/OffsetOptions.d.ts +97 -0
  581. package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
  582. package/lib/esm/curve/OffsetOptions.js +161 -0
  583. package/lib/esm/curve/OffsetOptions.js.map +1 -0
  584. package/lib/esm/curve/ParityRegion.d.ts +7 -7
  585. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  586. package/lib/esm/curve/ParityRegion.js +19 -11
  587. package/lib/esm/curve/ParityRegion.js.map +1 -1
  588. package/lib/esm/curve/Path.d.ts +6 -6
  589. package/lib/esm/curve/Path.d.ts.map +1 -1
  590. package/lib/esm/curve/Path.js +15 -9
  591. package/lib/esm/curve/Path.js.map +1 -1
  592. package/lib/esm/curve/PointString3d.js.map +1 -1
  593. package/lib/esm/curve/ProxyCurve.d.ts +5 -7
  594. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  595. package/lib/esm/curve/ProxyCurve.js +7 -7
  596. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  597. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  598. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  599. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  600. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  601. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  602. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  603. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  604. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  605. package/lib/esm/curve/RegionOps.d.ts +76 -56
  606. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  607. package/lib/esm/curve/RegionOps.js +84 -61
  608. package/lib/esm/curve/RegionOps.js.map +1 -1
  609. package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
  610. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  611. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  612. package/lib/esm/curve/StrokeOptions.js +6 -2
  613. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  614. package/lib/esm/curve/UnionRegion.d.ts +6 -5
  615. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  616. package/lib/esm/curve/UnionRegion.js +17 -8
  617. package/lib/esm/curve/UnionRegion.js.map +1 -1
  618. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  619. package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  620. package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  621. package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  622. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  623. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  624. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  625. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  626. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  627. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  628. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  629. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
  630. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  631. package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
  632. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  633. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  634. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  635. package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
  636. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  637. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  638. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  639. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  640. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  641. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  642. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  643. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  644. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
  645. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  646. package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  647. package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
  648. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  649. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  650. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  651. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  652. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  653. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  654. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  655. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  656. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
  657. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  658. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  659. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  660. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  661. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  662. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  663. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  664. package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
  665. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  666. package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
  667. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  668. package/lib/esm/geometry3d/Angle.d.ts +9 -0
  669. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  670. package/lib/esm/geometry3d/Angle.js +13 -0
  671. package/lib/esm/geometry3d/Angle.js.map +1 -1
  672. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  673. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  674. package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
  675. package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
  676. package/lib/esm/geometry3d/BilinearPatch.js +51 -55
  677. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  678. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  679. package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
  680. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  681. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  682. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  683. package/lib/esm/geometry3d/FrameBuilder.js +13 -11
  684. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  685. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  686. package/lib/esm/geometry3d/GeometryHandler.d.ts +103 -97
  687. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  688. package/lib/esm/geometry3d/GeometryHandler.js +247 -124
  689. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  690. package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  691. package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
  692. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  693. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  694. package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
  695. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  696. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  697. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  698. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  699. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  700. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  701. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  702. package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
  703. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  704. package/lib/esm/geometry3d/Matrix3d.js +32 -5
  705. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  706. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  707. package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
  708. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  709. package/lib/esm/geometry3d/Plane3d.js +11 -8
  710. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  711. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  712. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  713. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  714. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  715. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  716. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  717. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  718. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  719. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  720. package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
  721. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  722. package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
  723. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  724. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  725. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
  726. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  727. package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
  728. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  729. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  730. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  731. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  732. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  733. package/lib/esm/geometry3d/PolygonOps.d.ts +6 -2
  734. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  735. package/lib/esm/geometry3d/PolygonOps.js +31 -22
  736. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  737. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  738. package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
  739. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  740. package/lib/esm/geometry3d/PolylineOps.js +56 -1
  741. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  742. package/lib/esm/geometry3d/Range.d.ts +134 -94
  743. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  744. package/lib/esm/geometry3d/Range.js +297 -145
  745. package/lib/esm/geometry3d/Range.js.map +1 -1
  746. package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
  747. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
  748. package/lib/esm/geometry3d/Ray2d.js +142 -0
  749. package/lib/esm/geometry3d/Ray2d.js.map +1 -0
  750. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  751. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  752. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  753. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  754. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  755. package/lib/esm/geometry3d/Transform.d.ts +10 -3
  756. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  757. package/lib/esm/geometry3d/Transform.js +18 -6
  758. package/lib/esm/geometry3d/Transform.js.map +1 -1
  759. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  760. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  761. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  762. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  763. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  764. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  765. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  766. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  767. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  768. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  769. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  770. package/lib/esm/numerics/Complex.js.map +1 -1
  771. package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
  772. package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
  773. package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
  774. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  775. package/lib/esm/numerics/Newton.js.map +1 -1
  776. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  777. package/lib/esm/numerics/PolarData.js.map +1 -1
  778. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  779. package/lib/esm/numerics/Polynomials.js +0 -2
  780. package/lib/esm/numerics/Polynomials.js.map +1 -1
  781. package/lib/esm/numerics/Quadrature.js +5 -5
  782. package/lib/esm/numerics/Quadrature.js.map +1 -1
  783. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  784. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  785. package/lib/esm/numerics/UnionFind.js.map +1 -1
  786. package/lib/esm/numerics/UsageSums.js.map +1 -1
  787. package/lib/esm/polyface/AuxData.js.map +1 -1
  788. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  789. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  790. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  791. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  792. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  793. package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
  794. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  795. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  796. package/lib/esm/polyface/Polyface.js.map +1 -1
  797. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  798. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  799. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  800. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  801. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  802. package/lib/esm/polyface/PolyfaceQuery.d.ts +93 -14
  803. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  804. package/lib/esm/polyface/PolyfaceQuery.js +173 -35
  805. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  806. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  807. package/lib/esm/polyface/TaggedNumericData.js +1 -1
  808. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  809. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  810. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  811. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  812. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
  813. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
  814. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
  815. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  816. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
  817. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
  818. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
  819. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  820. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
  821. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
  822. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
  823. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  824. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  825. package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
  826. package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
  827. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  828. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  829. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
  830. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  831. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +102 -1
  832. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  833. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  834. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  835. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  836. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  837. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  838. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  839. package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
  840. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  841. package/lib/esm/serialization/GeometrySamples.js +30 -0
  842. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  843. package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
  844. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  845. package/lib/esm/serialization/IModelJsonSchema.js +2 -7
  846. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  847. package/lib/esm/solid/Box.js.map +1 -1
  848. package/lib/esm/solid/Cone.js.map +1 -1
  849. package/lib/esm/solid/LinearSweep.d.ts +2 -1
  850. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  851. package/lib/esm/solid/LinearSweep.js.map +1 -1
  852. package/lib/esm/solid/RotationalSweep.d.ts +2 -1
  853. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  854. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  855. package/lib/esm/solid/RuledSweep.d.ts +2 -1
  856. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  857. package/lib/esm/solid/RuledSweep.js.map +1 -1
  858. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  859. package/lib/esm/solid/Sphere.js.map +1 -1
  860. package/lib/esm/solid/SweepContour.d.ts +2 -2
  861. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  862. package/lib/esm/solid/SweepContour.js +9 -0
  863. package/lib/esm/solid/SweepContour.js.map +1 -1
  864. package/lib/esm/solid/TorusPipe.js.map +1 -1
  865. package/lib/esm/topology/ChainMerge.js +1 -1
  866. package/lib/esm/topology/ChainMerge.js.map +1 -1
  867. package/lib/esm/topology/Graph.js.map +1 -1
  868. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  869. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  870. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
  871. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  872. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
  873. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  874. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  875. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  876. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  877. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  878. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  879. package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  880. package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
  881. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  882. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  883. package/lib/esm/topology/MaskManager.js.map +1 -1
  884. package/lib/esm/topology/Merging.js.map +1 -1
  885. package/lib/esm/topology/RegularizeFace.js +3 -3
  886. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  887. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  888. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  889. package/lib/esm/topology/Triangulation.js +1 -1
  890. package/lib/esm/topology/Triangulation.js.map +1 -1
  891. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  892. package/package.json +6 -17
  893. package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
  894. package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
  895. package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
  896. package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurveCloseApproachXY.js","sourceRoot":"","sources":["../../../src/curve/CurveCurveCloseApproachXY.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { BSplineCurve3d, BSplineCurve3dBase } from \"../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { NullGeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { AnalyticRoots, SmallSystem } from \"../numerics/Polynomials\";\r\nimport { Arc3d } from \"./Arc3d\";\r\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { LineSegment3d } from \"./LineSegment3d\";\r\nimport { LineString3d } from \"./LineString3d\";\r\n\r\n// cspell:word XYRR\r\n/**\r\n * Set bits for comparison to range xy\r\n * * bit 0x01 => x smaller than range.low.x\r\n * * bit 0x02 => x larger than range.high.x\r\n * * bit 0x04 => x smaller than range.low.y\r\n * * bit 0x08 => x larger than range.high.y\r\n * @param xy point to test\r\n * @param range range for comparison\r\n */\r\nfunction classifyBitsPointRangeXY(x: number, y: number, range: Range3d): number {\r\n let result = 0;\r\n if (x < range.low.x)\r\n result = 0x01;\r\n else if (x > range.high.x)\r\n result = 0x02;\r\n\r\n if (y < range.low.y)\r\n result |= 0x04;\r\n else if (y > range.high.y)\r\n result |= 0x08;\r\n return result;\r\n}\r\n\r\n/**\r\n * * Instances are initialized and called from CurveCurve.\r\n * * Constructor is told two geometry items A and B\r\n * * geometryB is saved for later reference\r\n * * type-specific handler methods will \"see\" geometry A repeatedly.\r\n * * Hence geometryA is NOT saved by the constructor.\r\n * @internal\r\n */\r\nexport class CurveCurveCloseApproachXY extends NullGeometryHandler {\r\n // private geometryA: GeometryQuery; // nb never used -- passed through handlers.\r\n /* geometryA exists through the handler call.\r\n * geometryB is static through (possibly multiple) geometryA.\r\n * at geometryB setup time, a strongly typed version of geometryB may be saved.\r\n */\r\n private _geometryB: GeometryQuery | undefined;\r\n private _circularArcB: Arc3d | undefined;\r\n private _circularRadiusB: number | undefined;\r\n private setGeometryB(geometryB: GeometryQuery | undefined) {\r\n this._geometryB = geometryB;\r\n this._circularArcB = undefined;\r\n this._circularRadiusB = undefined;\r\n if (geometryB instanceof Arc3d) {\r\n const r = geometryB.circularRadiusXY();\r\n if (r !== undefined) {\r\n this._circularRadiusB = r;\r\n this._circularArcB = geometryB;\r\n }\r\n }\r\n }\r\n /** approach larger than this is not interesting.\r\n * This is caller defined and can be undefined.\r\n */\r\n private _maxDistanceToAccept: number | undefined;\r\n /** Squared max distance. This is private, and is forced to at least small metric distance squared */\r\n private _maxDistanceSquared: number;\r\n private _results!: CurveLocationDetailPair[];\r\n // private _coincidentGeometryContext: CoincidentGeometryQuery;\r\n private reinitialize() {\r\n this._results = [];\r\n }\r\n\r\n /**\r\n * @param _geometryA first curve for intersection. This is NOT saved.\r\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\r\n */\r\n public constructor(_geometryA: GeometryQuery | undefined, geometryB: GeometryQuery | undefined) {\r\n super();\r\n // this.geometryA = _geometryA;\r\n this.setGeometryB(geometryB);\r\n this._maxDistanceSquared = Geometry.smallMetricDistanceSquared;\r\n // this._coincidentGeometryContext = CoincidentGeometryQuery.create();\r\n this.reinitialize();\r\n }\r\n /** Access the (possibly undefined) max distance to accept. */\r\n public set maxDistanceToAccept(value: number | undefined) {\r\n this._maxDistanceToAccept = value;\r\n if (this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0)\r\n this._maxDistanceSquared = this._maxDistanceToAccept * this._maxDistanceToAccept;\r\n }\r\n /** Set the (possibly undefined) max distance to accept. */\r\n public get maxDistanceToAccept(): number | undefined { return this._maxDistanceToAccept; }\r\n /** Ask if the maxDistanceToAccept value is defined and positive */\r\n public get isMaxDistanceSet(): boolean { return this._maxDistanceToAccept !== undefined && this._maxDistanceToAccept > 0; }\r\n /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */\r\n public resetGeometry(_geometryA: GeometryQuery, geometryB: GeometryQuery) {\r\n this.setGeometryB(geometryB);\r\n }\r\n\r\n private acceptFraction(fraction: number, fractionTol: number = 1.0e-12) {\r\n if (fraction < -fractionTol)\r\n return false;\r\n if (fraction > 1.0 + fractionTol)\r\n return false;\r\n return true;\r\n }\r\n /**\r\n * * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair\r\n * @param reinitialize if true, a new results structure is created for use by later calls.\r\n *\r\n */\r\n public grabPairedResults(reinitialize: boolean = false): CurveLocationDetailPair[] {\r\n const result = this._results;\r\n if (reinitialize)\r\n this.reinitialize();\r\n return result;\r\n }\r\n private sameCurveAndFraction(cp: CurvePrimitive, fraction: number, detail: CurveLocationDetail): boolean {\r\n return cp === detail.curve && Geometry.isAlmostEqualNumber(fraction, detail.fraction);\r\n }\r\n private testAndRecordPointPairApproach(cpA: CurvePrimitive, fA: number, pointA: Point3d,\r\n cpB: CurvePrimitive, fB: number, pointB: Point3d, reversed: boolean) {\r\n const d2 = pointA.distanceSquaredXY(pointB);\r\n if (d2 < this._maxDistanceSquared) {\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA, fA, pointA);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB, fB, pointB);\r\n const pair = CurveLocationDetailPair.createCapture(detailA, detailB);\r\n if (reversed)\r\n pair.swapDetails();\r\n this._results.push(pair);\r\n }\r\n }\r\n /** compute intersection of two line segments.\r\n * filter by extension rules.\r\n * record with fraction mapping.\r\n */\r\n private recordPointWithLocalFractions(\r\n localFractionA: number,\r\n cpA: CurvePrimitive,\r\n fractionA0: number,\r\n fractionA1: number,\r\n localFractionB: number, // Computed intersection fraction\r\n cpB: CurvePrimitive,\r\n fractionB0: number,\r\n fractionB1: number,\r\n reversed: boolean,\r\n intervalDetails?: undefined | CurveLocationDetailPair) {\r\n let globalFractionA, globalFractionB;\r\n let globalFractionA1, globalFractionB1;\r\n const isInterval = intervalDetails !== undefined && intervalDetails.detailA.hasFraction1 && intervalDetails.detailB.hasFraction1;\r\n if (isInterval) {\r\n globalFractionA = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction, fractionA1);\r\n globalFractionB = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction, fractionB1);\r\n globalFractionA1 = Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction1!, fractionA1);\r\n globalFractionB1 = Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction1!, fractionB1);\r\n } else {\r\n globalFractionA = globalFractionA1 = Geometry.interpolate(fractionA0, localFractionA, fractionA1);\r\n globalFractionB = globalFractionB1 = Geometry.interpolate(fractionB0, localFractionB, fractionB1);\r\n\r\n }\r\n // ignore duplicate of most recent point . ..\r\n const numPrevious = this._results.length;\r\n if (numPrevious > 0 && !isInterval) {\r\n const oldDetailA = this._results[numPrevious - 1].detailA;\r\n const oldDetailB = this._results[numPrevious - 1].detailB;\r\n if (reversed) {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) && this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\r\n return;\r\n } else {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) && this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\r\n return;\r\n }\r\n }\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(cpA,\r\n globalFractionA, cpA.fractionToPoint(globalFractionA));\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(cpB,\r\n globalFractionB, cpB.fractionToPoint(globalFractionB));\r\n\r\n if (isInterval) {\r\n detailA.captureFraction1Point1(globalFractionA1, cpA.fractionToPoint(globalFractionA1));\r\n detailB.captureFraction1Point1(globalFractionB1, cpB.fractionToPoint(globalFractionB1));\r\n } else {\r\n detailA.setIntervalRole(CurveIntervalRole.isolated);\r\n detailB.setIntervalRole(CurveIntervalRole.isolated);\r\n }\r\n if (reversed) {\r\n this._results.push(new CurveLocationDetailPair(detailB, detailA));\r\n } else {\r\n this._results.push(new CurveLocationDetailPair(detailA, detailB));\r\n }\r\n }\r\n /**\r\n * capture a close approach pair that has point and local fraction but not curve.\r\n * record with fraction mapping.\r\n */\r\n private capturePairWithLocalFractions(\r\n pair: CurveLocationDetailPair,\r\n cpA: CurvePrimitive,\r\n fractionA0: number,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n fractionB0: number,\r\n fractionB1: number,\r\n reversed: boolean) {\r\n const globalFractionA = Geometry.interpolate(fractionA0, pair.detailA.fraction, fractionA1);\r\n const globalFractionB = Geometry.interpolate(fractionB0, pair.detailB.fraction, fractionB1);\r\n // ignore duplicate of most recent point . ..\r\n const numPrevious = this._results.length;\r\n if (numPrevious > 0) {\r\n const oldDetailA = this._results[numPrevious - 1].detailA;\r\n const oldDetailB = this._results[numPrevious - 1].detailB;\r\n if (reversed) {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) && this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\r\n return;\r\n } else {\r\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) && this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\r\n return;\r\n }\r\n }\r\n pair.detailA.setIntervalRole(CurveIntervalRole.isolated);\r\n pair.detailB.setIntervalRole(CurveIntervalRole.isolated);\r\n\r\n if (reversed) {\r\n this._results.push(pair);\r\n } else {\r\n pair.swapDetails();\r\n this._results.push(pair);\r\n }\r\n }\r\n\r\n /**\r\n * emit recordPoint for multiple pairs (on full curve!)\r\n * @param cpA first curve primitive. (possibly different from curve in detailA, but fraction compatible)\r\n * @param cpB second curve primitive. (possibly different from curve in detailA, but fraction compatible)\r\n * @param pairs array of pairs\r\n * @param reversed true to have order reversed in final structures.\r\n */\r\n public recordPairs(cpA: CurvePrimitive, cpB: CurvePrimitive,\r\n pairs: CurveLocationDetailPair[] | undefined, reversed: boolean) {\r\n if (pairs !== undefined) {\r\n for (const p of pairs) {\r\n this.recordPointWithLocalFractions(p.detailA.fraction, cpA, 0, 1,\r\n p.detailB.fraction, cpB, 0, 1, reversed, p);\r\n }\r\n }\r\n }\r\n /**\r\n * record fully assembled (but possibly reversed) detail pair.\r\n * @param detailA first detail\r\n * @param detailB second detail\r\n * @param reversed true to have order reversed in final structures.\r\n */\r\n public captureDetailPair(detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined, reversed: boolean) {\r\n if (detailA && detailB) {\r\n if (reversed) {\r\n this._results.push(CurveLocationDetailPair.createCapture(detailA, detailB));\r\n } else {\r\n this._results.push(CurveLocationDetailPair.createCapture(detailB, detailA));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param fractionA\r\n * @param pointA\r\n * @param pointB0\r\n * @param pointB1\r\n * @param fractionB\r\n * @param minDistanceSquared\r\n * @param closestApproach\r\n */\r\n private static updatePointToSegmentDistance(fractionA: number, pointA: Point3d, pointB0: Point3d, pointB1: Point3d, fractionB: number, minDistanceSquared: number, closestApproach?: CurveLocationDetailPair): CurveLocationDetailPair | undefined {\r\n if (fractionB < 0)\r\n fractionB = 0;\r\n else if (fractionB > 1)\r\n fractionB = 1;\r\n this._workPointB0 = pointB0.interpolate(fractionB, pointB1, this._workPointB0);\r\n const distanceSquared = this._workPointB0.distanceSquaredXY(pointA);\r\n if (distanceSquared < minDistanceSquared) {\r\n if (closestApproach === undefined || distanceSquared < closestApproach.detailA.a) {\r\n if (closestApproach === undefined)\r\n closestApproach = CurveLocationDetailPair.createCapture(CurveLocationDetail.create(), CurveLocationDetail.create());\r\n closestApproach.detailA.setFP(fractionA, pointA);\r\n closestApproach.detailA.a = distanceSquared;\r\n closestApproach.detailB.setFP(fractionB, this._workPointB0);\r\n closestApproach.detailA.a = distanceSquared;\r\n }\r\n }\r\n return closestApproach;\r\n }\r\n /**\r\n * Return fractions of close approach within minDistance between two line segments( a0,a1) and (b0, b1)\r\n * * minDistance is assumed positive\r\n * Return the fractional (not xy) coordinates in result.x, result.y\r\n * @param a0 start point of line a\r\n * @param a1 end point of line a\r\n * @param b0 start point of line b\r\n * @param b1 end point of line b\r\n * @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.\r\n */\r\n private static segmentSegmentBoundedApproach(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, minDistanceSquared: number): CurveLocationDetailPair | undefined {\r\n const ux = a1.x - a0.x;\r\n const uy = a1.y - a0.y;\r\n\r\n const vx = b1.x - b0.x;\r\n const vy = b1.y - b0.y;\r\n const e00x = b0.x - a0.x;\r\n const e00y = b0.y - a0.y;\r\n\r\n const e01x = b1.x - a0.x;\r\n const e01y = b1.y - a0.y;\r\n\r\n const e10x = b0.x - a1.x;\r\n const e10y = b0.y - a1.y;\r\n\r\n const e11x = b1.x - a1.x;\r\n const e11y = b1.y - a1.y;\r\n const hab0 = Geometry.crossProductXYXY(ux, uy, e00x, e00y);\r\n const hab1 = Geometry.crossProductXYXY(ux, uy, e01x, e01y);\r\n const hba0 = -Geometry.crossProductXYXY(vx, vy, e00x, e00y);\r\n const hba1 = -Geometry.crossProductXYXY(vx, vy, e11x, e11y);\r\n\r\n if (hab0 * hab1 < 0.0 && hba0 * hba1 < 0.0) {\r\n // true intersection, strictly within both segments !!!\r\n const fractionA = -hba0 / (hba1 - hba0);\r\n const fractionB = -hab0 / (hab1 - hab0);\r\n return CurveLocationDetailPair.createCapture(CurveLocationDetail.createCurveFractionPoint(undefined, fractionA, a0.interpolate(fractionA, a1)),\r\n CurveLocationDetail.createCurveFractionPoint(undefined, fractionB, b0.interpolate(fractionB, b1)));\r\n }\r\n let closestApproach: CurveLocationDetailPair | undefined;\r\n const uu = Geometry.hypotenuseSquaredXY(ux, uy);\r\n if (hab0 * hab0 < minDistanceSquared * uu)\r\n closestApproach = this.updatePointToSegmentDistance(0, b0, a0, a1, Geometry.dotProductXYXY(ux, uy, e00x, e00y) / uu, minDistanceSquared, closestApproach);\r\n if (hab1 * hab1 < minDistanceSquared * uu)\r\n closestApproach = this.updatePointToSegmentDistance(1, b1, a0, a1, Geometry.dotProductXYXY(ux, uy, e01x, e01y) / uu, minDistanceSquared, closestApproach);\r\n\r\n const vv = Geometry.hypotenuseSquaredXY(vx, vy);\r\n if (hba0 * hba0 < minDistanceSquared * vv)\r\n closestApproach = this.updatePointToSegmentDistance(0, a0, b0, b1, -Geometry.dotProductXYXY(vx, vy, e00x, e00y) / vv, minDistanceSquared, closestApproach);\r\n if (hba1 * hba1 < minDistanceSquared * vv)\r\n closestApproach = this.updatePointToSegmentDistance(1, a1, b0, b1, -Geometry.dotProductXYXY(vx, vy, e10x, e10y) / vv, minDistanceSquared, closestApproach);\r\n return closestApproach;\r\n }\r\n /**\r\n * Return fractions of close approach within minDistance between two line segments( a0,a1) and (b0, b1)\r\n * * minDistance is assumed positive\r\n * Return the fractional (not xy) coordinates in result.x, result.y\r\n * @param a0 start point of line a\r\n * @param a1 end point of line a\r\n * @param b0 start point of line b\r\n * @param b1 end point of line b\r\n * @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.\r\n */\r\n private testAndRecordFractionalPairApproach(cpA: CurvePrimitive, fA0: number, fA1: number, testProjectionOnA: boolean,\r\n cpB: CurvePrimitive, fB0: number, fB1: number, testProjectionOnB: boolean, reversed: boolean) {\r\n const pointA0 = cpA.fractionToPoint(fA0);\r\n const pointA1 = cpA.fractionToPoint(fA1);\r\n const pointB0 = cpB.fractionToPoint(fB0);\r\n const pointB1 = cpB.fractionToPoint(fB1);\r\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB0, pointB0, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB0, pointB0, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA0, pointA0, cpB, fB1, pointB1, reversed);\r\n this.testAndRecordPointPairApproach(cpA, fA1, pointA1, cpB, fB1, pointB1, reversed);\r\n if (testProjectionOnB) {\r\n this.testAndRecordProjection(cpA, fA0, pointA0, cpB, fB0, fB1, reversed);\r\n this.testAndRecordProjection(cpA, fA1, pointA1, cpB, fB0, fB1, reversed);\r\n }\r\n if (testProjectionOnA) {\r\n this.testAndRecordProjection(cpB, fB0, pointB0, cpA, fA0, fA1, !reversed);\r\n this.testAndRecordProjection(cpB, fB1, pointB1, cpA, fA0, fA1, !reversed);\r\n }\r\n }\r\n\r\n private testAndRecordProjection(cpA: CurvePrimitive, fA: number, pointA: Point3d,\r\n cpB: CurvePrimitive, fB0: number, fB1: number, reversed: boolean) {\r\n // NO NO NO -- this is 3D closest point --- need 2d !!\r\n const detail = cpB.closestPoint(pointA, false);\r\n if (detail) {\r\n const fB = Geometry.restrictToInterval(detail.fraction, fB0, fB1);\r\n if (fB === detail.fraction) {\r\n this.testAndRecordPointPairApproach(cpA, fA, pointA, cpB, detail.fraction, detail.point, reversed);\r\n }\r\n }\r\n }\r\n /** compute intersection of two line segments.\r\n * filter by extension rules.\r\n * record with fraction mapping.\r\n * * The fraction mappings allow portions of a linestring to be passed here.\r\n */\r\n private computeSegmentSegment3D(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ) {\r\n const approach = CurveCurveCloseApproachXY.segmentSegmentBoundedApproach(pointA0, pointA1, pointB0, pointB1, this._maxDistanceSquared);\r\n if (approach)\r\n this.capturePairWithLocalFractions(approach, cpA, fractionA0, fractionA1, cpB, fractionB0, fractionB1, reversed);\r\n }\r\n\r\n // Caller accesses data from a line segment and passes to here.\r\n // (The line segment in question might be (a) a full line segment or (b) a fragment within a linestring. The fraction and extend parameters\r\n // allow all combinations to be passed in)\r\n // This method applies transform.\r\n private dispatchSegmentSegment(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n cpB: CurvePrimitive,\r\n pointB0: Point3d,\r\n fractionB0: number,\r\n pointB1: Point3d,\r\n fractionB1: number,\r\n reversed: boolean,\r\n ) {\r\n this.computeSegmentSegment3D(\r\n cpA, pointA0, fractionA0, pointA1, fractionA1,\r\n cpB, pointB0, fractionB0, pointB1, fractionB1,\r\n reversed);\r\n }\r\n\r\n // Caller accesses data from a linestring or segment and passes it here.\r\n // (The line segment in question might be (a) a full line segment or (b) a fragment within a linestring. The fraction and extend parameters\r\n // allow all combinations to be passed in)\r\n private dispatchSegmentArc(\r\n cpA: CurvePrimitive,\r\n pointA0: Point3d,\r\n fractionA0: number,\r\n pointA1: Point3d,\r\n fractionA1: number,\r\n arc: Arc3d,\r\n reversed: boolean,\r\n ) {\r\n // To consider:\r\n // 1) endpoint to endpoint or projection\r\n // 2) true intersection\r\n // 3) line parallel to arc tangent.\r\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, true, arc, 0, 1, false, reversed);\r\n // Arc: X = C + cU + sV\r\n // Line: contains points A0,A1\r\n // Arc point colinear with line if det (A0, A1, X) = 0\r\n // with homogeneous xyw points and vectors.\r\n // With equational X: det (A0, A1, C) + c det (A0, A1,U) + s det (A0, A1, V) = 0.\r\n // solve for theta.\r\n // evaluate points.\r\n // project back to line.\r\n\r\n const data = arc.toTransformedVectors();\r\n const pointA0Local = pointA0;\r\n const pointA1Local = pointA1;\r\n const alpha = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1);\r\n const beta = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0);\r\n const gamma = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0);\r\n const cosines = new GrowableFloat64Array(2);\r\n const sines = new GrowableFloat64Array(2);\r\n const radians = new GrowableFloat64Array(2);\r\n const numRoots = AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);\r\n for (let i = 0; i < numRoots; i++) {\r\n const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));\r\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));\r\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\r\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\r\n this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1,\r\n arcFraction, arc, 0, 1, reversed);\r\n }\r\n }\r\n\r\n // line parallel to arc tangent.\r\n const dotUT = data.vector0.crossProductStartEndXY(pointA0, pointA1);\r\n const dotVT = data.vector90.crossProductStartEndXY(pointA0, pointA1);\r\n const parallelRadians = Math.atan2(dotVT, dotUT);\r\n for (const radians1 of [parallelRadians, parallelRadians + Math.PI]) {\r\n const arcPoint = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));\r\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians1);\r\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\r\n if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\r\n this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1,\r\n arcFraction, arc, 0, 1, reversed);\r\n }\r\n }\r\n\r\n }\r\n\r\n // Caller accesses data from two arcs, ensures circular, and orders with radiusA >= radiusB\r\n\r\n private dispatchCircularCircularOrdered(\r\n cpA: Arc3d,\r\n radiusA: number,\r\n cpB: Arc3d,\r\n radiusB: number,\r\n reversed: boolean,\r\n ) {\r\n const c = cpA.center.distance(cpB.center);\r\n const e = this._maxDistanceToAccept !== undefined ? this._maxDistanceToAccept : Geometry.smallMetricDistance;\r\n if (c > radiusA + radiusB + e) // widely separated !!\r\n return;\r\n // To consider:\r\n // 1) endpoint to endpoint or projection\r\n // 2) true intersection\r\n // 3) line parallel to arc tangent.\r\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, false, cpB, 0, 1, false, reversed);\r\n if (Geometry.isSmallMetricDistance(c)) {\r\n\r\n } else {\r\n // ?? endpoint hits are recorded. Maybe also need overlap?\r\n const vectorAB = Vector3d.createStartEnd(cpA.center, cpB.center);\r\n vectorAB.scaleInPlace(1.0 / c);\r\n if (c - radiusA - radiusB > e) {\r\n // no approaches possible\r\n } else {\r\n for (const rA of [-radiusA, radiusA]) {\r\n for (const rB of [-radiusB, radiusB]) {\r\n const tangentDistance = c - rA + rB;\r\n if (tangentDistance < e) {\r\n const detailA = this.resolveDirectionToArcXYFraction(cpA, vectorAB, rA);\r\n if (detailA) {\r\n const detailB = this.resolveDirectionToArcXYFraction(cpB, vectorAB, rB);\r\n if (detailB) {\r\n this.captureDetailPair(detailA, detailB, reversed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** Find the fractional point (if any) on an arc, known to be circular and displayed from the center in the direction of a scaled vector.\r\n *\r\n */\r\n private resolveDirectionToArcXYFraction(arc: Arc3d, radialVector: Vector3d, scale: number): CurveLocationDetail | undefined {\r\n // The scale ultimately only affects the direction --- easiest way to use it is two multiplies\r\n const c = scale * arc.matrixRef.columnDotXYZ(0, radialVector.x, radialVector.y, 0);\r\n const s = scale * arc.matrixRef.columnDotXYZ(1, radialVector.x, radialVector.y, 0);\r\n const radians = Math.atan2(s, c);\r\n const fraction = arc.sweep.radiansToPositivePeriodicFraction(radians, 0);\r\n if (fraction < 1.0)\r\n return CurveLocationDetail.createCurveEvaluatedFraction(arc, fraction);\r\n return undefined;\r\n }\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\r\n // Solves the arc-arc equations\r\n private dispatchArcArc(\r\n cpA: Arc3d,\r\n cpB: Arc3d,\r\n reversed: boolean,\r\n ) {\r\n if (this._circularArcB) {\r\n const radiusB = this._circularRadiusB!;\r\n const radiusA = cpA.circularRadiusXY();\r\n if (radiusA !== undefined) {\r\n if (radiusA >= radiusB)\r\n this.dispatchCircularCircularOrdered(cpA, radiusA, cpB, radiusB, reversed);\r\n else\r\n this.dispatchCircularCircularOrdered(cpB, radiusB, cpA, radiusA, !reversed);\r\n return;\r\n }\r\n }\r\n // Fall through for\r\n }\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\r\n // Solves the arc-arc equations\r\n private dispatchArcBsplineCurve3d(\r\n cpA: Arc3d,\r\n cpB: BSplineCurve3d,\r\n reversed: boolean) {\r\n const ls = LineString3d.create();\r\n cpB.emitStrokes(ls);\r\n this.computeArcLineString(cpA, ls, reversed);\r\n }\r\n\r\n // Caller accesses data from two arcs.\r\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\r\n // Solves the arc-arc equations\r\n private dispatchBSplineCurve3dBSplineCurve3d(\r\n bcurveA: BSplineCurve3dBase,\r\n bcurveB: BSplineCurve3dBase,\r\n reversed: boolean) {\r\n const lsA = LineString3d.create();\r\n bcurveA.emitStrokes(lsA);\r\n const lsB = LineString3d.create();\r\n bcurveB.emitStrokes(lsB);\r\n this.computeLineStringLineString(lsA, lsB, reversed);\r\n\r\n }\r\n\r\n private static _workPointAA0 = Point3d.create();\r\n private static _workPointAA1 = Point3d.create();\r\n private static _workPointBB0 = Point3d.create();\r\n private static _workPointBB1 = Point3d.create();\r\n private static _workPointBB2 = Point3d.create();\r\n private static _workVectorA = Vector3d.create();\r\n /** low level dispatch of linestring with (beziers of) a bspline curve */\r\n public dispatchLineStringBSplineCurve(lsA: LineString3d, curveB: BSplineCurve3d, reversed: boolean): any {\r\n const lsB = LineString3d.create();\r\n curveB.emitStrokes(lsB);\r\n this.computeLineStringLineString(lsA, lsB, reversed);\r\n }\r\n /** low level dispatch of linestring with (beziers of) a bspline curve */\r\n public dispatchSegmentBsplineCurve(lsA: LineSegment3d, curveB: BSplineCurve3d, reversed: boolean): any {\r\n const lsB = LineString3d.create();\r\n curveB.emitStrokes(lsB);\r\n this.computeSegmentLineString(lsA, lsB, reversed);\r\n }\r\n /** Detail computation for segment approaching linestring. */\r\n public computeSegmentLineString(lsA: LineSegment3d, lsB: LineString3d, reversed: boolean): any {\r\n const pointA0 = lsA.point0Ref;\r\n const pointA1 = lsA.point1Ref;\r\n let pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n let pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n let pointB2 = CurveCurveCloseApproachXY._workPointBB2;\r\n let cross0, cross1, cross2;\r\n let dot0, dot1, dot2;\r\n const vectorA = CurveCurveCloseApproachXY._workVectorA;\r\n Vector3d.createStartEnd(pointA0, pointA1, vectorA);\r\n const aa = vectorA.magnitudeSquared();\r\n const numB = lsB.numPoints();\r\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(0, pointB0);\r\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(1, pointB0);\r\n cross0 = vectorA.crossProductStartEndXY(pointA0, pointB0);\r\n cross1 = vectorA.crossProductStartEndXY(pointA0, pointB0);\r\n dot0 = vectorA.dotProductStartEndXY(pointA0, pointB0);\r\n dot1 = vectorA.dotProductStartEndXY(pointA0, pointB1);\r\n for (let iB = 2; iB < numB; iB++) {\r\n // project point B[iB] to segmentA. If within limits, see if it is a local minimum distance . . .\r\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(iB, pointB1);\r\n cross2 = vectorA.crossProductStartEndXY(pointA0, pointB0);\r\n dot2 = vectorA.dotProductStartEndXY(pointA0, pointB2);\r\n if ((cross0 - cross1) * (cross2 - cross1) <= 0.0) {\r\n // There is a true minimum at point1 ... see if it is within the line\r\n if (dot1 >= 0.0 && dot1 <= aa) {\r\n const fractionA1 = dot1 / aa;\r\n const projection = pointA0.interpolate(dot1 / aa, pointA1);\r\n if (pointB1.distanceXY(projection) < this._maxDistanceToAccept!) {\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(lsA, fractionA1, projection);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(lsB, iB / (numB - 1), pointB2);\r\n const pair = CurveLocationDetailPair.createCaptureOptionalReverse(detailA, detailB, reversed);\r\n this._results.push(pair);\r\n }\r\n }\r\n }\r\n const tempPoint = pointB0; pointB0 = pointB1; pointB1 = pointB2; pointB2 = tempPoint;\r\n const tempCross = cross0; cross0 = cross1; cross1 = cross2; cross2 = tempCross;\r\n const tempDot = dot0; dot0 = dot1; dot1 = dot2; dot2 = tempDot;\r\n }\r\n this.testAndRecordFractionalPairApproach(lsA, 0, 1, true, lsB, 0, 1, false, reversed);\r\n return undefined;\r\n }\r\n /** Detail computation for arcA intersecting lsB. */\r\n public computeArcLineString(arcA: Arc3d, lsB: LineString3d, reversed: boolean): any {\r\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n const numB = lsB.numPoints();\r\n if (numB > 1) {\r\n const dfB = 1.0 / (numB - 1);\r\n let fB0;\r\n let fB1;\r\n fB0 = 0.0;\r\n lsB.pointAt(0, pointB0);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1) {\r\n lsB.pointAt(ib, pointB1);\r\n fB1 = ib * dfB;\r\n this.dispatchSegmentArc(\r\n lsB, pointB0, fB0, pointB1, fB1,\r\n arcA,\r\n !reversed);\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private static _workPointB0 = Point3d.create();\r\n // private static _workPointB1 = Point3d.create();\r\n /** double dispatch handler for strongly typed segment.. */\r\n public override handleLineSegment3d(segmentA: LineSegment3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n const segmentB = this._geometryB;\r\n this.dispatchSegmentSegment(\r\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\r\n segmentB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0,\r\n false);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeSegmentLineString(segmentA, this._geometryB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchSegmentArc(\r\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\r\n this._geometryB, false);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);\r\n }\r\n }\r\n private computeLineStringLineString(lsA: LineString3d, lsB: LineString3d, reversed: boolean) {\r\n const rangeA = lsA.range();\r\n const rangeB = lsB.range();\r\n rangeA.expandInPlace(this._maxDistanceToAccept!);\r\n if (!rangeB.intersectsRangeXY(rangeA))\r\n return;\r\n let bitB0: number;\r\n let bitB1: number;\r\n const rangeA1 = Range3d.createNull();\r\n const pointA0 = CurveCurveCloseApproachXY._workPointAA0;\r\n const pointA1 = CurveCurveCloseApproachXY._workPointAA1;\r\n const pointB0 = CurveCurveCloseApproachXY._workPointBB0;\r\n const pointB1 = CurveCurveCloseApproachXY._workPointBB1;\r\n const numA = lsA.numPoints();\r\n const numB = lsB.numPoints();\r\n if (numA > 1 && numB > 1) {\r\n lsA.pointAt(0, pointA0);\r\n const dfA = 1.0 / (numA - 1);\r\n const dfB = 1.0 / (numB - 1);\r\n let fA0 = 0.0;\r\n let fB0;\r\n let fA1;\r\n let fB1;\r\n lsA.pointAt(0, pointA0);\r\n for (let ia = 1; ia < numA; ia++, pointA0.setFrom(pointA1), fA0 = fA1) {\r\n fA1 = ia * dfA;\r\n fB0 = 0.0;\r\n lsA.pointAt(ia, pointA1);\r\n rangeA1.setNull();\r\n rangeA1.extendPoint(pointA0);\r\n rangeA1.extendPoint(pointA1);\r\n rangeA1.expandInPlace(this._maxDistanceToAccept!);\r\n if (rangeA1.intersectsRangeXY(rangeB)) {\r\n lsB.pointAt(0, pointB0);\r\n bitB0 = classifyBitsPointRangeXY(pointB0.x, pointB0.y, rangeA1);\r\n for (let ib = 1; ib < numB; ib++, pointB0.setFrom(pointB1), fB0 = fB1, bitB0 = bitB1) {\r\n lsB.pointAt(ib, pointB1);\r\n bitB1 = classifyBitsPointRangeXY(pointB1.x, pointB1.y, rangeA1);\r\n fB1 = ib * dfB;\r\n // Do NOT study the segment in detail if both bitB bits are on for any of the 4 planes . ..\r\n if ((bitB0 & bitB1) === 0) {\r\n this.dispatchSegmentSegment(\r\n lsA, pointA0, fA0, pointA1, fA1,\r\n lsB, pointB0, fB0, pointB1, fB1,\r\n reversed);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** double dispatch handler for strongly typed linestring.. */\r\n public override handleLineString3d(lsA: LineString3d): any {\r\n if (this._geometryB instanceof LineString3d) {\r\n const lsB = this._geometryB;\r\n this.computeLineStringLineString(lsA, lsB, false);\r\n } else if (this._geometryB instanceof LineSegment3d) {\r\n this.computeSegmentLineString(this._geometryB, lsA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.computeArcLineString(this._geometryB, lsA, true);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);\r\n }\r\n return undefined;\r\n }\r\n /** double dispatch handler for strongly typed arc .. */\r\n public override handleArc3d(arc0: Arc3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentArc(\r\n this._geometryB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0,\r\n arc0, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.computeArcLineString(arc0, this._geometryB, false);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcArc(arc0, this._geometryB, false);\r\n } else if (this._geometryB instanceof BSplineCurve3d) {\r\n this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);\r\n }\r\n return undefined;\r\n }\r\n /** double dispatch handler for strongly typed bspline curve .. */\r\n public override handleBSplineCurve3d(curve: BSplineCurve3d): any {\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, curve, true);\r\n } else if (this._geometryB instanceof BSplineCurve3dBase) {\r\n this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);\r\n }\r\n return undefined;\r\n }\r\n /** double dispatch handler for strongly typed homogeneous bspline curve .. */\r\n public override handleBSplineCurve3dH(_curve: BSplineCurve3dH): any {\r\n /* NEEDS WORK -- make \"dispatch\" methods tolerant of both 3d and 3dH ...\"easy\" if both present BezierCurve3dH span loaders\r\n if (this._geometryB instanceof LineSegment3d) {\r\n this.dispatchSegmentBsplineCurve(\r\n this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB,\r\n curve, this._extendA, true);\r\n } else if (this._geometryB instanceof LineString3d) {\r\n this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);\r\n } else if (this._geometryB instanceof Arc3d) {\r\n this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);\r\n }\r\n */\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CurveCurveCloseApproachXY.js","sourceRoot":"","sources":["../../../src/curve/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 { BSplineCurve3d, BSplineCurve3dBase } from \"../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../bspline/BSplineCurve3dH\";\nimport { Geometry } from \"../Geometry\";\nimport { NullGeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Range3d } from \"../geometry3d/Range\";\nimport { AnalyticRoots, SmallSystem } from \"../numerics/Polynomials\";\nimport { Arc3d } from \"./Arc3d\";\nimport { CurveIntervalRole, CurveLocationDetail, CurveLocationDetailPair } from \"./CurveLocationDetail\";\nimport { CurvePrimitive } from \"./CurvePrimitive\";\nimport { GeometryQuery } from \"./GeometryQuery\";\nimport { LineSegment3d } from \"./LineSegment3d\";\nimport { LineString3d } from \"./LineString3d\";\n\n// cspell:word XYRR\n\n/**\n * Handler class for XY close approach between _geometryB and another geometry.\n * * Approach means the distance between _geometryB and another geometry.\n * * **NOTE:** GeometryQuery input (_geometryB) should really be AnyCurve.\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, rotate them first into a plane parallel to the xy-plane, then afterward, you should rotate the\n * results back as required.\n * * Instances are initialized and called from CurveCurve.\n * * geometryB is saved for later reference.\n * @internal\n */\nexport class CurveCurveCloseApproachXY extends NullGeometryHandler {\n private _geometryB: GeometryQuery | undefined;\n private _circularArcB: Arc3d | undefined;\n private _circularRadiusB: number | undefined;\n private setGeometryB(geometryB: GeometryQuery | undefined) {\n this._geometryB = geometryB;\n this._circularArcB = undefined;\n this._circularRadiusB = undefined;\n if (geometryB instanceof Arc3d) {\n const r = geometryB.circularRadiusXY();\n if (r !== undefined) {\n this._circularRadiusB = r;\n this._circularArcB = geometryB;\n }\n }\n }\n /**\n * 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\n * 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 _workPointBB2 = Point3d.create();\n private static _workVectorA = Vector3d.create();\n private static _workPointB = Point3d.create();\n\n private reinitialize() {\n this._results = [];\n }\n /**\n * Constructor.\n * @param geometryB second curve for intersection. Saved for reference by specific handler methods.\n */\n public constructor(geometryB: GeometryQuery | undefined) {\n super();\n this.setGeometryB(geometryB);\n this._maxDistanceSquared = Geometry.smallMetricDistanceSquared;\n this.reinitialize();\n }\n /** Set the (possibly undefined) max distance 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 distance 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: GeometryQuery) {\n this.setGeometryB(geometryB);\n }\n /** @returns whether the `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.reinitialize();\n return result;\n }\n /** Returns `true` if `detail` has same curve and fraction. */\n private sameCurveAndFraction(cp: CurvePrimitive, fraction: number, detail: CurveLocationDetail): boolean {\n return cp === detail.curve && Geometry.isAlmostEqualNumber(fraction, detail.fraction);\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 * Compute intersection of two line segments.\n * Filter by extension rules.\n * Record with fraction mapping.\n */\n private recordPointWithLocalFractions(\n localFractionA: number,\n cpA: CurvePrimitive,\n fractionA0: number,\n fractionA1: number,\n localFractionB: number, // Computed intersection fraction\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 && 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 }\n // ignore duplicate of most recent point . ..\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 (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) &&\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\n return;\n } else {\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) &&\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\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 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 with fraction mapping.\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 point . ..\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 (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailB) &&\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailA))\n return;\n } else {\n if (this.sameCurveAndFraction(cpA, globalFractionA, oldDetailA) &&\n this.sameCurveAndFraction(cpB, globalFractionB, oldDetailB))\n return;\n }\n }\n pair.detailA.setIntervalRole(CurveIntervalRole.isolated);\n pair.detailB.setIntervalRole(CurveIntervalRole.isolated);\n if (reversed) {\n this._results.push(pair);\n } else {\n pair.swapDetails();\n this._results.push(pair);\n }\n }\n /**\n * Emit recordPoint for multiple pairs (on full curve!)\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 true to have order reversed in final structures.\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(p.detailA.fraction, cpA, 0, 1,\n p.detailB.fraction, cpB, 0, 1, reversed, p);\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 true to have order reversed in final structures.\n */\n private 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(detailA, detailB));\n } else {\n this._results.push(CurveLocationDetailPair.createCapture(detailB, detailA));\n }\n }\n }\n private static updatePointToSegmentDistance(\n fractionA: number,\n pointA: Point3d,\n pointB0: Point3d,\n pointB1: Point3d,\n fractionB: number,\n minDistanceSquared: number,\n closestApproach?: CurveLocationDetailPair,\n ): CurveLocationDetailPair | undefined {\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 < minDistanceSquared) {\n if (closestApproach === undefined || distanceSquared < closestApproach.detailA.a) {\n if (closestApproach === undefined)\n closestApproach = CurveLocationDetailPair.createCapture(\n CurveLocationDetail.create(), CurveLocationDetail.create(),\n );\n closestApproach.detailA.setFP(fractionA, pointA);\n closestApproach.detailA.a = distanceSquared;\n closestApproach.detailB.setFP(fractionB, this._workPointB);\n closestApproach.detailA.a = distanceSquared;\n }\n }\n return closestApproach;\n }\n /**\n * Return fractions of close approach within minDistance between two line segments (a0,a1) and (b0, b1).\n * * minDistanceSquared is assumed positive.\n * Return the fractional (not xy) coordinates in result.x, result.y\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 result point to receive fractional coordinates of intersection. result.x is fraction on line a.\n * result.y is fraction on line b.\n */\n private static segmentSegmentBoundedApproach(\n a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, minDistanceSquared: 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\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 e11x = b1.x - a1.x;\n const e11y = b1.y - a1.y;\n\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, e11x, e11y);\n\n if (hab0 * hab1 < 0.0 && hba0 * hba1 < 0.0) {\n // 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 let closestApproach: CurveLocationDetailPair | undefined;\n const uu = Geometry.hypotenuseSquaredXY(ux, uy);\n if (hab0 * hab0 < minDistanceSquared * uu)\n closestApproach = this.updatePointToSegmentDistance(\n 0, b0, a0, a1, Geometry.dotProductXYXY(ux, uy, e00x, e00y) / uu, minDistanceSquared, closestApproach,\n );\n if (hab1 * hab1 < minDistanceSquared * uu)\n closestApproach = this.updatePointToSegmentDistance(\n 1, b1, a0, a1, Geometry.dotProductXYXY(ux, uy, e01x, e01y) / uu, minDistanceSquared, closestApproach,\n );\n const vv = Geometry.hypotenuseSquaredXY(vx, vy);\n if (hba0 * hba0 < minDistanceSquared * vv)\n closestApproach = this.updatePointToSegmentDistance(\n 0, a0, b0, b1, -Geometry.dotProductXYXY(vx, vy, e00x, e00y) / vv, minDistanceSquared, closestApproach,\n );\n if (hba1 * hba1 < minDistanceSquared * vv)\n closestApproach = this.updatePointToSegmentDistance(\n 1, a1, b0, b1, -Geometry.dotProductXYXY(vx, vy, e10x, e10y) / vv, minDistanceSquared, closestApproach,\n );\n return closestApproach;\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 private testAndRecordProjection(\n cpA: CurvePrimitive, fA: number, pointA: Point3d, cpB: CurvePrimitive, fB0: number, fB1: number, reversed: boolean,\n ) {\n // NO NO NO -- this is 3D closest point --- need 2d !!\n const detail = cpB.closestPoint(pointA, false);\n if (detail) {\n const fB = Geometry.restrictToInterval(detail.fraction, fB0, fB1);\n if (fB === detail.fraction) {\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 const approach = CurveCurveCloseApproachXY.segmentSegmentBoundedApproach(\n pointA0, pointA1, pointB0, pointB1, this._maxDistanceSquared,\n );\n if (approach)\n this.capturePairWithLocalFractions(approach, cpA, fractionA0, fractionA1, cpB, fractionB0, fractionB1, reversed);\n }\n // Caller accesses data from a line segment and passes to here.\n // (The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.\n // The fraction and extend parameters allow all combinations to be passed in)\n // This method applies transform.\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, cpB, pointB0, fractionB0, pointB1, fractionB1, reversed,\n );\n }\n\n // Caller accesses data from a linestring or segment and passes it here.\n // (The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.\n // The fraction and extend parameters allow all combinations to be passed in)\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 // To consider:\n // 1) endpoint to endpoint or projection\n // 2) true intersection\n // 3) line parallel to arc tangent.\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, true, arc, 0, 1, false, reversed);\n // Arc: X = C + cU + sV\n // Line: contains points A0,A1\n // Arc point colinear with line if det (A0, A1, X) = 0\n // 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 const data = arc.toTransformedVectors();\n const pointA0Local = pointA0;\n const pointA1Local = pointA1;\n const alpha = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1);\n const beta = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0);\n const gamma = Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0);\n const cosines = new GrowableFloat64Array(2);\n const sines = new GrowableFloat64Array(2);\n const radians = new GrowableFloat64Array(2);\n const numRoots = AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);\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 if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {\n this.recordPointWithLocalFractions(\n lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed,\n );\n }\n }\n // line parallel to arc tangent.\n const dotUT = data.vector0.crossProductStartEndXY(pointA0, pointA1);\n const dotVT = data.vector90.crossProductStartEndXY(pointA0, pointA1);\n const parallelRadians = Math.atan2(dotVT, dotUT);\n for (const radians1 of [parallelRadians, parallelRadians + Math.PI]) {\n const arcPoint = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));\n const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians1);\n const lineFraction = SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);\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 }\n }\n }\n // Caller accesses data from two arcs, ensures circular, and orders with radiusA >= radiusB\n private dispatchCircularCircularOrdered(\n cpA: Arc3d, radiusA: number, cpB: Arc3d, radiusB: number, reversed: boolean,\n ): void {\n const c = cpA.center.distance(cpB.center);\n const e = this._maxDistanceToAccept !== undefined ? this._maxDistanceToAccept : Geometry.smallMetricDistance;\n if (c > radiusA + radiusB + e) // widely separated\n return;\n // To consider:\n // 1) endpoint to endpoint or projection\n // 2) true intersection\n // 3) line parallel to arc tangent.\n this.testAndRecordFractionalPairApproach(cpA, 0, 1, false, cpB, 0, 1, false, reversed);\n if (!Geometry.isSmallMetricDistance(c)) {\n // ?? endpoint hits are recorded. Maybe also need overlap?\n const vectorAB = Vector3d.createStartEnd(cpA.center, cpB.center);\n vectorAB.scaleInPlace(1.0 / c);\n if (c - radiusA - radiusB > e) {\n // no approaches possible\n } else {\n for (const rA of [-radiusA, radiusA]) {\n for (const rB of [-radiusB, radiusB]) {\n const tangentDistance = c - rA + rB;\n if (tangentDistance < e) {\n const detailA = this.resolveDirectionToArcXYFraction(cpA, vectorAB, rA);\n if (detailA) {\n const detailB = this.resolveDirectionToArcXYFraction(cpB, vectorAB, rB);\n if (detailB) {\n this.captureDetailPair(detailA, detailB, reversed);\n }\n }\n }\n }\n }\n }\n }\n }\n /**\n * Find the fractional point (if any) on an arc, known to be circular and displayed from the center in the\n * direction of a scaled vector.\n */\n private resolveDirectionToArcXYFraction(\n arc: Arc3d, radialVector: Vector3d, scale: number,\n ): CurveLocationDetail | undefined {\n // The scale ultimately only affects the direction --- easiest way to use it is two multiplies\n const c = scale * arc.matrixRef.columnDotXYZ(0, radialVector.x, radialVector.y, 0);\n const s = scale * arc.matrixRef.columnDotXYZ(1, radialVector.x, radialVector.y, 0);\n const radians = Math.atan2(s, c);\n const fraction = arc.sweep.radiansToPositivePeriodicFraction(radians, 0);\n if (fraction < 1.0)\n return CurveLocationDetail.createCurveEvaluatedFraction(arc, fraction);\n return undefined;\n }\n // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\n // Solves the arc-arc equations\n private dispatchArcArc(cpA: Arc3d, cpB: Arc3d, reversed: boolean): void {\n if (this._circularArcB) {\n const radiusB = this._circularRadiusB!;\n const radiusA = cpA.circularRadiusXY();\n if (radiusA !== undefined) {\n if (radiusA >= radiusB)\n this.dispatchCircularCircularOrdered(cpA, radiusA, cpB, radiusB, reversed);\n else\n this.dispatchCircularCircularOrdered(cpB, radiusB, cpA, radiusA, !reversed);\n return;\n }\n }\n }\n // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\n // Solves the arc-arc equations\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 // Caller accesses data from two arcs.\n // Selects the best conditioned arc (in xy parts) as \"circle after inversion\"\n // Solves the arc-arc equations\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(lsA: LineSegment3d, curveB: BSplineCurve3d, reversed: boolean): any {\n const lsB = LineString3d.create();\n curveB.emitStrokes(lsB);\n this.computeSegmentLineString(lsA, lsB, reversed);\n }\n /** Detail computation for segment approaching linestring. */\n public computeSegmentLineString(lsA: LineSegment3d, lsB: LineString3d, reversed: boolean): any {\n const pointA0 = lsA.point0Ref;\n const pointA1 = lsA.point1Ref;\n let pointB0 = CurveCurveCloseApproachXY._workPointBB0;\n let pointB1 = CurveCurveCloseApproachXY._workPointBB1;\n let pointB2 = CurveCurveCloseApproachXY._workPointBB2;\n let cross0, cross1, cross2;\n let dot0, dot1, dot2;\n const vectorA = CurveCurveCloseApproachXY._workVectorA;\n Vector3d.createStartEnd(pointA0, pointA1, vectorA);\n const aa = vectorA.magnitudeSquared();\n const numB = lsB.numPoints();\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(0, pointB0);\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(1, pointB0);\n cross0 = vectorA.crossProductStartEndXY(pointA0, pointB0);\n cross1 = vectorA.crossProductStartEndXY(pointA0, pointB0);\n dot0 = vectorA.dotProductStartEndXY(pointA0, pointB0);\n dot1 = vectorA.dotProductStartEndXY(pointA0, pointB1);\n for (let iB = 2; iB < numB; iB++) {\n // project point B[iB] to segmentA. If within limits, see if it is a local minimum distance . . .\n lsB.packedPoints.getPoint3dAtUncheckedPointIndex(iB, pointB1);\n cross2 = vectorA.crossProductStartEndXY(pointA0, pointB0);\n dot2 = vectorA.dotProductStartEndXY(pointA0, pointB2);\n if ((cross0 - cross1) * (cross2 - cross1) <= 0.0) {\n // There is a true minimum at point1 ... see if it is within the line\n if (dot1 >= 0.0 && dot1 <= aa) {\n const fractionA1 = dot1 / aa;\n const projection = pointA0.interpolate(dot1 / aa, pointA1);\n if (pointB1.distanceXY(projection) < this._maxDistanceToAccept!) {\n const detailA = CurveLocationDetail.createCurveFractionPoint(lsA, fractionA1, projection);\n const detailB = CurveLocationDetail.createCurveFractionPoint(lsB, iB / (numB - 1), pointB2);\n const pair = CurveLocationDetailPair.createCaptureOptionalReverse(detailA, detailB, reversed);\n this._results.push(pair);\n }\n }\n }\n const tempPoint = pointB0; pointB0 = pointB1; pointB1 = pointB2; pointB2 = tempPoint;\n const tempCross = cross0; cross0 = cross1; cross1 = cross2; cross2 = tempCross;\n const tempDot = dot0; dot0 = dot1; dot1 = dot2; dot2 = tempDot;\n }\n this.testAndRecordFractionalPairApproach(lsA, 0, 1, true, lsB, 0, 1, false, reversed);\n return undefined;\n }\n /** Detail computation for arc approaching linestring. */\n public computeArcLineString(arcA: Arc3d, lsB: LineString3d, reversed: boolean): any {\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(\n lsB, pointB0, fB0, pointB1, fB1,\n arcA,\n !reversed);\n }\n }\n return undefined;\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(\n segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0,\n this._geometryB, false);\n } else if (this._geometryB instanceof BSplineCurve3d) {\n this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);\n }\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 * @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\n if (y < range.low.y)\n result |= 0x04;\n else if (y > range.high.y)\n result |= 0x08;\n return result;\n }\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 lsA.pointAt(0, pointA0);\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.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 if ((bitB0 & bitB1) === 0) {\n this.dispatchSegmentSegment(\n lsA, pointA0, fA0, pointA1, fA1,\n lsB, pointB0, fB0, pointB1, fB1,\n reversed);\n }\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 }\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 }\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 }\n return undefined;\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"]}
@@ -11,7 +11,7 @@ import { GeometryQuery } from "./GeometryQuery";
11
11
  import { LineSegment3d } from "./LineSegment3d";
12
12
  import { LineString3d } from "./LineString3d";
13
13
  /**
14
- * * Private class for refining bezier-bezier intersections.
14
+ * Private class for refining bezier-bezier intersections.
15
15
  * * The inputs are assumed pre-transformed so that the target condition is to match x and y coordinates.
16
16
  * @internal
17
17
  */
@@ -36,11 +36,10 @@ export declare class CurveLocationDetailArrayPair {
36
36
  constructor();
37
37
  }
38
38
  /**
39
+ * Handler class for XY intersections between _geometryB and another geometry.
40
+ * * **NOTE:** GeometryQuery input (_geometryB) should really be AnyCurve.
39
41
  * * Instances are initialized and called from CurveCurve.
40
- * * Constructor is told two geometry items A and B
41
- * * geometryB is saved for later reference
42
- * * type-specific handler methods will "see" geometry A repeatedly.
43
- * * Hence geometryA is NOT saved by the constructor.
42
+ * * geometryB is saved for later reference.
44
43
  * @internal
45
44
  */
46
45
  export declare class CurveCurveIntersectXY extends NullGeometryHandler {
@@ -51,102 +50,101 @@ export declare class CurveCurveIntersectXY extends NullGeometryHandler {
51
50
  private _worldToLocalPerspective;
52
51
  private _worldToLocalAffine;
53
52
  private _coincidentGeometryContext;
53
+ private static _workVector2dA;
54
+ private static _workPointA0H;
55
+ private static _workPointA1H;
56
+ private static _workPointB0H;
57
+ private static _workPointB1H;
58
+ private static _workPointAA0;
59
+ private static _workPointAA1;
60
+ private static _workPointBB0;
61
+ private static _workPointBB1;
62
+ private static _workPointA0;
63
+ private static _workPointA1;
64
+ private static _workPointB0;
65
+ private static _workPointB1;
66
+ private _xyzwA0?;
67
+ private _xyzwA1?;
68
+ private _xyzwPlane?;
69
+ private _xyzwB?;
54
70
  private reinitialize;
55
71
  /**
56
72
  * @param worldToLocal optional transform (possibly perspective) to project to xy plane for intersection.
57
- * @param _geometryA first curve for intersection. This is NOT saved.
58
- * @param extendA flag to enable using extension of geometryA.
73
+ * @param extendA flag to enable using extension of the other geometry.
59
74
  * @param geometryB second curve for intersection. Saved for reference by specific handler methods.
60
75
  * @param extendB flag for extension of geometryB.
61
76
  * @param tolerance optional distance tolerance for coincidence
62
77
  */
63
- constructor(worldToLocal: Matrix4d | undefined, _geometryA: GeometryQuery | undefined, extendA: boolean, geometryB: GeometryQuery | undefined, extendB: boolean, tolerance?: number);
78
+ constructor(worldToLocal: Matrix4d | undefined, extendA: boolean, geometryB: GeometryQuery | undefined, extendB: boolean, tolerance?: number);
64
79
  /** Reset the geometry and flags, leaving all other parts unchanged (and preserving accumulated intersections) */
65
- resetGeometry(_geometryA: GeometryQuery, extendA: boolean, geometryB: GeometryQuery, extendB: boolean): void;
66
- private static _workVector2dA;
80
+ resetGeometry(extendA: boolean, geometryB: GeometryQuery, extendB: boolean): void;
67
81
  private acceptFraction;
68
- /** Test the fraction by strict parameter, but allow toleranced distance test at ends.
82
+ /**
83
+ * Test the fraction by strict parameter, but allow toleranced distance test at ends.
69
84
  * @param tolerance optional distance tolerance to check proximity to start/end point
70
85
  */
71
86
  private acceptFractionOnLine;
72
87
  /**
73
88
  * * Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair
74
89
  * @param reinitialize if true, a new results structure is created for use by later calls.
75
- *
76
90
  */
77
91
  grabPairedResults(reinitialize?: boolean): CurveLocationDetailPair[];
78
92
  private sameCurveAndFraction;
79
- /** compute intersection of two line segments.
80
- * filter by extension rules.
81
- * record with fraction mapping.
93
+ /**
94
+ * Compute intersection of two line segments.
95
+ * Filter by extension rules.
96
+ * Record with fraction mapping.
82
97
  */
83
98
  private recordPointWithLocalFractions;
84
99
  /**
85
- * emit recordPoint for multiple pairs (on full curve!)
86
- * @param cpA first curve primitive. (possibly different from curve in detailA, but fraction compatible)
87
- * @param cpB second curve primitive. (possibly different from curve in detailA, but fraction compatible)
100
+ * Emit recordPoint for multiple pairs (on full curve!)
101
+ * @param cpA first curve primitive (possibly different from curve in detailA, but fraction compatible)
102
+ * @param cpB second curve primitive (possibly different from curve in detailA, but fraction compatible)
88
103
  * @param pairs array of pairs
89
104
  * @param reversed true to have order reversed in final structures.
90
105
  */
91
106
  recordPairs(cpA: CurvePrimitive, cpB: CurvePrimitive, pairs: CurveLocationDetailPair[] | undefined, reversed: boolean): void;
92
- /** compute intersection of two line segments.
93
- * filter by extension rules.
94
- * record with fraction mapping.
107
+ /**
108
+ * Compute intersection of two line segments.
109
+ * Filter by extension rules.
110
+ * Record with fraction mapping.
95
111
  */
96
112
  private computeSegmentSegment3D;
97
- private static _workPointA0H;
98
- private static _workPointA1H;
99
- private static _workPointB0H;
100
- private static _workPointB1H;
101
113
  private computeSegmentSegment3DH;
102
114
  private dispatchSegmentSegment;
103
115
  private dispatchSegmentArc;
104
116
  private dispatchArcArcThisOrder;
105
117
  private dispatchArcArc;
106
118
  private dispatchArcBsplineCurve3d;
107
- /** apply the transformation to bezier curves. optionally construct ranges.
108
- *
109
- */
119
+ /** Apply the transformation to bezier curves. optionally construct ranges. */
110
120
  private transformBeziers;
111
121
  private getRanges;
112
- private _xyzwA0?;
113
- private _xyzwA1?;
114
- private _xyzwPlane?;
115
- private _xyzwB?;
116
122
  private dispatchBezierBezierStrokeFirst;
117
123
  private dispatchBSplineCurve3dBSplineCurve3d;
118
124
  /**
119
125
  * Apply the projection transform (if any) to (xyz, w)
120
126
  * @param xyz xyz parts of input point.
121
- * @param w weight to use for homogeneous effects
127
+ * @param w weight to use for homogeneous effects
122
128
  */
123
129
  private projectPoint;
124
130
  private mapNPCPlaneToWorld;
125
131
  private dispatchSegmentBsplineCurve;
126
- private static _workPointAA0;
127
- private static _workPointAA1;
128
- private static _workPointBB0;
129
- private static _workPointBB1;
130
- /** low level dispatch of linestring with (beziers of) a bspline curve */
132
+ /** Low level dispatch of linestring with (beziers of) a bspline curve. */
131
133
  dispatchLineStringBSplineCurve(lsA: LineString3d, extendA: boolean, curveB: BSplineCurve3d, extendB: boolean, reversed: boolean): any;
132
134
  /** Detail computation for segment intersecting linestring. */
133
135
  computeSegmentLineString(lsA: LineSegment3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean): any;
134
- /** Detail computation for arcA intersecting lsB. */
136
+ /** Detail computation for arc intersecting linestring. */
135
137
  computeArcLineString(arcA: Arc3d, extendA: boolean, lsB: LineString3d, extendB: boolean, reversed: boolean): any;
136
- private static _workPointA0;
137
- private static _workPointA1;
138
- private static _workPointB0;
139
- private static _workPointB1;
140
138
  private static setTransformedWorkPoints;
141
- /** double dispatch handler for strongly typed segment.. */
139
+ /** Double dispatch handler for strongly typed segment. */
142
140
  handleLineSegment3d(segmentA: LineSegment3d): any;
143
- /** double dispatch handler for strongly typed linestring.. */
141
+ /** Double dispatch handler for strongly typed linestring. */
144
142
  handleLineString3d(lsA: LineString3d): any;
145
- /** double dispatch handler for strongly typed arc .. */
143
+ /** Double dispatch handler for strongly typed arc. */
146
144
  handleArc3d(arc0: Arc3d): any;
147
- /** double dispatch handler for strongly typed bspline curve .. */
145
+ /** Double dispatch handler for strongly typed bspline curve. */
148
146
  handleBSplineCurve3d(curve: BSplineCurve3d): any;
149
- /** double dispatch handler for strongly typed homogeneous bspline curve .. */
147
+ /** Double dispatch handler for strongly typed homogeneous bspline curve .. */
150
148
  handleBSplineCurve3dH(_curve: BSplineCurve3dH): any;
151
149
  }
152
150
  //# sourceMappingURL=CurveCurveIntersectXY.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurveCurveIntersectXY.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveCurveIntersectXY.ts"],"names":[],"mappings":"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"}