@itwin/core-geometry 5.9.0-dev.8 → 5.9.0-dev.9

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 (637) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.d.ts +8 -6
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +8 -6
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  12. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  16. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  17. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  18. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  19. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  20. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  22. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  23. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  24. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  25. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  28. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  29. package/lib/cjs/core-geometry.js.map +1 -1
  30. package/lib/cjs/curve/Arc3d.d.ts +7 -0
  31. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  32. package/lib/cjs/curve/Arc3d.js +11 -0
  33. package/lib/cjs/curve/Arc3d.js.map +1 -1
  34. package/lib/cjs/curve/ConstrainedCurve2d.js.map +1 -1
  35. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  37. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +11 -2
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -15
  40. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.d.ts +15 -6
  42. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  43. package/lib/cjs/curve/CurveCollection.js +15 -6
  44. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  45. package/lib/cjs/curve/CurveCurve.d.ts +1 -1
  46. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  47. package/lib/cjs/curve/CurveCurve.js +2 -1
  48. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  49. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  50. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  51. package/lib/cjs/curve/CurveLocationDetail.d.ts +21 -0
  52. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurveLocationDetail.js +59 -0
  54. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  55. package/lib/cjs/curve/CurveOps.js.map +1 -1
  56. package/lib/cjs/curve/CurvePrimitive.d.ts +13 -12
  57. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  58. package/lib/cjs/curve/CurvePrimitive.js +12 -11
  59. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  60. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  61. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  62. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  63. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  64. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  65. package/lib/cjs/curve/LineString3d.js.map +1 -1
  66. package/lib/cjs/curve/Loop.js.map +1 -1
  67. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  68. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  69. package/lib/cjs/curve/Path.js.map +1 -1
  70. package/lib/cjs/curve/PointString3d.js.map +1 -1
  71. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  72. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  73. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  74. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  75. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  76. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  77. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  78. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  79. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  80. package/lib/cjs/curve/RegionOps.d.ts +17 -4
  81. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  82. package/lib/cjs/curve/RegionOps.js +114 -18
  83. package/lib/cjs/curve/RegionOps.js.map +1 -1
  84. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +3 -11
  85. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  86. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +1 -91
  87. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  88. package/lib/cjs/curve/StrokeOptions.d.ts +13 -6
  89. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  90. package/lib/cjs/curve/StrokeOptions.js +13 -6
  91. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  92. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +1 -1
  94. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -1
  95. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js +1 -2
  96. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts +1 -1
  98. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts.map +1 -1
  99. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +1 -2
  100. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +1 -1
  105. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  106. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +1 -2
  107. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  108. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  109. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +113 -103
  110. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  111. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +368 -337
  112. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +2 -3
  114. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  115. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +20 -32
  116. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  121. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -1
  125. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  126. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  127. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  128. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
  131. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
  132. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
  133. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
  135. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
  136. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
  137. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -1
  138. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  139. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  140. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  141. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  142. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  143. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +1 -2
  144. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  145. package/lib/cjs/curve/spiral/DirectSpiral3d.js +9 -3
  146. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  147. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +1 -2
  148. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  149. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +10 -4
  150. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  151. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  152. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  153. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  154. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  155. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  156. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  157. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  158. package/lib/cjs/geometry3d/AngleSweep.d.ts +3 -1
  159. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/AngleSweep.js +6 -2
  161. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  162. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  163. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  164. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  165. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  166. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  167. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  168. package/lib/cjs/geometry3d/GeometryHandler.d.ts +33 -4
  169. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  170. package/lib/cjs/geometry3d/GeometryHandler.js +79 -1
  171. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  172. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  173. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  174. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +9 -6
  175. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  176. package/lib/cjs/geometry3d/GrowableXYArray.js +20 -10
  177. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  178. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +9 -6
  179. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  180. package/lib/cjs/geometry3d/GrowableXYZArray.js +20 -10
  181. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  182. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  183. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  184. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  185. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  186. package/lib/cjs/geometry3d/Matrix3d.d.ts +4 -4
  187. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  188. package/lib/cjs/geometry3d/Matrix3d.js +5 -4
  189. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  190. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  191. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  192. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  193. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  194. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  195. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  196. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  197. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  198. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  199. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  200. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  201. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  202. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  203. package/lib/cjs/geometry3d/Range.js.map +1 -1
  204. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  205. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  206. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  207. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  208. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  209. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  210. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  211. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  212. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  213. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  214. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  215. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  216. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  217. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  218. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  219. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  220. package/lib/cjs/numerics/BezierPolynomials.js +1 -1
  221. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  222. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  223. package/lib/cjs/numerics/Complex.js.map +1 -1
  224. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  225. package/lib/cjs/numerics/Newton.d.ts +44 -13
  226. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  227. package/lib/cjs/numerics/Newton.js +73 -23
  228. package/lib/cjs/numerics/Newton.js.map +1 -1
  229. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  230. package/lib/cjs/numerics/PolarData.js.map +1 -1
  231. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  232. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  233. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  234. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  235. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  236. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  237. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  238. package/lib/cjs/polyface/AuxData.js.map +1 -1
  239. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  240. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  241. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  242. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  243. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  244. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  245. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  246. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  247. package/lib/cjs/polyface/Polyface.js.map +1 -1
  248. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  249. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  250. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  251. package/lib/cjs/polyface/PolyfaceQuery.d.ts +14 -14
  252. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  253. package/lib/cjs/polyface/PolyfaceQuery.js +14 -14
  254. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  255. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  256. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  257. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  258. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  259. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  260. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  261. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  262. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  263. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  264. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  265. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  266. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  267. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  268. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  269. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  270. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  271. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  272. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  273. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  274. package/lib/cjs/serialization/BGFBReader.js +2 -2
  275. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  276. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  277. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  278. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  279. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  280. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  281. package/lib/cjs/solid/Box.js.map +1 -1
  282. package/lib/cjs/solid/Cone.js.map +1 -1
  283. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  284. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  285. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  286. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  287. package/lib/cjs/solid/Sphere.js.map +1 -1
  288. package/lib/cjs/solid/SweepContour.js.map +1 -1
  289. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  290. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  291. package/lib/cjs/topology/Graph.d.ts +15 -15
  292. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  293. package/lib/cjs/topology/Graph.js +1 -1
  294. package/lib/cjs/topology/Graph.js.map +1 -1
  295. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  296. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +3 -3
  297. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  298. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  299. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  300. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  301. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  302. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  303. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  304. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  305. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  306. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  307. package/lib/cjs/topology/MaskManager.js.map +1 -1
  308. package/lib/cjs/topology/Merging.js.map +1 -1
  309. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  310. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  311. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  312. package/lib/cjs/topology/Triangulation.js.map +1 -1
  313. package/lib/cjs/topology/Voronoi.js.map +1 -1
  314. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  315. package/lib/esm/Constant.js.map +1 -1
  316. package/lib/esm/Geometry.d.ts +8 -6
  317. package/lib/esm/Geometry.d.ts.map +1 -1
  318. package/lib/esm/Geometry.js +8 -6
  319. package/lib/esm/Geometry.js.map +1 -1
  320. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  321. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  322. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  323. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  324. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  325. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  326. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  327. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  328. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  329. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  330. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  331. package/lib/esm/bspline/KnotVector.js.map +1 -1
  332. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  333. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  334. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  335. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  336. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  337. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  338. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  339. package/lib/esm/clipping/ClipVector.js.map +1 -1
  340. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  341. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  342. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  343. package/lib/esm/core-geometry.js.map +1 -1
  344. package/lib/esm/curve/Arc3d.d.ts +7 -0
  345. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  346. package/lib/esm/curve/Arc3d.js +11 -0
  347. package/lib/esm/curve/Arc3d.js.map +1 -1
  348. package/lib/esm/curve/ConstrainedCurve2d.js.map +1 -1
  349. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  350. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  351. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +11 -2
  352. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  353. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -15
  354. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  355. package/lib/esm/curve/CurveCollection.d.ts +15 -6
  356. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  357. package/lib/esm/curve/CurveCollection.js +15 -6
  358. package/lib/esm/curve/CurveCollection.js.map +1 -1
  359. package/lib/esm/curve/CurveCurve.d.ts +1 -1
  360. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  361. package/lib/esm/curve/CurveCurve.js +2 -1
  362. package/lib/esm/curve/CurveCurve.js.map +1 -1
  363. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  364. package/lib/esm/curve/CurveFactory.js.map +1 -1
  365. package/lib/esm/curve/CurveLocationDetail.d.ts +21 -0
  366. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  367. package/lib/esm/curve/CurveLocationDetail.js +59 -0
  368. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  369. package/lib/esm/curve/CurveOps.js.map +1 -1
  370. package/lib/esm/curve/CurvePrimitive.d.ts +13 -12
  371. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  372. package/lib/esm/curve/CurvePrimitive.js +12 -11
  373. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  374. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  375. package/lib/esm/curve/CurveTypes.js.map +1 -1
  376. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  377. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  378. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  379. package/lib/esm/curve/LineString3d.js.map +1 -1
  380. package/lib/esm/curve/Loop.js.map +1 -1
  381. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  382. package/lib/esm/curve/ParityRegion.js.map +1 -1
  383. package/lib/esm/curve/Path.js.map +1 -1
  384. package/lib/esm/curve/PointString3d.js.map +1 -1
  385. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  386. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  387. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  388. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  389. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  390. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  391. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  392. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  393. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  394. package/lib/esm/curve/RegionOps.d.ts +17 -4
  395. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  396. package/lib/esm/curve/RegionOps.js +116 -20
  397. package/lib/esm/curve/RegionOps.js.map +1 -1
  398. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +3 -11
  399. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  400. package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -92
  401. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  402. package/lib/esm/curve/StrokeOptions.d.ts +13 -6
  403. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  404. package/lib/esm/curve/StrokeOptions.js +13 -6
  405. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  406. package/lib/esm/curve/UnionRegion.js.map +1 -1
  407. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +1 -1
  408. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -1
  409. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js +1 -2
  410. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  411. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts +1 -1
  412. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts.map +1 -1
  413. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +1 -2
  414. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  415. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  416. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  417. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  418. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +1 -1
  419. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  420. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +1 -2
  421. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  422. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  423. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +113 -103
  424. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  425. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +370 -339
  426. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  427. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +2 -3
  428. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  429. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +20 -32
  430. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  431. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  432. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  433. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  434. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  435. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  436. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  437. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  438. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -1
  439. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  440. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  441. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  442. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  443. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -1
  444. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -1
  445. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -1
  446. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -1
  447. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -1
  448. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -1
  449. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -1
  450. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -1
  451. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -1
  452. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  453. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  454. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  455. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  456. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  457. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +1 -2
  458. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  459. package/lib/esm/curve/spiral/DirectSpiral3d.js +9 -3
  460. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  461. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +1 -2
  462. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  463. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +10 -4
  464. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  465. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  466. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  467. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  468. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  469. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  470. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  471. package/lib/esm/geometry3d/Angle.js.map +1 -1
  472. package/lib/esm/geometry3d/AngleSweep.d.ts +3 -1
  473. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  474. package/lib/esm/geometry3d/AngleSweep.js +6 -2
  475. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  476. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  477. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  478. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  479. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  480. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  481. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  482. package/lib/esm/geometry3d/GeometryHandler.d.ts +33 -4
  483. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  484. package/lib/esm/geometry3d/GeometryHandler.js +77 -0
  485. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  486. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  487. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  488. package/lib/esm/geometry3d/GrowableXYArray.d.ts +9 -6
  489. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  490. package/lib/esm/geometry3d/GrowableXYArray.js +20 -10
  491. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  492. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +9 -6
  493. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  494. package/lib/esm/geometry3d/GrowableXYZArray.js +20 -10
  495. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  496. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  497. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  498. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  499. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  500. package/lib/esm/geometry3d/Matrix3d.d.ts +4 -4
  501. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  502. package/lib/esm/geometry3d/Matrix3d.js +5 -4
  503. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  504. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  505. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  506. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  507. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  508. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  509. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  510. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  511. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  512. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  513. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  514. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  515. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  516. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  517. package/lib/esm/geometry3d/Range.js.map +1 -1
  518. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  519. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  520. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  521. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  522. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  523. package/lib/esm/geometry3d/Transform.js.map +1 -1
  524. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  525. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  526. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  527. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  528. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  529. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  530. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  531. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  532. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  533. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  534. package/lib/esm/numerics/BezierPolynomials.js +1 -1
  535. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  536. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  537. package/lib/esm/numerics/Complex.js.map +1 -1
  538. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  539. package/lib/esm/numerics/Newton.d.ts +44 -13
  540. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  541. package/lib/esm/numerics/Newton.js +71 -22
  542. package/lib/esm/numerics/Newton.js.map +1 -1
  543. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  544. package/lib/esm/numerics/PolarData.js.map +1 -1
  545. package/lib/esm/numerics/Polynomials.js.map +1 -1
  546. package/lib/esm/numerics/Quadrature.js.map +1 -1
  547. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  548. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  549. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  550. package/lib/esm/numerics/UnionFind.js.map +1 -1
  551. package/lib/esm/numerics/UsageSums.js.map +1 -1
  552. package/lib/esm/polyface/AuxData.js.map +1 -1
  553. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  554. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  555. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  556. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  557. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  558. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  559. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  560. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  561. package/lib/esm/polyface/Polyface.js.map +1 -1
  562. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  563. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  564. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  565. package/lib/esm/polyface/PolyfaceQuery.d.ts +14 -14
  566. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  567. package/lib/esm/polyface/PolyfaceQuery.js +14 -14
  568. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  569. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  570. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  571. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  572. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  573. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  574. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  575. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  576. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  577. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  578. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  579. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  580. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  581. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  582. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  583. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  584. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  585. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  586. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  587. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  588. package/lib/esm/serialization/BGFBReader.js +2 -2
  589. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  590. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  591. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  592. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  593. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  594. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  595. package/lib/esm/solid/Box.js.map +1 -1
  596. package/lib/esm/solid/Cone.js.map +1 -1
  597. package/lib/esm/solid/LinearSweep.js.map +1 -1
  598. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  599. package/lib/esm/solid/RuledSweep.js.map +1 -1
  600. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  601. package/lib/esm/solid/Sphere.js.map +1 -1
  602. package/lib/esm/solid/SweepContour.js.map +1 -1
  603. package/lib/esm/solid/TorusPipe.js.map +1 -1
  604. package/lib/esm/topology/ChainMerge.js.map +1 -1
  605. package/lib/esm/topology/Graph.d.ts +15 -15
  606. package/lib/esm/topology/Graph.d.ts.map +1 -1
  607. package/lib/esm/topology/Graph.js +1 -1
  608. package/lib/esm/topology/Graph.js.map +1 -1
  609. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  610. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +3 -3
  611. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  612. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  613. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  614. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  615. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  616. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  617. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  618. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  619. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  620. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  621. package/lib/esm/topology/MaskManager.js.map +1 -1
  622. package/lib/esm/topology/Merging.js.map +1 -1
  623. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  624. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  625. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  626. package/lib/esm/topology/Triangulation.js.map +1 -1
  627. package/lib/esm/topology/Voronoi.js.map +1 -1
  628. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  629. package/package.json +3 -3
  630. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +0 -23
  631. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +0 -1
  632. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +0 -37
  633. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +0 -1
  634. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +0 -23
  635. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +0 -1
  636. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +0 -33
  637. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ClusterableArray.js","sourceRoot":"","sources":["../../../src/numerics/ClusterableArray.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 Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableBlockedArray } from \"../geometry3d/GrowableBlockedArray\";\r\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n/**\r\n * Blocked array with operations to sort and cluster with a tolerance.\r\n * * Primary sorting is along an \"arbitrary\" sort vector.\r\n * @internal\r\n */\r\nexport class ClusterableArray extends GrowableBlockedArray {\r\n // (This is pretty strange)\r\n // The sort vector is (1,c, c*c, ...)\r\n // Setting c = 1 makes it 1,1,1 which may be useful for visual scans during debug.\r\n // c with some non-obvious digits makes it unlikely that there will be multiple points on a perpendicular to the sort vector.\r\n private static readonly _vectorFactor = 0.8732; // use 1.0 to rig easy tests.\r\n /** Return a component of the sort vector. */\r\n public static sortVectorComponent(index: number): number {\r\n let c = 1.0;\r\n for (let i = 1; i < index; i++) c *= ClusterableArray._vectorFactor;\r\n return c;\r\n }\r\n private _numCoordinatePerPoint: number;\r\n private _numExtraDataPerPoint: number;\r\n /**\r\n * @param numCoordinatePerPoint number of coordinates per point\r\n * @param numExtraDataPerPoint of extra data values per point.\r\n * @param initialBlockCapacity predicted number of points. (This does not have to be accurate)\r\n */\r\n public constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number) {\r\n super(1 + numCoordinatePerPoint + numExtraDataPerPoint, initialBlockCapacity);\r\n this._numExtraDataPerPoint = numExtraDataPerPoint;\r\n this._numCoordinatePerPoint = numCoordinatePerPoint;\r\n }\r\n /** load a block, placing data[i] at block[i+1] to allow sort coordinate first.\r\n * @param data array of numDataPerBlock values.\r\n */\r\n public override addBlock(data: number[]) {\r\n const i0 = this.newBlockIndex() + 1;\r\n const n = Math.min(this.numPerBlock - 1, data.length);\r\n for (let i = 0; i < n; i++)\r\n this._data[i0 + i] = data[i];\r\n }\r\n /** add a block directly with 1 to 5 listed content parameters.\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addDirect(x0: number, x1?: number, x2?: number, x3?: number, x4?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = x0;\r\n if (x1 !== undefined) this._data[i0 + 2] = x1;\r\n if (x2 !== undefined) this._data[i0 + 3] = x2;\r\n if (x3 !== undefined) this._data[i0 + 4] = x3;\r\n if (x4 !== undefined) this._data[i0 + 5] = x4;\r\n }\r\n\r\n /** add a block directly from a Point2d with 0 to 3 extras\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addPoint2d(xy: Point2d, a?: number, b?: number, c?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = xy.x;\r\n this._data[i0 + 2] = xy.y;\r\n if (a !== undefined)\r\n this._data[i0 + 3] = a;\r\n if (b !== undefined)\r\n this._data[i0 + 4] = b;\r\n if (c !== undefined)\r\n this._data[i0 + 5] = c;\r\n }\r\n\r\n /** add a block with directly from a Point2d with 0 to 3 extras\r\n * This assumes numDataPerPoint is sufficient for the parameters provided.\r\n */\r\n public addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number) {\r\n const i0 = this.newBlockIndex();\r\n this._data[i0 + 1] = xyz.x;\r\n this._data[i0 + 2] = xyz.y;\r\n this._data[i0 + 3] = xyz.z;\r\n if (a !== undefined)\r\n this._data[i0 + 4] = a;\r\n if (b !== undefined)\r\n this._data[i0 + 5] = b;\r\n if (c !== undefined)\r\n this._data[i0 + 6] = c;\r\n }\r\n /** Get the xy coordinates by point index. */\r\n public getPoint2d(blockIndex: number, result?: Point2d): Point2d {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return Point2d.create(this._data[i0 + 1], this._data[i0 + 2], result);\r\n }\r\n /** Get the xyZ coordinates by point index. */\r\n public getPoint3d(blockIndex: number, result?: Point3d): Point3d {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return Point3d.create(this._data[i0 + 1], this._data[i0 + 2], this._data[i0 + 3], result);\r\n }\r\n /** Return a single extra data value */\r\n public getExtraData(blockIndex: number, i: number): number {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return this._data[i0 + 1 + this._numCoordinatePerPoint + i];\r\n }\r\n /** Return a single data value */\r\n public getData(blockIndex: number, i: number): number {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n return this._data[i0 + i];\r\n }\r\n\r\n /** Set a single extra data value */\r\n public setExtraData(blockIndex: number, i: number, value: number): void {\r\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\r\n this._data[i0 + 1 + this._numCoordinatePerPoint + i] = value;\r\n }\r\n\r\n /** this value is used as cluster terminator in the Uint232Array of indices. */\r\n public static readonly clusterTerminator = 0xFFffFFff;\r\n /** Test if `x` is the cluster terminator value. */\r\n public static isClusterTerminator(x: number): boolean { return x === ClusterableArray.clusterTerminator; }\r\n /** Return an array giving clusters of blocks with similar coordinates.\r\n *\r\n * * The contents of each block is assumed to be set up so the primary sort coordinate is first.\r\n *\r\n * ** simple coordinate blocks (x,y) or (x,y,z) would work fine but have occasional performance problems because points with same x would generate big blocks of\r\n * candidates for clusters.\r\n * ** The usual solution is to sort by u value, which is a dot product along some skew direction, and have the blocks contain (u,x,y) or (u,x,y,z) for 2d versus 3d.\r\n * ** apply setupPrimaryClusterSort to prepare that!!!\r\n * * After a simple lexical sort, consecutive blocks that are within tolerance in the 0 component\r\n * are inspected. Within that candidate set, all blocks that are within tolerance for ALL components are clustered.\r\n * * In the output cluster array, clusters are terminated a invalid index. Test for the invalid index with GrowableBlockArray.isClusterTerminator (x)\r\n */\r\n public clusterIndicesLexical(clusterTolerance: number = Geometry.smallMetricDistance): Uint32Array {\r\n // install primary sort key\r\n this.setupPrimaryClusterSort();\r\n // presort by all coordinates ....\r\n const firstSort = this.sortIndicesLexical();\r\n const clusterIndices = new Uint32Array(2 * firstSort.length); // worst case: no duplicates, each index goes in followed by terminator.\r\n let m = 0; // number of cluster indices\r\n const n = this.numBlocks; // and this must match firstSort.length !!\r\n let clusterStartBlockIndex = 0;\r\n let candidateBlockIndex = 0;\r\n let barrierU = 0.0;\r\n let i = 0;\r\n let j = 0;\r\n const k0 = 1; // beginning of active column for distance\r\n const k1 = 1 + this._numCoordinatePerPoint;\r\n for (i = 0; i < n; i++) {\r\n clusterStartBlockIndex = firstSort[i];\r\n if (!ClusterableArray.isClusterTerminator(clusterStartBlockIndex)) {\r\n // unused block, so it becomes a cluster...\r\n clusterIndices[m++] = clusterStartBlockIndex;\r\n barrierU = this.component(clusterStartBlockIndex, 0) + clusterTolerance;\r\n firstSort[i] = ClusterableArray.clusterTerminator;\r\n for (j = i + 1; j < n; j++) {\r\n candidateBlockIndex = firstSort[j];\r\n if (candidateBlockIndex === ClusterableArray.clusterTerminator)\r\n continue; // nearby in sort direction but already in a cluster.\r\n if (this.component(candidateBlockIndex, 0) > barrierU)\r\n break;\r\n if (this.distanceBetweenSubBlocks(clusterStartBlockIndex, candidateBlockIndex, k0, k1) <= clusterTolerance) {\r\n clusterIndices[m++] = candidateBlockIndex; // The candidate is in the block\r\n firstSort[j] = ClusterableArray.clusterTerminator; // and it will not be reused as future block base\r\n }\r\n }\r\n clusterIndices[m++] = ClusterableArray.clusterTerminator;\r\n }\r\n }\r\n // Alas, the clusterIndices array has fluff at the end. So it has to be copied.\r\n return clusterIndices.slice(0, m);\r\n }\r\n /** setup (overwrite!!) the \"0\" component with the dot product of numClusterCoordinate later components with a non-axis aligned vector.\r\n * This is normally called before clusterIndicesLexical.\r\n */\r\n public setupPrimaryClusterSort() {\r\n const nb = this.numBlocks;\r\n const nc = this._numCoordinatePerPoint;\r\n const vector = new Float64Array(nc);\r\n vector[0] = 1.0;\r\n for (let c = 1; c < nc; c++) vector[c] = vector[c - 1] * ClusterableArray._vectorFactor;\r\n let k = 0;\r\n let dot = 0.0;\r\n const data = this._data;\r\n for (let b = 0; b < nb; b++) {\r\n k = this.blockIndexToDoubleIndex(b);\r\n dot = 0.0;\r\n for (let c = 0; c < nc; c++) { dot += vector[c] * data[k + 1 + c]; }\r\n data[k] = dot;\r\n }\r\n }\r\n /** Convert the cluster data to an array of tuples with point i in the form\r\n * `[i, primarySortCoordinate, [x,y,..], [extraData0, extraData1, ...]]`\r\n */\r\n public toJSON(): any[] {\r\n const result: any[] = [];\r\n for (let b = 0; b < this.numBlocks; b++) {\r\n let i = this.blockIndexToDoubleIndex(b);\r\n const chunk: any[] = [b, this._data[i++]];\r\n const coordinates = [];\r\n for (let c = 0; c < this._numCoordinatePerPoint; c++)coordinates.push(this._data[i++]);\r\n chunk.push(coordinates);\r\n for (let c = 0; c < this._numExtraDataPerPoint; c++)\r\n chunk.push(this._data[i++]);\r\n result.push(chunk);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return an array of indices from block index to cluster index.\r\n * @param clusteredBlocks clusters of block indices followed by separators.\r\n */\r\n public createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array {\r\n const numBlocks = this.numBlocks;\r\n const blockToCluster = new Uint32Array(numBlocks);\r\n blockToCluster.fill(ClusterableArray.clusterTerminator);\r\n let numCluster = 0;\r\n for (const b of clusteredBlocks) {\r\n if (b >= numBlocks) {\r\n numCluster++;\r\n } else {\r\n blockToCluster[b] = numCluster;\r\n }\r\n }\r\n return blockToCluster;\r\n }\r\n /**\r\n * Return an array of indices from block index to index of its cluster's start in the cluster index array.\r\n * @param clusteredBlocks clusters of block indices followed by separators.\r\n */\r\n public createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\r\n const n = clusteredBlocks.length;\r\n const numBlocks = this.numBlocks;\r\n const blockToClusterStart = new Uint32Array(numBlocks);\r\n const terminator = ClusterableArray.clusterTerminator;\r\n blockToClusterStart.fill(terminator);\r\n let clusterStart = 0;\r\n for (let i = 0; i < n; i++) {\r\n const k = clusteredBlocks[i];\r\n if (k > numBlocks) {\r\n clusterStart = i + 1;\r\n } else {\r\n blockToClusterStart[k] = clusterStart;\r\n }\r\n }\r\n return blockToClusterStart;\r\n }\r\n /** count the clusters in the clusteredBlocks array. */\r\n public countClusters(clusteredBlocks: Uint32Array): number {\r\n let numClusters = 0;\r\n const terminator = ClusterableArray.clusterTerminator;\r\n for (const b of clusteredBlocks) {\r\n if (b === terminator)\r\n numClusters++;\r\n }\r\n return numClusters;\r\n }\r\n /** create a reverse index: given a cluster index k, clusterToClusterStart[k] is the place\r\n * the cluster's block indices appear in clusterBlocks\r\n */\r\n public createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\r\n let numCluster = this.countClusters(clusteredBlocks);\r\n const clusterToClusterStart = new Uint32Array(numCluster);\r\n const terminator = ClusterableArray.clusterTerminator;\r\n clusterToClusterStart.fill(terminator);\r\n const n = clusteredBlocks.length;\r\n let clusterStart = 0;\r\n for (let i = 0; i < n; i++) {\r\n const k = clusteredBlocks[i];\r\n if (k === terminator) {\r\n clusterStart = i + 1;\r\n } else if (i === clusterStart) {\r\n clusterToClusterStart[numCluster++] = clusterStart;\r\n }\r\n }\r\n return clusterToClusterStart;\r\n }\r\n\r\n /**\r\n * Sort terminator-delimited subsets of an array of indices into the table, using a single data value as sort key.\r\n * @param blockedIndices indices, organized as blocks of good indices terminated by the clusterTerminator. Each block is individually sorted on return.\r\n * @param dataIndex index of the data key, e.g., if the sort key is the first extraData (angle) after x and y coordinate data, pass dataIndex = 2.\r\n */\r\n public sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number) {\r\n const dataOffset = 1 + dataIndex;\r\n let kBegin = 0;\r\n let swap;\r\n let key0, key1;\r\n const numK = blockedIndices.length;\r\n for (let kEnd = 0; kEnd < numK; kEnd++) {\r\n if (blockedIndices[kEnd] === ClusterableArray.clusterTerminator) {\r\n // bubble sort blockedIndices[kBegin <= k < kEnd].\r\n // (search for minimum remaining, swap . . )\r\n for (let k0 = kBegin; k0 + 1 < kEnd; k0++) {\r\n key0 = this.getWithinBlock(blockedIndices[k0], dataOffset);\r\n for (let k1 = k0 + 1; k1 < kEnd; k1++) {\r\n key1 = this.getWithinBlock(blockedIndices[k1], dataOffset);\r\n if (key1 < key0) {\r\n swap = blockedIndices[k0];\r\n blockedIndices[k0] = blockedIndices[k1];\r\n blockedIndices[k1] = swap;\r\n key0 = key1;\r\n }\r\n }\r\n }\r\n kBegin = kEnd + 1;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n */\r\n public static clusterPoint3dArray(data: Point3d[], tolerance: number = Geometry.smallMetricDistance): PackedPointsWithIndex {\r\n const clusterArray = new ClusterableArray(3, 0, data.length);\r\n data.forEach((p: Point3d) => {\r\n clusterArray.addDirect(p.x, p.y, p.z);\r\n });\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const result = new PackedPointsWithIndex(data.length, 0);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0)\r\n result.packedPoints.push(data[k].clone());\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns number array with indices mapping old to new.\r\n * @param data numbers to cluster.\r\n */\r\n public static clusterNumberArray(data: number[], tolerance: number = Geometry.smallMetricDistance): PackedNumbersWithIndex {\r\n const clusterArray = new ClusterableArray(1, 0, data.length);\r\n data.forEach((x: number) => {clusterArray.addDirect(x);});\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const result = new PackedNumbersWithIndex(data.length);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0)\r\n result.packedNumbers.push(data[k]);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n */\r\n public static clusterGrowablePoint2dArray(source: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): PackedPoint2dsWithIndex {\r\n const clusterArray = new ClusterableArray(2, 0, source.length);\r\n const p = Point2d.create();\r\n const numSourcePoint = source.length;\r\n for (let i = 0; i < numSourcePoint; i++) {\r\n source.getPoint2dAtUncheckedPointIndex(i, p);\r\n clusterArray.addDirect(p.x, p.y);\r\n }\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const numPackedPoints = clusterArray.countClusters(order);\r\n const result = new PackedPoint2dsWithIndex(source.length, numPackedPoints);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0) // This is the first encounter with a new cluster\r\n result.growablePackedPoints.pushFromGrowableXYArray(source, k);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns packed points with indices mapping old to new.\r\n * @param data points to cluster.\r\n * @returns data carrier for the packed points as a GrowableXYZArray\r\n */\r\n public static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance: number = Geometry.smallMetricDistance): PackedPointsWithIndex {\r\n const clusterArray = new ClusterableArray(3, 0, source.length);\r\n const p = Point3d.create();\r\n const numSourcePoint = source.length;\r\n for (let i = 0; i < numSourcePoint; i++) {\r\n source.getPoint3dAtUncheckedPointIndex(i, p);\r\n clusterArray.addDirect(p.x, p.y, p.z);\r\n }\r\n const order = clusterArray.clusterIndicesLexical(tolerance);\r\n const numPackedPoints = clusterArray.countClusters(order);\r\n const result = new PackedPointsWithIndex(source.length, numPackedPoints);\r\n let currentClusterIndex = 0;\r\n let numThisCluster = 0;\r\n order.forEach((k: number) => {\r\n if (ClusterableArray.isClusterTerminator(k)) {\r\n currentClusterIndex++;\r\n numThisCluster = 0;\r\n } else {\r\n if (numThisCluster === 0) // This is the first encounter with a new cluster\r\n result.growablePackedPoints.pushFromGrowableXYZArray(source, k);\r\n result.oldToNew[k] = currentClusterIndex;\r\n numThisCluster++;\r\n }\r\n });\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction updateIndices(indices: number[], oldToNew: Uint32Array): boolean {\r\n let numErrors = 0;\r\n indices.forEach((value: number, i: number, data: number[]) => {\r\n if (value < oldToNew.length) {\r\n data[i] = oldToNew[value];\r\n } else numErrors++;\r\n });\r\n return numErrors === 0;\r\n}\r\n\r\n/**\r\n * Data carrier class for\r\n * * packedPoints = an array of Point3d\r\n * * growablePackedPoints = a growable array of xyz coordinates\r\n * * oldToNew = array of indices from some prior Point3d[] to the packed points.\r\n * @internal\r\n */\r\nclass PackedPointsWithIndex {\r\n /** Array of Point3d */\r\n public packedPoints: Point3d[];\r\n /** array of coordinates packed in GrowableXYZArray */\r\n public growablePackedPoints: GrowableXYZArray;\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedPoints object with\r\n * * empty packedPoints array\r\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\r\n this.packedPoints = [];\r\n this.growablePackedPoints = new GrowableXYZArray(numPackedPoints);\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass PackedPoint2dsWithIndex {\r\n /** array of coordinates packed in GrowableXYArray */\r\n public growablePackedPoints: GrowableXYArray;\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedPoints object with\r\n * * empty packedPoints array\r\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\r\n this.growablePackedPoints = new GrowableXYArray(numPackedPoints);\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPoint2dsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\n class PackedNumbersWithIndex {\r\n /** Array of numbers */\r\n public packedNumbers: number[];\r\n /** mapping from old point index to new point index. */\r\n public oldToNew: Uint32Array;\r\n /** integer value for unknown index. */\r\n public static readonly invalidIndex = 0xFFFFffff;\r\n\r\n /** construct a PackedNumbers object with\r\n * * empty packedNumbers array\r\n * * oldToNew indices all initialized to PackedNumbers.invalidIndex\r\n */\r\n constructor(numOldIndexEntry: number) {\r\n this.packedNumbers = [];\r\n this.oldToNew = new Uint32Array(numOldIndexEntry);\r\n for (let i = 0; i < numOldIndexEntry; i++) {\r\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\r\n }\r\n }\r\n /**\r\n * Use the oldToNew array to update an array of \"old\" indices.\r\n * @param indices array of indices into prepacked array.\r\n * @returns true if all input indices were valid for the oldToNew array.\r\n */\r\n public updateIndices(indices: number[]): boolean {\r\n return updateIndices(indices, this.oldToNew);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ClusterableArray.js","sourceRoot":"","sources":["../../../src/numerics/ClusterableArray.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 Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableBlockedArray } from \"../geometry3d/GrowableBlockedArray\";\nimport { GrowableXYArray } from \"../geometry3d/GrowableXYArray\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/**\n * Blocked array with operations to sort and cluster with a tolerance.\n * * Primary sorting is along an \"arbitrary\" sort vector.\n * @internal\n */\nexport class ClusterableArray extends GrowableBlockedArray {\n // (This is pretty strange)\n // The sort vector is (1,c, c*c, ...)\n // Setting c = 1 makes it 1,1,1 which may be useful for visual scans during debug.\n // c with some non-obvious digits makes it unlikely that there will be multiple points on a perpendicular to the sort vector.\n private static readonly _vectorFactor = 0.8732; // use 1.0 to rig easy tests.\n /** Return a component of the sort vector. */\n public static sortVectorComponent(index: number): number {\n let c = 1.0;\n for (let i = 1; i < index; i++) c *= ClusterableArray._vectorFactor;\n return c;\n }\n private _numCoordinatePerPoint: number;\n private _numExtraDataPerPoint: number;\n /**\n * @param numCoordinatePerPoint number of coordinates per point\n * @param numExtraDataPerPoint of extra data values per point.\n * @param initialBlockCapacity predicted number of points. (This does not have to be accurate)\n */\n public constructor(numCoordinatePerPoint: number, numExtraDataPerPoint: number, initialBlockCapacity: number) {\n super(1 + numCoordinatePerPoint + numExtraDataPerPoint, initialBlockCapacity);\n this._numExtraDataPerPoint = numExtraDataPerPoint;\n this._numCoordinatePerPoint = numCoordinatePerPoint;\n }\n /** load a block, placing data[i] at block[i+1] to allow sort coordinate first.\n * @param data array of numDataPerBlock values.\n */\n public override addBlock(data: number[]) {\n const i0 = this.newBlockIndex() + 1;\n const n = Math.min(this.numPerBlock - 1, data.length);\n for (let i = 0; i < n; i++)\n this._data[i0 + i] = data[i];\n }\n /** add a block directly with 1 to 5 listed content parameters.\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addDirect(x0: number, x1?: number, x2?: number, x3?: number, x4?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = x0;\n if (x1 !== undefined) this._data[i0 + 2] = x1;\n if (x2 !== undefined) this._data[i0 + 3] = x2;\n if (x3 !== undefined) this._data[i0 + 4] = x3;\n if (x4 !== undefined) this._data[i0 + 5] = x4;\n }\n\n /** add a block directly from a Point2d with 0 to 3 extras\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addPoint2d(xy: Point2d, a?: number, b?: number, c?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = xy.x;\n this._data[i0 + 2] = xy.y;\n if (a !== undefined)\n this._data[i0 + 3] = a;\n if (b !== undefined)\n this._data[i0 + 4] = b;\n if (c !== undefined)\n this._data[i0 + 5] = c;\n }\n\n /** add a block with directly from a Point2d with 0 to 3 extras\n * This assumes numDataPerPoint is sufficient for the parameters provided.\n */\n public addPoint3d(xyz: Point3d, a?: number, b?: number, c?: number) {\n const i0 = this.newBlockIndex();\n this._data[i0 + 1] = xyz.x;\n this._data[i0 + 2] = xyz.y;\n this._data[i0 + 3] = xyz.z;\n if (a !== undefined)\n this._data[i0 + 4] = a;\n if (b !== undefined)\n this._data[i0 + 5] = b;\n if (c !== undefined)\n this._data[i0 + 6] = c;\n }\n /** Get the xy coordinates by point index. */\n public getPoint2d(blockIndex: number, result?: Point2d): Point2d {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return Point2d.create(this._data[i0 + 1], this._data[i0 + 2], result);\n }\n /** Get the xyZ coordinates by point index. */\n public getPoint3d(blockIndex: number, result?: Point3d): Point3d {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return Point3d.create(this._data[i0 + 1], this._data[i0 + 2], this._data[i0 + 3], result);\n }\n /** Return a single extra data value */\n public getExtraData(blockIndex: number, i: number): number {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return this._data[i0 + 1 + this._numCoordinatePerPoint + i];\n }\n /** Return a single data value */\n public getData(blockIndex: number, i: number): number {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n return this._data[i0 + i];\n }\n\n /** Set a single extra data value */\n public setExtraData(blockIndex: number, i: number, value: number): void {\n const i0 = this.blockIndexToDoubleIndex(blockIndex);\n this._data[i0 + 1 + this._numCoordinatePerPoint + i] = value;\n }\n\n /** this value is used as cluster terminator in the Uint232Array of indices. */\n public static readonly clusterTerminator = 0xFFffFFff;\n /** Test if `x` is the cluster terminator value. */\n public static isClusterTerminator(x: number): boolean { return x === ClusterableArray.clusterTerminator; }\n /** Return an array giving clusters of blocks with similar coordinates.\n *\n * * The contents of each block is assumed to be set up so the primary sort coordinate is first.\n *\n * ** simple coordinate blocks (x,y) or (x,y,z) would work fine but have occasional performance problems because points with same x would generate big blocks of\n * candidates for clusters.\n * ** The usual solution is to sort by u value, which is a dot product along some skew direction, and have the blocks contain (u,x,y) or (u,x,y,z) for 2d versus 3d.\n * ** apply setupPrimaryClusterSort to prepare that!!!\n * * After a simple lexical sort, consecutive blocks that are within tolerance in the 0 component\n * are inspected. Within that candidate set, all blocks that are within tolerance for ALL components are clustered.\n * * In the output cluster array, clusters are terminated a invalid index. Test for the invalid index with GrowableBlockArray.isClusterTerminator (x)\n */\n public clusterIndicesLexical(clusterTolerance: number = Geometry.smallMetricDistance): Uint32Array {\n // install primary sort key\n this.setupPrimaryClusterSort();\n // presort by all coordinates ....\n const firstSort = this.sortIndicesLexical();\n const clusterIndices = new Uint32Array(2 * firstSort.length); // worst case: no duplicates, each index goes in followed by terminator.\n let m = 0; // number of cluster indices\n const n = this.numBlocks; // and this must match firstSort.length !!\n let clusterStartBlockIndex = 0;\n let candidateBlockIndex = 0;\n let barrierU = 0.0;\n let i = 0;\n let j = 0;\n const k0 = 1; // beginning of active column for distance\n const k1 = 1 + this._numCoordinatePerPoint;\n for (i = 0; i < n; i++) {\n clusterStartBlockIndex = firstSort[i];\n if (!ClusterableArray.isClusterTerminator(clusterStartBlockIndex)) {\n // unused block, so it becomes a cluster...\n clusterIndices[m++] = clusterStartBlockIndex;\n barrierU = this.component(clusterStartBlockIndex, 0) + clusterTolerance;\n firstSort[i] = ClusterableArray.clusterTerminator;\n for (j = i + 1; j < n; j++) {\n candidateBlockIndex = firstSort[j];\n if (candidateBlockIndex === ClusterableArray.clusterTerminator)\n continue; // nearby in sort direction but already in a cluster.\n if (this.component(candidateBlockIndex, 0) > barrierU)\n break;\n if (this.distanceBetweenSubBlocks(clusterStartBlockIndex, candidateBlockIndex, k0, k1) <= clusterTolerance) {\n clusterIndices[m++] = candidateBlockIndex; // The candidate is in the block\n firstSort[j] = ClusterableArray.clusterTerminator; // and it will not be reused as future block base\n }\n }\n clusterIndices[m++] = ClusterableArray.clusterTerminator;\n }\n }\n // Alas, the clusterIndices array has fluff at the end. So it has to be copied.\n return clusterIndices.slice(0, m);\n }\n /** setup (overwrite!!) the \"0\" component with the dot product of numClusterCoordinate later components with a non-axis aligned vector.\n * This is normally called before clusterIndicesLexical.\n */\n public setupPrimaryClusterSort() {\n const nb = this.numBlocks;\n const nc = this._numCoordinatePerPoint;\n const vector = new Float64Array(nc);\n vector[0] = 1.0;\n for (let c = 1; c < nc; c++) vector[c] = vector[c - 1] * ClusterableArray._vectorFactor;\n let k = 0;\n let dot = 0.0;\n const data = this._data;\n for (let b = 0; b < nb; b++) {\n k = this.blockIndexToDoubleIndex(b);\n dot = 0.0;\n for (let c = 0; c < nc; c++) { dot += vector[c] * data[k + 1 + c]; }\n data[k] = dot;\n }\n }\n /** Convert the cluster data to an array of tuples with point i in the form\n * `[i, primarySortCoordinate, [x,y,..], [extraData0, extraData1, ...]]`\n */\n public toJSON(): any[] {\n const result: any[] = [];\n for (let b = 0; b < this.numBlocks; b++) {\n let i = this.blockIndexToDoubleIndex(b);\n const chunk: any[] = [b, this._data[i++]];\n const coordinates = [];\n for (let c = 0; c < this._numCoordinatePerPoint; c++)coordinates.push(this._data[i++]);\n chunk.push(coordinates);\n for (let c = 0; c < this._numExtraDataPerPoint; c++)\n chunk.push(this._data[i++]);\n result.push(chunk);\n }\n return result;\n }\n /**\n * Return an array of indices from block index to cluster index.\n * @param clusteredBlocks clusters of block indices followed by separators.\n */\n public createIndexBlockToClusterIndex(clusteredBlocks: Uint32Array): Uint32Array {\n const numBlocks = this.numBlocks;\n const blockToCluster = new Uint32Array(numBlocks);\n blockToCluster.fill(ClusterableArray.clusterTerminator);\n let numCluster = 0;\n for (const b of clusteredBlocks) {\n if (b >= numBlocks) {\n numCluster++;\n } else {\n blockToCluster[b] = numCluster;\n }\n }\n return blockToCluster;\n }\n /**\n * Return an array of indices from block index to index of its cluster's start in the cluster index array.\n * @param clusteredBlocks clusters of block indices followed by separators.\n */\n public createIndexBlockToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\n const n = clusteredBlocks.length;\n const numBlocks = this.numBlocks;\n const blockToClusterStart = new Uint32Array(numBlocks);\n const terminator = ClusterableArray.clusterTerminator;\n blockToClusterStart.fill(terminator);\n let clusterStart = 0;\n for (let i = 0; i < n; i++) {\n const k = clusteredBlocks[i];\n if (k > numBlocks) {\n clusterStart = i + 1;\n } else {\n blockToClusterStart[k] = clusterStart;\n }\n }\n return blockToClusterStart;\n }\n /** count the clusters in the clusteredBlocks array. */\n public countClusters(clusteredBlocks: Uint32Array): number {\n let numClusters = 0;\n const terminator = ClusterableArray.clusterTerminator;\n for (const b of clusteredBlocks) {\n if (b === terminator)\n numClusters++;\n }\n return numClusters;\n }\n /** create a reverse index: given a cluster index k, clusterToClusterStart[k] is the place\n * the cluster's block indices appear in clusterBlocks\n */\n public createIndexClusterToClusterStart(clusteredBlocks: Uint32Array): Uint32Array {\n let numCluster = this.countClusters(clusteredBlocks);\n const clusterToClusterStart = new Uint32Array(numCluster);\n const terminator = ClusterableArray.clusterTerminator;\n clusterToClusterStart.fill(terminator);\n const n = clusteredBlocks.length;\n let clusterStart = 0;\n for (let i = 0; i < n; i++) {\n const k = clusteredBlocks[i];\n if (k === terminator) {\n clusterStart = i + 1;\n } else if (i === clusterStart) {\n clusterToClusterStart[numCluster++] = clusterStart;\n }\n }\n return clusterToClusterStart;\n }\n\n /**\n * Sort terminator-delimited subsets of an array of indices into the table, using a single data value as sort key.\n * @param blockedIndices indices, organized as blocks of good indices terminated by the clusterTerminator. Each block is individually sorted on return.\n * @param dataIndex index of the data key, e.g., if the sort key is the first extraData (angle) after x and y coordinate data, pass dataIndex = 2.\n */\n public sortSubsetsBySingleKey(blockedIndices: Uint32Array, dataIndex: number) {\n const dataOffset = 1 + dataIndex;\n let kBegin = 0;\n let swap;\n let key0, key1;\n const numK = blockedIndices.length;\n for (let kEnd = 0; kEnd < numK; kEnd++) {\n if (blockedIndices[kEnd] === ClusterableArray.clusterTerminator) {\n // bubble sort blockedIndices[kBegin <= k < kEnd].\n // (search for minimum remaining, swap . . )\n for (let k0 = kBegin; k0 + 1 < kEnd; k0++) {\n key0 = this.getWithinBlock(blockedIndices[k0], dataOffset);\n for (let k1 = k0 + 1; k1 < kEnd; k1++) {\n key1 = this.getWithinBlock(blockedIndices[k1], dataOffset);\n if (key1 < key0) {\n swap = blockedIndices[k0];\n blockedIndices[k0] = blockedIndices[k1];\n blockedIndices[k1] = swap;\n key0 = key1;\n }\n }\n }\n kBegin = kEnd + 1;\n }\n }\n }\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n */\n public static clusterPoint3dArray(data: Point3d[], tolerance: number = Geometry.smallMetricDistance): PackedPointsWithIndex {\n const clusterArray = new ClusterableArray(3, 0, data.length);\n data.forEach((p: Point3d) => {\n clusterArray.addDirect(p.x, p.y, p.z);\n });\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const result = new PackedPointsWithIndex(data.length, 0);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0)\n result.packedPoints.push(data[k].clone());\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns number array with indices mapping old to new.\n * @param data numbers to cluster.\n */\n public static clusterNumberArray(data: number[], tolerance: number = Geometry.smallMetricDistance): PackedNumbersWithIndex {\n const clusterArray = new ClusterableArray(1, 0, data.length);\n data.forEach((x: number) => {clusterArray.addDirect(x);});\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const result = new PackedNumbersWithIndex(data.length);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0)\n result.packedNumbers.push(data[k]);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n */\n public static clusterGrowablePoint2dArray(source: GrowableXYArray, tolerance: number = Geometry.smallMetricDistance): PackedPoint2dsWithIndex {\n const clusterArray = new ClusterableArray(2, 0, source.length);\n const p = Point2d.create();\n const numSourcePoint = source.length;\n for (let i = 0; i < numSourcePoint; i++) {\n source.getPoint2dAtUncheckedPointIndex(i, p);\n clusterArray.addDirect(p.x, p.y);\n }\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const numPackedPoints = clusterArray.countClusters(order);\n const result = new PackedPoint2dsWithIndex(source.length, numPackedPoints);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0) // This is the first encounter with a new cluster\n result.growablePackedPoints.pushFromGrowableXYArray(source, k);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n\n /**\n * Returns packed points with indices mapping old to new.\n * @param data points to cluster.\n * @returns data carrier for the packed points as a GrowableXYZArray\n */\n public static clusterGrowablePoint3dArray(source: GrowableXYZArray, tolerance: number = Geometry.smallMetricDistance): PackedPointsWithIndex {\n const clusterArray = new ClusterableArray(3, 0, source.length);\n const p = Point3d.create();\n const numSourcePoint = source.length;\n for (let i = 0; i < numSourcePoint; i++) {\n source.getPoint3dAtUncheckedPointIndex(i, p);\n clusterArray.addDirect(p.x, p.y, p.z);\n }\n const order = clusterArray.clusterIndicesLexical(tolerance);\n const numPackedPoints = clusterArray.countClusters(order);\n const result = new PackedPointsWithIndex(source.length, numPackedPoints);\n let currentClusterIndex = 0;\n let numThisCluster = 0;\n order.forEach((k: number) => {\n if (ClusterableArray.isClusterTerminator(k)) {\n currentClusterIndex++;\n numThisCluster = 0;\n } else {\n if (numThisCluster === 0) // This is the first encounter with a new cluster\n result.growablePackedPoints.pushFromGrowableXYZArray(source, k);\n result.oldToNew[k] = currentClusterIndex;\n numThisCluster++;\n }\n });\n return result;\n }\n}\n\n/**\n * @internal\n */\nfunction updateIndices(indices: number[], oldToNew: Uint32Array): boolean {\n let numErrors = 0;\n indices.forEach((value: number, i: number, data: number[]) => {\n if (value < oldToNew.length) {\n data[i] = oldToNew[value];\n } else numErrors++;\n });\n return numErrors === 0;\n}\n\n/**\n * Data carrier class for\n * * packedPoints = an array of Point3d\n * * growablePackedPoints = a growable array of xyz coordinates\n * * oldToNew = array of indices from some prior Point3d[] to the packed points.\n * @internal\n */\nclass PackedPointsWithIndex {\n /** Array of Point3d */\n public packedPoints: Point3d[];\n /** array of coordinates packed in GrowableXYZArray */\n public growablePackedPoints: GrowableXYZArray;\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedPoints object with\n * * empty packedPoints array\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\n */\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\n this.packedPoints = [];\n this.growablePackedPoints = new GrowableXYZArray(numPackedPoints);\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n\n/**\n * @internal\n */\nclass PackedPoint2dsWithIndex {\n /** array of coordinates packed in GrowableXYArray */\n public growablePackedPoints: GrowableXYArray;\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedPoints object with\n * * empty packedPoints array\n * * oldToNew indices all initialized to PackedPoints.invalidIndex\n */\n constructor(numOldIndexEntry: number, numPackedPoints: number) {\n this.growablePackedPoints = new GrowableXYArray(numPackedPoints);\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPoint2dsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n\n/**\n * @internal\n */\n class PackedNumbersWithIndex {\n /** Array of numbers */\n public packedNumbers: number[];\n /** mapping from old point index to new point index. */\n public oldToNew: Uint32Array;\n /** integer value for unknown index. */\n public static readonly invalidIndex = 0xFFFFffff;\n\n /** construct a PackedNumbers object with\n * * empty packedNumbers array\n * * oldToNew indices all initialized to PackedNumbers.invalidIndex\n */\n constructor(numOldIndexEntry: number) {\n this.packedNumbers = [];\n this.oldToNew = new Uint32Array(numOldIndexEntry);\n for (let i = 0; i < numOldIndexEntry; i++) {\n this.oldToNew[i] = PackedPointsWithIndex.invalidIndex;\n }\n }\n /**\n * Use the oldToNew array to update an array of \"old\" indices.\n * @param indices array of indices into prepacked array.\n * @returns true if all input indices were valid for the oldToNew array.\n */\n public updateIndices(indices: number[]): boolean {\n return updateIndices(indices, this.oldToNew);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Complex.js","sourceRoot":"","sources":["../../../src/numerics/Complex.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/** @packageDocumentation\r\n * @module Numerics\r\n */\r\nimport { BeJSONFunctions, Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\n\r\n/**\r\n * OPerations on a \"complex number\" class with real part `x` and complex part `y`\r\n * @internal\r\n */\r\nexport class Complex implements BeJSONFunctions {\r\n private _x: number;\r\n /** Real part */\r\n public get x(): number { return this._x; }\r\n public set x(value: number) { this._x = value; }\r\n\r\n private _y: number;\r\n /** Imaginary part */\r\n public get y(): number { return this._y; }\r\n public set y(value: number) { this._y = value; }\r\n\r\n public constructor(x: number = 0, y: number = 0) { this._x = x; this._y = y; }\r\n /** set x and y parts from args. */\r\n public set(x: number = 0, y: number = 0): void { this.x = x; this.y = y; }\r\n /** set `this.x` and `this.y` from `other.x` and `other.y` */\r\n public setFrom(other: Complex) { this.x = other.x; this.y = other.y; }\r\n /** clone the complex x,y */\r\n public clone(): Complex { return new Complex(this.x, this.y); }\r\n /** test for near equality using coordinate tolerances */\r\n public isAlmostEqual(other: Complex): boolean { return Geometry.isAlmostEqualNumber(this.x, other.x) && Geometry.isAlmostEqualNumber(this.x, other.x); }\r\n /** Create a new Complex instance from given x and y. */\r\n public static create(x: number = 0, y: number = 0, result?: Complex): Complex {\r\n if (result) {\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return new Complex(x, y);\r\n }\r\n /** Return the complex sum `this+other` */\r\n public plus(other: Complex, result?: Complex): Complex { return Complex.create(this.x + other.x, this.y + other.y, result); }\r\n /** Return the complex difference `this-other` */\r\n public minus(other: Complex, result?: Complex): Complex { return Complex.create(this.x - other.x, this.y - other.y, result); }\r\n /** Return the complex product `this * other` */\r\n public times(other: Complex, result?: Complex): Complex {\r\n return Complex.create(\r\n this.x * other.x - this.y * other.y,\r\n this.x * other.y + this.y * other.x,\r\n result);\r\n }\r\n /** Return the complex product `this * x+i*y`. That is, the second Complex value exists via the args without being formally created as an instance. */\r\n public timesXY(x: number, y: number, result?: Complex): Complex {\r\n return Complex.create(\r\n this.x * x - this.y * y,\r\n this.x * y + this.y * x,\r\n result);\r\n }\r\n /** Return the mangitude of the complex number */\r\n public magnitude(): number { return Geometry.hypotenuseXY(this.x, this.y); }\r\n /** Return the angle from x axis to the vector (x,y) */\r\n public angle(): Angle { return Angle.createAtan2(this.y, this.x); }\r\n /** Return the xy plane distance between this and other */\r\n public distance(other: Complex) {\r\n return Geometry.hypotenuseXY(this.x - other.x, this.y - other.y);\r\n }\r\n /** Return the squared xy plane distance between this and other. */\r\n public magnitudeSquared(): number { return this.x * this.x + this.y * this.y; }\r\n /** Return the complex division `this / other` */\r\n public divide(other: Complex, result?: Complex): Complex | undefined {\r\n const bb = other.magnitudeSquared();\r\n if (bb === 0.0)\r\n return undefined;\r\n const divbb = 1.0 / bb;\r\n return Complex.create(\r\n (this.x * other.x + this.y * other.y) * divbb,\r\n (this.y * other.x - this.x * other.y) * divbb,\r\n result);\r\n }\r\n /** Return the complex square root of this. */\r\n public sqrt(result?: Complex): Complex {\r\n if ((this.x === 0.0) && (this.y === 0.0))\r\n return Complex.create(0, 0, result);\r\n\r\n const x = Math.abs(this.x);\r\n const y = Math.abs(this.y);\r\n let r = 0;\r\n let w = 0;\r\n if (x >= y) {\r\n r = y / x;\r\n w = Math.sqrt(x) * Math.sqrt(0.5 * (1.0 + Math.sqrt(1.0 + r * r)));\r\n } else {\r\n r = x / y;\r\n w = Math.sqrt(y) * Math.sqrt(0.5 * (r + Math.sqrt(1.0 + r * r)));\r\n }\r\n\r\n if (this.x >= 0.0) {\r\n return Complex.create(w, this.y / (2.0 * w), result);\r\n } else {\r\n const y1 = (this.y >= 0) ? w : -w;\r\n return Complex.create(this.y / (2.0 * y1), y1, result);\r\n }\r\n }\r\n /** set the complex x,y from a json object of the form like\r\n * * x,y key value pairs: `{x:1,y:2}`\r\n * * array of numbers: `[1,2]`\r\n */\r\n public setFromJSON(json?: any): void {\r\n if (Array.isArray(json) && json.length > 1) {\r\n this.set(json[0], json[1]);\r\n } else if (json && json.x && json.y) {\r\n this.set(json.x, json.y);\r\n } else {\r\n this.set(0, 0);\r\n }\r\n }\r\n /** Create a `Complex` instance from a json object. */\r\n public static fromJSON(json?: any): Complex { const result = new Complex(); result.setFromJSON(json); return result; }\r\n\r\n /**\r\n * Convert an Complex to a JSON object.\r\n * @return {*} [x,y]\r\n */\r\n public toJSON(): any { return [this.x, this.y]; }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"Complex.js","sourceRoot":"","sources":["../../../src/numerics/Complex.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/** @packageDocumentation\n * @module Numerics\n */\nimport { BeJSONFunctions, Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\n\n/**\n * OPerations on a \"complex number\" class with real part `x` and complex part `y`\n * @internal\n */\nexport class Complex implements BeJSONFunctions {\n private _x: number;\n /** Real part */\n public get x(): number { return this._x; }\n public set x(value: number) { this._x = value; }\n\n private _y: number;\n /** Imaginary part */\n public get y(): number { return this._y; }\n public set y(value: number) { this._y = value; }\n\n public constructor(x: number = 0, y: number = 0) { this._x = x; this._y = y; }\n /** set x and y parts from args. */\n public set(x: number = 0, y: number = 0): void { this.x = x; this.y = y; }\n /** set `this.x` and `this.y` from `other.x` and `other.y` */\n public setFrom(other: Complex) { this.x = other.x; this.y = other.y; }\n /** clone the complex x,y */\n public clone(): Complex { return new Complex(this.x, this.y); }\n /** test for near equality using coordinate tolerances */\n public isAlmostEqual(other: Complex): boolean { return Geometry.isAlmostEqualNumber(this.x, other.x) && Geometry.isAlmostEqualNumber(this.x, other.x); }\n /** Create a new Complex instance from given x and y. */\n public static create(x: number = 0, y: number = 0, result?: Complex): Complex {\n if (result) {\n result.x = x;\n result.y = y;\n return result;\n }\n return new Complex(x, y);\n }\n /** Return the complex sum `this+other` */\n public plus(other: Complex, result?: Complex): Complex { return Complex.create(this.x + other.x, this.y + other.y, result); }\n /** Return the complex difference `this-other` */\n public minus(other: Complex, result?: Complex): Complex { return Complex.create(this.x - other.x, this.y - other.y, result); }\n /** Return the complex product `this * other` */\n public times(other: Complex, result?: Complex): Complex {\n return Complex.create(\n this.x * other.x - this.y * other.y,\n this.x * other.y + this.y * other.x,\n result);\n }\n /** Return the complex product `this * x+i*y`. That is, the second Complex value exists via the args without being formally created as an instance. */\n public timesXY(x: number, y: number, result?: Complex): Complex {\n return Complex.create(\n this.x * x - this.y * y,\n this.x * y + this.y * x,\n result);\n }\n /** Return the mangitude of the complex number */\n public magnitude(): number { return Geometry.hypotenuseXY(this.x, this.y); }\n /** Return the angle from x axis to the vector (x,y) */\n public angle(): Angle { return Angle.createAtan2(this.y, this.x); }\n /** Return the xy plane distance between this and other */\n public distance(other: Complex) {\n return Geometry.hypotenuseXY(this.x - other.x, this.y - other.y);\n }\n /** Return the squared xy plane distance between this and other. */\n public magnitudeSquared(): number { return this.x * this.x + this.y * this.y; }\n /** Return the complex division `this / other` */\n public divide(other: Complex, result?: Complex): Complex | undefined {\n const bb = other.magnitudeSquared();\n if (bb === 0.0)\n return undefined;\n const divbb = 1.0 / bb;\n return Complex.create(\n (this.x * other.x + this.y * other.y) * divbb,\n (this.y * other.x - this.x * other.y) * divbb,\n result);\n }\n /** Return the complex square root of this. */\n public sqrt(result?: Complex): Complex {\n if ((this.x === 0.0) && (this.y === 0.0))\n return Complex.create(0, 0, result);\n\n const x = Math.abs(this.x);\n const y = Math.abs(this.y);\n let r = 0;\n let w = 0;\n if (x >= y) {\n r = y / x;\n w = Math.sqrt(x) * Math.sqrt(0.5 * (1.0 + Math.sqrt(1.0 + r * r)));\n } else {\n r = x / y;\n w = Math.sqrt(y) * Math.sqrt(0.5 * (r + Math.sqrt(1.0 + r * r)));\n }\n\n if (this.x >= 0.0) {\n return Complex.create(w, this.y / (2.0 * w), result);\n } else {\n const y1 = (this.y >= 0) ? w : -w;\n return Complex.create(this.y / (2.0 * y1), y1, result);\n }\n }\n /** set the complex x,y from a json object of the form like\n * * x,y key value pairs: `{x:1,y:2}`\n * * array of numbers: `[1,2]`\n */\n public setFromJSON(json?: any): void {\n if (Array.isArray(json) && json.length > 1) {\n this.set(json[0], json[1]);\n } else if (json && json.x && json.y) {\n this.set(json.x, json.y);\n } else {\n this.set(0, 0);\n }\n }\n /** Create a `Complex` instance from a json object. */\n public static fromJSON(json?: any): Complex { const result = new Complex(); result.setFromJSON(json); return result; }\n\n /**\n * Convert an Complex to a JSON object.\n * @return {*} [x,y]\n */\n public toJSON(): any { return [this.x, this.y]; }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexPolygon2d.js","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.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 Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\nimport { Ray2d } from \"../geometry3d/Ray2d\";\r\n\r\n/**\r\n * Convex hull of points in 2d.\r\n * @internal\r\n */\r\nexport class ConvexPolygon2d {\r\n // hull points in CCW order, WITHOUT final duplicate...\r\n // REMARK: In degenerate case with 0,1,or 2 points the array is still there.\r\n private _hullPoints: Point2d[];\r\n\r\n constructor(points: Point2d[] | undefined) {\r\n this._hullPoints = [];\r\n // Deep copy of points array given\r\n if (points) {\r\n for (const point of points) {\r\n this._hullPoints.push(point);\r\n }\r\n }\r\n }\r\n\r\n /** Create the hull */\r\n public static createHull(points: Point2d[]): ConvexPolygon2d {\r\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\r\n }\r\n\r\n /** Create the hull. First try to use the points as given. */\r\n public static createHullIsValidCheck(points: Point2d[]) {\r\n if (ConvexPolygon2d.isValidConvexHull(points))\r\n return new ConvexPolygon2d(points);\r\n else\r\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\r\n }\r\n\r\n /** Return a reference of the hull points. */\r\n public get points(): Point2d[] {\r\n return this._hullPoints;\r\n }\r\n\r\n /** Test if hull points are a convex, CCW polygon */\r\n public static isValidConvexHull(points: Point2d[]) {\r\n if (points.length < 3)\r\n return false;\r\n const n = points.length;\r\n for (let i = 0; i < n; i++) {\r\n const i1 = (i + 1) % n;\r\n const i2 = (i + 2) % n;\r\n if (points[i].crossProductToPoints(points[i1], points[i2]) < 0.0)\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Return true if the convex hull (to the left of the edges) contains the test point */\r\n public containsPoint(point: Point2d): boolean {\r\n let xy0 = this._hullPoints[this._hullPoints.length - 1];\r\n // double tol = -1.0e-20; negative tol!!\r\n for (const i of this._hullPoints) {\r\n const xy1 = i;\r\n const c = xy0.crossProductToPoints(xy1, point);\r\n if (c < 0.0)\r\n return false;\r\n xy0 = i;\r\n }\r\n return true;\r\n }\r\n\r\n /** Return the largest outside. (return 0 if in or on) */\r\n public distanceOutside(xy: Point2d): number {\r\n let maxDistance = 0.0;\r\n const n = this._hullPoints.length;\r\n let xy0 = this._hullPoints[n - 1];\r\n // double tol = -1.0e-20; // negative tol!!\r\n for (let i = 0; i < n; i++) {\r\n const xy1 = this._hullPoints[i];\r\n const c = xy0.crossProductToPoints(xy1, xy);\r\n if (c < 0.0) {\r\n const ray = Ray2d.createOriginAndTarget(xy0, xy1);\r\n const s = ray.projectionFraction(xy);\r\n let d = 0.0;\r\n if (s < 0.0)\r\n d = xy0.distance(xy);\r\n else if (s > 1.0)\r\n d = xy1.distance(xy);\r\n else\r\n d = xy.distance(ray.fractionToPoint(s));\r\n\r\n if (d > maxDistance)\r\n maxDistance = d;\r\n }\r\n xy0 = this._hullPoints[i];\r\n }\r\n return maxDistance;\r\n }\r\n\r\n /** Offset the entire hull (in place) by distance.\r\n * Returns false if an undefined occurred from normalizing (could occur after changing some hull points already)\r\n */\r\n public offsetInPlace(distance: number): boolean {\r\n const n = this._hullPoints.length;\r\n if (n >= 3) {\r\n const hullPoint0 = this._hullPoints[0];\r\n let edgeA: Vector2d | undefined = this._hullPoints[n - 1].vectorTo(hullPoint0);\r\n edgeA = edgeA.normalize();\r\n if (edgeA === undefined) { return false; }\r\n\r\n let perpA = edgeA.rotate90CWXY();\r\n let edgeB: Vector2d | undefined;\r\n let perpB: Vector2d;\r\n for (let i = 0; i < n; i++) {\r\n const j = i + 1;\r\n edgeB = this._hullPoints[i].vectorTo(j < n ? this._hullPoints[j] : hullPoint0);\r\n edgeB = edgeB.normalize();\r\n if (edgeB === undefined) { return false; }\r\n\r\n perpB = edgeB.rotate90CWXY();\r\n const offsetBisector = Vector2d.createOffsetBisector(perpA, perpB, distance);\r\n if (offsetBisector === undefined) { return false; }\r\n\r\n this._hullPoints[i] = this._hullPoints[i].plus(offsetBisector);\r\n // PerpA takes up reference to perpB, as perpB will die in new iteration\r\n perpA = perpB;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Return 2 distances bounding the intersection of the ray with this convex hull.\r\n * @param ray ray to clip to this convex polygon. ASSUME normalized direction vector, so that ray fractions are distances.\r\n * @returns intersection bounds as min and max distances along the ray (from its origin).\r\n * * Both negative and positive distances along the ray are possible.\r\n * * Range has extreme values if less than 3 points, distanceA > distanceB, or if cross product < 0.\r\n */\r\n public clipRay(ray: Ray2d): Range1d {\r\n let distanceA = - Number.MAX_VALUE;\r\n let distanceB = Number.MAX_VALUE;\r\n\r\n const n = this._hullPoints.length;\r\n\r\n if (n < 3)\r\n return Range1d.createNull();\r\n\r\n let xy0 = this._hullPoints[n - 1];\r\n for (const xy1 of this._hullPoints) {\r\n const { hasIntersection, fraction, cross } = ray.intersectUnboundedLine(xy0, xy1);\r\n if (hasIntersection) {\r\n if (cross > 0.0) {\r\n if (fraction < distanceB)\r\n distanceB = fraction;\r\n } else {\r\n if (fraction > distanceA)\r\n distanceA = fraction;\r\n }\r\n if (distanceA > distanceB)\r\n return Range1d.createNull();\r\n } else {\r\n // ray is parallel to the edge.\r\n // Any single point out classifies it all . ..\r\n if (xy0.crossProductToPoints(xy1, ray.origin) < 0.0)\r\n return Range1d.createNull();\r\n }\r\n\r\n // xy1 is reassigned with each new loop\r\n xy0 = xy1;\r\n }\r\n const range = Range1d.createNull();\r\n range.extendX(distanceA);\r\n range.extendX(distanceB);\r\n return range;\r\n }\r\n\r\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\r\n public rangeAlongRay(ray: Ray2d): Range1d {\r\n const range = Range1d.createNull();\r\n for (const xy1 of this._hullPoints)\r\n range.extendX(ray.projectionFraction(xy1));\r\n return range;\r\n }\r\n\r\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\r\n public rangePerpendicularToRay(ray: Ray2d): Range1d {\r\n const range = Range1d.createNull();\r\n for (const xy1 of this._hullPoints)\r\n range.extendX(ray.perpendicularProjectionFraction(xy1));\r\n return range;\r\n }\r\n\r\n /** Computes the hull of a convex polygon from points given. Returns the hull as a new Point2d array.\r\n * Returns an empty hull if less than 3 points are given.\r\n */\r\n public static computeConvexHull(points: Point2d[]): Point2d[] | undefined {\r\n const hull: Point2d[] = [];\r\n const n = points.length;\r\n if (n < 3)\r\n return undefined;\r\n // Get deep copy\r\n const xy1: Point2d[] = points.slice(0, n);\r\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\r\n hull.push(xy1[0]); // This is sure to stay\r\n hull.push(xy1[1]); // This one can be removed in loop.\r\n\r\n // First sweep creates upper hull\r\n for (let i = 2; i < n; i++) {\r\n const candidate = xy1[i];\r\n let top = hull.length - 1;\r\n while (top > 0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\r\n top--;\r\n hull.pop();\r\n }\r\n hull.push(candidate);\r\n }\r\n\r\n // Second sweep creates lower hull right to left\r\n const i0 = hull.length - 1;\r\n // xy1.back () is already on stack.\r\n hull.push(xy1[n - 2]);\r\n for (let i = n - 2; i-- > 0;) {\r\n const candidate = xy1[i];\r\n let top = hull.length - 1;\r\n while (top > i0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\r\n top--;\r\n hull.pop();\r\n }\r\n if (i > 0) // don't replicate start point!!!\r\n hull.push(candidate);\r\n }\r\n\r\n return hull;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ConvexPolygon2d.js","sourceRoot":"","sources":["../../../src/numerics/ConvexPolygon2d.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 Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Range1d } from \"../geometry3d/Range\";\nimport { Ray2d } from \"../geometry3d/Ray2d\";\n\n/**\n * Convex hull of points in 2d.\n * @internal\n */\nexport class ConvexPolygon2d {\n // hull points in CCW order, WITHOUT final duplicate...\n // REMARK: In degenerate case with 0,1,or 2 points the array is still there.\n private _hullPoints: Point2d[];\n\n constructor(points: Point2d[] | undefined) {\n this._hullPoints = [];\n // Deep copy of points array given\n if (points) {\n for (const point of points) {\n this._hullPoints.push(point);\n }\n }\n }\n\n /** Create the hull */\n public static createHull(points: Point2d[]): ConvexPolygon2d {\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\n }\n\n /** Create the hull. First try to use the points as given. */\n public static createHullIsValidCheck(points: Point2d[]) {\n if (ConvexPolygon2d.isValidConvexHull(points))\n return new ConvexPolygon2d(points);\n else\n return new ConvexPolygon2d(ConvexPolygon2d.computeConvexHull(points));\n }\n\n /** Return a reference of the hull points. */\n public get points(): Point2d[] {\n return this._hullPoints;\n }\n\n /** Test if hull points are a convex, CCW polygon */\n public static isValidConvexHull(points: Point2d[]) {\n if (points.length < 3)\n return false;\n const n = points.length;\n for (let i = 0; i < n; i++) {\n const i1 = (i + 1) % n;\n const i2 = (i + 2) % n;\n if (points[i].crossProductToPoints(points[i1], points[i2]) < 0.0)\n return false;\n }\n return true;\n }\n\n /** Return true if the convex hull (to the left of the edges) contains the test point */\n public containsPoint(point: Point2d): boolean {\n let xy0 = this._hullPoints[this._hullPoints.length - 1];\n // double tol = -1.0e-20; negative tol!!\n for (const i of this._hullPoints) {\n const xy1 = i;\n const c = xy0.crossProductToPoints(xy1, point);\n if (c < 0.0)\n return false;\n xy0 = i;\n }\n return true;\n }\n\n /** Return the largest outside. (return 0 if in or on) */\n public distanceOutside(xy: Point2d): number {\n let maxDistance = 0.0;\n const n = this._hullPoints.length;\n let xy0 = this._hullPoints[n - 1];\n // double tol = -1.0e-20; // negative tol!!\n for (let i = 0; i < n; i++) {\n const xy1 = this._hullPoints[i];\n const c = xy0.crossProductToPoints(xy1, xy);\n if (c < 0.0) {\n const ray = Ray2d.createOriginAndTarget(xy0, xy1);\n const s = ray.projectionFraction(xy);\n let d = 0.0;\n if (s < 0.0)\n d = xy0.distance(xy);\n else if (s > 1.0)\n d = xy1.distance(xy);\n else\n d = xy.distance(ray.fractionToPoint(s));\n\n if (d > maxDistance)\n maxDistance = d;\n }\n xy0 = this._hullPoints[i];\n }\n return maxDistance;\n }\n\n /** Offset the entire hull (in place) by distance.\n * Returns false if an undefined occurred from normalizing (could occur after changing some hull points already)\n */\n public offsetInPlace(distance: number): boolean {\n const n = this._hullPoints.length;\n if (n >= 3) {\n const hullPoint0 = this._hullPoints[0];\n let edgeA: Vector2d | undefined = this._hullPoints[n - 1].vectorTo(hullPoint0);\n edgeA = edgeA.normalize();\n if (edgeA === undefined) { return false; }\n\n let perpA = edgeA.rotate90CWXY();\n let edgeB: Vector2d | undefined;\n let perpB: Vector2d;\n for (let i = 0; i < n; i++) {\n const j = i + 1;\n edgeB = this._hullPoints[i].vectorTo(j < n ? this._hullPoints[j] : hullPoint0);\n edgeB = edgeB.normalize();\n if (edgeB === undefined) { return false; }\n\n perpB = edgeB.rotate90CWXY();\n const offsetBisector = Vector2d.createOffsetBisector(perpA, perpB, distance);\n if (offsetBisector === undefined) { return false; }\n\n this._hullPoints[i] = this._hullPoints[i].plus(offsetBisector);\n // PerpA takes up reference to perpB, as perpB will die in new iteration\n perpA = perpB;\n }\n }\n return true;\n }\n\n /**\n * Return 2 distances bounding the intersection of the ray with this convex hull.\n * @param ray ray to clip to this convex polygon. ASSUME normalized direction vector, so that ray fractions are distances.\n * @returns intersection bounds as min and max distances along the ray (from its origin).\n * * Both negative and positive distances along the ray are possible.\n * * Range has extreme values if less than 3 points, distanceA > distanceB, or if cross product < 0.\n */\n public clipRay(ray: Ray2d): Range1d {\n let distanceA = - Number.MAX_VALUE;\n let distanceB = Number.MAX_VALUE;\n\n const n = this._hullPoints.length;\n\n if (n < 3)\n return Range1d.createNull();\n\n let xy0 = this._hullPoints[n - 1];\n for (const xy1 of this._hullPoints) {\n const { hasIntersection, fraction, cross } = ray.intersectUnboundedLine(xy0, xy1);\n if (hasIntersection) {\n if (cross > 0.0) {\n if (fraction < distanceB)\n distanceB = fraction;\n } else {\n if (fraction > distanceA)\n distanceA = fraction;\n }\n if (distanceA > distanceB)\n return Range1d.createNull();\n } else {\n // ray is parallel to the edge.\n // Any single point out classifies it all . ..\n if (xy0.crossProductToPoints(xy1, ray.origin) < 0.0)\n return Range1d.createNull();\n }\n\n // xy1 is reassigned with each new loop\n xy0 = xy1;\n }\n const range = Range1d.createNull();\n range.extendX(distanceA);\n range.extendX(distanceB);\n return range;\n }\n\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\n public rangeAlongRay(ray: Ray2d): Range1d {\n const range = Range1d.createNull();\n for (const xy1 of this._hullPoints)\n range.extendX(ray.projectionFraction(xy1));\n return range;\n }\n\n /** Return the range of (fractional) ray positions for projections of all points from the arrays. */\n public rangePerpendicularToRay(ray: Ray2d): Range1d {\n const range = Range1d.createNull();\n for (const xy1 of this._hullPoints)\n range.extendX(ray.perpendicularProjectionFraction(xy1));\n return range;\n }\n\n /** Computes the hull of a convex polygon from points given. Returns the hull as a new Point2d array.\n * Returns an empty hull if less than 3 points are given.\n */\n public static computeConvexHull(points: Point2d[]): Point2d[] | undefined {\n const hull: Point2d[] = [];\n const n = points.length;\n if (n < 3)\n return undefined;\n // Get deep copy\n const xy1: Point2d[] = points.slice(0, n);\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\n hull.push(xy1[0]); // This is sure to stay\n hull.push(xy1[1]); // This one can be removed in loop.\n\n // First sweep creates upper hull\n for (let i = 2; i < n; i++) {\n const candidate = xy1[i];\n let top = hull.length - 1;\n while (top > 0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\n top--;\n hull.pop();\n }\n hull.push(candidate);\n }\n\n // Second sweep creates lower hull right to left\n const i0 = hull.length - 1;\n // xy1.back () is already on stack.\n hull.push(xy1[n - 2]);\n for (let i = n - 2; i-- > 0;) {\n const candidate = xy1[i];\n let top = hull.length - 1;\n while (top > i0 && hull[top - 1].crossProductToPoints(hull[top], candidate) <= 0.0) {\n top--;\n hull.pop();\n }\n if (i > 0) // don't replicate start point!!!\n hull.push(candidate);\n }\n\n return hull;\n }\n}\n"]}
@@ -21,7 +21,7 @@ export declare abstract class AbstractNewtonIterator {
21
21
  * Apply the current step (in all dimensions).
22
22
  * @param isFinalStep true if this is a final step.
23
23
  */
24
- abstract applyCurrentStep(isFinalStep: boolean): boolean;
24
+ abstract applyCurrentStep(isFinalStep: boolean): void;
25
25
  /**
26
26
  * The constructor.
27
27
  * @param stepSizeTolerance tolerance to consider a single step converged.
@@ -29,10 +29,10 @@ export declare abstract class AbstractNewtonIterator {
29
29
  * it is expected that a first "accept" for (say) 10 to 14 digit step will be followed by another
30
30
  * iteration. A well behaved newton would then hypothetically double the number of digits to
31
31
  * 20 to 28. Since the IEEE double only carries 16 digits, this second-convergence step will
32
- * typically achieve full precision.
33
- * @param successiveConvergenceTarget number of successive convergences required for acceptance.
32
+ * typically achieve full precision. Default [[Geometry.smallNewtonStep]].
33
+ * @param successiveConvergenceTarget number of successive convergences required for acceptance. Default 2.
34
34
  * @param maxIterations max number of iterations. A typical newton step converges in 3 to 6 iterations.
35
- * Allow 15 to 20 to catch difficult cases.
35
+ * Allow 15 to 20 to catch difficult cases. Default 15.
36
36
  */
37
37
  protected constructor(stepSizeTolerance?: number, successiveConvergenceTarget?: number, maxIterations?: number);
38
38
  /** Number of consecutive steps which passed convergence condition. */
@@ -45,6 +45,14 @@ export declare abstract class AbstractNewtonIterator {
45
45
  protected _maxIterations: number;
46
46
  /** Number of iterations (incremented at each step). */
47
47
  numIterations: number;
48
+ /** Get the relative tolerance for comparing iterations in [[testConvergence]]. */
49
+ get stepSizeTolerance(): number;
50
+ /** Smallest iterate size difference in later iterations. */
51
+ private _leastDelta;
52
+ /** The current late iterate has the least delta encountered. Remember it. Implement along with [[restoreCandidate]].*/
53
+ protected cacheCandidate?(): void;
54
+ /** Set Newton result to the cached candidate. Implement along with [[cacheCandidate]]. */
55
+ protected restoreCandidate?(): void;
48
56
  /**
49
57
  * Test if a step is converged.
50
58
  * * Convergence is accepted with enough (_successiveConvergenceTarget) small steps (according to _stepSizeTolerance)
@@ -95,13 +103,13 @@ export declare class Newton1dUnbounded extends AbstractNewtonIterator {
95
103
  */
96
104
  constructor(func: NewtonEvaluatorRtoRD, maxIterations?: number);
97
105
  /** Set the independent variable, i.e., x_n. */
98
- setX(x: number): boolean;
106
+ setX(x: number): void;
99
107
  /** Get the independent variable, i.e., x_n. */
100
108
  getX(): number;
101
109
  /** Set the target function value. */
102
110
  setTarget(y: number): void;
103
111
  /** Move the current X by the just-computed step, i.e., `x_n - dx`. */
104
- applyCurrentStep(): boolean;
112
+ applyCurrentStep(): void;
105
113
  /** Compute the univariate newton step dx. */
106
114
  computeStep(): boolean;
107
115
  /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */
@@ -117,6 +125,23 @@ export declare abstract class NewtonEvaluatorRtoR {
117
125
  /** Most recent function evaluation, i.e., f(x_n). */
118
126
  currentF: number;
119
127
  }
128
+ /**
129
+ * Intermediate class for managing the parentCurve announcements from an IStrokeHandler.
130
+ * @internal
131
+ */
132
+ export declare abstract class NewtonRtoRStrokeHandler extends NewtonEvaluatorRtoR {
133
+ protected _parentCurvePrimitive: CurvePrimitive | undefined;
134
+ constructor();
135
+ /**
136
+ * Retain the parentCurvePrimitive.
137
+ * * Calling this method tells the handler that the parent curve is to be used for detail searches.
138
+ * * Example: Transition spiral search is based on linestring first, then the exact spiral.
139
+ * * Example: CurveChainWithDistanceIndex does NOT do this announcement; the constituents act independently.
140
+ */
141
+ startParentCurvePrimitive(curve: CurvePrimitive | undefined): void;
142
+ /** Forget the parentCurvePrimitive */
143
+ endParentCurvePrimitive(_curve: CurvePrimitive | undefined): void;
144
+ }
120
145
  /**
121
146
  * Newton iteration for a univariate function, using approximate derivatives.
122
147
  * To approximate the derivatives we use a small step `h`, i.e., `f'(x_n) = (f(x_n + h) - f(x_n)) / h`.
@@ -142,11 +167,11 @@ export declare class Newton1dUnboundedApproximateDerivative extends AbstractNewt
142
167
  */
143
168
  constructor(func: NewtonEvaluatorRtoR, maxIterations?: number);
144
169
  /** Set the independent variable, i.e., x_n. */
145
- setX(x: number): boolean;
170
+ setX(x: number): void;
146
171
  /** Get the independent variable, i.e., x_n. */
147
172
  getX(): number;
148
173
  /** Move the current X by the just-computed step, i.e., `x_n - dx`. */
149
- applyCurrentStep(): boolean;
174
+ applyCurrentStep(): void;
150
175
  /** Univariate newton step dx, computed with approximate derivative. */
151
176
  computeStep(): boolean;
152
177
  /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */
@@ -198,18 +223,18 @@ export declare class Newton2dUnboundedWithDerivative extends AbstractNewtonItera
198
223
  /**
199
224
  * Constructor for 2D newton iteration with derivatives.
200
225
  * @param func function that returns both function value and derivative.
226
+ * @param maxIterations max number of iterations. Default 15.
227
+ * @param stepSizeTolerance tolerance to consider a single step converged. Default [[Geometry.smallNewtonStep]].
201
228
  */
202
- constructor(func: NewtonEvaluatorRRtoRRD, maxIterations?: number);
229
+ constructor(func: NewtonEvaluatorRRtoRRD, maxIterations?: number, stepSizeTolerance?: number);
203
230
  /** Set the current uv parameters, i.e., `X_n = (u_n, v_n)`. */
204
- setUV(u: number, v: number): boolean;
231
+ setUV(u: number, v: number): void;
205
232
  /** Get the current u parameter of X_n, i.e., u_n. */
206
233
  getU(): number;
207
234
  /** Get the current v parameter of X_n, i.e., v_n. */
208
235
  getV(): number;
209
- /** Get the relative tolerance for comparing iterations in [[testConvergence]]. */
210
- get stepSizeTolerance(): number;
211
236
  /** Update the current uv parameter by currentStep, i.e., compute `X_{n+1} := X_n - dX = (u_n - du, v_n - dv)`. */
212
- applyCurrentStep(): boolean;
237
+ applyCurrentStep(): void;
213
238
  /**
214
239
  * Evaluate the functions and derivatives at `X_n = (u_n, v_n)`, and solve the Jacobian matrix equation to
215
240
  * compute `dX = (du, dv)`.
@@ -219,6 +244,12 @@ export declare class Newton2dUnboundedWithDerivative extends AbstractNewtonItera
219
244
  * Return the current relative step size, i.e., the larger absolute component of `dX / (1 + |X_n|)`
220
245
  */
221
246
  currentStepSize(): number;
247
+ /** Candidate solution cache. */
248
+ private _cachedUV;
249
+ /** The current late iterate has the least delta encountered. Remember it. */
250
+ protected cacheCandidate(): void;
251
+ /** Set Newton result to the cached candidate. */
252
+ protected restoreCandidate(): void;
222
253
  }
223
254
  /**
224
255
  * SimpleNewton has static methods for newton methods with evaluated functions presented as immediate arguments
@@ -1 +1 @@
1
- {"version":3,"file":"Newton.d.ts","sourceRoot":"","sources":["../../../src/numerics/Newton.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Newton.d.ts","sourceRoot":"","sources":["../../../src/numerics/Newton.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAEpF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAaxD;;;;GAIG;AACH,8BAAsB,sBAAsB;IAC1C,wGAAwG;aACxF,WAAW,IAAI,OAAO;IACtC;;;OAGG;aACa,eAAe,IAAI,MAAM;IACzC;;;OAGG;aACa,gBAAgB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAC5D;;;;;;;;;;;OAWG;IACH,SAAS,aACP,iBAAiB,GAAE,MAAiC,EACpD,2BAA2B,GAAE,MAAU,EACvC,aAAa,GAAE,MAAW;IAM5B,sEAAsE;IACtE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAK;IACnC,gDAAgD;IAChD,SAAS,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC/C,4FAA4F;IAC5F,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrC,8BAA8B;IAC9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,uDAAuD;IAChD,aAAa,EAAE,MAAM,CAAK;IACjC,kFAAkF;IAClF,IAAW,iBAAiB,IAAI,MAAM,CAErC;IACD,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAA4B;IAC/C,uHAAuH;IACvH,SAAS,CAAC,cAAc,CAAC,IAAI,IAAI;IACjC,0FAA0F;IAC1F,SAAS,CAAC,gBAAgB,CAAC,IAAI,IAAI;IAEnC;;;;;OAKG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAY9C;;;;;;OAMG;IACI,aAAa,IAAI,OAAO;CAehC;AACD;;;;GAIG;AACH,8BAAsB,oBAAoB;IACxC,qDAAqD;aACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAC5C,gDAAgD;IACzC,QAAQ,EAAG,MAAM,CAAC;IACzB,uDAAuD;IAChD,WAAW,EAAG,MAAM,CAAC;CAC7B;AACD;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,sBAAsB;IAC3D,OAAO,CAAC,KAAK,CAAuB;IACpC,0BAA0B;IAC1B,OAAO,CAAC,YAAY,CAAU;IAC9B,wBAAwB;IACxB,OAAO,CAAC,SAAS,CAAU;IAC3B,iBAAiB;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB;;;OAGG;gBACgB,IAAI,EAAE,oBAAoB,EAAE,aAAa,CAAC,EAAE,MAAM;IAKrE,+CAA+C;IACxC,IAAI,CAAC,CAAC,EAAE,MAAM;IAGrB,+CAA+C;IACxC,IAAI,IAAI,MAAM;IAGrB,qCAAqC;IAC9B,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAGjC,sEAAsE;IAC/D,gBAAgB,IAAI,IAAI;IAG/B,6CAA6C;IACtC,WAAW,IAAI,OAAO;IAU7B,qFAAqF;IAC9E,eAAe,IAAI,MAAM;CAGjC;AAED;;;GAGG;AACH,8BAAsB,mBAAmB;IACvC,mDAAmD;aACnC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAC5C,qDAAqD;IAC9C,QAAQ,EAAG,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,8BAAsB,uBAAwB,SAAQ,mBAAmB;IACvE,SAAS,CAAC,qBAAqB,EAAE,cAAc,GAAG,SAAS,CAAC;;IAK5D;;;;;OAKG;IACI,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI;IAGzE,sCAAsC;IAC/B,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI;CAGzE;AAED;;;;;;GAMG;AACH,qBAAa,sCAAuC,SAAQ,sBAAsB;IAChF,OAAO,CAAC,KAAK,CAAsB;IACnC,0BAA0B;IAC1B,OAAO,CAAC,YAAY,CAAU;IAC9B,wBAAwB;IACxB,OAAO,CAAC,SAAS,CAAU;IAC3B;;;;OAIG;IACI,WAAW,EAAE,MAAM,CAAC;IAE3B;;;OAGG;gBACgB,IAAI,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,MAAM;IAKpE,+CAA+C;IACxC,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAG5B,+CAA+C;IACxC,IAAI,IAAI,MAAM;IAGrB,sEAAsE;IAC/D,gBAAgB,IAAI,IAAI;IAG/B,uEAAuE;IAChE,WAAW,IAAI,OAAO;IAc7B,qFAAqF;IAC9E,eAAe,IAAI,MAAM;CAGjC;AAED;;;GAGG;AACH,8BAAsB,sBAAsB;IAC1C;;;OAGG;aACa,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IACvD;;;;;;;OAOG;IACI,QAAQ,EAAG,yBAAyB,CAAC;IAC5C;;;OAGG;;CAIJ;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,+BAAgC,SAAQ,sBAAsB;IACzE,OAAO,CAAC,KAAK,CAAyB;IACtC,sCAAsC;IACtC,OAAO,CAAC,YAAY,CAAW;IAC/B,kDAAkD;IAClD,OAAO,CAAC,UAAU,CAAU;IAC5B;;;;;OAKG;gBACgB,IAAI,EAAE,sBAAsB,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM;IAMnG,+DAA+D;IACxD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAGxC,qDAAqD;IAC9C,IAAI,IAAI,MAAM;IAGrB,qDAAqD;IAC9C,IAAI,IAAI,MAAM;IAGrB,kHAAkH;IAC3G,gBAAgB,IAAI,IAAI;IAG/B;;;OAGG;IACI,WAAW,IAAI,OAAO;IAY7B;;OAEG;IACI,eAAe,IAAI,MAAM;IAMhC,gCAAgC;IAChC,OAAO,CAAC,SAAS,CAAsB;IACvC,6EAA6E;cAC1D,cAAc,IAAI,IAAI;IAMzC,iDAAiD;cAC9B,gBAAgB,IAAI,IAAI;CAI5C;AACD;;;;GAIG;AACH,qBAAa,YAAY;IACvB;;;;;;;;OAQG;WACW,WAAW,CACvB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACvC,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAC7C,iBAAiB,GAAE,MAAoC,GACtD,MAAM,GAAG,SAAS;CAyBtB;AAED;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,sBAAsB;IACzE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAQ;gBACT,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc;IAOnD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAmB/D;AAED;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,oBAAoB;IACtE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAA4B;gBAC/B,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO;IAM5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;CAqB5C;AAED;;;GAGG;AACH,qBAAa,gCAAiC,SAAQ,sBAAsB;IAC1E,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAA4B;gBAC/B,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc;IAOnD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAqC/D"}