@itwin/core-geometry 5.0.0-dev.7 → 5.0.0-dev.72

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 (948) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.js +35 -35
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  9. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  11. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  13. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  15. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  17. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  19. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  20. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  21. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  22. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  23. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  24. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  25. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  26. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  28. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  30. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  32. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  33. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  34. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  35. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  36. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  37. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.js +144 -84
  39. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  40. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  41. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  42. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  43. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  44. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  45. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  46. package/lib/cjs/clipping/ClipPlane.js +10 -1
  47. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  48. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  49. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  50. package/lib/cjs/clipping/ClipUtils.js +5 -1
  51. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  52. package/lib/cjs/clipping/ClipVector.js +11 -8
  53. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  54. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  55. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  56. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  57. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  58. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  59. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  60. package/lib/cjs/core-geometry.d.ts +1 -0
  61. package/lib/cjs/core-geometry.d.ts.map +1 -1
  62. package/lib/cjs/core-geometry.js +1 -0
  63. package/lib/cjs/core-geometry.js.map +1 -1
  64. package/lib/cjs/curve/Arc3d.d.ts +17 -3
  65. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  66. package/lib/cjs/curve/Arc3d.js +49 -20
  67. package/lib/cjs/curve/Arc3d.js.map +1 -1
  68. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  69. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  70. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  71. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  72. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  73. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  74. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  76. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  77. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  78. package/lib/cjs/curve/CurveCollection.js +35 -9
  79. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  80. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  81. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  82. package/lib/cjs/curve/CurveFactory.js +213 -135
  83. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  84. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  85. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  86. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  87. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  88. package/lib/cjs/curve/CurvePrimitive.js +27 -12
  89. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  90. package/lib/cjs/curve/CurveProcessor.js +2 -0
  91. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  92. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  93. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  94. package/lib/cjs/curve/LineSegment3d.js +6 -2
  95. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  96. package/lib/cjs/curve/LineString3d.js +27 -7
  97. package/lib/cjs/curve/LineString3d.js.map +1 -1
  98. package/lib/cjs/curve/Loop.js +12 -4
  99. package/lib/cjs/curve/Loop.js.map +1 -1
  100. package/lib/cjs/curve/OffsetOptions.js +25 -21
  101. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  102. package/lib/cjs/curve/ParityRegion.js +4 -2
  103. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  104. package/lib/cjs/curve/Path.js +2 -2
  105. package/lib/cjs/curve/Path.js.map +1 -1
  106. package/lib/cjs/curve/PointString3d.js +3 -2
  107. package/lib/cjs/curve/PointString3d.js.map +1 -1
  108. package/lib/cjs/curve/ProxyCurve.js +1 -0
  109. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  110. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  111. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  112. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  113. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  114. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  115. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  116. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  117. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  118. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  119. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  120. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  121. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  122. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  123. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  124. package/lib/cjs/curve/RegionOps.js +9 -10
  125. package/lib/cjs/curve/RegionOps.js.map +1 -1
  126. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  127. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  128. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  129. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  130. package/lib/cjs/curve/StrokeOptions.js +23 -6
  131. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  132. package/lib/cjs/curve/UnionRegion.js +4 -2
  133. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  135. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  136. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  137. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  138. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  139. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  140. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  141. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  142. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  143. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  144. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  145. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  146. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  147. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  148. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  149. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  151. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  153. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  154. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  155. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  157. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  159. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  161. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  163. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  165. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  167. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  169. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  170. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  171. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  172. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  173. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  174. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  175. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  176. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  177. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  178. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  179. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  180. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  181. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  182. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  183. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  184. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  185. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  186. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  187. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  188. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  189. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  190. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  191. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  192. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  193. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  194. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  195. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  196. package/lib/cjs/geometry3d/Angle.js +18 -16
  197. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  198. package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -1
  199. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/AngleSweep.js +3 -1
  201. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  202. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  203. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  204. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  205. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  206. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  207. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  208. package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
  209. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  210. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  211. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  212. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  213. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  214. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  215. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  216. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  217. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  218. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  219. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  220. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  221. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  222. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  223. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  224. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  225. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  226. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  227. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  228. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  229. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  230. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  231. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  232. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  233. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  234. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  235. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  236. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  237. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  238. package/lib/cjs/geometry3d/Matrix3d.js +36 -14
  239. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  240. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  241. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  242. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  243. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  244. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  245. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  246. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  247. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  248. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  249. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  250. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  251. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  252. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +6 -6
  253. package/lib/cjs/geometry3d/Point3dVector3d.js +12 -6
  254. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  255. package/lib/cjs/geometry3d/PointHelpers.d.ts +3 -3
  256. package/lib/cjs/geometry3d/PointHelpers.js +8 -8
  257. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  258. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  259. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  260. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  261. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  262. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  263. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  264. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  265. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  266. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  267. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  268. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  269. package/lib/cjs/geometry3d/Range.js +21 -4
  270. package/lib/cjs/geometry3d/Range.js.map +1 -1
  271. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  272. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  273. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  274. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  275. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  276. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  277. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  278. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  279. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  280. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  281. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  282. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  283. package/lib/cjs/geometry3d/Transform.js +3 -0
  284. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  285. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  286. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  287. package/lib/cjs/geometry4d/Map4d.js +2 -0
  288. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  289. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  290. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  291. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  292. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  293. package/lib/cjs/geometry4d/MomentData.js +90 -66
  294. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  295. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  296. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  297. package/lib/cjs/geometry4d/Point4d.js +2 -0
  298. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  299. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  300. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  301. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  302. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  303. package/lib/cjs/numerics/Complex.js +2 -0
  304. package/lib/cjs/numerics/Complex.js.map +1 -1
  305. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  306. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  307. package/lib/cjs/numerics/Newton.js +59 -4
  308. package/lib/cjs/numerics/Newton.js.map +1 -1
  309. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  310. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  311. package/lib/cjs/numerics/PolarData.js +13 -1
  312. package/lib/cjs/numerics/PolarData.js.map +1 -1
  313. package/lib/cjs/numerics/Polynomials.js +64 -26
  314. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  315. package/lib/cjs/numerics/Quadrature.js +26 -20
  316. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  317. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  318. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  319. package/lib/cjs/numerics/UnionFind.js +1 -0
  320. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  321. package/lib/cjs/numerics/UsageSums.js +10 -0
  322. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  323. package/lib/cjs/polyface/AuxData.js +16 -0
  324. package/lib/cjs/polyface/AuxData.js.map +1 -1
  325. package/lib/cjs/polyface/BoxTopology.js +67 -67
  326. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  327. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  328. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  329. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  330. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  331. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  332. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  333. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  334. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  335. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  336. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  337. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  338. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  339. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  340. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  341. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  342. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +11 -2
  343. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  344. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  345. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  346. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  347. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  348. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  349. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  350. package/lib/cjs/polyface/Polyface.js +73 -12
  351. package/lib/cjs/polyface/Polyface.js.map +1 -1
  352. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  353. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  354. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  355. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  356. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  357. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  358. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  359. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  360. package/lib/cjs/polyface/PolyfaceData.js +87 -5
  361. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  362. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  363. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  364. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  365. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  366. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  367. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  368. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  369. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  370. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  371. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  372. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  373. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  374. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  375. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  376. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  377. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  378. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  379. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  380. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  381. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  382. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  383. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  384. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  385. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  386. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  387. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  388. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  389. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  390. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  391. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  392. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  393. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  394. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  395. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  396. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  397. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  398. package/lib/cjs/serialization/BGFBAccessors.js +82 -164
  399. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  400. package/lib/cjs/serialization/BGFBReader.js +22 -22
  401. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  402. package/lib/cjs/serialization/BGFBWriter.js +1 -0
  403. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  404. package/lib/cjs/serialization/DeepCompare.js +17 -17
  405. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  406. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  407. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  408. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  409. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  410. package/lib/cjs/serialization/IModelJsonSchema.d.ts +16 -22
  411. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  412. package/lib/cjs/serialization/IModelJsonSchema.js +4 -5
  413. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  414. package/lib/cjs/solid/Box.js +7 -2
  415. package/lib/cjs/solid/Box.js.map +1 -1
  416. package/lib/cjs/solid/Cone.js +6 -2
  417. package/lib/cjs/solid/Cone.js.map +1 -1
  418. package/lib/cjs/solid/LinearSweep.js +4 -2
  419. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  420. package/lib/cjs/solid/RotationalSweep.js +5 -2
  421. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  422. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  423. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  424. package/lib/cjs/solid/RuledSweep.js +32 -24
  425. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  426. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  427. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  428. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  429. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  430. package/lib/cjs/solid/Sphere.js +4 -2
  431. package/lib/cjs/solid/Sphere.js.map +1 -1
  432. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  433. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  434. package/lib/cjs/solid/SweepContour.js +33 -15
  435. package/lib/cjs/solid/SweepContour.js.map +1 -1
  436. package/lib/cjs/solid/TorusPipe.js +7 -2
  437. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  438. package/lib/cjs/topology/ChainMerge.js +16 -4
  439. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  440. package/lib/cjs/topology/Graph.js +41 -6
  441. package/lib/cjs/topology/Graph.js.map +1 -1
  442. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  443. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  444. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  445. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  446. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  447. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  448. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  449. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  450. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  451. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  452. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  453. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  454. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  455. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  456. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  457. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  458. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  459. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  460. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  461. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  462. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  463. package/lib/cjs/topology/MaskManager.js +3 -0
  464. package/lib/cjs/topology/MaskManager.js.map +1 -1
  465. package/lib/cjs/topology/Merging.js +11 -6
  466. package/lib/cjs/topology/Merging.js.map +1 -1
  467. package/lib/cjs/topology/RegularizeFace.js +22 -0
  468. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  469. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  470. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  471. package/lib/cjs/topology/Triangulation.js +21 -11
  472. package/lib/cjs/topology/Triangulation.js.map +1 -1
  473. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  474. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  475. package/lib/esm/Constant.js +17 -17
  476. package/lib/esm/Constant.js.map +1 -1
  477. package/lib/esm/Geometry.js +35 -35
  478. package/lib/esm/Geometry.js.map +1 -1
  479. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  480. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  481. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  482. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  483. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  484. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  485. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  486. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  487. package/lib/esm/bspline/BSplineCurve.js +249 -181
  488. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  489. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  490. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  491. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  492. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  493. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  494. package/lib/esm/bspline/BSplineSurface.js +22 -2
  495. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  496. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  497. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  498. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  499. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  500. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  501. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  502. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  503. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  504. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  505. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  506. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  507. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  508. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  509. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  510. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  511. package/lib/esm/bspline/KnotVector.js +144 -84
  512. package/lib/esm/bspline/KnotVector.js.map +1 -1
  513. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  514. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  515. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  516. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  517. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  518. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  519. package/lib/esm/clipping/ClipPlane.js +10 -1
  520. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  521. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  522. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  523. package/lib/esm/clipping/ClipUtils.js +5 -1
  524. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  525. package/lib/esm/clipping/ClipVector.js +11 -8
  526. package/lib/esm/clipping/ClipVector.js.map +1 -1
  527. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  528. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  529. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  530. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  531. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  532. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  533. package/lib/esm/core-geometry.d.ts +1 -0
  534. package/lib/esm/core-geometry.d.ts.map +1 -1
  535. package/lib/esm/core-geometry.js +1 -0
  536. package/lib/esm/core-geometry.js.map +1 -1
  537. package/lib/esm/curve/Arc3d.d.ts +17 -3
  538. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  539. package/lib/esm/curve/Arc3d.js +49 -20
  540. package/lib/esm/curve/Arc3d.js.map +1 -1
  541. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  542. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  543. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  544. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  545. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  546. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  547. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  548. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  549. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  550. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  551. package/lib/esm/curve/CurveCollection.js +35 -9
  552. package/lib/esm/curve/CurveCollection.js.map +1 -1
  553. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  554. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  555. package/lib/esm/curve/CurveFactory.js +213 -135
  556. package/lib/esm/curve/CurveFactory.js.map +1 -1
  557. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  558. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  559. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  560. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  561. package/lib/esm/curve/CurvePrimitive.js +27 -12
  562. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  563. package/lib/esm/curve/CurveProcessor.js +2 -0
  564. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  565. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  566. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  567. package/lib/esm/curve/LineSegment3d.js +6 -2
  568. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  569. package/lib/esm/curve/LineString3d.js +27 -7
  570. package/lib/esm/curve/LineString3d.js.map +1 -1
  571. package/lib/esm/curve/Loop.js +12 -4
  572. package/lib/esm/curve/Loop.js.map +1 -1
  573. package/lib/esm/curve/OffsetOptions.js +25 -21
  574. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  575. package/lib/esm/curve/ParityRegion.js +4 -2
  576. package/lib/esm/curve/ParityRegion.js.map +1 -1
  577. package/lib/esm/curve/Path.js +2 -2
  578. package/lib/esm/curve/Path.js.map +1 -1
  579. package/lib/esm/curve/PointString3d.js +3 -2
  580. package/lib/esm/curve/PointString3d.js.map +1 -1
  581. package/lib/esm/curve/ProxyCurve.js +1 -0
  582. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  583. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  584. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  585. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  586. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  587. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  588. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  589. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  590. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  591. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  592. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  593. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  594. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  595. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  596. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  597. package/lib/esm/curve/RegionOps.js +9 -10
  598. package/lib/esm/curve/RegionOps.js.map +1 -1
  599. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  600. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  601. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  602. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  603. package/lib/esm/curve/StrokeOptions.js +23 -6
  604. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  605. package/lib/esm/curve/UnionRegion.js +4 -2
  606. package/lib/esm/curve/UnionRegion.js.map +1 -1
  607. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  608. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  609. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  610. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  611. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  612. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  613. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  614. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  615. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  616. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  617. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  618. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  619. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  620. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  621. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  622. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  623. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  624. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  625. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  626. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  627. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  628. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  629. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  630. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  631. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  632. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  633. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  634. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  635. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  636. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  637. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  638. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  639. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  640. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  641. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  642. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  643. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  644. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  645. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  646. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  647. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  648. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  649. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  650. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  651. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  652. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  653. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  654. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  655. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  656. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  657. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  658. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  659. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  660. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  661. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  662. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  663. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  664. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  665. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  666. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  667. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  668. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  669. package/lib/esm/geometry3d/Angle.js +18 -16
  670. package/lib/esm/geometry3d/Angle.js.map +1 -1
  671. package/lib/esm/geometry3d/AngleSweep.d.ts +1 -1
  672. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  673. package/lib/esm/geometry3d/AngleSweep.js +3 -1
  674. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  675. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  676. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  677. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  678. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  679. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  680. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  681. package/lib/esm/geometry3d/Ellipsoid.js +48 -0
  682. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  683. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  684. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  685. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  686. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  687. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  688. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  689. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  690. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  691. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  692. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  693. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  694. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  695. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  696. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  697. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  698. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  699. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  700. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  701. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  702. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  703. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  704. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  705. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  706. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  707. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  708. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  709. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  710. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  711. package/lib/esm/geometry3d/Matrix3d.js +36 -14
  712. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  713. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  714. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  715. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  716. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  717. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  718. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  719. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  720. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  721. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  722. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  723. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  724. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  725. package/lib/esm/geometry3d/Point3dVector3d.d.ts +6 -6
  726. package/lib/esm/geometry3d/Point3dVector3d.js +12 -6
  727. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  728. package/lib/esm/geometry3d/PointHelpers.d.ts +3 -3
  729. package/lib/esm/geometry3d/PointHelpers.js +8 -8
  730. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  731. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  732. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  733. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  734. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  735. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  736. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  737. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  738. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  739. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  740. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  741. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  742. package/lib/esm/geometry3d/Range.js +21 -4
  743. package/lib/esm/geometry3d/Range.js.map +1 -1
  744. package/lib/esm/geometry3d/Ray2d.js +2 -0
  745. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  746. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  747. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  748. package/lib/esm/geometry3d/Ray3d.js +20 -11
  749. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  750. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  751. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  752. package/lib/esm/geometry3d/Segment1d.js +4 -0
  753. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  754. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  755. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  756. package/lib/esm/geometry3d/Transform.js +3 -0
  757. package/lib/esm/geometry3d/Transform.js.map +1 -1
  758. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  759. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  760. package/lib/esm/geometry4d/Map4d.js +2 -0
  761. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  762. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  763. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  764. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  765. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  766. package/lib/esm/geometry4d/MomentData.js +90 -66
  767. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  768. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  769. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  770. package/lib/esm/geometry4d/Point4d.js +2 -0
  771. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  772. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  773. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  774. package/lib/esm/numerics/ClusterableArray.js +29 -13
  775. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  776. package/lib/esm/numerics/Complex.js +2 -0
  777. package/lib/esm/numerics/Complex.js.map +1 -1
  778. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  779. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  780. package/lib/esm/numerics/Newton.js +59 -4
  781. package/lib/esm/numerics/Newton.js.map +1 -1
  782. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  783. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  784. package/lib/esm/numerics/PolarData.js +13 -1
  785. package/lib/esm/numerics/PolarData.js.map +1 -1
  786. package/lib/esm/numerics/Polynomials.js +64 -26
  787. package/lib/esm/numerics/Polynomials.js.map +1 -1
  788. package/lib/esm/numerics/Quadrature.js +26 -20
  789. package/lib/esm/numerics/Quadrature.js.map +1 -1
  790. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  791. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  792. package/lib/esm/numerics/UnionFind.js +1 -0
  793. package/lib/esm/numerics/UnionFind.js.map +1 -1
  794. package/lib/esm/numerics/UsageSums.js +10 -0
  795. package/lib/esm/numerics/UsageSums.js.map +1 -1
  796. package/lib/esm/polyface/AuxData.js +16 -0
  797. package/lib/esm/polyface/AuxData.js.map +1 -1
  798. package/lib/esm/polyface/BoxTopology.js +67 -67
  799. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  800. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  801. package/lib/esm/polyface/FacetFaceData.js +3 -1
  802. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  803. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  804. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  805. package/lib/esm/polyface/FacetOrientation.js +12 -1
  806. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  807. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  808. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  809. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  810. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  811. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  812. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  813. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  814. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  815. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +11 -2
  816. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  817. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  818. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  819. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  820. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  821. package/lib/esm/polyface/Polyface.d.ts +35 -10
  822. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  823. package/lib/esm/polyface/Polyface.js +73 -12
  824. package/lib/esm/polyface/Polyface.js.map +1 -1
  825. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  826. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  827. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  828. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  829. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  830. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  831. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  832. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  833. package/lib/esm/polyface/PolyfaceData.js +87 -5
  834. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  835. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  836. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  837. package/lib/esm/polyface/RangeLengthData.js +7 -0
  838. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  839. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  840. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  841. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  842. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  843. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  844. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  845. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  846. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  847. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  848. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  849. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  850. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  851. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  852. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  853. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  854. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  855. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  856. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  857. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  858. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  859. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  860. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  861. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  862. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  863. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  864. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  865. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  866. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  867. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  868. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  869. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  870. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  871. package/lib/esm/serialization/BGFBAccessors.js +82 -164
  872. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  873. package/lib/esm/serialization/BGFBReader.js +22 -22
  874. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  875. package/lib/esm/serialization/BGFBWriter.js +1 -0
  876. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  877. package/lib/esm/serialization/DeepCompare.js +17 -17
  878. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  879. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  880. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  881. package/lib/esm/serialization/GeometrySamples.js +113 -112
  882. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  883. package/lib/esm/serialization/IModelJsonSchema.d.ts +16 -22
  884. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  885. package/lib/esm/serialization/IModelJsonSchema.js +4 -5
  886. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  887. package/lib/esm/solid/Box.js +7 -2
  888. package/lib/esm/solid/Box.js.map +1 -1
  889. package/lib/esm/solid/Cone.js +6 -2
  890. package/lib/esm/solid/Cone.js.map +1 -1
  891. package/lib/esm/solid/LinearSweep.js +4 -2
  892. package/lib/esm/solid/LinearSweep.js.map +1 -1
  893. package/lib/esm/solid/RotationalSweep.js +5 -2
  894. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  895. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  896. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  897. package/lib/esm/solid/RuledSweep.js +32 -24
  898. package/lib/esm/solid/RuledSweep.js.map +1 -1
  899. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  900. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  901. package/lib/esm/solid/SolidPrimitive.js +11 -6
  902. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  903. package/lib/esm/solid/Sphere.js +4 -2
  904. package/lib/esm/solid/Sphere.js.map +1 -1
  905. package/lib/esm/solid/SweepContour.d.ts +24 -15
  906. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  907. package/lib/esm/solid/SweepContour.js +33 -15
  908. package/lib/esm/solid/SweepContour.js.map +1 -1
  909. package/lib/esm/solid/TorusPipe.js +7 -2
  910. package/lib/esm/solid/TorusPipe.js.map +1 -1
  911. package/lib/esm/topology/ChainMerge.js +16 -4
  912. package/lib/esm/topology/ChainMerge.js.map +1 -1
  913. package/lib/esm/topology/Graph.js +41 -6
  914. package/lib/esm/topology/Graph.js.map +1 -1
  915. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  916. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  917. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  918. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  919. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  920. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  921. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  922. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  923. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  924. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  925. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  926. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  927. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  928. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  929. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  930. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  931. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  932. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  933. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  934. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  935. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  936. package/lib/esm/topology/MaskManager.js +3 -0
  937. package/lib/esm/topology/MaskManager.js.map +1 -1
  938. package/lib/esm/topology/Merging.js +11 -6
  939. package/lib/esm/topology/Merging.js.map +1 -1
  940. package/lib/esm/topology/RegularizeFace.js +22 -0
  941. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  942. package/lib/esm/topology/SignedDataSummary.js +22 -0
  943. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  944. package/lib/esm/topology/Triangulation.js +21 -11
  945. package/lib/esm/topology/Triangulation.js.map +1 -1
  946. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  947. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  948. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Quadrature.js","sourceRoot":"","sources":["../../../src/numerics/Quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Geometry } from \"../Geometry\";\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\n/** Support class for quadrature -- approximate integrals by summing weighted function values.\r\n * These are filled with x and weight for quadrature between xA and xB\r\n *\r\n * Since quadrature is done in side tight loops, these methods are structured for minimum object\r\n * allocation.\r\n * For methods names setupGauss<N> (where N is a smallish integer), the CALLER creates arrays xMapped and wMapped\r\n * The method installs particular x and weight values.\r\n * @internal\r\n */\r\nexport class Quadrature {\r\n /** x value for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussX1Interval01 = new Float64Array([0.5]);\r\n /** weight for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussW1Interval01 = new Float64Array([1.0]);\r\n\r\n /** x value for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussX2Interval01 = new Float64Array([0.21132486540518708, 0.7886751345948129]);\r\n /** weight for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussW2Interval01 = new Float64Array([0.5, 0.5]);\r\n\r\n /** x value for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussX3Interval01 = new Float64Array([0.1127016653792583, 0.5, 0.8872983346207417]);\r\n /** weight for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussW3Interval01 = new Float64Array([0.2777777777777778, 0.4444444444444444, 0.2777777777777778]);\r\n\r\n /** x value for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussX4Interval01 = new Float64Array([0.06943184420297371, 0.33000947820757187, 0.6699905217924281, 0.9305681557970262]);\r\n /** weight for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussW4Interval01 = new Float64Array([0.17392742256872692, 0.3260725774312731, 0.3260725774312731, 0.17392742256872692]);\r\n\r\n /** x value for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussX5Interval01 = new Float64Array([0.04691007703066802, 0.23076534494715845, 0.5, 0.7692346550528415, 0.9530899229693319]);\r\n /** weight for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussW5Interval01 = new Float64Array([0.11846344252809454, 0.23931433524968324, 0.28444444444444444, 0.23931433524968324, 0.11846344252809454]);\r\n\r\n /**\r\n * Given points and weights in a reference interval (usually 0 to 1):\r\n *\r\n * * map each xRef[i] to xA + h * xRef[i];\r\n * * scale each weight wRef[i] to h * wRef[i]\r\n * * all arrays are assumed to have xRef.length entries.\r\n * * the return value is xRef.length\r\n * @param xA beginning of target interval\r\n * @param h length of target interval\r\n * @param xRef x coordinates in reference interval\r\n * @param wRef weights for integration in the reference interval\r\n * @param xMapped x coordinates to evaluate integrands\r\n * @param wMapped weights for evaluated integrands\r\n */\r\n public static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number {\r\n const n = xRef.length;\r\n for (let i = 0; i < n; i++) {\r\n xMapped[i] = xA + h * xRef[i];\r\n wMapped[i] = h * wRef[i];\r\n }\r\n return n;\r\n }\r\n\r\n /** Install 1 (ONE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX1Interval01, Quadrature.gaussW1Interval01, xMapped, wMapped);\r\n }\r\n\r\n /** Install 2 (TWO) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX2Interval01, Quadrature.gaussW2Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const dx = h / Math.sqrt(3);\r\n xMapped[0] = x0 - dx; xMapped[1] = x0 + dx;\r\n wMapped[0] = wMapped[1] = h;\r\n */\r\n }\r\n /** Install 3 (THREE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX3Interval01, Quadrature.gaussW3Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const a = Math.sqrt(0.6);\r\n const b = h * 5.0 / 9.0;\r\n const dx = a * h;\r\n xMapped[0] = x0 - dx; xMapped[1] = x0; xMapped[2] = x0 + dx;\r\n wMapped[0] = wMapped[2] = b;\r\n wMapped[1] = h * 8.0 / 9.0;\r\n return 3;\r\n */\r\n }\r\n\r\n /** Install 5 (FIVE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX5Interval01, Quadrature.gaussW5Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const q = 2.0 * Math.sqrt(10.0 / 7.0);\r\n const b = 13.0 * Math.sqrt(70.0);\r\n const a1 = h * Math.sqrt(5.0 - q) / 3.0;\r\n const a2 = h * Math.sqrt(5.0 + q) / 3.0;\r\n const w1 = h * (322.0 + b) / 900.0;\r\n const w2 = h * (322.0 - b) / 900;\r\n const w0 = h * 128.0 / 225.0;\r\n xMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0; xMapped[3] = x0 + a1; xMapped[4] = x0 + a2;\r\n wMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w0; wMapped[3] = w1; wMapped[4] = w2;\r\n return 5;\r\n */\r\n }\r\n\r\n /** Install 4 (FOUR) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX4Interval01, Quadrature.gaussW4Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\nconst x0 = 0.5 * (xA + xB);\r\nconst h = 0.5 * (xB - xA);\r\nconst q = 2.0 * Math.sqrt(6.0 / 5.0);\r\nconst r = Math.sqrt(30.0);\r\nconst a1 = h * Math.sqrt((3 - q) / 7.0);\r\nconst w1 = h * (18.0 + r) / 36.0;\r\nconst a2 = h * Math.sqrt((3 + q) / 7.0);\r\nconst w2 = h * (18.0 - r) / 36.0;\r\nxMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0 + a1; xMapped[3] = x0 + a2;\r\nwMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w1; wMapped[3] = w2;\r\nreturn 4;\r\n*/\r\n }\r\n /** Sum function values with given weights and x values. */\r\n public static sum1(\r\n xx: Float64Array,\r\n ww: Float64Array,\r\n n: number,\r\n f: (x: number) => number): number {\r\n let sum = 0;\r\n for (let i = 0; i < n; i++)sum += ww[i] * f(xx[i]);\r\n return sum;\r\n }\r\n /**\r\n * Do a Guass quadrature integral for a (number)=>number function over an interval, with caller specified sub-interval count and\r\n * @param x0 start of overall interval\r\n * @param x1 end of overall interval\r\n * @param f function to evaluate\r\n * @param numInterval number of internal intervals\r\n * @param numGauss number of gauss points. must be supported by GaussMapper, i.e. 1,2,3,4,5\r\n */\r\n public static doGaussIntegral(x0: number, x1: number, f: (x: number) => number, numInterval: number, numGauss: number = 5) {\r\n const mapper = new GaussMapper(numGauss);\r\n if (numInterval < 1)\r\n numInterval = 1;\r\n const df = 1.0 / numInterval;\r\n let sum = 0;\r\n for (let i = 1; i <= numInterval; i++) {\r\n const xA = Geometry.interpolate(x0, (i - 1) * df, x1);\r\n const xB = i === numInterval ? x1 : Geometry.interpolate(x0, (i) * df, x1);\r\n const n = mapper.mapXAndW(xA, xB);\r\n for (let k = 0; k < n; k++) {\r\n sum += mapper.gaussW[k] * f(mapper.gaussX[k]);\r\n }\r\n }\r\n return sum;\r\n }\r\n}\r\n\r\n/**\r\n * This class carries public members as needed for users to have gauss points that are used\r\n * in the callers loops.\r\n * @internal\r\n */\r\nexport class GaussMapper {\r\n /** x values for integration */\r\n public gaussX: Float64Array;\r\n /** weights for integration */\r\n public gaussW: Float64Array;\r\n /** function to be called (at each interval) to map integration values */\r\n public mapXAndWFunction: (xA: number, xB: number, xx: Float64Array, ww: Float64Array) => number;\r\n /** Execute the mapXAndWFunction to set up arrays for integration from xA to xB */\r\n public mapXAndW(xA: number, xB: number): number {\r\n return this.mapXAndWFunction(xA, xB, this.gaussX, this.gaussW);\r\n }\r\n /** setup gauss arrays.\r\n * * Number of gauss points must be 1 to 5 (inclusive)\r\n * @param numGauss requested number of gauss points.\r\n */\r\n public constructor(numGaussPoints: number) {\r\n const maxGauss = 7; // (As of Nov 2 2018, 7 is a fluffy over-allocation-- the quadrature class only handles up to 5.)\r\n this.gaussX = new Float64Array(maxGauss);\r\n this.gaussW = new Float64Array(maxGauss);\r\n // This sets the number of gauss points. This integrates exactly for polynomials of (degree 2*numGauss - 1).\r\n if (numGaussPoints > 5 || numGaussPoints < 1)\r\n numGaussPoints = 5;\r\n switch (numGaussPoints) {\r\n case 1: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss1(xA, xB, xMapped, wMapped); break;\r\n case 2: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss2(xA, xB, xMapped, wMapped); break;\r\n case 3: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss3(xA, xB, xMapped, wMapped); break;\r\n case 4: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss4(xA, xB, xMapped, wMapped); break;\r\n default: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss5(xA, xB, xMapped, wMapped); break;\r\n }\r\n\r\n }\r\n}\r\n// someday .... http://www.holoborodko.com/pavel/numerical-methods/numerical-integration/overlapped-newton-cotes-quadratures/\r\n"]}
