@itwin/core-geometry 5.0.0-dev.5 → 5.0.0-dev.52

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 (696) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.js +35 -35
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  12. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  14. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  18. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  19. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  20. package/lib/cjs/bspline/KnotVector.d.ts +8 -6
  21. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  22. package/lib/cjs/bspline/KnotVector.js +14 -8
  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 +2 -2
  26. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  27. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  28. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  29. package/lib/cjs/clipping/ClipPlane.js +1 -1
  30. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  31. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  32. package/lib/cjs/clipping/ClipUtils.js +1 -1
  33. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  34. package/lib/cjs/clipping/ClipVector.js +1 -1
  35. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  36. package/lib/cjs/clipping/ConvexClipPlaneSet.js +3 -3
  37. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  38. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -1
  39. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  40. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  41. package/lib/cjs/core-geometry.d.ts +1 -0
  42. package/lib/cjs/core-geometry.d.ts.map +1 -1
  43. package/lib/cjs/core-geometry.js +1 -0
  44. package/lib/cjs/core-geometry.js.map +1 -1
  45. package/lib/cjs/curve/Arc3d.d.ts +15 -3
  46. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  47. package/lib/cjs/curve/Arc3d.js +37 -18
  48. package/lib/cjs/curve/Arc3d.js.map +1 -1
  49. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  50. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  51. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  52. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  53. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +4 -8
  54. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  55. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  56. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  57. package/lib/cjs/curve/CurveCollection.js +22 -0
  58. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  59. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  60. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  61. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  62. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  63. package/lib/cjs/curve/CurveFactory.js +213 -135
  64. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  65. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  66. package/lib/cjs/curve/CurveOps.js.map +1 -1
  67. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  68. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  69. package/lib/cjs/curve/CurvePrimitive.js +7 -10
  70. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  71. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  72. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  73. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  74. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  75. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  76. package/lib/cjs/curve/LineString3d.js +5 -5
  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.js.map +1 -1
  85. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  86. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  87. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  88. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  89. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  90. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  91. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  92. package/lib/cjs/curve/RegionOps.js.map +1 -1
  93. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +1 -1
  94. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  95. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  96. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  97. package/lib/cjs/curve/StrokeOptions.js +1 -1
  98. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  99. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  100. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  105. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +5 -5
  107. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  108. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
  109. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
  111. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +5 -5
  115. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +4 -4
  121. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  124. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  125. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  126. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  127. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  128. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  129. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  130. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +2 -2
  131. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  132. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  133. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  134. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  135. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  136. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  137. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  138. package/lib/cjs/geometry3d/Angle.js +16 -16
  139. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  140. package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -1
  141. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  142. package/lib/cjs/geometry3d/AngleSweep.js +1 -1
  143. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  144. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  145. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  146. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  147. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  148. package/lib/cjs/geometry3d/FrameBuilder.js +4 -4
  149. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  150. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  151. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  152. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  153. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  154. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  155. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/GrowableXYArray.js +0 -7
  157. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  158. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  159. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/GrowableXYZArray.js +54 -16
  161. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  162. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  163. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  164. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  165. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  166. package/lib/cjs/geometry3d/IndexedXYZCollection.js +24 -10
  167. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  168. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  169. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  170. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  171. package/lib/cjs/geometry3d/Matrix3d.js +11 -12
  172. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  173. package/lib/cjs/geometry3d/OrderedRotationAngles.js +2 -2
  174. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  175. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  176. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  177. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  178. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  179. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  180. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +1 -1
  181. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  182. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +6 -6
  183. package/lib/cjs/geometry3d/Point3dVector3d.js +6 -6
  184. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  185. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  186. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  187. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  188. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  189. package/lib/cjs/geometry3d/PolygonOps.js +25 -25
  190. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  191. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  192. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  193. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  194. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  195. package/lib/cjs/geometry3d/PolylineOps.js +9 -5
  196. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  197. package/lib/cjs/geometry3d/Range.js +4 -4
  198. package/lib/cjs/geometry3d/Range.js.map +1 -1
  199. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  200. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  201. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  202. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  203. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  204. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  205. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  206. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  207. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  208. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  209. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  210. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  211. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  212. package/lib/cjs/geometry4d/MomentData.js +62 -64
  213. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  214. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  215. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  216. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  217. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  218. package/lib/cjs/numerics/ClusterableArray.js +13 -13
  219. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  220. package/lib/cjs/numerics/Complex.js.map +1 -1
  221. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  222. package/lib/cjs/numerics/Newton.js.map +1 -1
  223. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  224. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  225. package/lib/cjs/numerics/PolarData.js +1 -1
  226. package/lib/cjs/numerics/PolarData.js.map +1 -1
  227. package/lib/cjs/numerics/Polynomials.js +26 -26
  228. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  229. package/lib/cjs/numerics/Quadrature.js +20 -20
  230. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  231. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  232. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  233. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  234. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  235. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  236. package/lib/cjs/polyface/AuxData.js.map +1 -1
  237. package/lib/cjs/polyface/BoxTopology.js +67 -67
  238. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  239. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  240. package/lib/cjs/polyface/FacetFaceData.js +1 -1
  241. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  242. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  243. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  244. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +2 -2
  245. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  246. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  247. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  248. package/lib/cjs/polyface/IndexedEdgeMatcher.js +62 -33
  249. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  250. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  251. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  252. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +3 -2
  253. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  254. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  255. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  256. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +349 -0
  257. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  258. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  259. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  260. package/lib/cjs/polyface/Polyface.js +55 -10
  261. package/lib/cjs/polyface/Polyface.js.map +1 -1
  262. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  263. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  264. package/lib/cjs/polyface/PolyfaceBuilder.js +36 -79
  265. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  266. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  267. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  268. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  269. package/lib/cjs/polyface/PolyfaceData.js +24 -5
  270. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  271. package/lib/cjs/polyface/PolyfaceQuery.js +7 -7
  272. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  273. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  274. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  275. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  276. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  277. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  278. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  279. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  280. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  281. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  282. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  283. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  284. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  285. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  286. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  287. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  288. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  289. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  290. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  291. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  292. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  293. package/lib/cjs/serialization/BGFBReader.js +22 -22
  294. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  295. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  296. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  297. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  298. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  299. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  300. package/lib/cjs/serialization/GeometrySamples.js +112 -112
  301. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  302. package/lib/cjs/serialization/IModelJsonSchema.d.ts +1 -2
  303. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  304. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  305. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  306. package/lib/cjs/solid/Box.js.map +1 -1
  307. package/lib/cjs/solid/Cone.js.map +1 -1
  308. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  309. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  310. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  311. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  312. package/lib/cjs/solid/RuledSweep.js +30 -23
  313. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  314. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  315. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  316. package/lib/cjs/solid/SolidPrimitive.js +8 -5
  317. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  318. package/lib/cjs/solid/Sphere.js.map +1 -1
  319. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  320. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  321. package/lib/cjs/solid/SweepContour.js +24 -15
  322. package/lib/cjs/solid/SweepContour.js.map +1 -1
  323. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  324. package/lib/cjs/topology/ChainMerge.js +4 -4
  325. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  326. package/lib/cjs/topology/Graph.js +5 -5
  327. package/lib/cjs/topology/Graph.js.map +1 -1
  328. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  329. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +1 -1
  330. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  331. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  332. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +2 -2
  333. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  334. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  335. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  336. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  337. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  338. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  339. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  340. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  341. package/lib/cjs/topology/MaskManager.js.map +1 -1
  342. package/lib/cjs/topology/Merging.js.map +1 -1
  343. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  344. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  345. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  346. package/lib/cjs/topology/Triangulation.js +11 -11
  347. package/lib/cjs/topology/Triangulation.js.map +1 -1
  348. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  349. package/lib/esm/Constant.js +17 -17
  350. package/lib/esm/Constant.js.map +1 -1
  351. package/lib/esm/Geometry.js +35 -35
  352. package/lib/esm/Geometry.js.map +1 -1
  353. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  354. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  355. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  356. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  357. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  358. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  359. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  360. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  361. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  362. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  363. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  364. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  365. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  366. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  367. package/lib/esm/bspline/KnotVector.d.ts +8 -6
  368. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  369. package/lib/esm/bspline/KnotVector.js +14 -8
  370. package/lib/esm/bspline/KnotVector.js.map +1 -1
  371. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  372. package/lib/esm/clipping/AlternatingConvexClipTree.js +2 -2
  373. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  374. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  375. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  376. package/lib/esm/clipping/ClipPlane.js +1 -1
  377. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  378. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  379. package/lib/esm/clipping/ClipUtils.js +1 -1
  380. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  381. package/lib/esm/clipping/ClipVector.js +1 -1
  382. package/lib/esm/clipping/ClipVector.js.map +1 -1
  383. package/lib/esm/clipping/ConvexClipPlaneSet.js +3 -3
  384. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  385. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -1
  386. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  387. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  388. package/lib/esm/core-geometry.d.ts +1 -0
  389. package/lib/esm/core-geometry.d.ts.map +1 -1
  390. package/lib/esm/core-geometry.js +1 -0
  391. package/lib/esm/core-geometry.js.map +1 -1
  392. package/lib/esm/curve/Arc3d.d.ts +15 -3
  393. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  394. package/lib/esm/curve/Arc3d.js +37 -18
  395. package/lib/esm/curve/Arc3d.js.map +1 -1
  396. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  397. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  398. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  399. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  400. package/lib/esm/curve/CurveChainWithDistanceIndex.js +4 -8
  401. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  402. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  403. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  404. package/lib/esm/curve/CurveCollection.js +22 -0
  405. package/lib/esm/curve/CurveCollection.js.map +1 -1
  406. package/lib/esm/curve/CurveCurve.js.map +1 -1
  407. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  408. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  409. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  410. package/lib/esm/curve/CurveFactory.js +213 -135
  411. package/lib/esm/curve/CurveFactory.js.map +1 -1
  412. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  413. package/lib/esm/curve/CurveOps.js.map +1 -1
  414. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  415. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  416. package/lib/esm/curve/CurvePrimitive.js +7 -10
  417. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  418. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  419. package/lib/esm/curve/CurveTypes.js.map +1 -1
  420. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  421. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  422. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  423. package/lib/esm/curve/LineString3d.js +5 -5
  424. package/lib/esm/curve/LineString3d.js.map +1 -1
  425. package/lib/esm/curve/Loop.js.map +1 -1
  426. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  427. package/lib/esm/curve/ParityRegion.js.map +1 -1
  428. package/lib/esm/curve/Path.js.map +1 -1
  429. package/lib/esm/curve/PointString3d.js.map +1 -1
  430. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  431. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  432. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  433. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  434. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  435. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  436. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  437. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  438. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  439. package/lib/esm/curve/RegionOps.js.map +1 -1
  440. package/lib/esm/curve/RegionOpsClassificationSweeps.js +1 -1
  441. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  442. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  443. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  444. package/lib/esm/curve/StrokeOptions.js +1 -1
  445. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  446. package/lib/esm/curve/UnionRegion.js.map +1 -1
  447. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  448. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  449. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  450. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  451. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  452. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  453. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +5 -5
  454. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  455. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
  456. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  457. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
  458. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  459. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  460. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  461. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +5 -5
  462. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  463. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  464. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  465. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  466. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  467. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +4 -4
  468. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  469. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  470. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  471. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  472. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  473. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  474. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  475. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  476. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  477. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +2 -2
  478. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  479. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  480. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  481. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  482. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  483. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  484. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  485. package/lib/esm/geometry3d/Angle.js +16 -16
  486. package/lib/esm/geometry3d/Angle.js.map +1 -1
  487. package/lib/esm/geometry3d/AngleSweep.d.ts +1 -1
  488. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  489. package/lib/esm/geometry3d/AngleSweep.js +1 -1
  490. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  491. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  492. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  493. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  494. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  495. package/lib/esm/geometry3d/FrameBuilder.js +4 -4
  496. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  497. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  498. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  499. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  500. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  501. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  502. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  503. package/lib/esm/geometry3d/GrowableXYArray.js +0 -7
  504. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  505. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  506. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  507. package/lib/esm/geometry3d/GrowableXYZArray.js +54 -16
  508. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  509. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  510. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  511. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  512. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  513. package/lib/esm/geometry3d/IndexedXYZCollection.js +24 -10
  514. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  515. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  516. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  517. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  518. package/lib/esm/geometry3d/Matrix3d.js +11 -12
  519. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  520. package/lib/esm/geometry3d/OrderedRotationAngles.js +2 -2
  521. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  522. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  523. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  524. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  525. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  526. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  527. package/lib/esm/geometry3d/Point3dArrayCarrier.js +1 -1
  528. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  529. package/lib/esm/geometry3d/Point3dVector3d.d.ts +6 -6
  530. package/lib/esm/geometry3d/Point3dVector3d.js +6 -6
  531. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  532. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  533. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  534. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  535. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  536. package/lib/esm/geometry3d/PolygonOps.js +25 -25
  537. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  538. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  539. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  540. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  541. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  542. package/lib/esm/geometry3d/PolylineOps.js +9 -5
  543. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  544. package/lib/esm/geometry3d/Range.js +4 -4
  545. package/lib/esm/geometry3d/Range.js.map +1 -1
  546. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  547. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  548. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  549. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  550. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  551. package/lib/esm/geometry3d/Transform.js.map +1 -1
  552. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  553. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  554. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  555. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  556. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  557. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  558. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  559. package/lib/esm/geometry4d/MomentData.js +62 -64
  560. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  561. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  562. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  563. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  564. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  565. package/lib/esm/numerics/ClusterableArray.js +13 -13
  566. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  567. package/lib/esm/numerics/Complex.js.map +1 -1
  568. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  569. package/lib/esm/numerics/Newton.js.map +1 -1
  570. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  571. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  572. package/lib/esm/numerics/PolarData.js +1 -1
  573. package/lib/esm/numerics/PolarData.js.map +1 -1
  574. package/lib/esm/numerics/Polynomials.js +26 -26
  575. package/lib/esm/numerics/Polynomials.js.map +1 -1
  576. package/lib/esm/numerics/Quadrature.js +20 -20
  577. package/lib/esm/numerics/Quadrature.js.map +1 -1
  578. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  579. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  580. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  581. package/lib/esm/numerics/UnionFind.js.map +1 -1
  582. package/lib/esm/numerics/UsageSums.js.map +1 -1
  583. package/lib/esm/polyface/AuxData.js.map +1 -1
  584. package/lib/esm/polyface/BoxTopology.js +67 -67
  585. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  586. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  587. package/lib/esm/polyface/FacetFaceData.js +1 -1
  588. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  589. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  590. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  591. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +2 -2
  592. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  593. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  594. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  595. package/lib/esm/polyface/IndexedEdgeMatcher.js +62 -33
  596. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  597. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  598. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  599. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +3 -2
  600. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  601. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  602. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  603. package/lib/esm/polyface/IndexedPolyfaceWalker.js +345 -0
  604. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  605. package/lib/esm/polyface/Polyface.d.ts +35 -10
  606. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  607. package/lib/esm/polyface/Polyface.js +55 -10
  608. package/lib/esm/polyface/Polyface.js.map +1 -1
  609. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  610. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  611. package/lib/esm/polyface/PolyfaceBuilder.js +37 -80
  612. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  613. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  614. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  615. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  616. package/lib/esm/polyface/PolyfaceData.js +24 -5
  617. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  618. package/lib/esm/polyface/PolyfaceQuery.js +7 -7
  619. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  620. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  621. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  622. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  623. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  624. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  625. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  626. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  627. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  628. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  629. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  630. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  631. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  632. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  633. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  634. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  635. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  636. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  637. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  638. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  639. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  640. package/lib/esm/serialization/BGFBReader.js +22 -22
  641. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  642. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  643. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  644. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  645. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  646. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  647. package/lib/esm/serialization/GeometrySamples.js +112 -112
  648. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  649. package/lib/esm/serialization/IModelJsonSchema.d.ts +1 -2
  650. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  651. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  652. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  653. package/lib/esm/solid/Box.js.map +1 -1
  654. package/lib/esm/solid/Cone.js.map +1 -1
  655. package/lib/esm/solid/LinearSweep.js.map +1 -1
  656. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  657. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  658. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  659. package/lib/esm/solid/RuledSweep.js +30 -23
  660. package/lib/esm/solid/RuledSweep.js.map +1 -1
  661. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  662. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  663. package/lib/esm/solid/SolidPrimitive.js +8 -5
  664. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  665. package/lib/esm/solid/Sphere.js.map +1 -1
  666. package/lib/esm/solid/SweepContour.d.ts +24 -15
  667. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  668. package/lib/esm/solid/SweepContour.js +24 -15
  669. package/lib/esm/solid/SweepContour.js.map +1 -1
  670. package/lib/esm/solid/TorusPipe.js.map +1 -1
  671. package/lib/esm/topology/ChainMerge.js +4 -4
  672. package/lib/esm/topology/ChainMerge.js.map +1 -1
  673. package/lib/esm/topology/Graph.js +5 -5
  674. package/lib/esm/topology/Graph.js.map +1 -1
  675. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  676. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +1 -1
  677. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  678. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  679. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +2 -2
  680. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  681. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  682. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  683. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  684. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  685. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  686. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  687. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  688. package/lib/esm/topology/MaskManager.js.map +1 -1
  689. package/lib/esm/topology/Merging.js.map +1 -1
  690. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  691. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  692. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  693. package/lib/esm/topology/Triangulation.js +11 -11
  694. package/lib/esm/topology/Triangulation.js.map +1 -1
  695. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  696. package/package.json +5 -5
