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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  10. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  12. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  17. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  18. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  19. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  20. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  22. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  23. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  25. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  26. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  27. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  29. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  30. package/lib/cjs/core-geometry.js.map +1 -1
  31. package/lib/cjs/curve/Arc3d.d.ts +40 -8
  32. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  33. package/lib/cjs/curve/Arc3d.js +66 -8
  34. package/lib/cjs/curve/Arc3d.js.map +1 -1
  35. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  37. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  38. package/lib/cjs/curve/CurveCollection.d.ts +16 -2
  39. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  40. package/lib/cjs/curve/CurveCollection.js +33 -2
  41. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  42. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  43. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  44. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  45. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  46. package/lib/cjs/curve/CurveFactory.js +213 -135
  47. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  48. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  49. package/lib/cjs/curve/CurveOps.js.map +1 -1
  50. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  51. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  52. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  53. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  54. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  55. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  56. package/lib/cjs/curve/LineString3d.d.ts +12 -8
  57. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  58. package/lib/cjs/curve/LineString3d.js +29 -8
  59. package/lib/cjs/curve/LineString3d.js.map +1 -1
  60. package/lib/cjs/curve/Loop.d.ts +12 -6
  61. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  62. package/lib/cjs/curve/Loop.js +12 -6
  63. package/lib/cjs/curve/Loop.js.map +1 -1
  64. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  65. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  66. package/lib/cjs/curve/Path.js.map +1 -1
  67. package/lib/cjs/curve/PointString3d.js.map +1 -1
  68. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  69. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  70. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  71. package/lib/cjs/curve/Query/CylindricalRange.d.ts +8 -6
  72. package/lib/cjs/curve/Query/CylindricalRange.d.ts.map +1 -1
  73. package/lib/cjs/curve/Query/CylindricalRange.js +13 -9
  74. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  75. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  76. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  77. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  78. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  79. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  80. package/lib/cjs/curve/RegionOps.js.map +1 -1
  81. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  82. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  83. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  84. package/lib/cjs/curve/StrokeOptions.js +1 -1
  85. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  86. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  87. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  88. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  89. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  90. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  94. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  96. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -1
  99. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +24 -18
  100. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  105. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  107. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  108. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  109. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  110. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  111. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  112. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  113. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  114. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  115. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  116. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  117. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  118. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  119. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  120. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  121. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  122. package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -1
  123. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  124. package/lib/cjs/geometry3d/AngleSweep.js +1 -1
  125. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  126. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts +14 -8
  127. package/lib/cjs/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  128. package/lib/cjs/geometry3d/BarycentricTriangle.js +17 -8
  129. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  130. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  131. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  132. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  133. package/lib/cjs/geometry3d/FrameBuilder.js +4 -4
  134. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  135. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  136. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  137. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  138. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts +2 -0
  139. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  140. package/lib/cjs/geometry3d/GrowableFloat64Array.js +4 -0
  141. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  142. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  143. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  144. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  145. package/lib/cjs/geometry3d/GrowableXYZArray.js +54 -16
  146. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  147. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  148. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  149. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  150. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  151. package/lib/cjs/geometry3d/IndexedXYZCollection.js +24 -10
  152. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  153. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  154. package/lib/cjs/geometry3d/Matrix3d.d.ts +11 -8
  155. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/Matrix3d.js +28 -26
  157. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  158. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  159. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  160. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  161. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  162. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  163. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  164. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +1 -1
  165. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  166. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +6 -6
  167. package/lib/cjs/geometry3d/Point3dVector3d.js +6 -6
  168. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  169. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  170. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  171. package/lib/cjs/geometry3d/PolygonOps.d.ts +12 -6
  172. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  173. package/lib/cjs/geometry3d/PolygonOps.js +94 -47
  174. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  175. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  176. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  177. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  178. package/lib/cjs/geometry3d/PolylineOps.js +9 -5
  179. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  180. package/lib/cjs/geometry3d/Range.js.map +1 -1
  181. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  182. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  183. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  184. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  185. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  186. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  187. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  188. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  189. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  190. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  191. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  192. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  193. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  194. package/lib/cjs/geometry4d/MomentData.js +62 -64
  195. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  196. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  197. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  198. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  199. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  200. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  201. package/lib/cjs/numerics/Complex.js.map +1 -1
  202. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  203. package/lib/cjs/numerics/Newton.js.map +1 -1
  204. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  205. package/lib/cjs/numerics/PolarData.js.map +1 -1
  206. package/lib/cjs/numerics/Polynomials.d.ts +5 -5
  207. package/lib/cjs/numerics/Polynomials.js +6 -6
  208. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  209. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  210. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  211. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  212. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  213. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  214. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  215. package/lib/cjs/polyface/AuxData.d.ts +2 -2
  216. package/lib/cjs/polyface/AuxData.d.ts.map +1 -1
  217. package/lib/cjs/polyface/AuxData.js +11 -3
  218. package/lib/cjs/polyface/AuxData.js.map +1 -1
  219. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  220. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  221. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  222. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  223. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  224. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +27 -20
  225. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  226. package/lib/cjs/polyface/IndexedEdgeMatcher.js +56 -30
  227. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  228. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +2 -1
  229. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  230. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +2 -1
  231. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  232. package/lib/cjs/polyface/Polyface.d.ts +3 -5
  233. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  234. package/lib/cjs/polyface/Polyface.js +6 -13
  235. package/lib/cjs/polyface/Polyface.js.map +1 -1
  236. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -7
  237. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  238. package/lib/cjs/polyface/PolyfaceBuilder.js +55 -60
  239. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  240. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  241. package/lib/cjs/polyface/PolyfaceData.d.ts +13 -3
  242. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  243. package/lib/cjs/polyface/PolyfaceData.js +21 -4
  244. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  245. package/lib/cjs/polyface/PolyfaceQuery.d.ts +2 -2
  246. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  247. package/lib/cjs/polyface/PolyfaceQuery.js +4 -3
  248. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  249. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  250. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  251. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  252. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  253. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  254. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  255. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  256. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  257. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  258. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  259. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  260. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  261. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  262. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  263. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  264. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  265. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  266. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  267. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  268. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  269. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  270. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  271. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  272. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  273. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  274. package/lib/cjs/serialization/GeometrySamples.js +5 -5
  275. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  276. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  277. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  278. package/lib/cjs/solid/Box.d.ts +9 -3
  279. package/lib/cjs/solid/Box.d.ts.map +1 -1
  280. package/lib/cjs/solid/Box.js +10 -5
  281. package/lib/cjs/solid/Box.js.map +1 -1
  282. package/lib/cjs/solid/Cone.d.ts +3 -2
  283. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  284. package/lib/cjs/solid/Cone.js +3 -3
  285. package/lib/cjs/solid/Cone.js.map +1 -1
  286. package/lib/cjs/solid/LinearSweep.d.ts +9 -3
  287. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  288. package/lib/cjs/solid/LinearSweep.js +9 -4
  289. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  290. package/lib/cjs/solid/RotationalSweep.d.ts +15 -4
  291. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  292. package/lib/cjs/solid/RotationalSweep.js +20 -7
  293. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  294. package/lib/cjs/solid/RuledSweep.d.ts +35 -26
  295. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  296. package/lib/cjs/solid/RuledSweep.js +41 -28
  297. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  298. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  299. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  300. package/lib/cjs/solid/SolidPrimitive.js +8 -5
  301. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  302. package/lib/cjs/solid/Sphere.d.ts +17 -7
  303. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  304. package/lib/cjs/solid/Sphere.js +22 -16
  305. package/lib/cjs/solid/Sphere.js.map +1 -1
  306. package/lib/cjs/solid/SweepContour.d.ts +25 -16
  307. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  308. package/lib/cjs/solid/SweepContour.js +25 -16
  309. package/lib/cjs/solid/SweepContour.js.map +1 -1
  310. package/lib/cjs/solid/TorusPipe.d.ts +8 -2
  311. package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
  312. package/lib/cjs/solid/TorusPipe.js +9 -5
  313. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  314. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  315. package/lib/cjs/topology/Graph.js.map +1 -1
  316. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  317. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  318. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  319. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  320. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  321. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  322. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  323. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  324. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  325. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  326. package/lib/cjs/topology/MaskManager.js.map +1 -1
  327. package/lib/cjs/topology/Merging.js.map +1 -1
  328. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  329. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  330. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  331. package/lib/cjs/topology/Triangulation.js.map +1 -1
  332. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  333. package/lib/esm/Constant.js.map +1 -1
  334. package/lib/esm/Geometry.js.map +1 -1
  335. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  336. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  337. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  338. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  339. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  340. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  341. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  342. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  343. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  344. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  345. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  346. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  347. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  348. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  349. package/lib/esm/bspline/KnotVector.js.map +1 -1
  350. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  351. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  352. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  353. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  354. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  355. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  356. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  357. package/lib/esm/clipping/ClipVector.js.map +1 -1
  358. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  359. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  360. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  361. package/lib/esm/core-geometry.js.map +1 -1
  362. package/lib/esm/curve/Arc3d.d.ts +40 -8
  363. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  364. package/lib/esm/curve/Arc3d.js +66 -8
  365. package/lib/esm/curve/Arc3d.js.map +1 -1
  366. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  367. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  368. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  369. package/lib/esm/curve/CurveCollection.d.ts +16 -2
  370. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  371. package/lib/esm/curve/CurveCollection.js +33 -2
  372. package/lib/esm/curve/CurveCollection.js.map +1 -1
  373. package/lib/esm/curve/CurveCurve.js.map +1 -1
  374. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  375. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  376. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  377. package/lib/esm/curve/CurveFactory.js +213 -135
  378. package/lib/esm/curve/CurveFactory.js.map +1 -1
  379. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  380. package/lib/esm/curve/CurveOps.js.map +1 -1
  381. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  382. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  383. package/lib/esm/curve/CurveTypes.js.map +1 -1
  384. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  385. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  386. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  387. package/lib/esm/curve/LineString3d.d.ts +12 -8
  388. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  389. package/lib/esm/curve/LineString3d.js +29 -8
  390. package/lib/esm/curve/LineString3d.js.map +1 -1
  391. package/lib/esm/curve/Loop.d.ts +12 -6
  392. package/lib/esm/curve/Loop.d.ts.map +1 -1
  393. package/lib/esm/curve/Loop.js +12 -6
  394. package/lib/esm/curve/Loop.js.map +1 -1
  395. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  396. package/lib/esm/curve/ParityRegion.js.map +1 -1
  397. package/lib/esm/curve/Path.js.map +1 -1
  398. package/lib/esm/curve/PointString3d.js.map +1 -1
  399. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  400. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  401. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  402. package/lib/esm/curve/Query/CylindricalRange.d.ts +8 -6
  403. package/lib/esm/curve/Query/CylindricalRange.d.ts.map +1 -1
  404. package/lib/esm/curve/Query/CylindricalRange.js +13 -9
  405. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  406. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  407. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  408. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  409. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  410. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  411. package/lib/esm/curve/RegionOps.js.map +1 -1
  412. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  413. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  414. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  415. package/lib/esm/curve/StrokeOptions.js +1 -1
  416. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  417. package/lib/esm/curve/UnionRegion.js.map +1 -1
  418. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  419. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  420. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  421. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  422. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  423. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  424. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  425. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  426. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  427. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  428. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  429. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -1
  430. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +24 -18
  431. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  432. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  433. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  434. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  435. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  436. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  437. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  438. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  439. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  440. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  441. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  442. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  443. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  444. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  445. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  446. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  447. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  448. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  449. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  450. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  451. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  452. package/lib/esm/geometry3d/Angle.js.map +1 -1
  453. package/lib/esm/geometry3d/AngleSweep.d.ts +1 -1
  454. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  455. package/lib/esm/geometry3d/AngleSweep.js +1 -1
  456. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  457. package/lib/esm/geometry3d/BarycentricTriangle.d.ts +14 -8
  458. package/lib/esm/geometry3d/BarycentricTriangle.d.ts.map +1 -1
  459. package/lib/esm/geometry3d/BarycentricTriangle.js +17 -8
  460. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  461. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  462. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  463. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  464. package/lib/esm/geometry3d/FrameBuilder.js +4 -4
  465. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  466. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  467. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  468. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  469. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts +2 -0
  470. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  471. package/lib/esm/geometry3d/GrowableFloat64Array.js +4 -0
  472. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  473. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  474. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  475. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  476. package/lib/esm/geometry3d/GrowableXYZArray.js +54 -16
  477. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  478. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  479. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  480. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  481. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  482. package/lib/esm/geometry3d/IndexedXYZCollection.js +24 -10
  483. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  484. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  485. package/lib/esm/geometry3d/Matrix3d.d.ts +11 -8
  486. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  487. package/lib/esm/geometry3d/Matrix3d.js +28 -26
  488. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  489. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  490. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  491. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  492. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  493. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  494. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  495. package/lib/esm/geometry3d/Point3dArrayCarrier.js +1 -1
  496. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  497. package/lib/esm/geometry3d/Point3dVector3d.d.ts +6 -6
  498. package/lib/esm/geometry3d/Point3dVector3d.js +6 -6
  499. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  500. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  501. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  502. package/lib/esm/geometry3d/PolygonOps.d.ts +12 -6
  503. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  504. package/lib/esm/geometry3d/PolygonOps.js +94 -47
  505. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  506. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  507. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  508. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  509. package/lib/esm/geometry3d/PolylineOps.js +9 -5
  510. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  511. package/lib/esm/geometry3d/Range.js.map +1 -1
  512. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  513. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  514. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  515. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  516. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  517. package/lib/esm/geometry3d/Transform.js.map +1 -1
  518. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  519. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  520. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  521. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  522. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  523. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  524. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  525. package/lib/esm/geometry4d/MomentData.js +62 -64
  526. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  527. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  528. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  529. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  530. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  531. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  532. package/lib/esm/numerics/Complex.js.map +1 -1
  533. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  534. package/lib/esm/numerics/Newton.js.map +1 -1
  535. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  536. package/lib/esm/numerics/PolarData.js.map +1 -1
  537. package/lib/esm/numerics/Polynomials.d.ts +5 -5
  538. package/lib/esm/numerics/Polynomials.js +6 -6
  539. package/lib/esm/numerics/Polynomials.js.map +1 -1
  540. package/lib/esm/numerics/Quadrature.js.map +1 -1
  541. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  542. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  543. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  544. package/lib/esm/numerics/UnionFind.js.map +1 -1
  545. package/lib/esm/numerics/UsageSums.js.map +1 -1
  546. package/lib/esm/polyface/AuxData.d.ts +2 -2
  547. package/lib/esm/polyface/AuxData.d.ts.map +1 -1
  548. package/lib/esm/polyface/AuxData.js +11 -3
  549. package/lib/esm/polyface/AuxData.js.map +1 -1
  550. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  551. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  552. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  553. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  554. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  555. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +27 -20
  556. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  557. package/lib/esm/polyface/IndexedEdgeMatcher.js +56 -30
  558. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  559. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +2 -1
  560. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  561. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +2 -1
  562. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  563. package/lib/esm/polyface/Polyface.d.ts +3 -5
  564. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  565. package/lib/esm/polyface/Polyface.js +6 -13
  566. package/lib/esm/polyface/Polyface.js.map +1 -1
  567. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -7
  568. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  569. package/lib/esm/polyface/PolyfaceBuilder.js +56 -61
  570. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  571. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  572. package/lib/esm/polyface/PolyfaceData.d.ts +13 -3
  573. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  574. package/lib/esm/polyface/PolyfaceData.js +21 -4
  575. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  576. package/lib/esm/polyface/PolyfaceQuery.d.ts +2 -2
  577. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  578. package/lib/esm/polyface/PolyfaceQuery.js +4 -3
  579. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  580. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  581. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  582. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  583. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  584. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  585. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  586. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  587. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  588. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  589. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  590. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  591. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  592. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  593. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  594. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  595. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  596. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  597. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  598. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  599. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  600. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  601. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  602. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  603. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  604. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  605. package/lib/esm/serialization/GeometrySamples.js +5 -5
  606. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  607. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  608. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  609. package/lib/esm/solid/Box.d.ts +9 -3
  610. package/lib/esm/solid/Box.d.ts.map +1 -1
  611. package/lib/esm/solid/Box.js +10 -5
  612. package/lib/esm/solid/Box.js.map +1 -1
  613. package/lib/esm/solid/Cone.d.ts +3 -2
  614. package/lib/esm/solid/Cone.d.ts.map +1 -1
  615. package/lib/esm/solid/Cone.js +3 -3
  616. package/lib/esm/solid/Cone.js.map +1 -1
  617. package/lib/esm/solid/LinearSweep.d.ts +9 -3
  618. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  619. package/lib/esm/solid/LinearSweep.js +9 -4
  620. package/lib/esm/solid/LinearSweep.js.map +1 -1
  621. package/lib/esm/solid/RotationalSweep.d.ts +15 -4
  622. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  623. package/lib/esm/solid/RotationalSweep.js +20 -7
  624. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  625. package/lib/esm/solid/RuledSweep.d.ts +35 -26
  626. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  627. package/lib/esm/solid/RuledSweep.js +41 -28
  628. package/lib/esm/solid/RuledSweep.js.map +1 -1
  629. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  630. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  631. package/lib/esm/solid/SolidPrimitive.js +8 -5
  632. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  633. package/lib/esm/solid/Sphere.d.ts +17 -7
  634. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  635. package/lib/esm/solid/Sphere.js +22 -16
  636. package/lib/esm/solid/Sphere.js.map +1 -1
  637. package/lib/esm/solid/SweepContour.d.ts +25 -16
  638. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  639. package/lib/esm/solid/SweepContour.js +25 -16
  640. package/lib/esm/solid/SweepContour.js.map +1 -1
  641. package/lib/esm/solid/TorusPipe.d.ts +8 -2
  642. package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
  643. package/lib/esm/solid/TorusPipe.js +9 -5
  644. package/lib/esm/solid/TorusPipe.js.map +1 -1
  645. package/lib/esm/topology/ChainMerge.js.map +1 -1
  646. package/lib/esm/topology/Graph.js.map +1 -1
  647. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  648. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  649. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  650. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  651. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  652. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  653. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  654. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  655. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  656. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  657. package/lib/esm/topology/MaskManager.js.map +1 -1
  658. package/lib/esm/topology/Merging.js.map +1 -1
  659. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  660. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  661. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  662. package/lib/esm/topology/Triangulation.js.map +1 -1
  663. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  664. package/package.json +4 -4