1
+ {"version":3,"file":"Quadrature.js","sourceRoot":"","sources":["../../../src/numerics/Quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Geometry } from \"../Geometry\";\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\n/** Support class for quadrature -- approximate integrals by summing weighted function values.\r\n * These are filled with x and weight for quadrature between xA and xB\r\n *\r\n * Since quadrature is done in side tight loops, these methods are structured for minimum object\r\n * allocation.\r\n * For methods names setupGauss<N> (where N is a smallish integer), the CALLER creates arrays xMapped and wMapped\r\n * The method installs particular x and weight values.\r\n * @internal\r\n */\r\nexport class Quadrature {\r\n /** x value for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussX1Interval01 = new Float64Array([0.5]);\r\n /** weight for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussW1Interval01 = new Float64Array([1.0]);\r\n\r\n /** x value for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussX2Interval01 = new Float64Array([0.21132486540518708, 0.7886751345948129]);\r\n /** weight for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussW2Interval01 = new Float64Array([0.5, 0.5]);\r\n\r\n /** x value for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussX3Interval01 = new Float64Array([0.1127016653792583, 0.5, 0.8872983346207417]);\r\n /** weight for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussW3Interval01 = new Float64Array([0.2777777777777778, 0.4444444444444444, 0.2777777777777778]);\r\n\r\n /** x value for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussX4Interval01 = new Float64Array([0.06943184420297371, 0.33000947820757187, 0.6699905217924281, 0.9305681557970262]);\r\n /** weight for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussW4Interval01 = new Float64Array([0.17392742256872692, 0.3260725774312731, 0.3260725774312731, 0.17392742256872692]);\r\n\r\n /** x value for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussX5Interval01 = new Float64Array([0.04691007703066802, 0.23076534494715845, 0.5, 0.7692346550528415, 0.9530899229693319]);\r\n /** weight for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussW5Interval01 = new Float64Array([0.11846344252809454, 0.23931433524968324, 0.28444444444444444, 0.23931433524968324, 0.11846344252809454]);\r\n\r\n /**\r\n * Given points and weights in a reference interval (usually 0 to 1):\r\n *\r\n * * map each xRef[i] to xA + h * xRef[i];\r\n * * scale each weight wRef[i] to h * wRef[i]\r\n * * all arrays are assumed to have xRef.length entries.\r\n * * the return value is xRef.length\r\n * @param xA beginning of target interval\r\n * @param h length of target interval\r\n * @param xRef x coordinates in reference interval\r\n * @param wRef weights for integration in the reference interval\r\n * @param xMapped x coordinates to evaluate integrands\r\n * @param wMapped weights for evaluated integrands\r\n */\r\n public static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number {\r\n const n = xRef.length;\r\n for (let i = 0; i < n; i++) {\r\n xMapped[i] = xA + h * xRef[i];\r\n wMapped[i] = h * wRef[i];\r\n }\r\n return n;\r\n }\r\n\r\n /** Install 1 (ONE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX1Interval01, Quadrature.gaussW1Interval01, xMapped, wMapped);\r\n }\r\n\r\n /** Install 2 (TWO) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX2Interval01, Quadrature.gaussW2Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const dx = h / Math.sqrt(3);\r\n xMapped[0] = x0 - dx; xMapped[1] = x0 + dx;\r\n wMapped[0] = wMapped[1] = h;\r\n */\r\n }\r\n /** Install 3 (THREE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX3Interval01, Quadrature.gaussW3Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const a = Math.sqrt(0.6);\r\n const b = h * 5.0 / 9.0;\r\n const dx = a * h;\r\n xMapped[0] = x0 - dx; xMapped[1] = x0; xMapped[2] = x0 + dx;\r\n wMapped[0] = wMapped[2] = b;\r\n wMapped[1] = h * 8.0 / 9.0;\r\n return 3;\r\n */\r\n }\r\n\r\n /** Install 5 (FIVE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX5Interval01, Quadrature.gaussW5Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const q = 2.0 * Math.sqrt(10.0 / 7.0);\r\n const b = 13.0 * Math.sqrt(70.0);\r\n const a1 = h * Math.sqrt(5.0 - q) / 3.0;\r\n const a2 = h * Math.sqrt(5.0 + q) / 3.0;\r\n const w1 = h * (322.0 + b) / 900.0;\r\n const w2 = h * (322.0 - b) / 900;\r\n const w0 = h * 128.0 / 225.0;\r\n xMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0; xMapped[3] = x0 + a1; xMapped[4] = x0 + a2;\r\n wMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w0; wMapped[3] = w1; wMapped[4] = w2;\r\n return 5;\r\n */\r\n }\r\n\r\n /** Install 4 (FOUR) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX4Interval01, Quadrature.gaussW4Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\nconst x0 = 0.5 * (xA + xB);\r\nconst h = 0.5 * (xB - xA);\r\nconst q = 2.0 * Math.sqrt(6.0 / 5.0);\r\nconst r = Math.sqrt(30.0);\r\nconst a1 = h * Math.sqrt((3 - q) / 7.0);\r\nconst w1 = h * (18.0 + r) / 36.0;\r\nconst a2 = h * Math.sqrt((3 + q) / 7.0);\r\nconst w2 = h * (18.0 - r) / 36.0;\r\nxMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0 + a1; xMapped[3] = x0 + a2;\r\nwMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w1; wMapped[3] = w2;\r\nreturn 4;\r\n*/\r\n }\r\n /** Sum function values with given weights and x values. */\r\n public static sum1(\r\n xx: Float64Array,\r\n ww: Float64Array,\r\n n: number,\r\n f: (x: number) => number): number {\r\n let sum = 0;\r\n for (let i = 0; i < n; i++)sum += ww[i] * f(xx[i]);\r\n return sum;\r\n }\r\n /**\r\n * Do a Guass quadrature integral for a (number)=>number function over an interval, with caller specified sub-interval count and\r\n * @param x0 start of overall interval\r\n * @param x1 end of overall interval\r\n * @param f function to evaluate\r\n * @param numInterval number of internal intervals\r\n * @param numGauss number of gauss points. must be supported by GaussMapper, i.e. 1,2,3,4,5\r\n */\r\n public static doGaussIntegral(x0: number, x1: number, f: (x: number) => number, numInterval: number, numGauss: number = 5) {\r\n const mapper = new GaussMapper(numGauss);\r\n if (numInterval < 1)\r\n numInterval = 1;\r\n const df = 1.0 / numInterval;\r\n let sum = 0;\r\n for (let i = 1; i <= numInterval; i++) {\r\n const xA = Geometry.interpolate(x0, (i - 1) * df, x1);\r\n const xB = i === numInterval ? x1 : Geometry.interpolate(x0, (i) * df, x1);\r\n const n = mapper.mapXAndW(xA, xB);\r\n for (let k = 0; k < n; k++) {\r\n sum += mapper.gaussW[k] * f(mapper.gaussX[k]);\r\n }\r\n }\r\n return sum;\r\n }\r\n}\r\n\r\n/**\r\n * This class carries public members as needed for users to have gauss points that are used\r\n * in the callers loops.\r\n * @internal\r\n */\r\nexport class GaussMapper {\r\n /** x values for integration */\r\n public gaussX: Float64Array;\r\n /** weights for integration */\r\n public gaussW: Float64Array;\r\n /** function to be called (at each interval) to map integration values */\r\n public mapXAndWFunction: (xA: number, xB: number, xx: Float64Array, ww: Float64Array) => number;\r\n /** Execute the mapXAndWFunction to set up arrays for integration from xA to xB */\r\n public mapXAndW(xA: number, xB: number): number {\r\n return this.mapXAndWFunction(xA, xB, this.gaussX, this.gaussW);\r\n }\r\n /** setup gauss arrays.\r\n * * Number of gauss points must be 1 to 5 (inclusive)\r\n * @param numGauss requested number of gauss points.\r\n */\r\n public constructor(numGaussPoints: number) {\r\n const maxGauss = 7; // (As of Nov 2 2018, 7 is a fluffy over-allocation-- the quadrature class only handles up to 5.)\r\n this.gaussX = new Float64Array(maxGauss);\r\n this.gaussW = new Float64Array(maxGauss);\r\n // This sets the number of gauss points. This integrates exactly for polynomials of (degree 2*numGauss - 1).\r\n if (numGaussPoints > 5 || numGaussPoints < 1)\r\n numGaussPoints = 5;\r\n switch (numGaussPoints) {\r\n case 1: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss1(xA, xB, xMapped, wMapped); break;\r\n case 2: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss2(xA, xB, xMapped, wMapped); break;\r\n case 3: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss3(xA, xB, xMapped, wMapped); break;\r\n case 4: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss4(xA, xB, xMapped, wMapped); break;\r\n default: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss5(xA, xB, xMapped, wMapped); break;\r\n }\r\n\r\n }\r\n}\r\n// someday .... http://www.holoborodko.com/pavel/numerical-methods/numerical-integration/overlapped-newton-cotes-quadratures/\r\n"]}
@@ -22,6 +22,17 @@ var DataState;
22
22
  * @internal
