@itwin/core-geometry 5.2.0-dev.29 → 5.2.0-dev.30

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 (737) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.d.ts +30 -10
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +74 -10
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.d.ts +19 -6
  7. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +21 -5
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurve.d.ts +3 -3
  12. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  13. package/lib/cjs/bspline/BSplineCurve.js +6 -6
  14. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  15. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  17. package/lib/cjs/bspline/BSplineCurveOps.js +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  19. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  20. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  21. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  22. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  23. package/lib/cjs/bspline/BezierCurveBase.d.ts +2 -2
  24. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  25. package/lib/cjs/bspline/BezierCurveBase.js +4 -6
  26. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  27. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +27 -17
  28. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/InterpolationCurve3d.js +17 -7
  30. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  32. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  33. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  34. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  35. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  36. package/lib/cjs/clipping/ClipPlane.d.ts +9 -3
  37. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  38. package/lib/cjs/clipping/ClipPlane.js +8 -0
  39. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  40. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  41. package/lib/cjs/clipping/ClipUtils.d.ts +14 -1
  42. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  43. package/lib/cjs/clipping/ClipUtils.js +21 -3
  44. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  45. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  46. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +2 -2
  47. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  48. package/lib/cjs/clipping/ConvexClipPlaneSet.js +6 -4
  49. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  50. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  51. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  52. package/lib/cjs/core-geometry.js.map +1 -1
  53. package/lib/cjs/curve/Arc3d.d.ts +27 -17
  54. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  55. package/lib/cjs/curve/Arc3d.js +61 -35
  56. package/lib/cjs/curve/Arc3d.js.map +1 -1
  57. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  58. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  59. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  60. package/lib/cjs/curve/CurveCollection.d.ts +1 -0
  61. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  62. package/lib/cjs/curve/CurveCollection.js +1 -0
  63. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  64. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  65. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  66. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  67. package/lib/cjs/curve/CurveLocationDetail.d.ts +8 -7
  68. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  69. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  70. package/lib/cjs/curve/CurveOps.d.ts +51 -1
  71. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  72. package/lib/cjs/curve/CurveOps.js +97 -3
  73. package/lib/cjs/curve/CurveOps.js.map +1 -1
  74. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  75. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  76. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  77. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  78. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  79. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  80. package/lib/cjs/curve/LineString3d.d.ts +4 -4
  81. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  82. package/lib/cjs/curve/LineString3d.js +8 -8
  83. package/lib/cjs/curve/LineString3d.js.map +1 -1
  84. package/lib/cjs/curve/Loop.js.map +1 -1
  85. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  86. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  87. package/lib/cjs/curve/Path.js.map +1 -1
  88. package/lib/cjs/curve/PointString3d.js.map +1 -1
  89. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  90. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  91. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  92. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  93. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  94. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  95. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +6 -2
  96. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  97. package/lib/cjs/curve/Query/PlanarSubdivision.js +12 -7
  98. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  99. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  100. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  101. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  102. package/lib/cjs/curve/RegionOps.d.ts +9 -4
  103. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  104. package/lib/cjs/curve/RegionOps.js +10 -5
  105. package/lib/cjs/curve/RegionOps.js.map +1 -1
  106. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  107. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  108. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  109. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +2 -1
  119. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  121. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  125. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  126. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  127. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +21 -18
  128. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  131. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  132. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  133. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  135. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  136. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  137. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  138. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  139. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  140. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +2 -2
  141. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  142. package/lib/cjs/curve/spiral/DirectSpiral3d.js +6 -2
  143. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  144. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  145. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  146. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +6 -2
  147. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  148. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  149. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  150. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  151. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  152. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  153. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  154. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +0 -3
  155. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  156. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  157. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  158. package/lib/cjs/geometry3d/AngleSweep.d.ts +6 -2
  159. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/AngleSweep.js +12 -3
  161. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  162. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  163. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  164. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  165. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  166. package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
  167. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  168. package/lib/cjs/geometry3d/FrameBuilder.js +14 -18
  169. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  170. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  171. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  172. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  173. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  174. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  175. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  176. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  177. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  178. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  179. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  180. package/lib/cjs/geometry3d/Matrix3d.d.ts +1 -1
  181. package/lib/cjs/geometry3d/Matrix3d.js +1 -1
  182. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  183. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  184. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  185. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  186. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  187. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  188. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +18 -2
  189. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  190. package/lib/cjs/geometry3d/Point2dVector2d.js +37 -4
  191. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  192. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  193. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
  194. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  195. package/lib/cjs/geometry3d/Point3dVector3d.js +1 -0
  196. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  197. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  198. package/lib/cjs/geometry3d/PointStreaming.d.ts +8 -0
  199. package/lib/cjs/geometry3d/PointStreaming.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/PointStreaming.js +18 -2
  201. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  202. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  203. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  204. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  205. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  206. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  207. package/lib/cjs/geometry3d/PolylineOps.d.ts +14 -3
  208. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  209. package/lib/cjs/geometry3d/PolylineOps.js +20 -4
  210. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  211. package/lib/cjs/geometry3d/Range.d.ts +34 -32
  212. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  213. package/lib/cjs/geometry3d/Range.js +28 -21
  214. package/lib/cjs/geometry3d/Range.js.map +1 -1
  215. package/lib/cjs/geometry3d/Ray2d.d.ts +16 -6
  216. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  217. package/lib/cjs/geometry3d/Ray2d.js +28 -4
  218. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  219. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  220. package/lib/cjs/geometry3d/Ray3d.js +3 -4
  221. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  222. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  223. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  224. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  225. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  226. package/lib/cjs/geometry3d/Transform.js +1 -1
  227. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  228. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  229. package/lib/cjs/geometry3d/XYZProps.d.ts +12 -1
  230. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/XYZProps.js +17 -2
  232. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  233. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  234. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  235. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  236. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  237. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  238. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  239. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  240. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  241. package/lib/cjs/numerics/BezierPolynomials.js +5 -9
  242. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  243. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  244. package/lib/cjs/numerics/Complex.js.map +1 -1
  245. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  246. package/lib/cjs/numerics/Newton.js.map +1 -1
  247. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  248. package/lib/cjs/numerics/PolarData.js.map +1 -1
  249. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  250. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  251. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  252. package/lib/cjs/numerics/SmallSystem.d.ts +13 -7
  253. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  254. package/lib/cjs/numerics/SmallSystem.js +13 -7
  255. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  256. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  257. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  258. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  259. package/lib/cjs/polyface/AuxData.js.map +1 -1
  260. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  261. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  262. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  263. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  264. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  265. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  266. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  267. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  268. package/lib/cjs/polyface/Polyface.js.map +1 -1
  269. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +25 -6
  270. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  271. package/lib/cjs/polyface/PolyfaceBuilder.js +59 -8
  272. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  273. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  274. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  275. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  276. package/lib/cjs/polyface/PolyfaceQuery.js +8 -10
  277. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  278. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  279. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  280. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  281. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  282. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  283. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  284. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  285. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  286. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  287. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  288. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  289. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  290. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  291. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +9 -12
  292. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  293. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  294. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  295. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  296. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  297. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  298. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  299. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  300. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  301. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  302. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  303. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  304. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  305. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  306. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  307. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  308. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  309. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  310. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  311. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  312. package/lib/cjs/serialization/DeepCompare.js +1 -1
  313. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  314. package/lib/cjs/serialization/GeometrySamples.d.ts +2 -1
  315. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  316. package/lib/cjs/serialization/GeometrySamples.js +2 -1
  317. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  318. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  319. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  320. package/lib/cjs/solid/Box.js.map +1 -1
  321. package/lib/cjs/solid/Cone.js.map +1 -1
  322. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  323. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  324. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  325. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  326. package/lib/cjs/solid/Sphere.js.map +1 -1
  327. package/lib/cjs/solid/SweepContour.js.map +1 -1
  328. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  329. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  330. package/lib/cjs/topology/Graph.d.ts +38 -12
  331. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  332. package/lib/cjs/topology/Graph.js +91 -23
  333. package/lib/cjs/topology/Graph.js.map +1 -1
  334. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  335. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  336. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  337. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  338. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +20 -11
  339. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  340. package/lib/cjs/topology/HalfEdgeGraphSearch.js +43 -39
  341. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  342. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  343. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  344. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  345. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  346. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  347. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  348. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  349. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  350. package/lib/cjs/topology/MaskManager.js.map +1 -1
  351. package/lib/cjs/topology/Merging.d.ts +7 -4
  352. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  353. package/lib/cjs/topology/Merging.js +16 -11
  354. package/lib/cjs/topology/Merging.js.map +1 -1
  355. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  356. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  357. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  358. package/lib/cjs/topology/Triangulation.d.ts +13 -11
  359. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  360. package/lib/cjs/topology/Triangulation.js +40 -36
  361. package/lib/cjs/topology/Triangulation.js.map +1 -1
  362. package/lib/cjs/topology/Voronoi.d.ts +195 -0
  363. package/lib/cjs/topology/Voronoi.d.ts.map +1 -0
  364. package/lib/cjs/topology/Voronoi.js +700 -0
  365. package/lib/cjs/topology/Voronoi.js.map +1 -0
  366. package/lib/cjs/topology/XYParitySearchContext.d.ts +1 -1
  367. package/lib/cjs/topology/XYParitySearchContext.d.ts.map +1 -1
  368. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  369. package/lib/esm/Constant.js.map +1 -1
  370. package/lib/esm/Geometry.d.ts +30 -10
  371. package/lib/esm/Geometry.d.ts.map +1 -1
  372. package/lib/esm/Geometry.js +74 -10
  373. package/lib/esm/Geometry.js.map +1 -1
  374. package/lib/esm/bspline/AkimaCurve3d.d.ts +19 -6
  375. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  376. package/lib/esm/bspline/AkimaCurve3d.js +21 -5
  377. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  378. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  379. package/lib/esm/bspline/BSplineCurve.d.ts +3 -3
  380. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  381. package/lib/esm/bspline/BSplineCurve.js +6 -6
  382. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  383. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  384. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  385. package/lib/esm/bspline/BSplineCurveOps.js +1 -1
  386. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  387. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  388. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  389. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  390. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  391. package/lib/esm/bspline/BezierCurveBase.d.ts +2 -2
  392. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  393. package/lib/esm/bspline/BezierCurveBase.js +4 -6
  394. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  395. package/lib/esm/bspline/InterpolationCurve3d.d.ts +27 -17
  396. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  397. package/lib/esm/bspline/InterpolationCurve3d.js +17 -7
  398. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  399. package/lib/esm/bspline/KnotVector.js.map +1 -1
  400. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  401. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  402. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  403. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  404. package/lib/esm/clipping/ClipPlane.d.ts +9 -3
  405. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  406. package/lib/esm/clipping/ClipPlane.js +8 -0
  407. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  408. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  409. package/lib/esm/clipping/ClipUtils.d.ts +14 -1
  410. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  411. package/lib/esm/clipping/ClipUtils.js +21 -3
  412. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  413. package/lib/esm/clipping/ClipVector.js.map +1 -1
  414. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +2 -2
  415. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  416. package/lib/esm/clipping/ConvexClipPlaneSet.js +6 -4
  417. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  418. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  419. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  420. package/lib/esm/core-geometry.js.map +1 -1
  421. package/lib/esm/curve/Arc3d.d.ts +27 -17
  422. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  423. package/lib/esm/curve/Arc3d.js +61 -35
  424. package/lib/esm/curve/Arc3d.js.map +1 -1
  425. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  426. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  427. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  428. package/lib/esm/curve/CurveCollection.d.ts +1 -0
  429. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  430. package/lib/esm/curve/CurveCollection.js +1 -0
  431. package/lib/esm/curve/CurveCollection.js.map +1 -1
  432. package/lib/esm/curve/CurveCurve.js.map +1 -1
  433. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  434. package/lib/esm/curve/CurveFactory.js.map +1 -1
  435. package/lib/esm/curve/CurveLocationDetail.d.ts +8 -7
  436. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  437. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  438. package/lib/esm/curve/CurveOps.d.ts +51 -1
  439. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  440. package/lib/esm/curve/CurveOps.js +98 -4
  441. package/lib/esm/curve/CurveOps.js.map +1 -1
  442. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  443. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  444. package/lib/esm/curve/CurveTypes.js.map +1 -1
  445. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  446. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  447. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  448. package/lib/esm/curve/LineString3d.d.ts +4 -4
  449. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  450. package/lib/esm/curve/LineString3d.js +8 -8
  451. package/lib/esm/curve/LineString3d.js.map +1 -1
  452. package/lib/esm/curve/Loop.js.map +1 -1
  453. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  454. package/lib/esm/curve/ParityRegion.js.map +1 -1
  455. package/lib/esm/curve/Path.js.map +1 -1
  456. package/lib/esm/curve/PointString3d.js.map +1 -1
  457. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  458. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  459. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  460. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  461. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  462. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  463. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +6 -2
  464. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  465. package/lib/esm/curve/Query/PlanarSubdivision.js +12 -7
  466. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  467. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  468. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  469. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  470. package/lib/esm/curve/RegionOps.d.ts +9 -4
  471. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  472. package/lib/esm/curve/RegionOps.js +10 -5
  473. package/lib/esm/curve/RegionOps.js.map +1 -1
  474. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  475. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  476. package/lib/esm/curve/UnionRegion.js.map +1 -1
  477. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  478. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  479. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  480. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  481. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  482. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  483. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  484. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  485. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  486. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +2 -1
  487. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  488. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  489. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  490. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  491. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  492. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  493. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  494. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  495. package/lib/esm/curve/internalContexts/MultiChainCollector.js +21 -18
  496. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  497. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  498. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  499. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  500. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  501. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  502. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  503. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  504. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  505. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  506. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  507. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  508. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +2 -2
  509. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  510. package/lib/esm/curve/spiral/DirectSpiral3d.js +6 -2
  511. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  512. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  513. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  514. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +6 -2
  515. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  516. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  517. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  518. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  519. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  520. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  521. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  522. package/lib/esm/curve/spiral/TransitionSpiral3d.js +0 -3
  523. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  524. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  525. package/lib/esm/geometry3d/Angle.js.map +1 -1
  526. package/lib/esm/geometry3d/AngleSweep.d.ts +6 -2
  527. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  528. package/lib/esm/geometry3d/AngleSweep.js +12 -3
  529. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  530. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  531. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  532. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  533. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  534. package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
  535. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  536. package/lib/esm/geometry3d/FrameBuilder.js +14 -18
  537. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  538. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  539. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  540. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  541. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  542. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  543. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  544. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  545. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  546. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  547. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  548. package/lib/esm/geometry3d/Matrix3d.d.ts +1 -1
  549. package/lib/esm/geometry3d/Matrix3d.js +1 -1
  550. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  551. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  552. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  553. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  554. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  555. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  556. package/lib/esm/geometry3d/Point2dVector2d.d.ts +18 -2
  557. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  558. package/lib/esm/geometry3d/Point2dVector2d.js +37 -4
  559. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  560. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  561. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
  562. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  563. package/lib/esm/geometry3d/Point3dVector3d.js +1 -0
  564. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  565. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  566. package/lib/esm/geometry3d/PointStreaming.d.ts +8 -0
  567. package/lib/esm/geometry3d/PointStreaming.d.ts.map +1 -1
  568. package/lib/esm/geometry3d/PointStreaming.js +18 -2
  569. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  570. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  571. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  572. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  573. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  574. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  575. package/lib/esm/geometry3d/PolylineOps.d.ts +14 -3
  576. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  577. package/lib/esm/geometry3d/PolylineOps.js +20 -4
  578. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  579. package/lib/esm/geometry3d/Range.d.ts +34 -32
  580. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  581. package/lib/esm/geometry3d/Range.js +28 -21
  582. package/lib/esm/geometry3d/Range.js.map +1 -1
  583. package/lib/esm/geometry3d/Ray2d.d.ts +16 -6
  584. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  585. package/lib/esm/geometry3d/Ray2d.js +28 -4
  586. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  587. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  588. package/lib/esm/geometry3d/Ray3d.js +3 -4
  589. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  590. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  591. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  592. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  593. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  594. package/lib/esm/geometry3d/Transform.js +1 -1
  595. package/lib/esm/geometry3d/Transform.js.map +1 -1
  596. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  597. package/lib/esm/geometry3d/XYZProps.d.ts +12 -1
  598. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  599. package/lib/esm/geometry3d/XYZProps.js +16 -1
  600. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  601. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  602. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  603. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  604. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  605. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  606. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  607. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  608. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  609. package/lib/esm/numerics/BezierPolynomials.js +5 -9
  610. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  611. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  612. package/lib/esm/numerics/Complex.js.map +1 -1
  613. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  614. package/lib/esm/numerics/Newton.js.map +1 -1
  615. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  616. package/lib/esm/numerics/PolarData.js.map +1 -1
  617. package/lib/esm/numerics/Polynomials.js.map +1 -1
  618. package/lib/esm/numerics/Quadrature.js.map +1 -1
  619. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  620. package/lib/esm/numerics/SmallSystem.d.ts +13 -7
  621. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  622. package/lib/esm/numerics/SmallSystem.js +13 -7
  623. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  624. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  625. package/lib/esm/numerics/UnionFind.js.map +1 -1
  626. package/lib/esm/numerics/UsageSums.js.map +1 -1
  627. package/lib/esm/polyface/AuxData.js.map +1 -1
  628. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  629. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  630. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  631. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  632. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  633. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  634. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  635. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  636. package/lib/esm/polyface/Polyface.js.map +1 -1
  637. package/lib/esm/polyface/PolyfaceBuilder.d.ts +25 -6
  638. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  639. package/lib/esm/polyface/PolyfaceBuilder.js +59 -8
  640. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  641. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  642. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  643. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  644. package/lib/esm/polyface/PolyfaceQuery.js +8 -10
  645. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  646. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  647. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  648. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  649. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  650. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  651. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  652. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  653. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  654. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  655. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  656. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  657. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  658. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  659. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +9 -12
  660. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  661. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  662. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  663. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  664. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  665. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  666. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  667. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  668. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  669. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  670. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  671. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  672. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  673. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  674. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  675. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  676. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  677. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  678. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  679. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  680. package/lib/esm/serialization/DeepCompare.js +1 -1
  681. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  682. package/lib/esm/serialization/GeometrySamples.d.ts +2 -1
  683. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  684. package/lib/esm/serialization/GeometrySamples.js +2 -1
  685. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  686. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  687. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  688. package/lib/esm/solid/Box.js.map +1 -1
  689. package/lib/esm/solid/Cone.js.map +1 -1
  690. package/lib/esm/solid/LinearSweep.js.map +1 -1
  691. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  692. package/lib/esm/solid/RuledSweep.js.map +1 -1
  693. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  694. package/lib/esm/solid/Sphere.js.map +1 -1
  695. package/lib/esm/solid/SweepContour.js.map +1 -1
  696. package/lib/esm/solid/TorusPipe.js.map +1 -1
  697. package/lib/esm/topology/ChainMerge.js.map +1 -1
  698. package/lib/esm/topology/Graph.d.ts +38 -12
  699. package/lib/esm/topology/Graph.d.ts.map +1 -1
  700. package/lib/esm/topology/Graph.js +92 -24
  701. package/lib/esm/topology/Graph.js.map +1 -1
  702. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  703. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  704. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  705. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  706. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +20 -11
  707. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  708. package/lib/esm/topology/HalfEdgeGraphSearch.js +43 -39
  709. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  710. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  711. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  712. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  713. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  714. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  715. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  716. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  717. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  718. package/lib/esm/topology/MaskManager.js.map +1 -1
  719. package/lib/esm/topology/Merging.d.ts +7 -4
  720. package/lib/esm/topology/Merging.d.ts.map +1 -1
  721. package/lib/esm/topology/Merging.js +17 -12
  722. package/lib/esm/topology/Merging.js.map +1 -1
  723. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  724. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  725. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  726. package/lib/esm/topology/Triangulation.d.ts +13 -11
  727. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  728. package/lib/esm/topology/Triangulation.js +40 -36
  729. package/lib/esm/topology/Triangulation.js.map +1 -1
  730. package/lib/esm/topology/Voronoi.d.ts +195 -0
  731. package/lib/esm/topology/Voronoi.d.ts.map +1 -0
  732. package/lib/esm/topology/Voronoi.js +696 -0
  733. package/lib/esm/topology/Voronoi.js.map +1 -0
  734. package/lib/esm/topology/XYParitySearchContext.d.ts +1 -1
  735. package/lib/esm/topology/XYParitySearchContext.d.ts.map +1 -1
  736. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  737. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TriangleCandidate.js","sourceRoot":"","sources":["../../../src/polyface/TriangleCandidate.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0CAAuC;AACvC,2EAAwE;AAExE,mEAAwD;AAExD;;;;;;GAMG;AACH,MAAa,iBAAkB,SAAQ,yCAAmB;IAChD,QAAQ,CAAS;IACjB,QAAQ,CAAU;IACnB,EAAE,CAAS;IAClB,YAAoB,MAAe,EAAE,MAAe,EAAE,MAAe,EAAE,EAAU,EAAE,OAAe,EAAE,OAAgB;QAClH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IACD;;;OAGG;IACa,OAAO,CAAC,KAAwB;QAC9C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA6B,EAAE,MAAc,EAAE,OAA6B,EAAE,MAAc,EAAE,OAA6B,EAAE,MAAc,EAAE,EAAU,EAAE,MAA0B;QACpN,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,iBAAiB,CAAC,yBAAO,CAAC,MAAM,EAAE,EAAE,yBAAO,CAAC,MAAM,EAAE,EAAE,yBAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACvG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,KAAK,OAAO,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/E,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,KAAK,CAAC;YAChB,MAAM,CAAC,iBAAiB,EAAE,CAAC;;YAE3B,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2CAA2C;IAC3C,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD;;;;;OAKG;IACI,WAAW,CAAC,OAAgB;QACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,OAAO,KAAK,SAAS;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IACD;;;OAGG;IACI,iBAAiB;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;IACtC,CAAC;IACD;;;OAGG;IACa,KAAK,CAAC,MAA0B;QAC9C,IAAI,MAAM;YACR,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9I,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,oBAAoB,CAAC,UAA6B,EAAE,UAA6B,EAAE,MAA0B;QACzH,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,UAAU,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YACvE,MAAM,CAAC,QAAQ,GAAG,mBAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;YACjF,IAAI,GAAG,GAAG,GAAG;gBACX,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,6BAA6B,CAAC,QAA2B,EAAE,KAAwB;QAC/F,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;YACrD,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF;AArGD,8CAqGC","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 Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/**\n * `TriangleCandidate` is a `BarycentricTriangle` with additional application-specific label data:\n * * `quality` = numeric indicator of quality (e.g. aspect ratio of this triangle or a combination with other triangles)\n * * `isValid` = boolean flag.\n * * `id` = application specific identifier\n * @internal\n */\nexport class TriangleCandidate extends BarycentricTriangle {\n private _quality: number;\n private _isValid: boolean;\n public id: number;\n private constructor(point0: Point3d, point1: Point3d, point2: Point3d, id: number, quality: number, isValid: boolean) {\n super(point0, point1, point2);\n this._isValid = isValid;\n this._quality = quality;\n this.id = id;\n }\n /**\n * Copy all coordinate and label data from `other` to this.\n * @param other source triangle\n */\n public override setFrom(other: TriangleCandidate): TriangleCandidate {\n super.setFrom(other);\n this._isValid = other._isValid;\n this._quality = other._quality;\n this.id = other.id;\n return this;\n }\n\n /** Create (always) a TriangleCandidate.\n * * Access points from multiple `IndexedXYZCollection`\n * * mark invalid if any indices are invalid.\n */\n public static createFromIndexedXYZ(source0: IndexedXYZCollection, index0: number, source1: IndexedXYZCollection, index1: number, source2: IndexedXYZCollection, index2: number, id: number, result?: TriangleCandidate): TriangleCandidate {\n if (!result)\n result = new TriangleCandidate(Point3d.create(), Point3d.create(), Point3d.create(), id, 0.0, false);\n result.id = id;\n let numValid = 0;\n if (undefined !== source0.getPoint3dAtCheckedPointIndex(index0, result.points[0]))\n numValid++;\n if (undefined !== source1.getPoint3dAtCheckedPointIndex(index1, result.points[1]))\n numValid++;\n if (undefined !== source2.getPoint3dAtCheckedPointIndex(index2, result.points[2]))\n numValid++;\n if (numValid === 3)\n result.updateAspectRatio();\n else\n result.markInvalid();\n return result;\n }\n /** (property) return the validity flag. */\n public get isValid(): boolean { return this._isValid; }\n /**\n * * Mark this triangle invalid.\n * * optionally set aspect ratio.\n * * points are not changed\n * @param aspectRatio\n */\n public markInvalid(quality?: number) {\n this._isValid = false;\n if (quality !== undefined)\n this._quality = quality;\n }\n /**\n * * Recompute the aspect ratio.\n * * Mark invalid if aspect ratio is 0 or negative.\n */\n public updateAspectRatio() {\n this._quality = super.aspectRatio;\n this._isValid = this._quality > 0.0;\n }\n /**\n * Clone all coordinate and label data.\n * @param result optional preallocated `TriangleCandidate`\n */\n public override clone(result?: TriangleCandidate): TriangleCandidate {\n if (result)\n return result.setFrom(this);\n return new TriangleCandidate(this.points[0].clone(), this.points[1].clone(), this.points[2].clone(), this.id, this._quality, this._isValid);\n }\n /**\n * Return a `TriangleCandidate` with\n * * coordinate data and labels from `candidateA`\n * * LOWER quality of the two candidates.\n * * quality reduced by 1 if triangles have opposing normals (negative dot product of the two normals)\n * @param candidateA candidate known to be valid\n * @param candidateB candidate that may by valid\n * @param result copy of candidate A, but if candidateB is valid the result aspect ratio is reduced (a) to the minimum of the two ratios and then (b) reduced by 1 if orientations clash.\n */\n public static copyWithLowerQuality(candidateA: TriangleCandidate, candidateB: TriangleCandidate, result?: TriangleCandidate): TriangleCandidate {\n result = candidateA.clone(result);\n if (candidateB.isValid) {\n const dot = candidateA.dotProductOfCrossProductsFromOrigin(candidateB);\n result._quality = Geometry.minXY(candidateA.aspectRatio, candidateB.aspectRatio);\n if (dot < 0.0)\n result._quality -= 1.0;\n }\n return result;\n }\n /**\n * choose better aspect ratio of triangle, other.\n * @param triangle known valid triangle, to be updated\n * @param other candidate replacement\n */\n public static updateIfOtherHasHigherQuality(triangle: TriangleCandidate, other: TriangleCandidate) {\n if (other.isValid && other._quality > triangle._quality)\n triangle.setFrom(other);\n }\n}\n"]}
