@itwin/core-geometry 5.2.0-dev.8 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (800) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.d.ts +30 -10
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +74 -10
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.d.ts +19 -6
  8. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  9. package/lib/cjs/bspline/AkimaCurve3d.js +21 -5
  10. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  11. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve.d.ts +3 -3
  13. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.js +6 -6
  15. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  17. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.js +1 -1
  19. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  20. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  21. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  22. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  23. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  24. package/lib/cjs/bspline/BezierCurveBase.d.ts +2 -2
  25. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  26. package/lib/cjs/bspline/BezierCurveBase.js +4 -6
  27. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  28. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +27 -17
  29. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  30. package/lib/cjs/bspline/InterpolationCurve3d.js +17 -7
  31. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  32. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  33. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  34. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  35. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  36. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  37. package/lib/cjs/clipping/ClipPlane.d.ts +19 -6
  38. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ClipPlane.js +17 -2
  40. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  41. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  42. package/lib/cjs/clipping/ClipUtils.d.ts +14 -1
  43. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  44. package/lib/cjs/clipping/ClipUtils.js +21 -3
  45. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  46. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  47. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +14 -11
  48. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  49. package/lib/cjs/clipping/ConvexClipPlaneSet.js +23 -16
  50. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  51. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +20 -3
  52. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  53. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +22 -5
  54. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  55. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  56. package/lib/cjs/core-geometry.js.map +1 -1
  57. package/lib/cjs/curve/Arc3d.d.ts +27 -17
  58. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  59. package/lib/cjs/curve/Arc3d.js +66 -42
  60. package/lib/cjs/curve/Arc3d.js.map +1 -1
  61. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  62. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  63. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  64. package/lib/cjs/curve/CurveCollection.d.ts +1 -0
  65. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  66. package/lib/cjs/curve/CurveCollection.js +1 -0
  67. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  68. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  69. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  70. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  71. package/lib/cjs/curve/CurveLocationDetail.d.ts +8 -7
  72. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  73. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  74. package/lib/cjs/curve/CurveOps.d.ts +48 -1
  75. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  76. package/lib/cjs/curve/CurveOps.js +94 -3
  77. package/lib/cjs/curve/CurveOps.js.map +1 -1
  78. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  79. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  80. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  81. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  82. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  83. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  84. package/lib/cjs/curve/LineString3d.d.ts +4 -4
  85. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  86. package/lib/cjs/curve/LineString3d.js +8 -8
  87. package/lib/cjs/curve/LineString3d.js.map +1 -1
  88. package/lib/cjs/curve/Loop.js.map +1 -1
  89. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  90. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  91. package/lib/cjs/curve/Path.js.map +1 -1
  92. package/lib/cjs/curve/PointString3d.js.map +1 -1
  93. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  94. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  95. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  96. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  97. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  98. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  99. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +51 -12
  100. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  101. package/lib/cjs/curve/Query/PlanarSubdivision.js +106 -83
  102. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  103. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  104. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  105. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  106. package/lib/cjs/curve/RegionOps.d.ts +49 -25
  107. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  108. package/lib/cjs/curve/RegionOps.js +79 -39
  109. package/lib/cjs/curve/RegionOps.js.map +1 -1
  110. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  111. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +8 -8
  112. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  113. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  114. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  121. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -0
  124. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  125. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +104 -93
  126. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  127. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  128. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  131. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  132. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  133. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  134. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +21 -18
  135. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  136. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  137. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  138. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  139. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +30 -50
  140. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  141. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  142. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  143. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  144. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  145. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  146. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  147. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  148. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  149. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +2 -2
  150. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  151. package/lib/cjs/curve/spiral/DirectSpiral3d.js +6 -2
  152. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  153. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  154. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  155. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +6 -2
  156. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  157. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  158. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  159. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  160. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  161. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  162. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  163. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +0 -3
  164. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  165. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  166. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  167. package/lib/cjs/geometry3d/AngleSweep.d.ts +6 -2
  168. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  169. package/lib/cjs/geometry3d/AngleSweep.js +12 -3
  170. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  171. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  172. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  173. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  174. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  175. package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
  176. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  177. package/lib/cjs/geometry3d/FrameBuilder.js +14 -18
  178. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  179. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  180. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  181. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  182. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  183. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +2 -1
  184. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  185. package/lib/cjs/geometry3d/GrowableXYArray.js +2 -1
  186. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  187. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +2 -1
  188. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  189. package/lib/cjs/geometry3d/GrowableXYZArray.js +2 -1
  190. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  191. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  192. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  193. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +9 -16
  194. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  195. package/lib/cjs/geometry3d/IndexedXYZCollection.js +3 -3
  196. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  197. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  198. package/lib/cjs/geometry3d/Matrix3d.d.ts +1 -1
  199. package/lib/cjs/geometry3d/Matrix3d.js +1 -1
  200. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  201. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  202. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  203. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  204. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  205. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  206. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +18 -2
  207. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  208. package/lib/cjs/geometry3d/Point2dVector2d.js +37 -4
  209. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  210. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  211. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
  212. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  213. package/lib/cjs/geometry3d/Point3dVector3d.js +1 -0
  214. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  215. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  216. package/lib/cjs/geometry3d/PointStreaming.d.ts +8 -0
  217. package/lib/cjs/geometry3d/PointStreaming.d.ts.map +1 -1
  218. package/lib/cjs/geometry3d/PointStreaming.js +18 -2
  219. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  220. package/lib/cjs/geometry3d/PolygonOps.d.ts +18 -9
  221. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  222. package/lib/cjs/geometry3d/PolygonOps.js +53 -26
  223. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  224. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  225. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  226. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  227. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  228. package/lib/cjs/geometry3d/PolylineOps.d.ts +14 -3
  229. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  230. package/lib/cjs/geometry3d/PolylineOps.js +20 -4
  231. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  232. package/lib/cjs/geometry3d/Range.d.ts +34 -32
  233. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  234. package/lib/cjs/geometry3d/Range.js +28 -21
  235. package/lib/cjs/geometry3d/Range.js.map +1 -1
  236. package/lib/cjs/geometry3d/Ray2d.d.ts +16 -6
  237. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  238. package/lib/cjs/geometry3d/Ray2d.js +28 -4
  239. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  240. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  241. package/lib/cjs/geometry3d/Ray3d.js +3 -4
  242. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  243. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  244. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  245. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  246. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  247. package/lib/cjs/geometry3d/Transform.js +1 -1
  248. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  249. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  250. package/lib/cjs/geometry3d/XYZProps.d.ts +12 -1
  251. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  252. package/lib/cjs/geometry3d/XYZProps.js +17 -2
  253. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  254. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  255. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  256. package/lib/cjs/geometry4d/Matrix4d.d.ts +16 -0
  257. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  258. package/lib/cjs/geometry4d/Matrix4d.js +26 -0
  259. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  260. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  261. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  262. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  263. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  264. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  265. package/lib/cjs/numerics/BezierPolynomials.js +5 -9
  266. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  267. package/lib/cjs/numerics/ClusterableArray.d.ts.map +1 -1
  268. package/lib/cjs/numerics/ClusterableArray.js +2 -2
  269. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  270. package/lib/cjs/numerics/Complex.js.map +1 -1
  271. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  272. package/lib/cjs/numerics/Newton.js.map +1 -1
  273. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  274. package/lib/cjs/numerics/PolarData.js.map +1 -1
  275. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  276. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  277. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  278. package/lib/cjs/numerics/SmallSystem.d.ts +13 -7
  279. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  280. package/lib/cjs/numerics/SmallSystem.js +13 -7
  281. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  282. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  283. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  284. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  285. package/lib/cjs/polyface/AuxData.js.map +1 -1
  286. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  287. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  288. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  289. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  290. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  291. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  292. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  293. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  294. package/lib/cjs/polyface/Polyface.d.ts +1 -3
  295. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  296. package/lib/cjs/polyface/Polyface.js +2 -6
  297. package/lib/cjs/polyface/Polyface.js.map +1 -1
  298. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +25 -6
  299. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  300. package/lib/cjs/polyface/PolyfaceBuilder.js +59 -8
  301. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  302. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  303. package/lib/cjs/polyface/PolyfaceData.d.ts +2 -0
  304. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  305. package/lib/cjs/polyface/PolyfaceData.js +7 -3
  306. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  307. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  308. package/lib/cjs/polyface/PolyfaceQuery.js +8 -10
  309. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  310. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  311. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  312. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  313. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  314. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  315. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  316. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  317. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  318. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  319. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  320. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  321. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  322. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  323. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +9 -12
  324. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  325. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  326. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  327. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  328. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  329. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  330. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  331. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  332. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  333. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  334. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  335. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  336. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  337. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  338. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  339. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  340. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  341. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  342. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  343. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  344. package/lib/cjs/serialization/DeepCompare.js +1 -1
  345. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  346. package/lib/cjs/serialization/GeometrySamples.d.ts +2 -1
  347. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  348. package/lib/cjs/serialization/GeometrySamples.js +2 -1
  349. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  350. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  351. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  352. package/lib/cjs/solid/Box.js.map +1 -1
  353. package/lib/cjs/solid/Cone.js.map +1 -1
  354. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  355. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  356. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  357. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  358. package/lib/cjs/solid/Sphere.js.map +1 -1
  359. package/lib/cjs/solid/SweepContour.js.map +1 -1
  360. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  361. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  362. package/lib/cjs/topology/Graph.d.ts +38 -12
  363. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  364. package/lib/cjs/topology/Graph.js +91 -23
  365. package/lib/cjs/topology/Graph.js.map +1 -1
  366. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  367. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  368. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  369. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  370. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +20 -11
  371. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  372. package/lib/cjs/topology/HalfEdgeGraphSearch.js +43 -39
  373. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  374. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  375. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  376. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  377. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  378. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  379. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  380. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  381. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  382. package/lib/cjs/topology/MaskManager.js.map +1 -1
  383. package/lib/cjs/topology/Merging.d.ts +22 -11
  384. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  385. package/lib/cjs/topology/Merging.js +31 -21
  386. package/lib/cjs/topology/Merging.js.map +1 -1
  387. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  388. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  389. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  390. package/lib/cjs/topology/Triangulation.d.ts +13 -11
  391. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  392. package/lib/cjs/topology/Triangulation.js +40 -36
  393. package/lib/cjs/topology/Triangulation.js.map +1 -1
  394. package/lib/cjs/topology/Voronoi.d.ts +195 -0
  395. package/lib/cjs/topology/Voronoi.d.ts.map +1 -0
  396. package/lib/cjs/topology/Voronoi.js +700 -0
  397. package/lib/cjs/topology/Voronoi.js.map +1 -0
  398. package/lib/cjs/topology/XYParitySearchContext.d.ts +1 -1
  399. package/lib/cjs/topology/XYParitySearchContext.d.ts.map +1 -1
  400. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  401. package/lib/esm/Constant.js.map +1 -1
  402. package/lib/esm/Geometry.d.ts +30 -10
  403. package/lib/esm/Geometry.d.ts.map +1 -1
  404. package/lib/esm/Geometry.js +74 -10
  405. package/lib/esm/Geometry.js.map +1 -1
  406. package/lib/esm/bspline/AkimaCurve3d.d.ts +19 -6
  407. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  408. package/lib/esm/bspline/AkimaCurve3d.js +21 -5
  409. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  410. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  411. package/lib/esm/bspline/BSplineCurve.d.ts +3 -3
  412. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  413. package/lib/esm/bspline/BSplineCurve.js +6 -6
  414. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  415. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  416. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  417. package/lib/esm/bspline/BSplineCurveOps.js +1 -1
  418. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  419. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  420. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  421. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  422. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  423. package/lib/esm/bspline/BezierCurveBase.d.ts +2 -2
  424. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  425. package/lib/esm/bspline/BezierCurveBase.js +4 -6
  426. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  427. package/lib/esm/bspline/InterpolationCurve3d.d.ts +27 -17
  428. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  429. package/lib/esm/bspline/InterpolationCurve3d.js +17 -7
  430. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  431. package/lib/esm/bspline/KnotVector.js.map +1 -1
  432. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  433. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  434. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  435. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  436. package/lib/esm/clipping/ClipPlane.d.ts +19 -6
  437. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  438. package/lib/esm/clipping/ClipPlane.js +17 -2
  439. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  440. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  441. package/lib/esm/clipping/ClipUtils.d.ts +14 -1
  442. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  443. package/lib/esm/clipping/ClipUtils.js +21 -3
  444. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  445. package/lib/esm/clipping/ClipVector.js.map +1 -1
  446. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +14 -11
  447. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  448. package/lib/esm/clipping/ConvexClipPlaneSet.js +23 -16
  449. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  450. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +20 -3
  451. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  452. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +22 -5
  453. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  454. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  455. package/lib/esm/core-geometry.js.map +1 -1
  456. package/lib/esm/curve/Arc3d.d.ts +27 -17
  457. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  458. package/lib/esm/curve/Arc3d.js +66 -42
  459. package/lib/esm/curve/Arc3d.js.map +1 -1
  460. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  461. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  462. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  463. package/lib/esm/curve/CurveCollection.d.ts +1 -0
  464. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  465. package/lib/esm/curve/CurveCollection.js +1 -0
  466. package/lib/esm/curve/CurveCollection.js.map +1 -1
  467. package/lib/esm/curve/CurveCurve.js.map +1 -1
  468. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  469. package/lib/esm/curve/CurveFactory.js.map +1 -1
  470. package/lib/esm/curve/CurveLocationDetail.d.ts +8 -7
  471. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  472. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  473. package/lib/esm/curve/CurveOps.d.ts +48 -1
  474. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  475. package/lib/esm/curve/CurveOps.js +95 -4
  476. package/lib/esm/curve/CurveOps.js.map +1 -1
  477. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  478. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  479. package/lib/esm/curve/CurveTypes.js.map +1 -1
  480. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  481. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  482. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  483. package/lib/esm/curve/LineString3d.d.ts +4 -4
  484. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  485. package/lib/esm/curve/LineString3d.js +8 -8
  486. package/lib/esm/curve/LineString3d.js.map +1 -1
  487. package/lib/esm/curve/Loop.js.map +1 -1
  488. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  489. package/lib/esm/curve/ParityRegion.js.map +1 -1
  490. package/lib/esm/curve/Path.js.map +1 -1
  491. package/lib/esm/curve/PointString3d.js.map +1 -1
  492. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  493. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  494. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  495. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  496. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  497. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  498. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +51 -12
  499. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  500. package/lib/esm/curve/Query/PlanarSubdivision.js +106 -83
  501. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  502. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  503. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  504. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  505. package/lib/esm/curve/RegionOps.d.ts +49 -25
  506. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  507. package/lib/esm/curve/RegionOps.js +77 -37
  508. package/lib/esm/curve/RegionOps.js.map +1 -1
  509. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  510. package/lib/esm/curve/RegionOpsClassificationSweeps.js +8 -8
  511. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  512. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  513. package/lib/esm/curve/UnionRegion.js.map +1 -1
  514. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  515. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  516. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  517. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  518. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  519. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  520. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  521. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  522. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -0
  523. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  524. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +104 -93
  525. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  526. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  527. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  528. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  529. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  530. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  531. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  532. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  533. package/lib/esm/curve/internalContexts/MultiChainCollector.js +21 -18
  534. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  535. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  536. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  537. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  538. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +30 -50
  539. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  540. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  541. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  542. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  543. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  544. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  545. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  546. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  547. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  548. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +2 -2
  549. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  550. package/lib/esm/curve/spiral/DirectSpiral3d.js +6 -2
  551. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  552. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  553. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  554. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +6 -2
  555. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  556. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  557. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  558. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  559. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  560. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  561. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  562. package/lib/esm/curve/spiral/TransitionSpiral3d.js +0 -3
  563. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  564. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  565. package/lib/esm/geometry3d/Angle.js.map +1 -1
  566. package/lib/esm/geometry3d/AngleSweep.d.ts +6 -2
  567. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  568. package/lib/esm/geometry3d/AngleSweep.js +12 -3
  569. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  570. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  571. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  572. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  573. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  574. package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
  575. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  576. package/lib/esm/geometry3d/FrameBuilder.js +14 -18
  577. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  578. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  579. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  580. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  581. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  582. package/lib/esm/geometry3d/GrowableXYArray.d.ts +2 -1
  583. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  584. package/lib/esm/geometry3d/GrowableXYArray.js +2 -1
  585. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  586. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +2 -1
  587. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  588. package/lib/esm/geometry3d/GrowableXYZArray.js +2 -1
  589. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  590. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  591. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  592. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +9 -16
  593. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  594. package/lib/esm/geometry3d/IndexedXYZCollection.js +3 -3
  595. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  596. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  597. package/lib/esm/geometry3d/Matrix3d.d.ts +1 -1
  598. package/lib/esm/geometry3d/Matrix3d.js +1 -1
  599. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  600. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  601. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  602. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  603. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  604. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  605. package/lib/esm/geometry3d/Point2dVector2d.d.ts +18 -2
  606. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  607. package/lib/esm/geometry3d/Point2dVector2d.js +37 -4
  608. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  609. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  610. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
  611. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  612. package/lib/esm/geometry3d/Point3dVector3d.js +1 -0
  613. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  614. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  615. package/lib/esm/geometry3d/PointStreaming.d.ts +8 -0
  616. package/lib/esm/geometry3d/PointStreaming.d.ts.map +1 -1
  617. package/lib/esm/geometry3d/PointStreaming.js +18 -2
  618. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  619. package/lib/esm/geometry3d/PolygonOps.d.ts +18 -9
  620. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  621. package/lib/esm/geometry3d/PolygonOps.js +53 -26
  622. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  623. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  624. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  625. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  626. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  627. package/lib/esm/geometry3d/PolylineOps.d.ts +14 -3
  628. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  629. package/lib/esm/geometry3d/PolylineOps.js +20 -4
  630. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  631. package/lib/esm/geometry3d/Range.d.ts +34 -32
  632. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  633. package/lib/esm/geometry3d/Range.js +28 -21
  634. package/lib/esm/geometry3d/Range.js.map +1 -1
  635. package/lib/esm/geometry3d/Ray2d.d.ts +16 -6
  636. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  637. package/lib/esm/geometry3d/Ray2d.js +28 -4
  638. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  639. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  640. package/lib/esm/geometry3d/Ray3d.js +3 -4
  641. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  642. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  643. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  644. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  645. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  646. package/lib/esm/geometry3d/Transform.js +1 -1
  647. package/lib/esm/geometry3d/Transform.js.map +1 -1
  648. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  649. package/lib/esm/geometry3d/XYZProps.d.ts +12 -1
  650. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  651. package/lib/esm/geometry3d/XYZProps.js +16 -1
  652. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  653. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  654. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  655. package/lib/esm/geometry4d/Matrix4d.d.ts +16 -0
  656. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  657. package/lib/esm/geometry4d/Matrix4d.js +26 -0
  658. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  659. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  660. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  661. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  662. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  663. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  664. package/lib/esm/numerics/BezierPolynomials.js +5 -9
  665. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  666. package/lib/esm/numerics/ClusterableArray.d.ts.map +1 -1
  667. package/lib/esm/numerics/ClusterableArray.js +2 -2
  668. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  669. package/lib/esm/numerics/Complex.js.map +1 -1
  670. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  671. package/lib/esm/numerics/Newton.js.map +1 -1
  672. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  673. package/lib/esm/numerics/PolarData.js.map +1 -1
  674. package/lib/esm/numerics/Polynomials.js.map +1 -1
  675. package/lib/esm/numerics/Quadrature.js.map +1 -1
  676. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  677. package/lib/esm/numerics/SmallSystem.d.ts +13 -7
  678. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  679. package/lib/esm/numerics/SmallSystem.js +13 -7
  680. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  681. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  682. package/lib/esm/numerics/UnionFind.js.map +1 -1
  683. package/lib/esm/numerics/UsageSums.js.map +1 -1
  684. package/lib/esm/polyface/AuxData.js.map +1 -1
  685. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  686. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  687. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  688. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  689. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  690. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  691. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  692. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  693. package/lib/esm/polyface/Polyface.d.ts +1 -3
  694. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  695. package/lib/esm/polyface/Polyface.js +2 -6
  696. package/lib/esm/polyface/Polyface.js.map +1 -1
  697. package/lib/esm/polyface/PolyfaceBuilder.d.ts +25 -6
  698. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  699. package/lib/esm/polyface/PolyfaceBuilder.js +59 -8
  700. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  701. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  702. package/lib/esm/polyface/PolyfaceData.d.ts +2 -0
  703. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  704. package/lib/esm/polyface/PolyfaceData.js +7 -3
  705. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  706. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  707. package/lib/esm/polyface/PolyfaceQuery.js +8 -10
  708. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  709. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  710. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  711. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  712. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  713. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  714. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  715. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  716. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  717. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  718. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  719. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  720. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  721. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  722. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +9 -12
  723. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  724. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  725. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  726. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  727. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  728. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  729. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  730. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  731. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  732. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  733. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  734. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  735. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  736. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  737. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  738. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  739. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  740. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  741. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  742. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  743. package/lib/esm/serialization/DeepCompare.js +1 -1
  744. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  745. package/lib/esm/serialization/GeometrySamples.d.ts +2 -1
  746. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  747. package/lib/esm/serialization/GeometrySamples.js +2 -1
  748. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  749. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  750. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  751. package/lib/esm/solid/Box.js.map +1 -1
  752. package/lib/esm/solid/Cone.js.map +1 -1
  753. package/lib/esm/solid/LinearSweep.js.map +1 -1
  754. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  755. package/lib/esm/solid/RuledSweep.js.map +1 -1
  756. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  757. package/lib/esm/solid/Sphere.js.map +1 -1
  758. package/lib/esm/solid/SweepContour.js.map +1 -1
  759. package/lib/esm/solid/TorusPipe.js.map +1 -1
  760. package/lib/esm/topology/ChainMerge.js.map +1 -1
  761. package/lib/esm/topology/Graph.d.ts +38 -12
  762. package/lib/esm/topology/Graph.d.ts.map +1 -1
  763. package/lib/esm/topology/Graph.js +92 -24
  764. package/lib/esm/topology/Graph.js.map +1 -1
  765. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  766. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  767. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  768. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  769. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +20 -11
  770. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  771. package/lib/esm/topology/HalfEdgeGraphSearch.js +43 -39
  772. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  773. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  774. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  775. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  776. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  777. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  778. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  779. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  780. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  781. package/lib/esm/topology/MaskManager.js.map +1 -1
  782. package/lib/esm/topology/Merging.d.ts +22 -11
  783. package/lib/esm/topology/Merging.d.ts.map +1 -1
  784. package/lib/esm/topology/Merging.js +32 -22
  785. package/lib/esm/topology/Merging.js.map +1 -1
  786. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  787. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  788. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  789. package/lib/esm/topology/Triangulation.d.ts +13 -11
  790. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  791. package/lib/esm/topology/Triangulation.js +40 -36
  792. package/lib/esm/topology/Triangulation.js.map +1 -1
  793. package/lib/esm/topology/Voronoi.d.ts +195 -0
  794. package/lib/esm/topology/Voronoi.d.ts.map +1 -0
  795. package/lib/esm/topology/Voronoi.js +696 -0
  796. package/lib/esm/topology/Voronoi.js.map +1 -0
  797. package/lib/esm/topology/XYParitySearchContext.d.ts +1 -1
  798. package/lib/esm/topology/XYParitySearchContext.d.ts.map +1 -1
  799. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  800. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"HalfEdgePriorityQueue.js","sourceRoot":"","sources":["../../../src/topology/HalfEdgePriorityQueue.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAqB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,OAAO,qCAAqC;IACzC,aAAa,CAA0B;IACvC,WAAW,CAAa;IAC/B,YACE,UAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IACD,qEAAqE;IAC9D,eAAe;QACpB,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAG,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;OAIG;IACI,oBAAoB,CAAC,CAAS;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD;;;;OAIG;IACI,6BAA6B,CAAC,CAAS;QAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,+BAA+B;gBAC/B,IAAI,OAAO,GAAG,CAAC;oBACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,mBAAmB;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC;IACpC,CAAC;CACF","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 Topology\n */\nimport { OrderedComparator, PriorityQueue } from \"@itwin/core-bentley\";\nimport { HalfEdge } from \"./Graph\";\nimport { HalfEdgeGraphOps } from \"./Merging\";\n\n/**\n * * Combination of a priority queue of HalfEdges with\n * * Additional \"active\" array to carry edges that have been removed from the queue but are still to be\n * inspected (possibly many times)\n * * The priority queue default sort is Y-then-X lexical sort.\n * * Caller has direct access to the queue and array.\n * * Methods are added here only to do things that involve both the queue and the array.\n * @internal\n */\nexport class HalfEdgePriorityQueueWithPartnerArray {\n public priorityQueue: PriorityQueue<HalfEdge>;\n public activeEdges: HalfEdge[];\n public constructor(\n compare: OrderedComparator<HalfEdge> = (a, b) => HalfEdgeGraphOps.compareNodesYXUp(a, b)) {\n this.priorityQueue = new PriorityQueue(compare);\n this.activeEdges = [];\n }\n /** Read a member from the queue and transfer to the active array. */\n public popQueueToArray(): HalfEdge | undefined {\n if (this.priorityQueue.isEmpty)\n return undefined;\n const x = this.priorityQueue.pop()!;\n this.activeEdges.push(x);\n return x;\n }\n /** Pop the last entry and put it back as replacement for current entry at index i.\n * * Effectively remove active member at index i\n * * The array order is changed.\n * * constant time.\n */\n public popArrayToArrayIndex(i: number) {\n const n = this.activeEdges.length;\n if (i < n) {\n const x = this.activeEdges.pop()!;\n this.activeEdges[i] = x;\n }\n }\n /**\n * * Scan the active array.\n * * remove edges whose top y is below y\n * * (pack all remaining ones back towards the beginning)\n */\n public removeArrayMembersWithY1Below(y: number) {\n let numKeep = 0;\n const n = this.activeEdges.length;\n for (let i = 0; i < n; i++) {\n const q = this.activeEdges[i];\n const yB = q.faceSuccessor.y;\n if (yB >= y) {\n // copy [i] forward to [target]\n if (numKeep < i)\n this.activeEdges[numKeep] = q;\n numKeep++;\n } else {\n // let it go by !!!\n }\n }\n this.activeEdges.length = numKeep;\n }\n}\n"]}