@@ -206,13 +206,13 @@ class GreedyTriangulationBetweenLineStrings {
206
206
  // catch everything else blindly
207
207
  this.addGreedy(intervalA, intervalB, handler);
208
208
  }
209
+ /** Default angle for considering two vectors to be colinear */
210
+ static { this.defaultNearColinearAngle = Angle_1.Angle.createDegrees(15); }
209
211
  static createContext(planarTurnAngle = this.defaultNearColinearAngle) {
210
212
  return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);
211
213
  }
212
214
  }
213
215
  exports.GreedyTriangulationBetweenLineStrings = GreedyTriangulationBetweenLineStrings;
214
- /** Default angle for considering two vectors to be colinear */
215
- GreedyTriangulationBetweenLineStrings.defaultNearColinearAngle = Angle_1.Angle.createDegrees(15);
216
216
  /**
217
217
  * * If there are no contiguous duplicated points in `data` return `data` unchanged.
218
218
  * * If there are duplicates, compress to a new array.
@@ -1 +1 @@
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"]}
1
+ {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\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"]}
@@ -6,35 +6,39 @@
6
6
  * * Fixed entry positions are:
7
7
  * * [0] is start vertex index (in CCW order around its facet)
8
8
  * * [1] is end vertex index (in CCW order around its facet)
9
- * * [2] is facet index.
9
+ * * [2] is facet index (or another number to associate with this edge).
10
10
  */
