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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (770) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.d.ts +8 -0
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +10 -0
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.js +7 -1
  11. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.d.ts +2 -1
  15. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineSurface.js +2 -1
  17. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  18. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  19. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  20. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  21. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  22. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  23. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  24. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  25. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  26. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  27. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  28. package/lib/cjs/clipping/ClipPlane.d.ts +7 -5
  29. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  30. package/lib/cjs/clipping/ClipPlane.js +9 -5
  31. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  32. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  33. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  34. package/lib/cjs/clipping/ClipUtils.js +5 -3
  35. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  36. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  37. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +1 -2
  38. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ConvexClipPlaneSet.js +13 -25
  40. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  41. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  42. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  43. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  44. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  45. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  46. package/lib/cjs/core-geometry.d.ts +1 -0
  47. package/lib/cjs/core-geometry.d.ts.map +1 -1
  48. package/lib/cjs/core-geometry.js +1 -0
  49. package/lib/cjs/core-geometry.js.map +1 -1
  50. package/lib/cjs/curve/Arc3d.d.ts +54 -32
  51. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  52. package/lib/cjs/curve/Arc3d.js +56 -37
  53. package/lib/cjs/curve/Arc3d.js.map +1 -1
  54. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  55. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  56. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  57. package/lib/cjs/curve/CurveCollection.d.ts +33 -1
  58. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  59. package/lib/cjs/curve/CurveCollection.js +79 -0
  60. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  61. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  62. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  63. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  64. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  65. package/lib/cjs/curve/CurveLocationDetail.d.ts +24 -24
  66. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  67. package/lib/cjs/curve/CurveLocationDetail.js +24 -24
  68. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  69. package/lib/cjs/curve/CurveOps.js.map +1 -1
  70. package/lib/cjs/curve/CurvePrimitive.d.ts +2 -2
  71. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  72. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  73. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  74. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  75. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  76. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  77. package/lib/cjs/curve/LineString3d.js.map +1 -1
  78. package/lib/cjs/curve/Loop.js.map +1 -1
  79. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  80. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  81. package/lib/cjs/curve/Path.js.map +1 -1
  82. package/lib/cjs/curve/PointString3d.js.map +1 -1
  83. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  84. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  85. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
  86. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  87. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  88. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  89. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  90. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +9 -5
  91. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  92. package/lib/cjs/curve/Query/PlanarSubdivision.js +27 -11
  93. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  94. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  95. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  96. package/lib/cjs/curve/RegionMomentsXY.d.ts +15 -21
  97. package/lib/cjs/curve/RegionMomentsXY.d.ts.map +1 -1
  98. package/lib/cjs/curve/RegionMomentsXY.js +39 -59
  99. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  100. package/lib/cjs/curve/RegionOps.d.ts +82 -39
  101. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  102. package/lib/cjs/curve/RegionOps.js +154 -48
  103. package/lib/cjs/curve/RegionOps.js.map +1 -1
  104. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +27 -26
  105. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  106. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +70 -54
  107. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  108. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  109. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  119. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  120. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  121. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  125. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  126. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  127. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  128. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  131. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +0 -1
  132. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  133. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  135. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  136. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js +34 -0
  137. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  138. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  139. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  140. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  141. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  142. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  143. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  144. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  145. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  146. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  147. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  148. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  149. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  150. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  151. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  152. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  153. package/lib/cjs/geometry3d/AngleSweep.d.ts +24 -17
  154. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  155. package/lib/cjs/geometry3d/AngleSweep.js +31 -17
  156. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  157. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  158. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  159. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  160. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  161. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +19 -25
  162. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  163. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  164. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  165. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  166. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  167. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  168. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  169. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  170. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +7 -2
  171. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  172. package/lib/cjs/geometry3d/GrowableXYZArray.js +20 -2
  173. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  174. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  175. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  176. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +2 -1
  177. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  178. package/lib/cjs/geometry3d/IndexedXYZCollection.js +7 -3
  179. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  180. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  181. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  182. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  183. package/lib/cjs/geometry3d/Plane3d.d.ts +2 -0
  184. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  185. package/lib/cjs/geometry3d/Plane3d.js +6 -1
  186. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  187. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  188. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  189. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  190. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  191. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  192. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  193. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  194. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  195. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  196. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  197. package/lib/cjs/geometry3d/Point2dVector2d.js +0 -2
  198. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  199. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  200. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +4 -4
  201. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  202. package/lib/cjs/geometry3d/Point3dVector3d.js +7 -8
  203. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  204. package/lib/cjs/geometry3d/PointHelpers.d.ts +7 -7
  205. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  206. package/lib/cjs/geometry3d/PointHelpers.js +66 -26
  207. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  208. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  209. package/lib/cjs/geometry3d/PolygonOps.d.ts +57 -9
  210. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  211. package/lib/cjs/geometry3d/PolygonOps.js +57 -17
  212. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  213. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  214. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  215. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  216. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  217. package/lib/cjs/geometry3d/PolylineOps.d.ts +5 -4
  218. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  219. package/lib/cjs/geometry3d/PolylineOps.js +5 -4
  220. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  221. package/lib/cjs/geometry3d/Range.d.ts +18 -10
  222. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  223. package/lib/cjs/geometry3d/Range.js +32 -10
  224. package/lib/cjs/geometry3d/Range.js.map +1 -1
  225. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  226. package/lib/cjs/geometry3d/Ray2d.js +0 -1
  227. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  228. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  229. package/lib/cjs/geometry3d/Ray3d.js +11 -23
  230. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  231. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  232. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  233. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  234. package/lib/cjs/geometry3d/Transform.d.ts +21 -2
  235. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  236. package/lib/cjs/geometry3d/Transform.js +32 -13
  237. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  238. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  239. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  240. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  241. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  242. package/lib/cjs/geometry4d/Matrix4d.d.ts +7 -7
  243. package/lib/cjs/geometry4d/Matrix4d.d.ts.map +1 -1
  244. package/lib/cjs/geometry4d/Matrix4d.js +9 -9
  245. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  246. package/lib/cjs/geometry4d/MomentData.d.ts +32 -34
  247. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  248. package/lib/cjs/geometry4d/MomentData.js +56 -57
  249. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  250. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  251. package/lib/cjs/geometry4d/Point4d.d.ts +7 -4
  252. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  253. package/lib/cjs/geometry4d/Point4d.js +26 -15
  254. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  255. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  256. package/lib/cjs/numerics/BezierPolynomials.d.ts +2 -0
  257. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  258. package/lib/cjs/numerics/BezierPolynomials.js +11 -0
  259. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  260. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  261. package/lib/cjs/numerics/Complex.js.map +1 -1
  262. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  263. package/lib/cjs/numerics/Newton.js.map +1 -1
  264. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  265. package/lib/cjs/numerics/PolarData.js.map +1 -1
  266. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  267. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  268. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  269. package/lib/cjs/numerics/SmallSystem.d.ts +77 -36
  270. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  271. package/lib/cjs/numerics/SmallSystem.js +129 -73
  272. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  273. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  274. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  275. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  276. package/lib/cjs/polyface/AuxData.js.map +1 -1
  277. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  278. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  279. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  280. package/lib/cjs/polyface/FacetOrientation.d.ts +1 -1
  281. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  282. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  283. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  284. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +55 -40
  285. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  286. package/lib/cjs/polyface/IndexedEdgeMatcher.js +83 -75
  287. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  288. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  289. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  290. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +47 -38
  291. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  292. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  293. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  294. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +47 -32
  295. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  296. package/lib/cjs/polyface/Polyface.d.ts +17 -3
  297. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  298. package/lib/cjs/polyface/Polyface.js +16 -0
  299. package/lib/cjs/polyface/Polyface.js.map +1 -1
  300. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  301. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  302. package/lib/cjs/polyface/PolyfaceClip.d.ts +19 -18
  303. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  304. package/lib/cjs/polyface/PolyfaceClip.js +39 -42
  305. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  306. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  307. package/lib/cjs/polyface/PolyfaceQuery.d.ts +116 -75
  308. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  309. package/lib/cjs/polyface/PolyfaceQuery.js +312 -228
  310. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  311. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  312. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  313. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  314. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  315. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  316. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  317. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  318. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +3 -3
  319. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  320. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  321. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  322. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  323. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  324. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  325. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  326. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  327. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  328. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  329. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  330. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  331. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  332. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  333. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  334. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  335. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  336. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  337. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  338. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  339. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  340. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  341. package/lib/cjs/serialization/GeometrySamples.js +2 -2
  342. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  343. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  344. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  345. package/lib/cjs/solid/Box.js.map +1 -1
  346. package/lib/cjs/solid/Cone.js.map +1 -1
  347. package/lib/cjs/solid/LinearSweep.d.ts +2 -3
  348. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  349. package/lib/cjs/solid/LinearSweep.js +2 -3
  350. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  351. package/lib/cjs/solid/RotationalSweep.d.ts +2 -2
  352. package/lib/cjs/solid/RotationalSweep.js +2 -2
  353. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  354. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  355. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  356. package/lib/cjs/solid/Sphere.js.map +1 -1
  357. package/lib/cjs/solid/SweepContour.js.map +1 -1
  358. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  359. package/lib/cjs/topology/ChainMerge.d.ts +1 -1
  360. package/lib/cjs/topology/ChainMerge.js +1 -1
  361. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  362. package/lib/cjs/topology/Graph.js.map +1 -1
  363. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  364. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +1 -0
  365. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  366. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -0
  367. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  368. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  369. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  370. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  371. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  372. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  373. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  374. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  375. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  376. package/lib/cjs/topology/MaskManager.js.map +1 -1
  377. package/lib/cjs/topology/Merging.d.ts +0 -1
  378. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  379. package/lib/cjs/topology/Merging.js +49 -46
  380. package/lib/cjs/topology/Merging.js.map +1 -1
  381. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  382. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  383. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  384. package/lib/cjs/topology/Triangulation.js.map +1 -1
  385. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  386. package/lib/esm/Constant.js.map +1 -1
  387. package/lib/esm/Geometry.d.ts +8 -0
  388. package/lib/esm/Geometry.d.ts.map +1 -1
  389. package/lib/esm/Geometry.js +10 -0
  390. package/lib/esm/Geometry.js.map +1 -1
  391. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  392. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  393. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  394. package/lib/esm/bspline/BSplineCurve.js +7 -1
  395. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  396. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  397. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  398. package/lib/esm/bspline/BSplineSurface.d.ts +2 -1
  399. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  400. package/lib/esm/bspline/BSplineSurface.js +2 -1
  401. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  402. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  403. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  404. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  405. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  406. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  407. package/lib/esm/bspline/KnotVector.js.map +1 -1
  408. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  409. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  410. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  411. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  412. package/lib/esm/clipping/ClipPlane.d.ts +7 -5
  413. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  414. package/lib/esm/clipping/ClipPlane.js +9 -5
  415. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  416. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  417. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  418. package/lib/esm/clipping/ClipUtils.js +5 -3
  419. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  420. package/lib/esm/clipping/ClipVector.js.map +1 -1
  421. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +1 -2
  422. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  423. package/lib/esm/clipping/ConvexClipPlaneSet.js +13 -25
  424. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  425. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +1 -2
  426. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  427. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +1 -2
  428. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  429. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  430. package/lib/esm/core-geometry.d.ts +1 -0
  431. package/lib/esm/core-geometry.d.ts.map +1 -1
  432. package/lib/esm/core-geometry.js +1 -0
  433. package/lib/esm/core-geometry.js.map +1 -1
  434. package/lib/esm/curve/Arc3d.d.ts +54 -32
  435. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  436. package/lib/esm/curve/Arc3d.js +56 -37
  437. package/lib/esm/curve/Arc3d.js.map +1 -1
  438. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  439. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  440. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  441. package/lib/esm/curve/CurveCollection.d.ts +33 -1
  442. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  443. package/lib/esm/curve/CurveCollection.js +79 -0
  444. package/lib/esm/curve/CurveCollection.js.map +1 -1
  445. package/lib/esm/curve/CurveCurve.js.map +1 -1
  446. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  447. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  448. package/lib/esm/curve/CurveFactory.js.map +1 -1
  449. package/lib/esm/curve/CurveLocationDetail.d.ts +24 -24
  450. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  451. package/lib/esm/curve/CurveLocationDetail.js +24 -24
  452. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  453. package/lib/esm/curve/CurveOps.js.map +1 -1
  454. package/lib/esm/curve/CurvePrimitive.d.ts +2 -2
  455. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  456. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  457. package/lib/esm/curve/CurveTypes.js.map +1 -1
  458. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  459. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  460. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  461. package/lib/esm/curve/LineString3d.js.map +1 -1
  462. package/lib/esm/curve/Loop.js.map +1 -1
  463. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  464. package/lib/esm/curve/ParityRegion.js.map +1 -1
  465. package/lib/esm/curve/Path.js.map +1 -1
  466. package/lib/esm/curve/PointString3d.js.map +1 -1
  467. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  468. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.d.ts.map +1 -1
  469. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +10 -5
  470. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  471. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  472. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  473. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  474. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +9 -5
  475. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  476. package/lib/esm/curve/Query/PlanarSubdivision.js +27 -11
  477. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  478. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  479. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  480. package/lib/esm/curve/RegionMomentsXY.d.ts +15 -21
  481. package/lib/esm/curve/RegionMomentsXY.d.ts.map +1 -1
  482. package/lib/esm/curve/RegionMomentsXY.js +39 -59
  483. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  484. package/lib/esm/curve/RegionOps.d.ts +82 -39
  485. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  486. package/lib/esm/curve/RegionOps.js +155 -49
  487. package/lib/esm/curve/RegionOps.js.map +1 -1
  488. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +27 -26
  489. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  490. package/lib/esm/curve/RegionOpsClassificationSweeps.js +70 -54
  491. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  492. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  493. package/lib/esm/curve/UnionRegion.js.map +1 -1
  494. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  495. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  496. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  497. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  498. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  499. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  500. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  501. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  502. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +0 -1
  503. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  504. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +58 -32
  505. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  506. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  507. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  508. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  509. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  510. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  511. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  512. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  513. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  514. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  515. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +0 -1
  516. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  517. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  518. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts +14 -0
  519. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.d.ts.map +1 -0
  520. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js +30 -0
  521. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -0
  522. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  523. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  524. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  525. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  526. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  527. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  528. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  529. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  530. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  531. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  532. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  533. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  534. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  535. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  536. package/lib/esm/geometry3d/Angle.js.map +1 -1
  537. package/lib/esm/geometry3d/AngleSweep.d.ts +24 -17
  538. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  539. package/lib/esm/geometry3d/AngleSweep.js +31 -17
  540. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  541. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  542. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  543. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +8 -7
  544. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  545. package/lib/esm/geometry3d/CoincidentGeometryOps.js +19 -25
  546. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  547. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  548. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  549. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  550. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  551. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  552. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  553. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  554. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +7 -2
  555. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  556. package/lib/esm/geometry3d/GrowableXYZArray.js +20 -2
  557. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  558. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  559. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  560. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +2 -1
  561. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  562. package/lib/esm/geometry3d/IndexedXYZCollection.js +7 -3
  563. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  564. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  565. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  566. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  567. package/lib/esm/geometry3d/Plane3d.d.ts +2 -0
  568. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  569. package/lib/esm/geometry3d/Plane3d.js +6 -1
  570. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  571. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +2 -0
  572. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  573. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +6 -1
  574. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  575. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +8 -2
  576. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  577. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +18 -10
  578. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  579. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  580. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  581. package/lib/esm/geometry3d/Point2dVector2d.js +0 -2
  582. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  583. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  584. package/lib/esm/geometry3d/Point3dVector3d.d.ts +4 -4
  585. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  586. package/lib/esm/geometry3d/Point3dVector3d.js +7 -8
  587. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  588. package/lib/esm/geometry3d/PointHelpers.d.ts +7 -7
  589. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  590. package/lib/esm/geometry3d/PointHelpers.js +66 -26
  591. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  592. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  593. package/lib/esm/geometry3d/PolygonOps.d.ts +57 -9
  594. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  595. package/lib/esm/geometry3d/PolygonOps.js +57 -17
  596. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  597. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +13 -6
  598. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  599. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +16 -9
  600. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  601. package/lib/esm/geometry3d/PolylineOps.d.ts +5 -4
  602. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  603. package/lib/esm/geometry3d/PolylineOps.js +5 -4
  604. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  605. package/lib/esm/geometry3d/Range.d.ts +18 -10
  606. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  607. package/lib/esm/geometry3d/Range.js +32 -10
  608. package/lib/esm/geometry3d/Range.js.map +1 -1
  609. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  610. package/lib/esm/geometry3d/Ray2d.js +0 -1
  611. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  612. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  613. package/lib/esm/geometry3d/Ray3d.js +11 -23
  614. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  615. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  616. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  617. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  618. package/lib/esm/geometry3d/Transform.d.ts +21 -2
  619. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  620. package/lib/esm/geometry3d/Transform.js +32 -13
  621. package/lib/esm/geometry3d/Transform.js.map +1 -1
  622. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  623. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  624. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  625. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  626. package/lib/esm/geometry4d/Matrix4d.d.ts +7 -7
  627. package/lib/esm/geometry4d/Matrix4d.d.ts.map +1 -1
  628. package/lib/esm/geometry4d/Matrix4d.js +9 -9
  629. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  630. package/lib/esm/geometry4d/MomentData.d.ts +32 -34
  631. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  632. package/lib/esm/geometry4d/MomentData.js +56 -57
  633. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  634. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  635. package/lib/esm/geometry4d/Point4d.d.ts +7 -4
  636. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  637. package/lib/esm/geometry4d/Point4d.js +26 -15
  638. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  639. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  640. package/lib/esm/numerics/BezierPolynomials.d.ts +2 -0
  641. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  642. package/lib/esm/numerics/BezierPolynomials.js +11 -0
  643. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  644. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  645. package/lib/esm/numerics/Complex.js.map +1 -1
  646. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  647. package/lib/esm/numerics/Newton.js.map +1 -1
  648. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  649. package/lib/esm/numerics/PolarData.js.map +1 -1
  650. package/lib/esm/numerics/Polynomials.js.map +1 -1
  651. package/lib/esm/numerics/Quadrature.js.map +1 -1
  652. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  653. package/lib/esm/numerics/SmallSystem.d.ts +77 -36
  654. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  655. package/lib/esm/numerics/SmallSystem.js +129 -73
  656. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  657. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  658. package/lib/esm/numerics/UnionFind.js.map +1 -1
  659. package/lib/esm/numerics/UsageSums.js.map +1 -1
  660. package/lib/esm/polyface/AuxData.js.map +1 -1
  661. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  662. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  663. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  664. package/lib/esm/polyface/FacetOrientation.d.ts +1 -1
  665. package/lib/esm/polyface/FacetOrientation.js +1 -1
  666. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  667. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  668. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +55 -40
  669. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  670. package/lib/esm/polyface/IndexedEdgeMatcher.js +83 -75
  671. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  672. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +15 -14
  673. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  674. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +47 -38
  675. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  676. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +26 -19
  677. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -1
  678. package/lib/esm/polyface/IndexedPolyfaceWalker.js +47 -32
  679. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  680. package/lib/esm/polyface/Polyface.d.ts +17 -3
  681. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  682. package/lib/esm/polyface/Polyface.js +16 -0
  683. package/lib/esm/polyface/Polyface.js.map +1 -1
  684. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  685. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  686. package/lib/esm/polyface/PolyfaceClip.d.ts +19 -18
  687. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  688. package/lib/esm/polyface/PolyfaceClip.js +39 -42
  689. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  690. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  691. package/lib/esm/polyface/PolyfaceQuery.d.ts +116 -75
  692. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  693. package/lib/esm/polyface/PolyfaceQuery.js +313 -229
  694. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  695. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  696. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  697. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  698. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  699. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  700. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +3 -3
  701. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  702. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +3 -3
  703. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  704. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  705. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  706. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  707. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  708. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  709. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  710. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  711. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  712. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  713. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  714. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +7 -6
  715. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  716. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +8 -9
  717. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  718. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  719. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  720. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  721. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  722. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  723. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  724. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  725. package/lib/esm/serialization/GeometrySamples.js +2 -2
  726. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  727. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  728. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  729. package/lib/esm/solid/Box.js.map +1 -1
  730. package/lib/esm/solid/Cone.js.map +1 -1
  731. package/lib/esm/solid/LinearSweep.d.ts +2 -3
  732. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  733. package/lib/esm/solid/LinearSweep.js +2 -3
  734. package/lib/esm/solid/LinearSweep.js.map +1 -1
  735. package/lib/esm/solid/RotationalSweep.d.ts +2 -2
  736. package/lib/esm/solid/RotationalSweep.js +2 -2
  737. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  738. package/lib/esm/solid/RuledSweep.js.map +1 -1
  739. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  740. package/lib/esm/solid/Sphere.js.map +1 -1
  741. package/lib/esm/solid/SweepContour.js.map +1 -1
  742. package/lib/esm/solid/TorusPipe.js.map +1 -1
  743. package/lib/esm/topology/ChainMerge.d.ts +1 -1
  744. package/lib/esm/topology/ChainMerge.js +1 -1
  745. package/lib/esm/topology/ChainMerge.js.map +1 -1
  746. package/lib/esm/topology/Graph.js.map +1 -1
  747. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  748. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +1 -0
  749. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  750. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -0
  751. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  752. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  753. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  754. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  755. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  756. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  757. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  758. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  759. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  760. package/lib/esm/topology/MaskManager.js.map +1 -1
  761. package/lib/esm/topology/Merging.d.ts +0 -1
  762. package/lib/esm/topology/Merging.d.ts.map +1 -1
  763. package/lib/esm/topology/Merging.js +49 -46
  764. package/lib/esm/topology/Merging.js.map +1 -1
  765. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  766. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  767. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  768. package/lib/esm/topology/Triangulation.js.map +1 -1
  769. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  770. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH;;;;;;GAMG;AACH,MAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,wEAAwE;IACxE,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD;;;OAGG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,6DAA6D;IAC7D,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,wDAAwD;IACxD,IAAW,cAAc;QACvB,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;IAC/C,CAAC;IACD,yDAAyD;IACzD,IAAW,eAAe;QACxB,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;IAC/C,CAAC;IACD,iGAAiG;IAC1F,MAAM,CAAC,mBAAmB,CAAC,KAAmB,EAAE,KAAmB;QACxE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,8GAA8G;IACvG,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;;;;;OAKG;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;QACnB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD;;;;;;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;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACM,MAAM,CAAC,aAAa,CAAC,IAAyB;QACnD,IAAI,IAAI,YAAY,YAAY;YAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,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;AAhGD,oCAgGC;AAED;;;GAGG;AACH,MAAa,kBAAkB;IACtB,KAAK,CAAiB;IAE7B;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;;;;;OAKG;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;QACH,CAAC;IACH,CAAC;IACD;;;;;;;;;;;;;;;OAeG;IACI,sBAAsB,CAC3B,aAAgD,EAChD,UAAkC,EAClC,SAAiC,EACjC,gBAAwC;QAExC,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;gBACtC,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;gBAC7E,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;AAjGD,gDAiGC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\n/**\n * * For boundary sorting, an edge is a (packed!) Float64Array.\n * * Fixed entry positions are:\n * * [0] is start vertex index (in CCW order around its facet)\n * * [1] is end vertex index (in CCW order around its facet)\n * * [2] is facet index (or another number to associate with this edge).\n */\nexport class SortableEdge extends Float64Array {\n /** Return the vertex index that appears first in the order stored. */\n public get vertexIndexA(): number {\n return this[0];\n }\n /** Return the vertex index that appears second in the order stored. */\n public get vertexIndexB(): number {\n return this[1];\n }\n /**\n * Return the facet index.\n * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.\n */\n public get facetIndex(): number {\n return this[2];\n }\n /** return true if vertexIndexA is less than vertexIndexB. */\n public get isLowHigh(): boolean {\n return this[0] < this[1];\n }\n /** Return the vertex index with lower numeric value. */\n public get lowVertexIndex(): number {\n return this[0] < this[1] ? this[0] : this[1];\n }\n /** Return the vertex index with higher numeric value. */\n public get highVertexIndex(): number {\n return this[0] > this[1] ? this[0] : this[1];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0];\n }\n /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\n return (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) || ((edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]));\n }\n /**\n * Return numeric relationship of edgeA and edgeB:\n * * 1 if they share start and end in the same order.\n * * -1 if they share start and end in reversed order.\n * * 0 otherwise.\n */\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\n if (edgeA[0] === edgeB[0] && edgeA[1] === edgeB[1]) return 1;\n if (edgeA[0] === edgeB[1] && edgeA[1] === edgeB[0]) return -1;\n return 0;\n }\n\n public get isNullEdge(): boolean {\n return this[0] === this[1];\n }\n /**\n * Lexical comparison of two edges.\n * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.\n * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.\n * @param edgeA first edge\n * @param edgeB second edge\n */\n public static lessThan(edgeA: SortableEdge, edgeB: SortableEdge): number {\n // primary compare is based on indirect indices\n const lowA = edgeA.lowVertexIndex;\n const lowB = edgeB.lowVertexIndex;\n if (lowA < lowB)\n return -1;\n if (lowB < lowA)\n return 1;\n const highA = edgeA.highVertexIndex;\n const highB = edgeB.highVertexIndex;\n if (highA < highB)\n return -1;\n if (highB < highA)\n return 1;\n // undirected indices match ... use directed vertexIndexA\n return edgeA.vertexIndexA - edgeB.vertexIndexA;\n }\n public constructor(vertexA: number, vertexB: number, facetIndex: number) {\n super(3);\n this[0] = vertexA;\n this[1] = vertexB;\n this[2] = facetIndex;\n }\n public toJSON(): any {\n return [this[0], this[1], this[2]];\n }\n public static clusterToJSON(data: SortableEdgeCluster): any {\n if (data instanceof SortableEdge)\n return data.toJSON();\n const result = [];\n for (const edge of data) result.push(edge.toJSON());\n }\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\n const result = [];\n for (const cluster of data)\n result.push(SortableEdge.clusterToJSON(cluster));\n return result;\n }\n}\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\n/**\n * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses\n * (such as testing for closed mesh).\n */\nexport class IndexedEdgeMatcher {\n public edges: SortableEdge[];\n\n constructor() {\n this.edges = [];\n }\n /**\n * Push a new edge.\n * @param vertexA start vertex\n * @param vertexB end vertex\n * @param facetIndex value to carry along during matching\n * @returns the edge pushed onto the `edges` array\n */\n public addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge {\n const edge = new SortableEdge(vertexA, vertexB, facetIndex);\n this.edges.push(edge);\n return edge;\n }\n /**\n * Push edges all around a facet, returning to vertexArray[0].\n * @param vertexArray array of vertex indices around facet\n * @param facetIndex value to carry along during matching\n * @param closeLoop true to add an edge from last to first vertex.\n */\n public addPath(vertexArray: number[], facetIndex: number, closeLoop: boolean = true) {\n if (vertexArray.length === 0) return;\n const m = vertexArray.length - 1;\n for (let i = 0; i < m; i++) {\n this.addEdge(vertexArray[i], vertexArray[i + 1], facetIndex);\n }\n if (closeLoop)\n this.addEdge(vertexArray[m], vertexArray[0], facetIndex);\n }\n /** Sort the edge index array. */\n public sort() {\n this.edges.sort((edgeA, edgeB) => SortableEdge.lessThan(edgeA, edgeB));\n }\n /** Create a single or compound SortableEdgeCluster in dest. */\n private collectSortableEdgeCluster(index0: number, index1: number, dest: SortableEdgeCluster[] | undefined) {\n if (dest !== undefined && index1 > index0) {\n if (index1 === index0 + 1) {\n dest.push(this.edges[index0]);\n } else {\n const cluster = [];\n for (let i = index0; i < index1; i++)\n cluster.push(this.edges[i]);\n dest.push(cluster);\n }\n }\n }\n /**\n * Sort the edges, and look for three categories of paired edges:\n * * caller must allocate all result arrays of interest.\n * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.\n * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are\n * merged into the target.\n * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array\n * `allOther`, create `const allOther = []` as an empty array and call\n * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`\n * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior\n * edges adjacent to two facets in opposing directions.\n * @param singletons optional array to receive edges that are simple boundary edges.\n * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)\n * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense\n * but not a simple directed pair.\n */\n public sortAndCollectClusters(\n manifoldPairs: SortableEdgeCluster[] | undefined,\n singletons?: SortableEdgeCluster[],\n nullEdges?: SortableEdgeCluster[],\n allOtherClusters?: SortableEdgeCluster[],\n ): void {\n this.sort();\n if (manifoldPairs) manifoldPairs.length = 0;\n if (singletons) singletons.length = 0;\n if (nullEdges) nullEdges.length = 0;\n if (allOtherClusters) allOtherClusters.length = 0;\n const n = this.edges.length;\n let clusterLength;\n for (let index0 = 0; index0 < n; index0 += clusterLength) {\n const baseEdge = this.edges[index0];\n clusterLength = 1;\n for (let index1 = index0 + 1; index1 < n &&\n SortableEdge.areUndirectedPartners(baseEdge, this.edges[index1]); index1++) {\n clusterLength++;\n }\n if (this.edges[index0].isNullEdge) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, nullEdges);\n } else if (clusterLength === 2 && SortableEdge.areDirectedPartners(baseEdge, this.edges[index0 + 1])) {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, manifoldPairs);\n } else if (clusterLength === 1) {\n this.collectSortableEdgeCluster(index0, index0 + 1, singletons);\n } else {\n this.collectSortableEdgeCluster(index0, index0 + clusterLength, allOtherClusters);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"IndexedEdgeMatcher.js","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH;;;;;GAKG;AACH,MAAa,YAAY;IACf,EAAE,CAAW;IACb,EAAE,CAAS;IAEnB,mBAAmB;IACnB,YAAmB,WAAmB,EAAE,SAAiB,EAAE,UAAkB;QAC3E,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC;IACvB,CAAC;IACD,sBAAsB;IACf,KAAK;QACV,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,uEAAuE;IACvE,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,wEAAwE;IACxE,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD;;;OAGG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IACD,6DAA6D;IAC7D,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,wDAAwD;IACxD,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,yDAAyD;IACzD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,mFAAmF;IAC3E,MAAM,CAAC,WAAW,CAAC,KAAmB,EAAE,KAAmB;QACjE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,oFAAoF;IAC7E,MAAM,CAAC,mBAAmB,CAAC,KAAmB,EAAE,KAAmB;QACxE,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,gGAAgG;IACzF,MAAM,CAAC,qBAAqB,CAAC,KAAmB,EAAE,KAAmB;QAC1E,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,mBAAmB,CAAC,KAAmB,EAAE,KAAmB;QACxE,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;YAChC,OAAO,CAAC,CAAC;QACX,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;YACxC,OAAO,CAAC,CAAC,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IACD,0DAA0D;IAC1D,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,CAAC,KAAmB,EAAE,KAAmB;QAC7D,+CAA+C;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;QAC7B,IAAI,IAAI,GAAG,IAAI;YACb,OAAO,CAAC,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,IAAI;YACb,OAAO,CAAC,CAAC;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;QAC/B,IAAI,KAAK,GAAG,KAAK;YACf,OAAO,CAAC,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,KAAK;YACf,OAAO,CAAC,CAAC;QACX,yDAAyD;QACzD,OAAO,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/C,CAAC;IACD,4CAA4C;IACrC,MAAM;QACX,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,+CAA+C;IACxC,MAAM,CAAC,aAAa,CAAC,IAAyB;QACnD,IAAI,IAAI,YAAY,YAAY;YAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI;YACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,oDAAoD;IAC7C,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;AA/GD,oCA+GC;AAQD;;;;GAIG;AACH,MAAa,kBAAkB;IAC7B,uCAAuC;IAChC,KAAK,CAAiB;IAC7B,wEAAwE;IACxE;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;;;;;;OAMG;IACI,OAAO,CAAC,aAAuB,EAAE,UAAkB,EAAE,SAAkB;QAC5E,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAC5B,OAAO;QACT,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnE,IAAI,SAAS;YACX,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IACD,sBAAsB;IACf,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;QACH,CAAC;IACH,CAAC;IACD;;;;;;;;;;;;;OAaG;IACI,sBAAsB,CAC3B,aAAqC,EACrC,UAAkC,EAClC,SAAiC,EACjC,gBAAwC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,aAAa;YACf,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,IAAI,UAAU;YACZ,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,SAAS;YACX,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,IAAI,gBAAgB;YAClB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,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;gBACtC,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;gBAC7E,aAAa,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU;gBAC/B,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC;iBACxE,IAAI,aAAa,KAAK,CAAC,IAAI,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAChG,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,aAAa,CAAC,CAAC;iBAC5E,IAAI,aAAa,KAAK,CAAC;gBAC1B,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;;gBAEhE,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;CACF;AApGD,gDAoGC","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 * Represent an [[IndexedPolyface]] edge as:\r\n * * vertex start index and vertex end index (CCW order around its facet)\r\n * * an additional number to associate with the edge (e.g., facet index)\r\n * @public\r\n */\r\nexport class SortableEdge {\r\n private _v: number[];\r\n private _a: number;\r\n\r\n /** Constructor. */\r\n public constructor(startVertex: number, endVertex: number, facetIndex: number) {\r\n this._v = [startVertex, endVertex];\r\n this._a = facetIndex;\r\n }\r\n /** Clone the edge. */\r\n public clone(): SortableEdge {\r\n return new SortableEdge(this._v[0], this._v[1], this._a);\r\n }\r\n /** Return the vertex index that appears first in the order stored. */\r\n public get startVertex(): number {\r\n return this._v[0];\r\n }\r\n /** Return the vertex index that appears second in the order stored. */\r\n public get endVertex(): number {\r\n return this._v[1];\r\n }\r\n /**\r\n * Return the facet index.\r\n * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.\r\n */\r\n public get facetIndex(): number {\r\n return this._a;\r\n }\r\n /** return true if `startVertex` is less than `endVertex`. */\r\n public get isLowHigh(): boolean {\r\n return this._v[0] < this._v[1];\r\n }\r\n /** Return the vertex index with lower numeric value. */\r\n public get lowVertex(): number {\r\n return this.isLowHigh ? this._v[0] : this._v[1];\r\n }\r\n /** Return the vertex index with higher numeric value. */\r\n public get highVertex(): number {\r\n return this.isLowHigh ? this._v[1] : this._v[0];\r\n }\r\n /** Return true if edgeA and edgeB traverse the same edge in the same direction. */\r\n private static areSameEdge(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\r\n return edgeA._v[0] === edgeB._v[0] && edgeA._v[1] === edgeB._v[1];\r\n }\r\n /** Return true if edgeA and edgeB traverse the same edge in opposite directions. */\r\n public static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\r\n return edgeA._v[0] === edgeB._v[1] && edgeA._v[1] === edgeB._v[0];\r\n }\r\n /** Return true if edgeA and edgeB traverse the same edge in the same or opposite directions. */\r\n public static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean {\r\n return this.areSameEdge(edgeA, edgeB) || this.areDirectedPartners(edgeA, edgeB);\r\n }\r\n /**\r\n * Return numeric identifier for the relationship between edgeA and edgeB:\r\n * * 1 if they share start and end vertex indices in the same order.\r\n * * -1 if they share start and end vertex indices in reversed order.\r\n * * 0 otherwise.\r\n */\r\n public static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number {\r\n if (this.areSameEdge(edgeA, edgeB))\r\n return 1;\r\n if (this.areDirectedPartners(edgeA, edgeB))\r\n return -1;\r\n return 0;\r\n }\r\n /** Whether the start and end vertex indices are equal. */\r\n public get isNullEdge(): boolean {\r\n return this._v[0] === this._v[1];\r\n }\r\n /**\r\n * Lexical comparison of two edges.\r\n * * If the edges have the same vertex index pair (in same or opposite order) they will end up adjacent in a sort.\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.lowVertex;\r\n const lowB = edgeB.lowVertex;\r\n if (lowA < lowB)\r\n return -1;\r\n if (lowB < lowA)\r\n return 1;\r\n const highA = edgeA.highVertex;\r\n const highB = edgeB.highVertex;\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.startVertex - edgeB.startVertex;\r\n }\r\n /** Return the edge data as a JSON array. */\r\n public toJSON(): any {\r\n return [this._v[0], this._v[1], this._a];\r\n }\r\n /** Return the edge cluster in JSON format. */\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)\r\n result.push(edge.toJSON());\r\n }\r\n /** Return the edge cluster array in JSON format. */\r\n public static clusterArrayToJSON(data: SortableEdgeCluster[]) {\r\n const result = [];\r\n for (const cluster of data)\r\n result.push(SortableEdge.clusterToJSON(cluster));\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Union type for a single [[SortableEdge]] or a (matched) array of them.\r\n * @public\r\n */\r\nexport type SortableEdgeCluster = SortableEdge | SortableEdge[];\r\n\r\n/**\r\n * An IndexedEdgeMatcher carries an array of edge start and end indices for sorting and subsequent analyses,\r\n * such as testing for closed mesh.\r\n * @public\r\n */\r\nexport class IndexedEdgeMatcher {\r\n /** The array of edges to be sorted. */\r\n public edges: SortableEdge[];\r\n /** Constructor. Call [[addEdge]] or [[addPath]] to populate `edges`. */\r\n public 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 value to carry along during matching\r\n * @returns the edge pushed onto the `edges` 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 along a path.\r\n * * Typically used to add edges around a facet.\r\n * @param vertexIndices array of vertex indices along an open or closed path.\r\n * @param facetIndex value to set on each edge pushed.\r\n * @param closeLoop true to add an edge from last to first vertex.\r\n */\r\n public addPath(vertexIndices: number[], facetIndex: number, closeLoop: boolean) {\r\n if (vertexIndices.length === 0)\r\n return;\r\n const m = vertexIndices.length - 1;\r\n for (let i = 0; i < m; i++)\r\n this.addEdge(vertexIndices[i], vertexIndices[i + 1], facetIndex);\r\n if (closeLoop)\r\n this.addEdge(vertexIndices[m], vertexIndices[0], facetIndex);\r\n }\r\n /** Sort the edges. */\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 collect up to four categories of edges: manifold pairs, singletons, null edges,\r\n * and everything else.\r\n * * Caller should allocate arrays of interest.\r\n * * Any combination of the arrays may be `undefined`, indicating that category is to be ignored.\r\n * * Any combination of the arrays may be aliased as the same target, in which case the aliased categories are\r\n * merged into the target.\r\n * * For instance, to ignore manifold pairs and collect all other edges in a single array:\r\n * `const foo = []; matcher.sortAndCollectClusters(undefined, foo, foo, foo);`\r\n * @param manifoldPairs array to receive pairs of properly mated edges, i.e. mesh interior edges.\r\n * @param singletons array to receive edges that have no partner, i.e., mesh boundary edges.\r\n * @param nullEdges array to receive arrays of matched null edges, for which start === end vertex index.\r\n * @param allOtherClusters array to receive arrays of edges that are partners in an undirected, non-manifold sense.\r\n */\r\n public sortAndCollectClusters(\r\n manifoldPairs?: SortableEdgeCluster[],\r\n singletons?: SortableEdgeCluster[],\r\n nullEdges?: SortableEdgeCluster[],\r\n allOtherClusters?: SortableEdgeCluster[],\r\n ): void {\r\n this.sort();\r\n if (manifoldPairs)\r\n manifoldPairs.length = 0;\r\n if (singletons)\r\n singletons.length = 0;\r\n if (nullEdges)\r\n nullEdges.length = 0;\r\n if (allOtherClusters)\r\n 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"]}
@@ -40,7 +40,7 @@ export declare class IndexedPolyfaceVisitor extends PolyfaceData implements Poly
40
40
  moveToReadIndex(facetIndex: number): boolean;
41
41
  /** Advance the iterator to a the 'next' facet in the client polyface. */
42
42
  moveToNextFacet(): boolean;
43
- /** Reset the iterator to start at the first facet of the polyface. */
43
+ /** Restart the visitor at the first facet. */
44
44
  reset(): void;
45
45
  /**
46
46
  * Attempts to extract the distance parameter for the given vertex `index` on the current facet.
@@ -73,6 +73,8 @@ export declare class IndexedPolyfaceVisitor extends PolyfaceData implements Poly
73
73
  * * All data values are interpolated at `fraction` between `other` values at `index0` and `index1`.
74
74
  */
75
75
  pushInterpolatedDataFrom(other: PolyfaceVisitor, index0: number, fraction: number, index1: number): void;
76
+ /** Create a visitor for a subset of the facets visitable by the instance. */
77
+ createSubsetVisitor(facetIndices: number[], numWrap?: number): IndexedPolyfaceSubsetVisitor;
76
78
  }
