@itwin/core-geometry 5.0.0-dev.9 → 5.0.0-dev.92

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 (1004) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +2 -4
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +37 -39
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  11. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  13. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  15. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  17. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  19. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  20. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  21. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  22. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  23. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  24. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  25. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  26. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  28. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  30. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  32. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  33. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  34. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  35. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  36. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  37. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  39. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  40. package/lib/cjs/bspline/KnotVector.js +144 -84
  41. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  42. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  43. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  44. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  45. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  46. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  47. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  48. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  49. package/lib/cjs/clipping/ClipPlane.js +10 -1
  50. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  51. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  52. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  53. package/lib/cjs/clipping/ClipUtils.js +5 -1
  54. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  55. package/lib/cjs/clipping/ClipVector.js +11 -8
  56. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  57. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  58. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  60. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  62. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  63. package/lib/cjs/core-geometry.d.ts +1 -0
  64. package/lib/cjs/core-geometry.d.ts.map +1 -1
  65. package/lib/cjs/core-geometry.js +1 -0
  66. package/lib/cjs/core-geometry.js.map +1 -1
  67. package/lib/cjs/curve/Arc3d.d.ts +17 -3
  68. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/Arc3d.js +50 -21
  70. package/lib/cjs/curve/Arc3d.js.map +1 -1
  71. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  72. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  73. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  74. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  78. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  79. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  80. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  81. package/lib/cjs/curve/CurveCollection.js +35 -9
  82. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  83. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  84. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  85. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  86. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  87. package/lib/cjs/curve/CurveFactory.js +213 -135
  88. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  89. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  90. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  91. package/lib/cjs/curve/CurveOps.js.map +1 -1
  92. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  93. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurvePrimitive.js +27 -12
  95. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  96. package/lib/cjs/curve/CurveProcessor.js +2 -0
  97. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  98. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  99. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  100. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  101. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  102. package/lib/cjs/curve/LineSegment3d.js +6 -2
  103. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  104. package/lib/cjs/curve/LineString3d.js +27 -7
  105. package/lib/cjs/curve/LineString3d.js.map +1 -1
  106. package/lib/cjs/curve/Loop.js +12 -4
  107. package/lib/cjs/curve/Loop.js.map +1 -1
  108. package/lib/cjs/curve/OffsetOptions.js +25 -21
  109. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  110. package/lib/cjs/curve/ParityRegion.js +4 -2
  111. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  112. package/lib/cjs/curve/Path.js +2 -2
  113. package/lib/cjs/curve/Path.js.map +1 -1
  114. package/lib/cjs/curve/PointString3d.js +3 -2
  115. package/lib/cjs/curve/PointString3d.js.map +1 -1
  116. package/lib/cjs/curve/ProxyCurve.js +1 -0
  117. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  118. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  119. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  120. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  121. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  122. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  123. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  124. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  125. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  126. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  127. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  128. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  129. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  130. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  131. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  132. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  133. package/lib/cjs/curve/RegionOps.js +9 -10
  134. package/lib/cjs/curve/RegionOps.js.map +1 -1
  135. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  136. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  137. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  138. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  139. package/lib/cjs/curve/StrokeOptions.js +23 -6
  140. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  141. package/lib/cjs/curve/UnionRegion.js +4 -2
  142. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  143. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  144. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  145. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  146. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  147. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  148. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  149. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  151. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  153. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  154. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  155. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  157. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  159. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  161. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  163. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  165. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  167. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  169. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  170. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  171. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  172. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  173. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  174. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  175. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  176. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  177. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  178. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  179. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  180. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  181. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  182. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  183. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  184. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  185. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  186. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  187. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  188. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  189. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  190. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  191. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  192. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  193. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  194. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  195. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  196. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  197. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  198. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  199. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  200. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  201. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  202. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  203. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  204. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  205. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  206. package/lib/cjs/geometry3d/Angle.js +18 -16
  207. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  208. package/lib/cjs/geometry3d/AngleSweep.d.ts +7 -2
  209. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  210. package/lib/cjs/geometry3d/AngleSweep.js +14 -2
  211. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  212. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  213. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  214. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  215. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  216. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  217. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  218. package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
  219. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  220. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  221. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  222. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  223. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  224. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  225. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  226. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  227. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  228. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  229. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  230. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  232. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  233. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  234. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  235. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  236. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  237. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  238. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  239. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  240. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  241. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  242. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  243. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  244. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  245. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  246. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  247. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  248. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  249. package/lib/cjs/geometry3d/Matrix3d.js +36 -14
  250. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  251. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  252. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  253. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  254. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  255. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  256. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  257. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  258. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  259. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  260. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  261. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  262. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  263. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  264. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +7 -10
  265. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  266. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -10
  267. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  268. package/lib/cjs/geometry3d/PointHelpers.d.ts +4 -4
  269. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  270. package/lib/cjs/geometry3d/PointHelpers.js +8 -8
  271. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  272. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  273. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  274. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  275. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  276. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  277. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  278. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  279. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  280. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  281. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  282. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  283. package/lib/cjs/geometry3d/Range.js +21 -4
  284. package/lib/cjs/geometry3d/Range.js.map +1 -1
  285. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  286. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  287. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  288. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  289. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  290. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  291. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  292. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  293. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  294. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  295. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  296. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  297. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  298. package/lib/cjs/geometry3d/Transform.js +4 -1
  299. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  300. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  301. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  302. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  303. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  304. package/lib/cjs/geometry4d/Map4d.js +2 -0
  305. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  306. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  307. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  308. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  309. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  310. package/lib/cjs/geometry4d/MomentData.js +90 -66
  311. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  312. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  313. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  314. package/lib/cjs/geometry4d/Point4d.js +2 -0
  315. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  316. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  317. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  318. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  319. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  320. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  321. package/lib/cjs/numerics/Complex.js +2 -0
  322. package/lib/cjs/numerics/Complex.js.map +1 -1
  323. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  324. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  325. package/lib/cjs/numerics/Newton.js +59 -4
  326. package/lib/cjs/numerics/Newton.js.map +1 -1
  327. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  328. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  329. package/lib/cjs/numerics/PolarData.js +13 -1
  330. package/lib/cjs/numerics/PolarData.js.map +1 -1
  331. package/lib/cjs/numerics/Polynomials.js +64 -26
  332. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  333. package/lib/cjs/numerics/Quadrature.js +26 -20
  334. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  335. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  336. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  337. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  338. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  339. package/lib/cjs/numerics/UnionFind.js +1 -0
  340. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  341. package/lib/cjs/numerics/UsageSums.js +10 -0
  342. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  343. package/lib/cjs/polyface/AuxData.js +16 -0
  344. package/lib/cjs/polyface/AuxData.js.map +1 -1
  345. package/lib/cjs/polyface/BoxTopology.js +67 -67
  346. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  347. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  348. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  349. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  350. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  351. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  352. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  353. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  354. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  355. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  356. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  357. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  358. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  359. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  360. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  361. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  362. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +11 -2
  363. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  364. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  365. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  366. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  367. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  368. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  369. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  370. package/lib/cjs/polyface/Polyface.js +73 -12
  371. package/lib/cjs/polyface/Polyface.js.map +1 -1
  372. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  373. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  374. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  375. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  376. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  377. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  378. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  379. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  380. package/lib/cjs/polyface/PolyfaceData.js +87 -5
  381. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  382. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  383. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  384. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  385. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  386. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  387. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  388. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  389. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  390. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  391. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  392. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  393. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  394. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  395. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  396. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  397. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  398. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  399. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  400. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  401. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  402. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  403. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  404. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  405. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  406. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  407. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  408. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  409. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  410. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  411. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  412. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  413. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  414. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  415. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  416. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  417. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  418. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  419. package/lib/cjs/serialization/BGFBAccessors.js +82 -164
  420. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  421. package/lib/cjs/serialization/BGFBReader.js +22 -22
  422. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  423. package/lib/cjs/serialization/BGFBWriter.js +1 -0
  424. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  425. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  426. package/lib/cjs/serialization/DeepCompare.js +17 -17
  427. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  428. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  429. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  430. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  431. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  432. package/lib/cjs/serialization/IModelJsonSchema.d.ts +70 -63
  433. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  434. package/lib/cjs/serialization/IModelJsonSchema.js +87 -74
  435. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  436. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  437. package/lib/cjs/solid/Box.js +7 -2
  438. package/lib/cjs/solid/Box.js.map +1 -1
  439. package/lib/cjs/solid/Cone.d.ts +39 -14
  440. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  441. package/lib/cjs/solid/Cone.js +52 -16
  442. package/lib/cjs/solid/Cone.js.map +1 -1
  443. package/lib/cjs/solid/LinearSweep.js +4 -2
  444. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  445. package/lib/cjs/solid/RotationalSweep.js +5 -2
  446. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  447. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  448. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  449. package/lib/cjs/solid/RuledSweep.js +32 -24
  450. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  451. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  452. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  453. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  454. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  455. package/lib/cjs/solid/Sphere.d.ts +34 -17
  456. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  457. package/lib/cjs/solid/Sphere.js +51 -24
  458. package/lib/cjs/solid/Sphere.js.map +1 -1
  459. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  460. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  461. package/lib/cjs/solid/SweepContour.js +33 -15
  462. package/lib/cjs/solid/SweepContour.js.map +1 -1
  463. package/lib/cjs/solid/TorusPipe.js +7 -2
  464. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  465. package/lib/cjs/topology/ChainMerge.js +16 -4
  466. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  467. package/lib/cjs/topology/Graph.js +41 -6
  468. package/lib/cjs/topology/Graph.js.map +1 -1
  469. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  470. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  471. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  472. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  473. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  474. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  475. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  476. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  477. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  478. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  479. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  480. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  481. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  482. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  483. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  484. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  485. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  486. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  487. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  488. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  489. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  490. package/lib/cjs/topology/MaskManager.js +3 -0
  491. package/lib/cjs/topology/MaskManager.js.map +1 -1
  492. package/lib/cjs/topology/Merging.js +11 -6
  493. package/lib/cjs/topology/Merging.js.map +1 -1
  494. package/lib/cjs/topology/RegularizeFace.js +22 -0
  495. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  496. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  497. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  498. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  499. package/lib/cjs/topology/Triangulation.js +21 -11
  500. package/lib/cjs/topology/Triangulation.js.map +1 -1
  501. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  502. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  503. package/lib/esm/Constant.js +17 -17
  504. package/lib/esm/Constant.js.map +1 -1
  505. package/lib/esm/Geometry.d.ts +2 -4
  506. package/lib/esm/Geometry.d.ts.map +1 -1
  507. package/lib/esm/Geometry.js +37 -39
  508. package/lib/esm/Geometry.js.map +1 -1
  509. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  510. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  511. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  512. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  513. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  514. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  515. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  516. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  517. package/lib/esm/bspline/BSplineCurve.js +249 -181
  518. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  519. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  520. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  521. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  522. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  523. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  524. package/lib/esm/bspline/BSplineSurface.js +22 -2
  525. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  526. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  527. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  528. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  529. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  530. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  531. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  532. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  533. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  534. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  535. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  536. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  537. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  538. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  539. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  540. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  541. package/lib/esm/bspline/KnotVector.js +144 -84
  542. package/lib/esm/bspline/KnotVector.js.map +1 -1
  543. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  544. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  545. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  546. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  547. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  548. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  549. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  550. package/lib/esm/clipping/ClipPlane.js +10 -1
  551. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  552. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  553. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  554. package/lib/esm/clipping/ClipUtils.js +5 -1
  555. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  556. package/lib/esm/clipping/ClipVector.js +11 -8
  557. package/lib/esm/clipping/ClipVector.js.map +1 -1
  558. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  559. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  560. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  561. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  562. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  563. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  564. package/lib/esm/core-geometry.d.ts +1 -0
  565. package/lib/esm/core-geometry.d.ts.map +1 -1
  566. package/lib/esm/core-geometry.js +1 -0
  567. package/lib/esm/core-geometry.js.map +1 -1
  568. package/lib/esm/curve/Arc3d.d.ts +17 -3
  569. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  570. package/lib/esm/curve/Arc3d.js +50 -21
  571. package/lib/esm/curve/Arc3d.js.map +1 -1
  572. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  573. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  574. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  575. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  576. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  577. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  578. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  579. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  580. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  581. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  582. package/lib/esm/curve/CurveCollection.js +35 -9
  583. package/lib/esm/curve/CurveCollection.js.map +1 -1
  584. package/lib/esm/curve/CurveCurve.js.map +1 -1
  585. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  586. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  587. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  588. package/lib/esm/curve/CurveFactory.js +213 -135
  589. package/lib/esm/curve/CurveFactory.js.map +1 -1
  590. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  591. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  592. package/lib/esm/curve/CurveOps.js.map +1 -1
  593. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  594. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  595. package/lib/esm/curve/CurvePrimitive.js +27 -12
  596. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  597. package/lib/esm/curve/CurveProcessor.js +2 -0
  598. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  599. package/lib/esm/curve/CurveTypes.js.map +1 -1
  600. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  601. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  602. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  603. package/lib/esm/curve/LineSegment3d.js +6 -2
  604. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  605. package/lib/esm/curve/LineString3d.js +27 -7
  606. package/lib/esm/curve/LineString3d.js.map +1 -1
  607. package/lib/esm/curve/Loop.js +12 -4
  608. package/lib/esm/curve/Loop.js.map +1 -1
  609. package/lib/esm/curve/OffsetOptions.js +25 -21
  610. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  611. package/lib/esm/curve/ParityRegion.js +4 -2
  612. package/lib/esm/curve/ParityRegion.js.map +1 -1
  613. package/lib/esm/curve/Path.js +2 -2
  614. package/lib/esm/curve/Path.js.map +1 -1
  615. package/lib/esm/curve/PointString3d.js +3 -2
  616. package/lib/esm/curve/PointString3d.js.map +1 -1
  617. package/lib/esm/curve/ProxyCurve.js +1 -0
  618. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  619. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  620. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  621. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  622. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  623. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  624. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  625. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  626. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  627. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  628. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  629. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  630. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  631. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  632. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  633. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  634. package/lib/esm/curve/RegionOps.js +9 -10
  635. package/lib/esm/curve/RegionOps.js.map +1 -1
  636. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  637. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  638. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  639. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  640. package/lib/esm/curve/StrokeOptions.js +23 -6
  641. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  642. package/lib/esm/curve/UnionRegion.js +4 -2
  643. package/lib/esm/curve/UnionRegion.js.map +1 -1
  644. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  645. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  646. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  647. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  648. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  649. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  650. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  651. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  652. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  653. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  654. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  655. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  656. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  657. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  658. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  659. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  660. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  661. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  662. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  663. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  664. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  665. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  666. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  667. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  668. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  669. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  670. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  671. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  672. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  673. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  674. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  675. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  676. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  677. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  678. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  679. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  680. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  681. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  682. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  683. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  684. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  685. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  686. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  687. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  688. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  689. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  690. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  691. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  692. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  693. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  694. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  695. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  696. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  697. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  698. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  699. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  700. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  701. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  702. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  703. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  704. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  705. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  706. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  707. package/lib/esm/geometry3d/Angle.js +18 -16
  708. package/lib/esm/geometry3d/Angle.js.map +1 -1
  709. package/lib/esm/geometry3d/AngleSweep.d.ts +7 -2
  710. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  711. package/lib/esm/geometry3d/AngleSweep.js +14 -2
  712. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  713. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  714. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  715. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  716. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  717. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  718. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  719. package/lib/esm/geometry3d/Ellipsoid.js +48 -0
  720. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  721. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  722. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  723. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  724. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  725. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  726. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  727. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  728. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  729. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  730. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  731. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  732. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  733. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  734. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  735. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  736. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  737. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  738. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  739. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  740. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  741. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  742. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  743. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  744. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  745. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  746. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  747. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  748. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  749. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  750. package/lib/esm/geometry3d/Matrix3d.js +36 -14
  751. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  752. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  753. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  754. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  755. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  756. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  757. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  758. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  759. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  760. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  761. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  762. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  763. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  764. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  765. package/lib/esm/geometry3d/Point3dVector3d.d.ts +7 -10
  766. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  767. package/lib/esm/geometry3d/Point3dVector3d.js +16 -10
  768. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  769. package/lib/esm/geometry3d/PointHelpers.d.ts +4 -4
  770. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  771. package/lib/esm/geometry3d/PointHelpers.js +8 -8
  772. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  773. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  774. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  775. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  776. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  777. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  778. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  779. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  780. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  781. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  782. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  783. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  784. package/lib/esm/geometry3d/Range.js +21 -4
  785. package/lib/esm/geometry3d/Range.js.map +1 -1
  786. package/lib/esm/geometry3d/Ray2d.js +2 -0
  787. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  788. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  789. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  790. package/lib/esm/geometry3d/Ray3d.js +20 -11
  791. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  792. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  793. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  794. package/lib/esm/geometry3d/Segment1d.js +4 -0
  795. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  796. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  797. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  798. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  799. package/lib/esm/geometry3d/Transform.js +4 -1
  800. package/lib/esm/geometry3d/Transform.js.map +1 -1
  801. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  802. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  803. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  804. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  805. package/lib/esm/geometry4d/Map4d.js +2 -0
  806. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  807. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  808. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  809. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  810. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  811. package/lib/esm/geometry4d/MomentData.js +90 -66
  812. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  813. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  814. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  815. package/lib/esm/geometry4d/Point4d.js +2 -0
  816. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  817. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  818. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  819. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  820. package/lib/esm/numerics/ClusterableArray.js +29 -13
  821. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  822. package/lib/esm/numerics/Complex.js +2 -0
  823. package/lib/esm/numerics/Complex.js.map +1 -1
  824. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  825. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  826. package/lib/esm/numerics/Newton.js +59 -4
  827. package/lib/esm/numerics/Newton.js.map +1 -1
  828. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  829. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  830. package/lib/esm/numerics/PolarData.js +13 -1
  831. package/lib/esm/numerics/PolarData.js.map +1 -1
  832. package/lib/esm/numerics/Polynomials.js +64 -26
  833. package/lib/esm/numerics/Polynomials.js.map +1 -1
  834. package/lib/esm/numerics/Quadrature.js +26 -20
  835. package/lib/esm/numerics/Quadrature.js.map +1 -1
  836. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  837. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  838. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  839. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  840. package/lib/esm/numerics/UnionFind.js +1 -0
  841. package/lib/esm/numerics/UnionFind.js.map +1 -1
  842. package/lib/esm/numerics/UsageSums.js +10 -0
  843. package/lib/esm/numerics/UsageSums.js.map +1 -1
  844. package/lib/esm/polyface/AuxData.js +16 -0
  845. package/lib/esm/polyface/AuxData.js.map +1 -1
  846. package/lib/esm/polyface/BoxTopology.js +67 -67
  847. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  848. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  849. package/lib/esm/polyface/FacetFaceData.js +3 -1
  850. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  851. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  852. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  853. package/lib/esm/polyface/FacetOrientation.js +12 -1
  854. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  855. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  856. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  857. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  858. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  859. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  860. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  861. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  862. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  863. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +11 -2
  864. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  865. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  866. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  867. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  868. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  869. package/lib/esm/polyface/Polyface.d.ts +35 -10
  870. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  871. package/lib/esm/polyface/Polyface.js +73 -12
  872. package/lib/esm/polyface/Polyface.js.map +1 -1
  873. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  874. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  875. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  876. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  877. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  878. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  879. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  880. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  881. package/lib/esm/polyface/PolyfaceData.js +87 -5
  882. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  883. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  884. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  885. package/lib/esm/polyface/RangeLengthData.js +7 -0
  886. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  887. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  888. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  889. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  890. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  891. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  892. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  893. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  894. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  895. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  896. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  897. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  898. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  899. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  900. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  901. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  902. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  903. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  904. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  905. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  906. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  907. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  908. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  909. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  910. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  911. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  912. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  913. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  914. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  915. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  916. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  917. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  918. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  919. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  920. package/lib/esm/serialization/BGFBAccessors.js +82 -164
  921. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  922. package/lib/esm/serialization/BGFBReader.js +22 -22
  923. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  924. package/lib/esm/serialization/BGFBWriter.js +1 -0
  925. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  926. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  927. package/lib/esm/serialization/DeepCompare.js +17 -17
  928. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  929. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  930. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  931. package/lib/esm/serialization/GeometrySamples.js +113 -112
  932. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  933. package/lib/esm/serialization/IModelJsonSchema.d.ts +70 -63
  934. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  935. package/lib/esm/serialization/IModelJsonSchema.js +87 -74
  936. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  937. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  938. package/lib/esm/solid/Box.js +7 -2
  939. package/lib/esm/solid/Box.js.map +1 -1
  940. package/lib/esm/solid/Cone.d.ts +39 -14
  941. package/lib/esm/solid/Cone.d.ts.map +1 -1
  942. package/lib/esm/solid/Cone.js +53 -17
  943. package/lib/esm/solid/Cone.js.map +1 -1
  944. package/lib/esm/solid/LinearSweep.js +4 -2
  945. package/lib/esm/solid/LinearSweep.js.map +1 -1
  946. package/lib/esm/solid/RotationalSweep.js +5 -2
  947. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  948. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  949. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  950. package/lib/esm/solid/RuledSweep.js +32 -24
  951. package/lib/esm/solid/RuledSweep.js.map +1 -1
  952. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  953. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  954. package/lib/esm/solid/SolidPrimitive.js +11 -6
  955. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  956. package/lib/esm/solid/Sphere.d.ts +34 -17
  957. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  958. package/lib/esm/solid/Sphere.js +52 -25
  959. package/lib/esm/solid/Sphere.js.map +1 -1
  960. package/lib/esm/solid/SweepContour.d.ts +24 -15
  961. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  962. package/lib/esm/solid/SweepContour.js +33 -15
  963. package/lib/esm/solid/SweepContour.js.map +1 -1
  964. package/lib/esm/solid/TorusPipe.js +7 -2
  965. package/lib/esm/solid/TorusPipe.js.map +1 -1
  966. package/lib/esm/topology/ChainMerge.js +16 -4
  967. package/lib/esm/topology/ChainMerge.js.map +1 -1
  968. package/lib/esm/topology/Graph.js +41 -6
  969. package/lib/esm/topology/Graph.js.map +1 -1
  970. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  971. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  972. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  973. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  974. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  975. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  976. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  977. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  978. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  979. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  980. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  981. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  982. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  983. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  984. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  985. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  986. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  987. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  988. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  989. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  990. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  991. package/lib/esm/topology/MaskManager.js +3 -0
  992. package/lib/esm/topology/MaskManager.js.map +1 -1
  993. package/lib/esm/topology/Merging.js +11 -6
  994. package/lib/esm/topology/Merging.js.map +1 -1
  995. package/lib/esm/topology/RegularizeFace.js +22 -0
  996. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  997. package/lib/esm/topology/SignedDataSummary.js +22 -0
  998. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  999. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  1000. package/lib/esm/topology/Triangulation.js +21 -11
  1001. package/lib/esm/topology/Triangulation.js.map +1 -1
  1002. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  1003. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  1004. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"FacetLocationDetail.js","sourceRoot":"","sources":["../../../src/polyface/FacetLocationDetail.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG7E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAUzD;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAehC,gCAAgC;IAChC;QACE,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,mBAAmB,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC;IACnD,CAAC;CACF;AAuCD;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAMlC,mCAAmC;IACnC,YAAoB,OAA4B,EAAE,OAA4B;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACD,oDAAoD;IAC7C,MAAM,CAAC,MAAM,CAAC,OAA4B,EAAE,OAA4B;QAC7E,OAAO,IAAI,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,6BAA6B;IAOxC,sCAAsC;IACtC,YAAoB,aAAqB,CAAC,CAAC,EAAE,MAA+B;QAC1E,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAC;IACnE,CAAC;IACD,8BAA8B;IACvB,UAAU,CAAC,OAAgB,IAAI;QACpC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI;YACN,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,MAAM,CAAC,aAAqB,CAAC,CAAC,EAAE,MAA+B,EAAE,MAAsC;QACnH,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,6BAA6B,EAAE,CAAC;;YAE7C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAG,4CAA4C;QAC1E,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;QAChC,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;YACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,yCAAyC;IAClC,MAAM,CAAC,aAAa,CAAC,UAAkB,EAAE,MAA8B;QAC5E,OAAO,IAAI,6BAA6B,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IACD,2BAA2B;IAC3B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,wCAAwC;IACxC,IAAW,SAAS;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,8CAA8C;IAC9C,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,CAAC;IACD,2CAA2C;IAC3C,IAAW,CAAC;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,mEAAmE;IACnE,IAAW,WAAW;QACpB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACvG,CAAC;IACD,kDAAkD;IAClD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,wDAAwD;IACxD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,mCAAmC;IACnC,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qDAAqD;IACrD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACpD,CAAC;IACD,wFAAwF;IACxF,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IACD,yBAAyB;IAClB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,6BAA6B,EAAE,CAAC;QACnD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,gBAAgB,CAAC,KAAoC;QAC1D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACI,SAAS,CAAC,YAAmC;QAClD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YACrF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClF,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD;;;OAGG;IACI,QAAQ,CAAC,WAAiC;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YACnF,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClF,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD;;;;OAIG;IACI,QAAQ,CAAC,WAAsB;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YACnF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD;;MAEE;IACK,yBAAyB;QAC9B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,4BAA4B;IAKvC,sCAAsC;IACtC,YAAsB,aAAqB,CAAC,CAAC,EAAE,YAAoB,CAAC,EAAE,MAA8B;QAClG,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;IAClE,CAAC;IACD,8BAA8B;IACvB,UAAU,CAAC,OAAgB,IAAI;QACpC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,IAAI;YACN,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,MAAM,CAAC,aAAqB,CAAC,CAAC,EAAE,YAAoB,CAAC,EAAE,MAA8B,EAAE,MAAqC;QACxI,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,4BAA4B,EAAE,CAAC;;YAE5C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAG,4CAA4C;QAC1E,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;YACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,yCAAyC;IAClC,MAAM,CAAC,aAAa,CAAC,UAAkB,EAAE,SAAiB,EAAE,MAA6B;QAC9F,OAAO,IAAI,4BAA4B,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IACD,2BAA2B;IAC3B,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,wCAAwC;IACxC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,8CAA8C;IAC9C,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,CAAC;IACD,2CAA2C;IAC3C,IAAW,CAAC;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,mEAAmE;IACnE,IAAW,WAAW;QACpB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACvG,CAAC;IACD,kDAAkD;IAClD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,wDAAwD;IACxD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/C,CAAC;IACD,iGAAiG;IACjG,IAAW,QAAQ;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qDAAqD;IACrD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACpD,CAAC;IACD,wFAAwF;IACxF,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,yBAAyB;IAClB,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,4BAA4B,EAAE,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACI,gBAAgB,CAAC,KAAmC;QACzD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD;;MAEE;IACK,SAAS;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;MAEE;IACK,QAAQ;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;MAEE;IACK,QAAQ;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;OAEG;IACI,yBAAyB;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,4BAA4B;IAMzE,sCAAsC;IACtC,YAAoB,aAAqB,CAAC,CAAC,EAAE,YAAoB,CAAC,EAAE,MAA8B;QAChG,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,8BAA8B;IACd,UAAU,CAAC,OAAgB,IAAI;QAC7C,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAC3C,CAAC;IACD;;;OAGG;IACI,MAAM,CAAU,MAAM,CAAC,aAAqB,CAAC,CAAC,EAAE,YAAoB,CAAC,EAAE,MAA8B,EAAE,MAAkC;QAC9I,IAAI,CAAC,MAAM;YACT,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;;YAEzC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAG,4CAA4C;QAC1E,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IACD,yCAAyC;IAClC,MAAM,CAAU,aAAa,CAAC,UAAkB,EAAE,SAAiB,EAAE,MAA6B;QACvG,OAAO,IAAI,yBAAyB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IACD,mCAAmC;IACnC,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,yBAAyB;IACT,KAAK;QACnB,MAAM,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC/C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;OAEG;IACa,gBAAgB,CAAC,KAAgC;QAC/D,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,uBAAuB,EAAE,KAAK,EAAE,CAAC;IACxE,CAAC;IACD;;;;;OAKG;IACa,SAAS,CAAC,YAAmC,EAAE,aAAoC,EAAE,oBAA4B,QAAQ,CAAC,mBAAmB;QAC3J,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YAChF,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACjC,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD;;;;;OAKG;IACa,QAAQ,CAAC,WAAiC,EAAE,aAAoC,EAAE,oBAA4B,QAAQ,CAAC,mBAAmB;QACxJ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YAChF,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD;;;;;OAKG;IACa,QAAQ,CAAC,WAAsB,EAAE,aAAoC,EAAE,oBAA4B,QAAQ,CAAC,mBAAmB;QAC7I,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YACnF,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YAChF,IAAI,SAAS,KAAK,MAAM;gBACtB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD;;;;MAIE;IACc,yBAAyB,CAAC,aAAoC,EAAE,oBAA4B,QAAQ,CAAC,mBAAmB;QACtI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC,uBAAuB,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YACtG,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,4BAA4B,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC/H,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { TriangleLocationDetail } from \"../geometry3d/BarycentricTriangle\";\r\nimport { Geometry, PolygonLocation } from \"../Geometry\";\r\nimport { PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolygonLocationDetail, PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\r\nimport { IndexedXYCollection } from \"../geometry3d/IndexedXYCollection\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n\r\n/** Callback for processing the detail for an intersected facet.\r\n * @param detail reference to the intersection data, with `detail.IsInsideOn === true`. Note that `detail` is owned by the caller; to persist, use `detail.clone`.\r\n * @param visitor at currently intersected facet\r\n * @returns true to accept this intersection and stop processing; false to continue to the next facet\r\n * @public\r\n */\r\nexport type FacetIntersectCallback = (detail: FacetLocationDetail, visitor: PolyfaceVisitor) => boolean;\r\n\r\n/** Options for computing and processing facet intersection methods.\r\n * @see PolyfaceQuery.intersectRay3d\r\n * @public\r\n */\r\nexport class FacetIntersectOptions {\r\n /** distance tolerance for testing coincidence with facet boundary */\r\n public distanceTolerance: number;\r\n /** fractional tolerance for snapping barycentric coordinates to a triangular facet edge */\r\n public parameterTolerance: number;\r\n /** whether to compute the normal at the intersection point */\r\n public needNormal?: boolean;\r\n /** whether to compute the uv parameter at the intersection point */\r\n public needParam?: boolean;\r\n /** whether to compute the color at the intersection point */\r\n public needColor?: boolean;\r\n /** whether to compute the barycentric coordinates of the point for a convex facet */\r\n public needBarycentricCoordinates?: boolean;\r\n /** optional callback to accept an intersected facet */\r\n public acceptIntersection?: FacetIntersectCallback;\r\n /** constructor with defaults */\r\n public constructor() {\r\n this.distanceTolerance = Geometry.smallMetricDistance;\r\n this.parameterTolerance = Geometry.smallFraction;\r\n }\r\n}\r\n/**\r\n * Carries data about a point in the plane of a facet of a mesh.\r\n * @see PolyfaceQuery.intersectRay3d\r\n * @public\r\n */\r\nexport interface FacetLocationDetail {\r\n /** Get the index of the referenced facet. */\r\n get facetIndex(): number;\r\n /** Get the number of edges of this facet. */\r\n get edgeCount(): number;\r\n /** Get the world coordinates of the point. */\r\n get point(): Point3d;\r\n /** Get the application-specific number. */\r\n get a(): number;\r\n /** Get the projection of the point onto the closest facet edge. */\r\n get closestEdge(): { startVertexIndex: number, edgeParam: number };\r\n /** Whether this instance specifies a valid location. */\r\n get isValid(): boolean;\r\n /** Whether the facet is convex. */\r\n get isConvex(): boolean;\r\n /** Whether the point is inside or on the facet. */\r\n get isInsideOrOn(): boolean;\r\n /** Get the code that classifies the location of the point with respect to the facet. */\r\n get classify(): PolygonLocation;\r\n /** Clone the instance */\r\n clone(): FacetLocationDetail;\r\n /** Set the instance contents from the other detail */\r\n copyContentsFrom(other: FacetLocationDetail): void;\r\n /** Get reference to cached normal interpolated from facet data. Inputs may be used to compute the cache. */\r\n getNormal(facetNormals?: IndexedXYZCollection, facetVertices?: IndexedXYZCollection, distanceTolerance?: number): Vector3d | undefined;\r\n /** Get reference to cached uv parameter interpolated from facet data. Inputs may be used to compute the cache. */\r\n getParam(facetParams?: IndexedXYCollection, facetVertices?: IndexedXYZCollection, distanceTolerance?: number): Point2d | undefined;\r\n /** Get cached color interpolated from facet data. Inputs may be used to compute the cache. */\r\n getColor(facetColors?: number[], facetVertices?: IndexedXYZCollection, distanceTolerance?: number): number | undefined;\r\n /** Get reference to cached barycentric coordinates of the point. Inputs may be used to compute the cache. */\r\n getBarycentricCoordinates(facetVertices?: IndexedXYZCollection, distanceTolerance?: number): number[] | undefined;\r\n}\r\n\r\n/**\r\n * A pair of FacetLocationDetail.\r\n * @public\r\n */\r\nexport class FacetLocationDetailPair {\r\n /** The first of the two details. */\r\n public detailA: FacetLocationDetail;\r\n /** The second of the two details. */\r\n public detailB: FacetLocationDetail;\r\n\r\n /** Constructor, captures inputs */\r\n private constructor(detailA: FacetLocationDetail, detailB: FacetLocationDetail) {\r\n this.detailA = detailA;\r\n this.detailB = detailB;\r\n }\r\n /** Create a facet detail pair, capturing inputs. */\r\n public static create(detailA: FacetLocationDetail, detailB: FacetLocationDetail): FacetLocationDetailPair {\r\n return new FacetLocationDetailPair(detailA, detailB);\r\n }\r\n}\r\n\r\n/**\r\n * Implementation of `FacetLocationDetail` for a triangular facet.\r\n * @public\r\n */\r\nexport class TriangularFacetLocationDetail implements FacetLocationDetail {\r\n private _facetIndex: number;\r\n private _detail: TriangleLocationDetail;\r\n private _normal?: Vector3d;\r\n private _param?: Point2d;\r\n private _color?: number;\r\n\r\n /** captures the detail if provided */\r\n private constructor(facetIndex: number = -1, detail?: TriangleLocationDetail) {\r\n this._facetIndex = facetIndex;\r\n this._detail = detail ? detail : TriangleLocationDetail.create();\r\n }\r\n /** Invalidate this detail. */\r\n public invalidate(deep: boolean = true) {\r\n this._facetIndex = -1;\r\n if (deep)\r\n this._detail.invalidate();\r\n this._normal = undefined;\r\n this._param = undefined;\r\n this._color = undefined;\r\n }\r\n /** Create a detail.\r\n * @param detail optional, copied if given\r\n * @param result optional pre-allocated object to fill and return\r\n */\r\n public static create(facetIndex: number = -1, detail?: TriangleLocationDetail, result?: TriangularFacetLocationDetail): TriangularFacetLocationDetail {\r\n if (!result)\r\n result = new TriangularFacetLocationDetail();\r\n else\r\n result.invalidate(false); // shallow: detail might be owned by result!\r\n result._facetIndex = facetIndex;\r\n if (undefined !== detail && result._detail !== detail)\r\n result._detail.copyContentsFrom(detail);\r\n return result;\r\n }\r\n /** Create a detail, capturing inputs. */\r\n public static createCapture(facetIndex: number, detail: TriangleLocationDetail): TriangularFacetLocationDetail {\r\n return new TriangularFacetLocationDetail(facetIndex, detail);\r\n }\r\n /** Get the facet index. */\r\n public get facetIndex(): number {\r\n return this._facetIndex;\r\n }\r\n /** Get the edge count of this facet. */\r\n public get edgeCount(): number {\r\n return 3;\r\n }\r\n /** Get the world coordinates of the point. */\r\n public get point(): Point3d {\r\n return this._detail.world;\r\n }\r\n /** Get the application-specific number. */\r\n public get a(): number {\r\n return this._detail.a;\r\n }\r\n /** Get the projection of the point onto the closest facet edge. */\r\n public get closestEdge(): { startVertexIndex: number, edgeParam: number } {\r\n return { startVertexIndex: this._detail.closestEdgeIndex, edgeParam: this._detail.closestEdgeParam };\r\n }\r\n /** Test validity of fields other than _detail. */\r\n private get _isValid(): boolean {\r\n return this._facetIndex >= 0;\r\n }\r\n /** Whether this instance specifies a valid location. */\r\n public get isValid(): boolean {\r\n return this._isValid && this._detail.isValid;\r\n }\r\n /** Whether the facet is convex. */\r\n public get isConvex(): boolean {\r\n return true;\r\n }\r\n /** Whether the point is inside or on the polygon. */\r\n public get isInsideOrOn(): boolean {\r\n return this._isValid && this._detail.isInsideOrOn;\r\n }\r\n /** Get the code that classifies the location of the point with respect to the facet. */\r\n public get classify(): PolygonLocation {\r\n return this._detail.classify;\r\n }\r\n /** Clone the instance */\r\n public clone(): TriangularFacetLocationDetail {\r\n const detail = new TriangularFacetLocationDetail();\r\n detail.copyContentsFrom(this);\r\n return detail;\r\n }\r\n /** Set the instance contents from the other detail.\r\n * @param other detail to clone\r\n */\r\n public copyContentsFrom(other: TriangularFacetLocationDetail) {\r\n this._facetIndex = other._facetIndex;\r\n this._detail.copyContentsFrom(other._detail);\r\n this._normal = other._normal?.clone();\r\n this._param = other._param?.clone();\r\n this._color = other._color;\r\n }\r\n /** Get normal interpolated from facet data.\r\n * @param facetNormals used to compute the normal cache\r\n * @returns reference to cached normal\r\n */\r\n public getNormal(facetNormals?: IndexedXYZCollection): Vector3d | undefined {\r\n if (this._detail.isValid && undefined === this._normal && undefined !== facetNormals) {\r\n this._normal = Vector3d.create();\r\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\r\n facetNormals.linearCombination(scales, this._normal);\r\n }\r\n return this._normal;\r\n }\r\n /** Get uv parameter interpolated from facet data.\r\n * @param facetParams used to compute the uv parameter cache\r\n * @returns reference to cached uv parameter\r\n */\r\n public getParam(facetParams?: IndexedXYCollection): Point2d | undefined {\r\n if (this._detail.isValid && undefined === this._param && undefined !== facetParams) {\r\n this._param = Point2d.create();\r\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\r\n facetParams.linearCombination(scales, this._param);\r\n }\r\n return this._param;\r\n }\r\n /** Get color interpolated from facet data.\r\n * * Assumes barycentric coordinates are already computed in the TriangleLocationDetail member.\r\n * @param facetColors used to compute the color cache\r\n * @returns cached color\r\n */\r\n public getColor(facetColors?: number[]): number | undefined {\r\n if (this._detail.isValid && undefined === this._color && undefined !== facetColors) {\r\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\r\n this._color = NumberArray.linearCombinationOfColors(facetColors, scales);\r\n }\r\n return this._color;\r\n }\r\n /** Get the barycentric coordinates of this location.\r\n * @returns cached barycentric coordinates\r\n */\r\n public getBarycentricCoordinates(): number[] {\r\n return [this._detail.local.x, this._detail.local.y, this._detail.local.z];\r\n }\r\n}\r\n/**\r\n * Implementation of `FacetLocationDetail` for a general facet, which may or may not be convex.\r\n * * Facet vertex data interpolation is not available.\r\n * @public\r\n */\r\nexport class NonConvexFacetLocationDetail implements FacetLocationDetail {\r\n private _facetIndex: number;\r\n private _edgeCount: number;\r\n protected _detail: PolygonLocationDetail;\r\n\r\n /** captures the detail if provided */\r\n protected constructor(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail) {\r\n this._facetIndex = facetIndex;\r\n this._edgeCount = edgeCount;\r\n this._detail = detail ? detail : PolygonLocationDetail.create();\r\n }\r\n /** Invalidate this detail. */\r\n public invalidate(deep: boolean = true) {\r\n this._facetIndex = -1;\r\n this._edgeCount = 0;\r\n if (deep)\r\n this._detail.invalidate();\r\n }\r\n /** Create a detail.\r\n * @param detail optional, copied if given\r\n * @param result optional pre-allocated object to fill and return\r\n */\r\n public static create(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail, result?: NonConvexFacetLocationDetail): NonConvexFacetLocationDetail {\r\n if (!result)\r\n result = new NonConvexFacetLocationDetail();\r\n else\r\n result.invalidate(false); // shallow: detail might be owned by result!\r\n result._facetIndex = facetIndex;\r\n result._edgeCount = edgeCount;\r\n if (undefined !== detail && result._detail !== detail)\r\n result._detail.copyContentsFrom(detail);\r\n return result;\r\n }\r\n /** Create a detail, capturing inputs. */\r\n public static createCapture(facetIndex: number, edgeCount: number, detail: PolygonLocationDetail): NonConvexFacetLocationDetail {\r\n return new NonConvexFacetLocationDetail(facetIndex, edgeCount, detail);\r\n }\r\n /** Get the facet index. */\r\n public get facetIndex(): number {\r\n return this._facetIndex;\r\n }\r\n /** Get the edge count of this facet. */\r\n public get edgeCount(): number {\r\n return this._edgeCount;\r\n }\r\n /** Get the world coordinates of the point. */\r\n public get point(): Point3d {\r\n return this._detail.point;\r\n }\r\n /** Get the application-specific number. */\r\n public get a(): number {\r\n return this._detail.a;\r\n }\r\n /** Get the projection of the point onto the closest facet edge. */\r\n public get closestEdge(): { startVertexIndex: number, edgeParam: number } {\r\n return { startVertexIndex: this._detail.closestEdgeIndex, edgeParam: this._detail.closestEdgeParam };\r\n }\r\n /** Test validity of fields other than _detail. */\r\n private get _isValid(): boolean {\r\n return this._facetIndex >= 0 && this._edgeCount >= 3;\r\n }\r\n /** Whether this instance specifies a valid location. */\r\n public get isValid(): boolean {\r\n return this._isValid && this._detail.isValid;\r\n }\r\n /** Whether the facet is convex. Always returns false, as convexity is unknown to this detail. */\r\n public get isConvex(): boolean {\r\n return false;\r\n }\r\n /** Whether the point is inside or on the polygon. */\r\n public get isInsideOrOn(): boolean {\r\n return this._isValid && this._detail.isInsideOrOn;\r\n }\r\n /** Get the code that classifies the location of the point with respect to the facet. */\r\n public get classify(): PolygonLocation {\r\n return this._detail.code;\r\n }\r\n /** Clone the instance */\r\n public clone(): NonConvexFacetLocationDetail {\r\n const detail = new NonConvexFacetLocationDetail();\r\n detail.copyContentsFrom(this);\r\n return detail;\r\n }\r\n /** Set the instance contents from the other detail.\r\n * @param other detail to clone\r\n */\r\n public copyContentsFrom(other: NonConvexFacetLocationDetail) {\r\n this._facetIndex = other._facetIndex;\r\n this._edgeCount = other._edgeCount;\r\n this._detail.copyContentsFrom(other._detail);\r\n }\r\n /** Interpolated data is not defined for a non-convex facet.\r\n * @returns undefined\r\n */\r\n public getNormal(): Vector3d | undefined {\r\n return undefined;\r\n }\r\n /** Interpolated data is not defined for a non-convex facet.\r\n * @returns undefined\r\n */\r\n public getParam(): Point2d | undefined {\r\n return undefined;\r\n }\r\n /** Interpolated data is not defined for a non-convex facet.\r\n * @returns undefined\r\n */\r\n public getColor(): number | undefined {\r\n return undefined;\r\n }\r\n /** Barycentric coordinates are not defined for a non-convex facet.\r\n * @returns undefined\r\n */\r\n public getBarycentricCoordinates(): number[] | undefined {\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Implementation of `FacetLocationDetail` for a convex facet.\r\n * * If `edgeCount` is 3, `TriangularFacetLocationDetail` is more efficient.\r\n * @public\r\n */\r\nexport class ConvexFacetLocationDetail extends NonConvexFacetLocationDetail {\r\n private _normal?: Vector3d;\r\n private _param?: Point2d;\r\n private _color?: number;\r\n private _barycentricCoordinates?: number[];\r\n\r\n /** captures the detail if provided */\r\n private constructor(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail) {\r\n super(facetIndex, edgeCount, detail);\r\n }\r\n /** Invalidate this detail. */\r\n public override invalidate(deep: boolean = true) {\r\n super.invalidate(deep);\r\n this._normal = undefined;\r\n this._param = undefined;\r\n this._color = undefined;\r\n this._barycentricCoordinates = undefined;\r\n }\r\n /** Create a detail.\r\n * @param detail optional, copied if given\r\n * @param result optional pre-allocated object to fill and return\r\n */\r\n public static override create(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail, result?: ConvexFacetLocationDetail): ConvexFacetLocationDetail {\r\n if (!result)\r\n result = new ConvexFacetLocationDetail();\r\n else\r\n result.invalidate(false); // shallow: detail might be owned by result!\r\n return super.create(facetIndex, edgeCount, detail, result);\r\n }\r\n /** Create a detail, capturing inputs. */\r\n public static override createCapture(facetIndex: number, edgeCount: number, detail: PolygonLocationDetail): ConvexFacetLocationDetail {\r\n return new ConvexFacetLocationDetail(facetIndex, edgeCount, detail);\r\n }\r\n /** Whether the facet is convex. */\r\n public override get isConvex(): boolean {\r\n return true;\r\n }\r\n /** Clone the instance */\r\n public override clone(): ConvexFacetLocationDetail {\r\n const detail = new ConvexFacetLocationDetail();\r\n detail.copyContentsFrom(this);\r\n return detail;\r\n }\r\n /** Set the instance contents from the other detail.\r\n * @param other detail to clone\r\n */\r\n public override copyContentsFrom(other: ConvexFacetLocationDetail) {\r\n super.copyContentsFrom(other);\r\n this._normal = other._normal?.clone();\r\n this._param = other._param?.clone();\r\n this._color = other._color;\r\n this._barycentricCoordinates = other._barycentricCoordinates?.slice();\r\n }\r\n /** Get normal interpolated from facet data.\r\n * @param facetNormals used to compute the normal cache\r\n * @param facetVertices used to compute the barycentric coordinate cache\r\n * @param distanceTolerance used to compute the barycentric coordinate cache\r\n * @returns reference to cached normal\r\n */\r\n public override getNormal(facetNormals?: IndexedXYZCollection, facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): Vector3d | undefined {\r\n if (this._detail.isValid && undefined === this._normal && undefined !== facetNormals) {\r\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\r\n if (undefined !== scales) {\r\n this._normal = Vector3d.create();\r\n facetNormals.linearCombination(scales, this._normal);\r\n }\r\n }\r\n return this._normal;\r\n }\r\n /** Get uv parameter interpolated from facet data.\r\n * @param facetParams used to compute the uv parameter cache\r\n * @param facetVertices used to compute the barycentric coordinate cache\r\n * @param distanceTolerance used to compute the barycentric coordinate cache\r\n * @returns reference to cached uv parameter\r\n */\r\n public override getParam(facetParams?: IndexedXYCollection, facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): Point2d | undefined {\r\n if (this._detail.isValid && undefined === this._param && undefined !== facetParams) {\r\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\r\n if (undefined !== scales) {\r\n this._param = Point2d.create();\r\n facetParams.linearCombination(scales, this._param);\r\n }\r\n }\r\n return this._param;\r\n }\r\n /** Get color interpolated from facet data.\r\n * @param facetColors used to compute the color cache\r\n * @param facetVertices used to compute the barycentric coordinate cache\r\n * @param distanceTolerance used to compute the barycentric coordinate cache\r\n * @returns cached color\r\n */\r\n public override getColor(facetColors?: number[], facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): number | undefined {\r\n if (this._detail.isValid && undefined === this._color && undefined !== facetColors) {\r\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\r\n if (undefined !== scales)\r\n this._color = NumberArray.linearCombinationOfColors(facetColors, scales);\r\n }\r\n return this._color;\r\n }\r\n /** Get the barycentric coordinates of this location, if they have been computed.\r\n * @param facetVertices used to compute the barycentric coordinate cache\r\n * @param distanceTolerance used to compute the barycentric coordinate cache\r\n * @returns cached barycentric coordinates\r\n */\r\n public override getBarycentricCoordinates(facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): number[] | undefined {\r\n if (this._detail.isValid && undefined === this._barycentricCoordinates && undefined !== facetVertices) {\r\n this._barycentricCoordinates = PolygonOps.convexBarycentricCoordinates(facetVertices, this._detail.point, distanceTolerance);\r\n }\r\n return this._barycentricCoordinates;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FacetLocationDetail.js","sourceRoot":"","sources":["../../../src/polyface/FacetLocationDetail.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Polyface\n */\n\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { TriangleLocationDetail } from \"../geometry3d/BarycentricTriangle\";\nimport { Geometry, PolygonLocation } from \"../Geometry\";\nimport { PolyfaceVisitor } from \"./Polyface\";\nimport { PolygonLocationDetail, PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { IndexedXYCollection } from \"../geometry3d/IndexedXYCollection\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\n\n/** Callback for processing the detail for an intersected facet.\n * @param detail reference to the intersection data, with `detail.IsInsideOn === true`. Note that `detail` is owned by the caller; to persist, use `detail.clone`.\n * @param visitor at currently intersected facet\n * @returns true to accept this intersection and stop processing; false to continue to the next facet\n * @public\n */\nexport type FacetIntersectCallback = (detail: FacetLocationDetail, visitor: PolyfaceVisitor) => boolean;\n\n/** Options for computing and processing facet intersection methods.\n * @see PolyfaceQuery.intersectRay3d\n * @public\n */\nexport class FacetIntersectOptions {\n /** distance tolerance for testing coincidence with facet boundary */\n public distanceTolerance: number;\n /** fractional tolerance for snapping barycentric coordinates to a triangular facet edge */\n public parameterTolerance: number;\n /** whether to compute the normal at the intersection point */\n public needNormal?: boolean;\n /** whether to compute the uv parameter at the intersection point */\n public needParam?: boolean;\n /** whether to compute the color at the intersection point */\n public needColor?: boolean;\n /** whether to compute the barycentric coordinates of the point for a convex facet */\n public needBarycentricCoordinates?: boolean;\n /** optional callback to accept an intersected facet */\n public acceptIntersection?: FacetIntersectCallback;\n /** constructor with defaults */\n public constructor() {\n this.distanceTolerance = Geometry.smallMetricDistance;\n this.parameterTolerance = Geometry.smallFraction;\n }\n}\n/**\n * Carries data about a point in the plane of a facet of a mesh.\n * @see PolyfaceQuery.intersectRay3d\n * @public\n */\nexport interface FacetLocationDetail {\n /** Get the index of the referenced facet. */\n get facetIndex(): number;\n /** Get the number of edges of this facet. */\n get edgeCount(): number;\n /** Get the world coordinates of the point. */\n get point(): Point3d;\n /** Get the application-specific number. */\n get a(): number;\n /** Get the projection of the point onto the closest facet edge. */\n get closestEdge(): { startVertexIndex: number, edgeParam: number };\n /** Whether this instance specifies a valid location. */\n get isValid(): boolean;\n /** Whether the facet is convex. */\n get isConvex(): boolean;\n /** Whether the point is inside or on the facet. */\n get isInsideOrOn(): boolean;\n /** Get the code that classifies the location of the point with respect to the facet. */\n get classify(): PolygonLocation;\n /** Clone the instance */\n clone(): FacetLocationDetail;\n /** Set the instance contents from the other detail */\n copyContentsFrom(other: FacetLocationDetail): void;\n /** Get reference to cached normal interpolated from facet data. Inputs may be used to compute the cache. */\n getNormal(facetNormals?: IndexedXYZCollection, facetVertices?: IndexedXYZCollection, distanceTolerance?: number): Vector3d | undefined;\n /** Get reference to cached uv parameter interpolated from facet data. Inputs may be used to compute the cache. */\n getParam(facetParams?: IndexedXYCollection, facetVertices?: IndexedXYZCollection, distanceTolerance?: number): Point2d | undefined;\n /** Get cached color interpolated from facet data. Inputs may be used to compute the cache. */\n getColor(facetColors?: number[], facetVertices?: IndexedXYZCollection, distanceTolerance?: number): number | undefined;\n /** Get reference to cached barycentric coordinates of the point. Inputs may be used to compute the cache. */\n getBarycentricCoordinates(facetVertices?: IndexedXYZCollection, distanceTolerance?: number): number[] | undefined;\n}\n\n/**\n * A pair of FacetLocationDetail.\n * @public\n */\nexport class FacetLocationDetailPair {\n /** The first of the two details. */\n public detailA: FacetLocationDetail;\n /** The second of the two details. */\n public detailB: FacetLocationDetail;\n\n /** Constructor, captures inputs */\n private constructor(detailA: FacetLocationDetail, detailB: FacetLocationDetail) {\n this.detailA = detailA;\n this.detailB = detailB;\n }\n /** Create a facet detail pair, capturing inputs. */\n public static create(detailA: FacetLocationDetail, detailB: FacetLocationDetail): FacetLocationDetailPair {\n return new FacetLocationDetailPair(detailA, detailB);\n }\n}\n\n/**\n * Implementation of `FacetLocationDetail` for a triangular facet.\n * @public\n */\nexport class TriangularFacetLocationDetail implements FacetLocationDetail {\n private _facetIndex: number;\n private _detail: TriangleLocationDetail;\n private _normal?: Vector3d;\n private _param?: Point2d;\n private _color?: number;\n\n /** captures the detail if provided */\n private constructor(facetIndex: number = -1, detail?: TriangleLocationDetail) {\n this._facetIndex = facetIndex;\n this._detail = detail ? detail : TriangleLocationDetail.create();\n }\n /** Invalidate this detail. */\n public invalidate(deep: boolean = true) {\n this._facetIndex = -1;\n if (deep)\n this._detail.invalidate();\n this._normal = undefined;\n this._param = undefined;\n this._color = undefined;\n }\n /** Create a detail.\n * @param detail optional, copied if given\n * @param result optional pre-allocated object to fill and return\n */\n public static create(facetIndex: number = -1, detail?: TriangleLocationDetail, result?: TriangularFacetLocationDetail): TriangularFacetLocationDetail {\n if (!result)\n result = new TriangularFacetLocationDetail();\n else\n result.invalidate(false); // shallow: detail might be owned by result!\n result._facetIndex = facetIndex;\n if (undefined !== detail && result._detail !== detail)\n result._detail.copyContentsFrom(detail);\n return result;\n }\n /** Create a detail, capturing inputs. */\n public static createCapture(facetIndex: number, detail: TriangleLocationDetail): TriangularFacetLocationDetail {\n return new TriangularFacetLocationDetail(facetIndex, detail);\n }\n /** Get the facet index. */\n public get facetIndex(): number {\n return this._facetIndex;\n }\n /** Get the edge count of this facet. */\n public get edgeCount(): number {\n return 3;\n }\n /** Get the world coordinates of the point. */\n public get point(): Point3d {\n return this._detail.world;\n }\n /** Get the application-specific number. */\n public get a(): number {\n return this._detail.a;\n }\n /** Get the projection of the point onto the closest facet edge. */\n public get closestEdge(): { startVertexIndex: number, edgeParam: number } {\n return { startVertexIndex: this._detail.closestEdgeIndex, edgeParam: this._detail.closestEdgeParam };\n }\n /** Test validity of fields other than _detail. */\n private get _isValid(): boolean {\n return this._facetIndex >= 0;\n }\n /** Whether this instance specifies a valid location. */\n public get isValid(): boolean {\n return this._isValid && this._detail.isValid;\n }\n /** Whether the facet is convex. */\n public get isConvex(): boolean {\n return true;\n }\n /** Whether the point is inside or on the polygon. */\n public get isInsideOrOn(): boolean {\n return this._isValid && this._detail.isInsideOrOn;\n }\n /** Get the code that classifies the location of the point with respect to the facet. */\n public get classify(): PolygonLocation {\n return this._detail.classify;\n }\n /** Clone the instance */\n public clone(): TriangularFacetLocationDetail {\n const detail = new TriangularFacetLocationDetail();\n detail.copyContentsFrom(this);\n return detail;\n }\n /** Set the instance contents from the other detail.\n * @param other detail to clone\n */\n public copyContentsFrom(other: TriangularFacetLocationDetail) {\n this._facetIndex = other._facetIndex;\n this._detail.copyContentsFrom(other._detail);\n this._normal = other._normal?.clone();\n this._param = other._param?.clone();\n this._color = other._color;\n }\n /** Get normal interpolated from facet data.\n * @param facetNormals used to compute the normal cache\n * @returns reference to cached normal\n */\n public getNormal(facetNormals?: IndexedXYZCollection): Vector3d | undefined {\n if (this._detail.isValid && undefined === this._normal && undefined !== facetNormals) {\n this._normal = Vector3d.create();\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\n facetNormals.linearCombination(scales, this._normal);\n }\n return this._normal;\n }\n /** Get uv parameter interpolated from facet data.\n * @param facetParams used to compute the uv parameter cache\n * @returns reference to cached uv parameter\n */\n public getParam(facetParams?: IndexedXYCollection): Point2d | undefined {\n if (this._detail.isValid && undefined === this._param && undefined !== facetParams) {\n this._param = Point2d.create();\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\n facetParams.linearCombination(scales, this._param);\n }\n return this._param;\n }\n /** Get color interpolated from facet data.\n * * Assumes barycentric coordinates are already computed in the TriangleLocationDetail member.\n * @param facetColors used to compute the color cache\n * @returns cached color\n */\n public getColor(facetColors?: number[]): number | undefined {\n if (this._detail.isValid && undefined === this._color && undefined !== facetColors) {\n const scales = [this._detail.local.x, this._detail.local.y, this._detail.local.z];\n this._color = NumberArray.linearCombinationOfColors(facetColors, scales);\n }\n return this._color;\n }\n /** Get the barycentric coordinates of this location.\n * @returns cached barycentric coordinates\n */\n public getBarycentricCoordinates(): number[] {\n return [this._detail.local.x, this._detail.local.y, this._detail.local.z];\n }\n}\n/**\n * Implementation of `FacetLocationDetail` for a general facet, which may or may not be convex.\n * * Facet vertex data interpolation is not available.\n * @public\n */\nexport class NonConvexFacetLocationDetail implements FacetLocationDetail {\n private _facetIndex: number;\n private _edgeCount: number;\n protected _detail: PolygonLocationDetail;\n\n /** captures the detail if provided */\n protected constructor(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail) {\n this._facetIndex = facetIndex;\n this._edgeCount = edgeCount;\n this._detail = detail ? detail : PolygonLocationDetail.create();\n }\n /** Invalidate this detail. */\n public invalidate(deep: boolean = true) {\n this._facetIndex = -1;\n this._edgeCount = 0;\n if (deep)\n this._detail.invalidate();\n }\n /** Create a detail.\n * @param detail optional, copied if given\n * @param result optional pre-allocated object to fill and return\n */\n public static create(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail, result?: NonConvexFacetLocationDetail): NonConvexFacetLocationDetail {\n if (!result)\n result = new NonConvexFacetLocationDetail();\n else\n result.invalidate(false); // shallow: detail might be owned by result!\n result._facetIndex = facetIndex;\n result._edgeCount = edgeCount;\n if (undefined !== detail && result._detail !== detail)\n result._detail.copyContentsFrom(detail);\n return result;\n }\n /** Create a detail, capturing inputs. */\n public static createCapture(facetIndex: number, edgeCount: number, detail: PolygonLocationDetail): NonConvexFacetLocationDetail {\n return new NonConvexFacetLocationDetail(facetIndex, edgeCount, detail);\n }\n /** Get the facet index. */\n public get facetIndex(): number {\n return this._facetIndex;\n }\n /** Get the edge count of this facet. */\n public get edgeCount(): number {\n return this._edgeCount;\n }\n /** Get the world coordinates of the point. */\n public get point(): Point3d {\n return this._detail.point;\n }\n /** Get the application-specific number. */\n public get a(): number {\n return this._detail.a;\n }\n /** Get the projection of the point onto the closest facet edge. */\n public get closestEdge(): { startVertexIndex: number, edgeParam: number } {\n return { startVertexIndex: this._detail.closestEdgeIndex, edgeParam: this._detail.closestEdgeParam };\n }\n /** Test validity of fields other than _detail. */\n private get _isValid(): boolean {\n return this._facetIndex >= 0 && this._edgeCount >= 3;\n }\n /** Whether this instance specifies a valid location. */\n public get isValid(): boolean {\n return this._isValid && this._detail.isValid;\n }\n /** Whether the facet is convex. Always returns false, as convexity is unknown to this detail. */\n public get isConvex(): boolean {\n return false;\n }\n /** Whether the point is inside or on the polygon. */\n public get isInsideOrOn(): boolean {\n return this._isValid && this._detail.isInsideOrOn;\n }\n /** Get the code that classifies the location of the point with respect to the facet. */\n public get classify(): PolygonLocation {\n return this._detail.code;\n }\n /** Clone the instance */\n public clone(): NonConvexFacetLocationDetail {\n const detail = new NonConvexFacetLocationDetail();\n detail.copyContentsFrom(this);\n return detail;\n }\n /** Set the instance contents from the other detail.\n * @param other detail to clone\n */\n public copyContentsFrom(other: NonConvexFacetLocationDetail) {\n this._facetIndex = other._facetIndex;\n this._edgeCount = other._edgeCount;\n this._detail.copyContentsFrom(other._detail);\n }\n /** Interpolated data is not defined for a non-convex facet.\n * @returns undefined\n */\n public getNormal(): Vector3d | undefined {\n return undefined;\n }\n /** Interpolated data is not defined for a non-convex facet.\n * @returns undefined\n */\n public getParam(): Point2d | undefined {\n return undefined;\n }\n /** Interpolated data is not defined for a non-convex facet.\n * @returns undefined\n */\n public getColor(): number | undefined {\n return undefined;\n }\n /** Barycentric coordinates are not defined for a non-convex facet.\n * @returns undefined\n */\n public getBarycentricCoordinates(): number[] | undefined {\n return undefined;\n }\n}\n/**\n * Implementation of `FacetLocationDetail` for a convex facet.\n * * If `edgeCount` is 3, `TriangularFacetLocationDetail` is more efficient.\n * @public\n */\nexport class ConvexFacetLocationDetail extends NonConvexFacetLocationDetail {\n private _normal?: Vector3d;\n private _param?: Point2d;\n private _color?: number;\n private _barycentricCoordinates?: number[];\n\n /** captures the detail if provided */\n private constructor(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail) {\n super(facetIndex, edgeCount, detail);\n }\n /** Invalidate this detail. */\n public override invalidate(deep: boolean = true) {\n super.invalidate(deep);\n this._normal = undefined;\n this._param = undefined;\n this._color = undefined;\n this._barycentricCoordinates = undefined;\n }\n /** Create a detail.\n * @param detail optional, copied if given\n * @param result optional pre-allocated object to fill and return\n */\n public static override create(facetIndex: number = -1, edgeCount: number = 0, detail?: PolygonLocationDetail, result?: ConvexFacetLocationDetail): ConvexFacetLocationDetail {\n if (!result)\n result = new ConvexFacetLocationDetail();\n else\n result.invalidate(false); // shallow: detail might be owned by result!\n return super.create(facetIndex, edgeCount, detail, result);\n }\n /** Create a detail, capturing inputs. */\n public static override createCapture(facetIndex: number, edgeCount: number, detail: PolygonLocationDetail): ConvexFacetLocationDetail {\n return new ConvexFacetLocationDetail(facetIndex, edgeCount, detail);\n }\n /** Whether the facet is convex. */\n public override get isConvex(): boolean {\n return true;\n }\n /** Clone the instance */\n public override clone(): ConvexFacetLocationDetail {\n const detail = new ConvexFacetLocationDetail();\n detail.copyContentsFrom(this);\n return detail;\n }\n /** Set the instance contents from the other detail.\n * @param other detail to clone\n */\n public override copyContentsFrom(other: ConvexFacetLocationDetail) {\n super.copyContentsFrom(other);\n this._normal = other._normal?.clone();\n this._param = other._param?.clone();\n this._color = other._color;\n this._barycentricCoordinates = other._barycentricCoordinates?.slice();\n }\n /** Get normal interpolated from facet data.\n * @param facetNormals used to compute the normal cache\n * @param facetVertices used to compute the barycentric coordinate cache\n * @param distanceTolerance used to compute the barycentric coordinate cache\n * @returns reference to cached normal\n */\n public override getNormal(facetNormals?: IndexedXYZCollection, facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): Vector3d | undefined {\n if (this._detail.isValid && undefined === this._normal && undefined !== facetNormals) {\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\n if (undefined !== scales) {\n this._normal = Vector3d.create();\n facetNormals.linearCombination(scales, this._normal);\n }\n }\n return this._normal;\n }\n /** Get uv parameter interpolated from facet data.\n * @param facetParams used to compute the uv parameter cache\n * @param facetVertices used to compute the barycentric coordinate cache\n * @param distanceTolerance used to compute the barycentric coordinate cache\n * @returns reference to cached uv parameter\n */\n public override getParam(facetParams?: IndexedXYCollection, facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): Point2d | undefined {\n if (this._detail.isValid && undefined === this._param && undefined !== facetParams) {\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\n if (undefined !== scales) {\n this._param = Point2d.create();\n facetParams.linearCombination(scales, this._param);\n }\n }\n return this._param;\n }\n /** Get color interpolated from facet data.\n * @param facetColors used to compute the color cache\n * @param facetVertices used to compute the barycentric coordinate cache\n * @param distanceTolerance used to compute the barycentric coordinate cache\n * @returns cached color\n */\n public override getColor(facetColors?: number[], facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): number | undefined {\n if (this._detail.isValid && undefined === this._color && undefined !== facetColors) {\n const scales = this.getBarycentricCoordinates(facetVertices, distanceTolerance);\n if (undefined !== scales)\n this._color = NumberArray.linearCombinationOfColors(facetColors, scales);\n }\n return this._color;\n }\n /** Get the barycentric coordinates of this location, if they have been computed.\n * @param facetVertices used to compute the barycentric coordinate cache\n * @param distanceTolerance used to compute the barycentric coordinate cache\n * @returns cached barycentric coordinates\n */\n public override getBarycentricCoordinates(facetVertices?: IndexedXYZCollection, distanceTolerance: number = Geometry.smallMetricDistance): number[] | undefined {\n if (this._detail.isValid && undefined === this._barycentricCoordinates && undefined !== facetVertices) {\n this._barycentricCoordinates = PolygonOps.convexBarycentricCoordinates(facetVertices, this._detail.point, distanceTolerance);\n }\n return this._barycentricCoordinates;\n }\n}\n"]}