11
11
  export declare class SortableEdge extends Float64Array {
12
12
  /** Return the vertex index that appears first in the order stored. */
13
13
  get vertexIndexA(): number;
14
14
  /** Return the vertex index that appears second in the order stored. */
15
15
  get vertexIndexB(): number;
16
- /** Return the facet index. */
16
+ /**
17
+ * Return the facet index.
18
+ * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
19
+ */
17
20
  get facetIndex(): number;
18
- /** return true if vertexIndexA is less than vertexIndexB */
21
+ /** return true if vertexIndexA is less than vertexIndexB. */
19
22
  get isLowHigh(): boolean;
20
- /** Return the vertex index with lower numeric value */
23
+ /** Return the vertex index with lower numeric value. */
21
24
  get lowVertexIndex(): number;
22
- /** Return the vertex index with higher numeric value */
25
+ /** Return the vertex index with higher numeric value. */
23
26
  get highVertexIndex(): number;
24
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
27
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
25
28
  static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
26
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
29
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
27
30
  static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
28
- /** Return numeric relationship of edgeA and edgeB:
29
- * * 1 if they share start and end in the same order
30
- * * -1 if they share start and end in reversed order
31
+ /**
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.
31
35
  * * 0 otherwise.
32
36
  */
33
37
  static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number;
34
38
  get isNullEdge(): boolean;
35
39
  /**
36
- * lexical comparison of two edges.
37
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
40
+ * 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.
38
42
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
39
43
  * @param edgeA first edge
40
44
  * @param edgeB second edge
@@ -47,23 +51,25 @@ export declare class SortableEdge extends Float64Array {
47
51
  }
48
52
  export type SortableEdgeCluster = SortableEdge | SortableEdge[];
49
53
  /**
50
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
54
+ * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
55
+ * (such as testing for closed mesh).
51
56
  */
52
57
  export declare class IndexedEdgeMatcher {
53
58
  edges: SortableEdge[];
54
59
  constructor();
55
60
  /**
56
- * push a new edge.
57
- * @returns the edge (as emplaced at the back of the sortableEdge array)
61
+ * Push a new edge.
58
62
  * @param vertexA start vertex
59
63
  * @param vertexB end vertex
60
- * @param facetIndex facet index
64
+ * @param facetIndex value to carry along during matching
65
+ * @returns the edge pushed onto the `edges` array
61
66
  */
62
67
  addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge;
63
68
  /**
64
- * Push edges all around a facet, returning to vertexArray[0]
69
+ * Push edges all around a facet, returning to vertexArray[0].
65
70
  * @param vertexArray array of vertex indices around facet
66
- * @param facetIndex
71
+ * @param facetIndex value to carry along during matching
72
+ * @param closeLoop true to add an edge from last to first vertex.
67
73
  */
68
74
  addPath(vertexArray: number[], facetIndex: number, closeLoop?: boolean): void;
69
75
  /** Sort the edge index array. */
@@ -71,16 +77,20 @@ export declare class IndexedEdgeMatcher {
71
77
  /** Create a single or compound SortableEdgeCluster in dest. */
72
78
  private collectSortableEdgeCluster;
73
79
  /**
74
- * sort the edges, and look for three categories of paired edges:
80
+ * Sort the edges, and look for three categories of paired edges:
75
81
  * * caller must allocate all result arrays of interest.
76
82
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
77
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
78
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call
83
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
84
+ * 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
79
87
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
80
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
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.
81
90
  * @param singletons optional array to receive edges that are simple boundary edges.
82
91
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
83
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
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.
84
94
  */
85
95
  sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
86
96
  }
@@ -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,CAAoB;IACrD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAAoB;IACrD,+BAA+B;IAC/B,IAAW,UAAU,IAAI,MAAM,CAAoB;IACnD,4DAA4D;IAC5D,IAAW,SAAS,IAAI,OAAO,CAA8B;IAC7D,uDAAuD;IACvD,IAAW,cAAc,IAAI,MAAM,CAAkD;IACrF,wDAAwD;IACxD,IAAW,eAAe,IAAI,MAAM,CAAkD;IACtF,gGAAgG;WAClF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IACpF,6GAA6G;WAC/F,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;OAIG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAAgC;IAChE;;;;;;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;WACN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAO7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;GAEG;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;;;;OAIG;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;IAalC;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,EAAE;CAyBhM"}
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"}
@@ -13,30 +13,48 @@ exports.IndexedEdgeMatcher = exports.SortableEdge = void 0;
13
13
  * * Fixed entry positions are:
14
14
  * * [0] is start vertex index (in CCW order around its facet)
15
15
  * * [1] is end vertex index (in CCW order around its facet)
16
- * * [2] is facet index.
16
+ * * [2] is facet index (or another number to associate with this edge).
17
17
  */
18
18
  class SortableEdge extends Float64Array {
19
19
  /** Return the vertex index that appears first in the order stored. */
20
- get vertexIndexA() { return this[0]; }
20
+ get vertexIndexA() {
21
+ return this[0];
22
+ }
21
23
  /** Return the vertex index that appears second in the order stored. */
22
- get vertexIndexB() { return this[1]; }
23
- /** Return the facet index. */
24
- get facetIndex() { return this[2]; }
25
- /** return true if vertexIndexA is less than vertexIndexB */
26
- get isLowHigh() { return this[0] < this[1]; }
27
- /** Return the vertex index with lower numeric value */
28
- get lowVertexIndex() { return this[0] < this[1] ? this[0] : this[1]; }
29
- /** Return the vertex index with higher numeric value */
30
- get highVertexIndex() { return this[0] > this[1] ? this[0] : this[1]; }
31
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
32
- static areDirectedPartners(edgeA, edgeB) { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }
33
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
24
+ get vertexIndexB() {
25
+ return this[1];
26
+ }
27
+ /**
28
+ * Return the facet index.
29
+ * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
30
+ */
31
+ get facetIndex() {
32
+ return this[2];
33
+ }
34
+ /** return true if vertexIndexA is less than vertexIndexB. */
35
+ get isLowHigh() {
36
+ return this[0] < this[1];
37
+ }
38
+ /** Return the vertex index with lower numeric value. */
39
+ get lowVertexIndex() {
40
+ return this[0] < this[1] ? this[0] : this[1];
41
+ }
42
+ /** Return the vertex index with higher numeric value. */
43
+ get highVertexIndex() {
44
+ return this[0] > this[1] ? this[0] : this[1];
45
+ }
46
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
47
+ static areDirectedPartners(edgeA, edgeB) {
48
+ return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];
49
+ }
50
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
34
51
  static areUndirectedPartners(edgeA, edgeB) {
35
52
  return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));
36
53
  }
