@itwin/core-geometry 5.0.0-dev.4 → 5.0.0-dev.41

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 (730) hide show
  1. package/CHANGELOG.md +29 -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.js +2 -2
  21. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  22. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  23. package/lib/cjs/clipping/AlternatingConvexClipTree.js +2 -2
  24. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  25. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  26. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  27. package/lib/cjs/clipping/ClipPlane.js +1 -1
  28. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  29. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  30. package/lib/cjs/clipping/ClipUtils.js +1 -1
  31. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  32. package/lib/cjs/clipping/ClipVector.js +1 -1
  33. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  34. package/lib/cjs/clipping/ConvexClipPlaneSet.js +3 -3
  35. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  36. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -1
  37. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  38. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  39. package/lib/cjs/core-geometry.js.map +1 -1
  40. package/lib/cjs/curve/Arc3d.d.ts +40 -8
  41. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  42. package/lib/cjs/curve/Arc3d.js +80 -22
  43. package/lib/cjs/curve/Arc3d.js.map +1 -1
  44. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  45. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  46. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +4 -4
  47. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  48. package/lib/cjs/curve/CurveCollection.d.ts +16 -2
  49. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  50. package/lib/cjs/curve/CurveCollection.js +33 -2
  51. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  52. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  53. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  54. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  55. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  56. package/lib/cjs/curve/CurveFactory.js +213 -135
  57. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  58. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  59. package/lib/cjs/curve/CurveOps.js.map +1 -1
  60. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  61. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  62. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  63. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  64. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  65. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  66. package/lib/cjs/curve/LineString3d.d.ts +12 -8
  67. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  68. package/lib/cjs/curve/LineString3d.js +34 -13
  69. package/lib/cjs/curve/LineString3d.js.map +1 -1
  70. package/lib/cjs/curve/Loop.d.ts +12 -6
  71. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  72. package/lib/cjs/curve/Loop.js +12 -6
  73. package/lib/cjs/curve/Loop.js.map +1 -1
  74. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  75. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  76. package/lib/cjs/curve/Path.js.map +1 -1
  77. package/lib/cjs/curve/PointString3d.js.map +1 -1
  78. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  79. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  80. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  81. package/lib/cjs/curve/Query/CylindricalRange.d.ts +8 -6
  82. package/lib/cjs/curve/Query/CylindricalRange.d.ts.map +1 -1
  83. package/lib/cjs/curve/Query/CylindricalRange.js +13 -9
  84. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  85. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  86. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  87. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  88. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  89. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  90. package/lib/cjs/curve/RegionOps.js.map +1 -1
  91. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +1 -1
  92. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  93. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  94. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  95. package/lib/cjs/curve/StrokeOptions.js +1 -1
  96. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  97. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  100. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +5 -5
  105. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
  107. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  108. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
  109. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -1
  113. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +29 -23
  114. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +4 -4
  120. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  121. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  123. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  124. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  125. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  126. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  127. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  128. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  129. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +2 -2
  130. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  131. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  132. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  133. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  134. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  135. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  136. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  137. package/lib/cjs/geometry3d/Angle.js +16 -16
  138. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  139. package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -1
  140. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  141. package/lib/cjs/geometry3d/AngleSweep.js +1 -1
  142. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  143. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts +14 -8
  144. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  145. package/lib/cjs/geometry3d/BarycentricTriangle.js +17 -8
  146. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  147. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  148. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  149. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  150. package/lib/cjs/geometry3d/FrameBuilder.js +4 -4
  151. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  152. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  153. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  154. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  155. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts +2 -0
  156. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  157. package/lib/cjs/geometry3d/GrowableFloat64Array.js +4 -0
  158. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  159. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  160. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  161. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  162. package/lib/cjs/geometry3d/GrowableXYZArray.js +54 -16
  163. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  164. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  165. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  166. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  167. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  168. package/lib/cjs/geometry3d/IndexedXYZCollection.js +24 -10
  169. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  170. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  171. package/lib/cjs/geometry3d/Matrix3d.d.ts +11 -8
  172. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  173. package/lib/cjs/geometry3d/Matrix3d.js +36 -34
  174. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  175. package/lib/cjs/geometry3d/OrderedRotationAngles.js +2 -2
  176. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  177. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  178. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  179. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  180. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  181. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  182. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +1 -1
  183. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  184. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +6 -6
  185. package/lib/cjs/geometry3d/Point3dVector3d.js +6 -6
  186. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  187. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  188. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  189. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  190. package/lib/cjs/geometry3d/PolygonOps.d.ts +12 -6
  191. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  192. package/lib/cjs/geometry3d/PolygonOps.js +117 -70
  193. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  194. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  195. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  196. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  197. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  198. package/lib/cjs/geometry3d/PolylineOps.js +9 -5
  199. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  200. package/lib/cjs/geometry3d/Range.js +4 -4
  201. package/lib/cjs/geometry3d/Range.js.map +1 -1
  202. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  203. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  204. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  205. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  206. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  207. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  208. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  209. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  210. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  211. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  212. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  213. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  214. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  215. package/lib/cjs/geometry4d/MomentData.js +62 -64
  216. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  217. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  218. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  219. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  220. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  221. package/lib/cjs/numerics/ClusterableArray.js +13 -13
  222. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  223. package/lib/cjs/numerics/Complex.js.map +1 -1
  224. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  225. package/lib/cjs/numerics/Newton.js.map +1 -1
  226. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  227. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  228. package/lib/cjs/numerics/PolarData.js +1 -1
  229. package/lib/cjs/numerics/PolarData.js.map +1 -1
  230. package/lib/cjs/numerics/Polynomials.d.ts +5 -5
  231. package/lib/cjs/numerics/Polynomials.js +32 -32
  232. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  233. package/lib/cjs/numerics/Quadrature.js +20 -20
  234. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  235. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  236. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  237. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  238. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  239. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  240. package/lib/cjs/polyface/AuxData.d.ts +2 -2
  241. package/lib/cjs/polyface/AuxData.d.ts.map +1 -1
  242. package/lib/cjs/polyface/AuxData.js +11 -3
  243. package/lib/cjs/polyface/AuxData.js.map +1 -1
  244. package/lib/cjs/polyface/BoxTopology.js +67 -67
  245. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  246. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  247. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  248. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  249. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +2 -2
  250. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  251. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +27 -20
  252. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  253. package/lib/cjs/polyface/IndexedEdgeMatcher.js +56 -30
  254. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  255. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +2 -1
  256. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  257. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +2 -1
  258. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  259. package/lib/cjs/polyface/Polyface.d.ts +3 -5
  260. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  261. package/lib/cjs/polyface/Polyface.js +6 -13
  262. package/lib/cjs/polyface/Polyface.js.map +1 -1
  263. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -7
  264. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  265. package/lib/cjs/polyface/PolyfaceBuilder.js +59 -64
  266. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  267. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  268. package/lib/cjs/polyface/PolyfaceData.d.ts +13 -3
  269. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  270. package/lib/cjs/polyface/PolyfaceData.js +26 -9
  271. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  272. package/lib/cjs/polyface/PolyfaceQuery.d.ts +2 -2
  273. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  274. package/lib/cjs/polyface/PolyfaceQuery.js +11 -10
  275. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  276. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  277. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  278. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  279. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  280. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  281. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  282. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  283. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  284. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  285. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  286. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  287. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  288. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  289. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  290. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  291. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  292. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  293. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  294. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  295. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  296. package/lib/cjs/serialization/BGFBReader.js +22 -22
  297. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  298. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  299. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  300. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  301. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  302. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  303. package/lib/cjs/serialization/GeometrySamples.js +112 -112
  304. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  305. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  306. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  307. package/lib/cjs/solid/Box.d.ts +9 -3
  308. package/lib/cjs/solid/Box.d.ts.map +1 -1
  309. package/lib/cjs/solid/Box.js +10 -5
  310. package/lib/cjs/solid/Box.js.map +1 -1
  311. package/lib/cjs/solid/Cone.d.ts +3 -2
  312. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  313. package/lib/cjs/solid/Cone.js +3 -3
  314. package/lib/cjs/solid/Cone.js.map +1 -1
  315. package/lib/cjs/solid/LinearSweep.d.ts +9 -3
  316. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  317. package/lib/cjs/solid/LinearSweep.js +9 -4
  318. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  319. package/lib/cjs/solid/RotationalSweep.d.ts +15 -4
  320. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  321. package/lib/cjs/solid/RotationalSweep.js +20 -7
  322. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  323. package/lib/cjs/solid/RuledSweep.d.ts +35 -26
  324. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  325. package/lib/cjs/solid/RuledSweep.js +41 -28
  326. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  327. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  328. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  329. package/lib/cjs/solid/SolidPrimitive.js +8 -5
  330. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  331. package/lib/cjs/solid/Sphere.d.ts +17 -7
  332. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  333. package/lib/cjs/solid/Sphere.js +22 -16
  334. package/lib/cjs/solid/Sphere.js.map +1 -1
  335. package/lib/cjs/solid/SweepContour.d.ts +25 -16
  336. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  337. package/lib/cjs/solid/SweepContour.js +25 -16
  338. package/lib/cjs/solid/SweepContour.js.map +1 -1
  339. package/lib/cjs/solid/TorusPipe.d.ts +8 -2
  340. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  341. package/lib/cjs/solid/TorusPipe.js +9 -5
  342. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  343. package/lib/cjs/topology/ChainMerge.js +4 -4
  344. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  345. package/lib/cjs/topology/Graph.js +5 -5
  346. package/lib/cjs/topology/Graph.js.map +1 -1
  347. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  348. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  349. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +2 -2
  350. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  351. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  352. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  353. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  354. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  355. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  356. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  357. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  358. package/lib/cjs/topology/MaskManager.js.map +1 -1
  359. package/lib/cjs/topology/Merging.js.map +1 -1
  360. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  361. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  362. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  363. package/lib/cjs/topology/Triangulation.js +11 -11
  364. package/lib/cjs/topology/Triangulation.js.map +1 -1
  365. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  366. package/lib/esm/Constant.js +17 -17
  367. package/lib/esm/Constant.js.map +1 -1
  368. package/lib/esm/Geometry.js +35 -35
  369. package/lib/esm/Geometry.js.map +1 -1
  370. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  371. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  372. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  373. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  374. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  375. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  376. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  377. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  378. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  379. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  380. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  381. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  382. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  383. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  384. package/lib/esm/bspline/KnotVector.js +2 -2
  385. package/lib/esm/bspline/KnotVector.js.map +1 -1
  386. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  387. package/lib/esm/clipping/AlternatingConvexClipTree.js +2 -2
  388. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  389. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  390. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  391. package/lib/esm/clipping/ClipPlane.js +1 -1
  392. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  393. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  394. package/lib/esm/clipping/ClipUtils.js +1 -1
  395. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  396. package/lib/esm/clipping/ClipVector.js +1 -1
  397. package/lib/esm/clipping/ClipVector.js.map +1 -1
  398. package/lib/esm/clipping/ConvexClipPlaneSet.js +3 -3
  399. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  400. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -1
  401. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  402. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  403. package/lib/esm/core-geometry.js.map +1 -1
  404. package/lib/esm/curve/Arc3d.d.ts +40 -8
  405. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  406. package/lib/esm/curve/Arc3d.js +80 -22
  407. package/lib/esm/curve/Arc3d.js.map +1 -1
  408. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  409. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  410. package/lib/esm/curve/CurveChainWithDistanceIndex.js +4 -4
  411. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  412. package/lib/esm/curve/CurveCollection.d.ts +16 -2
  413. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  414. package/lib/esm/curve/CurveCollection.js +33 -2
  415. package/lib/esm/curve/CurveCollection.js.map +1 -1
  416. package/lib/esm/curve/CurveCurve.js.map +1 -1
  417. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  418. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  419. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  420. package/lib/esm/curve/CurveFactory.js +213 -135
  421. package/lib/esm/curve/CurveFactory.js.map +1 -1
  422. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  423. package/lib/esm/curve/CurveOps.js.map +1 -1
  424. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  425. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  426. package/lib/esm/curve/CurveTypes.js.map +1 -1
  427. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  428. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  429. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  430. package/lib/esm/curve/LineString3d.d.ts +12 -8
  431. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  432. package/lib/esm/curve/LineString3d.js +34 -13
  433. package/lib/esm/curve/LineString3d.js.map +1 -1
  434. package/lib/esm/curve/Loop.d.ts +12 -6
  435. package/lib/esm/curve/Loop.d.ts.map +1 -1
  436. package/lib/esm/curve/Loop.js +12 -6
  437. package/lib/esm/curve/Loop.js.map +1 -1
  438. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  439. package/lib/esm/curve/ParityRegion.js.map +1 -1
  440. package/lib/esm/curve/Path.js.map +1 -1
  441. package/lib/esm/curve/PointString3d.js.map +1 -1
  442. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  443. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  444. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  445. package/lib/esm/curve/Query/CylindricalRange.d.ts +8 -6
  446. package/lib/esm/curve/Query/CylindricalRange.d.ts.map +1 -1
  447. package/lib/esm/curve/Query/CylindricalRange.js +13 -9
  448. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  449. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  450. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  451. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  452. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  453. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  454. package/lib/esm/curve/RegionOps.js.map +1 -1
  455. package/lib/esm/curve/RegionOpsClassificationSweeps.js +1 -1
  456. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  457. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  458. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  459. package/lib/esm/curve/StrokeOptions.js +1 -1
  460. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  461. package/lib/esm/curve/UnionRegion.js.map +1 -1
  462. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  463. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  464. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  465. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  466. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  467. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  468. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +5 -5
  469. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  470. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +13 -13
  471. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  472. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +5 -5
  473. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  474. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  475. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  476. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -1
  477. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +29 -23
  478. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  479. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  480. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  481. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  482. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  483. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +4 -4
  484. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  485. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  486. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  487. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  488. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  489. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  490. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  491. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  492. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  493. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +2 -2
  494. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  495. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  496. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  497. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  498. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  499. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  500. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  501. package/lib/esm/geometry3d/Angle.js +16 -16
  502. package/lib/esm/geometry3d/Angle.js.map +1 -1
  503. package/lib/esm/geometry3d/AngleSweep.d.ts +1 -1
  504. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  505. package/lib/esm/geometry3d/AngleSweep.js +1 -1
  506. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  507. package/lib/esm/geometry3d/BarycentricTriangle.d.ts +14 -8
  508. package/lib/esm/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  509. package/lib/esm/geometry3d/BarycentricTriangle.js +17 -8
  510. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  511. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  512. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  513. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  514. package/lib/esm/geometry3d/FrameBuilder.js +4 -4
  515. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  516. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  517. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  518. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  519. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts +2 -0
  520. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  521. package/lib/esm/geometry3d/GrowableFloat64Array.js +4 -0
  522. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  523. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  524. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  525. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  526. package/lib/esm/geometry3d/GrowableXYZArray.js +54 -16
  527. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  528. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  529. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  530. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  531. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  532. package/lib/esm/geometry3d/IndexedXYZCollection.js +24 -10
  533. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  534. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  535. package/lib/esm/geometry3d/Matrix3d.d.ts +11 -8
  536. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  537. package/lib/esm/geometry3d/Matrix3d.js +36 -34
  538. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  539. package/lib/esm/geometry3d/OrderedRotationAngles.js +2 -2
  540. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  541. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  542. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  543. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  544. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  545. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  546. package/lib/esm/geometry3d/Point3dArrayCarrier.js +1 -1
  547. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  548. package/lib/esm/geometry3d/Point3dVector3d.d.ts +6 -6
  549. package/lib/esm/geometry3d/Point3dVector3d.js +6 -6
  550. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  551. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  552. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  553. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  554. package/lib/esm/geometry3d/PolygonOps.d.ts +12 -6
  555. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  556. package/lib/esm/geometry3d/PolygonOps.js +117 -70
  557. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  558. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +3 -3
  559. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  560. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  561. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  562. package/lib/esm/geometry3d/PolylineOps.js +9 -5
  563. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  564. package/lib/esm/geometry3d/Range.js +4 -4
  565. package/lib/esm/geometry3d/Range.js.map +1 -1
  566. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  567. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  568. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  569. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  570. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  571. package/lib/esm/geometry3d/Transform.js.map +1 -1
  572. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  573. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  574. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  575. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  576. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  577. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  578. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  579. package/lib/esm/geometry4d/MomentData.js +62 -64
  580. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  581. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  582. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  583. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  584. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  585. package/lib/esm/numerics/ClusterableArray.js +13 -13
  586. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  587. package/lib/esm/numerics/Complex.js.map +1 -1
  588. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  589. package/lib/esm/numerics/Newton.js.map +1 -1
  590. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  591. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  592. package/lib/esm/numerics/PolarData.js +1 -1
  593. package/lib/esm/numerics/PolarData.js.map +1 -1
  594. package/lib/esm/numerics/Polynomials.d.ts +5 -5
  595. package/lib/esm/numerics/Polynomials.js +32 -32
  596. package/lib/esm/numerics/Polynomials.js.map +1 -1
  597. package/lib/esm/numerics/Quadrature.js +20 -20
  598. package/lib/esm/numerics/Quadrature.js.map +1 -1
  599. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  600. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  601. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  602. package/lib/esm/numerics/UnionFind.js.map +1 -1
  603. package/lib/esm/numerics/UsageSums.js.map +1 -1
  604. package/lib/esm/polyface/AuxData.d.ts +2 -2
  605. package/lib/esm/polyface/AuxData.d.ts.map +1 -1
  606. package/lib/esm/polyface/AuxData.js +11 -3
  607. package/lib/esm/polyface/AuxData.js.map +1 -1
  608. package/lib/esm/polyface/BoxTopology.js +67 -67
  609. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  610. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  611. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  612. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  613. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +2 -2
  614. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  615. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +27 -20
  616. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  617. package/lib/esm/polyface/IndexedEdgeMatcher.js +56 -30
  618. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  619. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +2 -1
  620. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  621. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +2 -1
  622. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  623. package/lib/esm/polyface/Polyface.d.ts +3 -5
  624. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  625. package/lib/esm/polyface/Polyface.js +6 -13
  626. package/lib/esm/polyface/Polyface.js.map +1 -1
  627. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -7
  628. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  629. package/lib/esm/polyface/PolyfaceBuilder.js +60 -65
  630. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  631. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  632. package/lib/esm/polyface/PolyfaceData.d.ts +13 -3
  633. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  634. package/lib/esm/polyface/PolyfaceData.js +26 -9
  635. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  636. package/lib/esm/polyface/PolyfaceQuery.d.ts +2 -2
  637. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  638. package/lib/esm/polyface/PolyfaceQuery.js +11 -10
  639. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  640. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  641. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  642. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  643. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  644. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  645. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  646. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  647. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  648. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  649. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  650. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  651. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  652. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  653. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  654. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  655. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  656. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  657. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  658. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  659. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  660. package/lib/esm/serialization/BGFBReader.js +22 -22
  661. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  662. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  663. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  664. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  665. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  666. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  667. package/lib/esm/serialization/GeometrySamples.js +112 -112
  668. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  669. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  670. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  671. package/lib/esm/solid/Box.d.ts +9 -3
  672. package/lib/esm/solid/Box.d.ts.map +1 -1
  673. package/lib/esm/solid/Box.js +10 -5
  674. package/lib/esm/solid/Box.js.map +1 -1
  675. package/lib/esm/solid/Cone.d.ts +3 -2
  676. package/lib/esm/solid/Cone.d.ts.map +1 -1
  677. package/lib/esm/solid/Cone.js +3 -3
  678. package/lib/esm/solid/Cone.js.map +1 -1
  679. package/lib/esm/solid/LinearSweep.d.ts +9 -3
  680. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  681. package/lib/esm/solid/LinearSweep.js +9 -4
  682. package/lib/esm/solid/LinearSweep.js.map +1 -1
  683. package/lib/esm/solid/RotationalSweep.d.ts +15 -4
  684. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  685. package/lib/esm/solid/RotationalSweep.js +20 -7
  686. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  687. package/lib/esm/solid/RuledSweep.d.ts +35 -26
  688. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  689. package/lib/esm/solid/RuledSweep.js +41 -28
  690. package/lib/esm/solid/RuledSweep.js.map +1 -1
  691. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  692. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  693. package/lib/esm/solid/SolidPrimitive.js +8 -5
  694. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  695. package/lib/esm/solid/Sphere.d.ts +17 -7
  696. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  697. package/lib/esm/solid/Sphere.js +22 -16
  698. package/lib/esm/solid/Sphere.js.map +1 -1
  699. package/lib/esm/solid/SweepContour.d.ts +25 -16
  700. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  701. package/lib/esm/solid/SweepContour.js +25 -16
  702. package/lib/esm/solid/SweepContour.js.map +1 -1
  703. package/lib/esm/solid/TorusPipe.d.ts +8 -2
  704. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  705. package/lib/esm/solid/TorusPipe.js +9 -5
  706. package/lib/esm/solid/TorusPipe.js.map +1 -1
  707. package/lib/esm/topology/ChainMerge.js +4 -4
  708. package/lib/esm/topology/ChainMerge.js.map +1 -1
  709. package/lib/esm/topology/Graph.js +5 -5
  710. package/lib/esm/topology/Graph.js.map +1 -1
  711. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  712. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  713. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +2 -2
  714. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  715. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  716. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  717. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  718. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  719. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  720. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  721. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  722. package/lib/esm/topology/MaskManager.js.map +1 -1
  723. package/lib/esm/topology/Merging.js.map +1 -1
  724. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  725. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  726. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  727. package/lib/esm/topology/Triangulation.js +11 -11
  728. package/lib/esm/topology/Triangulation.js.map +1 -1
  729. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  730. package/package.json +5 -5