77
79
  /**
78
80
  * An `IndexedPolyfaceSubsetVisitor` is an `IndexedPolyfaceVisitor` which only visits a subset of facets in the polyface.
@@ -81,38 +83,37 @@ export declare class IndexedPolyfaceVisitor extends PolyfaceData implements Poly
81
83
  * @public
82
84
  */
83
85
  export declare class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
84
- private _parentFacetIndices?;
85
- private _currentActiveIndex;
86
- private _nextActiveIndex;
86
+ private _facetIndices;
87
+ private _currentSubsetIndex;
88
+ private _nextSubsetIndex;
87
89
  private constructor();
88
90
  private isValidSubsetIndex;
89
91
  /**
90
92
  * Create a visitor for iterating a subset of the facets of `polyface`.
91
93
  * @param polyface reference to the client polyface, supplying facets
92
- * @param activeFacetIndices array of indices of facets in the client polyface to visit. This array is cloned.
94
+ * @param facetIndices array of indices of facets in the client polyface to visit. This array is cloned.
93
95
  * @param numWrap number of vertices replicated in the visitor arrays to facilitate simpler caller code. Default is zero.
94
96
  */
95
- static createSubsetVisitor(polyface: IndexedPolyface, activeFacetIndices: number[], numWrap?: number): IndexedPolyfaceSubsetVisitor;
97
+ static createSubsetVisitor(polyface: IndexedPolyface, facetIndices: number[], numWrap?: number): IndexedPolyfaceSubsetVisitor;
96
98
  /**
97
99
  * 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
99
- * the client polyface.
100
+ * @param subsetIndex index into the subset array, not to be confused with the client facet index.
100
101
  * @return whether the iterator was successfully moved.
101
102
  */