@@ -8,8 +8,8 @@ exports.MomentData = void 0;
8
8
  /** @packageDocumentation
9
9
  * @module Numerics
10
10
  */
11
- // import { Point2d } from "./Geometry2d";
12
11
  /* eslint-disable @typescript-eslint/naming-convention */
12
+ // cspell:word ABAT
13
13
  const Geometry_1 = require("../Geometry");
14
14
  const Matrix3d_1 = require("../geometry3d/Matrix3d");
15
15
  const Point3dVector3d_1 = require("../geometry3d/Point3dVector3d");
@@ -22,58 +22,55 @@ const Point4d_1 = require("./Point4d");
22
22
  * * origin = local origin used as moments are summed.
23
23
  * * sums = array of summed moments.
24
24
  * * The [i,j] entry of the sums is a summed or integrated moment for product of axis i and j.
25
- * * axes 0,1,2 are x,y,z
25
+ * * axes 0,1,2 are x,y,z.
26
26
  * * e.g. entry [0,1] is summed product xy
27
27
  * * axis 3 is "w", which is 1 in sums.
28
- * * e.g. entry 03 is summed x
29
- * * In this level,
28
+ * * e.g. entry 03 is summed x.
29
+ * * In this level:
30
30
  * * the `absoluteQuantity` member is undefined.
31
31
  * * the `localToWorldMap` and `radiiOfGyration` are created by have undefined contents.
32
- * * Second level: after a call to inertiaProductsToPrincipalAxes, the `localToWorldMap`, `absoluteQuantity` and `radiiOfGyration` are filled in.
32
+ * * Second level: after a call to inertiaProductsToPrincipalAxes, the `localToWorldMap`, `absoluteQuantity` and
33
+ * `radiiOfGyration` are filled in.
33
34
  * @public
34
35
  */