@@ -1 +1 @@
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"]}
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"]}
@@ -15,26 +15,27 @@ export declare class SortableEdge extends Float64Array {
15
15
  get vertexIndexB(): number;
16
16
  /** Return the facet index. */
17
17
  get facetIndex(): number;
18
- /** return true if vertexIndexA is less than vertexIndexB */
18
+ /** return true if vertexIndexA is less than vertexIndexB. */
19
19
  get isLowHigh(): boolean;
20
- /** Return the vertex index with lower numeric value */
20
+ /** Return the vertex index with lower numeric value. */
21
21
  get lowVertexIndex(): number;
22
- /** Return the vertex index with higher numeric value */
22
+ /** Return the vertex index with higher numeric value. */
23
23
  get highVertexIndex(): number;
24
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
24
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
25
25
  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 */
26
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
27
27
  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
28
+ /**
29
+ * Return numeric relationship of edgeA and edgeB:
30
+ * * 1 if they share start and end in the same order.
31
+ * * -1 if they share start and end in reversed order.
31
32
  * * 0 otherwise.
32
33
  */
33
34
  static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number;
34
35
  get isNullEdge(): boolean;
35
36
  /**
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
37
+ * Lexical comparison of two edges.
38
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
38
39
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
39
40
  * @param edgeA first edge
40
41
  * @param edgeB second edge
@@ -47,23 +48,25 @@ export declare class SortableEdge extends Float64Array {
47
48
  }
48
49
  export type SortableEdgeCluster = SortableEdge | SortableEdge[];
49
50
  /**
50
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
51
+ * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses
52
+ * (such as testing for closed mesh).
51
53
  */
52
54
  export declare class IndexedEdgeMatcher {
53
55
  edges: SortableEdge[];
54
56
  constructor();
55
57
  /**
56
- * push a new edge.
57
- * @returns the edge (as emplaced at the back of the sortableEdge array)
58
+ * Push a new edge.
58
59
  * @param vertexA start vertex
59
60
  * @param vertexB end vertex
60
61
  * @param facetIndex facet index
62
+ * @returns the edge (as emplaced at the back of the sortableEdge array)
61
63
  */
62
64
  addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge;
63
65
  /**
64
- * Push edges all around a facet, returning to vertexArray[0]
66
+ * Push edges all around a facet, returning to vertexArray[0].
65
67
  * @param vertexArray array of vertex indices around facet
66
- * @param facetIndex
68
+ * @param facetIndex facet index
69
+ * @param closeLoop true to add an edge from last to first vertex.
67
70
  */
68
71
  addPath(vertexArray: number[], facetIndex: number, closeLoop?: boolean): void;
69
72
  /** Sort the edge index array. */
@@ -71,16 +74,20 @@ export declare class IndexedEdgeMatcher {
71
74
  /** Create a single or compound SortableEdgeCluster in dest. */
72
75
  private collectSortableEdgeCluster;
73
76
  /**
74
- * sort the edges, and look for three categories of paired edges:
77
+ * Sort the edges, and look for three categories of paired edges:
75
78
  * * caller must allocate all result arrays of interest.
76
79
  * * 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
80
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
81
+ * merged into the target.
82
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
83
+ * `allOther`, create `const allOther = []` as an empty array and call
79
84
  * `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.
85
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
86
+ * edges adjacent to two facets in opposing directions.
81
87
  * @param singletons optional array to receive edges that are simple boundary edges.
82
88
  * @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.
89
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
90
+ * but not a simple directed pair.
84
91
  */
85
92
  sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
86
93
  }
@@ -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,+BAA+B;IAC/B,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"}
@@ -14,26 +14,41 @@
14
14
  */
15
15
  export class SortableEdge extends Float64Array {
16
16
  /** Return the vertex index that appears first in the order stored. */
17
- get vertexIndexA() { return this[0]; }
17
+ get vertexIndexA() {
18
+ return this[0];
19
+ }
18
20
  /** Return the vertex index that appears second in the order stored. */
19
- get vertexIndexB() { return this[1]; }
21
+ get vertexIndexB() {
22
+ return this[1];
23
+ }
20
24
  /** Return the facet index. */
21
- get facetIndex() { return this[2]; }
22
- /** return true if vertexIndexA is less than vertexIndexB */
23
- get isLowHigh() { return this[0] < this[1]; }
24
- /** Return the vertex index with lower numeric value */
25
- get lowVertexIndex() { return this[0] < this[1] ? this[0] : this[1]; }
26
- /** Return the vertex index with higher numeric value */
27
- get highVertexIndex() { return this[0] > this[1] ? this[0] : this[1]; }
28
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
29
- static areDirectedPartners(edgeA, edgeB) { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }
30
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
25
+ get facetIndex() {
26
+ return this[2];
27
+ }
28
+ /** return true if vertexIndexA is less than vertexIndexB. */
29
+ get isLowHigh() {
30
+ return this[0] < this[1];
31
+ }
32
+ /** Return the vertex index with lower numeric value. */
33
+ get lowVertexIndex() {
34
+ return this[0] < this[1] ? this[0] : this[1];
35
+ }
36
+ /** Return the vertex index with higher numeric value. */
37
+ get highVertexIndex() {
38
+ return this[0] > this[1] ? this[0] : this[1];
39
+ }
40
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
41
+ static areDirectedPartners(edgeA, edgeB) {
42
+ return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];
43
+ }
44
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
31
45
  static areUndirectedPartners(edgeA, edgeB) {
32
46
  return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));
33
47
  }