102
- moveToReadIndex(activeIndex: number): boolean;
103
+ moveToReadIndex(subsetIndex: number): boolean;
103
104
  /**
104
105
  * Advance the iterator to the next facet in the subset of client polyface facets.
105
106
  * @return whether the iterator was successfully moved.
106
107
  */
107
108
  moveToNextFacet(): boolean;
108
- /** Reset the iterator to start at the first active facet in the subset of client polyface facets. */
109
+ /** Restart the visitor at the first facet. */
109
110
  reset(): void;
110
111
  /**
111
- * Return the parent facet index of the indicated index within the subset of client polyface facets.
112
- * @param activeIndex index of the facet within the subset. Default is the active facet.
113
- * @return valid client polyface facet index, or `undefined` if invalid input index.
112
+ * Return the client polyface facet index (aka "readIndex") for the given subset index.
113
+ * @param subsetIndex index into the subset array. Default is the subset index of the currently visited facet.
114
+ * @return valid client polyface facet index, or `undefined` if invalid subset index.
114
115
  */
115
- parentFacetIndex(activeIndex?: number): number | undefined;
116
+ parentFacetIndex(subsetIndex?: number): number | undefined;
116
117
  /** Return the number of facets this visitor is able to visit. */
117
118
  getVisitableFacetCount(): number;
