@itwin/core-geometry 5.1.0-dev.3 → 5.1.0-dev.32

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 (770) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.d.ts +8 -0
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +10 -0
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js +7 -1
  11. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.d.ts +2 -1
  15. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineSurface.js +2 -1
  17. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  18. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  19. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  20. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  21. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  22. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  23. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  24. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  25. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  26. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  27. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  28. package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
  29. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  30. package/lib/cjs/clipping/ClipPlane.js +9 -5
  31. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  32. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  33. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  34. package/lib/cjs/clipping/ClipUtils.js +5 -3
  35. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  36. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  37. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
  38. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
  40. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  41. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  42. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  43. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  44. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  45. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  46. package/lib/cjs/core-geometry.d.ts +1 -0
  47. package/lib/cjs/core-geometry.d.ts.map +1 -1
  48. package/lib/cjs/core-geometry.js +1 -0
  49. package/lib/cjs/core-geometry.js.map +1 -1
  50. package/lib/cjs/curve/Arc3d.d.ts +54 -32
  51. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  52. package/lib/cjs/curve/Arc3d.js +56 -37
  53. package/lib/cjs/curve/Arc3d.js.map +1 -1
  54. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  55. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  56. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  57. package/lib/cjs/curve/CurveCollection.d.ts +33 -1
  58. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  59. package/lib/cjs/curve/CurveCollection.js +79 -0
  60. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  61. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  62. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  63. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  64. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  65. package/lib/cjs/curve/CurveLocationDetail.d.ts +24 -24
  66. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  67. package/lib/cjs/curve/CurveLocationDetail.js +24 -24
  68. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  69. package/lib/cjs/curve/CurveOps.js.map +1 -1
  70. package/lib/cjs/curve/CurvePrimitive.d.ts +2 -2
  71. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  72. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  73. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  74. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  75. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  76. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  77. package/lib/cjs/curve/LineString3d.js.map +1 -1
  78. package/lib/cjs/curve/Loop.js.map +1 -1
  79. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  80. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  81. package/lib/cjs/curve/Path.js.map +1 -1
  82. package/lib/cjs/curve/PointString3d.js.map +1 -1
  83. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  84. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  85. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
  86. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  87. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  88. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  89. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  90. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +9 -5
  91. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  92. package/lib/cjs/curve/Query/PlanarSubdivision.js +27 -11
  93. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  94. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  95. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  96. package/lib/cjs/curve/RegionMomentsXY.d.ts +15 -21
  97. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  98. package/lib/cjs/curve/RegionMomentsXY.js +39 -59
  99. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  100. package/lib/cjs/curve/RegionOps.d.ts +82 -39
  101. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  102. package/lib/cjs/curve/RegionOps.js +154 -48
  103. package/lib/cjs/curve/RegionOps.js.map +1 -1
  104. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +27 -26
  105. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  106. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +70 -54
  107. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  108. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  109. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  119. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  120. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  121. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  125. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  126. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  127. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  128. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  131. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
  132. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  133. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  135. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  136. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
  137. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  138. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  139. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  140. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  141. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  142. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  143. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  144. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  145. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  146. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  147. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  148. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  149. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  150. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  151. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  152. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  153. package/lib/cjs/geometry3d/AngleSweep.d.ts +24 -17
  154. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  155. package/lib/cjs/geometry3d/AngleSweep.js +31 -17
  156. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  157. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  158. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  159. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  160. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  161. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
  162. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  163. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  164. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  165. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  166. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  167. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  168. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  169. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  170. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +7 -2
  171. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  172. package/lib/cjs/geometry3d/GrowableXYZArray.js +20 -2
  173. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  174. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  175. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  176. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +2 -1
  177. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  178. package/lib/cjs/geometry3d/IndexedXYZCollection.js +7 -3
  179. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  180. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  181. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  182. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  183. package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
  184. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  185. package/lib/cjs/geometry3d/Plane3d.js +6 -1
  186. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  187. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  188. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  189. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  190. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  191. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  192. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  193. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  194. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  195. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  196. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  197. package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
  198. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  199. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  200. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
  201. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  202. package/lib/cjs/geometry3d/Point3dVector3d.js +7 -8
  203. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  204. package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
  205. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  206. package/lib/cjs/geometry3d/PointHelpers.js +66 -26
  207. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  208. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  209. package/lib/cjs/geometry3d/PolygonOps.d.ts +57 -9
  210. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  211. package/lib/cjs/geometry3d/PolygonOps.js +57 -17
  212. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  213. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  214. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  215. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  216. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  217. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
  218. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  219. package/lib/cjs/geometry3d/PolylineOps.js +5 -4
  220. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  221. package/lib/cjs/geometry3d/Range.d.ts +18 -10
  222. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  223. package/lib/cjs/geometry3d/Range.js +32 -10
  224. package/lib/cjs/geometry3d/Range.js.map +1 -1
  225. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  226. package/lib/cjs/geometry3d/Ray2d.js +0 -1
  227. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  228. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  229. package/lib/cjs/geometry3d/Ray3d.js +11 -23
  230. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  231. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  232. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  233. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  234. package/lib/cjs/geometry3d/Transform.d.ts +21 -2
  235. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  236. package/lib/cjs/geometry3d/Transform.js +32 -13
  237. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  238. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  239. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  240. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  241. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  242. package/lib/cjs/geometry4d/Matrix4d.d.ts +7 -7
  243. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  244. package/lib/cjs/geometry4d/Matrix4d.js +9 -9
  245. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  246. package/lib/cjs/geometry4d/MomentData.d.ts +32 -34
  247. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  248. package/lib/cjs/geometry4d/MomentData.js +56 -57
  249. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  250. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  251. package/lib/cjs/geometry4d/Point4d.d.ts +7 -4
  252. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  253. package/lib/cjs/geometry4d/Point4d.js +26 -15
  254. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  255. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  256. package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
  257. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  258. package/lib/cjs/numerics/BezierPolynomials.js +11 -0
  259. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  260. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  261. package/lib/cjs/numerics/Complex.js.map +1 -1
  262. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  263. package/lib/cjs/numerics/Newton.js.map +1 -1
  264. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  265. package/lib/cjs/numerics/PolarData.js.map +1 -1
  266. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  267. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  268. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  269. package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
  270. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  271. package/lib/cjs/numerics/SmallSystem.js +129 -73
  272. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  273. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  274. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  275. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  276. package/lib/cjs/polyface/AuxData.js.map +1 -1
  277. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  278. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  279. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  280. package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
  281. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  282. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  283. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  284. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
  285. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  286. package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
  287. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  288. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  289. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  290. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
  291. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  292. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  293. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  294. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +47 -32
  295. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  296. package/lib/cjs/polyface/Polyface.d.ts +17 -3
  297. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  298. package/lib/cjs/polyface/Polyface.js +16 -0
  299. package/lib/cjs/polyface/Polyface.js.map +1 -1
  300. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  301. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  302. package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
  303. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  304. package/lib/cjs/polyface/PolyfaceClip.js +39 -42
  305. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  306. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  307. package/lib/cjs/polyface/PolyfaceQuery.d.ts +116 -75
  308. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  309. package/lib/cjs/polyface/PolyfaceQuery.js +312 -228
  310. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  311. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  312. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  313. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  314. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  315. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  316. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  317. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  318. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
  319. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  320. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  321. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  322. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  323. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  324. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  325. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  326. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  327. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  328. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  329. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  330. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  331. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  332. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  333. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  334. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  335. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  336. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  337. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  338. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  339. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  340. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  341. package/lib/cjs/serialization/GeometrySamples.js +2 -2
  342. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  343. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  344. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  345. package/lib/cjs/solid/Box.js.map +1 -1
  346. package/lib/cjs/solid/Cone.js.map +1 -1
  347. package/lib/cjs/solid/LinearSweep.d.ts +2 -3
  348. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  349. package/lib/cjs/solid/LinearSweep.js +2 -3
  350. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  351. package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
  352. package/lib/cjs/solid/RotationalSweep.js +2 -2
  353. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  354. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  355. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  356. package/lib/cjs/solid/Sphere.js.map +1 -1
  357. package/lib/cjs/solid/SweepContour.js.map +1 -1
  358. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  359. package/lib/cjs/topology/ChainMerge.d.ts +1 -1
  360. package/lib/cjs/topology/ChainMerge.js +1 -1
  361. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  362. package/lib/cjs/topology/Graph.js.map +1 -1
  363. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  364. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +1 -0
  365. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  366. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -0
  367. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  368. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  369. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  370. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  371. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  372. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  373. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  374. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  375. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  376. package/lib/cjs/topology/MaskManager.js.map +1 -1
  377. package/lib/cjs/topology/Merging.d.ts +0 -1
  378. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  379. package/lib/cjs/topology/Merging.js +49 -46
  380. package/lib/cjs/topology/Merging.js.map +1 -1
  381. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  382. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  383. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  384. package/lib/cjs/topology/Triangulation.js.map +1 -1
  385. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  386. package/lib/esm/Constant.js.map +1 -1
  387. package/lib/esm/Geometry.d.ts +8 -0
  388. package/lib/esm/Geometry.d.ts.map +1 -1
  389. package/lib/esm/Geometry.js +10 -0
  390. package/lib/esm/Geometry.js.map +1 -1
  391. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  392. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  393. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  394. package/lib/esm/bspline/BSplineCurve.js +7 -1
  395. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  396. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  397. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  398. package/lib/esm/bspline/BSplineSurface.d.ts +2 -1
  399. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  400. package/lib/esm/bspline/BSplineSurface.js +2 -1
  401. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  402. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  403. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  404. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  405. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  406. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  407. package/lib/esm/bspline/KnotVector.js.map +1 -1
  408. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  409. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  410. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  411. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  412. package/lib/esm/clipping/ClipPlane.d.ts +7 -5
  413. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  414. package/lib/esm/clipping/ClipPlane.js +9 -5
  415. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  416. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  417. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  418. package/lib/esm/clipping/ClipUtils.js +5 -3
  419. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  420. package/lib/esm/clipping/ClipVector.js.map +1 -1
  421. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
  422. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  423. package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
  424. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  425. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  426. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  427. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  428. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  429. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  430. package/lib/esm/core-geometry.d.ts +1 -0
  431. package/lib/esm/core-geometry.d.ts.map +1 -1
  432. package/lib/esm/core-geometry.js +1 -0
  433. package/lib/esm/core-geometry.js.map +1 -1
  434. package/lib/esm/curve/Arc3d.d.ts +54 -32
  435. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  436. package/lib/esm/curve/Arc3d.js +56 -37
  437. package/lib/esm/curve/Arc3d.js.map +1 -1
  438. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  439. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  440. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  441. package/lib/esm/curve/CurveCollection.d.ts +33 -1
  442. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  443. package/lib/esm/curve/CurveCollection.js +79 -0
  444. package/lib/esm/curve/CurveCollection.js.map +1 -1
  445. package/lib/esm/curve/CurveCurve.js.map +1 -1
  446. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  447. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  448. package/lib/esm/curve/CurveFactory.js.map +1 -1
  449. package/lib/esm/curve/CurveLocationDetail.d.ts +24 -24
  450. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  451. package/lib/esm/curve/CurveLocationDetail.js +24 -24
  452. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  453. package/lib/esm/curve/CurveOps.js.map +1 -1
  454. package/lib/esm/curve/CurvePrimitive.d.ts +2 -2
  455. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  456. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  457. package/lib/esm/curve/CurveTypes.js.map +1 -1
  458. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  459. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  460. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  461. package/lib/esm/curve/LineString3d.js.map +1 -1
  462. package/lib/esm/curve/Loop.js.map +1 -1
  463. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  464. package/lib/esm/curve/ParityRegion.js.map +1 -1
  465. package/lib/esm/curve/Path.js.map +1 -1
  466. package/lib/esm/curve/PointString3d.js.map +1 -1
  467. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  468. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  469. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
  470. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  471. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  472. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  473. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  474. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +9 -5
  475. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  476. package/lib/esm/curve/Query/PlanarSubdivision.js +27 -11
  477. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  478. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  479. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  480. package/lib/esm/curve/RegionMomentsXY.d.ts +15 -21
  481. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  482. package/lib/esm/curve/RegionMomentsXY.js +39 -59
  483. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  484. package/lib/esm/curve/RegionOps.d.ts +82 -39
  485. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  486. package/lib/esm/curve/RegionOps.js +155 -49
  487. package/lib/esm/curve/RegionOps.js.map +1 -1
  488. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +27 -26
  489. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  490. package/lib/esm/curve/RegionOpsClassificationSweeps.js +70 -54
  491. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  492. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  493. package/lib/esm/curve/UnionRegion.js.map +1 -1
  494. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  495. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  496. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  497. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  498. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  499. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  500. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  501. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  502. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  503. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  504. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  505. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  506. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  507. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  508. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  509. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  510. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  511. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  512. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  513. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  514. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  515. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
  516. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  517. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  518. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  519. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  520. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
  521. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  522. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  523. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  524. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  525. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  526. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  527. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  528. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  529. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  530. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  531. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  532. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  533. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  534. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  535. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  536. package/lib/esm/geometry3d/Angle.js.map +1 -1
  537. package/lib/esm/geometry3d/AngleSweep.d.ts +24 -17
  538. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  539. package/lib/esm/geometry3d/AngleSweep.js +31 -17
  540. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  541. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  542. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  543. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  544. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  545. package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
  546. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  547. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  548. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  549. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  550. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  551. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  552. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  553. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  554. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +7 -2
  555. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  556. package/lib/esm/geometry3d/GrowableXYZArray.js +20 -2
  557. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  558. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  559. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  560. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +2 -1
  561. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  562. package/lib/esm/geometry3d/IndexedXYZCollection.js +7 -3
  563. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  564. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  565. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  566. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  567. package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
  568. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  569. package/lib/esm/geometry3d/Plane3d.js +6 -1
  570. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  571. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  572. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  573. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  574. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  575. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  576. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  577. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  578. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  579. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  580. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  581. package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
  582. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  583. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  584. package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
  585. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  586. package/lib/esm/geometry3d/Point3dVector3d.js +7 -8
  587. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  588. package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
  589. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  590. package/lib/esm/geometry3d/PointHelpers.js +66 -26
  591. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  592. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  593. package/lib/esm/geometry3d/PolygonOps.d.ts +57 -9
  594. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  595. package/lib/esm/geometry3d/PolygonOps.js +57 -17
  596. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  597. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  598. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  599. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  600. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  601. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
  602. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  603. package/lib/esm/geometry3d/PolylineOps.js +5 -4
  604. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  605. package/lib/esm/geometry3d/Range.d.ts +18 -10
  606. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  607. package/lib/esm/geometry3d/Range.js +32 -10
  608. package/lib/esm/geometry3d/Range.js.map +1 -1
  609. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  610. package/lib/esm/geometry3d/Ray2d.js +0 -1
  611. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  612. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  613. package/lib/esm/geometry3d/Ray3d.js +11 -23
  614. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  615. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  616. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  617. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  618. package/lib/esm/geometry3d/Transform.d.ts +21 -2
  619. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  620. package/lib/esm/geometry3d/Transform.js +32 -13
  621. package/lib/esm/geometry3d/Transform.js.map +1 -1
  622. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  623. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  624. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  625. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  626. package/lib/esm/geometry4d/Matrix4d.d.ts +7 -7
  627. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  628. package/lib/esm/geometry4d/Matrix4d.js +9 -9
  629. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  630. package/lib/esm/geometry4d/MomentData.d.ts +32 -34
  631. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  632. package/lib/esm/geometry4d/MomentData.js +56 -57
  633. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  634. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  635. package/lib/esm/geometry4d/Point4d.d.ts +7 -4
  636. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  637. package/lib/esm/geometry4d/Point4d.js +26 -15
  638. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  639. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  640. package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
  641. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  642. package/lib/esm/numerics/BezierPolynomials.js +11 -0
  643. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  644. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  645. package/lib/esm/numerics/Complex.js.map +1 -1
  646. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  647. package/lib/esm/numerics/Newton.js.map +1 -1
  648. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  649. package/lib/esm/numerics/PolarData.js.map +1 -1
  650. package/lib/esm/numerics/Polynomials.js.map +1 -1
  651. package/lib/esm/numerics/Quadrature.js.map +1 -1
  652. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  653. package/lib/esm/numerics/SmallSystem.d.ts +77 -36
  654. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  655. package/lib/esm/numerics/SmallSystem.js +129 -73
  656. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  657. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  658. package/lib/esm/numerics/UnionFind.js.map +1 -1
  659. package/lib/esm/numerics/UsageSums.js.map +1 -1
  660. package/lib/esm/polyface/AuxData.js.map +1 -1
  661. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  662. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  663. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  664. package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
  665. package/lib/esm/polyface/FacetOrientation.js +1 -1
  666. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  667. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  668. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
  669. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  670. package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
  671. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  672. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  673. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  674. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
  675. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  676. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  677. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  678. package/lib/esm/polyface/IndexedPolyfaceWalker.js +47 -32
  679. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  680. package/lib/esm/polyface/Polyface.d.ts +17 -3
  681. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  682. package/lib/esm/polyface/Polyface.js +16 -0
  683. package/lib/esm/polyface/Polyface.js.map +1 -1
  684. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  685. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  686. package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
  687. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  688. package/lib/esm/polyface/PolyfaceClip.js +39 -42
  689. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  690. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  691. package/lib/esm/polyface/PolyfaceQuery.d.ts +116 -75
  692. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  693. package/lib/esm/polyface/PolyfaceQuery.js +313 -229
  694. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  695. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  696. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  697. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  698. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  699. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  700. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  701. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  702. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
  703. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  704. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  705. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  706. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  707. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  708. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  709. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  710. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  711. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  712. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  713. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  714. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  715. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  716. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  717. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  718. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  719. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  720. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  721. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  722. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  723. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  724. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  725. package/lib/esm/serialization/GeometrySamples.js +2 -2
  726. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  727. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  728. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  729. package/lib/esm/solid/Box.js.map +1 -1
  730. package/lib/esm/solid/Cone.js.map +1 -1
  731. package/lib/esm/solid/LinearSweep.d.ts +2 -3
  732. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  733. package/lib/esm/solid/LinearSweep.js +2 -3
  734. package/lib/esm/solid/LinearSweep.js.map +1 -1
  735. package/lib/esm/solid/RotationalSweep.d.ts +2 -2
  736. package/lib/esm/solid/RotationalSweep.js +2 -2
  737. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  738. package/lib/esm/solid/RuledSweep.js.map +1 -1
  739. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  740. package/lib/esm/solid/Sphere.js.map +1 -1
  741. package/lib/esm/solid/SweepContour.js.map +1 -1
  742. package/lib/esm/solid/TorusPipe.js.map +1 -1
  743. package/lib/esm/topology/ChainMerge.d.ts +1 -1
  744. package/lib/esm/topology/ChainMerge.js +1 -1
  745. package/lib/esm/topology/ChainMerge.js.map +1 -1
  746. package/lib/esm/topology/Graph.js.map +1 -1
  747. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  748. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +1 -0
  749. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  750. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -0
  751. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  752. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  753. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  754. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  755. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  756. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  757. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  758. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  759. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  760. package/lib/esm/topology/MaskManager.js.map +1 -1
  761. package/lib/esm/topology/Merging.d.ts +0 -1
  762. package/lib/esm/topology/Merging.d.ts.map +1 -1
  763. package/lib/esm/topology/Merging.js +49 -46
  764. package/lib/esm/topology/Merging.js.map +1 -1
  765. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  766. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  767. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  768. package/lib/esm/topology/Triangulation.js.map +1 -1
  769. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  770. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH;;;GAGG;AACH,MAAM,OAAO,qCAAqC;IAExC,QAAQ,CAAW;IAC3B,YAAoB,WAAmB;QACrC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAEO,YAAY,CAAS;IAErB,eAAe,CACrB,SAAmB,EACnB,OAAiB,EACjB,IAAc;QACd,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG;YACtC,OAAO,KAAK,CAAC;QACf,MAAM,KAAK,GAAG,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY;YAC7C,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACO,YAAY,CAClB,OAA6B,EAC7B,KAAa,EACb,OAA6B,EAC7B,KAAa,EACb,IAAa,EACb,MAAgB,EAChB,QAAkB,EAClB,IAAa,EACb,MAAgB,EAChB,QAAkB;QAClB,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;gBACjF,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IAEf,CAAC;IACD;;;;;;OAMG;IACK,oBAAoB,CAC1B,MAAoC,EACpC,KAAmC,EACnC,QAAgB,EAChB,IAAa,EACb,KAAe,EACf,QAAkB,EAClB,KAAe,EACf,QAAkB;QAClB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAE,gCAAgC;QAChF,OAAO,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;gBACvD,MAAM;YACR,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;gBACvD,MAAM;YACR,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;oBACvD,MAAM;YACV,CAAC;YACD,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,WAAW,CAAqB;IAChC,WAAW,CAAqB;IAEhC,WAAW,CAAqB;IAChC,WAAW,CAAqB;IAEhC,WAAW,CAAqB;IAChC,WAAW,CAAqB;IAChC,aAAa,CAAqB;IAClC,aAAa,CAAqB;IAC1C;;OAEG;IACK,SAAS,CACf,SAAuC,EACvC,SAAuC,EACvC,OAAgD,EAChD,WAAoB,KAAK;QACzB,SAAS,CAAC,WAAW,EAAE,CAAC;QACxB,SAAS,CAAC,WAAW,EAAE,CAAC;QAExB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAEpD,wCAAwC;YACxC,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5L,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAChM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAEhM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7L,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjM,gCAAgC;YAChC,kCAAkC;YAClC,qFAAqF;YACrF,uEAAuE;YACvE,6BAA6B;YAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpH,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpH,iBAAiB,CAAC,6BAA6B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxF,2HAA2H;YAC3H,2HAA2H;YAE3H,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,QAAQ;oBACV,OAAO;YACX,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,QAAQ;oBACV,OAAO;YACX,CAAC;QACH,CAAC;QACD,8JAA8J;QAC9J,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChM,gIAAgI;gBAChI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,0IAA0I;QAC1I,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChM,+HAA+H;gBAC/H,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAU;IACf,KAAK,CAAU;IACf,SAAS,CAAW;IACpB,SAAS,CAAW;IACpB,OAAO,CAAW;IAClB,OAAO,CAAW;IAC1B;;;;;OAKG;IACI,aAAa,CAClB,OAA6B,EAC7B,OAA6B,EAC7B,OAAgD;QAChD,mDAAmD;QACnD,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC;IACD;;;;;OAKG;IACK,eAAe,CACrB,OAA6B,EAC7B,OAA6B,EAC7B,OAAgD;QAChD,MAAM,SAAS,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACtG,+BAA+B;YAC/B,+BAA+B;YAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9J,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1I,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1I,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9C,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD;;;;;sBAKU;QACZ,CAAC;QACD,gCAAgC;QAChC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,+DAA+D;IACxD,MAAM,CAAC,wBAAwB,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,aAAa,CAAC,kBAAyB,IAAI,CAAC,wBAAwB;QAChF,OAAO,IAAI,qCAAqC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;;AAGH;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAA0B,EAAE,SAAS,GAAG,QAAQ,CAAC,mBAAmB;IACjG,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,IAAI,SAAS,EAAE,CAAC;YACpD,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,aAAa;QAChB,OAAO,IAAI,CAAC;IACd,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAE,GAAG,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;YACxH,EAAE,GAAG,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,oDAAoD;IACpD,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,IAAI,SAAS,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","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*--------------------------------------------------------------------------------------------*/\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { TriangleCandidate } from \"./TriangleCandidate\";\n\n/** @packageDocumentation\n * @module Polyface\n */\n/**\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\n * @internal\n */\nexport class GreedyTriangulationBetweenLineStrings {\n\n private _vector1: Vector3d;\n private constructor(turnRadians: number) {\n this._turnRadians = turnRadians;\n this._xyzA = Point3d.create();\n this._xyzB = Point3d.create();\n this._forwardA = Vector3d.create();\n this._forwardB = Vector3d.create();\n this._vector1 = Vector3d.create();\n this._crossA = Vector3d.create();\n this._crossB = Vector3d.create();\n }\n\n private _turnRadians: number;\n\n private isForwardVector(\n candidate: Vector3d,\n forward: Vector3d,\n perp: Vector3d): boolean {\n if (candidate.dotProduct(forward) <= 0.0)\n return false;\n const theta = candidate.angleFromPerpendicular(perp);\n if (Math.abs(theta.radians) > this._turnRadians)\n return false;\n return true;\n }\n private isPlanarBase(\n pointsA: IndexedXYZCollection,\n baseA: number,\n pointsB: IndexedXYZCollection,\n baseB: number,\n xyzA: Point3d,\n crossA: Vector3d,\n forwardA: Vector3d,\n xyzB: Point3d,\n crossB: Vector3d,\n forwardB: Vector3d): boolean {\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\n this._vector1.crossProduct(forwardA, crossA);\n this._vector1.crossProduct(forwardB, crossB);\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\n return true;\n }\n return false;\n\n }\n /**\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\n * * child interval begins at parent.begin\n * * child interval end initializes at trialEnd and grows.\n * * child must be predefined by caller\n * * Return the accepted interval\n */\n private advanceToPlanarLimit(\n parent: IndexedXYZCollectionInterval,\n child: IndexedXYZCollectionInterval,\n trialEnd: number,\n xyzA: Point3d,\n perpA: Vector3d,\n forwardA: Vector3d,\n perpB: Vector3d,\n forwardB: Vector3d) {\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\n while (child.end < parent.end) {\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\n break;\n if (child.end > 0) {\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n }\n child.end++;\n }\n }\n\n private _triangleA1?: TriangleCandidate;\n private _triangleB1?: TriangleCandidate;\n\n private _triangleA2?: TriangleCandidate;\n private _triangleB2?: TriangleCandidate;\n\n private _triangleA3?: TriangleCandidate;\n private _triangleB3?: TriangleCandidate;\n private _bestTriangle?: TriangleCandidate;\n private _workTriangle?: TriangleCandidate;\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\n * (ASSUME NO DUPLICATES, as in caller.)\n */\n private addGreedy(\n intervalA: IndexedXYZCollectionInterval,\n intervalB: IndexedXYZCollectionInterval,\n handler: (triangle: BarycentricTriangle) => void,\n addOnly1: boolean = false) {\n intervalA.restrictEnd();\n intervalB.restrictEnd();\n\n while (intervalA.length > 1 && intervalB.length > 1) {\n\n // triangles A1 and B1 are always valid.\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\n\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\n // Look at pairs of 2 triangles.\n // (each pair begins with 1 or -1)\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\n // Choose the pair where that (smaller aspect ratio of two) is largest.\n // Advance in that direction.\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\n\n if (this._bestTriangle.id > 0) {\n intervalA.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n } else {\n intervalB.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n }\n }\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\n if (intervalA.isSingleton) {\n while (intervalB.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalB.advanceBegin();\n }\n }\n\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\n if (intervalB.isSingleton) {\n while (intervalA.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalA.advanceBegin();\n }\n }\n }\n\n private _xyzA: Point3d;\n private _xyzB: Point3d;\n private _forwardA: Vector3d;\n private _forwardB: Vector3d;\n private _crossA: Vector3d;\n private _crossB: Vector3d;\n /**\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n public emitTriangles(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n /** Clean up duplicates for the real logic . . . */\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\n }\n /**\n * Run triangle logic on inputs with no duplicates.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n private emitTrianglesGo(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\n // const lA = intervalA.length;\n // const lB = intervalB.length;\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalA.length > 1 && intervalB.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler, true);\n intervalA.advanceToHead(childA);\n intervalB.advanceToHead(childB);\n } else if (intervalA.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalB.length > 1) {\n childA.setFrom(intervalA);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n }\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\n if (intervalA.length > intervalB.length)\n intervalA.advanceBegin();\n else intervalB.advanceBegin();\n } */\n }\n // catch everything else blindly\n this.addGreedy(intervalA, intervalB, handler);\n }\n /** Default angle for considering two vectors to be colinear */\n public static defaultNearColinearAngle = Angle.createDegrees(15);\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\n }\n}\n\n/**\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\n * * If there are duplicates, compress to a new array.\n * @param data\n * @param tolerance\n */\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\n let hasDuplicates = false;\n const n = data.length;\n for (let i = 0; i + 1 < n; i++) {\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\n hasDuplicates = true;\n break;\n }\n }\n if (!hasDuplicates)\n return data;\n const result = new GrowableXYZArray(n);\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\n let i0 = 0;\n for (let i = 1; i < n; i++) {\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\n i0 = i;\n }\n }\n /** enforce exact closure if original was closed. */\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\n result.pop();\n result.pushFromGrowableXYZArray(result, 0);\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.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\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\r\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { TriangleCandidate } from \"./TriangleCandidate\";\r\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n/**\r\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\r\n * @internal\r\n */\r\nexport class GreedyTriangulationBetweenLineStrings {\r\n\r\n private _vector1: Vector3d;\r\n private constructor(turnRadians: number) {\r\n this._turnRadians = turnRadians;\r\n this._xyzA = Point3d.create();\r\n this._xyzB = Point3d.create();\r\n this._forwardA = Vector3d.create();\r\n this._forwardB = Vector3d.create();\r\n this._vector1 = Vector3d.create();\r\n this._crossA = Vector3d.create();\r\n this._crossB = Vector3d.create();\r\n }\r\n\r\n private _turnRadians: number;\r\n\r\n private isForwardVector(\r\n candidate: Vector3d,\r\n forward: Vector3d,\r\n perp: Vector3d): boolean {\r\n if (candidate.dotProduct(forward) <= 0.0)\r\n return false;\r\n const theta = candidate.angleFromPerpendicular(perp);\r\n if (Math.abs(theta.radians) > this._turnRadians)\r\n return false;\r\n return true;\r\n }\r\n private isPlanarBase(\r\n pointsA: IndexedXYZCollection,\r\n baseA: number,\r\n pointsB: IndexedXYZCollection,\r\n baseB: number,\r\n xyzA: Point3d,\r\n crossA: Vector3d,\r\n forwardA: Vector3d,\r\n xyzB: Point3d,\r\n crossB: Vector3d,\r\n forwardB: Vector3d): boolean {\r\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\r\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\r\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\r\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\r\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\r\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\r\n this._vector1.crossProduct(forwardA, crossA);\r\n this._vector1.crossProduct(forwardB, crossB);\r\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\r\n return true;\r\n }\r\n return false;\r\n\r\n }\r\n /**\r\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\r\n * * child interval begins at parent.begin\r\n * * child interval end initializes at trialEnd and grows.\r\n * * child must be predefined by caller\r\n * * Return the accepted interval\r\n */\r\n private advanceToPlanarLimit(\r\n parent: IndexedXYZCollectionInterval,\r\n child: IndexedXYZCollectionInterval,\r\n trialEnd: number,\r\n xyzA: Point3d,\r\n perpA: Vector3d,\r\n forwardA: Vector3d,\r\n perpB: Vector3d,\r\n forwardB: Vector3d) {\r\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\r\n while (child.end < parent.end) {\r\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\r\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\r\n break;\r\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\r\n break;\r\n if (child.end > 0) {\r\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\r\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\r\n break;\r\n }\r\n child.end++;\r\n }\r\n }\r\n\r\n private _triangleA1?: TriangleCandidate;\r\n private _triangleB1?: TriangleCandidate;\r\n\r\n private _triangleA2?: TriangleCandidate;\r\n private _triangleB2?: TriangleCandidate;\r\n\r\n private _triangleA3?: TriangleCandidate;\r\n private _triangleB3?: TriangleCandidate;\r\n private _bestTriangle?: TriangleCandidate;\r\n private _workTriangle?: TriangleCandidate;\r\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\r\n * (ASSUME NO DUPLICATES, as in caller.)\r\n */\r\n private addGreedy(\r\n intervalA: IndexedXYZCollectionInterval,\r\n intervalB: IndexedXYZCollectionInterval,\r\n handler: (triangle: BarycentricTriangle) => void,\r\n addOnly1: boolean = false) {\r\n intervalA.restrictEnd();\r\n intervalB.restrictEnd();\r\n\r\n while (intervalA.length > 1 && intervalB.length > 1) {\r\n\r\n // triangles A1 and B1 are always valid.\r\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\r\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\r\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\r\n\r\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\r\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\r\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\r\n // Look at pairs of 2 triangles.\r\n // (each pair begins with 1 or -1)\r\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\r\n // Choose the pair where that (smaller aspect ratio of two) is largest.\r\n // Advance in that direction.\r\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\r\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\r\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\r\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\r\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\r\n\r\n if (this._bestTriangle.id > 0) {\r\n intervalA.advanceBegin();\r\n handler(this._bestTriangle);\r\n if (addOnly1)\r\n return;\r\n } else {\r\n intervalB.advanceBegin();\r\n handler(this._bestTriangle);\r\n if (addOnly1)\r\n return;\r\n }\r\n }\r\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\r\n if (intervalA.isSingleton) {\r\n while (intervalB.length >= 2) {\r\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\r\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\r\n handler(this._workTriangle);\r\n intervalB.advanceBegin();\r\n }\r\n }\r\n\r\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\r\n if (intervalB.isSingleton) {\r\n while (intervalA.length >= 2) {\r\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\r\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\r\n handler(this._workTriangle);\r\n intervalA.advanceBegin();\r\n }\r\n }\r\n }\r\n\r\n private _xyzA: Point3d;\r\n private _xyzB: Point3d;\r\n private _forwardA: Vector3d;\r\n private _forwardB: Vector3d;\r\n private _crossA: Vector3d;\r\n private _crossB: Vector3d;\r\n /**\r\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\r\n * @param pointsA\r\n * @param pointsB\r\n * @param handler\r\n */\r\n public emitTriangles(\r\n pointsA: IndexedXYZCollection,\r\n pointsB: IndexedXYZCollection,\r\n handler: (triangle: BarycentricTriangle) => void) {\r\n /** Clean up duplicates for the real logic . . . */\r\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\r\n }\r\n /**\r\n * Run triangle logic on inputs with no duplicates.\r\n * @param pointsA\r\n * @param pointsB\r\n * @param handler\r\n */\r\n private emitTrianglesGo(\r\n pointsA: IndexedXYZCollection,\r\n pointsB: IndexedXYZCollection,\r\n handler: (triangle: BarycentricTriangle) => void) {\r\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\r\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\r\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\r\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\r\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\r\n // const lA = intervalA.length;\r\n // const lB = intervalB.length;\r\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\r\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (intervalA.length > 1 && intervalB.length > 1) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler, true);\r\n intervalA.advanceToHead(childA);\r\n intervalB.advanceToHead(childB);\r\n } else if (intervalA.length > 1) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (intervalB.length > 1) {\r\n childA.setFrom(intervalA);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n }\r\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\r\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\r\n if (intervalA.length > intervalB.length)\r\n intervalA.advanceBegin();\r\n else intervalB.advanceBegin();\r\n } */\r\n }\r\n // catch everything else blindly\r\n this.addGreedy(intervalA, intervalB, handler);\r\n }\r\n /** Default angle for considering two vectors to be colinear */\r\n public static defaultNearColinearAngle = Angle.createDegrees(15);\r\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\r\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\r\n }\r\n}\r\n\r\n/**\r\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\r\n * * If there are duplicates, compress to a new array.\r\n * @param data\r\n * @param tolerance\r\n */\r\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\r\n let hasDuplicates = false;\r\n const n = data.length;\r\n for (let i = 0; i + 1 < n; i++) {\r\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\r\n hasDuplicates = true;\r\n break;\r\n }\r\n }\r\n if (!hasDuplicates)\r\n return data;\r\n const result = new GrowableXYZArray(n);\r\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\r\n let i0 = 0;\r\n for (let i = 1; i < n; i++) {\r\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\r\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\r\n i0 = i;\r\n }\r\n }\r\n /** enforce exact closure if original was closed. */\r\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\r\n result.pop();\r\n result.pushFromGrowableXYZArray(result, 0);\r\n }\r\n return result;\r\n}\r\n"]}