23
23
  */
24
24
  class TriDiagonalSystem {
25
+ // Lower diagonal, indexed by rows
26
+ _aLeft;
27
+ // Upper diagonal, indexed by rows
28
+ _aRight;
29
+ // Main diagonal, indexed by rows
30
+ _aDiag;
31
+ // Right side vector
32
+ _b;
33
+ // Solution vector
34
+ _x;
35
+ _dataState;
25
36
  constructor(n) {
26
37
  this._aLeft = new Float64Array(n);
27
38
  this._aDiag = new Float64Array(n);
@@ -1 +1 @@
1
- {"version":3,"file":"TriDiagonalSystem.js","sourceRoot":"","sources":["../../../src/numerics/TriDiagonalSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n// Enumerated type lies outside of TriDiagonalSystem, as TSLint prevented declaration within class\r\nenum DataState {\r\n RawMatrix,\r\n FactorOK,\r\n FactorFailed,\r\n}\r\n/**\r\n * Linear system operations on a matrix with data only on the diagonal and its immediate left and right neighbors\r\n * @internal\r\n */\r\nexport class TriDiagonalSystem {\r\n\r\n // Lower diagonal, indexed by rows\r\n private _aLeft: Float64Array;\r\n // Upper diagonal, indexed by rows\r\n private _aRight: Float64Array;\r\n // Main diagonal, indexed by rows\r\n private _aDiag: Float64Array;\r\n // Right side vector\r\n private _b: Float64Array;\r\n // Solution vector\r\n private _x: Float64Array;\r\n\r\n private _dataState!: DataState;\r\n\r\n constructor(n: number) {\r\n this._aLeft = new Float64Array(n);\r\n this._aDiag = new Float64Array(n);\r\n this._aRight = new Float64Array(n);\r\n this._b = new Float64Array(n);\r\n this._x = new Float64Array(n);\r\n this.reset();\r\n }\r\n\r\n /** Reset to RawMatrix state with all coefficients zero */\r\n public reset() {\r\n this._dataState = DataState.RawMatrix;\r\n const n = this._aDiag.length;\r\n for (let i = 0; i < n; i++) {\r\n this._aLeft[i] = this._aRight[i] = this._aDiag[i] = this._b[i] = this._x[i] = 0.0;\r\n }\r\n }\r\n /** Install data in a row of the matrix */\r\n public setRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] = left;\r\n this._aDiag[row] = diag;\r\n this._aRight[row] = right;\r\n }\r\n /** Add to row of matrix */\r\n public addToRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] += left;\r\n this._aDiag[row] += diag;\r\n this._aRight[row] += right;\r\n }\r\n /** Install data in the right side (B) vector */\r\n public setB(row: number, bb: number) {\r\n this._b[row] = bb;\r\n }\r\n /** Add to an entry in the right side (B) vector */\r\n public addToB(row: number, bb: number) {\r\n this._b[row] += bb;\r\n }\r\n /** Access data from the right side (B) vector */\r\n public getB(row: number): number {\r\n return this._b[row];\r\n }\r\n /** Install data in the solution (X) vector */\r\n public setX(row: number, xx: number) {\r\n this._x[row] = xx;\r\n }\r\n /** Access data from the solution (X) vector */\r\n public getX(row: number): number {\r\n return this._x[row];\r\n }\r\n /** Get method for matrix and vector order */\r\n public order(): number {\r\n return this._aDiag.length;\r\n }\r\n /** Compute product of AX and save as B */\r\n public multiplyAX(): boolean {\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n this._b[i] = this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aDiag[nm1] * this._x[nm1];\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._b[i] += this._aLeft[i] * this._b[i - 1];\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n this._b[0] = this._aDiag[0] * this._x[0] + this._aRight[0] * this._x[1];\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n this._b[i] = this._aLeft[i] * this._x[i - 1] + this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aLeft[nm1] * this._x[n - 2] + this._aDiag[i] * this._x[nm1];\r\n return true;\r\n }\r\n }\r\n\r\n /** Compute product of AX and save as B */\r\n public multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean {\r\n pointB.length = 0;\r\n while (pointB.length < pointX.length)\r\n pointB.push(Point3d.create());\r\n pointB.length = pointX.length;\r\n\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n Point3d.createAdd2Scaled(pointX[i], this._aDiag[i], pointX[i + 1], this._aRight[i], pointB[i]);\r\n }\r\n Point3d.createScale(pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n pointB[i].plusScaled(pointB[i - 1], this._aLeft[i], pointB[i]);\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n Point3d.createAdd2Scaled(pointX[0], this._aDiag[0], pointX[1], this._aRight[0], pointB[0]);\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n Point3d.createAdd3Scaled(\r\n pointX[i - 1], this._aLeft[i], pointX[i], this._aDiag[i],\r\n pointX[i + 1], this._aRight[i],\r\n pointB[i]);\r\n }\r\n Point3d.createAdd2Scaled(pointX[n - 2], this._aLeft[nm1], pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n return true;\r\n }\r\n }\r\n\r\n /** Multiply the stored factors together to return to plain matrix form */\r\n public defactor(): boolean {\r\n if (this._dataState === DataState.RawMatrix) {\r\n return true;\r\n }\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n }\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._aDiag[i] += this._aLeft[i] * this._aRight[i - 1];\r\n this._aLeft[i] *= this._aDiag[i - 1];\r\n }\r\n this._dataState = DataState.RawMatrix;\r\n return true;\r\n }\r\n /** Factor the tridiagonal matrix to LU parts. b, x, not altered */\r\n public factor(): boolean {\r\n if (this._dataState === DataState.FactorOK) {\r\n return true;\r\n }\r\n if (this._dataState !== DataState.RawMatrix) {\r\n return false;\r\n }\r\n this._dataState = DataState.FactorFailed;\r\n\r\n const n1 = this._aDiag.length - 1; // Last pivot index\r\n // Eliminate in subdiagonal.\r\n for (let i = 0; i < n1; i++) {\r\n const r = Geometry.conditionalDivideFraction(this._aLeft[i + 1], this._aDiag[i]);\r\n if (r === undefined)\r\n return false;\r\n this._aLeft[i + 1] = r;\r\n this._aDiag[i + 1] -= r * this._aRight[i];\r\n }\r\n this._dataState = DataState.FactorOK;\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. */\r\n public factorAndBackSubstitute(): boolean {\r\n const n = this._aDiag.length;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n for (let i = 0; i < n; i++) {\r\n this._x[i] = this._b[i];\r\n }\r\n for (let i = 1; i < n; i++) {\r\n this._x[i] -= this._aLeft[i] * this._x[i - 1];\r\n }\r\n\r\n // Print (\"LU L Inverse B B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n this._x[n1] /= this._aDiag[n1];\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n this._x[i] = (this._x[i] - this._aRight[i] * this._x[i + 1]) / this._aDiag[i];\r\n }\r\n\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. vectorB and vectorX may be the same array */\r\n public factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean {\r\n const n = this._aDiag.length;\r\n if (vectorB.length < n)\r\n return false;\r\n\r\n while (vectorX.length < n)\r\n vectorX.push(Point3d.create(0, 0, 0));\r\n vectorX.length = n;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n if (vectorB !== vectorX) {\r\n for (let i = 0; i < n; i++) {\r\n vectorX[i].setFrom(vectorB[i]);\r\n }\r\n }\r\n\r\n let a: number;\r\n let b: number;\r\n for (let i = 1; i < n; i++) {\r\n a = this._aLeft[i];\r\n vectorX[i].x -= a * vectorX[i - 1].x;\r\n vectorX[i].y -= a * vectorX[i - 1].y;\r\n vectorX[i].z -= a * vectorX[i - 1].z;\r\n }\r\n\r\n // Print (\"LU L inverse B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n b = 1.0 / this._aDiag[n1];\r\n vectorX[n1].x *= b;\r\n vectorX[n1].y *= b;\r\n vectorX[n1].z *= b;\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n a = this._aRight[i];\r\n b = 1.0 / this._aDiag[i];\r\n vectorX[i].x = (vectorX[i].x - a * vectorX[i + 1].x) * b;\r\n vectorX[i].y = (vectorX[i].y - a * vectorX[i + 1].y) * b;\r\n vectorX[i].z = (vectorX[i].z - a * vectorX[i + 1].z) * b;\r\n }\r\n\r\n return true;\r\n }\r\n /** Allocate a complete copy */\r\n public copy(): TriDiagonalSystem {\r\n const n = this._aDiag.length;\r\n const B = new TriDiagonalSystem(n);\r\n for (let i = 0; i < n; i++) {\r\n B._aLeft[i] = this._aLeft[i];\r\n B._aDiag[i] = this._aDiag[i];\r\n B._aRight[i] = this._aRight[i];\r\n B._x[i] = this._x[i];\r\n B._b[i] = this._b[i];\r\n }\r\n B._dataState = this._dataState;\r\n return B;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flatten(): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], this._b[i]]);\r\n }\r\n return data;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flattenWithPoints(xyzB: Point3d[]): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], xyzB[i].toJSON()]);\r\n }\r\n return data;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TriDiagonalSystem.js","sourceRoot":"","sources":["../../../src/numerics/TriDiagonalSystem.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAAuC;AACvC,mEAAwD;AAExD,kGAAkG;AAClG,IAAK,SAIJ;AAJD,WAAK,SAAS;IACZ,mDAAS,CAAA;IACT,iDAAQ,CAAA;IACR,yDAAY,CAAA;AACd,CAAC,EAJI,SAAS,KAAT,SAAS,QAIb;AACD;;;GAGG;AACH,MAAa,iBAAiB;IAE5B,kCAAkC;IAC1B,MAAM,CAAe;IAC7B,kCAAkC;IAC1B,OAAO,CAAe;IAC9B,iCAAiC;IACzB,MAAM,CAAe;IAC7B,oBAAoB;IACZ,EAAE,CAAe;IACzB,kBAAkB;IACV,EAAE,CAAe;IAEjB,UAAU,CAAa;IAE/B,YAAY,CAAS;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,0DAA0D;IACnD,KAAK;QACV,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACpF,CAAC;IACH,CAAC;IACD,0CAA0C;IACnC,MAAM,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,KAAa;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,2BAA2B;IACpB,QAAQ,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,KAAa;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IAC7B,CAAC;IACD,gDAAgD;IACzC,IAAI,CAAC,GAAW,EAAE,EAAU;QACjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,mDAAmD;IAC5C,MAAM,CAAC,GAAW,EAAE,EAAU;QACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,iDAAiD;IAC1C,IAAI,CAAC,GAAW;QACrB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,8CAA8C;IACvC,IAAI,CAAC,GAAW,EAAE,EAAU;QACjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,+CAA+C;IACxC,IAAI,CAAC,GAAW;QACrB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,6CAA6C;IACtC,KAAK;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,0CAA0C;IACnC,UAAU;QACf,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChH,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,0CAA0C;IACnC,gBAAgB,CAAC,MAAiB,EAAE,MAAiB;QAC1D,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAClC,MAAM,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE9B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YAElD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,yBAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,yBAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAEhE,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,yBAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,IAAI,CAAC,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzB,yBAAO,CAAC,gBAAgB,CACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EACxD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAC9B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,yBAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACtG,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,0EAA0E;IACnE,QAAQ;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,mEAAmE;IAC5D,MAAM;QACX,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC;QAEzC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAI,mBAAmB;QACzD,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,mBAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,CAAC,KAAK,SAAS;gBACjB,OAAO,KAAK,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4DAA4D;IACrD,uBAAuB;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,KAAK,CAAC;QAEf,wDAAwD;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,+BAA+B;QAC/B,iFAAiF;QACjF,4DAA4D;QAC5D,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IACD,sGAAsG;IAC/F,kCAAkC,CAAC,OAAkB,EAAE,OAAkB;QAC9E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,OAAO,KAAK,CAAC;QAEf,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,yBAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,KAAK,CAAC;QAEf,wDAAwD;QACxD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,6BAA6B;QAC7B,iFAAiF;QACjF,4DAA4D;QAC5D,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+BAA+B;IACxB,IAAI;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,8DAA8D;IACvD,OAAO;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8DAA8D;IACvD,iBAAiB,CAAC,IAAe;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhSD,8CAgSC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n// Enumerated type lies outside of TriDiagonalSystem, as TSLint prevented declaration within class\r\nenum DataState {\r\n RawMatrix,\r\n FactorOK,\r\n FactorFailed,\r\n}\r\n/**\r\n * Linear system operations on a matrix with data only on the diagonal and its immediate left and right neighbors\r\n * @internal\r\n */\r\nexport class TriDiagonalSystem {\r\n\r\n // Lower diagonal, indexed by rows\r\n private _aLeft: Float64Array;\r\n // Upper diagonal, indexed by rows\r\n private _aRight: Float64Array;\r\n // Main diagonal, indexed by rows\r\n private _aDiag: Float64Array;\r\n // Right side vector\r\n private _b: Float64Array;\r\n // Solution vector\r\n private _x: Float64Array;\r\n\r\n private _dataState!: DataState;\r\n\r\n constructor(n: number) {\r\n this._aLeft = new Float64Array(n);\r\n this._aDiag = new Float64Array(n);\r\n this._aRight = new Float64Array(n);\r\n this._b = new Float64Array(n);\r\n this._x = new Float64Array(n);\r\n this.reset();\r\n }\r\n\r\n /** Reset to RawMatrix state with all coefficients zero */\r\n public reset() {\r\n this._dataState = DataState.RawMatrix;\r\n const n = this._aDiag.length;\r\n for (let i = 0; i < n; i++) {\r\n this._aLeft[i] = this._aRight[i] = this._aDiag[i] = this._b[i] = this._x[i] = 0.0;\r\n }\r\n }\r\n /** Install data in a row of the matrix */\r\n public setRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] = left;\r\n this._aDiag[row] = diag;\r\n this._aRight[row] = right;\r\n }\r\n /** Add to row of matrix */\r\n public addToRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] += left;\r\n this._aDiag[row] += diag;\r\n this._aRight[row] += right;\r\n }\r\n /** Install data in the right side (B) vector */\r\n public setB(row: number, bb: number) {\r\n this._b[row] = bb;\r\n }\r\n /** Add to an entry in the right side (B) vector */\r\n public addToB(row: number, bb: number) {\r\n this._b[row] += bb;\r\n }\r\n /** Access data from the right side (B) vector */\r\n public getB(row: number): number {\r\n return this._b[row];\r\n }\r\n /** Install data in the solution (X) vector */\r\n public setX(row: number, xx: number) {\r\n this._x[row] = xx;\r\n }\r\n /** Access data from the solution (X) vector */\r\n public getX(row: number): number {\r\n return this._x[row];\r\n }\r\n /** Get method for matrix and vector order */\r\n public order(): number {\r\n return this._aDiag.length;\r\n }\r\n /** Compute product of AX and save as B */\r\n public multiplyAX(): boolean {\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n this._b[i] = this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aDiag[nm1] * this._x[nm1];\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._b[i] += this._aLeft[i] * this._b[i - 1];\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n this._b[0] = this._aDiag[0] * this._x[0] + this._aRight[0] * this._x[1];\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n this._b[i] = this._aLeft[i] * this._x[i - 1] + this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aLeft[nm1] * this._x[n - 2] + this._aDiag[i] * this._x[nm1];\r\n return true;\r\n }\r\n }\r\n\r\n /** Compute product of AX and save as B */\r\n public multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean {\r\n pointB.length = 0;\r\n while (pointB.length < pointX.length)\r\n pointB.push(Point3d.create());\r\n pointB.length = pointX.length;\r\n\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n Point3d.createAdd2Scaled(pointX[i], this._aDiag[i], pointX[i + 1], this._aRight[i], pointB[i]);\r\n }\r\n Point3d.createScale(pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n pointB[i].plusScaled(pointB[i - 1], this._aLeft[i], pointB[i]);\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n Point3d.createAdd2Scaled(pointX[0], this._aDiag[0], pointX[1], this._aRight[0], pointB[0]);\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n Point3d.createAdd3Scaled(\r\n pointX[i - 1], this._aLeft[i], pointX[i], this._aDiag[i],\r\n pointX[i + 1], this._aRight[i],\r\n pointB[i]);\r\n }\r\n Point3d.createAdd2Scaled(pointX[n - 2], this._aLeft[nm1], pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n return true;\r\n }\r\n }\r\n\r\n /** Multiply the stored factors together to return to plain matrix form */\r\n public defactor(): boolean {\r\n if (this._dataState === DataState.RawMatrix) {\r\n return true;\r\n }\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n }\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._aDiag[i] += this._aLeft[i] * this._aRight[i - 1];\r\n this._aLeft[i] *= this._aDiag[i - 1];\r\n }\r\n this._dataState = DataState.RawMatrix;\r\n return true;\r\n }\r\n /** Factor the tridiagonal matrix to LU parts. b, x, not altered */\r\n public factor(): boolean {\r\n if (this._dataState === DataState.FactorOK) {\r\n return true;\r\n }\r\n if (this._dataState !== DataState.RawMatrix) {\r\n return false;\r\n }\r\n this._dataState = DataState.FactorFailed;\r\n\r\n const n1 = this._aDiag.length - 1; // Last pivot index\r\n // Eliminate in subdiagonal.\r\n for (let i = 0; i < n1; i++) {\r\n const r = Geometry.conditionalDivideFraction(this._aLeft[i + 1], this._aDiag[i]);\r\n if (r === undefined)\r\n return false;\r\n this._aLeft[i + 1] = r;\r\n this._aDiag[i + 1] -= r * this._aRight[i];\r\n }\r\n this._dataState = DataState.FactorOK;\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. */\r\n public factorAndBackSubstitute(): boolean {\r\n const n = this._aDiag.length;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n for (let i = 0; i < n; i++) {\r\n this._x[i] = this._b[i];\r\n }\r\n for (let i = 1; i < n; i++) {\r\n this._x[i] -= this._aLeft[i] * this._x[i - 1];\r\n }\r\n\r\n // Print (\"LU L Inverse B B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n this._x[n1] /= this._aDiag[n1];\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n this._x[i] = (this._x[i] - this._aRight[i] * this._x[i + 1]) / this._aDiag[i];\r\n }\r\n\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. vectorB and vectorX may be the same array */\r\n public factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean {\r\n const n = this._aDiag.length;\r\n if (vectorB.length < n)\r\n return false;\r\n\r\n while (vectorX.length < n)\r\n vectorX.push(Point3d.create(0, 0, 0));\r\n vectorX.length = n;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n if (vectorB !== vectorX) {\r\n for (let i = 0; i < n; i++) {\r\n vectorX[i].setFrom(vectorB[i]);\r\n }\r\n }\r\n\r\n let a: number;\r\n let b: number;\r\n for (let i = 1; i < n; i++) {\r\n a = this._aLeft[i];\r\n vectorX[i].x -= a * vectorX[i - 1].x;\r\n vectorX[i].y -= a * vectorX[i - 1].y;\r\n vectorX[i].z -= a * vectorX[i - 1].z;\r\n }\r\n\r\n // Print (\"LU L inverse B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n b = 1.0 / this._aDiag[n1];\r\n vectorX[n1].x *= b;\r\n vectorX[n1].y *= b;\r\n vectorX[n1].z *= b;\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n a = this._aRight[i];\r\n b = 1.0 / this._aDiag[i];\r\n vectorX[i].x = (vectorX[i].x - a * vectorX[i + 1].x) * b;\r\n vectorX[i].y = (vectorX[i].y - a * vectorX[i + 1].y) * b;\r\n vectorX[i].z = (vectorX[i].z - a * vectorX[i + 1].z) * b;\r\n }\r\n\r\n return true;\r\n }\r\n /** Allocate a complete copy */\r\n public copy(): TriDiagonalSystem {\r\n const n = this._aDiag.length;\r\n const B = new TriDiagonalSystem(n);\r\n for (let i = 0; i < n; i++) {\r\n B._aLeft[i] = this._aLeft[i];\r\n B._aDiag[i] = this._aDiag[i];\r\n B._aRight[i] = this._aRight[i];\r\n B._x[i] = this._x[i];\r\n B._b[i] = this._b[i];\r\n }\r\n B._dataState = this._dataState;\r\n return B;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flatten(): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], this._b[i]]);\r\n }\r\n return data;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flattenWithPoints(xyzB: Point3d[]): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], xyzB[i].toJSON()]);\r\n }\r\n return data;\r\n }\r\n}\r\n"]}
@@ -17,6 +17,7 @@ exports.UnionFindContext = void 0;
17
17
  * @internal
18
18
  */
19
19
  class UnionFindContext {
20
+ _parentArray;
20
21
  /** Create a set initialized with numLeaf singleton subsets */
21
22
  constructor(numLeaf = 0) {
22
23
  this._parentArray = [];
@@ -1 +1 @@
1
- {"version":3,"file":"UnionFind.js","sourceRoot":"","sources":["../../../src/numerics/UnionFind.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Implement the classic UnionFind algorithm, viz https://en.wikipedia.org/wiki/Disjoint-set_data_structure\r\n * * Each of the entities being merged exists as an entry in an array.\r\n * * The index in the array is the (only!) identification of the entity.\r\n * * The array entry is the index of a parent in the merge process.\r\n * * New entries are created as singletons pointing to themselves.\r\n * * Merge (i,j) merges the collections containing entries (i) and (j) into a single collection.\r\n * * The merge process updates the indices \"above\" (i) and (j)\r\n * * The whole process is extraordinarily efficient regardless of the order that the (i,j) merges are announced.\r\n * @internal\r\n */\r\nexport class UnionFindContext {\r\n private _parentArray: number[];\r\n /** Create a set initialized with numLeaf singleton subsets */\r\n public constructor(numLeaf: number = 0) {\r\n this._parentArray = [];\r\n for (let i = 0; i < numLeaf; i++)\r\n this._parentArray.push(i);\r\n }\r\n /** Return the number of leaves. */\r\n public get length(): number { return this._parentArray.length; }\r\n /** test if index is within the valid index range. */\r\n public isValidIndex(index: number): boolean {\r\n return 0 <= index && index < this._parentArray.length;\r\n }\r\n /** Return the index of a new singleton set */\r\n public addLeaf(): number {\r\n const index = this._parentArray.length;\r\n this._parentArray.push(index);\r\n return index;\r\n }\r\n /**\r\n * * follow links to parent\r\n * * after finding the parent, repeat the search and reset parents along the way.\r\n * * If index is invalid, return index unchanged.\r\n * @param index start of search\r\n */\r\n public findRoot(index: number): number {\r\n if (!this.isValidIndex(index))\r\n return index;\r\n let currentIndex = index;\r\n let nextIndex = this._parentArray[index];\r\n while (nextIndex !== currentIndex) {\r\n currentIndex = nextIndex;\r\n nextIndex = this._parentArray[currentIndex];\r\n }\r\n const rootIndex = currentIndex;\r\n // sweep up again and shorten the paths.\r\n currentIndex = index;\r\n while (currentIndex !== rootIndex) {\r\n nextIndex = this._parentArray[currentIndex];\r\n this._parentArray[currentIndex] = rootIndex;\r\n currentIndex = nextIndex;\r\n }\r\n return rootIndex;\r\n }\r\n\r\n /** Merge the subsets containing index (i) and (j)\r\n * * Look up the root of each.\r\n * * Fix up the path to the root so it points to the root.\r\n * * Return the root index of the merged set.\r\n * * If either index is invalid return index i with no changes.\r\n */\r\n public mergeSubsets(i: number, j: number): number {\r\n if (!this.isValidIndex(i) || !this.isValidIndex(j))\r\n return i;\r\n const rootIndexI = this.findRoot(i);\r\n const rootIndexJ = this.findRoot(j);\r\n if (rootIndexI !== rootIndexJ)\r\n this._parentArray[rootIndexI] = rootIndexJ;\r\n // cleanup a little more ...\r\n return this.findRoot(i);\r\n }\r\n /** Return the immediate parent of index (i), with no fixups\r\n * * If index is invalid, return it.\r\n */\r\n public askParent(index: number): number {\r\n if (!this.isValidIndex(index))\r\n return index;\r\n return this._parentArray[index];\r\n }\r\n /** Return the number of entries which are their own parent. */\r\n public countRoots(): number {\r\n let numRoot = 0;\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++)\r\n if (this._parentArray[i] === i)\r\n numRoot++;\r\n return numRoot;\r\n }\r\n /** Return the number of entries whose parent is not a root. */\r\n public countNonTrivialPaths(): number {\r\n let numLong = 0;\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++) {\r\n const j = this._parentArray[i];\r\n if (j !== i && this._parentArray[j] !== j)\r\n numLong++;\r\n }\r\n return numLong;\r\n }\r\n /** Return an array of all root indices.\r\n * * This array is sorted.\r\n */\r\n public collectRootIndices(): number[] {\r\n const roots = [];\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++) {\r\n if (this._parentArray[i] === i)\r\n roots.push(i);\r\n }\r\n return roots;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UnionFind.js","sourceRoot":"","sources":["../../../src/numerics/UnionFind.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * Implement the classic UnionFind algorithm, viz https://en.wikipedia.org/wiki/Disjoint-set_data_structure\r\n * * Each of the entities being merged exists as an entry in an array.\r\n * * The index in the array is the (only!) identification of the entity.\r\n * * The array entry is the index of a parent in the merge process.\r\n * * New entries are created as singletons pointing to themselves.\r\n * * Merge (i,j) merges the collections containing entries (i) and (j) into a single collection.\r\n * * The merge process updates the indices \"above\" (i) and (j)\r\n * * The whole process is extraordinarily efficient regardless of the order that the (i,j) merges are announced.\r\n * @internal\r\n */\r\nexport class UnionFindContext {\r\n private _parentArray: number[];\r\n /** Create a set initialized with numLeaf singleton subsets */\r\n public constructor(numLeaf: number = 0) {\r\n this._parentArray = [];\r\n for (let i = 0; i < numLeaf; i++)\r\n this._parentArray.push(i);\r\n }\r\n /** Return the number of leaves. */\r\n public get length(): number { return this._parentArray.length; }\r\n /** test if index is within the valid index range. */\r\n public isValidIndex(index: number): boolean {\r\n return 0 <= index && index < this._parentArray.length;\r\n }\r\n /** Return the index of a new singleton set */\r\n public addLeaf(): number {\r\n const index = this._parentArray.length;\r\n this._parentArray.push(index);\r\n return index;\r\n }\r\n /**\r\n * * follow links to parent\r\n * * after finding the parent, repeat the search and reset parents along the way.\r\n * * If index is invalid, return index unchanged.\r\n * @param index start of search\r\n */\r\n public findRoot(index: number): number {\r\n if (!this.isValidIndex(index))\r\n return index;\r\n let currentIndex = index;\r\n let nextIndex = this._parentArray[index];\r\n while (nextIndex !== currentIndex) {\r\n currentIndex = nextIndex;\r\n nextIndex = this._parentArray[currentIndex];\r\n }\r\n const rootIndex = currentIndex;\r\n // sweep up again and shorten the paths.\r\n currentIndex = index;\r\n while (currentIndex !== rootIndex) {\r\n nextIndex = this._parentArray[currentIndex];\r\n this._parentArray[currentIndex] = rootIndex;\r\n currentIndex = nextIndex;\r\n }\r\n return rootIndex;\r\n }\r\n\r\n /** Merge the subsets containing index (i) and (j)\r\n * * Look up the root of each.\r\n * * Fix up the path to the root so it points to the root.\r\n * * Return the root index of the merged set.\r\n * * If either index is invalid return index i with no changes.\r\n */\r\n public mergeSubsets(i: number, j: number): number {\r\n if (!this.isValidIndex(i) || !this.isValidIndex(j))\r\n return i;\r\n const rootIndexI = this.findRoot(i);\r\n const rootIndexJ = this.findRoot(j);\r\n if (rootIndexI !== rootIndexJ)\r\n this._parentArray[rootIndexI] = rootIndexJ;\r\n // cleanup a little more ...\r\n return this.findRoot(i);\r\n }\r\n /** Return the immediate parent of index (i), with no fixups\r\n * * If index is invalid, return it.\r\n */\r\n public askParent(index: number): number {\r\n if (!this.isValidIndex(index))\r\n return index;\r\n return this._parentArray[index];\r\n }\r\n /** Return the number of entries which are their own parent. */\r\n public countRoots(): number {\r\n let numRoot = 0;\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++)\r\n if (this._parentArray[i] === i)\r\n numRoot++;\r\n return numRoot;\r\n }\r\n /** Return the number of entries whose parent is not a root. */\r\n public countNonTrivialPaths(): number {\r\n let numLong = 0;\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++) {\r\n const j = this._parentArray[i];\r\n if (j !== i && this._parentArray[j] !== j)\r\n numLong++;\r\n }\r\n return numLong;\r\n }\r\n /** Return an array of all root indices.\r\n * * This array is sorted.\r\n */\r\n public collectRootIndices(): number[] {\r\n const roots = [];\r\n const numLeaf = this._parentArray.length;\r\n for (let i = 0; i < numLeaf; i++) {\r\n if (this._parentArray[i] === i)\r\n roots.push(i);\r\n }\r\n return roots;\r\n }\r\n}\r\n"]}
@@ -31,6 +31,16 @@ const Range_1 = require("../geometry3d/Range");
31
31
  * @internal
32
32
  */
33
33
  class UsageSums {
34
+ /** number of values accumulated. */
35
+ _count;
36
+ /** Sum of values sent to `accumulate` (with origin subtracted away) */
37
+ _sumX;
38
+ _sumXX;
39
+ _minMax;
40
+ /** working origin.
41
+ * * All other values -- sum0, sum1, sum2, min,max -- are "from this origin"
42
+ */
43
+ _origin;
34
44
  /** Constructor:
35
45
  * * All sums 0
36
46
  * * min and max set to extreme values.
@@ -1 +1 @@
1
- {"version":3,"file":"UsageSums.js","sourceRoot":"","sources":["../../../src/numerics/UsageSums.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\n\r\n/**\r\n * Accumulator for computing average and standard deviations.\r\n * * Usual usage pattern:\r\n * * create with `sums = new UsageSums ()`\r\n * * announce data values with any combination of\r\n * * `sums.accumulate (x: number)`\r\n * * `sums.accumulateArray (data: numberArray)`\r\n * * query properties at any time:\r\n * * `sums.mean`\r\n * * `sums.count`\r\n * * `sums.meanSquare`\r\n * * `sums.standardDeviation`\r\n * * `sums.minMax`\r\n * * Optional `origin`\r\n * * if `origin` is nonzero:\r\n * * when a value `x` is announced to the `accumulate(x)` method, the value used for sums is `(x-origin)`\r\n * * All queries (mean, minMax, meanSquare, standardDeviation) return values relative to the origin.\r\n * * The origin can be reset in two different ways:\r\n * * `setOrigin(a)` sets the saved origin value to `a`, but leaves sums unchanged.\r\n * * This affects subsequence how sums are changed by `announce(x)`\r\n * * `shiftOriginAndSums` sets the origin (like `sums.setOrigin (a))` and also corrects all sums and minMax so they appear that the new origin had been in effect during all prior `accumulate(x)` calls.\r\n * @internal\r\n */\r\nexport class UsageSums {\r\n /** number of values accumulated. */\r\n private _count: number;\r\n /** Sum of values sent to `accumulate` (with origin subtracted away) */\r\n private _sumX: number;\r\n private _sumXX: number;\r\n private _minMax: Range1d;\r\n /** working origin.\r\n * * All other values -- sum0, sum1, sum2, min,max -- are \"from this origin\"\r\n */\r\n private _origin: number;\r\n\r\n /** Constructor:\r\n * * All sums 0\r\n * * min and max set to extreme values.\r\n * * origin assigned.\r\n */\r\n public constructor(origin: number = 0) {\r\n this._minMax = Range1d.createNull();\r\n this._count = this._sumX = this._sumXX = 0;\r\n this._origin = origin;\r\n }\r\n /** Return the number of samples seen */\r\n public get count(): number { return this._count; }\r\n /** return the mean of all samples.\r\n * * Return 0 if no samples\r\n */\r\n public get mean(): number { return this._count > 0 ? this._sumX / this._count : 0.0; }\r\n /** Return the mean of squared samples.\r\n * * Return 0 if no samples.\r\n */\r\n public get meanSquare(): number { return this._count > 0 ? this._sumXX / this._count : 0.0; }\r\n public get minMax(): Range1d { return this._minMax.clone(); }\r\n\r\n /**\r\n * Return the \"biased standard deviation\" (https://en.wikipedia.org/wiki/Standard_deviation)\r\n * * This is zero if count is zero.\r\n */\r\n public get standardDeviation(): number {\r\n if (this._count < 1)\r\n return 0.0;\r\n const xBar = this.mean;\r\n const sumXX = this._sumXX;\r\n const sumX = this._sumX;\r\n return Math.sqrt((sumXX - 2 * xBar * sumX + this._count * xBar * xBar) / this._count);\r\n }\r\n /** Reinitialize all sums.\r\n * * origin is unchanged\r\n */\r\n public clearSums() {\r\n this._count = this._sumX = this._sumXX = 0;\r\n this._minMax.setNull();\r\n }\r\n /**\r\n * return the origin being used in the `accumulate(x)` method.\r\n */\r\n public get origin(): number { return this._origin; }\r\n /**\r\n * Reset the origin.\r\n * * Former sums are unchanged !!\r\n * @param origin new origin\r\n */\r\n public setOrigin(origin: number) {\r\n this._origin = origin;\r\n }\r\n /**\r\n * * reset the origin\r\n * * adjust all sums to what they would be if the new origin had been in effect.\r\n */\r\n public shiftOriginAndSums(origin: number) {\r\n const delta = origin - this._origin;\r\n this._origin = origin;\r\n // adjust sumXX first to get old sumX value before it is modified.\r\n this._sumXX = this._sumXX - 2 * delta * this._sumX + this._count * delta * delta;\r\n this._sumX = this._sumX - this._count * delta;\r\n this._minMax.cloneTranslated(-delta, this._minMax);\r\n }\r\n /** Accumulate a single value */\r\n public accumulate(x: number) {\r\n x = x - this._origin;\r\n this._count += 1;\r\n this._sumX += x;\r\n this._sumXX += x * x;\r\n this._minMax.extendX(x);\r\n }\r\n /** Accumulate a single value */\r\n public accumulateArray(xArray: number[]) {\r\n for (const x of xArray)\r\n this.accumulate(x);\r\n }\r\n /** Clone all content (origin, count, sums, minMax) */\r\n public clone(result?: UsageSums): UsageSums {\r\n if (!result)\r\n result = new UsageSums();\r\n this._minMax.clone(result._minMax);\r\n result._count = this._count;\r\n result._origin = this._origin;\r\n result._sumX = this._sumX;\r\n result._sumXX = this._sumXX;\r\n return result;\r\n }\r\n /** Compare all content. */\r\n public isAlmostEqual(other: UsageSums): boolean {\r\n return Geometry.isAlmostEqualNumber(this._sumX, other._sumX)\r\n && Geometry.isAlmostEqualNumber(this._sumXX, other._sumXX)\r\n && Geometry.isAlmostEqualNumber(this._origin, other._origin)\r\n && this._count === other._count\r\n && this._minMax.isAlmostEqual(other._minMax);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UsageSums.js","sourceRoot":"","sources":["../../../src/numerics/UsageSums.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\n\r\n/**\r\n * Accumulator for computing average and standard deviations.\r\n * * Usual usage pattern:\r\n * * create with `sums = new UsageSums ()`\r\n * * announce data values with any combination of\r\n * * `sums.accumulate (x: number)`\r\n * * `sums.accumulateArray (data: numberArray)`\r\n * * query properties at any time:\r\n * * `sums.mean`\r\n * * `sums.count`\r\n * * `sums.meanSquare`\r\n * * `sums.standardDeviation`\r\n * * `sums.minMax`\r\n * * Optional `origin`\r\n * * if `origin` is nonzero:\r\n * * when a value `x` is announced to the `accumulate(x)` method, the value used for sums is `(x-origin)`\r\n * * All queries (mean, minMax, meanSquare, standardDeviation) return values relative to the origin.\r\n * * The origin can be reset in two different ways:\r\n * * `setOrigin(a)` sets the saved origin value to `a`, but leaves sums unchanged.\r\n * * This affects subsequence how sums are changed by `announce(x)`\r\n * * `shiftOriginAndSums` sets the origin (like `sums.setOrigin (a))` and also corrects all sums and minMax so they appear that the new origin had been in effect during all prior `accumulate(x)` calls.\r\n * @internal\r\n */\r\nexport class UsageSums {\r\n /** number of values accumulated. */\r\n private _count: number;\r\n /** Sum of values sent to `accumulate` (with origin subtracted away) */\r\n private _sumX: number;\r\n private _sumXX: number;\r\n private _minMax: Range1d;\r\n /** working origin.\r\n * * All other values -- sum0, sum1, sum2, min,max -- are \"from this origin\"\r\n */\r\n private _origin: number;\r\n\r\n /** Constructor:\r\n * * All sums 0\r\n * * min and max set to extreme values.\r\n * * origin assigned.\r\n */\r\n public constructor(origin: number = 0) {\r\n this._minMax = Range1d.createNull();\r\n this._count = this._sumX = this._sumXX = 0;\r\n this._origin = origin;\r\n }\r\n /** Return the number of samples seen */\r\n public get count(): number { return this._count; }\r\n /** return the mean of all samples.\r\n * * Return 0 if no samples\r\n */\r\n public get mean(): number { return this._count > 0 ? this._sumX / this._count : 0.0; }\r\n /** Return the mean of squared samples.\r\n * * Return 0 if no samples.\r\n */\r\n public get meanSquare(): number { return this._count > 0 ? this._sumXX / this._count : 0.0; }\r\n public get minMax(): Range1d { return this._minMax.clone(); }\r\n\r\n /**\r\n * Return the \"biased standard deviation\" (https://en.wikipedia.org/wiki/Standard_deviation)\r\n * * This is zero if count is zero.\r\n */\r\n public get standardDeviation(): number {\r\n if (this._count < 1)\r\n return 0.0;\r\n const xBar = this.mean;\r\n const sumXX = this._sumXX;\r\n const sumX = this._sumX;\r\n return Math.sqrt((sumXX - 2 * xBar * sumX + this._count * xBar * xBar) / this._count);\r\n }\r\n /** Reinitialize all sums.\r\n * * origin is unchanged\r\n */\r\n public clearSums() {\r\n this._count = this._sumX = this._sumXX = 0;\r\n this._minMax.setNull();\r\n }\r\n /**\r\n * return the origin being used in the `accumulate(x)` method.\r\n */\r\n public get origin(): number { return this._origin; }\r\n /**\r\n * Reset the origin.\r\n * * Former sums are unchanged !!\r\n * @param origin new origin\r\n */\r\n public setOrigin(origin: number) {\r\n this._origin = origin;\r\n }\r\n /**\r\n * * reset the origin\r\n * * adjust all sums to what they would be if the new origin had been in effect.\r\n */\r\n public shiftOriginAndSums(origin: number) {\r\n const delta = origin - this._origin;\r\n this._origin = origin;\r\n // adjust sumXX first to get old sumX value before it is modified.\r\n this._sumXX = this._sumXX - 2 * delta * this._sumX + this._count * delta * delta;\r\n this._sumX = this._sumX - this._count * delta;\r\n this._minMax.cloneTranslated(-delta, this._minMax);\r\n }\r\n /** Accumulate a single value */\r\n public accumulate(x: number) {\r\n x = x - this._origin;\r\n this._count += 1;\r\n this._sumX += x;\r\n this._sumXX += x * x;\r\n this._minMax.extendX(x);\r\n }\r\n /** Accumulate a single value */\r\n public accumulateArray(xArray: number[]) {\r\n for (const x of xArray)\r\n this.accumulate(x);\r\n }\r\n /** Clone all content (origin, count, sums, minMax) */\r\n public clone(result?: UsageSums): UsageSums {\r\n if (!result)\r\n result = new UsageSums();\r\n this._minMax.clone(result._minMax);\r\n result._count = this._count;\r\n result._origin = this._origin;\r\n result._sumX = this._sumX;\r\n result._sumXX = this._sumXX;\r\n return result;\r\n }\r\n /** Compare all content. */\r\n public isAlmostEqual(other: UsageSums): boolean {\r\n return Geometry.isAlmostEqualNumber(this._sumX, other._sumX)\r\n && Geometry.isAlmostEqualNumber(this._sumXX, other._sumXX)\r\n && Geometry.isAlmostEqualNumber(this._origin, other._origin)\r\n && this._count === other._count\r\n && this._minMax.isAlmostEqual(other._minMax);\r\n }\r\n}\r\n"]}
@@ -36,6 +36,10 @@ var AuxChannelDataType;
36
36
  * @public
37
37
  */
38
38
  class AuxChannelData {
39
+ /** The input value for this data. */
40
+ input;
41
+ /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */
42
+ values;
39
43
  /** Constructor. If `values` is a number array, it is captured. */
40
44
  constructor(input, values) {
41
45
  this.input = input;
@@ -69,6 +73,14 @@ exports.AuxChannelData = AuxChannelData;
69
73
  * @public
70
74
  */
71
75
  class AuxChannel {
76
+ /** An array of [[AuxChannelData]] that represents the vertex data at one or more input values. */
77
+ data;
78
+ /** The type of data stored in this channel. */
79
+ dataType;
80
+ /** The channel name. This is used to present the [[AuxChannel]] to the user and also to select the [[AuxChannel]] for display from AnalysisStyle */
81
+ name;
82
+ /** The input name. */
83
+ inputName;
72
84
  /** Constructor with CAPTURED inputs. */
73
85
  constructor(data, dataType, name, inputName) {
74
86
  this.data = data;
@@ -155,6 +167,10 @@ exports.AuxChannel = AuxChannel;
155
167
  * @public
156
168
  */
157
169
  class PolyfaceAuxData {
170
+ /** Array with one or more channels of auxiliary data for the associated polyface. */
171
+ channels;
172
+ /** The indices (shared by all data in all channels) mapping the data to the mesh facets. */
173
+ indices;
158
174
  /** Constructor with CAPTURED inputs. */
159
175
  constructor(channels, indices) {
160
176
  this.channels = channels;
@@ -1 +1 @@
1
- {"version":3,"file":"AuxData.js","sourceRoot":"","sources":["../../../src/polyface/AuxData.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n// import { Geometry } from \"./Geometry\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\n\r\n/** The types of data that can be represented by an [[AuxChannelData]]. Each type of data contributes differently to the\r\n * animation applied by an [AnalysisStyle]($common) and responds differently when the host [[PolyfaceAuxData]] is transformed.\r\n * @public\r\n */\r\nexport enum AuxChannelDataType {\r\n /** General-purpose scalar values like stress, temperature, etc., used to recolor the [[Polyface]]'s vertices.\r\n * When the host Polyface is transformed, scalar values remain unmodified.\r\n */\r\n Scalar = 0,\r\n /** Distances in meters used to recolor the [[Polyface]]'s vertices.\r\n * When the host [[Polyface]] is transformed the [[Transform]]'s scale is applied to the distances.\r\n */\r\n Distance = 1,\r\n /** (X, Y, Z) displacement vectors added to the [[Polyface]]'s vertex positions resulting in deformation of the mesh.\r\n * When the host Polyface is transformed the displacements are rotated and scaled accordingly.\r\n */\r\n Vector = 2,\r\n /** (X, Y, Z) unit normal vectors that replace the host [[Polyface]]'s own normals.\r\n * When the Polyface is transformed the normals are rotated and renormalized accordingly.\r\n */\r\n Normal = 3,\r\n}\r\n\r\n/** Represents the [[AuxChannel]] data at a single input value.\r\n * @public\r\n*/\r\nexport class AuxChannelData {\r\n /** The input value for this data. */\r\n public input: number;\r\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\r\n public values: number[];\r\n\r\n /** Constructor. If `values` is a number array, it is captured. */\r\n constructor(input: number, values: number[] | Float64Array) {\r\n this.input = input;\r\n if (values instanceof Float64Array) {\r\n this.values = [];\r\n for (const v of values) this.values.push(v);\r\n } else\r\n this.values = values;\r\n }\r\n\r\n /** Copy blocks of size `blockSize` from (blocked index) `thisIndex` in this AuxChannelData to (blockIndex) `otherIndex` of `other` */\r\n public copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void {\r\n for (let i = 0; i < blockSize; i++)\r\n this.values[thisIndex * blockSize + i] = other.values[otherIndex * blockSize + i];\r\n }\r\n\r\n /** return a deep copy */\r\n public clone(): AuxChannelData {\r\n return new AuxChannelData(this.input, this.values.slice());\r\n }\r\n\r\n /** toleranced comparison of the `input` and `value` fields.\r\n * * Default tolerance is 1.0e-8\r\n */\r\n public isAlmostEqual(other: AuxChannelData, tol?: number): boolean {\r\n const tolerance = tol ? tol : 1.0E-8;\r\n return Math.abs(this.input - other.input) < tolerance && NumberArray.isAlmostEqual(this.values, other.values, tolerance);\r\n }\r\n}\r\n\r\n/** Represents a single [[PolyfaceAuxData]] channel.\r\n * @public\r\n*/\r\nexport class AuxChannel {\r\n /** An array of [[AuxChannelData]] that represents the vertex data at one or more input values. */\r\n public data: AuxChannelData[];\r\n /** The type of data stored in this channel. */\r\n public dataType: AuxChannelDataType;\r\n /** The channel name. This is used to present the [[AuxChannel]] to the user and also to select the [[AuxChannel]] for display from AnalysisStyle */\r\n public name?: string;\r\n /** The input name. */\r\n public inputName?: string;\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string) {\r\n this.data = data;\r\n this.dataType = dataType;\r\n this.name = name;\r\n this.inputName = inputName;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): AuxChannel {\r\n const clonedData = [];\r\n for (const data of this.data) clonedData.push(data.clone());\r\n return new AuxChannel(clonedData, this.dataType, this.name, this.inputName);\r\n }\r\n\r\n /** Toleranced comparison of contents. */\r\n public isAlmostEqual(other: AuxChannel, tol?: number): boolean {\r\n if (this.dataType !== other.dataType ||\r\n this.name !== other.name ||\r\n this.inputName !== other.inputName ||\r\n this.data.length !== other.data.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.data.length; i++)\r\n if (!this.data[i].isAlmostEqual(other.data[i], tol))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** True if the data type is 1-dimensional. */\r\n public static isScalar(dataType: AuxChannelDataType): boolean {\r\n return dataType === AuxChannelDataType.Distance || dataType === AuxChannelDataType.Scalar;\r\n }\r\n\r\n /** True if the data stored in this AuxChannel is 1-dimensional. */\r\n public get isScalar(): boolean {\r\n return AuxChannel.isScalar(this.dataType);\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum of an AuxChannel of the given type. */\r\n public static entriesPerValue(dataType: AuxChannelDataType): number {\r\n return this.isScalar(dataType) ? 1 : 3;\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum in the data arrays of this AuxChannel. */\r\n public get entriesPerValue(): number {\r\n return AuxChannel.entriesPerValue(this.dataType);\r\n }\r\n\r\n /** The number of data stored in each data array of this AuxChannel, equal to the length of the array divided by `entriesPerValue`. */\r\n public get valueCount(): number {\r\n return 0 === this.data.length ? 0 : this.data[0].values.length / this.entriesPerValue;\r\n }\r\n\r\n /** The minimum and maximum values in `data.values`, or `undefined` if [[isScalar]] is false. */\r\n public get scalarRange(): Range1d | undefined {\r\n if (!this.isScalar)\r\n return undefined;\r\n\r\n const range = Range1d.createNull();\r\n for (const data of this.data)\r\n range.extendArray(data.values);\r\n\r\n return range;\r\n }\r\n\r\n /** Compute the range of this channel's displacement values, if [[dataType]] is [[AuxChannelDataType.Vector]].\r\n * @param scale Scale by which to multiply each displacement.\r\n * @param result Preallocated object in which to store result.\r\n * @returns The range encompassing all this channel's displacements scaled by `scale`; or a null range if this channel does not contain displacements.\r\n */\r\n public computeDisplacementRange(scale = 1, result?: Range3d): Range3d {\r\n result = Range3d.createNull(result);\r\n\r\n if (AuxChannelDataType.Vector === this.dataType) {\r\n for (const data of this.data) {\r\n const v = data.values;\r\n for (let i = 0; i < v.length; i += 3)\r\n result.extendXYZ(v[i] * scale, v[i + 1] * scale, v[i + 2] * scale);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * The `PolyfaceAuxData` structure contains one or more analytical data channels for each vertex of a [[Polyface]], allowing the polyface to be styled\r\n * using an [AnalysisStyle]($common).\r\n * Typically a polyface will contain only vertex data required for its basic display: vertex position, normal, texture parameter, color.\r\n * `PolyfaceAuxData` provides supplemental per-vertex data that is generally computed in an analysis program or other external data source.\r\n * This supplemental data can be either 1D (e.g., height, override color) or 3D (e.g., displacement vector, override normal); see [[AuxChannel.entriesPerValue]], [[AuxChannel.dataType]].\r\n * All data channels are indexed by the same indices, which must have the same length and structure as the other Polyface indices.\r\n * This means that if a facet's face loop is found at index range [i0,i1] in the Polyface vertex index array, then the same index range [i0,i1]\r\n * locates the data for this facet in all the other Polyface index arrays, including the `PolyfaceAuxData` indices.\r\n * @see [[PolyfaceData.auxData]] to associate auxiliary data with a polyface.\r\n * @public\r\n */\r\nexport class PolyfaceAuxData {\r\n /** Array with one or more channels of auxiliary data for the associated polyface. */\r\n public channels: AuxChannel[];\r\n /** The indices (shared by all data in all channels) mapping the data to the mesh facets. */\r\n public indices: number[];\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(channels: AuxChannel[], indices: number[]) {\r\n this.channels = channels;\r\n this.indices = indices;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): PolyfaceAuxData {\r\n const clonedChannels = this.channels.map((x) => x.clone());\r\n return new PolyfaceAuxData(clonedChannels, this.indices.slice());\r\n }\r\n\r\n /** Returns true if `this` is equivalent to `other` within `tolerance`.\r\n * The indices are compared for exact equality. The data in the channels are compared using `tolerance`, which defaults to 1.0e-8.\r\n */\r\n public isAlmostEqual(other: PolyfaceAuxData, tolerance?: number): boolean {\r\n if (!NumberArray.isExactEqual(this.indices, other.indices) || this.channels.length !== other.channels.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.channels.length; i++)\r\n if (!this.channels[i].isAlmostEqual(other.channels[i], tolerance))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** Returns true if both `left` and `right` are undefined, or both are defined and equivalent within `tolerance` (default: 1.0e-8). */\r\n public static isAlmostEqual(left: PolyfaceAuxData | undefined, right: PolyfaceAuxData | undefined, tol?: number): boolean {\r\n if (left === right) // This catches double undefined !!!\r\n return true;\r\n if (left && right)\r\n return left.isAlmostEqual(right, tol);\r\n return false;\r\n }\r\n\r\n /** Create a PolyfaceAuxData for use by a [[PolyfaceVisitor]]. */\r\n public createForVisitor(): PolyfaceAuxData {\r\n const visitorChannels: AuxChannel[] = [];\r\n\r\n for (const parentChannel of this.channels) {\r\n const visitorChannelData: AuxChannelData[] = [];\r\n for (const parentChannelData of parentChannel.data)\r\n visitorChannelData.push(new AuxChannelData(parentChannelData.input, []));\r\n\r\n visitorChannels.push(new AuxChannel(visitorChannelData, parentChannel.dataType, parentChannel.name, parentChannel.inputName));\r\n }\r\n\r\n return new PolyfaceAuxData(visitorChannels, []);\r\n }\r\n\r\n /** Apply `transform` to the data in each channel.\r\n * @see [[AuxChannelDataType]] for details regarding how each data type is affected by the transform.\r\n * @note This method may fail if a channel of [[AuxChannelDataType.Normal]] exists and `transform.matrix` is non-invertible.\r\n * @returns true if the channels were all successfully transformed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n let inverseRot: Matrix3d | undefined;\r\n const rot = transform.matrix;\r\n const det = rot.determinant();\r\n const scale = Math.pow(Math.abs(det), 1 / 3) * (det >= 0 ? 1 : -1);\r\n\r\n for (const channel of this.channels) {\r\n for (const data of channel.data) {\r\n switch (channel.dataType) {\r\n case AuxChannelDataType.Scalar:\r\n continue;\r\n case AuxChannelDataType.Distance: {\r\n for (let i = 0; i < data.values.length; i++)\r\n data.values[i] *= scale;\r\n\r\n break;\r\n }\r\n case AuxChannelDataType.Normal: {\r\n inverseRot = inverseRot ?? rot.inverse();\r\n if (!inverseRot)\r\n return false;\r\n\r\n transformPoints(data.values, (point) => {\r\n inverseRot!.multiplyTransposeVectorInPlace(point);\r\n const dot = point.magnitudeSquared();\r\n const tol = 1.0e-15; // cf. GrowableXYZArray.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace\r\n if (dot > tol && Math.abs(dot - 1.0) > tol ) { // only renormalize if magnitude is not near 0 or 1\r\n const mag = 1.0 / Math.sqrt(dot);\r\n point.scaleInPlace(mag);\r\n }\r\n });\r\n break;\r\n }\r\n case AuxChannelDataType.Vector: {\r\n transformPoints(data.values, (point) => rot.multiplyVectorInPlace(point));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nfunction transformPoints(coords: number[], transform: (point: Point3d) => void): void {\r\n const point = new Point3d();\r\n for (let i = 0; i < coords.length; i += 3) {\r\n point.set(coords[i], coords[i + 1], coords[i + 2]);\r\n transform(point);\r\n coords[i] = point.x;\r\n coords[i + 1] = point.y;\r\n coords[i + 2] = point.z;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AuxData.js","sourceRoot":"","sources":["../../../src/polyface/AuxData.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Polyface\r\n */\r\n\r\n// import { Point2d } from \"./Geometry2d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n// import { Geometry } from \"./Geometry\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\n\r\n/** The types of data that can be represented by an [[AuxChannelData]]. Each type of data contributes differently to the\r\n * animation applied by an [AnalysisStyle]($common) and responds differently when the host [[PolyfaceAuxData]] is transformed.\r\n * @public\r\n */\r\nexport enum AuxChannelDataType {\r\n /** General-purpose scalar values like stress, temperature, etc., used to recolor the [[Polyface]]'s vertices.\r\n * When the host Polyface is transformed, scalar values remain unmodified.\r\n */\r\n Scalar = 0,\r\n /** Distances in meters used to recolor the [[Polyface]]'s vertices.\r\n * When the host [[Polyface]] is transformed the [[Transform]]'s scale is applied to the distances.\r\n */\r\n Distance = 1,\r\n /** (X, Y, Z) displacement vectors added to the [[Polyface]]'s vertex positions resulting in deformation of the mesh.\r\n * When the host Polyface is transformed the displacements are rotated and scaled accordingly.\r\n */\r\n Vector = 2,\r\n /** (X, Y, Z) unit normal vectors that replace the host [[Polyface]]'s own normals.\r\n * When the Polyface is transformed the normals are rotated and renormalized accordingly.\r\n */\r\n Normal = 3,\r\n}\r\n\r\n/** Represents the [[AuxChannel]] data at a single input value.\r\n * @public\r\n*/\r\nexport class AuxChannelData {\r\n /** The input value for this data. */\r\n public input: number;\r\n /** The vertex values for this data. A single value per vertex for scalar and distance types and 3 values (x,y,z) for normal or vector channels. */\r\n public values: number[];\r\n\r\n /** Constructor. If `values` is a number array, it is captured. */\r\n constructor(input: number, values: number[] | Float64Array) {\r\n this.input = input;\r\n if (values instanceof Float64Array) {\r\n this.values = [];\r\n for (const v of values) this.values.push(v);\r\n } else\r\n this.values = values;\r\n }\r\n\r\n /** Copy blocks of size `blockSize` from (blocked index) `thisIndex` in this AuxChannelData to (blockIndex) `otherIndex` of `other` */\r\n public copyValues(other: AuxChannelData, thisIndex: number, otherIndex: number, blockSize: number): void {\r\n for (let i = 0; i < blockSize; i++)\r\n this.values[thisIndex * blockSize + i] = other.values[otherIndex * blockSize + i];\r\n }\r\n\r\n /** return a deep copy */\r\n public clone(): AuxChannelData {\r\n return new AuxChannelData(this.input, this.values.slice());\r\n }\r\n\r\n /** toleranced comparison of the `input` and `value` fields.\r\n * * Default tolerance is 1.0e-8\r\n */\r\n public isAlmostEqual(other: AuxChannelData, tol?: number): boolean {\r\n const tolerance = tol ? tol : 1.0E-8;\r\n return Math.abs(this.input - other.input) < tolerance && NumberArray.isAlmostEqual(this.values, other.values, tolerance);\r\n }\r\n}\r\n\r\n/** Represents a single [[PolyfaceAuxData]] channel.\r\n * @public\r\n*/\r\nexport class AuxChannel {\r\n /** An array of [[AuxChannelData]] that represents the vertex data at one or more input values. */\r\n public data: AuxChannelData[];\r\n /** The type of data stored in this channel. */\r\n public dataType: AuxChannelDataType;\r\n /** The channel name. This is used to present the [[AuxChannel]] to the user and also to select the [[AuxChannel]] for display from AnalysisStyle */\r\n public name?: string;\r\n /** The input name. */\r\n public inputName?: string;\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(data: AuxChannelData[], dataType: AuxChannelDataType, name?: string, inputName?: string) {\r\n this.data = data;\r\n this.dataType = dataType;\r\n this.name = name;\r\n this.inputName = inputName;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): AuxChannel {\r\n const clonedData = [];\r\n for (const data of this.data) clonedData.push(data.clone());\r\n return new AuxChannel(clonedData, this.dataType, this.name, this.inputName);\r\n }\r\n\r\n /** Toleranced comparison of contents. */\r\n public isAlmostEqual(other: AuxChannel, tol?: number): boolean {\r\n if (this.dataType !== other.dataType ||\r\n this.name !== other.name ||\r\n this.inputName !== other.inputName ||\r\n this.data.length !== other.data.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.data.length; i++)\r\n if (!this.data[i].isAlmostEqual(other.data[i], tol))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** True if the data type is 1-dimensional. */\r\n public static isScalar(dataType: AuxChannelDataType): boolean {\r\n return dataType === AuxChannelDataType.Distance || dataType === AuxChannelDataType.Scalar;\r\n }\r\n\r\n /** True if the data stored in this AuxChannel is 1-dimensional. */\r\n public get isScalar(): boolean {\r\n return AuxChannel.isScalar(this.dataType);\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum of an AuxChannel of the given type. */\r\n public static entriesPerValue(dataType: AuxChannelDataType): number {\r\n return this.isScalar(dataType) ? 1 : 3;\r\n }\r\n\r\n /** The dimension (1D or 3D) of each datum in the data arrays of this AuxChannel. */\r\n public get entriesPerValue(): number {\r\n return AuxChannel.entriesPerValue(this.dataType);\r\n }\r\n\r\n /** The number of data stored in each data array of this AuxChannel, equal to the length of the array divided by `entriesPerValue`. */\r\n public get valueCount(): number {\r\n return 0 === this.data.length ? 0 : this.data[0].values.length / this.entriesPerValue;\r\n }\r\n\r\n /** The minimum and maximum values in `data.values`, or `undefined` if [[isScalar]] is false. */\r\n public get scalarRange(): Range1d | undefined {\r\n if (!this.isScalar)\r\n return undefined;\r\n\r\n const range = Range1d.createNull();\r\n for (const data of this.data)\r\n range.extendArray(data.values);\r\n\r\n return range;\r\n }\r\n\r\n /** Compute the range of this channel's displacement values, if [[dataType]] is [[AuxChannelDataType.Vector]].\r\n * @param scale Scale by which to multiply each displacement.\r\n * @param result Preallocated object in which to store result.\r\n * @returns The range encompassing all this channel's displacements scaled by `scale`; or a null range if this channel does not contain displacements.\r\n */\r\n public computeDisplacementRange(scale = 1, result?: Range3d): Range3d {\r\n result = Range3d.createNull(result);\r\n\r\n if (AuxChannelDataType.Vector === this.dataType) {\r\n for (const data of this.data) {\r\n const v = data.values;\r\n for (let i = 0; i < v.length; i += 3)\r\n result.extendXYZ(v[i] * scale, v[i + 1] * scale, v[i + 2] * scale);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * The `PolyfaceAuxData` structure contains one or more analytical data channels for each vertex of a [[Polyface]], allowing the polyface to be styled\r\n * using an [AnalysisStyle]($common).\r\n * Typically a polyface will contain only vertex data required for its basic display: vertex position, normal, texture parameter, color.\r\n * `PolyfaceAuxData` provides supplemental per-vertex data that is generally computed in an analysis program or other external data source.\r\n * This supplemental data can be either 1D (e.g., height, override color) or 3D (e.g., displacement vector, override normal); see [[AuxChannel.entriesPerValue]], [[AuxChannel.dataType]].\r\n * All data channels are indexed by the same indices, which must have the same length and structure as the other Polyface indices.\r\n * This means that if a facet's face loop is found at index range [i0,i1] in the Polyface vertex index array, then the same index range [i0,i1]\r\n * locates the data for this facet in all the other Polyface index arrays, including the `PolyfaceAuxData` indices.\r\n * @see [[PolyfaceData.auxData]] to associate auxiliary data with a polyface.\r\n * @public\r\n */\r\nexport class PolyfaceAuxData {\r\n /** Array with one or more channels of auxiliary data for the associated polyface. */\r\n public channels: AuxChannel[];\r\n /** The indices (shared by all data in all channels) mapping the data to the mesh facets. */\r\n public indices: number[];\r\n\r\n /** Constructor with CAPTURED inputs. */\r\n public constructor(channels: AuxChannel[], indices: number[]) {\r\n this.channels = channels;\r\n this.indices = indices;\r\n }\r\n\r\n /** Return a deep copy. */\r\n public clone(): PolyfaceAuxData {\r\n const clonedChannels = this.channels.map((x) => x.clone());\r\n return new PolyfaceAuxData(clonedChannels, this.indices.slice());\r\n }\r\n\r\n /** Returns true if `this` is equivalent to `other` within `tolerance`.\r\n * The indices are compared for exact equality. The data in the channels are compared using `tolerance`, which defaults to 1.0e-8.\r\n */\r\n public isAlmostEqual(other: PolyfaceAuxData, tolerance?: number): boolean {\r\n if (!NumberArray.isExactEqual(this.indices, other.indices) || this.channels.length !== other.channels.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.channels.length; i++)\r\n if (!this.channels[i].isAlmostEqual(other.channels[i], tolerance))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n /** Returns true if both `left` and `right` are undefined, or both are defined and equivalent within `tolerance` (default: 1.0e-8). */\r\n public static isAlmostEqual(left: PolyfaceAuxData | undefined, right: PolyfaceAuxData | undefined, tol?: number): boolean {\r\n if (left === right) // This catches double undefined !!!\r\n return true;\r\n if (left && right)\r\n return left.isAlmostEqual(right, tol);\r\n return false;\r\n }\r\n\r\n /** Create a PolyfaceAuxData for use by a [[PolyfaceVisitor]]. */\r\n public createForVisitor(): PolyfaceAuxData {\r\n const visitorChannels: AuxChannel[] = [];\r\n\r\n for (const parentChannel of this.channels) {\r\n const visitorChannelData: AuxChannelData[] = [];\r\n for (const parentChannelData of parentChannel.data)\r\n visitorChannelData.push(new AuxChannelData(parentChannelData.input, []));\r\n\r\n visitorChannels.push(new AuxChannel(visitorChannelData, parentChannel.dataType, parentChannel.name, parentChannel.inputName));\r\n }\r\n\r\n return new PolyfaceAuxData(visitorChannels, []);\r\n }\r\n\r\n /** Apply `transform` to the data in each channel.\r\n * @see [[AuxChannelDataType]] for details regarding how each data type is affected by the transform.\r\n * @note This method may fail if a channel of [[AuxChannelDataType.Normal]] exists and `transform.matrix` is non-invertible.\r\n * @returns true if the channels were all successfully transformed.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n let inverseRot: Matrix3d | undefined;\r\n const rot = transform.matrix;\r\n const det = rot.determinant();\r\n const scale = Math.pow(Math.abs(det), 1 / 3) * (det >= 0 ? 1 : -1);\r\n\r\n for (const channel of this.channels) {\r\n for (const data of channel.data) {\r\n switch (channel.dataType) {\r\n case AuxChannelDataType.Scalar:\r\n continue;\r\n case AuxChannelDataType.Distance: {\r\n for (let i = 0; i < data.values.length; i++)\r\n data.values[i] *= scale;\r\n\r\n break;\r\n }\r\n case AuxChannelDataType.Normal: {\r\n inverseRot = inverseRot ?? rot.inverse();\r\n if (!inverseRot)\r\n return false;\r\n\r\n transformPoints(data.values, (point) => {\r\n inverseRot!.multiplyTransposeVectorInPlace(point);\r\n const dot = point.magnitudeSquared();\r\n const tol = 1.0e-15; // cf. GrowableXYZArray.multiplyAndRenormalizeMatrix3dInverseTransposeInPlace\r\n if (dot > tol && Math.abs(dot - 1.0) > tol ) { // only renormalize if magnitude is not near 0 or 1\r\n const mag = 1.0 / Math.sqrt(dot);\r\n point.scaleInPlace(mag);\r\n }\r\n });\r\n break;\r\n }\r\n case AuxChannelDataType.Vector: {\r\n transformPoints(data.values, (point) => rot.multiplyVectorInPlace(point));\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nfunction transformPoints(coords: number[], transform: (point: Point3d) => void): void {\r\n const point = new Point3d();\r\n for (let i = 0; i < coords.length; i += 3) {\r\n point.set(coords[i], coords[i + 1], coords[i + 2]);\r\n transform(point);\r\n coords[i] = point.x;\r\n coords[i + 1] = point.y;\r\n coords[i + 2] = point.z;\r\n }\r\n}\r\n"]}
@@ -25,79 +25,79 @@ const Point3dVector3d_1 = require("../geometry3d/Point3dVector3d");
25
25
  * @internal
26
26
  */
27
27
  class BoxTopology {
28
+ /**
29
+ * static readonly array with the coordinates of the 8 unit cube corners in standard order, which is:
30
+ * x varies fastest
31
+ * * The point indices for the x edges are (0 to 1), (2 to 3), (4 to 5), (6 to 7)
32
+ * * The point indices for the y edges are (0 to 2), (1 to 3), (4 to 6), (5 to 7)
33
+ * * The point indices for the z edges are (0 to 4), (1 to 5), (2 to 6), (3 to 7)
34
+ * * These indices are tabulated in the `axisEdgeVertex[axis][edge][vertex]` array
35
+ */
36
+ static points = [
37
+ Point3dVector3d_1.Point3d.create(0, 0, 0),
38
+ Point3dVector3d_1.Point3d.create(1, 0, 0),
39
+ Point3dVector3d_1.Point3d.create(0, 1, 0),
40
+ Point3dVector3d_1.Point3d.create(1, 1, 0),
41
+ Point3dVector3d_1.Point3d.create(0, 0, 1),
42
+ Point3dVector3d_1.Point3d.create(1, 0, 1),
43
+ Point3dVector3d_1.Point3d.create(0, 1, 1),
44
+ Point3dVector3d_1.Point3d.create(1, 1, 1),
45
+ ];
28
46
  static pointsClone() {
29
47
  const clones = [];
30
48
  for (const p of this.points)
31
49
  clones.push(p.clone());
32
50
  return clones;
33
51
  }
52
+ /** IN faceId pair, the first component for bottom and top caps is `primaryCapId` */
53
+ static primaryCapId = -1;
54
+ /** Indices of vertices around faces, in CCW from the outside. */
55
+ static cornerIndexCCW = [
56
+ [1, 0, 2, 3],
57
+ [4, 5, 7, 6],
58
+ [0, 1, 5, 4],
59
+ [1, 3, 7, 5],
60
+ [3, 2, 6, 7],
61
+ [2, 0, 4, 6]
62
+ ];
63
+ /** // [partnerFace[faceIndex][k] = index of k'th adjacent face */
64
+ static partnerFace = [
65
+ [5, 4, 3, 2],
66
+ [2, 3, 4, 5],
67
+ [0, 3, 1, 5],
68
+ [0, 4, 1, 2],
69
+ [0, 5, 1, 3],
70
+ [0, 2, 1, 4],
71
+ ];
72
+ /** face id as used in SolidPrimitive methods */
73
+ static faceId = [
74
+ [BoxTopology.primaryCapId, 0],
75
+ [BoxTopology.primaryCapId, 1],
76
+ [0, 0],
77
+ [0, 1],
78
+ [0, 2],
79
+ [0, 3]
80
+ ];
81
+ /**
82
+ * Table to look up axis indices of edges and normals in box faces.
83
+ * faceDirections[faceIndex] =[[edge0AxisIndex, edge1AxisIndex, normalAxisIndex],[direction sign for along the axis]
84
+ */
85
+ static faceDirections = [
86
+ [[0, 1, 2], [-1, 1, -1]],
87
+ [[0, 1, 2], [1, 1, 1]],
88
+ [[0, 2, 1], [1, -1, 1]],
89
+ [[1, 2, 0], [1, 1, 1]],
90
+ [[0, 2, 1], [-1, 1, 1]],
91
+ [[1, 2, 0], [-1, 1, -1]]
92
+ ];
93
+ /** There are 4 edges in each axis direction.
94
+ * * axisEdgeVertex[axisIndex][edgeIndex 0..3][*] = vertex index at end of edge in axisIndex direction.
95
+ */
96
+ static axisEdgeVertex = [
97
+ [[0, 1], [2, 3], [4, 5], [6, 7]],
98
+ [[0, 2], [1, 3], [4, 6], [5, 7]],
99
+ [[0, 4], [1, 5], [2, 6], [3, 7]]
100
+ ];
34
101
  }
35
102
  exports.BoxTopology = BoxTopology;
36
- /**
37
- * static readonly array with the coordinates of the 8 unit cube corners in standard order, which is:
38
- * x varies fastest
39
- * * The point indices for the x edges are (0 to 1), (2 to 3), (4 to 5), (6 to 7)
40
- * * The point indices for the y edges are (0 to 2), (1 to 3), (4 to 6), (5 to 7)
41
- * * The point indices for the z edges are (0 to 4), (1 to 5), (2 to 6), (3 to 7)
42
- * * These indices are tabulated in the `axisEdgeVertex[axis][edge][vertex]` array
43
- */
44
- BoxTopology.points = [
45
- Point3dVector3d_1.Point3d.create(0, 0, 0),
46
- Point3dVector3d_1.Point3d.create(1, 0, 0),
47
- Point3dVector3d_1.Point3d.create(0, 1, 0),
48
- Point3dVector3d_1.Point3d.create(1, 1, 0),
49
- Point3dVector3d_1.Point3d.create(0, 0, 1),
50
- Point3dVector3d_1.Point3d.create(1, 0, 1),
51
- Point3dVector3d_1.Point3d.create(0, 1, 1),
52
- Point3dVector3d_1.Point3d.create(1, 1, 1),
53
- ];
54
- /** IN faceId pair, the first component for bottom and top caps is `primaryCapId` */
55
- BoxTopology.primaryCapId = -1;
56
- /** Indices of vertices around faces, in CCW from the outside. */
57
- BoxTopology.cornerIndexCCW = [
58
- [1, 0, 2, 3],
59
- [4, 5, 7, 6],
60
- [0, 1, 5, 4],
61
- [1, 3, 7, 5],
62
- [3, 2, 6, 7],
63
- [2, 0, 4, 6]
64
- ];
65
- /** // [partnerFace[faceIndex][k] = index of k'th adjacent face */
66
- BoxTopology.partnerFace = [
67
- [5, 4, 3, 2],
68
- [2, 3, 4, 5],
69
- [0, 3, 1, 5],
70
- [0, 4, 1, 2],
71
- [0, 5, 1, 3],
72
- [0, 2, 1, 4],
73
- ];
74
- /** face id as used in SolidPrimitive methods */
75
- BoxTopology.faceId = [
76
- [BoxTopology.primaryCapId, 0],
77
- [BoxTopology.primaryCapId, 1],
78
- [0, 0],
79
- [0, 1],
80
- [0, 2],
81
- [0, 3]
82
- ];
83
- /**
84
- * Table to look up axis indices of edges and normals in box faces.
85
- * faceDirections[faceIndex] =[[edge0AxisIndex, edge1AxisIndex, normalAxisIndex],[direction sign for along the axis]
86
- */
87
- BoxTopology.faceDirections = [
88
- [[0, 1, 2], [-1, 1, -1]],
89
- [[0, 1, 2], [1, 1, 1]],
90
- [[0, 2, 1], [1, -1, 1]],
91
- [[1, 2, 0], [1, 1, 1]],
92
- [[0, 2, 1], [-1, 1, 1]],
93
- [[1, 2, 0], [-1, 1, -1]]
94
- ];
95
- /** There are 4 edges in each axis direction.
96
- * * axisEdgeVertex[axisIndex][edgeIndex 0..3][*] = vertex index at end of edge in axisIndex direction.
97
- */
98
- BoxTopology.axisEdgeVertex = [
99
- [[0, 1], [2, 3], [4, 5], [6, 7]],
100
- [[0, 2], [1, 3], [4, 6], [5, 7]],
101
- [[0, 4], [1, 5], [2, 6], [3, 7]]
102
- ];
103
103
  //# sourceMappingURL=BoxTopology.js.map