118
119
  /**
@@ -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;IAchE,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,sFAAsF;IAC/E,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,6CAA6C;IACtC,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,CAC/B,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAU,GAC3E,4BAA4B;IAG/B;;;;;OAKG;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,CAClC,IAAI,EAAE,eAAe,GAAG,sBAAsB,EAC9C,aAAa,GAAE,QAA2B,EAC1C,SAAS,GAAE,KAAgC,EAC3C,OAAO,GAAE,MAAU,GAClB,4BAA4B;CAiBhC"}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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"}
@@ -34,10 +34,10 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
34
34
  this.auxData = polyface.data.auxData.createForVisitor();
35
35
  if (polyface.data.edgeMateIndex)
36
36
  this.edgeMateIndex = [];
37
- this.reset();
38
37
  this._numEdges = 0;
39
38
  this._nextFacetIndex = 0;
40
39
  this._currentFacetIndex = -1;
40
+ this.reset();
41
41
  }
42
42
  /** Return the client polyface object. */
43
43
  clientPolyface() {
@@ -74,11 +74,14 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
74
74
  moveToReadIndex(facetIndex) {
75
75
  if (!this._polyface.isValidFacetIndex(facetIndex))
76
76
  return false;
77
- this._currentFacetIndex = facetIndex;
77
+ const numEdges = this._polyface.numEdgeInFacet(facetIndex);
78
+ if (this._currentFacetIndex !== facetIndex || numEdges + this._numWrap !== this.pointCount) {
79
+ this._currentFacetIndex = facetIndex;
80
+ this._numEdges = numEdges;
81
+ this.resizeAllArrays(this._numEdges + this._numWrap);
82
+ this.gatherIndexedData(this._polyface.data, this._polyface.facetIndex0(this._currentFacetIndex), this._polyface.facetIndex1(this._currentFacetIndex), this._numWrap);
83
+ }
78
84
  this._nextFacetIndex = facetIndex + 1;
79
- this._numEdges = this._polyface.numEdgeInFacet(facetIndex);
80
- this.resizeAllArrays(this._numEdges + this._numWrap);
81
- this.gatherIndexedData(this._polyface.data, this._polyface.facetIndex0(this._currentFacetIndex), this._polyface.facetIndex1(this._currentFacetIndex), this._numWrap);
82
85
  return true;
83
86
  }
84
87
  /** Advance the iterator to a the 'next' facet in the client polyface. */
@@ -88,7 +91,7 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
88
91
  this._nextFacetIndex++;
89
92
  return true;
90
93
  }
91
- /** Reset the iterator to start at the first facet of the polyface. */
94
+ /** Restart the visitor at the first facet. */
92
95
  reset() {
93
96
  this.moveToReadIndex(0);
94
97
  this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.
@@ -187,6 +190,10 @@ class IndexedPolyfaceVisitor extends PolyfaceData_1.PolyfaceData {
187
190
  this.color.push(Geometry_1.Geometry.interpolateColor(other.color[index0], fraction, other.color[index1]));
188
191
  // TODO: auxData? taggedNumericData?
189
192
  }
193
+ /** Create a visitor for a subset of the facets visitable by the instance. */
194
+ createSubsetVisitor(facetIndices, numWrap = 0) {
195
+ return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(this._polyface, facetIndices, numWrap);
196
+ }
190
197
  }
191
198
  exports.IndexedPolyfaceVisitor = IndexedPolyfaceVisitor;
192
199
  /**
@@ -196,38 +203,38 @@ exports.IndexedPolyfaceVisitor = IndexedPolyfaceVisitor;
196
203
  * @public
197
204
  */
198
205
  class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