1
+ {"version":3,"file":"HalfEdgePriorityQueue.js","sourceRoot":"","sources":["../../../src/topology/HalfEdgePriorityQueue.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAqB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,OAAO,qCAAqC;IACzC,aAAa,CAA0B;IACvC,WAAW,CAAa;IAC/B,YACE,UAAuC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IACD,qEAAqE;IAC9D,eAAe;QACpB,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAG,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;OAIG;IACI,oBAAoB,CAAC,CAAS;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD;;;;OAIG;IACI,6BAA6B,CAAC,CAAS;QAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBACZ,+BAA+B;gBAC/B,IAAI,OAAO,GAAG,CAAC;oBACb,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,mBAAmB;YACrB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC;IACpC,CAAC;CACF","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 Topology\r\n */\r\nimport { OrderedComparator, PriorityQueue } from \"@itwin/core-bentley\";\r\nimport { HalfEdge } from \"./Graph\";\r\nimport { HalfEdgeGraphOps } from \"./Merging\";\r\n\r\n/**\r\n * * Combination of a priority queue of HalfEdges with\r\n * * Additional \"active\" array to carry edges that have been removed from the queue but are still to be\r\n * inspected (possibly many times)\r\n * * The priority queue default sort is Y-then-X lexical sort.\r\n * * Caller has direct access to the queue and array.\r\n * * Methods are added here only to do things that involve both the queue and the array.\r\n * @internal\r\n */\r\nexport class HalfEdgePriorityQueueWithPartnerArray {\r\n public priorityQueue: PriorityQueue<HalfEdge>;\r\n public activeEdges: HalfEdge[];\r\n public constructor(\r\n compare: OrderedComparator<HalfEdge> = (a, b) => HalfEdgeGraphOps.compareNodesYXUp(a, b)) {\r\n this.priorityQueue = new PriorityQueue(compare);\r\n this.activeEdges = [];\r\n }\r\n /** Read a member from the queue and transfer to the active array. */\r\n public popQueueToArray(): HalfEdge | undefined {\r\n if (this.priorityQueue.isEmpty)\r\n return undefined;\r\n const x = this.priorityQueue.pop()!;\r\n this.activeEdges.push(x);\r\n return x;\r\n }\r\n /** Pop the last entry and put it back as replacement for current entry at index i.\r\n * * Effectively remove active member at index i\r\n * * The array order is changed.\r\n * * constant time.\r\n */\r\n public popArrayToArrayIndex(i: number) {\r\n const n = this.activeEdges.length;\r\n if (i < n) {\r\n const x = this.activeEdges.pop()!;\r\n this.activeEdges[i] = x;\r\n }\r\n }\r\n /**\r\n * * Scan the active array.\r\n * * remove edges whose top y is below y\r\n * * (pack all remaining ones back towards the beginning)\r\n */\r\n public removeArrayMembersWithY1Below(y: number) {\r\n let numKeep = 0;\r\n const n = this.activeEdges.length;\r\n for (let i = 0; i < n; i++) {\r\n const q = this.activeEdges[i];\r\n const yB = q.faceSuccessor.y;\r\n if (yB >= y) {\r\n // copy [i] forward to [target]\r\n if (numKeep < i)\r\n this.activeEdges[numKeep] = q;\r\n numKeep++;\r\n } else {\r\n // let it go by !!!\r\n }\r\n }\r\n this.activeEdges.length = numKeep;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InsertAndRetriangulateContext.js","sourceRoot":"","sources":["../../../src/topology/InsertAndRetriangulateContext.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 Topology\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Geometry, PolygonLocation } from \"../Geometry\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { SmallSystem } from \"../numerics/SmallSystem\";\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\nimport { MarkedEdgeSet } from \"./HalfEdgeMarkSet\";\nimport { PointSearchContext, RayClassification } from \"./HalfEdgePointInGraphSearch\";\nimport { HalfEdgePositionDetail } from \"./HalfEdgePositionDetail\";\nimport { Triangulator } from \"./Triangulation\";\n\n/**\n * Options for setting the z-coordinate of a vertex in the triangulation when a point with the same xy is inserted.\n * @internal\n */\nexport enum InsertedVertexZOptions {\n /** The point's z-coordinate is ignored, and the existing vertex's z-coordinate is unchanged. */\n Ignore,\n /** The point's z-coordinate replaces the existing vertex's z-coordinate. */\n Replace,\n /**\n * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the\n * point's z-coordinate is larger.\n */\n ReplaceIfLarger,\n /**\n * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the\n * point's z-coordinate is smaller.\n */\n ReplaceIfSmaller,\n}\n\n/**\n * Context for repeated insertion of new points in a graph.\n * * Initial graph should have clean outer boundary (e.g., as typically marked with `HalfEdgeMask.EXTERIOR` and\n * `HalfEdgeMask.BOUNDARY_EDGE`).\n * * After each insertion, the current \"position\" within the graph is remembered so that each subsequent insertion\n * can reuse that position as start for walking to the new point.\n * @internal\n */\nexport class InsertAndRetriangulateContext {\n private _graph: HalfEdgeGraph;\n private _edgeSet: MarkedEdgeSet;\n private _searcher: HalfEdgePositionDetail;\n private _tolerance: number;\n\n private constructor(graph: HalfEdgeGraph, tolerance: number) {\n this._graph = graph;\n this._edgeSet = MarkedEdgeSet.create(graph)!;\n this._searcher = HalfEdgePositionDetail.create();\n this._tolerance = tolerance;\n }\n /** Create a new context referencing the graph. */\n public static create(graph: HalfEdgeGraph, tolerance: number = Geometry.smallMetricDistance) {\n return new InsertAndRetriangulateContext(graph, tolerance);\n }\n /** Query the (pointer to) the graph in the context. */\n public get graph(): HalfEdgeGraph {\n return this._graph;\n }\n /**\n * Walk face from edgeNode. Insert new edges back to start node from all except immediate successor and predecessor.\n * Insert all new nodes and nodes of the existing face in edgeSet.\n */\n private retriangulateFromBaseVertex(centralNode: HalfEdge) {\n const numNode = centralNode.countEdgesAroundFace();\n if (numNode < 4 || centralNode.isMaskSet(HalfEdgeMask.EXTERIOR))\n return;\n this._edgeSet.addAroundFace(centralNode);\n const numEdge = numNode - 3;\n let farNode = centralNode.faceSuccessor;\n let nearNode = centralNode;\n for (let i = 0; i < numEdge; i++) {\n farNode = farNode.faceSuccessor;\n nearNode = this._graph.createEdgeHalfEdgeHalfEdge(nearNode, 0, farNode, 0);\n farNode = nearNode.faceSuccessor;\n this._edgeSet.addToSet(nearNode);\n }\n }\n /** Reset the \"current\" position to unknown state. */\n public reset() {\n this._searcher = HalfEdgePositionDetail.create();\n }\n /** Return a (reference to!) the current position in the graph. */\n public get currentPosition() {\n return this._searcher;\n }\n /** Linear search for the nearest graph edge or vertex. */\n public searchForNearestEdgeOrVertex(xyz: Point3d): HalfEdgePositionDetail {\n const position = HalfEdgePositionDetail.create();\n position.setDTag(Number.MAX_VALUE);\n const xyzC = Point3d.create();\n let fractionC;\n let distanceC;\n for (const nodeA of this._graph.allHalfEdges) {\n const nodeB = nodeA.faceSuccessor;\n fractionC = SmallSystem.lineSegment3dXYClosestPointUnbounded(nodeA, nodeB, xyz);\n if (fractionC !== undefined) {\n if (fractionC > 1.0) {\n distanceC = xyz.distanceXY(nodeB);\n if (distanceC < position.getDTag()!) {\n position.resetAsVertex(nodeB);\n position.setDTag(distanceC);\n }\n } else if (fractionC < 0.0) {\n distanceC = xyz.distanceXY(nodeA);\n if (distanceC < position.getDTag()!) {\n position.resetAsVertex(nodeA);\n position.setDTag(distanceC);\n }\n } else {\n nodeA.fractionToPoint3d(fractionC, xyzC);\n\n distanceC = xyz.distanceXY(xyzC);\n if (distanceC < position.getDTag()!) {\n position.resetAtEdgeAndFraction(nodeA, fractionC);\n }\n }\n }\n }\n return position;\n }\n /** Linear search for the nearest graph vertex. */\n public searchForNearestVertex(xyz: Point3d): HalfEdgePositionDetail {\n const position = HalfEdgePositionDetail.create();\n position.setDTag(Number.MAX_VALUE);\n let distanceA;\n for (const nodeA of this._graph.allHalfEdges) {\n distanceA = xyz.distanceXY(nodeA);\n if (distanceA < position.getDTag()!) {\n position.resetAsVertex(nodeA);\n position.setDTag(distanceA);\n }\n }\n return position;\n }\n /**\n * Reset the \"current\" position to a vertex nearest the target point.\n * @param xyz target point\n * @param searchEdgesToo reset to nearest vertex or edge\n */\n public resetSearch(xyz: Point3d, searchEdgesToo: boolean): void {\n if (searchEdgesToo)\n this._searcher = this.searchForNearestEdgeOrVertex(xyz);\n else\n this._searcher = this.searchForNearestVertex(xyz);\n }\n /** Reclassify the current interior face hit if it is too close to an edge of the face. */\n private reclassifyFaceHit(point: Point3d): boolean {\n if (undefined === this._searcher.node || !this._searcher.isFace || this._searcher.node.isMaskSet(HalfEdgeMask.EXTERIOR))\n return false;\n const pointXY = Point3d.create(point.x, point.y);\n const face = this._searcher.node.collectAroundFace((node: HalfEdge) => {\n const xy = Point3d.create(node.x, node.y);\n (xy as any).node = node; // decorate the point with the node\n return xy;\n });\n const detail = PolygonOps.closestPointOnBoundary(face, pointXY, this._tolerance);\n assert(detail.code === PolygonLocation.OnPolygonEdgeInterior);\n if (detail.a > this._tolerance)\n return false;\n const edge = face[detail.closestEdgeIndex].node;\n const vertex = (detail.closestEdgeParam < 0.5) ? edge : edge.faceSuccessor;\n if (detail.point.distanceSquaredXY(vertex) <= this._tolerance * this._tolerance)\n this._searcher.resetAsVertex(vertex);\n else\n this._searcher.resetAtEdgeAndFraction(edge, detail.closestEdgeParam);\n return true;\n }\n /** Reclassify the current interior edge hit if it is too close to an edge of either adjacent face. */\n private reclassifyEdgeHit(point: Point3d): boolean {\n if (undefined === this._searcher.node || !this._searcher.isEdge || this._searcher.node.isMaskSet(HalfEdgeMask.BOUNDARY_EDGE))\n return false;\n const pointXY = Point3d.create(point.x, point.y);\n const superFace: Point3d[] = [];\n for (let n = this._searcher.node.faceSuccessor; n !== this._searcher.node; n = n.faceSuccessor) {\n const xy = Point3d.create(n.x, n.y);\n (xy as any).node = n; // decorate the point with a node of the left face\n superFace.push(xy);\n }\n for (let n = this._searcher.node.vertexPredecessor; n !== this._searcher.node.edgeMate; n = n.faceSuccessor) {\n const xy = Point3d.create(n.x, n.y);\n (xy as any).node = n; // decorate the point with a node of the right face\n superFace.push(xy);\n }\n const detail = PolygonOps.closestPointOnBoundary(superFace, pointXY, this._tolerance);\n if (detail.a > this._tolerance)\n return false;\n const edge = (superFace[detail.closestEdgeIndex] as any).node;\n const vertex = (detail.closestEdgeParam < 0.5) ? edge : edge.faceSuccessor;\n if (detail.code === PolygonLocation.OnPolygonVertex) // can happen if superFace is non-concave (e.g., a dart)\n this._searcher.resetAsVertex(vertex);\n else if (detail.point.distanceSquaredXY(vertex) <= this._tolerance * this._tolerance)\n this._searcher.resetAsVertex(vertex);\n else\n this._searcher.resetAtEdgeAndFraction(edge, detail.closestEdgeParam);\n return true;\n }\n /**\n * Given a point that was just inserted into the graph at the given node, apply the z-coordinate rule around\n * the vertex loop.\n */\n private updateZAroundVertex(node: HalfEdge, point: Point3d, zOption: InsertedVertexZOptions): void {\n if (InsertedVertexZOptions.Ignore === zOption)\n return;\n if ((InsertedVertexZOptions.ReplaceIfLarger === zOption) && (point.z <= node.z))\n return;\n if ((InsertedVertexZOptions.ReplaceIfSmaller === zOption) && (point.z >= node.z))\n return;\n // only replace z; preserving xy preserves convexity of the hull\n node.setXYZAroundVertex(node.x, node.y, point.z);\n }\n /**\n * Insert a new point into the graph and retriangulate.\n * @param point the coordinates of the node to be inserted.\n * @param newZWins rule governing when `point.z` should override the z-coordinate of an existing vertex with the\n * same x and y.\n * @returns true if and only if the point didn't need to be inserted or was successfully inserted.\n */\n public insertAndRetriangulate(point: Point3d, newZWins: InsertedVertexZOptions): boolean {\n this.moveToPoint(this._searcher, point);\n if (this._searcher.node === undefined)\n return false;\n // Try to avoid skinny triangles. If we iterated, this could get out of control (e.g., inserting point into a fan).\n // Limiting to one reclassification ensures the hit doesn't move more than tol and reduces skinny triangles\n // adjacent to the hull.\n if (!this.reclassifyFaceHit(point))\n this.reclassifyEdgeHit(point);\n if (this._searcher.isFace) {\n // insert point into the graph if it lies in an interior face\n if (!this._searcher.node.isMaskSet(HalfEdgeMask.EXTERIOR)) {\n const newNode = this._graph.createEdgeXYZHalfEdge(point.x, point.y, point.z, 0, this._searcher.node, 0);\n this.retriangulateFromBaseVertex(newNode);\n Triangulator.flipTrianglesInEdgeSet(this._graph, this._edgeSet);\n this._searcher.resetAsVertex(newNode);\n }\n } else if (this._searcher.isEdge) {\n // insert point into the graph by splitting its containing edge\n const newA = this._graph.splitEdgeAtFraction(this._searcher.node, this._searcher.edgeFraction!);\n const newB = newA.vertexPredecessor;\n this.updateZAroundVertex(newA, point, InsertedVertexZOptions.Replace); // always replace\n this.retriangulateFromBaseVertex(newA);\n this.retriangulateFromBaseVertex(newB);\n Triangulator.flipTrianglesInEdgeSet(this._graph, this._edgeSet);\n this._searcher.resetAsVertex(newA);\n } else if (this._searcher.isVertex) {\n // no need to insert point as there's already a vertex there, but maybe update its z-coord\n this.updateZAroundVertex(this._searcher.node, point, newZWins);\n }\n return true;\n }\n /**\n * Advance movingPosition to a face, edge, or vertex position detail that contains `target`.\n * @param movingPosition input seed for search, updated on return.\n * @param target point to search for containing topology in the graph.\n * @param announcer optional callback invoked during search loop; return false to end search.\n * @returns true if search was successful.\n */\n public moveToPoint(\n movingPosition: HalfEdgePositionDetail,\n target: Point3d,\n announcer?: (position: HalfEdgePositionDetail) => boolean,\n ): boolean {\n const psc = PointSearchContext.create(this._tolerance);\n movingPosition.setITag(0);\n if (movingPosition.isUnclassified) {\n moveToAnyUnmaskedEdge(this.graph, movingPosition, 0.5, HalfEdgeMask.NULL_MASK);\n if (movingPosition.isUnclassified)\n return false;\n }\n let trap = 0;\n const ray = Ray3d.createXAxis();\n for (; movingPosition.getITag() === 0 && trap < 2;) {\n if (announcer !== undefined) {\n const continueSearch = announcer(movingPosition);\n if (!continueSearch)\n break;\n }\n if (!psc.setSearchRay(movingPosition, target, ray)) {\n return false;\n } else if (movingPosition.isFace) {\n const lastBefore = HalfEdgePositionDetail.create();\n const firstAfter = HalfEdgePositionDetail.create();\n const rc = psc.reAimAroundFace(movingPosition.node!, ray, ray.a!, lastBefore, firstAfter);\n // reAimAroundFace returns lots of cases in `lastBefore`\n switch (rc) {\n case RayClassification.NoHits: {\n movingPosition.resetAsUnknown();\n break;\n }\n case RayClassification.TargetOnVertex: {\n movingPosition.setFrom(lastBefore);\n movingPosition.setITag(1);\n break;\n }\n case RayClassification.TargetOnEdge: {\n movingPosition.setFrom(lastBefore);\n movingPosition.setITag(1);\n break;\n }\n case RayClassification.Bracket: {\n movingPosition.resetAsFace(lastBefore.node, target);\n movingPosition.setITag(1);\n break;\n }\n case RayClassification.TargetBefore: { // do we ever get here?\n movingPosition.resetAsFace(movingPosition.node, target);\n movingPosition.setITag(1);\n break;\n }\n case RayClassification.TargetAfter: {\n if (movingPosition.node === lastBefore.node\n && movingPosition.isFace\n && (lastBefore.isEdge || lastBefore.isVertex)) {\n trap++;\n } else {\n trap = 0;\n }\n movingPosition.setFrom(lastBefore);\n break;\n }\n }\n } else if (movingPosition.isEdge) {\n psc.reAimFromEdge(movingPosition, ray, ray.a!);\n if (movingPosition.isUnclassified)\n break;\n } else if (movingPosition.isVertex) {\n psc.reAimFromVertex(movingPosition, ray, ray.a!);\n if (movingPosition.isUnclassified)\n break;\n }\n }\n if (movingPosition.isAtXY(target.x, target.y))\n return true;\n if (trap > 1) {\n // ugh! We exited the loop by repeatedly hitting the same node with edge or vertex type in lastBefore.\n // This happens only when the target point is exterior (heavy triangulation use cases start with a convex\n // hull and only do interior intersections, so case only happens in contrived unit tests so far\n // What to mark? Leave it as is, but mark as exterior target\n if (movingPosition.node !== undefined) {\n movingPosition.setIsExteriorTarget(true);\n }\n return false;\n }\n // murky here; should never be hit. Has never been hit in unit tests.\n return false;\n }\n}\n/** Set `position` to a random unmasked edge at the specified fraction. */\nfunction moveToAnyUnmaskedEdge(\n graph: HalfEdgeGraph, position: HalfEdgePositionDetail, edgeFraction: number, skipMask: HalfEdgeMask,\n): boolean {\n for (const candidate of graph.allHalfEdges) {\n if (!candidate.isMaskSet(skipMask)) {\n position.resetAtEdgeAndFraction(candidate, edgeFraction);\n return true;\n }\n }\n return false;\n}\n"]}
1
+ {"version":3,"file":"InsertAndRetriangulateContext.js","sourceRoot":"","sources":["../../../src/topology/InsertAndRetriangulateContext.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 Topology\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Geometry, PolygonLocation } from \"../Geometry\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { SmallSystem } from \"../numerics/SmallSystem\";\r\nimport { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from \"./Graph\";\r\nimport { MarkedEdgeSet } from \"./HalfEdgeMarkSet\";\r\nimport { PointSearchContext, RayClassification } from \"./HalfEdgePointInGraphSearch\";\r\nimport { HalfEdgePositionDetail } from \"./HalfEdgePositionDetail\";\r\nimport { Triangulator } from \"./Triangulation\";\r\n\r\n/**\r\n * Options for setting the z-coordinate of a vertex in the triangulation when a point with the same xy is inserted.\r\n * @internal\r\n */\r\nexport enum InsertedVertexZOptions {\r\n /** The point's z-coordinate is ignored, and the existing vertex's z-coordinate is unchanged. */\r\n Ignore,\r\n /** The point's z-coordinate replaces the existing vertex's z-coordinate. */\r\n Replace,\r\n /**\r\n * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the\r\n * point's z-coordinate is larger.\r\n */\r\n ReplaceIfLarger,\r\n /**\r\n * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the\r\n * point's z-coordinate is smaller.\r\n */\r\n ReplaceIfSmaller,\r\n}\r\n\r\n/**\r\n * Context for repeated insertion of new points in a graph.\r\n * * Initial graph should have clean outer boundary (e.g., as typically marked with `HalfEdgeMask.EXTERIOR` and\r\n * `HalfEdgeMask.BOUNDARY_EDGE`).\r\n * * After each insertion, the current \"position\" within the graph is remembered so that each subsequent insertion\r\n * can reuse that position as start for walking to the new point.\r\n * @internal\r\n */\r\nexport class InsertAndRetriangulateContext {\r\n private _graph: HalfEdgeGraph;\r\n private _edgeSet: MarkedEdgeSet;\r\n private _searcher: HalfEdgePositionDetail;\r\n private _tolerance: number;\r\n\r\n private constructor(graph: HalfEdgeGraph, tolerance: number) {\r\n this._graph = graph;\r\n this._edgeSet = MarkedEdgeSet.create(graph)!;\r\n this._searcher = HalfEdgePositionDetail.create();\r\n this._tolerance = tolerance;\r\n }\r\n /** Create a new context referencing the graph. */\r\n public static create(graph: HalfEdgeGraph, tolerance: number = Geometry.smallMetricDistance) {\r\n return new InsertAndRetriangulateContext(graph, tolerance);\r\n }\r\n /** Query the (pointer to) the graph in the context. */\r\n public get graph(): HalfEdgeGraph {\r\n return this._graph;\r\n }\r\n /**\r\n * Walk face from edgeNode. Insert new edges back to start node from all except immediate successor and predecessor.\r\n * Insert all new nodes and nodes of the existing face in edgeSet.\r\n */\r\n private retriangulateFromBaseVertex(centralNode: HalfEdge) {\r\n const numNode = centralNode.countEdgesAroundFace();\r\n if (numNode < 4 || centralNode.isMaskSet(HalfEdgeMask.EXTERIOR))\r\n return;\r\n this._edgeSet.addAroundFace(centralNode);\r\n const numEdge = numNode - 3;\r\n let farNode = centralNode.faceSuccessor;\r\n let nearNode = centralNode;\r\n for (let i = 0; i < numEdge; i++) {\r\n farNode = farNode.faceSuccessor;\r\n nearNode = this._graph.createEdgeHalfEdgeHalfEdge(nearNode, 0, farNode, 0);\r\n farNode = nearNode.faceSuccessor;\r\n this._edgeSet.addToSet(nearNode);\r\n }\r\n }\r\n /** Reset the \"current\" position to unknown state. */\r\n public reset() {\r\n this._searcher = HalfEdgePositionDetail.create();\r\n }\r\n /** Return a (reference to!) the current position in the graph. */\r\n public get currentPosition() {\r\n return this._searcher;\r\n }\r\n /** Linear search for the nearest graph edge or vertex. */\r\n public searchForNearestEdgeOrVertex(xyz: Point3d): HalfEdgePositionDetail {\r\n const position = HalfEdgePositionDetail.create();\r\n position.setDTag(Number.MAX_VALUE);\r\n const xyzC = Point3d.create();\r\n let fractionC;\r\n let distanceC;\r\n for (const nodeA of this._graph.allHalfEdges) {\r\n const nodeB = nodeA.faceSuccessor;\r\n fractionC = SmallSystem.lineSegment3dXYClosestPointUnbounded(nodeA, nodeB, xyz);\r\n if (fractionC !== undefined) {\r\n if (fractionC > 1.0) {\r\n distanceC = xyz.distanceXY(nodeB);\r\n if (distanceC < position.getDTag()!) {\r\n position.resetAsVertex(nodeB);\r\n position.setDTag(distanceC);\r\n }\r\n } else if (fractionC < 0.0) {\r\n distanceC = xyz.distanceXY(nodeA);\r\n if (distanceC < position.getDTag()!) {\r\n position.resetAsVertex(nodeA);\r\n position.setDTag(distanceC);\r\n }\r\n } else {\r\n nodeA.fractionToPoint3d(fractionC, xyzC);\r\n\r\n distanceC = xyz.distanceXY(xyzC);\r\n if (distanceC < position.getDTag()!) {\r\n position.resetAtEdgeAndFraction(nodeA, fractionC);\r\n }\r\n }\r\n }\r\n }\r\n return position;\r\n }\r\n /** Linear search for the nearest graph vertex. */\r\n public searchForNearestVertex(xyz: Point3d): HalfEdgePositionDetail {\r\n const position = HalfEdgePositionDetail.create();\r\n position.setDTag(Number.MAX_VALUE);\r\n let distanceA;\r\n for (const nodeA of this._graph.allHalfEdges) {\r\n distanceA = xyz.distanceXY(nodeA);\r\n if (distanceA < position.getDTag()!) {\r\n position.resetAsVertex(nodeA);\r\n position.setDTag(distanceA);\r\n }\r\n }\r\n return position;\r\n }\r\n /**\r\n * Reset the \"current\" position to a vertex nearest the target point.\r\n * @param xyz target point\r\n * @param searchEdgesToo reset to nearest vertex or edge\r\n */\r\n public resetSearch(xyz: Point3d, searchEdgesToo: boolean): void {\r\n if (searchEdgesToo)\r\n this._searcher = this.searchForNearestEdgeOrVertex(xyz);\r\n else\r\n this._searcher = this.searchForNearestVertex(xyz);\r\n }\r\n /** Reclassify the current interior face hit if it is too close to an edge of the face. */\r\n private reclassifyFaceHit(point: Point3d): boolean {\r\n if (undefined === this._searcher.node || !this._searcher.isFace || this._searcher.node.isMaskSet(HalfEdgeMask.EXTERIOR))\r\n return false;\r\n const pointXY = Point3d.create(point.x, point.y);\r\n const face = this._searcher.node.collectAroundFace((node: HalfEdge) => {\r\n const xy = Point3d.create(node.x, node.y);\r\n (xy as any).node = node; // decorate the point with the node\r\n return xy;\r\n });\r\n const detail = PolygonOps.closestPointOnBoundary(face, pointXY, this._tolerance);\r\n assert(detail.code === PolygonLocation.OnPolygonEdgeInterior);\r\n if (detail.a > this._tolerance)\r\n return false;\r\n const edge = face[detail.closestEdgeIndex].node;\r\n const vertex = (detail.closestEdgeParam < 0.5) ? edge : edge.faceSuccessor;\r\n if (detail.point.distanceSquaredXY(vertex) <= this._tolerance * this._tolerance)\r\n this._searcher.resetAsVertex(vertex);\r\n else\r\n this._searcher.resetAtEdgeAndFraction(edge, detail.closestEdgeParam);\r\n return true;\r\n }\r\n /** Reclassify the current interior edge hit if it is too close to an edge of either adjacent face. */\r\n private reclassifyEdgeHit(point: Point3d): boolean {\r\n if (undefined === this._searcher.node || !this._searcher.isEdge || this._searcher.node.isMaskSet(HalfEdgeMask.BOUNDARY_EDGE))\r\n return false;\r\n const pointXY = Point3d.create(point.x, point.y);\r\n const superFace: Point3d[] = [];\r\n for (let n = this._searcher.node.faceSuccessor; n !== this._searcher.node; n = n.faceSuccessor) {\r\n const xy = Point3d.create(n.x, n.y);\r\n (xy as any).node = n; // decorate the point with a node of the left face\r\n superFace.push(xy);\r\n }\r\n for (let n = this._searcher.node.vertexPredecessor; n !== this._searcher.node.edgeMate; n = n.faceSuccessor) {\r\n const xy = Point3d.create(n.x, n.y);\r\n (xy as any).node = n; // decorate the point with a node of the right face\r\n superFace.push(xy);\r\n }\r\n const detail = PolygonOps.closestPointOnBoundary(superFace, pointXY, this._tolerance);\r\n if (detail.a > this._tolerance)\r\n return false;\r\n const edge = (superFace[detail.closestEdgeIndex] as any).node;\r\n const vertex = (detail.closestEdgeParam < 0.5) ? edge : edge.faceSuccessor;\r\n if (detail.code === PolygonLocation.OnPolygonVertex) // can happen if superFace is non-concave (e.g., a dart)\r\n this._searcher.resetAsVertex(vertex);\r\n else if (detail.point.distanceSquaredXY(vertex) <= this._tolerance * this._tolerance)\r\n this._searcher.resetAsVertex(vertex);\r\n else\r\n this._searcher.resetAtEdgeAndFraction(edge, detail.closestEdgeParam);\r\n return true;\r\n }\r\n /**\r\n * Given a point that was just inserted into the graph at the given node, apply the z-coordinate rule around\r\n * the vertex loop.\r\n */\r\n private updateZAroundVertex(node: HalfEdge, point: Point3d, zOption: InsertedVertexZOptions): void {\r\n if (InsertedVertexZOptions.Ignore === zOption)\r\n return;\r\n if ((InsertedVertexZOptions.ReplaceIfLarger === zOption) && (point.z <= node.z))\r\n return;\r\n if ((InsertedVertexZOptions.ReplaceIfSmaller === zOption) && (point.z >= node.z))\r\n return;\r\n // only replace z; preserving xy preserves convexity of the hull\r\n node.setXYZAroundVertex(node.x, node.y, point.z);\r\n }\r\n /**\r\n * Insert a new point into the graph and retriangulate.\r\n * @param point the coordinates of the node to be inserted.\r\n * @param newZWins rule governing when `point.z` should override the z-coordinate of an existing vertex with the\r\n * same x and y.\r\n * @returns true if and only if the point didn't need to be inserted or was successfully inserted.\r\n */\r\n public insertAndRetriangulate(point: Point3d, newZWins: InsertedVertexZOptions): boolean {\r\n this.moveToPoint(this._searcher, point);\r\n if (this._searcher.node === undefined)\r\n return false;\r\n // Try to avoid skinny triangles. If we iterated, this could get out of control (e.g., inserting point into a fan).\r\n // Limiting to one reclassification ensures the hit doesn't move more than tol and reduces skinny triangles\r\n // adjacent to the hull.\r\n if (!this.reclassifyFaceHit(point))\r\n this.reclassifyEdgeHit(point);\r\n if (this._searcher.isFace) {\r\n // insert point into the graph if it lies in an interior face\r\n if (!this._searcher.node.isMaskSet(HalfEdgeMask.EXTERIOR)) {\r\n const newNode = this._graph.createEdgeXYZHalfEdge(point.x, point.y, point.z, 0, this._searcher.node, 0);\r\n this.retriangulateFromBaseVertex(newNode);\r\n Triangulator.flipTrianglesInEdgeSet(this._graph, this._edgeSet);\r\n this._searcher.resetAsVertex(newNode);\r\n }\r\n } else if (this._searcher.isEdge) {\r\n // insert point into the graph by splitting its containing edge\r\n const newA = this._graph.splitEdgeAtFraction(this._searcher.node, this._searcher.edgeFraction!);\r\n const newB = newA.vertexPredecessor;\r\n this.updateZAroundVertex(newA, point, InsertedVertexZOptions.Replace); // always replace\r\n this.retriangulateFromBaseVertex(newA);\r\n this.retriangulateFromBaseVertex(newB);\r\n Triangulator.flipTrianglesInEdgeSet(this._graph, this._edgeSet);\r\n this._searcher.resetAsVertex(newA);\r\n } else if (this._searcher.isVertex) {\r\n // no need to insert point as there's already a vertex there, but maybe update its z-coord\r\n this.updateZAroundVertex(this._searcher.node, point, newZWins);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Advance movingPosition to a face, edge, or vertex position detail that contains `target`.\r\n * @param movingPosition input seed for search, updated on return.\r\n * @param target point to search for containing topology in the graph.\r\n * @param announcer optional callback invoked during search loop; return false to end search.\r\n * @returns true if search was successful.\r\n */\r\n public moveToPoint(\r\n movingPosition: HalfEdgePositionDetail,\r\n target: Point3d,\r\n announcer?: (position: HalfEdgePositionDetail) => boolean,\r\n ): boolean {\r\n const psc = PointSearchContext.create(this._tolerance);\r\n movingPosition.setITag(0);\r\n if (movingPosition.isUnclassified) {\r\n moveToAnyUnmaskedEdge(this.graph, movingPosition, 0.5, HalfEdgeMask.NULL_MASK);\r\n if (movingPosition.isUnclassified)\r\n return false;\r\n }\r\n let trap = 0;\r\n const ray = Ray3d.createXAxis();\r\n for (; movingPosition.getITag() === 0 && trap < 2;) {\r\n if (announcer !== undefined) {\r\n const continueSearch = announcer(movingPosition);\r\n if (!continueSearch)\r\n break;\r\n }\r\n if (!psc.setSearchRay(movingPosition, target, ray)) {\r\n return false;\r\n } else if (movingPosition.isFace) {\r\n const lastBefore = HalfEdgePositionDetail.create();\r\n const firstAfter = HalfEdgePositionDetail.create();\r\n const rc = psc.reAimAroundFace(movingPosition.node!, ray, ray.a!, lastBefore, firstAfter);\r\n // reAimAroundFace returns lots of cases in `lastBefore`\r\n switch (rc) {\r\n case RayClassification.NoHits: {\r\n movingPosition.resetAsUnknown();\r\n break;\r\n }\r\n case RayClassification.TargetOnVertex: {\r\n movingPosition.setFrom(lastBefore);\r\n movingPosition.setITag(1);\r\n break;\r\n }\r\n case RayClassification.TargetOnEdge: {\r\n movingPosition.setFrom(lastBefore);\r\n movingPosition.setITag(1);\r\n break;\r\n }\r\n case RayClassification.Bracket: {\r\n movingPosition.resetAsFace(lastBefore.node, target);\r\n movingPosition.setITag(1);\r\n break;\r\n }\r\n case RayClassification.TargetBefore: { // do we ever get here?\r\n movingPosition.resetAsFace(movingPosition.node, target);\r\n movingPosition.setITag(1);\r\n break;\r\n }\r\n case RayClassification.TargetAfter: {\r\n if (movingPosition.node === lastBefore.node\r\n && movingPosition.isFace\r\n && (lastBefore.isEdge || lastBefore.isVertex)) {\r\n trap++;\r\n } else {\r\n trap = 0;\r\n }\r\n movingPosition.setFrom(lastBefore);\r\n break;\r\n }\r\n }\r\n } else if (movingPosition.isEdge) {\r\n psc.reAimFromEdge(movingPosition, ray, ray.a!);\r\n if (movingPosition.isUnclassified)\r\n break;\r\n } else if (movingPosition.isVertex) {\r\n psc.reAimFromVertex(movingPosition, ray, ray.a!);\r\n if (movingPosition.isUnclassified)\r\n break;\r\n }\r\n }\r\n if (movingPosition.isAtXY(target.x, target.y))\r\n return true;\r\n if (trap > 1) {\r\n // ugh! We exited the loop by repeatedly hitting the same node with edge or vertex type in lastBefore.\r\n // This happens only when the target point is exterior (heavy triangulation use cases start with a convex\r\n // hull and only do interior intersections, so case only happens in contrived unit tests so far\r\n // What to mark? Leave it as is, but mark as exterior target\r\n if (movingPosition.node !== undefined) {\r\n movingPosition.setIsExteriorTarget(true);\r\n }\r\n return false;\r\n }\r\n // murky here; should never be hit. Has never been hit in unit tests.\r\n return false;\r\n }\r\n}\r\n/** Set `position` to a random unmasked edge at the specified fraction. */\r\nfunction moveToAnyUnmaskedEdge(\r\n graph: HalfEdgeGraph, position: HalfEdgePositionDetail, edgeFraction: number, skipMask: HalfEdgeMask,\r\n): boolean {\r\n for (const candidate of graph.allHalfEdges) {\r\n if (!candidate.isMaskSet(skipMask)) {\r\n position.resetAtEdgeAndFraction(candidate, edgeFraction);\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MaskManager.js","sourceRoot":"","sources":["../../../src/topology/MaskManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACd,UAAU,CAAS;IACnB,kBAAkB,CAAS;IAC3B,cAAc,CAAS;IAC/B;;;;OAIG;IACH,YAAoB,SAAiB,EAAE,aAAqB;QAC1D,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,SAAiB;QACpC,kCAAkC;QAClC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS,GAAG,OAAO,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,SAAS,KAAK,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,yEAAyE;IAClE,QAAQ;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8DAA8D;IACvD,QAAQ,CAAC,IAAY;QAC1B,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,kDAAkD;QACnF,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC1B,CAAC;CACF","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 Topology\n */\n/**\n * Methods to \"grab and drop\" mask bits.\n * * Caller code (e.g. HalfEdgeGraph) initializes with a block of bits to be managed.\n * * Callers borrow and return masks with \"grabMask\" and \"dropMask\".\n * * Callers must exercise grab/drop balance discipline.\n * @internal\n */\nexport class MaskManager {\n private _freeMasks: number;\n private _originalFreeMasks: number;\n private _firstFreeMask: number;\n /**\n * Constructor\n * @param freeMasks caller-defined block of bits that are to be managed.\n * @param firstFreeMask the first free mask in the freeMasks bits block.\n */\n private constructor(freeMasks: number, firstFreeMask: number) {\n this._freeMasks = freeMasks;\n this._originalFreeMasks = freeMasks;\n this._firstFreeMask = firstFreeMask;\n }\n /**\n * Create a MaskManager.\n * Typical use: MaskManager.create(0xFFFF0000)\n * * This makes bits 16 through 31 available to be borrowed, with lower bits available for fixed usage.\n */\n public static create(freeMasks: number): MaskManager | undefined {\n // look for first bit up to bit 31\n let firstFree = 0;\n let testBit = 0x01;\n for (let i = 0; i < 32; i++) {\n if ((testBit & freeMasks) !== 0) {\n firstFree = testBit;\n break;\n }\n testBit = (testBit << 1);\n }\n if (firstFree === 0)\n return undefined;\n return new MaskManager(freeMasks, firstFree);\n }\n /** Find a mask bit that is not \"in use\" in order to borrow that mask. */\n public grabMask(): number {\n if (this._freeMasks === 0)\n return 0;\n let mask = this._firstFreeMask;\n while (!(mask & this._freeMasks))\n mask = mask << 1;\n this._freeMasks &= ~mask;\n return mask;\n }\n /** Return the borrowed mask so it is not \"in use\" anymore. */\n public dropMask(mask: number) {\n mask &= this._originalFreeMasks; // prevent \"drop\" of mask that is not in the pool.\n this._freeMasks |= mask;\n }\n}\n"]}
1
+ {"version":3,"file":"MaskManager.js","sourceRoot":"","sources":["../../../src/topology/MaskManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACd,UAAU,CAAS;IACnB,kBAAkB,CAAS;IAC3B,cAAc,CAAS;IAC/B;;;;OAIG;IACH,YAAoB,SAAiB,EAAE,aAAqB;QAC1D,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,SAAiB;QACpC,kCAAkC;QAClC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,SAAS,GAAG,OAAO,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,SAAS,KAAK,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,OAAO,IAAI,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,yEAAyE;IAClE,QAAQ;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8DAA8D;IACvD,QAAQ,CAAC,IAAY;QAC1B,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,kDAAkD;QACnF,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC1B,CAAC;CACF","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 Topology\r\n */\r\n/**\r\n * Methods to \"grab and drop\" mask bits.\r\n * * Caller code (e.g. HalfEdgeGraph) initializes with a block of bits to be managed.\r\n * * Callers borrow and return masks with \"grabMask\" and \"dropMask\".\r\n * * Callers must exercise grab/drop balance discipline.\r\n * @internal\r\n */\r\nexport class MaskManager {\r\n private _freeMasks: number;\r\n private _originalFreeMasks: number;\r\n private _firstFreeMask: number;\r\n /**\r\n * Constructor\r\n * @param freeMasks caller-defined block of bits that are to be managed.\r\n * @param firstFreeMask the first free mask in the freeMasks bits block.\r\n */\r\n private constructor(freeMasks: number, firstFreeMask: number) {\r\n this._freeMasks = freeMasks;\r\n this._originalFreeMasks = freeMasks;\r\n this._firstFreeMask = firstFreeMask;\r\n }\r\n /**\r\n * Create a MaskManager.\r\n * Typical use: MaskManager.create(0xFFFF0000)\r\n * * This makes bits 16 through 31 available to be borrowed, with lower bits available for fixed usage.\r\n */\r\n public static create(freeMasks: number): MaskManager | undefined {\r\n // look for first bit up to bit 31\r\n let firstFree = 0;\r\n let testBit = 0x01;\r\n for (let i = 0; i < 32; i++) {\r\n if ((testBit & freeMasks) !== 0) {\r\n firstFree = testBit;\r\n break;\r\n }\r\n testBit = (testBit << 1);\r\n }\r\n if (firstFree === 0)\r\n return undefined;\r\n return new MaskManager(freeMasks, firstFree);\r\n }\r\n /** Find a mask bit that is not \"in use\" in order to borrow that mask. */\r\n public grabMask(): number {\r\n if (this._freeMasks === 0)\r\n return 0;\r\n let mask = this._firstFreeMask;\r\n while (!(mask & this._freeMasks))\r\n mask = mask << 1;\r\n this._freeMasks &= ~mask;\r\n return mask;\r\n }\r\n /** Return the borrowed mask so it is not \"in use\" anymore. */\r\n public dropMask(mask: number) {\r\n mask &= this._originalFreeMasks; // prevent \"drop\" of mask that is not in the pool.\r\n this._freeMasks |= mask;\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { LineSegment3d } from "../curve/LineSegment3d";
2
2
  import { MultiLineStringDataVariant } from "../geometry3d/IndexedXYZCollection";
3
- import { Range3d } from "../geometry3d/Range";
3
+ import { Range2d, Range3d } from "../geometry3d/Range";
4
4
  import { ClusterableArray } from "../numerics/ClusterableArray";
5
5
  import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "./Graph";
6
6
  export declare class GraphSplitData {
@@ -39,7 +39,10 @@ export declare class HalfEdgeGraphOps {
39
39
  * @param targetB target vertex of second vector
40
40
  */
41
41
  static crossProductToTargets(base: HalfEdge, targetA: HalfEdge, targetB: HalfEdge): number;
42
- static graphRange(graph: HalfEdgeGraph): Range3d;
42
+ /** Compute the range of the graph's vertices. */
43
+ static graphRange(graph: Readonly<HalfEdgeGraph>): Range3d;
44
+ /** Compute the xy-range of the graph's vertices. */
45
+ static graphRangeXY(graph: Readonly<HalfEdgeGraph>): Range2d;
43
46
  /** Returns an array of all nodes (both ends) of edges created from segments. */
44
47
  static segmentArrayToGraphEdges(segments: LineSegment3d[], returnGraph: HalfEdgeGraph, mask: HalfEdgeMask): HalfEdge[];
45
48
  /**
@@ -114,15 +117,23 @@ export declare class HalfEdgeGraphMerge {
114
117
  static curvatureSortKey(node: HalfEdge): number;
115
118
  /** Whether the HalfEdge is part of a null face, as marked by [[clusterAndMergeXYTheta]]. */
116
119
  static isNullFace(node: HalfEdge): boolean;
117
- /** Simplest merge algorithm:
118
- * * collect array of (x,y,theta) at all nodes
119
- * * lexical sort of the array.
120
- * * twist all vertices together.
121
- * * This effectively creates valid face loops for a planar subdivision if there are no edge crossings.
122
- * * If there are edge crossings, the graph can be a (highly complicated) Klein bottle topology.
123
- * * Mask.NULL_FACE is cleared throughout and applied within null faces.
120
+ /**
121
+ * Cluster the HalfEdges so that xy-coordinates within `mergeTolerance` are equated.
122
+ * * Note that any additional data (e.g., edgeTag, faceTag) on the HalfEdges are ignored. In particular,
123
+ * [[CurveLocationDetail]]s attached to clustered HalfEdges do *not* get their points adjusted.
124
+ * * This is a simple merge algorithm:
125
+ * * untwist all edges from the vertex loops
126
+ * * collect array of (x,y,theta) at all nodes
127
+ * * lexical sort of the array
128
+ * * twist all edges together in sort order around each vertex
129
+ * * This effectively creates valid face loops for a planar subdivision if there are no edge crossings.
130
+ * * If there are edge crossings, the graph can be a (highly complicated) Klein bottle topology.
131
+ * * [[HalfEdgeMask.NULL_FACE]] is cleared throughout and applied within null faces.
132
+ * @param graph input graph
133
+ * @param outboundRadiansFunction optional function to compute the sort angle of an edge at its start vertex
134
+ * @param clusterTol optional distance tolerance for clustering vertices. Default value is [[Geometry.smallMetricDistance]].
124
135
  */
125
- static clusterAndMergeXYTheta(graph: HalfEdgeGraph, outboundRadiansFunction?: (he: HalfEdge) => number): void;
136
+ static clusterAndMergeXYTheta(graph: HalfEdgeGraph, outboundRadiansFunction?: (he: HalfEdge) => number, clusterTol?: number): void;
126
137
  private static buildVerticalSweepPriorityQueue;
127
138
  private static computeIntersectionFractionsOnEdges;
128
139
  /**
@@ -130,7 +141,7 @@ export declare class HalfEdgeGraphMerge {
130
141
  * * This is a large operation.
131
142
  * @param graph
132
143
  */
133
- static splitIntersectingEdges(graph: HalfEdgeGraph): GraphSplitData;
144
+ static splitIntersectingEdges(graph: HalfEdgeGraph, distanceTol?: number, fractionTol?: number): GraphSplitData;
134
145
  /**
135
146
  * Returns a graph structure formed from the given LineSegment array
136
147
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Merging.d.ts","sourceRoot":"","sources":["../../../src/topology/Merging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Merging.d.ts","sourceRoot":"","sources":["../../../src/topology/Merging.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { assert } from "@itwin/core-bentley";
9
9
  import { LineSegment3d } from "../curve/LineSegment3d";
10
10
  import { Geometry } from "../Geometry";
11
11
  import { Angle } from "../geometry3d/Angle";
12
- import { Range3d } from "../geometry3d/Range";
12
+ import { Range2d, Range3d } from "../geometry3d/Range";
13
13
  import { ClusterableArray } from "../numerics/ClusterableArray";
14
14
  import { SmallSystem } from "../numerics/SmallSystem";
15
15
  import { HalfEdge, HalfEdgeGraph, HalfEdgeMask } from "./Graph";
@@ -79,8 +79,7 @@ export class HalfEdgeGraphOps {
79
79
  static crossProductToTargets(base, targetA, targetB) {
80
80
  return Geometry.crossProductXYXY(targetA.x - base.x, targetA.y - base.y, targetB.x - base.x, targetB.y - base.y);
81
81
  }
82
- // ---------------------------------------------------------------------------------------------------------------------
83
- // ----------------------------------------------------------------------------------------------------------------------
82
+ /** Compute the range of the graph's vertices. */
84
83
  static graphRange(graph) {
85
84
  const range = Range3d.create();
86
85
  for (const node of graph.allHalfEdges) {
@@ -88,6 +87,14 @@ export class HalfEdgeGraphOps {
88
87
  }
89
88
  return range;
90
89
  }
90
+ /** Compute the xy-range of the graph's vertices. */
91
+ static graphRangeXY(graph) {
92
+ const range = Range2d.createNull();
93
+ for (const node of graph.allHalfEdges) {
94
+ range.extendXY(node.x, node.y);
95
+ }
96
+ return range;
97
+ }
91
98
  /** Returns an array of all nodes (both ends) of edges created from segments. */
92
99
  static segmentArrayToGraphEdges(segments, returnGraph, mask) {
93
100
  const result = [];
@@ -318,15 +325,23 @@ export class HalfEdgeGraphMerge {
318
325
  static isNullFace(node) {
319
326
  return node.isMaskSet(HalfEdgeMask.NULL_FACE) && node.faceSuccessor.isMaskSet(HalfEdgeMask.NULL_FACE) && node === node.faceSuccessor.faceSuccessor;
320
327
  }
321
- /** Simplest merge algorithm:
322
- * * collect array of (x,y,theta) at all nodes
323
- * * lexical sort of the array.
324
- * * twist all vertices together.
325
- * * This effectively creates valid face loops for a planar subdivision if there are no edge crossings.
326
- * * If there are edge crossings, the graph can be a (highly complicated) Klein bottle topology.
327
- * * Mask.NULL_FACE is cleared throughout and applied within null faces.
328
+ /**
329
+ * Cluster the HalfEdges so that xy-coordinates within `mergeTolerance` are equated.
330
+ * * Note that any additional data (e.g., edgeTag, faceTag) on the HalfEdges are ignored. In particular,
331
+ * [[CurveLocationDetail]]s attached to clustered HalfEdges do *not* get their points adjusted.
332
+ * * This is a simple merge algorithm:
333
+ * * untwist all edges from the vertex loops
334
+ * * collect array of (x,y,theta) at all nodes
335
+ * * lexical sort of the array
336
+ * * twist all edges together in sort order around each vertex
337
+ * * This effectively creates valid face loops for a planar subdivision if there are no edge crossings.
338
+ * * If there are edge crossings, the graph can be a (highly complicated) Klein bottle topology.
339
+ * * [[HalfEdgeMask.NULL_FACE]] is cleared throughout and applied within null faces.
340
+ * @param graph input graph
341
+ * @param outboundRadiansFunction optional function to compute the sort angle of an edge at its start vertex
342
+ * @param clusterTol optional distance tolerance for clustering vertices. Default value is [[Geometry.smallMetricDistance]].
328
343
  */
329
- static clusterAndMergeXYTheta(graph, outboundRadiansFunction) {
344
+ static clusterAndMergeXYTheta(graph, outboundRadiansFunction, clusterTol = Geometry.smallMetricDistance) {
330
345
  const allNodes = graph.allHalfEdges;
331
346
  const numNodes = allNodes.length;
332
347
  graph.clearMask(HalfEdgeMask.NULL_FACE);
@@ -338,7 +353,6 @@ export class HalfEdgeGraphMerge {
338
353
  HalfEdge.pinch(nodeA, nodeA.vertexSuccessor); // pull it out of its current vertex loop.
339
354
  clusters.addDirect(xA, yA, 0.0, i);
340
355
  }
341
- const clusterTol = Geometry.smallMetricDistance;
342
356
  const order = clusters.clusterIndicesLexical(clusterTol);
343
357
  let k0 = 0;
344
358
  const numK = order.length;
@@ -383,14 +397,11 @@ export class HalfEdgeGraphMerge {
383
397
  const unmatchedNullFaceNodes = [];
384
398
  k0 = 0;
385
399
  let thetaA, thetaB;
386
- // GeometryCoreTestIO.consoleLog("START VERTEX LINKS");
387
400
  // now pinch each neighboring pair together
388
401
  for (let k1 = 0; k1 < numK; k1++) {
389
402
  if (order[k1] === ClusterableArray.clusterTerminator) {
390
403
  // nodes identified in order[k0]..order[k1-1] are properly sorted around a vertex.
391
404
  if (k1 > k0) {
392
- // const xy = clusters.getPoint2d(order[k0]);
393
- // GeometryCoreTestIO.consoleLog({ k0, k1, x: xy.x, y: xy.y });
394
405
  if (k1 > k0 + 1)
395
406
  this.secondarySortAroundVertex(clusters, order, allNodes, k0, k1);
396
407
  this.doAnnounceVertexNeighborhood(clusters, order, allNodes, k0, k1);
@@ -499,32 +510,31 @@ export class HalfEdgeGraphMerge {
499
510
  * * This is a large operation.
500
511
  * @param graph
501
512
  */
502
- static splitIntersectingEdges(graph) {
513
+ static splitIntersectingEdges(graph, distanceTol = Geometry.smallMetricDistance, fractionTol = 1.0e-8) {
503
514
  const data = new GraphSplitData();
504
515
  const sweepHeap = this.buildVerticalSweepPriorityQueue(graph);
505
516
  let nodeA0, nodeB1;
506
- const smallFraction = 1.0e-8;
517
+ const smallFraction = fractionTol;
507
518
  const largeFraction = 1.0 - smallFraction;
508
519
  let i;
509
520
  let nodeB0;
510
- const distTol = Geometry.smallMetricDistance;
511
521
  while (undefined !== (nodeA0 = sweepHeap.priorityQueue.pop())) {
512
522
  data.numUpEdge++;
513
523
  const n0 = sweepHeap.activeEdges.length;
514
- sweepHeap.removeArrayMembersWithY1Below(nodeA0.y - distTol);
524
+ sweepHeap.removeArrayMembersWithY1Below(nodeA0.y - distanceTol);
515
525
  data.numPopOut += n0 - sweepHeap.activeEdges.length;
516
526
  for (i = 0; i < sweepHeap.activeEdges.length; i++) {
517
527
  nodeB0 = sweepHeap.activeEdges[i];
518
528
  nodeB1 = nodeB0.faceSuccessor;
519
- if (Geometry.isSameCoordinateXY(nodeA0.x, nodeA0.y, nodeB0.x, nodeB0.y, distTol)) {
529
+ if (Geometry.isSameCoordinateXY(nodeA0.x, nodeA0.y, nodeB0.x, nodeB0.y, distanceTol)) {
520
530
  data.numA0B0++;
521
531
  }
522
- else if (Geometry.isSameCoordinateXY(nodeB1.x, nodeB1.y, nodeA0.x, nodeA0.y, distTol)) {
532
+ else if (Geometry.isSameCoordinateXY(nodeB1.x, nodeB1.y, nodeA0.x, nodeA0.y, distanceTol)) {
523
533
  data.numA0B1++;
524
534
  }
525
535
  else {
526
536
  data.numIntersectionTest++;
527
- const fractions = this.computeIntersectionFractionsOnEdges(nodeA0, nodeB0, distTol);
537
+ const fractions = this.computeIntersectionFractionsOnEdges(nodeA0, nodeB0, distanceTol);
528
538
  if (fractions) {
529
539
  const splitAndPush = (node, fraction) => {
530
540
  if (fraction !== undefined && fraction > smallFraction && fraction < largeFraction) {