37
- /** Return numeric relationship of edgeA and edgeB:
38
- * * 1 if they share start and end in the same order
39
- * * -1 if they share start and end in reversed order
54
+ /**
55
+ * Return numeric relationship of edgeA and edgeB:
56
+ * * 1 if they share start and end in the same order.
57
+ * * -1 if they share start and end in reversed order.
40
58
  * * 0 otherwise.
41
59
  */
42
60
  static relativeOrientation(edgeA, edgeB) {
@@ -46,10 +64,12 @@ class SortableEdge extends Float64Array {
46
64
  return -1;
47
65
  return 0;
48
66
  }
49
- get isNullEdge() { return this[0] === this[1]; }
67
+ get isNullEdge() {
68
+ return this[0] === this[1];
69
+ }
50
70
  /**
51
- * lexical comparison of two edges.
52
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
71
+ * Lexical comparison of two edges.
72
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
53
73
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
54
74
  * @param edgeA first edge
55
75
  * @param edgeB second edge
@@ -77,7 +97,9 @@ class SortableEdge extends Float64Array {
77
97
  this[1] = vertexB;
78
98
  this[2] = facetIndex;
79
99
  }
80
- toJSON() { return [this[0], this[1], this[2]]; }
100
+ toJSON() {
101
+ return [this[0], this[1], this[2]];
102
+ }
81
103
  static clusterToJSON(data) {
82
104
  if (data instanceof SortableEdge)
83
105
  return data.toJSON();
@@ -94,18 +116,19 @@ class SortableEdge extends Float64Array {
94
116
  }
95
117
  exports.SortableEdge = SortableEdge;
96
118
  /**
97
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
119
+ * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
120
+ * (such as testing for closed mesh).
98
121
  */
99
122
  class IndexedEdgeMatcher {
100
123
  constructor() {
101
124
  this.edges = [];
102
125
  }
103
126
  /**
104
- * push a new edge.
105
- * @returns the edge (as emplaced at the back of the sortableEdge array)
127
+ * Push a new edge.
106
128
  * @param vertexA start vertex
107
129
  * @param vertexB end vertex
108
- * @param facetIndex facet index
130
+ * @param facetIndex value to carry along during matching
131
+ * @returns the edge pushed onto the `edges` array
109
132
  */
110
133
  addEdge(vertexA, vertexB, facetIndex) {
111
134
  const edge = new SortableEdge(vertexA, vertexB, facetIndex);
@@ -113,9 +136,10 @@ class IndexedEdgeMatcher {
113
136
  return edge;
114
137
  }
115
138
  /**
116
- * Push edges all around a facet, returning to vertexArray[0]
139
+ * Push edges all around a facet, returning to vertexArray[0].
117
140
  * @param vertexArray array of vertex indices around facet
118
- * @param facetIndex
141
+ * @param facetIndex value to carry along during matching
142
+ * @param closeLoop true to add an edge from last to first vertex.
119
143
  */
120
144
  addPath(vertexArray, facetIndex, closeLoop = true) {
121
145
  if (vertexArray.length === 0)
@@ -146,16 +170,20 @@ class IndexedEdgeMatcher {
146
170
  }
147
171
  }
148
172
  /**
149
- * sort the edges, and look for three categories of paired edges:
173
+ * Sort the edges, and look for three categories of paired edges:
150
174
  * * caller must allocate all result arrays of interest.
151
175
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
152
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
153
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call
176
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
177
+ * merged into the target.
178
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
179
+ * `allOther`, create `const allOther = []` as an empty array and call
154
180
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
155
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
181
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
182
+ * edges adjacent to two facets in opposing directions.
156
183
  * @param singletons optional array to receive edges that are simple boundary edges.
157
184
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
158
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
185
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
186
+ * but not a simple directed pair.
159
187
  */
160
188
  sortAndCollectClusters(manifoldPairs, singletons, nullEdges, allOtherClusters) {
161
189
  this.sort();
@@ -172,7 +200,8 @@ class IndexedEdgeMatcher {
172
200
  for (let index0 = 0; index0 < n; index0 += clusterLength) {
173
201
  const baseEdge = this.edges[index0];
174
202
  clusterLength = 1;
175
- for (let index1 = index0 + 1; index1 < n && SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
203
+ for (let index1 = index0 + 1; index1 < n &&
204
+ SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
176
205
  clusterLength++;
177
206
  }
178
207
  if (this.edges[index0].isNullEdge) {
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\n/**\r\n * * For boundary sorting, an edge is a (packed!) Float64Array.\r\n * * Fixed entry positions are:\r\n * * [0] is start vertex index (in CCW order around its facet)\r\n * * [1] is end vertex index (in CCW order around its facet)\r\n * * [2] is facet index.\r\n */\r\nexport class SortableEdge extends Float64Array {\r\n /** Return the vertex index that appears first in the order stored. */\r\n public get vertexIndexA(): number { return this[0]; }\r\n /** Return the vertex index that appears second in the order stored. */\r\n public get vertexIndexB(): number { return this[1]; }\r\n /** Return the facet index. */\r\n public get facetIndex(): number { return this[2]; }\r\n /** return true if vertexIndexA is less than vertexIndexB */\r\n public get isLowHigh(): boolean { return this[0] < this[1]; }\r\n /** Return the vertex index with lower numeric value */\r\n public get lowVertexIndex(): number { return this[0] < this[1] ? this[0] : this[1]; }\r\n /** Return the vertex index with higher numeric value */\r\n public get highVertexIndex(): number { return this[0] > this[1] ? this[0] : this[1]; }\r\n /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */\r\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }\r\n /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */\r\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\r\n return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));\r\n }\r\n /** Return numeric relationship of edgeA and edgeB:\r\n * * 1 if they share start and end in the same order\r\n * * -1 if they share start and end in reversed order\r\n * * 0 otherwise.\r\n */\r\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\r\n if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) return 1;\r\n if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]) return -1;\r\n return 0;\r\n }\r\n\r\n public get isNullEdge(): boolean { return this[0] === this[1]; }\r\n /**\r\n * lexical comparison of two edges.\r\n * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort\r\n * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.\r\n * @param edgeA first edge\r\n * @param edgeB second edge\r\n */\r\n public static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number {\r\n // primary compare is based on indirect indices\r\n const lowA = edgeA.lowVertexIndex;\r\n const lowB = edgeB.lowVertexIndex;\r\n if (lowA < lowB)\r\n return -1;\r\n if (lowB < lowA)\r\n return 1;\r\n const highA = edgeA.highVertexIndex;\r\n const highB = edgeB.highVertexIndex;\r\n if (highA < highB)\r\n return -1;\r\n if (highB < highA)\r\n return 1;\r\n // undirected indices match ... use directed vertexIndexA\r\n return edgeA.vertexIndexA - edgeB.vertexIndexA;\r\n }\r\n public constructor(vertexA: number, vertexB: number, facetIndex: number) {\r\n super(3);\r\n this[0] = vertexA;\r\n this[1] = vertexB;\r\n this[2] = facetIndex;\r\n }\r\n public toJSON(): any { return [this[0], this[1], this[2]]; }\r\n public static clusterToJSON(data: SortableEdgeCluster): any {\r\n if (data instanceof SortableEdge)\r\n return data.toJSON();\r\n\r\n const result = [];\r\n for (const edge of data) result.push(edge.toJSON());\r\n }\r\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\r\n const result = [];\r\n for (const cluster of data)\r\n result.push(SortableEdge.clusterToJSON(cluster));\r\n return result;\r\n }\r\n}\r\n\r\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\r\n/**\r\n * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)\r\n */\r\nexport class IndexedEdgeMatcher {\r\n public edges: SortableEdge[];\r\n\r\n constructor() {\r\n this.edges = [];\r\n }\r\n /**\r\n * push a new edge.\r\n * @returns the edge (as emplaced at the back of the sortableEdge array)\r\n * @param vertexA start vertex\r\n * @param vertexB end vertex\r\n * @param facetIndex facet index\r\n */\r\n public addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge {\r\n const edge = new SortableEdge(vertexA, vertexB, facetIndex);\r\n this.edges.push(edge);\r\n return edge;\r\n }\r\n /**\r\n * Push edges all around a facet, returning to vertexArray[0]\r\n * @param vertexArray array of vertex indices around facet\r\n * @param facetIndex\r\n */\r\n public addPath(vertexArray: number[], facetIndex: number, closeLoop: boolean = true) {\r\n if (vertexArray.length === 0) return;\r\n const m = vertexArray.length - 1;\r\n for (let i = 0; i < m; i++) {\r\n this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);\r\n }\r\n if (closeLoop)\r\n this.addEdge(vertexArray[m], vertexArray[0], facetIndex);\r\n }\r\n /** Sort the edge index array. */\r\n public sort() {\r\n this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));\r\n }\r\n /** Create a single or compound SortableEdgeCluster in dest. */\r\n private collectSortableEdgeCluster(index0: number, index1: number, dest: SortableEdgeCluster[] | undefined) {\r\n if (dest !== undefined && index1 > index0) {\r\n if (index1 === index0 + 1) {\r\n dest.push(this.edges[index0]);\r\n } else {\r\n const cluster = [];\r\n for (let i = index0; i < index1; i++)\r\n cluster.push(this.edges[i]);\r\n dest.push(cluster);\r\n }\r\n\r\n }\r\n }\r\n /**\r\n * sort the edges, and look for three categories of paired edges:\r\n * * caller must allocate all result arrays of interest.\r\n * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.\r\n * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.\r\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call\r\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\r\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.\r\n * @param singletons optional array to receive edges that are simple boundary edges.\r\n * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)\r\n * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.\r\n */\r\n public sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]) {\r\n this.sort();\r\n if (manifoldPairs) manifoldPairs.length = 0;\r\n if (singletons) singletons.length = 0;\r\n if (nullEdges) nullEdges.length = 0;\r\n if (allOtherClusters) allOtherClusters.length = 0;\r\n const n = this.edges.length;\r\n let clusterLength;\r\n for (let index0 = 0; index0 < n; index0 += clusterLength) {\r\n const baseEdge = this.edges[index0];\r\n clusterLength = 1;\r\n for (let index1 = index0 + 1; index1 < n && SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {\r\n clusterLength++;\r\n }\r\n if (this.edges[index0].isNullEdge) {\r\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);\r\n } else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {\r\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);\r\n } else if (clusterLength === 1) {\r\n this.collectSortableEdgeCluster(index0, index0 + 1, singletons);\r\n } else {\r\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\n/**\n * * For boundary sorting, an edge is a (packed!) Float64Array.\n * * Fixed entry positions are:\n * * [0] is start vertex index (in CCW order around its facet)\n * * [1] is end vertex index (in CCW order around its facet)\n * * [2] is facet index (or another number to associate with this edge).\n */\nexport class SortableEdge extends Float64Array {\n /** Return the vertex index that appears first in the order stored. */\n public get vertexIndexA(): number {\n return this[0];\n }\n /** Return the vertex index that appears second in the order stored. */\n public get vertexIndexB(): number {\n return this[1];\n }\n /**\n * Return the facet index.\n * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.\n */\n public get facetIndex(): number {\n return this[2];\n }\n /** return true if vertexIndexA is less than vertexIndexB. */\n public get isLowHigh(): boolean {\n return this[0] < this[1];\n }\n /** Return the vertex index with lower numeric value. */\n public get lowVertexIndex(): number {\n return this[0] < this[1] ? this[0] : this[1];\n }\n /** Return the vertex index with higher numeric value. */\n public get highVertexIndex(): number {\n return this[0] > this[1] ? this[0] : this[1];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));\n }\n /**\n * Return numeric relationship of edgeA and edgeB:\n * * 1 if they share start and end in the same order.\n * * -1 if they share start and end in reversed order.\n * * 0 otherwise.\n */\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\n if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) return 1;\n if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]) return -1;\n return 0;\n }\n\n public get isNullEdge(): boolean {\n return this[0] === this[1];\n }\n /**\n * Lexical comparison of two edges.\n * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.\n * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.\n * @param edgeA first edge\n * @param edgeB second edge\n */\n public static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number {\n // primary compare is based on indirect indices\n const lowA = edgeA.lowVertexIndex;\n const lowB = edgeB.lowVertexIndex;\n if (lowA < lowB)\n return -1;\n if (lowB < lowA)\n return 1;\n const highA = edgeA.highVertexIndex;\n const highB = edgeB.highVertexIndex;\n if (highA < highB)\n return -1;\n if (highB < highA)\n return 1;\n // undirected indices match ... use directed vertexIndexA\n return edgeA.vertexIndexA - edgeB.vertexIndexA;\n }\n public constructor(vertexA: number, vertexB: number, facetIndex: number) {\n super(3);\n this[0] = vertexA;\n this[1] = vertexB;\n this[2] = facetIndex;\n }\n public toJSON(): any {\n return [this[0], this[1], this[2]];\n }\n public static clusterToJSON(data: SortableEdgeCluster): any {\n if (data instanceof SortableEdge)\n return data.toJSON();\n const result = [];\n for (const edge of data) result.push(edge.toJSON());\n }\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\n const result = [];\n for (const cluster of data)\n result.push(SortableEdge.clusterToJSON(cluster));\n return result;\n }\n}\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\n/**\n * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses\n * (such as testing for closed mesh).\n */\nexport class IndexedEdgeMatcher {\n public edges: SortableEdge[];\n\n constructor() {\n this.edges = [];\n }\n /**\n * Push a new edge.\n * @param vertexA start vertex\n * @param vertexB end vertex\n * @param facetIndex value to carry along during matching\n * @returns the edge pushed onto the `edges` array\n */\n public addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge {\n const edge = new SortableEdge(vertexA, vertexB, facetIndex);\n this.edges.push(edge);\n return edge;\n }\n /**\n * Push edges all around a facet, returning to vertexArray[0].\n * @param vertexArray array of vertex indices around facet\n * @param facetIndex value to carry along during matching\n * @param closeLoop true to add an edge from last to first vertex.\n */\n public addPath(vertexArray: number[], facetIndex: number, closeLoop: boolean = true) {\n if (vertexArray.length === 0) return;\n const m = vertexArray.length - 1;\n for (let i = 0; i < m; i++) {\n this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);\n }\n if (closeLoop)\n this.addEdge(vertexArray[m], vertexArray[0], facetIndex);\n }\n /** Sort the edge index array. */\n public sort() {\n this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));\n }\n /** Create a single or compound SortableEdgeCluster in dest. */\n private collectSortableEdgeCluster(index0: number, index1: number, dest: SortableEdgeCluster[] | undefined) {\n if (dest !== undefined && index1 > index0) {\n if (index1 === index0 + 1) {\n dest.push(this.edges[index0]);\n } else {\n const cluster = [];\n for (let i = index0; i < index1; i++)\n cluster.push(this.edges[i]);\n dest.push(cluster);\n }\n }\n }\n /**\n * Sort the edges, and look for three categories of paired edges:\n * * caller must allocate all result arrays of interest.\n * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.\n * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are\n * merged into the target.\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array\n * `allOther`, create `const allOther = []` as an empty array and call\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior\n * edges adjacent to two facets in opposing directions.\n * @param singletons optional array to receive edges that are simple boundary edges.\n * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)\n * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense\n * but not a simple directed pair.\n */\n public sortAndCollectClusters(\n manifoldPairs: SortableEdgeCluster[] | undefined,\n singletons?: SortableEdgeCluster[],\n nullEdges?: SortableEdgeCluster[],\n allOtherClusters?: SortableEdgeCluster[],\n ): void {\n this.sort();\n if (manifoldPairs) manifoldPairs.length = 0;\n if (singletons) singletons.length = 0;\n if (nullEdges) nullEdges.length = 0;\n if (allOtherClusters) allOtherClusters.length = 0;\n const n = this.edges.length;\n let clusterLength;\n for (let index0 = 0; index0 < n; index0 += clusterLength) {\n const baseEdge = this.edges[index0];\n clusterLength = 1;\n for (let index1 = index0 + 1; index1 < n &&\n SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {\n clusterLength++;\n }\n if (this.edges[index0].isNullEdge) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);\n } else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);\n } else if (clusterLength === 1) {\n this.collectSortableEdgeCluster(index0, index0 + 1, singletons);\n } else {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);\n }\n }\n }\n}\n"]}
@@ -52,7 +52,7 @@ export declare class IndexedPolyfaceVisitor extends PolyfaceData implements Poly
52
52
  * Returns the normalized parameter as a point. Returns `undefined` on failure.
53
53
  */
54
54
  tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined;
55
- /** Return the index (in the client polyface) of the current facet. */
55
+ /** Return the facetIndex of the currently referenced facet in the client polyface. */
56
56
  currentReadIndex(): number;
57
57
  /** Return the point index of vertex `i` within the currently loaded facet. */
58
58
  clientPointIndex(i: number): number;
@@ -95,7 +95,8 @@ export declare class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor
95
95
  static createSubsetVisitor(polyface: IndexedPolyface, activeFacetIndices: number[], numWrap?: number): IndexedPolyfaceSubsetVisitor;
96
96
  /**
97
97
  * Advance the iterator to a particular facet in the subset of client polyface facets.
98
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within the client polyface.
98
+ * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
99
+ * the client polyface.
99
100
  * @return whether the iterator was successfully moved.
100
101
  */
101
102
  moveToReadIndex(activeIndex: number): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
@@ -114,7 +114,7 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
114
114
  return undefined;
115
115
  return faceData.convertParamXYToNormalized(this.param.getXAtUncheckedPointIndex(index), this.param.getYAtUncheckedPointIndex(index), result);
116
116
  }
117
- /** Return the index (in the client polyface) of the current facet. */
117
+ /** Return the facetIndex of the currently referenced facet in the client polyface. */
118
118
  currentReadIndex() {
119
119
  return this._currentFacetIndex;
120
120
  }
@@ -209,7 +209,8 @@ class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
209
209
  }
210
210
  /**
211
211
  * Advance the iterator to a particular facet in the subset of client polyface facets.
212
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within the client polyface.
212
+ * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
213
+ * the client polyface.
213
214
  * @return whether the iterator was successfully moved.
214
215
  */
215
216
  moveToReadIndex(activeIndex) {