199
- _parentFacetIndices; // only undefined during super constructor!
200
- _currentActiveIndex; // index within _parentFacetIndices, or -1 after construction
201
- _nextActiveIndex; // index within _parentFacetIndices
202
- constructor(polyface, activeFacetIndices, numWrap) {
206
+ _facetIndices;
207
+ _currentSubsetIndex; // index within _facetIndices
208
+ _nextSubsetIndex; // index within _facetIndices
209
+ constructor(polyface, facetIndices, numWrap) {
203
210
  super(polyface, numWrap);
204
- this._parentFacetIndices = activeFacetIndices.slice();
205
- this._currentActiveIndex = -1;
206
- this._nextActiveIndex = 0;
211
+ this._facetIndices = facetIndices.slice();
212
+ this._currentSubsetIndex = -1;
213
+ this._nextSubsetIndex = 0;
214
+ this.reset();
207
215
  }
208
216
  isValidSubsetIndex(index) {
209
- return (undefined !== this._parentFacetIndices) && index >= 0 && index < this._parentFacetIndices.length;
217
+ return index >= 0 && index < this._facetIndices.length;
210
218
  }
211
219
  /**
212
220
  * Create a visitor for iterating a subset of the facets of `polyface`.
213
221
  * @param polyface reference to the client polyface, supplying facets
214
- * @param activeFacetIndices array of indices of facets in the client polyface to visit. This array is cloned.
222
+ * @param facetIndices array of indices of facets in the client polyface to visit. This array is cloned.
215
223
  * @param numWrap number of vertices replicated in the visitor arrays to facilitate simpler caller code. Default is zero.
216
224
  */
217
- static createSubsetVisitor(polyface, activeFacetIndices, numWrap = 0) {
218
- return new IndexedPolyfaceSubsetVisitor(polyface, activeFacetIndices, numWrap);
225
+ static createSubsetVisitor(polyface, facetIndices, numWrap = 0) {
226
+ return new IndexedPolyfaceSubsetVisitor(polyface, facetIndices, numWrap);
219
227
  }
220
228
  /**
221
229
  * Advance the iterator to a particular facet in the subset of client polyface facets.
222
- * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within
223
- * the client polyface.
230
+ * @param subsetIndex index into the subset array, not to be confused with the client facet index.
224
231
  * @return whether the iterator was successfully moved.
225
232
  */
226
- moveToReadIndex(activeIndex) {
227
- if (this.isValidSubsetIndex(activeIndex)) {
228
- this._currentActiveIndex = activeIndex;
229
- this._nextActiveIndex = activeIndex + 1;
230
- return super.moveToReadIndex(this._parentFacetIndices[activeIndex]);
233
+ moveToReadIndex(subsetIndex) {
234
+ if (this.isValidSubsetIndex(subsetIndex)) {
235
+ this._currentSubsetIndex = subsetIndex;
236
+ this._nextSubsetIndex = subsetIndex + 1;
237
+ return super.moveToReadIndex(this._facetIndices[subsetIndex]);
231
238
  }
232
239
  return false;
233
240
  }
@@ -236,29 +243,31 @@ class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
236
243
  * @return whether the iterator was successfully moved.
237
244
  */
238
245
  moveToNextFacet() {
239
- if (this._nextActiveIndex !== this._currentActiveIndex)
240
- return this.moveToReadIndex(this._nextActiveIndex);
241
- this._nextActiveIndex++;
246
+ if (this._nextSubsetIndex !== this._currentSubsetIndex)
247
+ return this.moveToReadIndex(this._nextSubsetIndex);
248
+ this._nextSubsetIndex++;
242
249
  return true;
243
250
  }
244
- /** Reset the iterator to start at the first active facet in the subset of client polyface facets. */
251
+ /** Restart the visitor at the first facet. */
245
252
  reset() {
246
- this.moveToReadIndex(0);
247
- this._nextActiveIndex = 0; // so immediate moveToNextFacet stays here.
253
+ if (this._facetIndices) { // avoid crash during super ctor when we aren't yet initialized
254
+ this.moveToReadIndex(0);
255
+ this._nextSubsetIndex = 0; // so immediate moveToNextFacet stays here.
256
+ }
248
257
  }
249
258
  /**
250
- * Return the parent facet index of the indicated index within the subset of client polyface facets.
251
- * @param activeIndex index of the facet within the subset. Default is the active facet.
252
- * @return valid client polyface facet index, or `undefined` if invalid input index.
259
+ * Return the client polyface facet index (aka "readIndex") for the given subset index.
260
+ * @param subsetIndex index into the subset array. Default is the subset index of the currently visited facet.
261
+ * @return valid client polyface facet index, or `undefined` if invalid subset index.
253
262
  */
254
- parentFacetIndex(activeIndex) {
255
- if (undefined === activeIndex)
256
- activeIndex = this._currentActiveIndex;
257
- return this.isValidSubsetIndex(activeIndex) ? this._parentFacetIndices[activeIndex] : undefined;
263
+ parentFacetIndex(subsetIndex) {
264
+ if (undefined === subsetIndex)
265
+ subsetIndex = this._currentSubsetIndex;
266
+ return this.isValidSubsetIndex(subsetIndex) ? this._facetIndices[subsetIndex] : undefined;
258
267
  }
259
268
  /** Return the number of facets this visitor is able to visit. */
260
269
  getVisitableFacetCount() {
261
- return this._parentFacetIndices ? this._parentFacetIndices.length : 0;
270
+ return this._facetIndices.length;
262
271
  }
263
272
  /**
264
273
  * Create a visitor for those mesh facets with normal in the same half-space as the given vector.
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedPolyfaceVisitor.js","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { IndexedPolyface, PolyfaceVisitor } from \"./Polyface\";\nimport { PolyfaceData } from \"./PolyfaceData\";\n\n/**\n * An `IndexedPolyfaceVisitor` is an iterator-like object that \"visits\" facets of a mesh.\n * * The visitor extends `PolyfaceData`, so it can at any time hold all the data of a single facet.\n * @public\n */\nexport class IndexedPolyfaceVisitor extends PolyfaceData implements PolyfaceVisitor {\n private _currentFacetIndex: number;\n private _nextFacetIndex: number;\n private _numWrap: number;\n private _numEdges: number;\n private _polyface: IndexedPolyface;\n // to be called from static factory method that validates the polyface\n protected constructor(polyface: IndexedPolyface, numWrap: number) {\n super(polyface.data.normalCount > 0, polyface.data.paramCount > 0, polyface.data.colorCount > 0, polyface.twoSided);\n this._polyface = polyface;\n this._numWrap = numWrap;\n if (polyface.data.auxData)\n this.auxData = polyface.data.auxData.createForVisitor();\n if (polyface.data.edgeMateIndex)\n this.edgeMateIndex = [];\n this.reset();\n this._numEdges = 0;\n this._nextFacetIndex = 0;\n this._currentFacetIndex = -1;\n\n }\n /** Return the client polyface object. */\n public clientPolyface(): IndexedPolyface {\n return this._polyface;\n }\n /** Return the number of facets this visitor is able to visit. */\n public getVisitableFacetCount(): number {\n return this._polyface.facetCount;\n }\n /**\n * Set the number of vertices replicated in visitor arrays (both data and index arrays).\n * * 0,1,2 are the most common as numWrap.\n * * Example: suppose `[6,7,8]` is the pointIndex array representing a triangle. First edge would be `6,7`. Second\n * edge is `7,8`. Third edge is `8,6`. To access `6` for the third edge, we have to go back to the start of array.\n * Therefore, it is useful to store `6` at the end of pointIndex array, i.e., `[6,7,8,6]` meaning `numWrap = 1`.\n * Continuing this example, `numWrap = 2` (i.e., `[6,7,8,6,7]`) is useful when each vertex visit requires the next\n * two points, e.g., to form two adjacent vectors for a cross product.\n */\n public setNumWrap(numWrap: number) {\n this._numWrap = numWrap;\n }\n /**\n * Return the number of edges in the current facet.\n * * If `numWrap > 0` for this visitor, the number of edges is smaller than the number of points.\n */\n public get numEdgesThisFacet(): number {\n return this._numEdges;\n }\n /** Create a visitor for iterating the facets of `polyface`. */\n public static create(polyface: IndexedPolyface, numWrap: number): IndexedPolyfaceVisitor {\n return new IndexedPolyfaceVisitor(polyface, numWrap);\n }\n /** Advance the iterator to a particular facet in the client polyface. */\n public moveToReadIndex(facetIndex: number): boolean {\n if (!this._polyface.isValidFacetIndex(facetIndex))\n return false;\n this._currentFacetIndex = facetIndex;\n this._nextFacetIndex = facetIndex + 1;\n this._numEdges = this._polyface.numEdgeInFacet(facetIndex);\n this.resizeAllArrays(this._numEdges + this._numWrap);\n this.gatherIndexedData(\n this._polyface.data,\n this._polyface.facetIndex0(this._currentFacetIndex),\n this._polyface.facetIndex1(this._currentFacetIndex),\n this._numWrap,\n );\n return true;\n }\n /** Advance the iterator to a the 'next' facet in the client polyface. */\n public moveToNextFacet(): boolean {\n if (this._nextFacetIndex !== this._currentFacetIndex)\n return this.moveToReadIndex(this._nextFacetIndex);\n this._nextFacetIndex++;\n return true;\n }\n /** Reset the iterator to start at the first facet of the polyface. */\n public reset(): void {\n this.moveToReadIndex(0);\n this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.\n }\n /**\n * Attempts to extract the distance parameter for the given vertex `index` on the current facet.\n * Returns the distance parameter as a point. Returns `undefined` on failure.\n */\n public tryGetDistanceParameter(index: number, result?: Point2d): Point2d | undefined {\n if (index < 0 || index >= this.numEdgesThisFacet)\n return undefined;\n if (this.param === undefined || this._polyface.data.face.length === 0)\n return undefined;\n const faceData = this._polyface.tryGetFaceData(this._currentFacetIndex);\n if (!faceData)\n return undefined;\n return faceData.convertParamXYToDistance(\n this.param.getXAtUncheckedPointIndex(index),\n this.param.getYAtUncheckedPointIndex(index),\n result,\n );\n }\n /**\n * Attempts to extract the normalized parameter (0,1) for the given vertex `index` on the current facet.\n * Returns the normalized parameter as a point. Returns `undefined` on failure.\n */\n public tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined {\n if (index < 0 || index >= this.numEdgesThisFacet)\n return undefined;\n if (this.param === undefined || this._polyface.data.face.length === 0)\n return undefined;\n const faceData = this._polyface.tryGetFaceData(this._currentFacetIndex);\n if (!faceData)\n return undefined;\n return faceData.convertParamXYToNormalized(\n this.param.getXAtUncheckedPointIndex(index),\n this.param.getYAtUncheckedPointIndex(index),\n result,\n );\n }\n /** Return the facetIndex of the currently referenced facet in the client polyface. */\n public currentReadIndex(): number {\n return this._currentFacetIndex;\n }\n /** Return the point index of vertex `i` within the currently loaded facet. */\n public clientPointIndex(i: number): number {\n return this.pointIndex[i];\n }\n /** Return the param index of vertex `i` within the currently loaded facet. */\n public clientParamIndex(i: number): number {\n return this.paramIndex ? this.paramIndex[i] : -1;\n }\n /** Return the normal index of vertex `i` within the currently loaded facet. */\n public clientNormalIndex(i: number): number {\n return this.normalIndex ? this.normalIndex[i] : -1;\n }\n /** Return the color index of vertex `i` within the currently loaded facet. */\n public clientColorIndex(i: number): number {\n return this.colorIndex ? this.colorIndex[i] : -1;\n }\n /** Return the aux data index of vertex `i` within the currently loaded facet. */\n public clientAuxIndex(i: number): number {\n return this.auxData ? this.auxData.indices[i] : -1;\n }\n /** Clear the contents of the data arrays. */\n public clearArrays(): void {\n this.point.length = 0;\n this.edgeVisible.length = 0;\n if (this.param !== undefined)\n this.param.length = 0;\n if (this.normal !== undefined)\n this.normal.length = 0;\n if (this.color !== undefined)\n this.color.length = 0;\n // TODO: auxData? taggedNumericData?\n }\n /** Transfer data from a specified `index` of the `other` visitor as new data in this visitor. */\n public pushDataFrom(other: PolyfaceVisitor, index: number): void {\n this.point.pushFromGrowableXYZArray(other.point, index);\n this.edgeVisible.push(other.edgeVisible[index]);\n if (this.param && other.param && index < other.param.length)\n this.param.pushFromGrowableXYArray(other.param, index);\n if (this.normal && other.normal && index < other.normal.length)\n this.normal.pushFromGrowableXYZArray(other.normal, index);\n if (this.color && other.color && index < other.color.length)\n this.color.push(other.color[index]);\n // TODO: auxData? taggedNumericData?\n }\n /**\n * Transfer interpolated data from the other visitor.\n * * All data values are interpolated at `fraction` between `other` values at `index0` and `index1`.\n */\n public pushInterpolatedDataFrom(other: PolyfaceVisitor, index0: number, fraction: number, index1: number): void {\n if (index0 > index1)\n this.pushInterpolatedDataFrom(other, index1, 1.0 - fraction, index0);\n this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);\n const newVisibility = (((index0 + 1) % other.edgeVisible.length) === index1) ? other.edgeVisible[index0] : false;\n this.edgeVisible.push(newVisibility); // interpolation along an edge preserves visibility of original edge\n if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)\n this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);\n if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)\n this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);\n if (this.color && other.color && index0 < other.color.length && index1 < other.color.length)\n this.color.push(Geometry.interpolateColor(other.color[index0], fraction, other.color[index1]));\n // TODO: auxData? taggedNumericData?\n }\n}\n/**\n * An `IndexedPolyfaceSubsetVisitor` is an `IndexedPolyfaceVisitor` which only visits a subset of facets in the polyface.\n * * The subset is defined by an array of facet indices provided when this visitor is created.\n * * Input indices (e.g., for `moveToReadIndex`) are understood to be indices into the subset array.\n * @public\n */\nexport class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {\n private _parentFacetIndices?: number[]; // only undefined during super constructor!\n private _currentActiveIndex: number; // index within _parentFacetIndices, or -1 after construction\n private _nextActiveIndex: number; // index within _parentFacetIndices\n\n private constructor(polyface: IndexedPolyface, activeFacetIndices: number[], numWrap: number) {\n super(polyface, numWrap);\n this._parentFacetIndices = activeFacetIndices.slice();\n this._currentActiveIndex = -1;\n this._nextActiveIndex = 0;\n }\n private isValidSubsetIndex(index: number): boolean {\n return (undefined !== this._parentFacetIndices) && index >= 0 && index < this._parentFacetIndices.length;\n }\n /**\n * Create a visitor for iterating a subset of the facets of `polyface`.\n * @param polyface reference to the client polyface, supplying facets\n * @param activeFacetIndices array of indices of facets in the client polyface to visit. This array is cloned.\n * @param numWrap number of vertices replicated in the visitor arrays to facilitate simpler caller code. Default is zero.\n */\n public static createSubsetVisitor(\n polyface: IndexedPolyface, activeFacetIndices: number[], numWrap: number = 0,\n ): IndexedPolyfaceSubsetVisitor {\n return new IndexedPolyfaceSubsetVisitor(polyface, activeFacetIndices, numWrap);\n }\n /**\n * Advance the iterator to a particular facet in the subset of client polyface facets.\n * @param activeIndex the index of the facet within the subset, not to be confused with the index of the facet within\n * the client polyface.\n * @return whether the iterator was successfully moved.\n */\n public override moveToReadIndex(activeIndex: number): boolean {\n if (this.isValidSubsetIndex(activeIndex)) {\n this._currentActiveIndex = activeIndex;\n this._nextActiveIndex = activeIndex + 1;\n return super.moveToReadIndex(this._parentFacetIndices![activeIndex]);\n }\n return false;\n }\n /**\n * Advance the iterator to the next facet in the subset of client polyface facets.\n * @return whether the iterator was successfully moved.\n */\n public override moveToNextFacet(): boolean {\n if (this._nextActiveIndex !== this._currentActiveIndex)\n return this.moveToReadIndex(this._nextActiveIndex);\n this._nextActiveIndex++;\n return true;\n }\n /** Reset the iterator to start at the first active facet in the subset of client polyface facets. */\n public override reset(): void {\n this.moveToReadIndex(0);\n this._nextActiveIndex = 0; // so immediate moveToNextFacet stays here.\n }\n /**\n * Return the parent facet index of the indicated index within the subset of client polyface facets.\n * @param activeIndex index of the facet within the subset. Default is the active facet.\n * @return valid client polyface facet index, or `undefined` if invalid input index.\n */\n public parentFacetIndex(activeIndex?: number): number | undefined {\n if (undefined === activeIndex)\n activeIndex = this._currentActiveIndex;\n return this.isValidSubsetIndex(activeIndex) ? this._parentFacetIndices![activeIndex] : undefined;\n }\n /** Return the number of facets this visitor is able to visit. */\n public override getVisitableFacetCount(): number {\n return this._parentFacetIndices ? this._parentFacetIndices.length : 0;\n }\n /**\n * Create a visitor for those mesh facets with normal in the same half-space as the given vector.\n * * For example, to visit the top facets of a tiled terrain mesh but skip the \"skirt\" facets, pass\n * `compareVector = Vector3d.unitZ()` and a suitable `sideAngle` tolerance. Note that this will also\n * filter out *interior* facets that are nearly vertical, not just the \"skirt\" facets on the boundary.\n * @param mesh the mesh from which to select facets\n * @param compareVector vector to which to compare facet normals. The visitor will visit only those facets\n * with normals in the same half-space as this vector. Default is 001.\n * @param sideAngle optional angular tolerance to filter the facets near the border between half-spaces.\n * The visitor will *not* visit facets whose normals are nearly perpendicular to `compareVector`.\n * Default is [[Geometry.smallAngleRadians]].\n * @param numWrap optional number of entries replicated in visitor arrays. Default is 0.\n */\n public static createNormalComparison(\n mesh: IndexedPolyface | IndexedPolyfaceVisitor,\n compareVector: Vector3d = Vector3d.unitZ(),\n sideAngle: Angle = Angle.createSmallAngle(),\n numWrap: number = 0,\n ): IndexedPolyfaceSubsetVisitor {\n if (mesh instanceof IndexedPolyface)\n return this.createNormalComparison(mesh.createVisitor(), compareVector, sideAngle, numWrap);\n const visitor = mesh;\n const facets: number[] = [];\n const facetNormal = Vector3d.createZero();\n for (visitor.reset(); visitor.moveToNextFacet();) {\n if (!PolygonOps.unitNormal(visitor.point, facetNormal))\n continue; // degenerate facet\n if (facetNormal.dotProduct(compareVector) < 0.0)\n continue; // ignore facet facing other half-space\n if (facetNormal.angleFromPerpendicular(compareVector).isMagnitudeLessThanOrEqual(sideAngle))\n continue; // ignore side facet\n facets.push(visitor.currentReadIndex());\n }\n return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(visitor.clientPolyface(), facets, numWrap);\n }\n}\n"]}
1
+ {"version":3,"file":"IndexedPolyfaceVisitor.js","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceVisitor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,+CAA4C;AAE5C,mEAAyD;AACzD,yDAAsD;AACtD,yCAA8D;AAC9D,iDAA8C;AAE9C;;;;GAIG;AACH,MAAa,sBAAuB,SAAQ,2BAAY;IAC9C,kBAAkB,CAAS;IAC3B,eAAe,CAAS;IACxB,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,SAAS,CAAkB;IACnC,sEAAsE;IACtE,YAAsB,QAAyB,EAAE,OAAe;QAC9D,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpH,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO;YACvB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC1D,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa;YAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACD,yCAAyC;IAClC,cAAc;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,iEAAiE;IAC1D,sBAAsB;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;IACnC,CAAC;IACD;;;;;;;;OAQG;IACI,UAAU,CAAC,OAAe;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD;;;OAGG;IACH,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,+DAA+D;IACxD,MAAM,CAAC,MAAM,CAAC,QAAyB,EAAE,OAAe;QAC7D,OAAO,IAAI,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,yEAAyE;IAClE,eAAe,CAAC,UAAkB;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,kBAAkB,KAAK,UAAU,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3F,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,iBAAiB,CACpB,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,EACnD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,EACnD,IAAI,CAAC,QAAQ,CACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,yEAAyE;IAClE,eAAe;QACpB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,kBAAkB;YAClD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8CAA8C;IACvC,KAAK;QACV,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,2CAA2C;IACvE,CAAC;IACD;;;OAGG;IACI,uBAAuB,CAAC,KAAa,EAAE,MAAgB;QAC5D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB;YAC9C,OAAO,SAAS,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YACnE,OAAO,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,OAAO,QAAQ,CAAC,wBAAwB,CACtC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC3C,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC3C,MAAM,CACP,CAAC;IACJ,CAAC;IACD;;;OAGG;IACI,yBAAyB,CAAC,KAAa,EAAE,MAAgB;QAC9D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,iBAAiB;YAC9C,OAAO,SAAS,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YACnE,OAAO,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,OAAO,QAAQ,CAAC,0BAA0B,CACxC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC3C,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAC3C,MAAM,CACP,CAAC;IACJ,CAAC;IACD,sFAAsF;IAC/E,gBAAgB;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IACD,8EAA8E;IACvE,gBAAgB,CAAC,CAAS;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,8EAA8E;IACvE,gBAAgB,CAAC,CAAS;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,+EAA+E;IACxE,iBAAiB,CAAC,CAAS;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,8EAA8E;IACvE,gBAAgB,CAAC,CAAS;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,iFAAiF;IAC1E,cAAc,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,6CAA6C;IACtC,WAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,oCAAoC;IACtC,CAAC;IACD,iGAAiG;IAC1F,YAAY,CAAC,KAAsB,EAAE,KAAa;QACvD,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;YACzD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;YAC5D,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;YACzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,oCAAoC;IACtC,CAAC;IACD;;;OAGG;IACI,wBAAwB,CAAC,KAAsB,EAAE,MAAc,EAAE,QAAgB,EAAE,MAAc;QACtG,IAAI,MAAM,GAAG,MAAM;YACjB,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACjH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,oEAAoE;QAC1G,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;YACzF,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;YAC7F,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3F,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM;YACzF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjG,oCAAoC;IACtC,CAAC;IACD,6EAA6E;IACtE,mBAAmB,CAAC,YAAsB,EAAE,UAAkB,CAAC;QACpE,OAAO,4BAA4B,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;CACF;AA5LD,wDA4LC;AAED;;;;;GAKG;AACH,MAAa,4BAA6B,SAAQ,sBAAsB;IAC9D,aAAa,CAAW;IACxB,mBAAmB,CAAS,CAAC,6BAA6B;IAC1D,gBAAgB,CAAS,CAAC,6BAA6B;IAE/D,YAAoB,QAAyB,EAAE,YAAsB,EAAE,OAAe;QACpF,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IACO,kBAAkB,CAAC,KAAa;QACtC,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACzD,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,mBAAmB,CAC/B,QAAyB,EAAE,YAAsB,EAAE,UAAkB,CAAC;QAEtE,OAAO,IAAI,4BAA4B,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD;;;;OAIG;IACa,eAAe,CAAC,WAAmB;QACjD,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,WAAW,GAAG,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;OAGG;IACa,eAAe;QAC7B,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,mBAAmB;YACpD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8CAA8C;IAC9B,KAAK;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,+DAA+D;YACvF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACxE,CAAC;IACH,CAAC;IACD;;;;OAIG;IACI,gBAAgB,CAAC,WAAoB;QAC1C,IAAI,SAAS,KAAK,WAAW;YAC3B,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACzC,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,CAAC;IACD,iEAAiE;IACjD,sBAAsB;QACpC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnC,CAAC;IACD;;;;;;;;;;;;MAYE;IACK,MAAM,CAAC,sBAAsB,CAClC,IAA8C,EAC9C,gBAA0B,0BAAQ,CAAC,KAAK,EAAE,EAC1C,YAAmB,aAAK,CAAC,gBAAgB,EAAE,EAC3C,UAAkB,CAAC;QAEnB,IAAI,IAAI,YAAY,0BAAe;YACjC,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,0BAAQ,CAAC,UAAU,EAAE,CAAC;QAC1C,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;YACjD,IAAI,CAAC,uBAAU,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;gBACpD,SAAS,CAAC,mBAAmB;YAC/B,IAAI,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,GAAG;gBAC7C,SAAS,CAAC,uCAAuC;YACnD,IAAI,WAAW,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;gBACzF,SAAS,CAAC,oBAAoB;YAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,4BAA4B,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrG,CAAC;CACF;AAzGD,oEAyGC","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\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { IndexedPolyface, PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolyfaceData } from \"./PolyfaceData\";\r\n\r\n/**\r\n * An `IndexedPolyfaceVisitor` is an iterator-like object that \"visits\" facets of a mesh.\r\n * * The visitor extends `PolyfaceData`, so it can at any time hold all the data of a single facet.\r\n * @public\r\n */\r\nexport class IndexedPolyfaceVisitor extends PolyfaceData implements PolyfaceVisitor {\r\n private _currentFacetIndex: number;\r\n private _nextFacetIndex: number;\r\n private _numWrap: number;\r\n private _numEdges: number;\r\n private _polyface: IndexedPolyface;\r\n // to be called from static factory method that validates the polyface\r\n protected constructor(polyface: IndexedPolyface, numWrap: number) {\r\n super(polyface.data.normalCount > 0, polyface.data.paramCount > 0, polyface.data.colorCount > 0, polyface.twoSided);\r\n this._polyface = polyface;\r\n this._numWrap = numWrap;\r\n if (polyface.data.auxData)\r\n this.auxData = polyface.data.auxData.createForVisitor();\r\n if (polyface.data.edgeMateIndex)\r\n this.edgeMateIndex = [];\r\n this._numEdges = 0;\r\n this._nextFacetIndex = 0;\r\n this._currentFacetIndex = -1;\r\n this.reset();\r\n }\r\n /** Return the client polyface object. */\r\n public clientPolyface(): IndexedPolyface {\r\n return this._polyface;\r\n }\r\n /** Return the number of facets this visitor is able to visit. */\r\n public getVisitableFacetCount(): number {\r\n return this._polyface.facetCount;\r\n }\r\n /**\r\n * Set the number of vertices replicated in visitor arrays (both data and index arrays).\r\n * * 0,1,2 are the most common as numWrap.\r\n * * Example: suppose `[6,7,8]` is the pointIndex array representing a triangle. First edge would be `6,7`. Second\r\n * edge is `7,8`. Third edge is `8,6`. To access `6` for the third edge, we have to go back to the start of array.\r\n * Therefore, it is useful to store `6` at the end of pointIndex array, i.e., `[6,7,8,6]` meaning `numWrap = 1`.\r\n * Continuing this example, `numWrap = 2` (i.e., `[6,7,8,6,7]`) is useful when each vertex visit requires the next\r\n * two points, e.g., to form two adjacent vectors for a cross product.\r\n */\r\n public setNumWrap(numWrap: number) {\r\n this._numWrap = numWrap;\r\n }\r\n /**\r\n * Return the number of edges in the current facet.\r\n * * If `numWrap > 0` for this visitor, the number of edges is smaller than the number of points.\r\n */\r\n public get numEdgesThisFacet(): number {\r\n return this._numEdges;\r\n }\r\n /** Create a visitor for iterating the facets of `polyface`. */\r\n public static create(polyface: IndexedPolyface, numWrap: number): IndexedPolyfaceVisitor {\r\n return new IndexedPolyfaceVisitor(polyface, numWrap);\r\n }\r\n /** Advance the iterator to a particular facet in the client polyface. */\r\n public moveToReadIndex(facetIndex: number): boolean {\r\n if (!this._polyface.isValidFacetIndex(facetIndex))\r\n return false;\r\n const numEdges = this._polyface.numEdgeInFacet(facetIndex);\r\n if (this._currentFacetIndex !== facetIndex || numEdges + this._numWrap !== this.pointCount) {\r\n this._currentFacetIndex = facetIndex;\r\n this._numEdges = numEdges;\r\n this.resizeAllArrays(this._numEdges + this._numWrap);\r\n this.gatherIndexedData(\r\n this._polyface.data,\r\n this._polyface.facetIndex0(this._currentFacetIndex),\r\n this._polyface.facetIndex1(this._currentFacetIndex),\r\n this._numWrap,\r\n );\r\n }\r\n this._nextFacetIndex = facetIndex + 1;\r\n return true;\r\n }\r\n /** Advance the iterator to a the 'next' facet in the client polyface. */\r\n public moveToNextFacet(): boolean {\r\n if (this._nextFacetIndex !== this._currentFacetIndex)\r\n return this.moveToReadIndex(this._nextFacetIndex);\r\n this._nextFacetIndex++;\r\n return true;\r\n }\r\n /** Restart the visitor at the first facet. */\r\n public reset(): void {\r\n this.moveToReadIndex(0);\r\n this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.\r\n }\r\n /**\r\n * Attempts to extract the distance parameter for the given vertex `index` on the current facet.\r\n * Returns the distance parameter as a point. Returns `undefined` on failure.\r\n */\r\n public tryGetDistanceParameter(index: number, result?: Point2d): Point2d | undefined {\r\n if (index < 0 || index >= this.numEdgesThisFacet)\r\n return undefined;\r\n if (this.param === undefined || this._polyface.data.face.length === 0)\r\n return undefined;\r\n const faceData = this._polyface.tryGetFaceData(this._currentFacetIndex);\r\n if (!faceData)\r\n return undefined;\r\n return faceData.convertParamXYToDistance(\r\n this.param.getXAtUncheckedPointIndex(index),\r\n this.param.getYAtUncheckedPointIndex(index),\r\n result,\r\n );\r\n }\r\n /**\r\n * Attempts to extract the normalized parameter (0,1) for the given vertex `index` on the current facet.\r\n * Returns the normalized parameter as a point. Returns `undefined` on failure.\r\n */\r\n public tryGetNormalizedParameter(index: number, result?: Point2d): Point2d | undefined {\r\n if (index < 0 || index >= this.numEdgesThisFacet)\r\n return undefined;\r\n if (this.param === undefined || this._polyface.data.face.length === 0)\r\n return undefined;\r\n const faceData = this._polyface.tryGetFaceData(this._currentFacetIndex);\r\n if (!faceData)\r\n return undefined;\r\n return faceData.convertParamXYToNormalized(\r\n this.param.getXAtUncheckedPointIndex(index),\r\n this.param.getYAtUncheckedPointIndex(index),\r\n result,\r\n );\r\n }\r\n /** Return the facetIndex of the currently referenced facet in the client polyface. */\r\n public currentReadIndex(): number {\r\n return this._currentFacetIndex;\r\n }\r\n /** Return the point index of vertex `i` within the currently loaded facet. */\r\n public clientPointIndex(i: number): number {\r\n return this.pointIndex[i];\r\n }\r\n /** Return the param index of vertex `i` within the currently loaded facet. */\r\n public clientParamIndex(i: number): number {\r\n return this.paramIndex ? this.paramIndex[i] : -1;\r\n }\r\n /** Return the normal index of vertex `i` within the currently loaded facet. */\r\n public clientNormalIndex(i: number): number {\r\n return this.normalIndex ? this.normalIndex[i] : -1;\r\n }\r\n /** Return the color index of vertex `i` within the currently loaded facet. */\r\n public clientColorIndex(i: number): number {\r\n return this.colorIndex ? this.colorIndex[i] : -1;\r\n }\r\n /** Return the aux data index of vertex `i` within the currently loaded facet. */\r\n public clientAuxIndex(i: number): number {\r\n return this.auxData ? this.auxData.indices[i] : -1;\r\n }\r\n /** Clear the contents of the data arrays. */\r\n public clearArrays(): void {\r\n this.point.length = 0;\r\n this.edgeVisible.length = 0;\r\n if (this.param !== undefined)\r\n this.param.length = 0;\r\n if (this.normal !== undefined)\r\n this.normal.length = 0;\r\n if (this.color !== undefined)\r\n this.color.length = 0;\r\n // TODO: auxData? taggedNumericData?\r\n }\r\n /** Transfer data from a specified `index` of the `other` visitor as new data in this visitor. */\r\n public pushDataFrom(other: PolyfaceVisitor, index: number): void {\r\n this.point.pushFromGrowableXYZArray(other.point, index);\r\n this.edgeVisible.push(other.edgeVisible[index]);\r\n if (this.param && other.param && index < other.param.length)\r\n this.param.pushFromGrowableXYArray(other.param, index);\r\n if (this.normal && other.normal && index < other.normal.length)\r\n this.normal.pushFromGrowableXYZArray(other.normal, index);\r\n if (this.color && other.color && index < other.color.length)\r\n this.color.push(other.color[index]);\r\n // TODO: auxData? taggedNumericData?\r\n }\r\n /**\r\n * Transfer interpolated data from the other visitor.\r\n * * All data values are interpolated at `fraction` between `other` values at `index0` and `index1`.\r\n */\r\n public pushInterpolatedDataFrom(other: PolyfaceVisitor, index0: number, fraction: number, index1: number): void {\r\n if (index0 > index1)\r\n this.pushInterpolatedDataFrom(other, index1, 1.0 - fraction, index0);\r\n this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);\r\n const newVisibility = (((index0 + 1) % other.edgeVisible.length) === index1) ? other.edgeVisible[index0] : false;\r\n this.edgeVisible.push(newVisibility); // interpolation along an edge preserves visibility of original edge\r\n if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)\r\n this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);\r\n if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)\r\n this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);\r\n if (this.color && other.color && index0 < other.color.length && index1 < other.color.length)\r\n this.color.push(Geometry.interpolateColor(other.color[index0], fraction, other.color[index1]));\r\n // TODO: auxData? taggedNumericData?\r\n }\r\n /** Create a visitor for a subset of the facets visitable by the instance. */\r\n public createSubsetVisitor(facetIndices: number[], numWrap: number = 0): IndexedPolyfaceSubsetVisitor {\r\n return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(this._polyface, facetIndices, numWrap);\r\n }\r\n}\r\n\r\n/**\r\n * An `IndexedPolyfaceSubsetVisitor` is an `IndexedPolyfaceVisitor` which only visits a subset of facets in the polyface.\r\n * * The subset is defined by an array of facet indices provided when this visitor is created.\r\n * * Input indices (e.g., for `moveToReadIndex`) are understood to be indices into the subset array.\r\n * @public\r\n */\r\nexport class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {\r\n private _facetIndices: number[];\r\n private _currentSubsetIndex: number; // index within _facetIndices\r\n private _nextSubsetIndex: number; // index within _facetIndices\r\n\r\n private constructor(polyface: IndexedPolyface, facetIndices: number[], numWrap: number) {\r\n super(polyface, numWrap);\r\n this._facetIndices = facetIndices.slice();\r\n this._currentSubsetIndex = -1;\r\n this._nextSubsetIndex = 0;\r\n this.reset();\r\n }\r\n private isValidSubsetIndex(index: number): boolean {\r\n return index >= 0 && index < this._facetIndices.length;\r\n }\r\n /**\r\n * Create a visitor for iterating a subset of the facets of `polyface`.\r\n * @param polyface reference to the client polyface, supplying facets\r\n * @param facetIndices array of indices of facets in the client polyface to visit. This array is cloned.\r\n * @param numWrap number of vertices replicated in the visitor arrays to facilitate simpler caller code. Default is zero.\r\n */\r\n public static createSubsetVisitor(\r\n polyface: IndexedPolyface, facetIndices: number[], numWrap: number = 0,\r\n ): IndexedPolyfaceSubsetVisitor {\r\n return new IndexedPolyfaceSubsetVisitor(polyface, facetIndices, numWrap);\r\n }\r\n /**\r\n * Advance the iterator to a particular facet in the subset of client polyface facets.\r\n * @param subsetIndex index into the subset array, not to be confused with the client facet index.\r\n * @return whether the iterator was successfully moved.\r\n */\r\n public override moveToReadIndex(subsetIndex: number): boolean {\r\n if (this.isValidSubsetIndex(subsetIndex)) {\r\n this._currentSubsetIndex = subsetIndex;\r\n this._nextSubsetIndex = subsetIndex + 1;\r\n return super.moveToReadIndex(this._facetIndices[subsetIndex]);\r\n }\r\n return false;\r\n }\r\n /**\r\n * Advance the iterator to the next facet in the subset of client polyface facets.\r\n * @return whether the iterator was successfully moved.\r\n */\r\n public override moveToNextFacet(): boolean {\r\n if (this._nextSubsetIndex !== this._currentSubsetIndex)\r\n return this.moveToReadIndex(this._nextSubsetIndex);\r\n this._nextSubsetIndex++;\r\n return true;\r\n }\r\n /** Restart the visitor at the first facet. */\r\n public override reset(): void {\r\n if (this._facetIndices) { // avoid crash during super ctor when we aren't yet initialized\r\n this.moveToReadIndex(0);\r\n this._nextSubsetIndex = 0; // so immediate moveToNextFacet stays here.\r\n }\r\n }\r\n /**\r\n * Return the client polyface facet index (aka \"readIndex\") for the given subset index.\r\n * @param subsetIndex index into the subset array. Default is the subset index of the currently visited facet.\r\n * @return valid client polyface facet index, or `undefined` if invalid subset index.\r\n */\r\n public parentFacetIndex(subsetIndex?: number): number | undefined {\r\n if (undefined === subsetIndex)\r\n subsetIndex = this._currentSubsetIndex;\r\n return this.isValidSubsetIndex(subsetIndex) ? this._facetIndices[subsetIndex] : undefined;\r\n }\r\n /** Return the number of facets this visitor is able to visit. */\r\n public override getVisitableFacetCount(): number {\r\n return this._facetIndices.length;\r\n }\r\n /**\r\n * Create a visitor for those mesh facets with normal in the same half-space as the given vector.\r\n * * For example, to visit the top facets of a tiled terrain mesh but skip the \"skirt\" facets, pass\r\n * `compareVector = Vector3d.unitZ()` and a suitable `sideAngle` tolerance. Note that this will also\r\n * filter out *interior* facets that are nearly vertical, not just the \"skirt\" facets on the boundary.\r\n * @param mesh the mesh from which to select facets\r\n * @param compareVector vector to which to compare facet normals. The visitor will visit only those facets\r\n * with normals in the same half-space as this vector. Default is 001.\r\n * @param sideAngle optional angular tolerance to filter the facets near the border between half-spaces.\r\n * The visitor will *not* visit facets whose normals are nearly perpendicular to `compareVector`.\r\n * Default is [[Geometry.smallAngleRadians]].\r\n * @param numWrap optional number of entries replicated in visitor arrays. Default is 0.\r\n */\r\n public static createNormalComparison(\r\n mesh: IndexedPolyface | IndexedPolyfaceVisitor,\r\n compareVector: Vector3d = Vector3d.unitZ(),\r\n sideAngle: Angle = Angle.createSmallAngle(),\r\n numWrap: number = 0,\r\n ): IndexedPolyfaceSubsetVisitor {\r\n if (mesh instanceof IndexedPolyface)\r\n return this.createNormalComparison(mesh.createVisitor(), compareVector, sideAngle, numWrap);\r\n const visitor = mesh;\r\n const facets: number[] = [];\r\n const facetNormal = Vector3d.createZero();\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n if (!PolygonOps.unitNormal(visitor.point, facetNormal))\r\n continue; // degenerate facet\r\n if (facetNormal.dotProduct(compareVector) < 0.0)\r\n continue; // ignore facet facing other half-space\r\n if (facetNormal.angleFromPerpendicular(compareVector).isMagnitudeLessThanOrEqual(sideAngle))\r\n continue; // ignore side facet\r\n facets.push(visitor.currentReadIndex());\r\n }\r\n return IndexedPolyfaceSubsetVisitor.createSubsetVisitor(visitor.clientPolyface(), facets, numWrap);\r\n }\r\n}\r\n"]}
@@ -43,7 +43,7 @@ import { IndexedPolyface } from "./Polyface";
43
43
  * * The [[previousAroundVertex]] step is clockwise around the vertex.
44
44
  * * The `nextAroundFacet` steps for a walker and its [[edgeMate]] are in opposite directions along their shared edge,
45
45
  * when that edge is interior. Thus the `edgeMate` step can be seen to iterate an "edge loop" of two locations for an
46
- * interior edges.
46
+ * interior edge.
47
47
  * * Invalid Walkers:
48
48
  * * An invalid walker has undefined [[edgeIndex]]. For these walkers, [[isUndefined]] returns true, and [[isValid]]
49
49
  * returns false. Traversal operations on an invalid walker return an invalid walker.
@@ -57,6 +57,7 @@ import { IndexedPolyface } from "./Polyface";
57
57
  * * Invalid walkers can also occur while traversing a non-manifold mesh. Such meshes feature edge(s) with more than
58
58
  * two adjacent facets, or with two adjacent facets that have opposite orientations. These meshes are uncommon, and
59
59
  * usually indicate a construction problem.
60
+ * * Note that a null edge, for which the start and end vertex is the same, does not yield an invalid walker.
60
61
  * * See [[buildEdgeMateIndices]] for further description of the topological relations.
61
62
  * @public
62
63
  */
@@ -74,7 +75,7 @@ export declare class IndexedPolyfaceWalker {
74
75
  */
75
76
  get edgeIndex(): number | undefined;
76
77
  /** Return the polyface of this walker. */
77
- get polyface(): IndexedPolyface | undefined;
78
+ get polyface(): IndexedPolyface;
78
79
  /**
79
80
  * Return true if the walker's edgeIndex is defined.
80
81
  * * This method is the opposite of [[isUndefined]].
@@ -88,6 +89,8 @@ export declare class IndexedPolyfaceWalker {
88
89
  * * This can also happen when methods that return a walker receive invalid input.
89
90
  */
90
91
  get isUndefined(): boolean;
92
+ /** Whether the walker is at a null edge, i.e. an edge with no length. */
93
+ get isNull(): boolean;
91
94
  /**
92
95
  * Create a walker for a given polyface at an optional edge.
93
96
  * @param polyface reference to the client polyface. This reference is captured (the polyface is not copied).
@@ -115,12 +118,10 @@ export declare class IndexedPolyfaceWalker {
115
118
  static createAtVisitor(visitor: IndexedPolyfaceVisitor, offsetWithinFacet?: number): IndexedPolyfaceWalker;
116
119
  /**
117
120
  * Create a new IndexedPolyfaceWalker from the instance.
118
- * * The returned walker refers to the same polyface.
119
- * * If `edgeIndex` is undefined, the returned walker refers to the same edge as the instance.
120
- * * If `edgeIndex` is defined and valid, the returned walker refers to this edge.
121
- * * If `edgeIndex` is defined but invalid, return undefined.
121
+ * * The returned walker refers to the same polyface and edge as the instance.
122
+ * @param result optional receiver to modify and return.
122
123
  */
123
- clone(edgeIndex?: number): IndexedPolyfaceWalker | undefined;
124
+ clone(result?: IndexedPolyfaceWalker): IndexedPolyfaceWalker;
124
125
  /**
125
126
  * Load the walker's facet into the given visitor.
126
127
  * @returns true if the visitor and walker reference the same polyface and the walker has a valid edge index.
@@ -198,29 +199,35 @@ export declare class IndexedPolyfaceWalker {
198
199
  * Build the edgeMate index array into the polyface's [[PolyfaceData]].
199
200
  * After this method:
200
201
  * * The array `polyface.data.edgeMateIndex` is defined with the same length as the other PolyfaceData index arrays.
201
- * * For each interior edge, `polyface.data.edgeIndexToEdgeMateIndex` returns the edgeIndex on the other side of the
202
+ * * For each interior edge, `polyface.data.edgeIndexToEdgeMateIndex` returns the edge index on the other side of the
202
203
  * edge in the adjacent facet.
203
204
  * * The conditions for edgeMate matching are:
204
205
  * * Given facetIndex f, let `k0 = polyface.facetIndex0(f)` and `k1 = polyface.facetIndex1(f)`.
205
- * * Every edgeIndex k in the face loop of facet f satisfies `k0 <= k < k1`.
206
- * * The edge with edgeIndex k starts at the point with index `polyface.data.pointIndex[k]`.
207
- * * Let kA be an edgeIndex in this range [k0,k1), and let kB be its in-range successor with cyclic wrap, i.e.,
206
+ * * Every edge index k in the face loop of facet f satisfies `k0 <= k < k1`.
207
+ * * The edge with edge index k starts at the point with index `polyface.data.pointIndex[k]`.
208
+ * * Let kA be an edge index in this range [k0,k1), and let kB be its in-range successor with cyclic wrap, i.e.,
208
209
  * `kB === (kA + 1 === k1) ? k0 : kA + 1`.
209
210
  * * Then `polyface.data.pointIndex[kA]` and `polyface.data.pointIndex[kB]` are the indices of the points at the
210
211
  * start and end of an edge of that facet.
211
- * * We call kA the _edgeIndex_ for that edge, and kB the _edgeIndex_ for the next edge around the facet.
212
- * * If kA is an interior edge in a 2-manifold mesh with properly oriented facets, then there is an adjacent facet
213
- * whose face loop contains edgeIndices kC and kD referencing the same edge vertices in reverse order, i.e.,
212
+ * * We call kA the _edge index_ for that edge, and kB the _edge index_ for the next edge around the facet.
213
+ * * If kA is a positive-length interior edge in a 2-manifold mesh with properly oriented facets, then there is
214
+ * an adjacent facet whose face loop contains edge indices kC and kD referencing the same edge vertices in reverse
215
+ * order, i.e.,
214
216
  * * `polyface.data.pointIndex[kA] === polyface.data.pointIndex[kD]`
215
217
  * * `polyface.data.pointIndex[kB] === polyface.data.pointIndex[kC]`
216
- * * Given this relationship, we say that edgeIndices kA and kC are _edge mates_.
217
- * * A non-interior edge either lies on the boundary of the mesh or is non-manifold (having more than two adjacent
218
- * facets, or one with the wrong orientation). These edges have no edge mate.
218
+ * * We call the edge indices kA and kC _edge mates_, denoted in the `edgeMateIndex` array by:
219
+ * * `polyface.data.edgeMateIndex[kA] === kC`
220
+ * * `polyface.data.edgeMateIndex[kC] === kA`
221
+ * * If kA is zero-length interior edge, i.e, it has the same start and end point indices, then we call it a _null
222
+ * edge_, and its edge mate is itself.
223
+ * * A non-interior edge either lies on the boundary of the mesh, or is non-manifold (having more than 2 adjacent
224
+ * facets, or 1 with the wrong orientation). These edges have no edge mate, represented as `undefined` in
225
+ * the `edgeMateIndex` array.
219
226
  * * These conditions define a conventional manifold mesh where each edge of a facet has at most one partner edge with
220
227
  * opposite orientation in an adjacent facet.
221
228
  * * After calling this method, the caller can construct `IndexedPolyfaceWalker` objects to traverse the mesh by
222
- * walking across edges, around faces, and around vertices. Let walkerA have edgeIndex value kA. Then with the
223
- * aforementioned edgeIndices:
229
+ * walking across edges, around faces, and around vertices. Let walkerA have edge index value kA. Then with the
230
+ * aforementioned edge indices:
224
231
  * * `walkerC = walkerA.edgeMate()` moves across the edge to its other end, at kC.
225
232
  * * `walkerB = walkerA.nextAroundFacet()` moves around the facet to the next edge, at kB.
226
233
  * * `walkerB.previousAroundFacet()` moves from kB back to kA.
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedPolyfaceWalker.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceWalker.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,qBAAa,qBAAqB;IAChC,oCAAoC;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,+CAA+C;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,kBAAkB;IAClB,OAAO;IAIP;;;;OAIG;IACH,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,0CAA0C;IAC1C,IAAW,QAAQ,IAAI,eAAe,GAAG,SAAS,CAEjD;IACD;;;OAGG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IACD;;;;;;OAMG;IACH,IAAW,WAAW,IAAI,OAAO,CAEhC;IACD;;;;;;OAMG;WACW,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAKrG;;;;;;;;OAQG;WACW,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAU,GAAG,qBAAqB;IASrI;;;;;OAKG;WACW,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,GAAE,MAAU,GAAG,qBAAqB;IAIpH;;;;;;OAMG;IACI,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAOnE;;;OAGG;IACI,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO;IAM5D;;;;;;OAMG;IACI,6BAA6B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO;IAK3E;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO;IAIxD;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;OAMG;IACI,eAAe,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAa7E;;;;;;OAMG;IACI,mBAAmB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAcjF;;;;;;;OAOG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAGtE;;;;;;;;;OASG;IACI,gBAAgB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAI9E;;;;;;;;;OASG;IACI,oBAAoB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAKlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;WACW,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CA8BpE"}
1
+ {"version":3,"file":"IndexedPolyfaceWalker.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedPolyfaceWalker.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,qBAAa,qBAAqB;IAChC,oCAAoC;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,+CAA+C;IAC/C,OAAO,CAAC,UAAU,CAAqB;IACvC,kBAAkB;IAClB,OAAO;IAIP;;;;OAIG;IACH,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,0CAA0C;IAC1C,IAAW,QAAQ,IAAI,eAAe,CAErC;IACD;;;OAGG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IACD;;;;;;OAMG;IACH,IAAW,WAAW,IAAI,OAAO,CAEhC;IACD,yEAAyE;IACzE,IAAW,MAAM,IAAI,OAAO,CAE3B;IACD;;;;;;OAMG;WACW,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAKrG;;;;;;;;OAQG;WACW,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAE,MAAU,GAAG,qBAAqB;IASrI;;;;;OAKG;WACW,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,GAAE,MAAU,GAAG,qBAAqB;IAIpH;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAQnE;;;OAGG;IACI,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO;IAM5D;;;;;;OAMG;IACI,6BAA6B,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO;IAK3E;;;;;OAKG;IACI,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO;IAIxD;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;OAMG;IACI,eAAe,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAa7E;;;;;;OAMG;IACI,mBAAmB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAcjF;;;;;;;OAOG;IACI,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAGtE;;;;;;;;;OASG;IACI,gBAAgB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAI9E;;;;;;;;;OASG;IACI,oBAAoB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB;IAKlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;WACW,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CAkCpE"}