1
+ {"version":3,"file":"TriangleCandidate.js","sourceRoot":"","sources":["../../../src/polyface/TriangleCandidate.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 Polyface\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\r\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n/**\r\n * `TriangleCandidate` is a `BarycentricTriangle` with additional application-specific label data:\r\n * * `quality` = numeric indicator of quality (e.g. aspect ratio of this triangle or a combination with other triangles)\r\n * * `isValid` = boolean flag.\r\n * * `id` = application specific identifier\r\n * @internal\r\n */\r\nexport class TriangleCandidate extends BarycentricTriangle {\r\n private _quality: number;\r\n private _isValid: boolean;\r\n public id: number;\r\n private constructor(point0: Point3d, point1: Point3d, point2: Point3d, id: number, quality: number, isValid: boolean) {\r\n super(point0, point1, point2);\r\n this._isValid = isValid;\r\n this._quality = quality;\r\n this.id = id;\r\n }\r\n /**\r\n * Copy all coordinate and label data from `other` to this.\r\n * @param other source triangle\r\n */\r\n public override setFrom(other: TriangleCandidate): TriangleCandidate {\r\n super.setFrom(other);\r\n this._isValid = other._isValid;\r\n this._quality = other._quality;\r\n this.id = other.id;\r\n return this;\r\n }\r\n\r\n /** Create (always) a TriangleCandidate.\r\n * * Access points from multiple `IndexedXYZCollection`\r\n * * mark invalid if any indices are invalid.\r\n */\r\n public static createFromIndexedXYZ(source0: IndexedXYZCollection, index0: number, source1: IndexedXYZCollection, index1: number, source2: IndexedXYZCollection, index2: number, id: number, result?: TriangleCandidate): TriangleCandidate {\r\n if (!result)\r\n result = new TriangleCandidate(Point3d.create(), Point3d.create(), Point3d.create(), id, 0.0, false);\r\n result.id = id;\r\n let numValid = 0;\r\n if (undefined !== source0.getPoint3dAtCheckedPointIndex(index0, result.points[0]))\r\n numValid++;\r\n if (undefined !== source1.getPoint3dAtCheckedPointIndex(index1, result.points[1]))\r\n numValid++;\r\n if (undefined !== source2.getPoint3dAtCheckedPointIndex(index2, result.points[2]))\r\n numValid++;\r\n if (numValid === 3)\r\n result.updateAspectRatio();\r\n else\r\n result.markInvalid();\r\n return result;\r\n }\r\n /** (property) return the validity flag. */\r\n public get isValid(): boolean { return this._isValid; }\r\n /**\r\n * * Mark this triangle invalid.\r\n * * optionally set aspect ratio.\r\n * * points are not changed\r\n * @param aspectRatio\r\n */\r\n public markInvalid(quality?: number) {\r\n this._isValid = false;\r\n if (quality !== undefined)\r\n this._quality = quality;\r\n }\r\n /**\r\n * * Recompute the aspect ratio.\r\n * * Mark invalid if aspect ratio is 0 or negative.\r\n */\r\n public updateAspectRatio() {\r\n this._quality = super.aspectRatio;\r\n this._isValid = this._quality > 0.0;\r\n }\r\n /**\r\n * Clone all coordinate and label data.\r\n * @param result optional preallocated `TriangleCandidate`\r\n */\r\n public override clone(result?: TriangleCandidate): TriangleCandidate {\r\n if (result)\r\n return result.setFrom(this);\r\n return new TriangleCandidate(this.points[0].clone(), this.points[1].clone(), this.points[2].clone(), this.id, this._quality, this._isValid);\r\n }\r\n /**\r\n * Return a `TriangleCandidate` with\r\n * * coordinate data and labels from `candidateA`\r\n * * LOWER quality of the two candidates.\r\n * * quality reduced by 1 if triangles have opposing normals (negative dot product of the two normals)\r\n * @param candidateA candidate known to be valid\r\n * @param candidateB candidate that may by valid\r\n * @param result copy of candidate A, but if candidateB is valid the result aspect ratio is reduced (a) to the minimum of the two ratios and then (b) reduced by 1 if orientations clash.\r\n */\r\n public static copyWithLowerQuality(candidateA: TriangleCandidate, candidateB: TriangleCandidate, result?: TriangleCandidate): TriangleCandidate {\r\n result = candidateA.clone(result);\r\n if (candidateB.isValid) {\r\n const dot = candidateA.dotProductOfCrossProductsFromOrigin(candidateB);\r\n result._quality = Geometry.minXY(candidateA.aspectRatio, candidateB.aspectRatio);\r\n if (dot < 0.0)\r\n result._quality -= 1.0;\r\n }\r\n return result;\r\n }\r\n /**\r\n * choose better aspect ratio of triangle, other.\r\n * @param triangle known valid triangle, to be updated\r\n * @param other candidate replacement\r\n */\r\n public static updateIfOtherHasHigherQuality(triangle: TriangleCandidate, other: TriangleCandidate) {\r\n if (other.isValid && other._quality > triangle._quality)\r\n triangle.setFrom(other);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sEAA4D;AAC5D,4DAAyD;AAEzD,6CAA0C;AAC1C,wEAAqE;AAGrE;;;GAGG;AACH,MAAM,oBAAoB;IACxB,YAAmB,KAAa,EAAE,IAAY,EAAE,MAAgB;QAC9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IACM,KAAK,CAAS;IACd,IAAI,CAAS;IACb,MAAM,CAAW;IAEjB,iBAAiB,CAAC,MAAc,EAAE,MAAgB;QACvD,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IACM,kBAAkB;QACvB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU;IACd,YAAoB,SAA+B,EAAE,WAAmB,EAAE,WAAmB;QAC3F,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IACM,SAAS,CAAuB;IAChC,WAAW,CAAS;IACpB,WAAW,CAAS;IACpB,iBAAiB,CAAmC;IACpD,MAAM,CAAC,YAAY,CAAC,IAAgB,EAAE,KAAiB,IAAY,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,YAAY,CAAC,IAAgB,EAAE,KAAiB,IAAY,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,WAAW,CAAC,IAAkB,EAAE,SAA+B,EAAE,WAAmB,EAAE,WAAmB;QACrH,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;CACF;AACD;;;;GAIG;AAEH,MAAa,0BAA0B;IACrC;;;;;;;;;OASG;IACI,MAAM,CAAC,uBAAuB,CAAC,QAAyB,EAAE,cAAqB;QACpF,8EAA8E;QAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,0BAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,mBAAQ,CAAC,0BAA0B,CAAC,CAAI,+BAA+B;QACzF,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,yDAAyD;QACzD,qHAAqH;QACrH,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,IAAI,WAAW,GAAG,uBAAU,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,IAAI,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,GAAG,GAAG,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;oBACrB,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;oBAC3C,IAAI,GAAG,GAAG,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QACD,mFAAmF;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAEpE,4CAA4C;QAC5C,6BAA6B;QAC7B,0GAA0G;QAC1G,4EAA4E;QAC5E,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,IAAI,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;QAC9C,IAAI,gBAAgB,GAAG,MAAM;YAC3B,gBAAgB,GAAG,MAAM,CAAC;QAE5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC;YAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACzC,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;YACzC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,0BAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3F,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,sCAAsC;gBACtC,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAChE,KAAK,IAAI,oBAAoB,GAAG,eAAe,EAC7C,oBAAoB,GAAG,OAAO,CAAC,MAAM,EACrC,oBAAoB,EAAE,EAAE,CAAC;oBACzB,MAAM,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;oBACtD,IAAI,eAAe,CAAC,WAAW,KAAK,WAAW;wBAC7C,MAAM;oBACR,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,gBAAgB;wBAC3F,SAAS;oBACX,IAAI,eAAe,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBACpD,aAAa,CAAC,iBAAiB,CAAC,GAAG,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBACvE,eAAe,CAAC,iBAAiB,GAAG,aAAa,CAAC;oBACpD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,sDAAsD;QACtD,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,mCAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,sBAAsB;QACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAkB,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,QAAyB;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,0BAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,0BAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,gCAAgC;QAChC,MAAM,UAAU,GAAG,IAAI,mCAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;YAC1C,IAAI,uBAAU,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;gBAE7B,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE;gBACzC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IACpC,CAAC;CACF;AApHD,gEAoHC","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 Polyface\n */\n\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\nimport { IndexedPolyface } from \"../Polyface\";\nimport { Geometry } from \"../../Geometry\";\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\nimport { Angle } from \"../../geometry3d/Angle\";\n\n/**\n * Normal vector with area (or other numeric) and source index\n * @internal\n */\nclass IndexedAreaAndNormal {\n public constructor(index: number, area: number, normal: Vector3d) {\n this.index = index;\n this.area = area;\n this.normal = normal;\n }\n public index: number;\n public area: number;\n public normal: Vector3d;\n\n public addWeightedNormal(weight: number, normal: Vector3d) {\n this.area += weight;\n this.normal.addScaledInPlace(normal, weight);\n }\n public divideNormalByArea() {\n this.normal.scaleInPlace(1.0 / this.area);\n }\n}\n\n/**\n * index data for a single sector of some facet.\n * @internal\n */\nclass SectorData {\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\n this.facetData = facetData;\n this.sectorClusterData = undefined;\n this.sectorIndex = sectorIndex;\n this.vertexIndex = vertexIndex;\n }\n public facetData: IndexedAreaAndNormal;\n public sectorIndex: number;\n public vertexIndex: number;\n public sectorClusterData: IndexedAreaAndNormal | undefined;\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\n }\n}\n/**\n * Helper context for normal averaging.\n * All methods are static.\n * @internal\n */\n\nexport class BuildAverageNormalsContext {\n /**\n * * At each vertex of the mesh\n * * Find clusters of almost parallel normals\n * * Compute simple average of those normals\n * * Index to the averages\n * * For typical meshes, this correctly clusters adjacent normals.\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\n * @param polyface polyface to update.\n * @param toleranceAngle averaging is done between normals up to this angle.\n */\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\n // We ASSUME that the visitor order matches index order in polyface.data .....\n const visitor = polyface.createVisitor(0);\n const defaultNormal = Vector3d.create(0, 0, 1);\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\n const sectors: SectorData[] = [];\n let facetIndex = 0;\n let sectorIndex = 0;\n // create one IndexedAreaNormal structure for each facet.\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\n while (visitor.moveToNextFacet()) {\n let facetNormal = PolygonOps.areaNormalGo(visitor.point);\n let area = 0.0;\n if (!facetNormal) {\n facetNormal = defaultNormal.clone();\n area = 0.0;\n } else {\n area = facetNormal.magnitude();\n if (area < smallArea) {\n facetNormal.setFromVector3d(defaultNormal);\n area = 0.0;\n } else {\n facetNormal.scaleInPlace(1.0 / area);\n }\n }\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\n for (let i = 0; i < visitor.pointCount; i++) {\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\n }\n }\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\n sectors.sort((left, right) => SectorData.cbVertexSort(left, right));\n\n // Walk the sectors around each vertex . ..\n // For each unassigned sector\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\n // notate all sectors in the cluster with the averaged-normal structure.\n const clusters: IndexedAreaAndNormal[] = [];\n let toleranceRadians = toleranceAngle.radians;\n if (toleranceRadians < 0.0001)\n toleranceRadians = 0.0001;\n\n let clusterIndex = 0;\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\n const baseData = sectors[baseSectorIndex];\n const vertexIndex = baseData.vertexIndex;\n const baseFacetData = baseData.facetData;\n if (baseData.sectorClusterData === undefined) {\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\n clusters.push(clusterNormal);\n // Accumulate with equal weights . . .\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal);\n for (let candidateSectorIndex = baseSectorIndex;\n candidateSectorIndex < sectors.length;\n candidateSectorIndex++) {\n const candidateSector = sectors[candidateSectorIndex];\n if (candidateSector.vertexIndex !== vertexIndex)\n break;\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\n continue;\n if (candidateSector.sectorClusterData === undefined) {\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\n candidateSector.sectorClusterData = clusterNormal;\n }\n }\n }\n }\n // Resort by original sector index.\n sectors.sort((left, right) => SectorData.cbSectorSort(left, right));\n // normalize the sums and emplace in the facets . . .\n polyface.data.normalIndex = [];\n polyface.data.normal = new GrowableXYZArray(sectors.length);\n for (const cluster of clusters) {\n cluster.divideNormalByArea();\n cluster.index = polyface.data.normal.length;\n polyface.data.normal.push(cluster.normal);\n }\n // emplace the indices\n for (const sector of sectors) {\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\n }\n }\n /**\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\n * @param polyface mesh to modify\n */\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\n const visitor = polyface.createVisitor(0);\n const facetNormal = Vector3d.create(0, 0, 1);\n const defaultNormal = Vector3d.create(0, 0, 1);\n // polyface.data.clearNormals();\n const newNormals = new GrowableXYZArray(polyface.faceCount);\n const newIndices: number[] = [];\n while (visitor.moveToNextFacet()) {\n const thisNormalIndex = newNormals.length;\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\n newNormals.push(facetNormal);\n else\n newNormals.push(defaultNormal);\n for (let i = 0; i < visitor.pointCount; i++)\n newIndices.push(thisNormalIndex);\n }\n polyface.data.normalIndex = newIndices;\n polyface.data.normal = newNormals;\n }\n}\n"]}
1
+ {"version":3,"file":"BuildAverageNormalsContext.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/BuildAverageNormalsContext.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 Polyface\r\n */\r\n\r\nimport { Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../../geometry3d/PolygonOps\";\r\nimport { IndexedPolyface } from \"../Polyface\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\n\r\n/**\r\n * Normal vector with area (or other numeric) and source index\r\n * @internal\r\n */\r\nclass IndexedAreaAndNormal {\r\n public constructor(index: number, area: number, normal: Vector3d) {\r\n this.index = index;\r\n this.area = area;\r\n this.normal = normal;\r\n }\r\n public index: number;\r\n public area: number;\r\n public normal: Vector3d;\r\n\r\n public addWeightedNormal(weight: number, normal: Vector3d) {\r\n this.area += weight;\r\n this.normal.addScaledInPlace(normal, weight);\r\n }\r\n public divideNormalByArea() {\r\n this.normal.scaleInPlace(1.0 / this.area);\r\n }\r\n}\r\n\r\n/**\r\n * index data for a single sector of some facet.\r\n * @internal\r\n */\r\nclass SectorData {\r\n private constructor(facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n this.facetData = facetData;\r\n this.sectorClusterData = undefined;\r\n this.sectorIndex = sectorIndex;\r\n this.vertexIndex = vertexIndex;\r\n }\r\n public facetData: IndexedAreaAndNormal;\r\n public sectorIndex: number;\r\n public vertexIndex: number;\r\n public sectorClusterData: IndexedAreaAndNormal | undefined;\r\n public static cbSectorSort(left: SectorData, right: SectorData): number { return left.sectorIndex - right.sectorIndex; }\r\n public static cbVertexSort(left: SectorData, right: SectorData): number { return left.vertexIndex - right.vertexIndex; }\r\n public static pushToArray(data: SectorData[], facetData: IndexedAreaAndNormal, sectorIndex: number, vertexIndex: number) {\r\n data.push(new SectorData(facetData, sectorIndex, vertexIndex));\r\n }\r\n}\r\n/**\r\n * Helper context for normal averaging.\r\n * All methods are static.\r\n * @internal\r\n */\r\n\r\nexport class BuildAverageNormalsContext {\r\n /**\r\n * * At each vertex of the mesh\r\n * * Find clusters of almost parallel normals\r\n * * Compute simple average of those normals\r\n * * Index to the averages\r\n * * For typical meshes, this correctly clusters adjacent normals.\r\n * * One cam imagine a vertex with multiple \"smooth cone-like\" sets of incident facets such that averaging occurs among two nonadjacent cones. But this does not seem to be a problem in practice.\r\n * @param polyface polyface to update.\r\n * @param toleranceAngle averaging is done between normals up to this angle.\r\n */\r\n public static buildFastAverageNormals(polyface: IndexedPolyface, toleranceAngle: Angle) {\r\n // We ASSUME that the visitor order matches index order in polyface.data .....\r\n const visitor = polyface.createVisitor(0);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n const smallArea = Geometry.smallMetricDistanceSquared; // I DO NOT LIKE THIS TOLERANCE\r\n const sectors: SectorData[] = [];\r\n let facetIndex = 0;\r\n let sectorIndex = 0;\r\n // create one IndexedAreaNormal structure for each facet.\r\n // At each sector of each face, notate (a) IndexedAreaNormal of the facet, (b) the sector index, (c) the point index.\r\n while (visitor.moveToNextFacet()) {\r\n let facetNormal = PolygonOps.areaNormalGo(visitor.point);\r\n let area = 0.0;\r\n if (!facetNormal) {\r\n facetNormal = defaultNormal.clone();\r\n area = 0.0;\r\n } else {\r\n area = facetNormal.magnitude();\r\n if (area < smallArea) {\r\n facetNormal.setFromVector3d(defaultNormal);\r\n area = 0.0;\r\n } else {\r\n facetNormal.scaleInPlace(1.0 / area);\r\n }\r\n }\r\n const facetData = new IndexedAreaAndNormal(facetIndex++, area, facetNormal);\r\n for (let i = 0; i < visitor.pointCount; i++) {\r\n SectorData.pushToArray(sectors, facetData, sectorIndex++, visitor.clientPointIndex(i));\r\n }\r\n }\r\n // Sort by the vertex index so all the sectors around each vertex are clustered . .\r\n sectors.sort((left, right) => SectorData.cbVertexSort(left, right));\r\n\r\n // Walk the sectors around each vertex . ..\r\n // For each unassigned sector\r\n // walk to further sectors of the same vertex with near-parallel normals, accumulating average normal.\r\n // notate all sectors in the cluster with the averaged-normal structure.\r\n const clusters: IndexedAreaAndNormal[] = [];\r\n let toleranceRadians = toleranceAngle.radians;\r\n if (toleranceRadians < 0.0001)\r\n toleranceRadians = 0.0001;\r\n\r\n let clusterIndex = 0;\r\n for (let baseSectorIndex = 0; baseSectorIndex < sectors.length; baseSectorIndex++) {\r\n const baseData = sectors[baseSectorIndex];\r\n const vertexIndex = baseData.vertexIndex;\r\n const baseFacetData = baseData.facetData;\r\n if (baseData.sectorClusterData === undefined) {\r\n const clusterNormal = new IndexedAreaAndNormal(clusterIndex++, 0.0, Vector3d.createZero());\r\n clusters.push(clusterNormal);\r\n // Accumulate with equal weights . . .\r\n clusterNormal.addWeightedNormal(1.0, baseData.facetData.normal);\r\n for (let candidateSectorIndex = baseSectorIndex;\r\n candidateSectorIndex < sectors.length;\r\n candidateSectorIndex++) {\r\n const candidateSector = sectors[candidateSectorIndex];\r\n if (candidateSector.vertexIndex !== vertexIndex)\r\n break;\r\n if (candidateSector.facetData.normal.angleTo(baseFacetData.normal).radians > toleranceRadians)\r\n continue;\r\n if (candidateSector.sectorClusterData === undefined) {\r\n clusterNormal.addWeightedNormal(1.0, candidateSector.facetData.normal);\r\n candidateSector.sectorClusterData = clusterNormal;\r\n }\r\n }\r\n }\r\n }\r\n // Resort by original sector index.\r\n sectors.sort((left, right) => SectorData.cbSectorSort(left, right));\r\n // normalize the sums and emplace in the facets . . .\r\n polyface.data.normalIndex = [];\r\n polyface.data.normal = new GrowableXYZArray(sectors.length);\r\n for (const cluster of clusters) {\r\n cluster.divideNormalByArea();\r\n cluster.index = polyface.data.normal.length;\r\n polyface.data.normal.push(cluster.normal);\r\n }\r\n // emplace the indices\r\n for (const sector of sectors) {\r\n polyface.data.normalIndex.push(sector.sectorClusterData!.index);\r\n }\r\n }\r\n /**\r\n * Set up indexed normals with one normal in the plane of each facet of the mesh.\r\n * @param polyface mesh to modify\r\n */\r\n public static buildPerFaceNormals(polyface: IndexedPolyface) {\r\n const visitor = polyface.createVisitor(0);\r\n const facetNormal = Vector3d.create(0, 0, 1);\r\n const defaultNormal = Vector3d.create(0, 0, 1);\r\n // polyface.data.clearNormals();\r\n const newNormals = new GrowableXYZArray(polyface.faceCount);\r\n const newIndices: number[] = [];\r\n while (visitor.moveToNextFacet()) {\r\n const thisNormalIndex = newNormals.length;\r\n if (PolygonOps.unitNormal(visitor.point, facetNormal))\r\n newNormals.push(facetNormal);\r\n else\r\n newNormals.push(defaultNormal);\r\n for (let i = 0; i < visitor.pointCount; i++)\r\n newIndices.push(thisNormalIndex);\r\n }\r\n polyface.data.normalIndex = newIndices;\r\n polyface.data.normal = newNormals;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GriddedRaggedRange2dSet.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.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 RangeSearch\n */\n\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\n\n/**\n * Type abbreviation to allow undefined as a Range2dSearchInterface parameter.\n * @internal\n */\nexport type OptionalRange2dSearchInterface<T> = Range2dSearchInterface<T> | undefined;\n\n/**\n * A GriddedRaggedRange2dSet is:\n * * A doubly dimensioned array of Range2dSearchInterface.\n * * Each entry represents a block in a uniform grid within the master range.\n * * Member ranges are noted in the grid block containing the range's lower left corner.\n * * Member ranges larger than twice the grid size are rejected by the insert method.\n * * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)\n * @public\n */\nexport class GriddedRaggedRange2dSet<T> implements Range2dSearchInterface<T> {\n private _range: Range2d;\n private _numXEdge: number;\n private _numYEdge: number;\n /** Each grid block is a simple linear search set */\n private _rangesInBlock: Array<Array<OptionalRange2dSearchInterface<T>>>;\n private static _workRange?: Range2d;\n private constructor(range: Range2d, numXEdge: number, numYEdge: number) {\n this._range = range;\n this._numXEdge = numXEdge;\n this._numYEdge = numYEdge;\n this._rangesInBlock = [];\n for (let j = 0; j < this._numYEdge; j++) {\n const thisRow: Array<OptionalRange2dSearchInterface<T>> = [];\n for (let i = 0; i < this._numXEdge; i++) {\n thisRow.push(undefined);\n }\n this._rangesInBlock.push(thisRow);\n }\n }\n /**\n * Create an (empty) set of ranges.\n * @param range master range\n * @param numXEdge size of grid in x direction\n * @param numYEdge size of grid in y direction\n */\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSet<T> | undefined {\n if (numXEdge < 1 || numYEdge < 1 || range.isNull || range.isSinglePoint)\n return undefined;\n return new GriddedRaggedRange2dSet(range.clone(), numXEdge, numYEdge);\n }\n private xIndex(x: number): number {\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\n return Math.floor(fraction * this._numXEdge);\n }\n private yIndex(y: number): number {\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\n return Math.floor(fraction * this._numXEdge);\n }\n private getBlock(i: number, j: number): OptionalRange2dSearchInterface<T> {\n if (i >= 0 && i < this._numXEdge && j >= 0 && j < this._numYEdge) {\n if (!this._rangesInBlock[j][i])\n this._rangesInBlock[j][i] = new LinearSearchRange2dArray();\n return this._rangesInBlock[j][i];\n }\n return undefined;\n }\n /** If possible, insert a range into the set.\n * * Decline to insert (and return false) if:\n * * range is null\n * * range is not completely contained in the overall range of this set\n * * range x or y extent is larger than 2 grid blocks\n */\n public conditionalInsert(range: Range2d | Range3d | LowAndHighXY, tag: T): boolean {\n if (Range2d.isNull(range))\n return false;\n if (!this._range.containsRange(range))\n return false;\n const xIndex0 = this.xIndex(range.low.x);\n const xIndex1 = this.xIndex(range.high.x);\n const yIndex0 = this.yIndex(range.low.y);\n const yIndex1 = this.yIndex(range.high.y);\n if (!(xIndex0 === xIndex1 || xIndex0 + 1 === xIndex1))\n return false;\n if (!(yIndex0 === yIndex1 || yIndex0 + 1 === yIndex1))\n return false;\n const rangesInBlock = this.getBlock(xIndex0, yIndex0);\n if (rangesInBlock) {\n rangesInBlock.addRange(range, tag);\n return true;\n }\n return false;\n }\n /** Add a range to the search set. */\n public addRange(range: LowAndHighXY, tag: T): void {\n this.conditionalInsert(range, tag);\n }\n /**\n * * Search a single block\n * * Pass each range and tag to handler\n * * and return false if bad cell or if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n private searchXYInIndexedBlock(i: number, j: number, x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n const rangesInBlock = this.getBlock(i, j);\n if (!rangesInBlock)\n return true;\n return rangesInBlock.searchXY(x, y, handler);\n }\n /**\n * * Search a single block\n * * Pass each range and tag to handler\n * * and return false if bad cell or if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n private searchRange2dInIndexedBlock(i: number, j: number, testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n const rangesInBlock = this.getBlock(i, j);\n if (!rangesInBlock)\n return true;\n return rangesInBlock.searchRange2d(testRange, handler);\n }\n /**\n * * Search for ranges containing testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n const i = this.xIndex(x);\n const j = this.yIndex(y);\n return this.searchXYInIndexedBlock(i, j, x, y, handler)\n && this.searchXYInIndexedBlock(i - 1, j, x, y, handler)\n && this.searchXYInIndexedBlock(i, j - 1, x, y, handler)\n && this.searchXYInIndexedBlock(i - 1, j - 1, x, y, handler);\n }\n /**\n * * Search for ranges overlapping testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n const xIndex0 = this.xIndex(testRange.low.x) - 1;\n const xIndex1 = this.xIndex(testRange.high.x);\n const yIndex0 = this.yIndex(testRange.low.y) - 1;\n const yIndex1 = this.yIndex(testRange.high.y);\n for (let i = xIndex0; i <= xIndex1; i++) {\n for (let j = yIndex0; j <= yIndex1; j++) {\n if (!this.searchRange2dInIndexedBlock(i, j, testRange, handler))\n return false;\n }\n }\n return true;\n }\n /** Return the overall range of all members. */\n public totalRange(result?: Range2d): Range2d {\n if (result)\n result.setNull();\n else\n result = Range2d.createNull();\n this.visitChildren(0, (_depth, child) => {\n const childRange = GriddedRaggedRange2dSet._workRange = child.totalRange(GriddedRaggedRange2dSet._workRange);\n result.extendRange(childRange);\n });\n return result;\n }\n /** Call the handler on each defined block in the grid. */\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\n for (const row of this._rangesInBlock) {\n for (const block of row) {\n if (block)\n handler(initialDepth, block);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"GriddedRaggedRange2dSet.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSet.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 RangeSearch\r\n */\r\n\r\nimport { Range2d, Range3d } from \"../../geometry3d/Range\";\r\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\r\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\r\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\r\n\r\n/**\r\n * Type abbreviation to allow undefined as a Range2dSearchInterface parameter.\r\n * @internal\r\n */\r\nexport type OptionalRange2dSearchInterface<T> = Range2dSearchInterface<T> | undefined;\r\n\r\n/**\r\n * A GriddedRaggedRange2dSet is:\r\n * * A doubly dimensioned array of Range2dSearchInterface.\r\n * * Each entry represents a block in a uniform grid within the master range.\r\n * * Member ranges are noted in the grid block containing the range's lower left corner.\r\n * * Member ranges larger than twice the grid size are rejected by the insert method.\r\n * * Hence a search involving a point in grid block (i,j) must examine ranges in grid blocks left and below, i.e. (i-1,j-1), (i-1,j), (i,j-1)\r\n * @public\r\n */\r\nexport class GriddedRaggedRange2dSet<T> implements Range2dSearchInterface<T> {\r\n private _range: Range2d;\r\n private _numXEdge: number;\r\n private _numYEdge: number;\r\n /** Each grid block is a simple linear search set */\r\n private _rangesInBlock: Array<Array<OptionalRange2dSearchInterface<T>>>;\r\n private static _workRange?: Range2d;\r\n private constructor(range: Range2d, numXEdge: number, numYEdge: number) {\r\n this._range = range;\r\n this._numXEdge = numXEdge;\r\n this._numYEdge = numYEdge;\r\n this._rangesInBlock = [];\r\n for (let j = 0; j < this._numYEdge; j++) {\r\n const thisRow: Array<OptionalRange2dSearchInterface<T>> = [];\r\n for (let i = 0; i < this._numXEdge; i++) {\r\n thisRow.push(undefined);\r\n }\r\n this._rangesInBlock.push(thisRow);\r\n }\r\n }\r\n /**\r\n * Create an (empty) set of ranges.\r\n * @param range master range\r\n * @param numXEdge size of grid in x direction\r\n * @param numYEdge size of grid in y direction\r\n */\r\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSet<T> | undefined {\r\n if (numXEdge < 1 || numYEdge < 1 || range.isNull || range.isSinglePoint)\r\n return undefined;\r\n return new GriddedRaggedRange2dSet(range.clone(), numXEdge, numYEdge);\r\n }\r\n private xIndex(x: number): number {\r\n const fraction = (x - this._range.low.x) / (this._range.high.x - this._range.low.x);\r\n return Math.floor(fraction * this._numXEdge);\r\n }\r\n private yIndex(y: number): number {\r\n const fraction = (y - this._range.low.y) / (this._range.high.y - this._range.low.y);\r\n return Math.floor(fraction * this._numXEdge);\r\n }\r\n private getBlock(i: number, j: number): OptionalRange2dSearchInterface<T> {\r\n if (i >= 0 && i < this._numXEdge && j >= 0 && j < this._numYEdge) {\r\n if (!this._rangesInBlock[j][i])\r\n this._rangesInBlock[j][i] = new LinearSearchRange2dArray();\r\n return this._rangesInBlock[j][i];\r\n }\r\n return undefined;\r\n }\r\n /** If possible, insert a range into the set.\r\n * * Decline to insert (and return false) if:\r\n * * range is null\r\n * * range is not completely contained in the overall range of this set\r\n * * range x or y extent is larger than 2 grid blocks\r\n */\r\n public conditionalInsert(range: Range2d | Range3d | LowAndHighXY, tag: T): boolean {\r\n if (Range2d.isNull(range))\r\n return false;\r\n if (!this._range.containsRange(range))\r\n return false;\r\n const xIndex0 = this.xIndex(range.low.x);\r\n const xIndex1 = this.xIndex(range.high.x);\r\n const yIndex0 = this.yIndex(range.low.y);\r\n const yIndex1 = this.yIndex(range.high.y);\r\n if (!(xIndex0 === xIndex1 || xIndex0 + 1 === xIndex1))\r\n return false;\r\n if (!(yIndex0 === yIndex1 || yIndex0 + 1 === yIndex1))\r\n return false;\r\n const rangesInBlock = this.getBlock(xIndex0, yIndex0);\r\n if (rangesInBlock) {\r\n rangesInBlock.addRange(range, tag);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Add a range to the search set. */\r\n public addRange(range: LowAndHighXY, tag: T): void {\r\n this.conditionalInsert(range, tag);\r\n }\r\n /**\r\n * * Search a single block\r\n * * Pass each range and tag to handler\r\n * * and return false if bad cell or if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n private searchXYInIndexedBlock(i: number, j: number, x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const rangesInBlock = this.getBlock(i, j);\r\n if (!rangesInBlock)\r\n return true;\r\n return rangesInBlock.searchXY(x, y, handler);\r\n }\r\n /**\r\n * * Search a single block\r\n * * Pass each range and tag to handler\r\n * * and return false if bad cell or if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n private searchRange2dInIndexedBlock(i: number, j: number, testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const rangesInBlock = this.getBlock(i, j);\r\n if (!rangesInBlock)\r\n return true;\r\n return rangesInBlock.searchRange2d(testRange, handler);\r\n }\r\n /**\r\n * * Search for ranges containing testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const i = this.xIndex(x);\r\n const j = this.yIndex(y);\r\n return this.searchXYInIndexedBlock(i, j, x, y, handler)\r\n && this.searchXYInIndexedBlock(i - 1, j, x, y, handler)\r\n && this.searchXYInIndexedBlock(i, j - 1, x, y, handler)\r\n && this.searchXYInIndexedBlock(i - 1, j - 1, x, y, handler);\r\n }\r\n /**\r\n * * Search for ranges overlapping testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n const xIndex0 = this.xIndex(testRange.low.x) - 1;\r\n const xIndex1 = this.xIndex(testRange.high.x);\r\n const yIndex0 = this.yIndex(testRange.low.y) - 1;\r\n const yIndex1 = this.yIndex(testRange.high.y);\r\n for (let i = xIndex0; i <= xIndex1; i++) {\r\n for (let j = yIndex0; j <= yIndex1; j++) {\r\n if (!this.searchRange2dInIndexedBlock(i, j, testRange, handler))\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /** Return the overall range of all members. */\r\n public totalRange(result?: Range2d): Range2d {\r\n if (result)\r\n result.setNull();\r\n else\r\n result = Range2d.createNull();\r\n this.visitChildren(0, (_depth, child) => {\r\n const childRange = GriddedRaggedRange2dSet._workRange = child.totalRange(GriddedRaggedRange2dSet._workRange);\r\n result.extendRange(childRange);\r\n });\r\n return result;\r\n }\r\n /** Call the handler on each defined block in the grid. */\r\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\r\n for (const row of this._rangesInBlock) {\r\n for (const block of row) {\r\n if (block)\r\n handler(initialDepth, block);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAAiD;AAEjD,uEAAoE;AACpE,yEAAsE;AAGtE;;;;;;;GAOG;AACH,MAAa,mCAAmC;IACtC,QAAQ,CAA6B;IACrC,YAAY,CAA4B;IACxC,MAAM,CAAC,UAAU,CAAW;IACpC,YAAoB,OAAmC,EAAE,WAAsC;QAC7F,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAI,KAAc,EAAE,QAAgB,EAAE,QAAgB;QACxE,MAAM,KAAK,GAAG,iDAAuB,CAAC,MAAM,CAAI,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnF,IAAI,KAAK;YACP,OAAO,IAAI,mCAAmC,CAAI,KAAK,EAAE,IAAI,mDAAwB,EAAK,CAAC,CAAC;QAC9F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,OAA4C;QAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IACD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAuB,EAAE,OAA4C;QACxF,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChH,CAAC;IACD;;;;;OAKG;IACI,QAAQ,CAAC,KAAmB,EAAE,GAAM;QACzC,IAAI,CAAC,eAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,+CAA+C;IACxC,UAAU,CAAC,MAAgB;QAChC,IAAI,MAAM;YACR,MAAM,CAAC,OAAO,EAAE,CAAC;;YAEjB,MAAM,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,UAAU,GAAG,mCAAmC,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YACrI,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mFAAmF;IAC5E,aAAa,CAAC,YAAoB,EAAE,OAAkE;QAC3G,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF;AAvED,kFAuEC","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 RangeSearch\n */\n\nimport { Range2d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\nimport { GriddedRaggedRange2dSet } from \"./GriddedRaggedRange2dSet\";\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\n\n/**\n * Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which:\n * * Most ranges are of somewhat consistent size.\n * * A modest number of oversizes.\n * * Maintain the smallish ones in a GriddedRaggedRange2dSet.\n * * Maintain the overflows in a Range2dSearchInterface.\n * @public\n */\nexport class GriddedRaggedRange2dSetWithOverflow<T> implements Range2dSearchInterface<T> {\n private _gridSet: GriddedRaggedRange2dSet<T>;\n private _overflowSet: Range2dSearchInterface<T>;\n private static _workRange?: Range2d;\n private constructor(gridSet: GriddedRaggedRange2dSet<T>, overflowSet: Range2dSearchInterface<T>) {\n this._gridSet = gridSet;\n this._overflowSet = overflowSet;\n }\n /**\n * Create an (empty) set of ranges.\n * @param range\n * @param numXEdge\n * @param numYEdge\n */\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSetWithOverflow<T> | undefined {\n const grids = GriddedRaggedRange2dSet.create<T>(range.clone(), numXEdge, numYEdge);\n if (grids)\n return new GriddedRaggedRange2dSetWithOverflow<T>(grids, new LinearSearchRange2dArray<T>());\n return undefined;\n }\n /**\n * * Search for ranges containing testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n return this._gridSet.searchXY(x, y, handler) && this._overflowSet.searchXY(x, y, handler);\n }\n /**\n * * Search for ranges overlapping testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n return this._gridSet.searchRange2d(testRange, handler) && this._overflowSet.searchRange2d(testRange, handler);\n }\n /** If possible, insert a range into the set.\n * * Decline to insert (and return false) if\n * * range is null\n * * range is not completely contained in the overall range of this set.\n * * range x or y extent is larger than 2 grid blocks.\n */\n public addRange(range: LowAndHighXY, tag: T): void {\n if (!Range2d.isNull(range)) {\n if (!this._gridSet.conditionalInsert(range, tag))\n this._overflowSet.addRange(range, tag);\n }\n }\n /** Return the overall range of all members. */\n public totalRange(result?: Range2d): Range2d {\n if (result)\n result.setNull();\n else\n result = Range2d.createNull();\n this.visitChildren(0, (_depth, child) => {\n const childRange = GriddedRaggedRange2dSetWithOverflow._workRange = child.totalRange(GriddedRaggedRange2dSetWithOverflow._workRange);\n result.extendRange(childRange);\n });\n return result;\n }\n /** Call the handler on the overflow set, and on each defined block in the grid. */\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\n handler(initialDepth, this._overflowSet);\n this._gridSet.visitChildren(initialDepth + 1, handler);\n }\n}\n"]}
1
+ {"version":3,"file":"GriddedRaggedRange2dSetWithOverflow.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAAiD;AAEjD,uEAAoE;AACpE,yEAAsE;AAGtE;;;;;;;GAOG;AACH,MAAa,mCAAmC;IACtC,QAAQ,CAA6B;IACrC,YAAY,CAA4B;IACxC,MAAM,CAAC,UAAU,CAAW;IACpC,YAAoB,OAAmC,EAAE,WAAsC;QAC7F,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,MAAM,CAAI,KAAc,EAAE,QAAgB,EAAE,QAAgB;QACxE,MAAM,KAAK,GAAG,iDAAuB,CAAC,MAAM,CAAI,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnF,IAAI,KAAK;YACP,OAAO,IAAI,mCAAmC,CAAI,KAAK,EAAE,IAAI,mDAAwB,EAAK,CAAC,CAAC;QAC9F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,OAA4C;QAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IACD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAuB,EAAE,OAA4C;QACxF,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChH,CAAC;IACD;;;;;OAKG;IACI,QAAQ,CAAC,KAAmB,EAAE,GAAM;QACzC,IAAI,CAAC,eAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,+CAA+C;IACxC,UAAU,CAAC,MAAgB;QAChC,IAAI,MAAM;YACR,MAAM,CAAC,OAAO,EAAE,CAAC;;YAEjB,MAAM,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,UAAU,GAAG,mCAAmC,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YACrI,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mFAAmF;IAC5E,aAAa,CAAC,YAAoB,EAAE,OAAkE;QAC3G,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF;AAvED,kFAuEC","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 RangeSearch\r\n */\r\n\r\nimport { Range2d } from \"../../geometry3d/Range\";\r\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\r\nimport { GriddedRaggedRange2dSet } from \"./GriddedRaggedRange2dSet\";\r\nimport { LinearSearchRange2dArray } from \"./LinearSearchRange2dArray\";\r\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\r\n\r\n/**\r\n * Use GriddedRaggedRange2dSetWithOverflow for searching among many ranges for which:\r\n * * Most ranges are of somewhat consistent size.\r\n * * A modest number of oversizes.\r\n * * Maintain the smallish ones in a GriddedRaggedRange2dSet.\r\n * * Maintain the overflows in a Range2dSearchInterface.\r\n * @public\r\n */\r\nexport class GriddedRaggedRange2dSetWithOverflow<T> implements Range2dSearchInterface<T> {\r\n private _gridSet: GriddedRaggedRange2dSet<T>;\r\n private _overflowSet: Range2dSearchInterface<T>;\r\n private static _workRange?: Range2d;\r\n private constructor(gridSet: GriddedRaggedRange2dSet<T>, overflowSet: Range2dSearchInterface<T>) {\r\n this._gridSet = gridSet;\r\n this._overflowSet = overflowSet;\r\n }\r\n /**\r\n * Create an (empty) set of ranges.\r\n * @param range\r\n * @param numXEdge\r\n * @param numYEdge\r\n */\r\n public static create<T>(range: Range2d, numXEdge: number, numYEdge: number): GriddedRaggedRange2dSetWithOverflow<T> | undefined {\r\n const grids = GriddedRaggedRange2dSet.create<T>(range.clone(), numXEdge, numYEdge);\r\n if (grids)\r\n return new GriddedRaggedRange2dSetWithOverflow<T>(grids, new LinearSearchRange2dArray<T>());\r\n return undefined;\r\n }\r\n /**\r\n * * Search for ranges containing testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n return this._gridSet.searchXY(x, y, handler) && this._overflowSet.searchXY(x, y, handler);\r\n }\r\n /**\r\n * * Search for ranges overlapping testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n return this._gridSet.searchRange2d(testRange, handler) && this._overflowSet.searchRange2d(testRange, handler);\r\n }\r\n /** If possible, insert a range into the set.\r\n * * Decline to insert (and return false) if\r\n * * range is null\r\n * * range is not completely contained in the overall range of this set.\r\n * * range x or y extent is larger than 2 grid blocks.\r\n */\r\n public addRange(range: LowAndHighXY, tag: T): void {\r\n if (!Range2d.isNull(range)) {\r\n if (!this._gridSet.conditionalInsert(range, tag))\r\n this._overflowSet.addRange(range, tag);\r\n }\r\n }\r\n /** Return the overall range of all members. */\r\n public totalRange(result?: Range2d): Range2d {\r\n if (result)\r\n result.setNull();\r\n else\r\n result = Range2d.createNull();\r\n this.visitChildren(0, (_depth, child) => {\r\n const childRange = GriddedRaggedRange2dSetWithOverflow._workRange = child.totalRange(GriddedRaggedRange2dSetWithOverflow._workRange);\r\n result.extendRange(childRange);\r\n });\r\n return result;\r\n }\r\n /** Call the handler on the overflow set, and on each defined block in the grid. */\r\n public visitChildren(initialDepth: number, handler: (depth: number, child: Range2dSearchInterface<T>) => void) {\r\n handler(initialDepth, this._overflowSet);\r\n this._gridSet.visitChildren(initialDepth + 1, handler);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearSearchRange2dArray.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/LinearSearchRange2dArray.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAAiD;AAIjD;;;;;;GAMG;AACH,MAAa,wBAAwB;IAC3B,WAAW,CAAY;IACvB,QAAQ,CAAU;IAClB,eAAe,CAAU;IACjC;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;IAC9C,CAAC;IACD,+BAA+B;IACvB,eAAe;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,+CAA+C;IACxC,UAAU,CAAC,MAAgB;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,qCAAqC;IAC9B,QAAQ,CAAC,KAAmB,EAAE,GAAM;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;QACpC,OAAe,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,OAA4C;QAChF,IAAI,IAAI,CAAC,QAAQ;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,+CAA+C;QAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAG,SAAiB,CAAC,GAAG,CAAC;oBAC7C,OAAO,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAuB,EAAE,OAA4C;QACxF,IAAI,IAAI,CAAC,QAAQ;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAG,SAAiB,CAAC,GAAG,CAAC;oBAC7C,OAAO,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhED,4DAgEC","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 RangeSearch\n */\n\nimport { Range2d } from \"../../geometry3d/Range\";\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\n\n/**\n * An array of decorated Range2d.\n * * User data is attached to each range via `(myRange as any).tag = myTag`.\n * * Search operations are simple linear.\n * * This class can be used directly for \"smallish\" range sets, or as the leaf level of hierarchical structures for larger range sets.\n * @internal\n */\nexport class LinearSearchRange2dArray<T> implements Range2dSearchInterface<T> {\n private _rangeArray: Range2d[];\n private _isDirty: boolean;\n private _compositeRange: Range2d;\n public constructor() {\n this._rangeArray = [];\n this._isDirty = false;\n this._compositeRange = Range2d.createNull();\n }\n // TODO: build search structure\n private updateForSearch() {\n this._isDirty = false;\n }\n /** Return the overall range of all members. */\n public totalRange(result?: Range2d): Range2d {\n return this._compositeRange.clone(result);\n }\n /** Add a range to the search set. */\n public addRange(range: LowAndHighXY, tag: T): void {\n this._isDirty = true;\n const myRange = Range2d.createNull();\n (myRange as any).tag = tag;\n myRange.extendXY(range.low.x, range.low.y);\n myRange.extendXY(range.high.x, range.high.y);\n this._compositeRange.extendRange(myRange);\n this._rangeArray.push(myRange);\n }\n /**\n * * Search for ranges containing testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\n if (this._isDirty)\n this.updateForSearch();\n // NEEDS WORK: Linear search here -- do better!\n for (const candidate of this._rangeArray) {\n if (candidate.containsXY(x, y))\n if (!handler(candidate, (candidate as any).tag))\n return false;\n }\n return true;\n }\n /**\n * * Search for ranges overlapping testRange\n * * Pass each range and tag to handler\n * * terminate search if handler returns false.\n * @param testRange search range.\n * @param handler function to receive range and tag hits.\n * @return false if search terminated by handler. Return true if no handler returned false.\n */\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\n if (this._isDirty)\n this.updateForSearch();\n for (const candidate of this._rangeArray) {\n if (candidate.intersectsRange(testRange))\n if (!handler(candidate, (candidate as any).tag))\n return false;\n }\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"LinearSearchRange2dArray.js","sourceRoot":"","sources":["../../../../src/polyface/multiclip/LinearSearchRange2dArray.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAAiD;AAIjD;;;;;;GAMG;AACH,MAAa,wBAAwB;IAC3B,WAAW,CAAY;IACvB,QAAQ,CAAU;IAClB,eAAe,CAAU;IACjC;QACE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;IAC9C,CAAC;IACD,+BAA+B;IACvB,eAAe;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,+CAA+C;IACxC,UAAU,CAAC,MAAgB;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,qCAAqC;IAC9B,QAAQ,CAAC,KAAmB,EAAE,GAAM;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,eAAO,CAAC,UAAU,EAAE,CAAC;QACpC,OAAe,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD;;;;;;;OAOG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,OAA4C;QAChF,IAAI,IAAI,CAAC,QAAQ;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,+CAA+C;QAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAG,SAAiB,CAAC,GAAG,CAAC;oBAC7C,OAAO,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAuB,EAAE,OAA4C;QACxF,IAAI,IAAI,CAAC,QAAQ;YACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAG,SAAiB,CAAC,GAAG,CAAC;oBAC7C,OAAO,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhED,4DAgEC","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 RangeSearch\r\n */\r\n\r\nimport { Range2d } from \"../../geometry3d/Range\";\r\nimport { LowAndHighXY } from \"../../geometry3d/XYZProps\";\r\nimport { Range2dSearchInterface } from \"./Range2dSearchInterface\";\r\n\r\n/**\r\n * An array of decorated Range2d.\r\n * * User data is attached to each range via `(myRange as any).tag = myTag`.\r\n * * Search operations are simple linear.\r\n * * This class can be used directly for \"smallish\" range sets, or as the leaf level of hierarchical structures for larger range sets.\r\n * @internal\r\n */\r\nexport class LinearSearchRange2dArray<T> implements Range2dSearchInterface<T> {\r\n private _rangeArray: Range2d[];\r\n private _isDirty: boolean;\r\n private _compositeRange: Range2d;\r\n public constructor() {\r\n this._rangeArray = [];\r\n this._isDirty = false;\r\n this._compositeRange = Range2d.createNull();\r\n }\r\n // TODO: build search structure\r\n private updateForSearch() {\r\n this._isDirty = false;\r\n }\r\n /** Return the overall range of all members. */\r\n public totalRange(result?: Range2d): Range2d {\r\n return this._compositeRange.clone(result);\r\n }\r\n /** Add a range to the search set. */\r\n public addRange(range: LowAndHighXY, tag: T): void {\r\n this._isDirty = true;\r\n const myRange = Range2d.createNull();\r\n (myRange as any).tag = tag;\r\n myRange.extendXY(range.low.x, range.low.y);\r\n myRange.extendXY(range.high.x, range.high.y);\r\n this._compositeRange.extendRange(myRange);\r\n this._rangeArray.push(myRange);\r\n }\r\n /**\r\n * * Search for ranges containing testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchXY(x: number, y: number, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n if (this._isDirty)\r\n this.updateForSearch();\r\n // NEEDS WORK: Linear search here -- do better!\r\n for (const candidate of this._rangeArray) {\r\n if (candidate.containsXY(x, y))\r\n if (!handler(candidate, (candidate as any).tag))\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * * Search for ranges overlapping testRange\r\n * * Pass each range and tag to handler\r\n * * terminate search if handler returns false.\r\n * @param testRange search range.\r\n * @param handler function to receive range and tag hits.\r\n * @return false if search terminated by handler. Return true if no handler returned false.\r\n */\r\n public searchRange2d(testRange: LowAndHighXY, handler: (range: Range2d, tag: T) => boolean): boolean {\r\n if (this._isDirty)\r\n this.updateForSearch();\r\n for (const candidate of this._rangeArray) {\r\n if (candidate.intersectsRange(testRange))\r\n if (!handler(candidate, (candidate as any).tag))\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n"]}