@@ -2,60 +2,76 @@
2
2
  * @module Polyface
3
3
  */
4
4
  /**
5
- * * For boundary sorting, an edge is a (packed!) Float64Array.
6
- * * Fixed entry positions are:
7
- * * [0] is start vertex index (in CCW order around its facet)
8
- * * [1] is end vertex index (in CCW order around its facet)
9
- * * [2] is facet index (or another number to associate with this edge).
5
+ * Represent an [[IndexedPolyface]] edge as:
6
+ * * vertex start index and vertex end index (CCW order around its facet)
7
+ * * an additional number to associate with the edge (e.g., facet index)
8
+ * @public
10
9
  */
11
- export declare class SortableEdge extends Float64Array {
10
+ export declare class SortableEdge {
11
+ private _v;
12
+ private _a;
13
+ /** Constructor. */
14
+ constructor(startVertex: number, endVertex: number, facetIndex: number);
15
+ /** Clone the edge. */
16
+ clone(): SortableEdge;
12
17
  /** Return the vertex index that appears first in the order stored. */
13
- get vertexIndexA(): number;
18
+ get startVertex(): number;
14
19
  /** Return the vertex index that appears second in the order stored. */
15
- get vertexIndexB(): number;
20
+ get endVertex(): number;
16
21
  /**
17
22
  * Return the facet index.
18
23
  * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
19
24
  */
20
25
  get facetIndex(): number;
21
- /** return true if vertexIndexA is less than vertexIndexB. */
26
+ /** return true if `startVertex` is less than `endVertex`. */
22
27
  get isLowHigh(): boolean;
23
28
  /** Return the vertex index with lower numeric value. */
24
- get lowVertexIndex(): number;
29
+ get lowVertex(): number;
25
30
  /** Return the vertex index with higher numeric value. */
26
- get highVertexIndex(): number;
27
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
31
+ get highVertex(): number;
32
+ /** Return true if edgeA and edgeB traverse the same edge in the same direction. */
33
+ private static areSameEdge;
34
+ /** Return true if edgeA and edgeB traverse the same edge in opposite directions. */
28
35
  static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
29
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
36
+ /** Return true if edgeA and edgeB traverse the same edge in the same or opposite directions. */
30
37
  static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
31
38
  /**
32
- * Return numeric relationship of edgeA and edgeB:
33
- * * 1 if they share start and end in the same order.
34
- * * -1 if they share start and end in reversed order.
39
+ * Return numeric identifier for the relationship between edgeA and edgeB:
40
+ * * 1 if they share start and end vertex indices in the same order.
41
+ * * -1 if they share start and end vertex indices in reversed order.
35
42
  * * 0 otherwise.
36
43
  */
37
44
  static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number;
45
+ /** Whether the start and end vertex indices are equal. */
38
46
  get isNullEdge(): boolean;
39
47
  /**
40
48
  * Lexical comparison of two edges.
41
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
42
- * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
49
+ * * If the edges have the same vertex index pair (in same or opposite order) they will end up adjacent in a sort.
43
50
  * @param edgeA first edge
44
51
  * @param edgeB second edge
45
52
  */
46
53
  static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number;
47
- constructor(vertexA: number, vertexB: number, facetIndex: number);
54
+ /** Return the edge data as a JSON array. */
48
55
  toJSON(): any;
56
+ /** Return the edge cluster in JSON format. */
49
57
  static clusterToJSON(data: SortableEdgeCluster): any;
58
+ /** Return the edge cluster array in JSON format. */
50
59
  static clusterArrayToJSON(data: SortableEdgeCluster[]): any[];
51
60
  }
61
+ /**
62
+ * Union type for a single [[SortableEdge]] or a (matched) array of them.
63
+ * @public
64
+ */
52
65
  export type SortableEdgeCluster = SortableEdge | SortableEdge[];
53
66
  /**
54
- * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
55
- * (such as testing for closed mesh).
67
+ * An IndexedEdgeMatcher carries an array of edge start and end indices for sorting and subsequent analyses,
68
+ * such as testing for closed mesh.
69
+ * @public
56
70
  */
57
71
  export declare class IndexedEdgeMatcher {
72
+ /** The array of edges to be sorted. */
58
73
  edges: SortableEdge[];
74
+ /** Constructor. Call [[addEdge]] or [[addPath]] to populate `edges`. */
59
75
  constructor();
60
76
  /**
61
77
  * Push a new edge.
@@ -66,32 +82,31 @@ export declare class IndexedEdgeMatcher {
66
82
  */
67
83
  addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge;
68
84
  /**
69
- * Push edges all around a facet, returning to vertexArray[0].
70
- * @param vertexArray array of vertex indices around facet
71
- * @param facetIndex value to carry along during matching
85
+ * Push edges along a path.
86
+ * * Typically used to add edges around a facet.
87
+ * @param vertexIndices array of vertex indices along an open or closed path.
88
+ * @param facetIndex value to set on each edge pushed.
72
89
  * @param closeLoop true to add an edge from last to first vertex.
73
90
  */
74
- addPath(vertexArray: number[], facetIndex: number, closeLoop?: boolean): void;
75
- /** Sort the edge index array. */
91
+ addPath(vertexIndices: number[], facetIndex: number, closeLoop: boolean): void;
92
+ /** Sort the edges. */
76
93
  sort(): void;
77
94
  /** Create a single or compound SortableEdgeCluster in dest. */
78
95
  private collectSortableEdgeCluster;
79
96
  /**
80
- * Sort the edges, and look for three categories of paired edges:
81
- * * caller must allocate all result arrays of interest.
82
- * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
83
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
97
+ * Sort the edges, and collect up to four categories of edges: manifold pairs, singletons, null edges,
98
+ * and everything else.
99
+ * * Caller should allocate arrays of interest.
100
+ * * Any combination of the arrays may be `undefined`, indicating that category is to be ignored.
101
+ * * Any combination of the arrays may be aliased as the same target, in which case the aliased categories are
84
102
  * merged into the target.
85
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
86
- * `allOther`, create `const allOther = []` as an empty array and call
87
- * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
88
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
89
- * edges adjacent to two facets in opposing directions.
90
- * @param singletons optional array to receive edges that are simple boundary edges.
91
- * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
92
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
93
- * but not a simple directed pair.
103
+ * * For instance, to ignore manifold pairs and collect all other edges in a single array:
104
+ * `const foo = []; matcher.sortAndCollectClusters(undefined, foo, foo, foo);`
105
+ * @param manifoldPairs array to receive pairs of properly mated edges, i.e. mesh interior edges.
106
+ * @param singletons array to receive edges that have no partner, i.e., mesh boundary edges.
107
+ * @param nullEdges array to receive arrays of matched null edges, for which start === end vertex index.
108
+ * @param allOtherClusters array to receive arrays of edges that are partners in an undirected, non-manifold sense.
94
109
  */
95
- sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
110
+ sortAndCollectClusters(manifoldPairs?: SortableEdgeCluster[], singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
96
111
  }
97
112
  //# sourceMappingURL=IndexedEdgeMatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD;;;OAGG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,6DAA6D;IAC7D,IAAW,SAAS,IAAI,OAAO,CAE9B;IACD,wDAAwD;IACxD,IAAW,cAAc,IAAI,MAAM,CAElC;IACD,yDAAyD;IACzD,IAAW,eAAe,IAAI,MAAM,CAEnC;IACD,iGAAiG;WACnF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGpF,8GAA8G;WAChG,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;;OAKG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAE/B;IACD;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;gBAiBrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMhE,MAAM,IAAI,GAAG;WAGN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAM7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AACD,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;;GAGG;AACH,qBAAa,kBAAkB;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;;IAK7B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;;OAKG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IASnF,iCAAiC;IAC1B,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAYlC;;;;;;;;;;;;;;;OAeG;IACI,sBAAsB,CAC3B,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAChD,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,SAAS,CAAC,EAAE,mBAAmB,EAAE,EACjC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GACvC,IAAI;CA0BR"}
1
+ {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,EAAE,CAAS;IAEnB,mBAAmB;gBACA,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI7E,sBAAsB;IACf,KAAK,IAAI,YAAY;IAG5B,uEAAuE;IACvE,IAAW,WAAW,IAAI,MAAM,CAE/B;IACD,wEAAwE;IACxE,IAAW,SAAS,IAAI,MAAM,CAE7B;IACD;;;OAGG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,6DAA6D;IAC7D,IAAW,SAAS,IAAI,OAAO,CAE9B;IACD,wDAAwD;IACxD,IAAW,SAAS,IAAI,MAAM,CAE7B;IACD,yDAAyD;IACzD,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,mFAAmF;IACnF,OAAO,CAAC,MAAM,CAAC,WAAW;IAG1B,oFAAoF;WACtE,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGpF,gGAAgG;WAClF,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;;OAKG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAOnF,0DAA0D;IAC1D,IAAW,UAAU,IAAI,OAAO,CAE/B;IACD;;;;;OAKG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAiBxE,4CAA4C;IACrC,MAAM,IAAI,GAAG;IAGpB,+CAA+C;WACjC,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;IAO3D,oDAAoD;WACtC,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAEhE;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,uCAAuC;IAChC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC7B,wEAAwE;;IAIxE;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;;;OAMG;IACI,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;IAS9E,sBAAsB;IACf,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAYlC;;;;;;;;;;;;;OAaG;IACI,sBAAsB,CAC3B,aAAa,CAAC,EAAE,mBAAmB,EAAE,EACrC,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,SAAS,CAAC,EAAE,mBAAmB,EAAE,EACjC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GACvC,IAAI;CA6BR"}
@@ -6,97 +6,107 @@
6
6
  * @module Polyface
7
7
  */
8
8
  /**
9
- * * For boundary sorting, an edge is a (packed!) Float64Array.
10
- * * Fixed entry positions are:
11
- * * [0] is start vertex index (in CCW order around its facet)
12
- * * [1] is end vertex index (in CCW order around its facet)
13
- * * [2] is facet index (or another number to associate with this edge).
9
+ * Represent an [[IndexedPolyface]] edge as:
10
+ * * vertex start index and vertex end index (CCW order around its facet)
11
+ * * an additional number to associate with the edge (e.g., facet index)
12
+ * @public
14
13
  */
15
- export class SortableEdge extends Float64Array {
14
+ export class SortableEdge {
15
+ _v;
16
+ _a;
17
+ /** Constructor. */
18
+ constructor(startVertex, endVertex, facetIndex) {
19
+ this._v = [startVertex, endVertex];
20
+ this._a = facetIndex;
21
+ }
22
+ /** Clone the edge. */
23
+ clone() {
24
+ return new SortableEdge(this._v[0], this._v[1], this._a);
25
+ }
16
26
  /** Return the vertex index that appears first in the order stored. */
17
- get vertexIndexA() {
18
- return this[0];
27
+ get startVertex() {
28
+ return this._v[0];
19
29
  }
20
30
  /** Return the vertex index that appears second in the order stored. */
21
- get vertexIndexB() {
22
- return this[1];
31
+ get endVertex() {
32
+ return this._v[1];
23
33
  }
24
34
  /**
25
35
  * Return the facet index.
26
36
  * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
27
37
  */
28
38
  get facetIndex() {
29
- return this[2];
39
+ return this._a;
30
40
  }
31
- /** return true if vertexIndexA is less than vertexIndexB. */
41
+ /** return true if `startVertex` is less than `endVertex`. */
32
42
  get isLowHigh() {
33
- return this[0] < this[1];
43
+ return this._v[0] < this._v[1];
34
44
  }
35
45
  /** Return the vertex index with lower numeric value. */
36
- get lowVertexIndex() {
37
- return this[0] < this[1] ? this[0] : this[1];
46
+ get lowVertex() {
47
+ return this.isLowHigh ? this._v[0] : this._v[1];
38
48
  }
39
49
  /** Return the vertex index with higher numeric value. */
40
- get highVertexIndex() {
41
- return this[0] > this[1] ? this[0] : this[1];
50
+ get highVertex() {
51
+ return this.isLowHigh ? this._v[1] : this._v[0];
52
+ }
53
+ /** Return true if edgeA and edgeB traverse the same edge in the same direction. */
54
+ static areSameEdge(edgeA, edgeB) {
55
+ return edgeA._v[0] === edgeB._v[0] && edgeA._v[1] === edgeB._v[1];
42
56
  }
43
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
57
+ /** Return true if edgeA and edgeB traverse the same edge in opposite directions. */
44
58
  static areDirectedPartners(edgeA, edgeB) {
45
- return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];
59
+ return edgeA._v[0] === edgeB._v[1] && edgeA._v[1] === edgeB._v[0];
46
60
  }
47
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
61
+ /** Return true if edgeA and edgeB traverse the same edge in the same or opposite directions. */
48
62
  static areUndirectedPartners(edgeA, edgeB) {
49
- return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));
63
+ return this.areSameEdge(edgeA, edgeB) || this.areDirectedPartners(edgeA, edgeB);
50
64
  }
51
65
  /**
52
- * Return numeric relationship of edgeA and edgeB:
53
- * * 1 if they share start and end in the same order.
54
- * * -1 if they share start and end in reversed order.
66
+ * Return numeric identifier for the relationship between edgeA and edgeB:
67
+ * * 1 if they share start and end vertex indices in the same order.
68
+ * * -1 if they share start and end vertex indices in reversed order.
55
69
  * * 0 otherwise.
56
70
  */
57
71
  static relativeOrientation(edgeA, edgeB) {
58
- if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1])
72
+ if (this.areSameEdge(edgeA, edgeB))
59
73
  return 1;
60
- if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0])
74
+ if (this.areDirectedPartners(edgeA, edgeB))
61
75
  return -1;
62
76
  return 0;
63
77
  }
78
+ /** Whether the start and end vertex indices are equal. */
64
79
  get isNullEdge() {
65
- return this[0] === this[1];
80
+ return this._v[0] === this._v[1];
66
81
  }
67
82
  /**
68
83
  * Lexical comparison of two edges.
69
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
70
- * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
84
+ * * If the edges have the same vertex index pair (in same or opposite order) they will end up adjacent in a sort.
71
85
  * @param edgeA first edge
72
86
  * @param edgeB second edge
73
87
  */
74
88
  static lessThan(edgeA, edgeB) {
75
89
  // primary compare is based on indirect indices
76
- const lowA = edgeA.lowVertexIndex;
77
- const lowB = edgeB.lowVertexIndex;
90
+ const lowA = edgeA.lowVertex;
91
+ const lowB = edgeB.lowVertex;
78
92
  if (lowA < lowB)
79
93
  return -1;
80
94
  if (lowB < lowA)
81
95
  return 1;
82
- const highA = edgeA.highVertexIndex;
83
- const highB = edgeB.highVertexIndex;
96
+ const highA = edgeA.highVertex;
97
+ const highB = edgeB.highVertex;
84
98
  if (highA < highB)
85
99
  return -1;
86
100
  if (highB < highA)
87
101
  return 1;
88
102
  // undirected indices match ... use directed vertexIndexA
89
- return edgeA.vertexIndexA - edgeB.vertexIndexA;
90
- }
91
- constructor(vertexA, vertexB, facetIndex) {
92
- super(3);
93
- this[0] = vertexA;
94
- this[1] = vertexB;
95
- this[2] = facetIndex;
103
+ return edgeA.startVertex - edgeB.startVertex;
96
104
  }
105
+ /** Return the edge data as a JSON array. */
97
106
  toJSON() {
98
- return [this[0], this[1], this[2]];
107
+ return [this._v[0], this._v[1], this._a];
99
108
  }
109
+ /** Return the edge cluster in JSON format. */
100
110
  static clusterToJSON(data) {
101
111
  if (data instanceof SortableEdge)
102
112
  return data.toJSON();
@@ -104,6 +114,7 @@ export class SortableEdge extends Float64Array {
104
114
  for (const edge of data)
105
115
  result.push(edge.toJSON());
106
116
  }
117
+ /** Return the edge cluster array in JSON format. */
107
118
  static clusterArrayToJSON(data) {
108
119
  const result = [];
109
120
  for (const cluster of data)
@@ -112,11 +123,14 @@ export class SortableEdge extends Float64Array {
112
123
  }
113
124
  }
114
125
  /**
115
- * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
116
- * (such as testing for closed mesh).
126
+ * An IndexedEdgeMatcher carries an array of edge start and end indices for sorting and subsequent analyses,
127
+ * such as testing for closed mesh.
128
+ * @public
117
129
  */
118
130
  export class IndexedEdgeMatcher {
131
+ /** The array of edges to be sorted. */
119
132
  edges;
133
+ /** Constructor. Call [[addEdge]] or [[addPath]] to populate `edges`. */
120
134
  constructor() {
121
135
  this.edges = [];
122
136
  }
@@ -133,22 +147,22 @@ export class IndexedEdgeMatcher {
133
147
  return edge;
134
148
  }
135
149
  /**
136
- * Push edges all around a facet, returning to vertexArray[0].
137
- * @param vertexArray array of vertex indices around facet
138
- * @param facetIndex value to carry along during matching
150
+ * Push edges along a path.
151
+ * * Typically used to add edges around a facet.
152
+ * @param vertexIndices array of vertex indices along an open or closed path.
153
+ * @param facetIndex value to set on each edge pushed.
139
154
  * @param closeLoop true to add an edge from last to first vertex.
140
155
  */
141
- addPath(vertexArray, facetIndex, closeLoop = true) {
142
- if (vertexArray.length === 0)
156
+ addPath(vertexIndices, facetIndex, closeLoop) {
157
+ if (vertexIndices.length === 0)
143
158
  return;
144
- const m = vertexArray.length - 1;
145
- for (let i = 0; i < m; i++) {
146
- this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);
147
- }
159
+ const m = vertexIndices.length - 1;
160
+ for (let i = 0; i < m; i++)
161
+ this.addEdge(vertexIndices[i], vertexIndices[i + 1], facetIndex);
148
162
  if (closeLoop)
149
- this.addEdge(vertexArray[m], vertexArray[0], facetIndex);
163
+ this.addEdge(vertexIndices[m], vertexIndices[0], facetIndex);
150
164
  }
151
- /** Sort the edge index array. */
165
+ /** Sort the edges. */
152
166
  sort() {
153
167
  this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));
154
168
  }
@@ -167,20 +181,18 @@ export class IndexedEdgeMatcher {
167
181
  }
168
182
  }
169
183
  /**
170
- * Sort the edges, and look for three categories of paired edges:
171
- * * caller must allocate all result arrays of interest.
172
- * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
173
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
184
+ * Sort the edges, and collect up to four categories of edges: manifold pairs, singletons, null edges,
185
+ * and everything else.
186
+ * * Caller should allocate arrays of interest.
187
+ * * Any combination of the arrays may be `undefined`, indicating that category is to be ignored.
188
+ * * Any combination of the arrays may be aliased as the same target, in which case the aliased categories are
174
189
  * merged into the target.
175
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
176
- * `allOther`, create `const allOther = []` as an empty array and call
177
- * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
178
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
179
- * edges adjacent to two facets in opposing directions.
180
- * @param singletons optional array to receive edges that are simple boundary edges.
181
- * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
182
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
183
- * but not a simple directed pair.
190
+ * * For instance, to ignore manifold pairs and collect all other edges in a single array:
191
+ * `const foo = []; matcher.sortAndCollectClusters(undefined, foo, foo, foo);`
192
+ * @param manifoldPairs array to receive pairs of properly mated edges, i.e. mesh interior edges.
193
+ * @param singletons array to receive edges that have no partner, i.e., mesh boundary edges.
194
+ * @param nullEdges array to receive arrays of matched null edges, for which start === end vertex index.
195
+ * @param allOtherClusters array to receive arrays of edges that are partners in an undirected, non-manifold sense.
184
196
  */
185
197
  sortAndCollectClusters(manifoldPairs, singletons, nullEdges, allOtherClusters) {
186
198
  this.sort();
@@ -201,18 +213,14 @@ export class IndexedEdgeMatcher {
201
213
  SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
202
214
  clusterLength++;
203
215
  }
204
- if (this.edges[index0].isNullEdge) {
216
+ if (this.edges[index0].isNullEdge)
205
217
  this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);
206
- }
207
- else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {
218
+ else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1]))
208
219
  this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);
209
- }
210
- else if (clusterLength === 1) {
220
+ else if (clusterLength === 1)
211
221
  this.collectSortableEdgeCluster(index0, index0 + 1, singletons);
212
- }
213
- else {
222
+ else
214
223
  this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);
215
- }
216
224
  }
217
225
  }
218
226
  }