34
- /** Return numeric relationship of edgeA and edgeB:
35
- * * 1 if they share start and end in the same order
36
- * * -1 if they share start and end in reversed order
48
+ /**
49
+ * Return numeric relationship of edgeA and edgeB:
50
+ * * 1 if they share start and end in the same order.
51
+ * * -1 if they share start and end in reversed order.
37
52
  * * 0 otherwise.
38
53
  */
39
54
  static relativeOrientation(edgeA, edgeB) {
@@ -43,10 +58,12 @@ export class SortableEdge extends Float64Array {
43
58
  return -1;
44
59
  return 0;
45
60
  }
46
- get isNullEdge() { return this[0] === this[1]; }
61
+ get isNullEdge() {
62
+ return this[0] === this[1];
63
+ }
47
64
  /**
48
- * lexical comparison of two edges.
49
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
65
+ * Lexical comparison of two edges.
66
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
50
67
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
51
68
  * @param edgeA first edge
52
69
  * @param edgeB second edge
@@ -74,7 +91,9 @@ export class SortableEdge extends Float64Array {
74
91
  this[1] = vertexB;
75
92
  this[2] = facetIndex;
76
93
  }
77
- toJSON() { return [this[0], this[1], this[2]]; }
94
+ toJSON() {
95
+ return [this[0], this[1], this[2]];
96
+ }
78
97
  static clusterToJSON(data) {
79
98
  if (data instanceof SortableEdge)
80
99
  return data.toJSON();
@@ -90,18 +109,19 @@ export class SortableEdge extends Float64Array {
90
109
  }
91
110
  }
92
111
  /**
93
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
112
+ * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses
113
+ * (such as testing for closed mesh).
94
114
  */
95
115
  export class IndexedEdgeMatcher {
96
116
  constructor() {
97
117
  this.edges = [];
98
118
  }
99
119
  /**
100
- * push a new edge.
101
- * @returns the edge (as emplaced at the back of the sortableEdge array)
120
+ * Push a new edge.
102
121
  * @param vertexA start vertex
103
122
  * @param vertexB end vertex
104
123
  * @param facetIndex facet index
124
+ * @returns the edge (as emplaced at the back of the sortableEdge array)
105
125
  */
106
126
  addEdge(vertexA, vertexB, facetIndex) {
107
127
  const edge = new SortableEdge(vertexA, vertexB, facetIndex);
@@ -109,9 +129,10 @@ export class IndexedEdgeMatcher {
109
129
  return edge;
110
130
  }
111
131
  /**
112
- * Push edges all around a facet, returning to vertexArray[0]
132
+ * Push edges all around a facet, returning to vertexArray[0].
113
133
  * @param vertexArray array of vertex indices around facet
114
- * @param facetIndex
134
+ * @param facetIndex facet index
135
+ * @param closeLoop true to add an edge from last to first vertex.
115
136
  */
116
137
  addPath(vertexArray, facetIndex, closeLoop = true) {
117
138
  if (vertexArray.length === 0)
@@ -142,16 +163,20 @@ export class IndexedEdgeMatcher {
142
163
  }
143
164
  }
144
165
  /**
145
- * sort the edges, and look for three categories of paired edges:
166
+ * Sort the edges, and look for three categories of paired edges:
146
167
  * * caller must allocate all result arrays of interest.
147
168
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
148
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
149
- * * 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
169
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
170
+ * merged into the target.
171
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
172
+ * `allOther`, create `const allOther = []` as an empty array and call
150
173
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
151
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
174
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
175
+ * edges adjacent to two facets in opposing directions.
152
176
  * @param singletons optional array to receive edges that are simple boundary edges.
153
177
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
154
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
178
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
179
+ * but not a simple directed pair.
155
180
  */
156
181
  sortAndCollectClusters(manifoldPairs, singletons, nullEdges, allOtherClusters) {
157
182
  this.sort();
@@ -168,7 +193,8 @@ export class IndexedEdgeMatcher {
168
193
  for (let index0 = 0; index0 < n; index0 += clusterLength) {
169
194
  const baseEdge = this.edges[index0];
170
195
  clusterLength = 1;
171
- for (let index1 = index0 + 1; index1 < n && SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
196
+ for (let index1 = index0 + 1; index1 < n &&
197
+ SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {
172
198
  clusterLength++;
173
199
  }
174
200
  if (this.edges[index0].isNullEdge) {
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,wEAAwE;IACxE,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,+BAA+B;IAC/B,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,4DAA4D;IAC5D,IAAW,SAAS,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,uDAAuD;IACvD,IAAW,cAAc,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,wDAAwD;IACxD,IAAW,eAAe,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,gGAAgG;IACzF,MAAM,CAAC,mBAAmB,CAAC,KAAmB,EAAE,KAAmB,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/I,6GAA6G;IACtG,MAAM,CAAC,qBAAqB,CAAC,KAAmB,EAAE,KAAmB;QAC1E,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,mBAAmB,CAAC,KAAmB,EAAE,KAAmB;QACxE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE;;;;;;OAMG;IACI,MAAM,CAAC,QAAQ,CAAC,KAAmB,EAAE,KAAmB;QAC7D,+CAA+C;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC;QAClC,IAAI,IAAI,GAAG,IAAI;YACb,OAAO,CAAC,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,IAAI;YACb,OAAO,CAAC,CAAC;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;QACpC,IAAI,KAAK,GAAG,KAAK;YACf,OAAO,CAAC,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,KAAK;YACf,OAAO,CAAC,CAAC;QACX,yDAAyD;QACzD,OAAO,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACjD,CAAC;IACD,YAAmB,OAAe,EAAE,OAAe,EAAE,UAAkB;QACrE,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACvB,CAAC;IACM,MAAM,KAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,aAAa,CAAC,IAAyB;QACnD,IAAI,IAAI,YAAY,YAAY;YAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IACM,MAAM,CAAC,kBAAkB,CAAC,IAA2B;QAC1D,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,OAAO,IAAI,IAAI;YACxB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAGD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAG7B;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IACD;;;;;;OAMG;IACI,OAAO,CAAC,OAAe,EAAE,OAAe,EAAE,UAAkB;QACjE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;;OAIG;IACI,OAAO,CAAC,WAAqB,EAAE,UAAkB,EAAE,YAAqB,IAAI;QACjF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,SAAS;YACX,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IACD,iCAAiC;IAC1B,IAAI;QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,+DAA+D;IACvD,0BAA0B,CAAC,MAAc,EAAE,MAAc,EAAE,IAAuC;QACxG,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;YAC1C,IAAI,MAAM,KAAK,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QAEH,CAAC;IACH,CAAC;IACD;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,aAAgD,EAAE,UAAkC,EAAE,SAAiC,EAAE,gBAAwC;QAC7L,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,aAAa;YAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,UAAU;YAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,IAAI,SAAS;YAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,gBAAgB;YAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,aAAa,CAAC;QAClB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,aAAa,GAAG,CAAC,CAAC;YAClB,KAAK,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;gBACvH,aAAa,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC;YAC7E,CAAC;iBAAM,IAAI,aAAa,KAAK,CAAC,IAAI,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrG,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,aAAa,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,gBAAgB,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module 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.\n */\nexport class SortableEdge extends Float64Array {\n /** Return the vertex index that appears first in the order stored. */\n public get vertexIndexA(): number { return this[0]; }\n /** Return the vertex index that appears second in the order stored. */\n public get vertexIndexB(): number { return this[1]; }\n /** Return the facet index. */\n public get facetIndex(): number { return this[2]; }\n /** return true if vertexIndexA is less than vertexIndexB */\n public get isLowHigh(): boolean { return this[0] < this[1]; }\n /** Return the vertex index with lower numeric value */\n public get lowVertexIndex(): number { return this[0] < this[1] ? this[0] : this[1]; }\n /** Return the vertex index with higher numeric value */\n public get highVertexIndex(): number { return this[0] > this[1] ? this[0] : this[1]; }\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 { return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]; }\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 /** 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 { return this[0] === this[1]; }\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 { return [this[0], this[1], this[2]]; }\n public static clusterToJSON(data: SortableEdgeCluster): any {\n if (data instanceof SortableEdge)\n return data.toJSON();\n\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}\n\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\n/**\n * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (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 * @returns the edge (as emplaced at the back of the sortableEdge array)\n * @param vertexA start vertex\n * @param vertexB end vertex\n * @param facetIndex facet index\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\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 /**\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 merged into the target.\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\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior 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 but not a simple directed pair.\n */\n public sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]) {\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 && 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"]}
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 {\r\n return this[0];\r\n }\r\n /** Return the vertex index that appears second in the order stored. */\r\n public get vertexIndexB(): number {\r\n return this[1];\r\n }\r\n /** Return the facet index. */\r\n public get facetIndex(): number {\r\n return this[2];\r\n }\r\n /** return true if vertexIndexA is less than vertexIndexB. */\r\n public get isLowHigh(): boolean {\r\n return this[0] < this[1];\r\n }\r\n /** Return the vertex index with lower numeric value. */\r\n public get lowVertexIndex(): number {\r\n return this[0] < this[1] ? this[0] : this[1];\r\n }\r\n /** Return the vertex index with higher numeric value. */\r\n public get highVertexIndex(): number {\r\n return this[0] > this[1] ? this[0] : this[1];\r\n }\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 {\r\n return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];\r\n }\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 /**\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 {\r\n return this[0] === this[1];\r\n }\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 {\r\n return [this[0], this[1], this[2]];\r\n }\r\n public static clusterToJSON(data: SortableEdgeCluster): any {\r\n if (data instanceof SortableEdge)\r\n return data.toJSON();\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\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\r\n * (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 * @param vertexA start vertex\r\n * @param vertexB end vertex\r\n * @param facetIndex facet index\r\n * @returns the edge (as emplaced at the back of the sortableEdge array)\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 facet index\r\n * @param closeLoop true to add an edge from last to first vertex.\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 * 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\r\n * merged into the target.\r\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array\r\n * `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\r\n * 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\r\n * but not a simple directed pair.\r\n */\r\n public sortAndCollectClusters(\r\n manifoldPairs: SortableEdgeCluster[] | undefined,\r\n singletons?: SortableEdgeCluster[],\r\n nullEdges?: SortableEdgeCluster[],\r\n allOtherClusters?: SortableEdgeCluster[],\r\n ): void {\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 &&\r\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"]}
@@ -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":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,YAAa,YAAW,eAAe;IACjF,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAEnC,SAAS,aAAa,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;IAYhE,yCAAyC;IAClC,cAAc,IAAI,eAAe;IAGxC,iEAAiE;IAC1D,sBAAsB,IAAI,MAAM;IAGvC;;;;;;;;OAQG;IACI,UAAU,CAAC,OAAO,EAAE,MAAM;IAGjC;;;OAGG;IACH,IAAW,iBAAiB,IAAI,MAAM,CAErC;IACD,+DAA+D;WACjD,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAGxF,yEAAyE;IAClE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAenD,yEAAyE;IAClE,eAAe,IAAI,OAAO;IAMjC,sEAAsE;IAC/D,KAAK,IAAI,IAAI;IAIpB;;;OAGG;IACI,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAcpF;;;OAGG;IACI,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IActF,sEAAsE;IAC/D,gBAAgB,IAAI,MAAM;IAGjC,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,+EAA+E;IACxE,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG3C,8EAA8E;IACvE,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAG1C,iFAAiF;IAC1E,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAGxC,wCAAwC;IACjC,WAAW,IAAI,IAAI;IAW1B,iGAAiG;IAC1F,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWhE;;;OAGG;IACI,wBAAwB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAchH;AACD;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IACtE,OAAO,CAAC,mBAAmB,CAAC,CAAW;IACvC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO;IAMP,OAAO,CAAC,kBAAkB;IAG1B;;;;;OAKG;WACW,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAU,GAAG,4BAA4B;IAG7I;;;;OAIG;IACa,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQ7D;;;OAGG;IACa,eAAe,IAAI,OAAO;IAM1C,qGAAqG;IACrF,KAAK,IAAI,IAAI;IAI7B;;;;OAIG;IACI,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKjE,iEAAiE;IACjD,sBAAsB,IAAI,MAAM;IAGhD;;;;;;;;;;;;MAYE;WACY,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,sBAAsB,EAAE,aAAa,GAAE,QAA2B,EAAE,SAAS,GAAE,KAAgC,EAAE,OAAO,GAAE,MAAU,GAAG,4BAA4B;CAiBjO"}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
@@ -205,7 +205,8 @@ export class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
205
205
  }
206
206
  /**
207
207
  * Advance the iterator to a particular facet in the subset of client polyface facets.
208
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within the client polyface.
208
+ * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
209
+ * the client polyface.
209
210
  * @return whether the iterator was successfully moved.
210
211
  */
211
212
  moveToReadIndex(activeIndex) {