@@ -8,6 +8,9 @@
8
8
  import { SortableEdge } from "./IndexedEdgeMatcher";
9
9
  import { PolyfaceQuery } from "./PolyfaceQuery";
10
10
  class OrientedComponentData {
11
+ numPositive;
12
+ numNegative;
13
+ firstEdgeIndex;
11
14
  constructor(firstEdgeIndex) {
12
15
  this.numPositive = this.numNegative = 0;
13
16
  this.firstEdgeIndex = firstEdgeIndex;
@@ -21,8 +24,15 @@ class OrientedComponentData {
21
24
  }
22
25
  }
23
26
  export class FacetOrientationFixup {
27
+ _edges;
28
+ _edgeToPartnerEdge;
29
+ _edgeToEdgeInComponent;
30
+ _facetToFirstEdgeInComponent;
31
+ _facetOrientation;
32
+ _components;
33
+ _visitor;
34
+ _mesh;
24
35
  constructor(mesh) {
25
- this._workArray = [];
26
36
  this._visitor = mesh.createVisitor(1);
27
37
  this._edges = PolyfaceQuery.createIndexedEdges(this._visitor);
28
38
  this._edgeToPartnerEdge = [];
@@ -93,6 +103,7 @@ export class FacetOrientationFixup {
93
103
  this._components.push(new OrientedComponentData(edgeIndex));
94
104
  this.recordFacetInComponent(facetIndex, 1);
95
105
  }
106
+ _workArray = [];
96
107
  pushFacetEdgesOnStack(seedEdge, stack) {
97
108
  FacetOrientationFixup.extractCyclicIndices(this._edgeToEdgeInComponent, seedEdge, this._workArray);
98
109
  for (const edgeIndex of this._workArray) {
@@ -1 +1 @@
1
- {"version":3,"file":"FacetOrientation.js","sourceRoot":"","sources":["../../../src/polyface/FacetOrientation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\nimport { IndexedEdgeMatcher, SortableEdge } from \"./IndexedEdgeMatcher\";\r\nimport { IndexedPolyface, PolyfaceVisitor } from \"./Polyface\";\r\nimport { PolyfaceQuery } from \"./PolyfaceQuery\";\r\n\r\nclass OrientedComponentData {\r\n public numPositive: number;\r\n public numNegative: number;\r\n public firstEdgeIndex: number;\r\n public constructor(firstEdgeIndex: number) {\r\n this.numPositive = this.numNegative = 0;\r\n this.firstEdgeIndex = firstEdgeIndex;\r\n }\r\n // announce a new facet orientation.\r\n public recordOrientation(orientation: number) {\r\n if (orientation > 0)\r\n this.numPositive++;\r\n else if (orientation < 0)\r\n this.numNegative++;\r\n }\r\n}\r\nexport class FacetOrientationFixup {\r\n private _edges: IndexedEdgeMatcher;\r\n private _edgeToPartnerEdge: number[];\r\n private _edgeToEdgeInComponent: number[];\r\n private _facetToFirstEdgeInComponent: number[];\r\n private _facetOrientation: number[];\r\n private _components: OrientedComponentData[];\r\n private _visitor: PolyfaceVisitor;\r\n private _mesh: IndexedPolyface;\r\n private constructor(mesh: IndexedPolyface) {\r\n this._visitor = mesh.createVisitor(1);\r\n this._edges = PolyfaceQuery.createIndexedEdges(this._visitor);\r\n this._edgeToPartnerEdge = [];\r\n this._edgeToEdgeInComponent = [];\r\n this._facetToFirstEdgeInComponent = [];\r\n this._facetOrientation = [];\r\n this._components = [];\r\n this._mesh = mesh;\r\n }\r\n\r\n private edgeIdToFacetOrientation(edgeId: number): number {\r\n const facetIndex = this._edges.edges[edgeId].facetIndex;\r\n return this._facetOrientation[facetIndex];\r\n }\r\n /**\r\n * RETURN FALSE IF ANY EDGE HAS 3 ORE MORE FACETS\r\n */\r\n private setupUnoriented(): boolean {\r\n this._edges.sort();\r\n const edgeArray = this._edges.edges;\r\n // make each edge a singleton with itself as successor . .\r\n let maxFacetIndex = -1;\r\n const numEdges = this._edges.edges.length;\r\n for (let i = 0; i < numEdges; i++) {\r\n const facetIndex = this._edges.edges[i].facetIndex;\r\n if (facetIndex > maxFacetIndex)\r\n maxFacetIndex = facetIndex;\r\n this._edgeToEdgeInComponent.push(i);\r\n this._edgeToPartnerEdge.push(i);\r\n }\r\n for (let i = 0; i <= maxFacetIndex; i++) {\r\n this._facetToFirstEdgeInComponent.push(-1);\r\n this._facetOrientation.push(0);\r\n }\r\n // make each edge part of a component for only its own facet\r\n // (This component exists only ephemerally -- it is not referenced by true component)\r\n // (swapping entries in the cyclic loops merges loops.)\r\n for (let i = 0; i < numEdges; i++) {\r\n const facetIndex = this._edges.edges[i].facetIndex;\r\n const j = this._facetToFirstEdgeInComponent[facetIndex];\r\n if (j === -1)\r\n this._facetToFirstEdgeInComponent[facetIndex] = i;\r\n else {\r\n FacetOrientationFixup.swapEntries(this._edgeToEdgeInComponent, i, j);\r\n }\r\n }\r\n // make contiguous partner edges cycles in edgeToPartnerEdge.\r\n // edge i is initially always a singleton.\r\n for (let edgeIndex0 = 0; edgeIndex0 < numEdges; edgeIndex0++) {\r\n let edgeIndex1 = edgeIndex0 + 1;\r\n while (edgeIndex1 < numEdges && SortableEdge.areUndirectedPartners(edgeArray[edgeIndex0], edgeArray[edgeIndex1])) {\r\n // splice the loops ...\r\n FacetOrientationFixup.swapEntries(this._edgeToPartnerEdge, edgeIndex0, edgeIndex1);\r\n edgeIndex1++;\r\n }\r\n // BUT .. everything else will fail if more than 2 anywhere .....\r\n if (edgeIndex1 > edgeIndex0 + 2)\r\n return false;\r\n }\r\n return true;\r\n }\r\n private recordFacetInComponent(facetIndex: number, orientation: number) {\r\n const componentData = this._components[this._components.length - 1];\r\n this._facetOrientation[facetIndex] = orientation;\r\n componentData.recordOrientation(orientation);\r\n }\r\n\r\n private initializeComponent(edgeIndex: number) {\r\n const facetIndex = this._edges.edges[edgeIndex].facetIndex;\r\n this._components.push(new OrientedComponentData(edgeIndex));\r\n this.recordFacetInComponent(facetIndex, 1);\r\n }\r\n private _workArray: number[] = [];\r\n\r\n private pushFacetEdgesOnStack(seedEdge: number, stack: number[]) {\r\n FacetOrientationFixup.extractCyclicIndices(this._edgeToEdgeInComponent, seedEdge, this._workArray);\r\n for (const edgeIndex of this._workArray) {\r\n stack.push(edgeIndex);\r\n }\r\n }\r\n /**\r\n * * Run flood search from every possible seed, assigning positive and negative orientations\r\n * * Halt and return false if flood detects Klein bottle effects.\r\n * @return true if flood\r\n */\r\n private doFlood(): boolean {\r\n // Finally time for flood search.\r\n const edgeStack: number[] = [];\r\n const edgeArray = this._edges.edges;\r\n const numEdges = edgeArray.length;\r\n const neighborEdges: number[] = [];\r\n for (let seedEdgeIndex = 0; seedEdgeIndex < numEdges; seedEdgeIndex++) {\r\n if (this.edgeIdToFacetOrientation(seedEdgeIndex) === 0) {\r\n edgeStack.length = 0;\r\n this.initializeComponent(seedEdgeIndex);\r\n this.pushFacetEdgesOnStack(seedEdgeIndex, edgeStack);\r\n // An edge on the stack is part of the current component.\r\n // Its partners may or may not have been visited.\r\n let baseEdgeIndex: number | undefined;\r\n while (undefined !== (baseEdgeIndex = edgeStack.pop())) {\r\n const baseFacet = edgeArray[baseEdgeIndex].facetIndex;\r\n const baseOrientation = this._facetOrientation[baseFacet];\r\n FacetOrientationFixup.extractCyclicIndices(this._edgeToPartnerEdge, baseEdgeIndex, neighborEdges);\r\n for (const neighborEdgeIndex of neighborEdges) {\r\n if (neighborEdgeIndex !== baseEdgeIndex) {\r\n const neighborFacet = edgeArray[neighborEdgeIndex].facetIndex;\r\n const neighborOrientation = this._facetOrientation[neighborFacet];\r\n if (neighborOrientation === 0) {\r\n // first visit to this facet !\r\n // orientations of baseEdge and neighborEdge tell us how to orient it.\r\n const newOrientation = SortableEdge.areDirectedPartners(edgeArray[baseEdgeIndex], edgeArray[neighborEdgeIndex]) ? baseOrientation : -baseOrientation;\r\n this.recordFacetInComponent(neighborFacet, newOrientation);\r\n this.pushFacetEdgesOnStack(neighborEdgeIndex, edgeStack);\r\n FacetOrientationFixup.swapEntries(this._edgeToEdgeInComponent, baseEdgeIndex, neighborEdgeIndex);\r\n } else {\r\n // looking across to an already-visited facet ..\r\n const edgeOrientation = SortableEdge.relativeOrientation(edgeArray[baseEdgeIndex], edgeArray[neighborEdgeIndex]);\r\n if (edgeOrientation * baseOrientation * neighborOrientation > 0)\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // fall through when floods have completed in all components, with no Klein bottle effects\r\n return true;\r\n }\r\n private doFacetReversals(): number {\r\n let numReverse = 0;\r\n for (this._visitor.reset(); this._visitor.moveToNextFacet();) {\r\n const facetIndex = this._visitor.currentReadIndex();\r\n if (this._facetOrientation[facetIndex] < 0) {\r\n numReverse++;\r\n this._mesh.reverseSingleFacet(facetIndex);\r\n }\r\n }\r\n return numReverse;\r\n }\r\n public static doFixup(mesh: IndexedPolyface): boolean {\r\n const context = new FacetOrientationFixup(mesh);\r\n if (!context.setupUnoriented())\r\n return false;\r\n const ok = context.doFlood();\r\n if (ok)\r\n context.doFacetReversals();\r\n return ok;\r\n }\r\n /** swap entries at indices in a number array.\r\n * * indices are not checked for validity.\r\n */\r\n private static swapEntries(data: number[], i: number, j: number) {\r\n const q = data[i];\r\n data[i] = data[j];\r\n data[j] = q;\r\n }\r\n /**\r\n *\r\n * @param data an array of cyclically linked loops.\r\n */\r\n private static extractCyclicIndices(data: number[], index0: number, loopIndices: number[]) {\r\n loopIndices.length = 0;\r\n let i = index0;\r\n do {\r\n loopIndices.push(i);\r\n i = data[i];\r\n } while (i !== index0);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FacetOrientation.js","sourceRoot":"","sources":["../../../src/polyface/FacetOrientation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Polyface\n */\nimport { IndexedEdgeMatcher, SortableEdge } from \"./IndexedEdgeMatcher\";\nimport { IndexedPolyface, PolyfaceVisitor } from \"./Polyface\";\nimport { PolyfaceQuery } from \"./PolyfaceQuery\";\n\nclass OrientedComponentData {\n public numPositive: number;\n public numNegative: number;\n public firstEdgeIndex: number;\n public constructor(firstEdgeIndex: number) {\n this.numPositive = this.numNegative = 0;\n this.firstEdgeIndex = firstEdgeIndex;\n }\n // announce a new facet orientation.\n public recordOrientation(orientation: number) {\n if (orientation > 0)\n this.numPositive++;\n else if (orientation < 0)\n this.numNegative++;\n }\n}\nexport class FacetOrientationFixup {\n private _edges: IndexedEdgeMatcher;\n private _edgeToPartnerEdge: number[];\n private _edgeToEdgeInComponent: number[];\n private _facetToFirstEdgeInComponent: number[];\n private _facetOrientation: number[];\n private _components: OrientedComponentData[];\n private _visitor: PolyfaceVisitor;\n private _mesh: IndexedPolyface;\n private constructor(mesh: IndexedPolyface) {\n this._visitor = mesh.createVisitor(1);\n this._edges = PolyfaceQuery.createIndexedEdges(this._visitor);\n this._edgeToPartnerEdge = [];\n this._edgeToEdgeInComponent = [];\n this._facetToFirstEdgeInComponent = [];\n this._facetOrientation = [];\n this._components = [];\n this._mesh = mesh;\n }\n\n private edgeIdToFacetOrientation(edgeId: number): number {\n const facetIndex = this._edges.edges[edgeId].facetIndex;\n return this._facetOrientation[facetIndex];\n }\n /**\n * RETURN FALSE IF ANY EDGE HAS 3 ORE MORE FACETS\n */\n private setupUnoriented(): boolean {\n this._edges.sort();\n const edgeArray = this._edges.edges;\n // make each edge a singleton with itself as successor . .\n let maxFacetIndex = -1;\n const numEdges = this._edges.edges.length;\n for (let i = 0; i < numEdges; i++) {\n const facetIndex = this._edges.edges[i].facetIndex;\n if (facetIndex > maxFacetIndex)\n maxFacetIndex = facetIndex;\n this._edgeToEdgeInComponent.push(i);\n this._edgeToPartnerEdge.push(i);\n }\n for (let i = 0; i <= maxFacetIndex; i++) {\n this._facetToFirstEdgeInComponent.push(-1);\n this._facetOrientation.push(0);\n }\n // make each edge part of a component for only its own facet\n // (This component exists only ephemerally -- it is not referenced by true component)\n // (swapping entries in the cyclic loops merges loops.)\n for (let i = 0; i < numEdges; i++) {\n const facetIndex = this._edges.edges[i].facetIndex;\n const j = this._facetToFirstEdgeInComponent[facetIndex];\n if (j === -1)\n this._facetToFirstEdgeInComponent[facetIndex] = i;\n else {\n FacetOrientationFixup.swapEntries(this._edgeToEdgeInComponent, i, j);\n }\n }\n // make contiguous partner edges cycles in edgeToPartnerEdge.\n // edge i is initially always a singleton.\n for (let edgeIndex0 = 0; edgeIndex0 < numEdges; edgeIndex0++) {\n let edgeIndex1 = edgeIndex0 + 1;\n while (edgeIndex1 < numEdges && SortableEdge.areUndirectedPartners(edgeArray[edgeIndex0], edgeArray[edgeIndex1])) {\n // splice the loops ...\n FacetOrientationFixup.swapEntries(this._edgeToPartnerEdge, edgeIndex0, edgeIndex1);\n edgeIndex1++;\n }\n // BUT .. everything else will fail if more than 2 anywhere .....\n if (edgeIndex1 > edgeIndex0 + 2)\n return false;\n }\n return true;\n }\n private recordFacetInComponent(facetIndex: number, orientation: number) {\n const componentData = this._components[this._components.length - 1];\n this._facetOrientation[facetIndex] = orientation;\n componentData.recordOrientation(orientation);\n }\n\n private initializeComponent(edgeIndex: number) {\n const facetIndex = this._edges.edges[edgeIndex].facetIndex;\n this._components.push(new OrientedComponentData(edgeIndex));\n this.recordFacetInComponent(facetIndex, 1);\n }\n private _workArray: number[] = [];\n\n private pushFacetEdgesOnStack(seedEdge: number, stack: number[]) {\n FacetOrientationFixup.extractCyclicIndices(this._edgeToEdgeInComponent, seedEdge, this._workArray);\n for (const edgeIndex of this._workArray) {\n stack.push(edgeIndex);\n }\n }\n /**\n * * Run flood search from every possible seed, assigning positive and negative orientations\n * * Halt and return false if flood detects Klein bottle effects.\n * @return true if flood\n */\n private doFlood(): boolean {\n // Finally time for flood search.\n const edgeStack: number[] = [];\n const edgeArray = this._edges.edges;\n const numEdges = edgeArray.length;\n const neighborEdges: number[] = [];\n for (let seedEdgeIndex = 0; seedEdgeIndex < numEdges; seedEdgeIndex++) {\n if (this.edgeIdToFacetOrientation(seedEdgeIndex) === 0) {\n edgeStack.length = 0;\n this.initializeComponent(seedEdgeIndex);\n this.pushFacetEdgesOnStack(seedEdgeIndex, edgeStack);\n // An edge on the stack is part of the current component.\n // Its partners may or may not have been visited.\n let baseEdgeIndex: number | undefined;\n while (undefined !== (baseEdgeIndex = edgeStack.pop())) {\n const baseFacet = edgeArray[baseEdgeIndex].facetIndex;\n const baseOrientation = this._facetOrientation[baseFacet];\n FacetOrientationFixup.extractCyclicIndices(this._edgeToPartnerEdge, baseEdgeIndex, neighborEdges);\n for (const neighborEdgeIndex of neighborEdges) {\n if (neighborEdgeIndex !== baseEdgeIndex) {\n const neighborFacet = edgeArray[neighborEdgeIndex].facetIndex;\n const neighborOrientation = this._facetOrientation[neighborFacet];\n if (neighborOrientation === 0) {\n // first visit to this facet !\n // orientations of baseEdge and neighborEdge tell us how to orient it.\n const newOrientation = SortableEdge.areDirectedPartners(edgeArray[baseEdgeIndex], edgeArray[neighborEdgeIndex]) ? baseOrientation : -baseOrientation;\n this.recordFacetInComponent(neighborFacet, newOrientation);\n this.pushFacetEdgesOnStack(neighborEdgeIndex, edgeStack);\n FacetOrientationFixup.swapEntries(this._edgeToEdgeInComponent, baseEdgeIndex, neighborEdgeIndex);\n } else {\n // looking across to an already-visited facet ..\n const edgeOrientation = SortableEdge.relativeOrientation(edgeArray[baseEdgeIndex], edgeArray[neighborEdgeIndex]);\n if (edgeOrientation * baseOrientation * neighborOrientation > 0)\n return false;\n }\n }\n }\n }\n }\n }\n // fall through when floods have completed in all components, with no Klein bottle effects\n return true;\n }\n private doFacetReversals(): number {\n let numReverse = 0;\n for (this._visitor.reset(); this._visitor.moveToNextFacet();) {\n const facetIndex = this._visitor.currentReadIndex();\n if (this._facetOrientation[facetIndex] < 0) {\n numReverse++;\n this._mesh.reverseSingleFacet(facetIndex);\n }\n }\n return numReverse;\n }\n public static doFixup(mesh: IndexedPolyface): boolean {\n const context = new FacetOrientationFixup(mesh);\n if (!context.setupUnoriented())\n return false;\n const ok = context.doFlood();\n if (ok)\n context.doFacetReversals();\n return ok;\n }\n /** swap entries at indices in a number array.\n * * indices are not checked for validity.\n */\n private static swapEntries(data: number[], i: number, j: number) {\n const q = data[i];\n data[i] = data[j];\n data[j] = q;\n }\n /**\n *\n * @param data an array of cyclically linked loops.\n */\n private static extractCyclicIndices(data: number[], index0: number, loopIndices: number[]) {\n loopIndices.length = 0;\n let i = index0;\n do {\n loopIndices.push(i);\n i = data[i];\n } while (i !== index0);\n }\n}\n"]}
@@ -16,6 +16,7 @@ import { TriangleCandidate } from "./TriangleCandidate";
16
16
  * @internal
17
17
  */
18
18
  export class GreedyTriangulationBetweenLineStrings {
19
+ _vector1;
19
20
  constructor(turnRadians) {
20
21
  this._turnRadians = turnRadians;
21
22
  this._xyzA = Point3d.create();
@@ -26,6 +27,7 @@ export class GreedyTriangulationBetweenLineStrings {
26
27
  this._crossA = Vector3d.create();
27
28
  this._crossB = Vector3d.create();
28
29
  }
30
+ _turnRadians;
29
31
  isForwardVector(candidate, forward, perp) {
30
32
  if (candidate.dotProduct(forward) <= 0.0)
31
33
  return false;
@@ -71,6 +73,14 @@ export class GreedyTriangulationBetweenLineStrings {
71
73
  child.end++;
72
74
  }
73
75
  }
76
+ _triangleA1;
77
+ _triangleB1;
78
+ _triangleA2;
79
+ _triangleB2;
80
+ _triangleA3;
81
+ _triangleB3;
82
+ _bestTriangle;
83
+ _workTriangle;
74
84
  /** evaluate aspect ratios to select heuristically best triangles with given index intervals.
75
85
  * (ASSUME NO DUPLICATES, as in caller.)
76
86
  */
@@ -127,6 +137,12 @@ export class GreedyTriangulationBetweenLineStrings {
127
137
  }
128
138
  }
129
139
  }
140
+ _xyzA;
141
+ _xyzB;
142
+ _forwardA;
143
+ _forwardB;
144
+ _crossA;
145
+ _crossB;
130
146
  /**
131
147
  * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.
132
148
  * @param pointsA
@@ -203,12 +219,12 @@ export class GreedyTriangulationBetweenLineStrings {
203
219
  // catch everything else blindly
204
220
  this.addGreedy(intervalA, intervalB, handler);
205
221
  }
222
+ /** Default angle for considering two vectors to be colinear */
223
+ static defaultNearColinearAngle = Angle.createDegrees(15);
206
224
  static createContext(planarTurnAngle = this.defaultNearColinearAngle) {
207
225
  return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);
208
226
  }
209
227
  }
210
- /** Default angle for considering two vectors to be colinear */
211
- GreedyTriangulationBetweenLineStrings.defaultNearColinearAngle = Angle.createDegrees(15);
212
228
  /**
213
229
  * * If there are no contiguous duplicated points in `data` return `data` unchanged.
214
230
  * * If there are duplicates, compress to a new array.
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH;;;GAGG;AACH,MAAM,OAAO,qCAAqC;IAGhD,YAAoB,WAAmB;QACrC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAIO,eAAe,CACrB,SAAmB,EACnB,OAAiB,EACjB,IAAc;QACd,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG;YACtC,OAAO,KAAK,CAAC;QACf,MAAM,KAAK,GAAG,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY;YAC7C,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACO,YAAY,CAClB,OAA6B,EAC7B,KAAa,EACb,OAA6B,EAC7B,KAAa,EACb,IAAa,EACb,MAAgB,EAChB,QAAkB,EAClB,IAAa,EACb,MAAgB,EAChB,QAAkB;QAClB,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,+BAA+B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrD,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;gBACjF,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IAEf,CAAC;IACD;;;;;;OAMG;IACK,oBAAoB,CAC1B,MAAoC,EACpC,KAAmC,EACnC,QAAgB,EAChB,IAAa,EACb,KAAe,EACf,QAAkB,EAClB,KAAe,EACf,QAAkB;QAClB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAE,gCAAgC;QAChF,OAAO,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;gBACvD,MAAM;YACR,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;gBACvD,MAAM;YACR,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;oBACvD,MAAM;YACV,CAAC;YACD,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAYD;;OAEG;IACK,SAAS,CACf,SAAuC,EACvC,SAAuC,EACvC,OAAgD,EAChD,WAAoB,KAAK;QACzB,SAAS,CAAC,WAAW,EAAE,CAAC;QACxB,SAAS,CAAC,WAAW,EAAE,CAAC;QAExB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAEpD,wCAAwC;YACxC,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5L,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAChM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAEhM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7L,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjM,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACjM,gCAAgC;YAChC,kCAAkC;YAClC,qFAAqF;YACrF,uEAAuE;YACvE,6BAA6B;YAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpH,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACpH,iBAAiB,CAAC,6BAA6B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxF,2HAA2H;YAC3H,2HAA2H;YAE3H,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC9B,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,QAAQ;oBACV,OAAO;YACX,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,IAAI,QAAQ;oBACV,OAAO;YACX,CAAC;QACH,CAAC;QACD,8JAA8J;QAC9J,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChM,gIAAgI;gBAChI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,0IAA0I;QAC1I,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChM,+HAA+H;gBAC/H,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5B,SAAS,CAAC,YAAY,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAQD;;;;;OAKG;IACI,aAAa,CAClB,OAA6B,EAC7B,OAA6B,EAC7B,OAAgD;QAChD,mDAAmD;QACnD,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC;IACD;;;;;OAKG;IACK,eAAe,CACrB,OAA6B,EAC7B,OAA6B,EAC7B,OAAgD;QAChD,MAAM,SAAS,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YACtG,+BAA+B;YAC/B,+BAA+B;YAC/B,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9J,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1I,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1I,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC9C,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAChC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD;;;;;sBAKU;QACZ,CAAC;QACD,gCAAgC;QAChC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAGM,MAAM,CAAC,aAAa,CAAC,kBAAyB,IAAI,CAAC,wBAAwB;QAChF,OAAO,IAAI,qCAAqC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;;AAJD,+DAA+D;AACjD,8DAAwB,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAMnE;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,IAA0B,EAAE,SAAS,GAAG,QAAQ,CAAC,mBAAmB;IACjG,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,IAAI,SAAS,EAAE,CAAC;YACpD,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,aAAa;QAChB,OAAO,IAAI,CAAC;IACd,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAE,GAAG,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;YACxH,EAAE,GAAG,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,oDAAoD;IACpD,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,IAAI,SAAS,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\r\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { TriangleCandidate } from \"./TriangleCandidate\";\r\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n/**\r\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\r\n * @internal\r\n */\r\nexport class GreedyTriangulationBetweenLineStrings {\r\n\r\n private _vector1: Vector3d;\r\n private constructor(turnRadians: number) {\r\n this._turnRadians = turnRadians;\r\n this._xyzA = Point3d.create();\r\n this._xyzB = Point3d.create();\r\n this._forwardA = Vector3d.create();\r\n this._forwardB = Vector3d.create();\r\n this._vector1 = Vector3d.create();\r\n this._crossA = Vector3d.create();\r\n this._crossB = Vector3d.create();\r\n }\r\n\r\n private _turnRadians: number;\r\n\r\n private isForwardVector(\r\n candidate: Vector3d,\r\n forward: Vector3d,\r\n perp: Vector3d): boolean {\r\n if (candidate.dotProduct(forward) <= 0.0)\r\n return false;\r\n const theta = candidate.angleFromPerpendicular(perp);\r\n if (Math.abs(theta.radians) > this._turnRadians)\r\n return false;\r\n return true;\r\n }\r\n private isPlanarBase(\r\n pointsA: IndexedXYZCollection,\r\n baseA: number,\r\n pointsB: IndexedXYZCollection,\r\n baseB: number,\r\n xyzA: Point3d,\r\n crossA: Vector3d,\r\n forwardA: Vector3d,\r\n xyzB: Point3d,\r\n crossB: Vector3d,\r\n forwardB: Vector3d): boolean {\r\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\r\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\r\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\r\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\r\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\r\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\r\n this._vector1.crossProduct(forwardA, crossA);\r\n this._vector1.crossProduct(forwardB, crossB);\r\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\r\n return true;\r\n }\r\n return false;\r\n\r\n }\r\n /**\r\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\r\n * * child interval begins at parent.begin\r\n * * child interval end initializes at trialEnd and grows.\r\n * * child must be predefined by caller\r\n * * Return the accepted interval\r\n */\r\n private advanceToPlanarLimit(\r\n parent: IndexedXYZCollectionInterval,\r\n child: IndexedXYZCollectionInterval,\r\n trialEnd: number,\r\n xyzA: Point3d,\r\n perpA: Vector3d,\r\n forwardA: Vector3d,\r\n perpB: Vector3d,\r\n forwardB: Vector3d) {\r\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\r\n while (child.end < parent.end) {\r\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\r\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\r\n break;\r\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\r\n break;\r\n if (child.end > 0) {\r\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\r\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\r\n break;\r\n }\r\n child.end++;\r\n }\r\n }\r\n\r\n private _triangleA1?: TriangleCandidate;\r\n private _triangleB1?: TriangleCandidate;\r\n\r\n private _triangleA2?: TriangleCandidate;\r\n private _triangleB2?: TriangleCandidate;\r\n\r\n private _triangleA3?: TriangleCandidate;\r\n private _triangleB3?: TriangleCandidate;\r\n private _bestTriangle?: TriangleCandidate;\r\n private _workTriangle?: TriangleCandidate;\r\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\r\n * (ASSUME NO DUPLICATES, as in caller.)\r\n */\r\n private addGreedy(\r\n intervalA: IndexedXYZCollectionInterval,\r\n intervalB: IndexedXYZCollectionInterval,\r\n handler: (triangle: BarycentricTriangle) => void,\r\n addOnly1: boolean = false) {\r\n intervalA.restrictEnd();\r\n intervalB.restrictEnd();\r\n\r\n while (intervalA.length > 1 && intervalB.length > 1) {\r\n\r\n // triangles A1 and B1 are always valid.\r\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\r\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\r\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\r\n\r\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\r\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\r\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\r\n // Look at pairs of 2 triangles.\r\n // (each pair begins with 1 or -1)\r\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\r\n // Choose the pair where that (smaller aspect ratio of two) is largest.\r\n // Advance in that direction.\r\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\r\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\r\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\r\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\r\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\r\n\r\n if (this._bestTriangle.id > 0) {\r\n intervalA.advanceBegin();\r\n handler(this._bestTriangle);\r\n if (addOnly1)\r\n return;\r\n } else {\r\n intervalB.advanceBegin();\r\n handler(this._bestTriangle);\r\n if (addOnly1)\r\n return;\r\n }\r\n }\r\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\r\n if (intervalA.isSingleton) {\r\n while (intervalB.length >= 2) {\r\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\r\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\r\n handler(this._workTriangle);\r\n intervalB.advanceBegin();\r\n }\r\n }\r\n\r\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\r\n if (intervalB.isSingleton) {\r\n while (intervalA.length >= 2) {\r\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\r\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\r\n handler(this._workTriangle);\r\n intervalA.advanceBegin();\r\n }\r\n }\r\n }\r\n\r\n private _xyzA: Point3d;\r\n private _xyzB: Point3d;\r\n private _forwardA: Vector3d;\r\n private _forwardB: Vector3d;\r\n private _crossA: Vector3d;\r\n private _crossB: Vector3d;\r\n /**\r\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\r\n * @param pointsA\r\n * @param pointsB\r\n * @param handler\r\n */\r\n public emitTriangles(\r\n pointsA: IndexedXYZCollection,\r\n pointsB: IndexedXYZCollection,\r\n handler: (triangle: BarycentricTriangle) => void) {\r\n /** Clean up duplicates for the real logic . . . */\r\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\r\n }\r\n /**\r\n * Run triangle logic on inputs with no duplicates.\r\n * @param pointsA\r\n * @param pointsB\r\n * @param handler\r\n */\r\n private emitTrianglesGo(\r\n pointsA: IndexedXYZCollection,\r\n pointsB: IndexedXYZCollection,\r\n handler: (triangle: BarycentricTriangle) => void) {\r\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\r\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\r\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\r\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\r\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\r\n // const lA = intervalA.length;\r\n // const lB = intervalB.length;\r\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\r\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (intervalA.length > 1 && intervalB.length > 1) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler, true);\r\n intervalA.advanceToHead(childA);\r\n intervalB.advanceToHead(childB);\r\n } else if (intervalA.length > 1) {\r\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\r\n childB.setFrom(intervalB);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n } else if (intervalB.length > 1) {\r\n childA.setFrom(intervalA);\r\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\r\n this.addGreedy(childA, childB, handler);\r\n intervalA.advanceToTail(childA);\r\n intervalB.advanceToTail(childB);\r\n }\r\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\r\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\r\n if (intervalA.length > intervalB.length)\r\n intervalA.advanceBegin();\r\n else intervalB.advanceBegin();\r\n } */\r\n }\r\n // catch everything else blindly\r\n this.addGreedy(intervalA, intervalB, handler);\r\n }\r\n /** Default angle for considering two vectors to be colinear */\r\n public static defaultNearColinearAngle = Angle.createDegrees(15);\r\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\r\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\r\n }\r\n}\r\n\r\n/**\r\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\r\n * * If there are duplicates, compress to a new array.\r\n * @param data\r\n * @param tolerance\r\n */\r\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\r\n let hasDuplicates = false;\r\n const n = data.length;\r\n for (let i = 0; i + 1 < n; i++) {\r\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\r\n hasDuplicates = true;\r\n break;\r\n }\r\n }\r\n if (!hasDuplicates)\r\n return data;\r\n const result = new GrowableXYZArray(n);\r\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\r\n let i0 = 0;\r\n for (let i = 1; i < n; i++) {\r\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\r\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\r\n i0 = i;\r\n }\r\n }\r\n /** enforce exact closure if original was closed. */\r\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\r\n result.pop();\r\n result.pushFromGrowableXYZArray(result, 0);\r\n }\r\n return result;\r\n}\r\n"]}
1
+ {"version":3,"file":"GreedyTriangulationBetweenLineStrings.js","sourceRoot":"","sources":["../../../src/polyface/GreedyTriangulationBetweenLineStrings.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { BarycentricTriangle } from \"../geometry3d/BarycentricTriangle\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { IndexedXYZCollectionInterval } from \"../geometry3d/IndexedCollectionInterval\";\nimport { IndexedXYZCollection } from \"../geometry3d/IndexedXYZCollection\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { TriangleCandidate } from \"./TriangleCandidate\";\n\n/** @packageDocumentation\n * @module Polyface\n */\n/**\n * * Context for constructing triangulations between linestrings with dis-similar point counts and distribution.\n * @internal\n */\nexport class GreedyTriangulationBetweenLineStrings {\n\n private _vector1: Vector3d;\n private constructor(turnRadians: number) {\n this._turnRadians = turnRadians;\n this._xyzA = Point3d.create();\n this._xyzB = Point3d.create();\n this._forwardA = Vector3d.create();\n this._forwardB = Vector3d.create();\n this._vector1 = Vector3d.create();\n this._crossA = Vector3d.create();\n this._crossB = Vector3d.create();\n }\n\n private _turnRadians: number;\n\n private isForwardVector(\n candidate: Vector3d,\n forward: Vector3d,\n perp: Vector3d): boolean {\n if (candidate.dotProduct(forward) <= 0.0)\n return false;\n const theta = candidate.angleFromPerpendicular(perp);\n if (Math.abs(theta.radians) > this._turnRadians)\n return false;\n return true;\n }\n private isPlanarBase(\n pointsA: IndexedXYZCollection,\n baseA: number,\n pointsB: IndexedXYZCollection,\n baseB: number,\n xyzA: Point3d,\n crossA: Vector3d,\n forwardA: Vector3d,\n xyzB: Point3d,\n crossB: Vector3d,\n forwardB: Vector3d): boolean {\n if (baseA + 1 < pointsA.length && baseB + 1 < pointsB.length) {\n pointsA.getPoint3dAtUncheckedPointIndex(baseA, xyzA);\n pointsB.getPoint3dAtUncheckedPointIndex(baseB, xyzB);\n pointsA.vectorXYAndZIndex(xyzA, baseA + 1, forwardA);\n pointsB.vectorXYAndZIndex(xyzB, baseB + 1, forwardB);\n Vector3d.createStartEnd(xyzA, xyzB, this._vector1);\n this._vector1.crossProduct(forwardA, crossA);\n this._vector1.crossProduct(forwardB, crossB);\n if (!xyzA.isAlmostEqual(xyzB) && crossA.angleTo(crossB).radians < this._turnRadians)\n return true;\n }\n return false;\n\n }\n /**\n * Starting at start in source, examine points to see how long they are close to being \"in plane\"\n * * child interval begins at parent.begin\n * * child interval end initializes at trialEnd and grows.\n * * child must be predefined by caller\n * * Return the accepted interval\n */\n private advanceToPlanarLimit(\n parent: IndexedXYZCollectionInterval,\n child: IndexedXYZCollectionInterval,\n trialEnd: number,\n xyzA: Point3d,\n perpA: Vector3d,\n forwardA: Vector3d,\n perpB: Vector3d,\n forwardB: Vector3d) {\n child.setFrom(parent, parent.begin, trialEnd); // initialize as empty interval.\n while (child.end < parent.end) {\n child.points.vectorXYAndZIndex(xyzA, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n if (!this.isForwardVector(this._vector1, forwardB, perpB))\n break;\n if (child.end > 0) {\n child.points.vectorIndexIndex(child.end - 1, child.end, this._vector1);\n if (!this.isForwardVector(this._vector1, forwardA, perpA))\n break;\n }\n child.end++;\n }\n }\n\n private _triangleA1?: TriangleCandidate;\n private _triangleB1?: TriangleCandidate;\n\n private _triangleA2?: TriangleCandidate;\n private _triangleB2?: TriangleCandidate;\n\n private _triangleA3?: TriangleCandidate;\n private _triangleB3?: TriangleCandidate;\n private _bestTriangle?: TriangleCandidate;\n private _workTriangle?: TriangleCandidate;\n /** evaluate aspect ratios to select heuristically best triangles with given index intervals.\n * (ASSUME NO DUPLICATES, as in caller.)\n */\n private addGreedy(\n intervalA: IndexedXYZCollectionInterval,\n intervalB: IndexedXYZCollectionInterval,\n handler: (triangle: BarycentricTriangle) => void,\n addOnly1: boolean = false) {\n intervalA.restrictEnd();\n intervalB.restrictEnd();\n\n while (intervalA.length > 1 && intervalB.length > 1) {\n\n // triangles A1 and B1 are always valid.\n this._triangleA1 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 1, this._triangleA1);\n this._triangleA2 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin + 1, intervalA.points, intervalA.begin + 2, intervalB.points, intervalB.begin, 2, this._triangleA2);\n this._triangleA3 = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin + 1, 3, this._triangleA3);\n\n this._triangleB1 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, -1, this._triangleB1);\n this._triangleB2 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 2, intervalB.points, intervalB.begin + 1, intervalA.points, intervalA.begin, -2, this._triangleB2);\n this._triangleB3 = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin + 1, -3, this._triangleB3);\n // Look at pairs of 2 triangles.\n // (each pair begins with 1 or -1)\n // For each pair find the smallest aspect ratio of its two triangles. (Small is bad)\n // Choose the pair where that (smaller aspect ratio of two) is largest.\n // Advance in that direction.\n this._bestTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleA1, this._triangleB3, this._bestTriangle);\n this._workTriangle = TriangleCandidate.copyWithLowerQuality(this._triangleB1, this._triangleA3, this._workTriangle);\n TriangleCandidate.updateIfOtherHasHigherQuality(this._bestTriangle, this._workTriangle);\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleB1, triangleB2));\n // TestTriangle::UpdateIfOtherHasLargerAspectRatio (bestTriangle, TestTriangle::MergeAspectRatio (triangleA1, triangleA2));\n\n if (this._bestTriangle.id > 0) {\n intervalA.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n } else {\n intervalB.advanceBegin();\n handler(this._bestTriangle);\n if (addOnly1)\n return;\n }\n }\n // sweep in trailing points from either side. At least one of intervalA.begin, intervalB.begin is at its limit, so only one of these will execute any bodies.\n if (intervalA.isSingleton) {\n while (intervalB.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalB.points, intervalB.begin + 1, intervalB.points, intervalB.begin, intervalA.points, intervalA.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalB.advanceBegin();\n }\n }\n\n // sweep in trailing points from either side. At least one of baseA, baseB is at its limit, so only one of these will execute any bodies.\n if (intervalB.isSingleton) {\n while (intervalA.length >= 2) {\n this._workTriangle = TriangleCandidate.createFromIndexedXYZ(intervalA.points, intervalA.begin, intervalA.points, intervalA.begin + 1, intervalB.points, intervalB.begin, 0, this._workTriangle);\n // this._workTriangle.scaleFromPointInPlace(this._workTriangle.points[2], 0.95); // crude visualization aid for tracking logic.\n handler(this._workTriangle);\n intervalA.advanceBegin();\n }\n }\n }\n\n private _xyzA: Point3d;\n private _xyzB: Point3d;\n private _forwardA: Vector3d;\n private _forwardB: Vector3d;\n private _crossA: Vector3d;\n private _crossB: Vector3d;\n /**\n * Working from start to finish, emit triangles with heuristic lookahead to get pleasing matching between the linestrings.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n public emitTriangles(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n /** Clean up duplicates for the real logic . . . */\n this.emitTrianglesGo(resolveToNoDuplicates(pointsA), resolveToNoDuplicates(pointsB), handler);\n }\n /**\n * Run triangle logic on inputs with no duplicates.\n * @param pointsA\n * @param pointsB\n * @param handler\n */\n private emitTrianglesGo(\n pointsA: IndexedXYZCollection,\n pointsB: IndexedXYZCollection,\n handler: (triangle: BarycentricTriangle) => void) {\n const intervalA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const intervalB = IndexedXYZCollectionInterval.createComplete(pointsB);\n const childA = IndexedXYZCollectionInterval.createComplete(pointsA);\n const childB = IndexedXYZCollectionInterval.createComplete(pointsB);\n while (intervalA.length > 0 && intervalB.length > 0 && (intervalA.length > 1 || intervalB.length > 1)) {\n // const lA = intervalA.length;\n // const lB = intervalB.length;\n if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n this.advanceToPlanarLimit(intervalA, childA, intervalA.begin + 1, this._xyzA, this._crossA, this._forwardA, this._crossB, this._forwardB);\n this.advanceToPlanarLimit(intervalB, childB, intervalB.begin + 1, this._xyzB, this._crossB, this._forwardB, this._crossA, this._forwardA);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin + 1, pointsB, intervalB.begin, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 1);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (this.isPlanarBase(pointsA, intervalA.begin, pointsB, intervalB.begin + 1, this._xyzA, this._crossA, this._forwardA, this._xyzB, this._crossB, this._forwardB)) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 1);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalA.length > 1 && intervalB.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler, true);\n intervalA.advanceToHead(childA);\n intervalB.advanceToHead(childB);\n } else if (intervalA.length > 1) {\n childA.setFrom(intervalA, intervalA.begin, intervalA.begin + 2);\n childB.setFrom(intervalB);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n } else if (intervalB.length > 1) {\n childA.setFrom(intervalA);\n childB.setFrom(intervalB, intervalB.begin, intervalB.begin + 2);\n this.addGreedy(childA, childB, handler);\n intervalA.advanceToTail(childA);\n intervalB.advanceToTail(childB);\n }\n /* if (intervalA.length >= lA && intervalB.length >= lB) {\n // This should not happen == neither one advanced. Just move ahead in the longer one ..\n if (intervalA.length > intervalB.length)\n intervalA.advanceBegin();\n else intervalB.advanceBegin();\n } */\n }\n // catch everything else blindly\n this.addGreedy(intervalA, intervalB, handler);\n }\n /** Default angle for considering two vectors to be colinear */\n public static defaultNearColinearAngle = Angle.createDegrees(15);\n public static createContext(planarTurnAngle: Angle = this.defaultNearColinearAngle) {\n return new GreedyTriangulationBetweenLineStrings(planarTurnAngle.radians);\n }\n}\n\n/**\n * * If there are no contiguous duplicated points in `data` return `data` unchanged.\n * * If there are duplicates, compress to a new array.\n * @param data\n * @param tolerance\n */\nfunction resolveToNoDuplicates(data: IndexedXYZCollection, tolerance = Geometry.smallMetricDistance): IndexedXYZCollection {\n let hasDuplicates = false;\n const n = data.length;\n for (let i = 0; i + 1 < n; i++) {\n if (data.distanceIndexIndex(i, i + 1)! <= tolerance) {\n hasDuplicates = true;\n break;\n }\n }\n if (!hasDuplicates)\n return data;\n const result = new GrowableXYZArray(n);\n result.pushXYZ(data.getXAtUncheckedPointIndex(0), data.getYAtUncheckedPointIndex(0), data.getZAtUncheckedPointIndex(0));\n let i0 = 0;\n for (let i = 1; i < n; i++) {\n if (data.distanceIndexIndex(i0, i)! > tolerance) {\n result.pushXYZ(data.getXAtUncheckedPointIndex(i), data.getYAtUncheckedPointIndex(i), data.getZAtUncheckedPointIndex(i));\n i0 = i;\n }\n }\n /** enforce exact closure if original was closed. */\n if (data.distanceIndexIndex(0, n - 1)! <= tolerance) {\n result.pop();\n result.pushFromGrowableXYZArray(result, 0);\n }\n return result;\n}\n"]}
@@ -6,35 +6,39 @@
6
6
  * * Fixed entry positions are:
7
7
  * * [0] is start vertex index (in CCW order around its facet)
8
8
  * * [1] is end vertex index (in CCW order around its facet)
9
- * * [2] is facet index.
9
+ * * [2] is facet index (or another number to associate with this edge).
10
10
  */
11
11
  export declare class SortableEdge extends Float64Array {
12
12
  /** Return the vertex index that appears first in the order stored. */
13
13
  get vertexIndexA(): number;
14
14
  /** Return the vertex index that appears second in the order stored. */
15
15
  get vertexIndexB(): number;
16
- /** Return the facet index. */
16
+ /**
17
+ * Return the facet index.
18
+ * * This value is carried along during matching. Typically it is a facet index, but it does not have to be.
19
+ */
17
20
  get facetIndex(): number;
18
- /** return true if vertexIndexA is less than vertexIndexB */
21
+ /** return true if vertexIndexA is less than vertexIndexB. */
19
22
  get isLowHigh(): boolean;
20
- /** Return the vertex index with lower numeric value */
23
+ /** Return the vertex index with lower numeric value. */
21
24
  get lowVertexIndex(): number;
22
- /** Return the vertex index with higher numeric value */
25
+ /** Return the vertex index with higher numeric value. */
23
26
  get highVertexIndex(): number;
24
- /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order */
27
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices in opposite order. */
25
28
  static areDirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
26
- /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order */
29
+ /** Return true if the vertices edgeA and edgeB are the same vertex indices with no consideration of order. */
27
30
  static areUndirectedPartners(edgeA: SortableEdge, edgeB: SortableEdge): boolean;
28
- /** Return numeric relationship of edgeA and edgeB:
29
- * * 1 if they share start and end in the same order
30
- * * -1 if they share start and end in reversed order
31
+ /**
32
+ * Return numeric relationship of edgeA and edgeB:
33
+ * * 1 if they share start and end in the same order.
34
+ * * -1 if they share start and end in reversed order.
31
35
  * * 0 otherwise.
32
36
  */
33
37
  static relativeOrientation(edgeA: SortableEdge, edgeB: SortableEdge): number;
34
38
  get isNullEdge(): boolean;
35
39
  /**
36
- * lexical comparison of two edges.
37
- * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort
40
+ * Lexical comparison of two edges.
41
+ * * If the edges have the same vertex pair (in same or opposite order) they will end up adjacent in a sort.
38
42
  * * If the edges have 0 or 1 shared vertex indices, the one with lowest low comes first.
39
43
  * @param edgeA first edge
40
44
  * @param edgeB second edge
@@ -47,23 +51,25 @@ export declare class SortableEdge extends Float64Array {
47
51
  }
48
52
  export type SortableEdgeCluster = SortableEdge | SortableEdge[];
49
53
  /**
50
- * An IndexedEdgeMatcher carries an array (`edges`) of edges start & end indices for sorting and subsequent analyses (such as testing for closed mesh)
54
+ * An IndexedEdgeMatcher carries an array of edge start & end indices for sorting and subsequent analyses
55
+ * (such as testing for closed mesh).
51
56
  */
52
57
  export declare class IndexedEdgeMatcher {
53
58
  edges: SortableEdge[];
54
59
  constructor();
55
60
  /**
56
- * push a new edge.
57
- * @returns the edge (as emplaced at the back of the sortableEdge array)
61
+ * Push a new edge.
58
62
  * @param vertexA start vertex
59
63
  * @param vertexB end vertex
60
- * @param facetIndex facet index
64
+ * @param facetIndex value to carry along during matching
65
+ * @returns the edge pushed onto the `edges` array
61
66
  */
62
67
  addEdge(vertexA: number, vertexB: number, facetIndex: number): SortableEdge;
63
68
  /**
64
- * Push edges all around a facet, returning to vertexArray[0]
69
+ * Push edges all around a facet, returning to vertexArray[0].
65
70
  * @param vertexArray array of vertex indices around facet
66
- * @param facetIndex
71
+ * @param facetIndex value to carry along during matching
72
+ * @param closeLoop true to add an edge from last to first vertex.
67
73
  */
68
74
  addPath(vertexArray: number[], facetIndex: number, closeLoop?: boolean): void;
69
75
  /** Sort the edge index array. */
@@ -71,16 +77,20 @@ export declare class IndexedEdgeMatcher {
71
77
  /** Create a single or compound SortableEdgeCluster in dest. */
72
78
  private collectSortableEdgeCluster;
73
79
  /**
74
- * sort the edges, and look for three categories of paired edges:
80
+ * Sort the edges, and look for three categories of paired edges:
75
81
  * * caller must allocate all result arrays of interest.
76
82
  * * Any combination of the result arrays may be `undefined`, indicating that category is to be ignored.
77
- * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are merged into the target.
78
- * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array `allOther`, create `const allOther = []` as an empty array and call
83
+ * * Any combination of the result arrays may be aliased as the same target, in which case those to categories are
84
+ * merged into the target.
85
+ * * For instance, to ignore manifold pairs and collect all others (singleton, null, and other) as a single array
86
+ * `allOther`, create `const allOther = []` as an empty array and call
79
87
  * `sortAndCollectClusters (undefined, allOther, allOther, allOther);`
80
- * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior edges adjacent to two facets in opposing directions.
88
+ * @param manifoldPairs optional array to receive pairs of properly mated SortableEdgePairs, i.e. simple interior
89
+ * edges adjacent to two facets in opposing directions.
81
90
  * @param singletons optional array to receive edges that are simple boundary edges.
82
91
  * @param nullEdges optional array to receive arrays of null edges (same start and end vertex)
83
- * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense but not a simple directed pair.
92
+ * @param allOtherClusters optional array to receive arrays in which all the edges are partners in an undirected sense
93
+ * but not a simple directed pair.
84
94
  */
85
95
  sortAndCollectClusters(manifoldPairs: SortableEdgeCluster[] | undefined, singletons?: SortableEdgeCluster[], nullEdges?: SortableEdgeCluster[], allOtherClusters?: SortableEdgeCluster[]): void;
86
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,IAAI,MAAM,CAAoB;IACrD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAAoB;IACrD,+BAA+B;IAC/B,IAAW,UAAU,IAAI,MAAM,CAAoB;IACnD,4DAA4D;IAC5D,IAAW,SAAS,IAAI,OAAO,CAA8B;IAC7D,uDAAuD;IACvD,IAAW,cAAc,IAAI,MAAM,CAAkD;IACrF,wDAAwD;IACxD,IAAW,eAAe,IAAI,MAAM,CAAkD;IACtF,gGAAgG;WAClF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IACpF,6GAA6G;WAC/F,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;OAIG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAAgC;IAChE;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;gBAiBrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMhE,MAAM,IAAI,GAAG;WACN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAO7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;GAEG;AACH,qBAAa,kBAAkB;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;;IAK7B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;OAIG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IASnF,iCAAiC;IAC1B,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAalC;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,EAAE,gBAAgB,CAAC,EAAE,mBAAmB,EAAE;CAyBhM"}
1
+ {"version":3,"file":"IndexedEdgeMatcher.d.ts","sourceRoot":"","sources":["../../../src/polyface/IndexedEdgeMatcher.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,uEAAuE;IACvE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD,wEAAwE;IACxE,IAAW,YAAY,IAAI,MAAM,CAEhC;IACD;;;OAGG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,6DAA6D;IAC7D,IAAW,SAAS,IAAI,OAAO,CAE9B;IACD,wDAAwD;IACxD,IAAW,cAAc,IAAI,MAAM,CAElC;IACD,yDAAyD;IACzD,IAAW,eAAe,IAAI,MAAM,CAEnC;IACD,iGAAiG;WACnF,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGpF,8GAA8G;WAChG,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAGtF;;;;;OAKG;WACW,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMnF,IAAW,UAAU,IAAI,OAAO,CAE/B;IACD;;;;;;OAMG;WACW,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;gBAiBrD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAMhE,MAAM,IAAI,GAAG;WAGN,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,GAAG;WAM7C,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,EAAE;CAM7D;AACD,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC;AAChE;;;GAGG;AACH,qBAAa,kBAAkB;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;;IAK7B;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAKlF;;;;;OAKG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAE,OAAc;IASnF,iCAAiC;IAC1B,IAAI;IAGX,+DAA+D;IAC/D,OAAO,CAAC,0BAA0B;IAYlC;;;;;;;;;;;;;;;OAeG;IACI,sBAAsB,CAC3B,aAAa,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAChD,UAAU,CAAC,EAAE,mBAAmB,EAAE,EAClC,SAAS,CAAC,EAAE,mBAAmB,EAAE,EACjC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GACvC,IAAI;CA0BR"}