35
36
  class MomentData {
36
- /** Return the lower-right (3,3) entry in the sums.
37
- * * This is the quantity (i.e. length, area, or volume) summed
37
+ /**
38
+ * Return the lower-right (3,3) entry in the sums.
39
+ * * This is the quantity (i.e. length, area, or volume) summed.
38
40
  */
39
- get quantitySum() { return this.sums.atIJ(3, 3); }
40
- /** Return a scale factor to make these sums match the target orientation sign.
41
+ get quantitySum() {
42
+ return this.sums.atIJ(3, 3);
43
+ }
44
+ /**
45
+ * Return a scale factor to make these sums match the target orientation sign.
41
46
  * * 1.0 if `this.quantitySum` has the same sign as `targetSign`.
42
47
  * * -1.0 if `this.quantitySum` has the opposite sign from `targetSign`
43
48
  */
44
49
  signFactor(targetSign) {
45
50
  return targetSign * this.quantitySum > 0 ? 1.0 : -1.0;
46
51
  }
47
- /**
48
- * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.
49
- *
50
- */
52
+ /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */
51
53
  setOriginIfNeeded(origin) {
52
54
  if (this.needOrigin) {
53
55
  this.origin.setFromPoint3d(origin);
54
56
  this.needOrigin = false;
55
57
  }
56
58
  }
57
- /**
58
- * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.
59
- *
60
- */
59
+ /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */
61
60
  setOriginFromGrowableXYZArrayIfNeeded(points) {
62
61
  if (this.needOrigin && points.length > 0) {
63
62
  points.getPoint3dAtCheckedPointIndex(0, this.origin);
64
63
  this.needOrigin = false;
65
64
  }
66
65
  }
67
- /**
68
- * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.
69
- *
70
- */
66
+ /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */
71
67
  setOriginXYZIfNeeded(x, y, z) {
72
68
  if (this.needOrigin) {
73
69
  this.origin.set(x, y, z);
74
70
  this.needOrigin = false;
75
71
  }
76
72
  }
73
+ /** Constructor. */
77
74
  constructor() {
78
75
  this._point0 = Point3dVector3d_1.Point3d.create();
79
76
  this._point1 = Point3dVector3d_1.Point3d.create();
@@ -85,12 +82,13 @@ class MomentData {
85
82
  this.absoluteQuantity = 0.1; // so optimizer sees its type
86
83
  this.absoluteQuantity = undefined;
87
84
  }
88
- /** Create moments with optional origin.
89
- * * origin and needOrigin are quirky.
85
+ /**
86
+ * Create moments with optional origin.
87
+ * * Origin and needOrigin are quirky.
90
88
  * * (undefined, true) sets up to use first incoming point as origin.
91
- * * (origin) sets up to use that durable origin, set needsOrigin flag false
92
- * * (origin, true) the "true" is meaningless
93
- * * (undefined, false) makes 000 the durable origin
89
+ * * (origin) sets up to use that durable origin, set needsOrigin flag false.
90
+ * * (origin, true) the "true" is meaningless.
91
+ * * (undefined, false) makes 000 the durable origin.
94
92
  */
95
93
  static create(origin, needOrigin = false) {
96
94
  const data = new MomentData();
@@ -102,8 +100,8 @@ class MomentData {
102
100
  return data;
103
101
  }
104
102
  /**
105
- * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`
106
- * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`
103
+ * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`.
104
+ * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`.
107
105
  */
108
106
  static momentTensorFromInertiaProducts(products) {
109
107
  const rr = products.sumDiagonal();
@@ -136,7 +134,7 @@ class MomentData {
136
134
  }
137
135
  /**
138
136
  * Return the principal moment data for an array of points.
139
- * @param points array of points
137
+ * @param points array of points.
140
138
  */
141
139
  static pointsToPrincipalAxes(points) {
142
140
  const moments = new MomentData();
@@ -147,12 +145,12 @@ class MomentData {
147
145
  return this.inertiaProductsToPrincipalAxes(moments.origin, moments.sums);
148
146
  }
149
147
  /**
150
- * Compute principal axes from inertial products
151
- * * The radii of gyration are sorted smallest to largest
152
- * * Hence x axis is long direction
153
- * * Hence planar data generates large moment as Z
148
+ * Compute principal axes from inertial products.
149
+ * * The radii of gyration are sorted smallest to largest.
150
+ * * Hence x axis is long direction.
151
+ * * Hence planar data generates large moment as Z.
154
152
  * @param origin The origin used for the inertia products.
155
- * @param inertiaProducts The inertia products -- sums or integrals of [xx,xy,xz,xw; yx,yy, yz,yw; zx,zy,zz,zw; wx,wy,wz,w]
153
+ * @param inertiaProducts The inertia products: sums or integrals of [xx,xy,xz,xw; yx,yy, yz,yw; zx,zy,zz,zw; wx,wy,wz,w].
156
154
  */
157
155
  static inertiaProductsToPrincipalAxes(origin, inertiaProducts) {
158
156
  const moments = new MomentData();
@@ -180,18 +178,19 @@ class MomentData {
180
178
  return moments;
181
179
  }
182
180
  /**
183
- * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`
184
- * * The members considered are
185
- * * origin of local to world map (i.e. centroid)
186
- * * radius of gyration
181
+ * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`.
182
+ * * The members considered are:
183
+ * * origin of local to world map (i.e. centroid),
184
+ * * radius of gyration,
187
185
  * * axes of localToWorldMap.
188
186
  * * Axis direction tests allow these quirks:
189
187
  * * opposite orientation is considered matched.
190
188
  * * Full xyz symmetry: If x,y,z radii are matched, axes are not tested.
191
- * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction is tested.
189
+ * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction
190
+ * is tested.
192
191
  * * If either or both are undefined, returns false.
193
- * @param dataA first set of moments
194
- * @param dataB second set of moments
192
+ * @param dataA first set of moments.
193
+ * @param dataB second set of moments.
195
194
  */
196
195
  static areEquivalentPrincipalAxes(dataA, dataB) {
197
196
  if (dataA && dataB
@@ -239,7 +238,7 @@ class MomentData {
239
238
  this.sums.addMomentsInPlace(p.x - this.origin.x, p.y - this.origin.y, p.z - this.origin.z, 1.0);
240
239
  }
241
240
  }
242
- /** revise the accumulated sums to be "around the centroid" */
241
+ /** Revise the accumulated sums to be "around the centroid". */
243
242
  shiftOriginAndSumsToCentroidOfSums() {
244
243
  const xyz = this.sums.columnW().realPoint();
245
244
  if (xyz) {
@@ -248,7 +247,8 @@ class MomentData {
248
247
  }
249
248
  return false;
250
249
  }
251
- /** revise the accumulated sums
250
+ /**
251
+ * Revise the accumulated sums.
252
252
  * * add ax,ay,ax to the origin coordinates.
253
253
  * * apply the negative translation to the sums.
254
254
  */
@@ -256,11 +256,12 @@ class MomentData {
256
256
  this.origin.addXYZInPlace(ax, ay, az);
257
257
  this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);
258
258
  }
259
- /** revise the accumulated sums so they are based at a specified origin. */
259
+ /** Revise the accumulated sums so they are based at a specified origin. */
260
260
  shiftOriginAndSumsToNewOrigin(newOrigin) {
261
261
  this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);
262
262
  }
263
- /** compute moments of a triangle from the origin to the given line.
263
+ /**
264
+ * Compute moments of a triangle from the origin to the given line.
264
265
  * Accumulate them to this.sums.
265
266
  * * If `pointA` is undefined, use `this.origin` as pointA.
266
267
  * * If `this.needOrigin` is set, pointB is used
@@ -292,7 +293,7 @@ class MomentData {
292
293
  this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);
293
294
  }
294
295
  }
295
- /** add scaled outer product of (4d, unit weight) point to this.sums */
296
+ /** Add scaled outer product of (4d, unit weight) point to this.sums. */
296
297
  accumulateScaledOuterProduct(point, scaleFactor) {
297
298
  this.setOriginXYZIfNeeded(point.x, point.y, 0.0);
298
299
  const vectorA = MomentData._vectorA = Point4d_1.Point4d.create(point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA);
@@ -314,7 +315,8 @@ class MomentData {
314
315
  this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_6);
315
316
  this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);
316
317
  }
317
- /** compute moments of triangles from a base point to the given linestring.
318
+ /**
319
+ * Compute moments of triangles from a base point to the given linestring.
318
320
  * Accumulate them to this.sums.
319
321
  * * If `pointA` is undefined, use `this.origin` as pointA.
320
322
  * * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.
@@ -331,18 +333,18 @@ class MomentData {
331
333
  }
332
334
  }
333
335
  }
334
- // cspell:word ABAT
335
336
  /**
336
337
  * * Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0;0,0,0,0;0,0,0,1].
337
- * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin]. (Column weights 0001) (only xy parts of vectors)
338
+ * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin]. (Column weights 0001) (only xy
339
+ * parts of vectors).
338
340
  * * scale by detJ for the xy-only determinant of the vectors.
339
341
  * @param productXX
340
342
  * @param productXY
341
343
  * @param productYY
342
- * @param area Area in caller's system
343
- * @param origin Caller's origin
344
- * @param vectorU Caller's U axis (not necessarily unit)
345
- * @param vectorV Caller's V axis (not necessarily unit)
344
+ * @param area Area in caller's system.
345
+ * @param origin Caller's origin.
346
+ * @param vectorU Caller's U axis (not necessarily unit).
347
+ * @param vectorV Caller's V axis (not necessarily unit).
346
348
  */
347
349
  accumulateXYProductsInCentroidalFrame(productXX, productXY, productYY, area, origin, vectorU, vectorV) {
348
350
  const centroidalProducts = Matrix4d_1.Matrix4d.createRowValues(productXX, productXY, 0, 0, productXY, productYY, 0, 0, 0, 0, 0, 0, 0, 0, 0, area);
@@ -354,27 +356,23 @@ class MomentData {
354
356
  }
355
357
  /**
356
358
  * Accumulate sums from other moments.
357
- * * scale by given scaleFactor (e.g. sign to correct orientation)
358
- * * pull the origin from `other` if `this` needs an origin.
359
- * *
359
+ * * Scale by given scaleFactor (e.g. sign to correct orientation).
360
+ * * Pull the origin from `other` if `this` needs an origin.
360
361
  */
361
362
  accumulateProducts(other, scale) {
362
363
  this.setOriginIfNeeded(other.origin);
363
364
  this.sums.addTranslationSandwichInPlace(other.sums, this.origin.x - other.origin.x, this.origin.y - other.origin.y, this.origin.z - other.origin.z, scale);
364
365
  }
365
366
  /**
366
- * Accumulate sums from Matrix4d and origin.
367
- * * scale by given scaleFactor (e.g. sign to correct orientation)
368
- * * trap the origin if `this` needs an origin.
369
- * *
370
- */
367
+ * Accumulate sums from Matrix4d and origin.
368
+ * * Scale by given scaleFactor (e.g. sign to correct orientation).
369
+ * * Trap the origin if `this` needs an origin.
370
+ */
371
371
  accumulateProductsFromOrigin(origin, products, scale) {
372
372
  this.setOriginIfNeeded(origin);
373
373
  this.sums.addTranslationSandwichInPlace(products, this.origin.x - origin.x, this.origin.y - origin.y, this.origin.z - origin.z, scale);
374
374
  }
375
- /**
376
- * Convert to a json data object with:
377
- */
375
+ /** Convert to a json data object. */
378
376
  toJSON() {
379
377
  return {
380
378
  origin: this.origin,
@@ -1 +1 @@
1
- {"version":3,"file":"MomentData.js","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AAEH,0CAA0C;AAC1C,yDAAyD;AAEzD,0CAAuC;AAEvC,qDAAkD;AAClD,mEAAuE;AACvE,uDAAoD;AAEpD,yCAAsC;AACtC,uCAAoC;AAEpC;;;;;;;;;;;;;;;GAeG;AACH,MAAa,UAAU;IAcrB;;OAEG;IACH,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE;;;OAGG;IACI,UAAU,CAAC,UAAkB;QAClC,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,MAAe;QACtC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD;;;OAGG;IACI,qCAAqC,CAAC,MAAwB;QACnE,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACzD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAUD;QA6PQ,YAAO,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QAC3B,YAAO,GAAG,yBAAO,CAAC,MAAM,EAAE,CAAC;QA7PjC,IAAI,CAAC,MAAM,GAAG,yBAAO,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,mBAAQ,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,qBAAS,CAAC,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,0BAAQ,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAG,6BAA6B;QAC5D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IACD;;;;;;MAME;IACK,MAAM,CAAC,MAAM,CAAC,MAA4B,EAAE,aAAsB,KAAK;QAC5E,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,+BAA+B,CAAC,QAAkB;QAC9D,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,mBAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,6DAA6D;IACtD,MAAM,CAAC,+BAA+B,CAAC,IAAc,EAAE,OAAiB;QAC7E,MAAM,MAAM,GAAG;YACb,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;SAC3C,CAAC,IAAI,CAAC,CAAC,KAAc,EAAE,KAAc,EAAU,EAAE;YAChD,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;YACxB,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC7C,mDAAmD;QACnD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;YACrB,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;YACrB,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,qBAAqB,CAAC,MAAiB;QACnD,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,OAAO,CAAC;QACjB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,8BAA8B,CAAC,MAAW,EAAE,eAAyB;QACjF,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE;YAC/C,OAAO,SAAS,CAAC;QACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG;YACT,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,0BAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,mBAAQ,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,CAAC,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,CAAC,GAAG,GAAG;YACjB,OAAO,SAAS,CAAC;QACnB,UAAU,CAAC,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,GAAG;YACT,WAAW,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,eAAe,GAAG,qBAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvF,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,0BAA0B,CAAC,KAA6B,EAAE,KAA6B;QACnG,IAAI,KAAK,IAAI,KAAK;eACb,mBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAE,mDAAmD;YAC1H,IAAI,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;mBACjF,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAClE,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClF,oCAAoC;oBACpC,IAAI,mBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;wBAC/E,OAAO,IAAI,CAAC;oBACd,WAAW;oBACX,+BAA+B;oBAC/B,mDAAmD;oBACnD,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClD,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClD,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC;wBAC3B,OAAO,IAAI,CAAC;oBACd,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,qCAAqC;gBACrC,MAAM,OAAO,GAAG,0BAAQ,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,0BAAQ,CAAC,MAAM,EAAE,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACnD,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACnD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;wBACtC,OAAO,KAAK,CAAC;gBACjB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qEAAqE;IAC9D,SAAS,CAAC,MAAgB;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM;YACR,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;YAE5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,0DAA0D;IACnD,gCAAgC,CAAC,MAAiB;QACvD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CACzB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACnB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACnB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACnB,GAAG,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,8DAA8D;IACvD,kCAAkC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;MAGE;IACK,uBAAuB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;QAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,2EAA2E;IACpE,6BAA6B,CAAC,SAAiB;QACpD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtH,CAAC;IAKD;;;;MAIE;IACK,2BAA2B,CAAC,MAAyB,EAAE,MAAa,EAAE,MAAa;QACxF,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ;YACjC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAChG,CAAC,CAAC,iBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClH,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAElH,gHAAgH;QAChH,mBAAmB;QACnB,iEAAiE;QACjE,MAAM,IAAI,GAAG,mBAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACnI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAEhE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAEhE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,uEAAuE;IAChE,4BAA4B,CAAC,KAAa,EAAE,WAAmB;QACpE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,iBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1J,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IACD,4DAA4D;IACrD,wBAAwB,CAAC,MAAe,EAAE,MAAe;QAC9D,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5H,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,GAAG,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5H,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEjE,CAAC;IAID;;;;;OAKG;IACI,uCAAuC,CAAC,SAA4B,EAAE,MAAwB;QACnG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,+BAA+B,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IACD,mBAAmB;IACnB;;;;;;;;;;;OAWG;IACI,qCAAqC,CAAC,SAAiB,EAAE,SAAiB,EAAE,SAAiB,EAAE,IAAY,EAChH,MAAa,EAAE,OAAc,EAAE,OAAc;QAC7C,MAAM,kBAAkB,GAAG,mBAAQ,CAAC,eAAe,CACjD,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAC1B,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAC1B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,mBAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,mBAAQ,CAAC,eAAe,CACxC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACjD,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,GAAG,SAAS,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IACD;;;;;OAKG;IACI,kBAAkB,CAAC,KAAiB,EAAE,KAAa;QACxD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7J,CAAC;IAED;;;;;KAKC;IACM,4BAA4B,CAAC,MAAe,EAAE,QAAkB,EAAE,KAAa;QACpF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzI,CAAC;IACD;;OAEG;IACI,MAAM;QACX,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACxB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAChD,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;SAC5C,CAAC;IACJ,CAAC;CACF;AAhZD,gCAgZC","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\n// import { Point2d } from \"./Geometry2d\";\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { XAndY, XYAndZ } from \"../geometry3d/XYZProps\";\r\nimport { Matrix4d } from \"./Matrix4d\";\r\nimport { Point4d } from \"./Point4d\";\r\n\r\n/**\r\n * A MomentData structure exists in several levels:\r\n * * First level: as a carrier of sums of inertial products that determine moments.\r\n * * origin = local origin used as moments are summed.\r\n * * sums = array of summed moments.\r\n * * The [i,j] entry of the sums is a summed or integrated moment for product of axis i and j.\r\n * * axes 0,1,2 are x,y,z\r\n * * e.g. entry [0,1] is summed product xy\r\n * * axis 3 is \"w\", which is 1 in sums.\r\n * * e.g. entry 03 is summed x\r\n * * In this level,\r\n * * the `absoluteQuantity` member is undefined.\r\n * * the `localToWorldMap` and `radiiOfGyration` are created by have undefined contents.\r\n * * Second level: after a call to inertiaProductsToPrincipalAxes, the `localToWorldMap`, `absoluteQuantity` and `radiiOfGyration` are filled in.\r\n * @public\r\n */\r\nexport class MomentData {\r\n /** Origin used for sums. */\r\n public origin: Point3d;\r\n /** flag to request deferred origin setup. */\r\n public needOrigin: boolean;\r\n /** Moment sums.\r\n * * Set to zero at initialization and if requested later.\r\n * * Accumulated during data entry phase.\r\n */\r\n public sums: Matrix4d;\r\n /** the mapping between principal and world system.\r\n * * This set up with its inverse already constructed.\r\n */\r\n public localToWorldMap: Transform;\r\n /** Return the lower-right (3,3) entry in the sums.\r\n * * This is the quantity (i.e. length, area, or volume) summed\r\n */\r\n public get quantitySum(): number { return this.sums.atIJ(3, 3); }\r\n /** Return a scale factor to make these sums match the target orientation sign.\r\n * * 1.0 if `this.quantitySum` has the same sign as `targetSign`.\r\n * * -1.0 if `this.quantitySum` has the opposite sign from `targetSign`\r\n */\r\n public signFactor(targetSign: number): number {\r\n return targetSign * this.quantitySum > 0 ? 1.0 : -1.0;\r\n }\r\n\r\n /**\r\n * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.\r\n *\r\n */\r\n public setOriginIfNeeded(origin: Point3d) {\r\n if (this.needOrigin) {\r\n this.origin.setFromPoint3d(origin);\r\n this.needOrigin = false;\r\n }\r\n }\r\n /**\r\n * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.\r\n *\r\n */\r\n public setOriginFromGrowableXYZArrayIfNeeded(points: GrowableXYZArray) {\r\n if (this.needOrigin && points.length > 0) {\r\n points.getPoint3dAtCheckedPointIndex(0, this.origin);\r\n this.needOrigin = false;\r\n }\r\n }\r\n\r\n /**\r\n * If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag.\r\n *\r\n */\r\n public setOriginXYZIfNeeded(x: number, y: number, z: number) {\r\n if (this.needOrigin) {\r\n this.origin.set(x, y, z);\r\n this.needOrigin = false;\r\n }\r\n }\r\n\r\n /** radii of gyration (square roots of principal second moments)\r\n */\r\n public radiusOfGyration: Vector3d;\r\n /** principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by\r\n *\r\n */\r\n public absoluteQuantity?: number;\r\n\r\n private constructor() {\r\n this.origin = Point3d.createZero();\r\n this.sums = Matrix4d.createZero();\r\n this.localToWorldMap = Transform.createIdentity();\r\n this.radiusOfGyration = Vector3d.create();\r\n this.needOrigin = false;\r\n this.absoluteQuantity = 0.1; // so optimizer sees its type\r\n this.absoluteQuantity = undefined;\r\n }\r\n /** Create moments with optional origin.\r\n * * origin and needOrigin are quirky.\r\n * * (undefined, true) sets up to use first incoming point as origin.\r\n * * (origin) sets up to use that durable origin, set needsOrigin flag false\r\n * * (origin, true) the \"true\" is meaningless\r\n * * (undefined, false) makes 000 the durable origin\r\n */\r\n public static create(origin?: Point3d | undefined, needOrigin: boolean = false): MomentData {\r\n const data = new MomentData();\r\n data.needOrigin = needOrigin;\r\n if (origin) {\r\n data.origin.setFromPoint3d(origin);\r\n data.needOrigin = false;\r\n }\r\n return data;\r\n }\r\n /**\r\n * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`\r\n * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`\r\n */\r\n public static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d {\r\n const rr = products.sumDiagonal();\r\n const result = Matrix3d.createScale(rr, rr, rr);\r\n result.addScaledInPlace(products, -1.0);\r\n return result;\r\n }\r\n /** Sort the columns of the matrix for increasing moments. */\r\n public static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d) {\r\n const points = [\r\n axes.indexedColumnWithWeight(0, moments.x),\r\n axes.indexedColumnWithWeight(1, moments.y),\r\n axes.indexedColumnWithWeight(2, moments.z),\r\n ].sort((dataA: Point4d, dataB: Point4d): number => {\r\n if (dataA.w < dataB.w) return -1;\r\n if (dataA.w > dataB.w) return 1;\r\n return 0;\r\n });\r\n axes.setColumnsPoint4dXYZ(points[0], points[1], points[2]);\r\n if (axes.determinant() < 0)\r\n axes.scaleColumnsInPlace(-1.0, -1.0, -1.0);\r\n // prefer x and z positive -- y falls wherever . ..\r\n if (axes.at(0, 0) < 0.0)\r\n axes.scaleColumnsInPlace(-1.0, -1.0, 1.0);\r\n if (axes.at(2, 2) < 0.0)\r\n axes.scaleColumnsInPlace(1.0, -1.0, -1.0);\r\n moments.set(points[0].w, points[1].w, points[2].w);\r\n }\r\n\r\n /**\r\n * Return the principal moment data for an array of points.\r\n * @param points array of points\r\n */\r\n public static pointsToPrincipalAxes(points: Point3d[]): MomentData | undefined {\r\n const moments = new MomentData();\r\n if (points.length === 0)\r\n return moments;\r\n moments.clearSums(points[0]);\r\n moments.accumulatePointMomentsFromOrigin(points);\r\n return this.inertiaProductsToPrincipalAxes(moments.origin, moments.sums);\r\n }\r\n /**\r\n * Compute principal axes from inertial products\r\n * * The radii of gyration are sorted smallest to largest\r\n * * Hence x axis is long direction\r\n * * Hence planar data generates large moment as Z\r\n * @param origin The origin used for the inertia products.\r\n * @param inertiaProducts The inertia products -- sums or integrals of [xx,xy,xz,xw; yx,yy, yz,yw; zx,zy,zz,zw; wx,wy,wz,w]\r\n */\r\n public static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined {\r\n const moments = new MomentData();\r\n moments.sums.setFrom(inertiaProducts);\r\n moments.origin.setFrom(origin);\r\n if (!moments.shiftOriginAndSumsToCentroidOfSums())\r\n return undefined;\r\n const products = moments.sums.matrixPart();\r\n const w = moments.sums.weight();\r\n if (w < 0.0)\r\n products.scaleColumnsInPlace(-1, -1, -1);\r\n const tensor = MomentData.momentTensorFromInertiaProducts(products);\r\n const moment2 = Vector3d.create();\r\n const axisVectors = Matrix3d.createZero();\r\n tensor.fastSymmetricEigenvalues(axisVectors, moment2);\r\n if (moment2.x < 0.0)\r\n return undefined;\r\n MomentData.sortColumnsForIncreasingMoments(axisVectors, moment2);\r\n if (w < 0.0)\r\n axisVectors.scaleColumnsInPlace(1, -1, -1);\r\n moments.localToWorldMap = Transform.createOriginAndMatrix(moments.origin, axisVectors);\r\n moments.radiusOfGyration.set(\r\n Math.sqrt(Math.abs(moment2.x)), Math.sqrt(Math.abs(moment2.y)), Math.sqrt(Math.abs(moment2.z)));\r\n moments.radiusOfGyration.scaleInPlace(1.0 / Math.sqrt(Math.abs(w)));\r\n moments.absoluteQuantity = Math.abs(w);\r\n return moments;\r\n }\r\n /**\r\n * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`\r\n * * The members considered are\r\n * * origin of local to world map (i.e. centroid)\r\n * * radius of gyration\r\n * * axes of localToWorldMap.\r\n * * Axis direction tests allow these quirks:\r\n * * opposite orientation is considered matched.\r\n * * Full xyz symmetry: If x,y,z radii are matched, axes are not tested.\r\n * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction is tested.\r\n * * If either or both are undefined, returns false.\r\n * @param dataA first set of moments\r\n * @param dataB second set of moments\r\n */\r\n public static areEquivalentPrincipalAxes(dataA: MomentData | undefined, dataB: MomentData | undefined): boolean {\r\n if (dataA && dataB\r\n && Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { // um.. need different tolerance for area, volume?)\r\n if (dataA.localToWorldMap.getOrigin().isAlmostEqual(dataB.localToWorldMap.getOrigin())\r\n && dataA.radiusOfGyration.isAlmostEqual(dataB.radiusOfGyration)) {\r\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.y)) {\r\n // We have at least xy symmetry ....\r\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.z))\r\n return true;\r\n // just xy.\r\n // allow opposite z directions.\r\n // If the z's are aligned, x an dy can spin freely.\r\n const zA = dataA.localToWorldMap.matrix.columnZ();\r\n const zB = dataB.localToWorldMap.matrix.columnZ();\r\n if (zA.isParallelTo(zB, true))\r\n return true;\r\n return false;\r\n }\r\n // no symmetry. Test all three axes.\r\n const vectorA = Vector3d.create();\r\n const vectorB = Vector3d.create();\r\n for (let i = 0; i < 3; i++) {\r\n dataA.localToWorldMap.matrix.getColumn(i, vectorA);\r\n dataB.localToWorldMap.matrix.getColumn(i, vectorB);\r\n if (!vectorA.isParallelTo(vectorB, true))\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Clear the MomentData sums to zero, and establish a new origin. */\r\n public clearSums(origin?: Point3d) {\r\n this.sums.setZero();\r\n if (origin)\r\n this.origin.setFrom(origin);\r\n else\r\n this.origin.setZero();\r\n }\r\n /** Accumulate products-of-components for given points. */\r\n public accumulatePointMomentsFromOrigin(points: Point3d[]) {\r\n for (const p of points) {\r\n this.sums.addMomentsInPlace(\r\n p.x - this.origin.x,\r\n p.y - this.origin.y,\r\n p.z - this.origin.z,\r\n 1.0);\r\n }\r\n }\r\n /** revise the accumulated sums to be \"around the centroid\" */\r\n public shiftOriginAndSumsToCentroidOfSums(): boolean {\r\n const xyz = this.sums.columnW().realPoint();\r\n if (xyz) {\r\n this.shiftOriginAndSumsByXYZ(xyz.x, xyz.y, xyz.z);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /** revise the accumulated sums\r\n * * add ax,ay,ax to the origin coordinates.\r\n * * apply the negative translation to the sums.\r\n */\r\n public shiftOriginAndSumsByXYZ(ax: number, ay: number, az: number) {\r\n this.origin.addXYZInPlace(ax, ay, az);\r\n this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);\r\n }\r\n /** revise the accumulated sums so they are based at a specified origin. */\r\n public shiftOriginAndSumsToNewOrigin(newOrigin: XYAndZ) {\r\n this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);\r\n }\r\n private static _vectorA?: Point4d;\r\n private static _vectorB?: Point4d;\r\n private static _vectorC?: Point4d;\r\n\r\n /** compute moments of a triangle from the origin to the given line.\r\n * Accumulate them to this.sums.\r\n * * If `pointA` is undefined, use `this.origin` as pointA.\r\n * * If `this.needOrigin` is set, pointB is used\r\n */\r\n public accumulateTriangleMomentsXY(pointA: XAndY | undefined, pointB: XAndY, pointC: XAndY) {\r\n this.setOriginXYZIfNeeded(pointB.x, pointB.y, 0.0);\r\n const x0 = this.origin.x;\r\n const y0 = this.origin.y;\r\n const vectorA = MomentData._vectorA =\r\n pointA !== undefined ? Point4d.create(pointA.x - x0, pointA.y - y0, 0.0, 1.0, MomentData._vectorA)\r\n : Point4d.create(this.origin.x, this.origin.y, 0.0, 1.0, MomentData._vectorA);\r\n const vectorB = MomentData._vectorB = Point4d.create(pointB.x - x0, pointB.y - y0, 0.0, 1.0, MomentData._vectorB);\r\n const vectorC = MomentData._vectorC = Point4d.create(pointC.x - x0, pointC.y - y0, 0.0, 1.0, MomentData._vectorC);\r\n\r\n // accumulate Return product integrals I(0<=u<=1) I (0<=v<= u) (w*W + u *U + v * V)(w*W + u *U + v * V)^ du dv\r\n // where w = 1-u-v\r\n // W = column vector (point00.x, point00.y, point00.z, 1.0) etc.\r\n const detJ = Geometry.crossProductXYXY(vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorC.x - vectorA.x, vectorC.y - vectorA.y);\r\n if (detJ !== 0.0) {\r\n const r1_12 = detJ / 12.0;\r\n const r1_24 = detJ / 24.0;\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_12);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorC, r1_24);\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_12);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorC, r1_24);\r\n\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorA, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorB, r1_24);\r\n this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);\r\n }\r\n }\r\n /** add scaled outer product of (4d, unit weight) point to this.sums */\r\n public accumulateScaledOuterProduct(point: XYAndZ, scaleFactor: number) {\r\n this.setOriginXYZIfNeeded(point.x, point.y, 0.0);\r\n const vectorA = MomentData._vectorA = Point4d.create(point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, scaleFactor);\r\n }\r\n /** Accumulate wire moment integral from pointA to pointB */\r\n public accumulateLineMomentsXYZ(pointA: Point3d, pointB: Point3d) {\r\n this.setOriginXYZIfNeeded(pointA.x, pointA.y, pointA.z);\r\n const x0 = this.origin.x;\r\n const y0 = this.origin.y;\r\n const z0 = this.origin.z;\r\n const vectorA = MomentData._vectorA = Point4d.create(pointA.x - x0, pointA.y - y0, pointA.z - z0, 1.0, MomentData._vectorA);\r\n const vectorB = MomentData._vectorB = Point4d.create(pointB.x - x0, pointB.y - y0, pointB.z - z0, 1.0, MomentData._vectorB);\r\n const detJ = pointA.distance(pointB);\r\n const r1_3 = detJ / 3.0;\r\n const r1_6 = detJ / 6.0;\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_3);\r\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_6);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_6);\r\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);\r\n\r\n }\r\n\r\n private _point0 = Point3d.create();\r\n private _point1 = Point3d.create();\r\n /** compute moments of triangles from a base point to the given linestring.\r\n * Accumulate them to this.sums.\r\n * * If `pointA` is undefined, use `this.origin` as pointA.\r\n * * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.\r\n *\r\n */\r\n public accumulateTriangleToLineStringMomentsXY(sweepBase: XAndY | undefined, points: GrowableXYZArray) {\r\n const n = points.length;\r\n if (n > 1) {\r\n points.getPoint3dAtUncheckedPointIndex(0, this._point0);\r\n for (let i = 1; i < n; i++) {\r\n points.getPoint3dAtUncheckedPointIndex(i, this._point1);\r\n this.accumulateTriangleMomentsXY(sweepBase, this._point0, this._point1);\r\n this._point0.setFromPoint3d(this._point1);\r\n }\r\n }\r\n }\r\n // cspell:word ABAT\r\n /**\r\n * * Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0;0,0,0,0;0,0,0,1].\r\n * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin]. (Column weights 0001) (only xy parts of vectors)\r\n * * scale by detJ for the xy-only determinant of the vectors.\r\n * @param productXX\r\n * @param productXY\r\n * @param productYY\r\n * @param area Area in caller's system\r\n * @param origin Caller's origin\r\n * @param vectorU Caller's U axis (not necessarily unit)\r\n * @param vectorV Caller's V axis (not necessarily unit)\r\n */\r\n public accumulateXYProductsInCentroidalFrame(productXX: number, productXY: number, productYY: number, area: number,\r\n origin: XAndY, vectorU: XAndY, vectorV: XAndY) {\r\n const centroidalProducts = Matrix4d.createRowValues(\r\n productXX, productXY, 0, 0,\r\n productXY, productYY, 0, 0,\r\n 0, 0, 0, 0,\r\n 0, 0, 0, area);\r\n const detJ = Geometry.crossProductXYXY(vectorU.x, vectorV.x, vectorU.y, vectorV.y);\r\n const placement = Matrix4d.createRowValues(\r\n vectorU.x, vectorV.x, 0, origin.x - this.origin.x,\r\n vectorU.y, vectorV.y, 0, origin.y - this.origin.y,\r\n 0, 0, 0, 0,\r\n 0, 0, 0, 1);\r\n const AB = placement.multiplyMatrixMatrix(centroidalProducts);\r\n const ABAT = AB.multiplyMatrixMatrixTranspose(placement);\r\n this.sums.addScaledInPlace(ABAT, detJ);\r\n }\r\n /**\r\n * Accumulate sums from other moments.\r\n * * scale by given scaleFactor (e.g. sign to correct orientation)\r\n * * pull the origin from `other` if `this` needs an origin.\r\n * *\r\n */\r\n public accumulateProducts(other: MomentData, scale: number) {\r\n this.setOriginIfNeeded(other.origin);\r\n this.sums.addTranslationSandwichInPlace(other.sums, this.origin.x - other.origin.x, this.origin.y - other.origin.y, this.origin.z - other.origin.z, scale);\r\n }\r\n\r\n /**\r\n * Accumulate sums from Matrix4d and origin.\r\n * * scale by given scaleFactor (e.g. sign to correct orientation)\r\n * * trap the origin if `this` needs an origin.\r\n * *\r\n */\r\n public accumulateProductsFromOrigin(origin: Point3d, products: Matrix4d, scale: number) {\r\n this.setOriginIfNeeded(origin);\r\n this.sums.addTranslationSandwichInPlace(products, this.origin.x - origin.x, this.origin.y - origin.y, this.origin.z - origin.z, scale);\r\n }\r\n /**\r\n * Convert to a json data object with:\r\n */\r\n public toJSON(): any {\r\n return {\r\n origin: this.origin,\r\n sums: this.sums.toJSON(),\r\n radiusOfGyration: this.radiusOfGyration.toJSON(),\r\n localToWorld: this.localToWorldMap.toJSON(),\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MomentData.js","sourceRoot":"","sources":["../../../src/geometry4d/MomentData.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:word ABAT\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { XAndY, XYAndZ } from \"../geometry3d/XYZProps\";\nimport { Matrix4d } from \"./Matrix4d\";\nimport { Point4d } from \"./Point4d\";\n\n/**\n * A MomentData structure exists in several levels:\n * * First level: as a carrier of sums of inertial products that determine moments.\n * * origin = local origin used as moments are summed.\n * * sums = array of summed moments.\n * * The [i,j] entry of the sums is a summed or integrated moment for product of axis i and j.\n * * axes 0,1,2 are x,y,z.\n * * e.g. entry [0,1] is summed product xy\n * * axis 3 is \"w\", which is 1 in sums.\n * * e.g. entry 03 is summed x.\n * * In this level:\n * * the `absoluteQuantity` member is undefined.\n * * the `localToWorldMap` and `radiiOfGyration` are created by have undefined contents.\n * * Second level: after a call to inertiaProductsToPrincipalAxes, the `localToWorldMap`, `absoluteQuantity` and\n * `radiiOfGyration` are filled in.\n * @public\n */\nexport class MomentData {\n /** Origin used for sums. */\n public origin: Point3d;\n /** Flag to request deferred origin setup. */\n public needOrigin: boolean;\n /**\n * Moment sums.\n * * Set to zero at initialization and if requested later.\n * * Accumulated during data entry phase.\n */\n public sums: Matrix4d;\n /**\n * The mapping between principal and world system.\n * * This set up with its inverse already constructed.\n */\n public localToWorldMap: Transform;\n // private variables\n private static _vectorA?: Point4d;\n private static _vectorB?: Point4d;\n private static _vectorC?: Point4d;\n private _point0 = Point3d.create();\n private _point1 = Point3d.create();\n /**\n * Return the lower-right (3,3) entry in the sums.\n * * This is the quantity (i.e. length, area, or volume) summed.\n */\n public get quantitySum(): number {\n return this.sums.atIJ(3, 3);\n }\n /**\n * Return a scale factor to make these sums match the target orientation sign.\n * * 1.0 if `this.quantitySum` has the same sign as `targetSign`.\n * * -1.0 if `this.quantitySum` has the opposite sign from `targetSign`\n */\n public signFactor(targetSign: number): number {\n return targetSign * this.quantitySum > 0 ? 1.0 : -1.0;\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginIfNeeded(origin: Point3d) {\n if (this.needOrigin) {\n this.origin.setFromPoint3d(origin);\n this.needOrigin = false;\n }\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginFromGrowableXYZArrayIfNeeded(points: GrowableXYZArray) {\n if (this.needOrigin && points.length > 0) {\n points.getPoint3dAtCheckedPointIndex(0, this.origin);\n this.needOrigin = false;\n }\n }\n /** If `this.needOrigin` flag is set, copy `origin` to `this.origin` and clear the flag. */\n public setOriginXYZIfNeeded(x: number, y: number, z: number) {\n if (this.needOrigin) {\n this.origin.set(x, y, z);\n this.needOrigin = false;\n }\n }\n /** Radii of gyration (square roots of principal second moments). */\n public radiusOfGyration: Vector3d;\n /**\n * Principal quantity (e.g. length, area, or volume). This is undefined in raw moments, and becomes defined by\n * inertiaProductsToPrincipalAxes.\n */\n public absoluteQuantity?: number;\n /** Constructor. */\n private constructor() {\n this.origin = Point3d.createZero();\n this.sums = Matrix4d.createZero();\n this.localToWorldMap = Transform.createIdentity();\n this.radiusOfGyration = Vector3d.create();\n this.needOrigin = false;\n this.absoluteQuantity = 0.1; // so optimizer sees its type\n this.absoluteQuantity = undefined;\n }\n /**\n * Create moments with optional origin.\n * * Origin and needOrigin are quirky.\n * * (undefined, true) sets up to use first incoming point as origin.\n * * (origin) sets up to use that durable origin, set needsOrigin flag false.\n * * (origin, true) the \"true\" is meaningless.\n * * (undefined, false) makes 000 the durable origin.\n */\n public static create(origin?: Point3d | undefined, needOrigin: boolean = false): MomentData {\n const data = new MomentData();\n data.needOrigin = needOrigin;\n if (origin) {\n data.origin.setFromPoint3d(origin);\n data.needOrigin = false;\n }\n return data;\n }\n /**\n * Return the formal tensor of integrated values `[yy+zz,xy,xz][yx,xx+zz,yz][zx,xy,xx+yy]`.\n * @param products matrix of (integrated) `[xx,xy,xz][yx,yy,yz][zx,xy,zz]`.\n */\n public static momentTensorFromInertiaProducts(products: Matrix3d): Matrix3d {\n const rr = products.sumDiagonal();\n const result = Matrix3d.createScale(rr, rr, rr);\n result.addScaledInPlace(products, -1.0);\n return result;\n }\n /** Sort the columns of the matrix for increasing moments. */\n public static sortColumnsForIncreasingMoments(axes: Matrix3d, moments: Vector3d) {\n const points = [\n axes.indexedColumnWithWeight(0, moments.x),\n axes.indexedColumnWithWeight(1, moments.y),\n axes.indexedColumnWithWeight(2, moments.z),\n ].sort((dataA: Point4d, dataB: Point4d): number => {\n if (dataA.w < dataB.w) return -1;\n if (dataA.w > dataB.w) return 1;\n return 0;\n });\n axes.setColumnsPoint4dXYZ(points[0], points[1], points[2]);\n if (axes.determinant() < 0)\n axes.scaleColumnsInPlace(-1.0, -1.0, -1.0);\n // prefer x and z positive -- y falls wherever . ..\n if (axes.at(0, 0) < 0.0)\n axes.scaleColumnsInPlace(-1.0, -1.0, 1.0);\n if (axes.at(2, 2) < 0.0)\n axes.scaleColumnsInPlace(1.0, -1.0, -1.0);\n moments.set(points[0].w, points[1].w, points[2].w);\n }\n /**\n * Return the principal moment data for an array of points.\n * @param points array of points.\n */\n public static pointsToPrincipalAxes(points: Point3d[]): MomentData | undefined {\n const moments = new MomentData();\n if (points.length === 0)\n return moments;\n moments.clearSums(points[0]);\n moments.accumulatePointMomentsFromOrigin(points);\n return this.inertiaProductsToPrincipalAxes(moments.origin, moments.sums);\n }\n /**\n * Compute principal axes from inertial products.\n * * The radii of gyration are sorted smallest to largest.\n * * Hence x axis is long direction.\n * * Hence planar data generates large moment as Z.\n * @param origin The origin used for the inertia products.\n * @param inertiaProducts The inertia products: sums or integrals of [xx,xy,xz,xw; yx,yy, yz,yw; zx,zy,zz,zw; wx,wy,wz,w].\n */\n public static inertiaProductsToPrincipalAxes(origin: XYZ, inertiaProducts: Matrix4d): MomentData | undefined {\n const moments = new MomentData();\n moments.sums.setFrom(inertiaProducts);\n moments.origin.setFrom(origin);\n if (!moments.shiftOriginAndSumsToCentroidOfSums())\n return undefined;\n const products = moments.sums.matrixPart();\n const w = moments.sums.weight();\n if (w < 0.0)\n products.scaleColumnsInPlace(-1, -1, -1);\n const tensor = MomentData.momentTensorFromInertiaProducts(products);\n const moment2 = Vector3d.create();\n const axisVectors = Matrix3d.createZero();\n tensor.fastSymmetricEigenvalues(axisVectors, moment2);\n if (moment2.x < 0.0)\n return undefined;\n MomentData.sortColumnsForIncreasingMoments(axisVectors, moment2);\n if (w < 0.0)\n axisVectors.scaleColumnsInPlace(1, -1, -1);\n moments.localToWorldMap = Transform.createOriginAndMatrix(moments.origin, axisVectors);\n moments.radiusOfGyration.set(\n Math.sqrt(Math.abs(moment2.x)), Math.sqrt(Math.abs(moment2.y)), Math.sqrt(Math.abs(moment2.z)));\n moments.radiusOfGyration.scaleInPlace(1.0 / Math.sqrt(Math.abs(w)));\n moments.absoluteQuantity = Math.abs(w);\n return moments;\n }\n /**\n * Test for match among selected members as they exist after `inertiaProductsToPrincipalAxes`.\n * * The members considered are:\n * * origin of local to world map (i.e. centroid),\n * * radius of gyration,\n * * axes of localToWorldMap.\n * * Axis direction tests allow these quirks:\n * * opposite orientation is considered matched.\n * * Full xyz symmetry: If x,y,z radii are matched, axes are not tested.\n * * Symmetry in xy plane: If x and y radii are matched, the x and y axes area allowed to spin freely. Only Z direction\n * is tested.\n * * If either or both are undefined, returns false.\n * @param dataA first set of moments.\n * @param dataB second set of moments.\n */\n public static areEquivalentPrincipalAxes(dataA: MomentData | undefined, dataB: MomentData | undefined): boolean {\n if (dataA && dataB\n && Geometry.isSameCoordinate(dataA.quantitySum, dataB.quantitySum)) { // um.. need different tolerance for area, volume?)\n if (dataA.localToWorldMap.getOrigin().isAlmostEqual(dataB.localToWorldMap.getOrigin())\n && dataA.radiusOfGyration.isAlmostEqual(dataB.radiusOfGyration)) {\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.y)) {\n // We have at least xy symmetry ....\n if (Geometry.isSameCoordinate(dataA.radiusOfGyration.x, dataA.radiusOfGyration.z))\n return true;\n // just xy.\n // allow opposite z directions.\n // If the z's are aligned, x an dy can spin freely.\n const zA = dataA.localToWorldMap.matrix.columnZ();\n const zB = dataB.localToWorldMap.matrix.columnZ();\n if (zA.isParallelTo(zB, true))\n return true;\n return false;\n }\n // no symmetry. Test all three axes.\n const vectorA = Vector3d.create();\n const vectorB = Vector3d.create();\n for (let i = 0; i < 3; i++) {\n dataA.localToWorldMap.matrix.getColumn(i, vectorA);\n dataB.localToWorldMap.matrix.getColumn(i, vectorB);\n if (!vectorA.isParallelTo(vectorB, true))\n return false;\n }\n return true;\n }\n }\n return false;\n }\n /** Clear the MomentData sums to zero, and establish a new origin. */\n public clearSums(origin?: Point3d) {\n this.sums.setZero();\n if (origin)\n this.origin.setFrom(origin);\n else\n this.origin.setZero();\n }\n /** Accumulate products-of-components for given points. */\n public accumulatePointMomentsFromOrigin(points: Point3d[]) {\n for (const p of points) {\n this.sums.addMomentsInPlace(\n p.x - this.origin.x,\n p.y - this.origin.y,\n p.z - this.origin.z,\n 1.0,\n );\n }\n }\n /** Revise the accumulated sums to be \"around the centroid\". */\n public shiftOriginAndSumsToCentroidOfSums(): boolean {\n const xyz = this.sums.columnW().realPoint();\n if (xyz) {\n this.shiftOriginAndSumsByXYZ(xyz.x, xyz.y, xyz.z);\n return true;\n }\n return false;\n }\n\n /**\n * Revise the accumulated sums.\n * * add ax,ay,ax to the origin coordinates.\n * * apply the negative translation to the sums.\n */\n public shiftOriginAndSumsByXYZ(ax: number, ay: number, az: number) {\n this.origin.addXYZInPlace(ax, ay, az);\n this.sums.multiplyTranslationSandwichInPlace(-ax, -ay, -az);\n }\n /** Revise the accumulated sums so they are based at a specified origin. */\n public shiftOriginAndSumsToNewOrigin(newOrigin: XYAndZ) {\n this.shiftOriginAndSumsByXYZ(newOrigin.x - this.origin.x, newOrigin.y - this.origin.y, newOrigin.z - this.origin.z);\n }\n /**\n * Compute moments of a triangle from the origin to the given line.\n * Accumulate them to this.sums.\n * * If `pointA` is undefined, use `this.origin` as pointA.\n * * If `this.needOrigin` is set, pointB is used\n */\n public accumulateTriangleMomentsXY(pointA: XAndY | undefined, pointB: XAndY, pointC: XAndY) {\n this.setOriginXYZIfNeeded(pointB.x, pointB.y, 0.0);\n const x0 = this.origin.x;\n const y0 = this.origin.y;\n const vectorA = MomentData._vectorA =\n pointA !== undefined ? Point4d.create(pointA.x - x0, pointA.y - y0, 0.0, 1.0, MomentData._vectorA)\n : Point4d.create(this.origin.x, this.origin.y, 0.0, 1.0, MomentData._vectorA);\n const vectorB = MomentData._vectorB = Point4d.create(pointB.x - x0, pointB.y - y0, 0.0, 1.0, MomentData._vectorB);\n const vectorC = MomentData._vectorC = Point4d.create(pointC.x - x0, pointC.y - y0, 0.0, 1.0, MomentData._vectorC);\n // accumulate Return product integrals I(0<=u<=1) I (0<=v<= u) (w*W + u *U + v * V)(w*W + u *U + v * V)^ du dv\n // where w = 1-u-v\n // W = column vector (point00.x, point00.y, point00.z, 1.0) etc.\n const detJ = Geometry.crossProductXYXY(vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorC.x - vectorA.x, vectorC.y - vectorA.y);\n if (detJ !== 0.0) {\n const r1_12 = detJ / 12.0;\n const r1_24 = detJ / 24.0;\n\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_12);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorC, r1_24);\n\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_12);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorC, r1_24);\n\n this.sums.addScaledOuterProductInPlace(vectorC, vectorA, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorC, vectorB, r1_24);\n this.sums.addScaledOuterProductInPlace(vectorC, vectorC, r1_12);\n }\n }\n /** Add scaled outer product of (4d, unit weight) point to this.sums. */\n public accumulateScaledOuterProduct(point: XYAndZ, scaleFactor: number) {\n this.setOriginXYZIfNeeded(point.x, point.y, 0.0);\n const vectorA = MomentData._vectorA = Point4d.create(\n point.x - this.origin.x, point.y - this.origin.y, point.z - this.origin.z, 1.0, MomentData._vectorA,\n );\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, scaleFactor);\n }\n /** Accumulate wire moment integral from pointA to pointB */\n public accumulateLineMomentsXYZ(pointA: Point3d, pointB: Point3d) {\n this.setOriginXYZIfNeeded(pointA.x, pointA.y, pointA.z);\n const x0 = this.origin.x;\n const y0 = this.origin.y;\n const z0 = this.origin.z;\n const vectorA = MomentData._vectorA = Point4d.create(\n pointA.x - x0, pointA.y - y0, pointA.z - z0, 1.0, MomentData._vectorA,\n );\n const vectorB = MomentData._vectorB = Point4d.create(\n pointB.x - x0, pointB.y - y0, pointB.z - z0, 1.0, MomentData._vectorB,\n );\n const detJ = pointA.distance(pointB);\n const r1_3 = detJ / 3.0;\n const r1_6 = detJ / 6.0;\n this.sums.addScaledOuterProductInPlace(vectorA, vectorA, r1_3);\n this.sums.addScaledOuterProductInPlace(vectorA, vectorB, r1_6);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorA, r1_6);\n this.sums.addScaledOuterProductInPlace(vectorB, vectorB, r1_3);\n }\n /**\n * Compute moments of triangles from a base point to the given linestring.\n * Accumulate them to this.sums.\n * * If `pointA` is undefined, use `this.origin` as pointA.\n * * If `this.needOrigin` is set, the first point of the array is captured as local origin for subsequent sums.\n *\n */\n public accumulateTriangleToLineStringMomentsXY(sweepBase: XAndY | undefined, points: GrowableXYZArray) {\n const n = points.length;\n if (n > 1) {\n points.getPoint3dAtUncheckedPointIndex(0, this._point0);\n for (let i = 1; i < n; i++) {\n points.getPoint3dAtUncheckedPointIndex(i, this._point1);\n this.accumulateTriangleMomentsXY(sweepBase, this._point0, this._point1);\n this._point0.setFromPoint3d(this._point1);\n }\n }\n }\n /**\n * * Assemble XX, YY, XY products into a full matrix form [xx,xy,0,0; xy,yy,0,0;0,0,0,0;0,0,0,1].\n * * Sandwich this between transforms with columns [vectorU, vectorV, 0000, origin]. (Column weights 0001) (only xy\n * parts of vectors).\n * * scale by detJ for the xy-only determinant of the vectors.\n * @param productXX\n * @param productXY\n * @param productYY\n * @param area Area in caller's system.\n * @param origin Caller's origin.\n * @param vectorU Caller's U axis (not necessarily unit).\n * @param vectorV Caller's V axis (not necessarily unit).\n */\n public accumulateXYProductsInCentroidalFrame(\n productXX: number, productXY: number, productYY: number,\n area: number, origin: XAndY, vectorU: XAndY, vectorV: XAndY,\n ) {\n const centroidalProducts = Matrix4d.createRowValues(\n productXX, productXY, 0, 0,\n productXY, productYY, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, area,\n );\n const detJ = Geometry.crossProductXYXY(vectorU.x, vectorV.x, vectorU.y, vectorV.y);\n const placement = Matrix4d.createRowValues(\n vectorU.x, vectorV.x, 0, origin.x - this.origin.x,\n vectorU.y, vectorV.y, 0, origin.y - this.origin.y,\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n );\n const AB = placement.multiplyMatrixMatrix(centroidalProducts);\n const ABAT = AB.multiplyMatrixMatrixTranspose(placement);\n this.sums.addScaledInPlace(ABAT, detJ);\n }\n /**\n * Accumulate sums from other moments.\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\n * * Pull the origin from `other` if `this` needs an origin.\n */\n public accumulateProducts(other: MomentData, scale: number) {\n this.setOriginIfNeeded(other.origin);\n this.sums.addTranslationSandwichInPlace(\n other.sums, this.origin.x - other.origin.x, this.origin.y - other.origin.y, this.origin.z - other.origin.z, scale,\n );\n }\n\n /**\n * Accumulate sums from Matrix4d and origin.\n * * Scale by given scaleFactor (e.g. sign to correct orientation).\n * * Trap the origin if `this` needs an origin.\n */\n public accumulateProductsFromOrigin(origin: Point3d, products: Matrix4d, scale: number) {\n this.setOriginIfNeeded(origin);\n this.sums.addTranslationSandwichInPlace(\n products, this.origin.x - origin.x, this.origin.y - origin.y, this.origin.z - origin.z, scale,\n );\n }\n /** Convert to a json data object. */\n public toJSON(): any {\n return {\n origin: this.origin,\n sums: this.sums.toJSON(),\n radiusOfGyration: this.radiusOfGyration.toJSON(),\n localToWorld: this.localToWorldMap.toJSON(),\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PlaneByOriginAndVectors4d.js","sourceRoot":"","sources":["../../../src/geometry4d/PlaneByOriginAndVectors4d.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 { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point4d } from \"./Point4d\";\r\n\r\n/**\r\n * A PlaneByOriginAndVectors4d is a 4d origin and pair of 4d \"vectors\" defining a 4d plane.\r\n * * The parameterization of the plane is `X = origin + vectorU * u + vectorV * v`\r\n * * With particular weight values `origin.w === 1, vectorU.w === 0, vectorV.w === 0` this is like `Plane3dByOriginAndVectors`\r\n * * With other weights, the deweighted xyz coordinates of points on the 4d plane still form a 3d plane.\r\n * @public\r\n */\r\nexport class PlaneByOriginAndVectors4d {\r\n /** homogeneous origin */\r\n public origin: Point4d;\r\n /** homogeneous u-direction vector */\r\n public vectorU: Point4d;\r\n /** homogeneous v-direction vector */\r\n public vectorV: Point4d;\r\n private constructor(origin: Point4d, vectorU: Point4d, vectorV: Point4d) {\r\n this.origin = origin;\r\n this.vectorU = vectorU;\r\n this.vectorV = vectorV;\r\n }\r\n /** Return a clone of this plane */\r\n public clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result) {\r\n result.setFrom(this);\r\n return result;\r\n }\r\n return new PlaneByOriginAndVectors4d(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\r\n }\r\n /** copy all content from other plane */\r\n public setFrom(other: PlaneByOriginAndVectors4d): void {\r\n this.origin.setFrom(other.origin);\r\n this.vectorU.setFrom(other.vectorU);\r\n this.vectorV.setFrom(other.vectorV);\r\n }\r\n /** Return true if origin, vectorU, and vectorV pass isAlmostEqual. */\r\n public isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean {\r\n return this.origin.isAlmostEqual(other.origin)\r\n && this.vectorU.isAlmostEqual(other.vectorU)\r\n && this.vectorV.isAlmostEqual(other.vectorV);\r\n }\r\n /** Create a plane with (copies of) origin, vectorU, vectorV parameters, all given as full 4d points.\r\n */\r\n public static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result) {\r\n result.setOriginAndVectors(origin, vectorU, vectorV);\r\n return result;\r\n }\r\n return new PlaneByOriginAndVectors4d(origin.clone(), vectorU.clone(), vectorV.clone());\r\n }\r\n /** Set all numeric data from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\r\n public setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d {\r\n this.origin.set(x0, y0, z0, w0);\r\n this.vectorU.set(ux, uy, uz, uw);\r\n this.vectorV.set(vx, vy, vz, vw);\r\n return this;\r\n }\r\n /** Copy the contents of origin, vectorU, vectorV parameters to respective member variables */\r\n public setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d {\r\n this.origin.setFrom(origin);\r\n this.vectorU.setFrom(vectorU);\r\n this.vectorV.setFrom(vectorV);\r\n return this;\r\n }\r\n /** Create from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\r\n public static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n if (result)\r\n return result.setOriginAndVectorsXYZW(x0, y0, z0, w0, ux, uy, uz, uw, vx, vy, vz, vw);\r\n return new PlaneByOriginAndVectors4d(Point4d.create(x0, y0, z0, w0), Point4d.create(ux, uy, uz, uw), Point4d.create(vx, vy, vz, uw));\r\n }\r\n /** create from origin point, (u=1,v=0) point, and (u=0,v=1) point. */\r\n public static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(origin.x, origin.y, origin.z, 1.0, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, 0.0, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, 0.0, result);\r\n }\r\n /** evaluate plane point (full 3d) at given (u,v) coordinate. */\r\n public fractionToPoint(u: number, v: number, result?: Point4d): Point4d {\r\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** create a new plane which maps to the cartesian xy plane. */\r\n public static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\r\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, result);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PlaneByOriginAndVectors4d.js","sourceRoot":"","sources":["../../../src/geometry4d/PlaneByOriginAndVectors4d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Point4d } from \"./Point4d\";\n\n/**\n * A PlaneByOriginAndVectors4d is a 4d origin and pair of 4d \"vectors\" defining a 4d plane.\n * * The parameterization of the plane is `X = origin + vectorU * u + vectorV * v`\n * * With particular weight values `origin.w === 1, vectorU.w === 0, vectorV.w === 0` this is like `Plane3dByOriginAndVectors`\n * * With other weights, the deweighted xyz coordinates of points on the 4d plane still form a 3d plane.\n * @public\n */\nexport class PlaneByOriginAndVectors4d {\n /** homogeneous origin */\n public origin: Point4d;\n /** homogeneous u-direction vector */\n public vectorU: Point4d;\n /** homogeneous v-direction vector */\n public vectorV: Point4d;\n private constructor(origin: Point4d, vectorU: Point4d, vectorV: Point4d) {\n this.origin = origin;\n this.vectorU = vectorU;\n this.vectorV = vectorV;\n }\n /** Return a clone of this plane */\n public clone(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result) {\n result.setFrom(this);\n return result;\n }\n return new PlaneByOriginAndVectors4d(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\n }\n /** copy all content from other plane */\n public setFrom(other: PlaneByOriginAndVectors4d): void {\n this.origin.setFrom(other.origin);\n this.vectorU.setFrom(other.vectorU);\n this.vectorV.setFrom(other.vectorV);\n }\n /** Return true if origin, vectorU, and vectorV pass isAlmostEqual. */\n public isAlmostEqual(other: PlaneByOriginAndVectors4d): boolean {\n return this.origin.isAlmostEqual(other.origin)\n && this.vectorU.isAlmostEqual(other.vectorU)\n && this.vectorV.isAlmostEqual(other.vectorV);\n }\n /** Create a plane with (copies of) origin, vectorU, vectorV parameters, all given as full 4d points.\n */\n public static createOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result) {\n result.setOriginAndVectors(origin, vectorU, vectorV);\n return result;\n }\n return new PlaneByOriginAndVectors4d(origin.clone(), vectorU.clone(), vectorV.clone());\n }\n /** Set all numeric data from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\n public setOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number): PlaneByOriginAndVectors4d {\n this.origin.set(x0, y0, z0, w0);\n this.vectorU.set(ux, uy, uz, uw);\n this.vectorV.set(vx, vy, vz, vw);\n return this;\n }\n /** Copy the contents of origin, vectorU, vectorV parameters to respective member variables */\n public setOriginAndVectors(origin: Point4d, vectorU: Point4d, vectorV: Point4d): PlaneByOriginAndVectors4d {\n this.origin.setFrom(origin);\n this.vectorU.setFrom(vectorU);\n this.vectorV.setFrom(vectorV);\n return this;\n }\n /** Create from complete list of (x,y,z,w) in origin, vectorU, and vectorV */\n public static createOriginAndVectorsXYZW(x0: number, y0: number, z0: number, w0: number, ux: number, uy: number, uz: number, uw: number, vx: number, vy: number, vz: number, vw: number, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n if (result)\n return result.setOriginAndVectorsXYZW(x0, y0, z0, w0, ux, uy, uz, uw, vx, vy, vz, vw);\n return new PlaneByOriginAndVectors4d(Point4d.create(x0, y0, z0, w0), Point4d.create(ux, uy, uz, uw), Point4d.create(vx, vy, vz, uw));\n }\n /** create from origin point, (u=1,v=0) point, and (u=0,v=1) point. */\n public static createOriginAndTargets3d(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(origin.x, origin.y, origin.z, 1.0, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, 0.0, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, 0.0, result);\n }\n /** evaluate plane point (full 3d) at given (u,v) coordinate. */\n public fractionToPoint(u: number, v: number, result?: Point4d): Point4d {\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\n }\n /** create a new plane which maps to the cartesian xy plane. */\n public static createXYPlane(result?: PlaneByOriginAndVectors4d): PlaneByOriginAndVectors4d {\n return PlaneByOriginAndVectors4d.createOriginAndVectorsXYZW(0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, result);\n }\n}\n"]}