@itwin/core-geometry 4.1.0-dev.7 → 4.1.0-dev.70

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 (542) hide show
  1. package/CHANGELOG.md +82 -1
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  4. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.js +2 -2
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.js +1 -1
  9. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  10. package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
  11. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BezierCurveBase.js +2 -2
  13. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  14. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  15. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  16. package/lib/cjs/clipping/ClipPrimitive.js +2 -0
  17. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  18. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  19. package/lib/cjs/core-geometry.d.ts +3 -1
  20. package/lib/cjs/core-geometry.d.ts.map +1 -1
  21. package/lib/cjs/core-geometry.js +3 -1
  22. package/lib/cjs/core-geometry.js.map +1 -1
  23. package/lib/cjs/curve/Arc3d.d.ts +2 -1
  24. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  25. package/lib/cjs/curve/Arc3d.js +3 -2
  26. package/lib/cjs/curve/Arc3d.js.map +1 -1
  27. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  28. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  29. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
  30. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  31. package/lib/cjs/curve/CurveCollection.d.ts +36 -26
  32. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  33. package/lib/cjs/curve/CurveCollection.js +46 -39
  34. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  35. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  36. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  37. package/lib/cjs/curve/CurveFactory.d.ts +67 -3
  38. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveFactory.js +75 -7
  40. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  41. package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
  42. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  43. package/lib/cjs/curve/CurveLocationDetail.js +9 -7
  44. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  45. package/lib/cjs/curve/CurveOps.d.ts +77 -0
  46. package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
  47. package/lib/cjs/curve/CurveOps.js +160 -0
  48. package/lib/cjs/curve/CurveOps.js.map +1 -0
  49. package/lib/cjs/curve/CurvePrimitive.d.ts +17 -16
  50. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  51. package/lib/cjs/curve/CurvePrimitive.js +4 -3
  52. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  53. package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
  54. package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
  55. package/lib/cjs/curve/GeometryQuery.js +2 -2
  56. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  57. package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
  58. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  59. package/lib/cjs/curve/LineSegment3d.js +6 -6
  60. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  61. package/lib/cjs/curve/LineString3d.d.ts +2 -2
  62. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  63. package/lib/cjs/curve/LineString3d.js +3 -3
  64. package/lib/cjs/curve/LineString3d.js.map +1 -1
  65. package/lib/cjs/curve/Loop.d.ts +7 -5
  66. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  67. package/lib/cjs/curve/Loop.js +18 -6
  68. package/lib/cjs/curve/Loop.js.map +1 -1
  69. package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
  70. package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
  71. package/lib/cjs/curve/OffsetOptions.js +166 -0
  72. package/lib/cjs/curve/OffsetOptions.js.map +1 -0
  73. package/lib/cjs/curve/ParityRegion.d.ts +7 -7
  74. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  75. package/lib/cjs/curve/ParityRegion.js +19 -11
  76. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  77. package/lib/cjs/curve/Path.d.ts +6 -6
  78. package/lib/cjs/curve/Path.d.ts.map +1 -1
  79. package/lib/cjs/curve/Path.js +15 -9
  80. package/lib/cjs/curve/Path.js.map +1 -1
  81. package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
  82. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  83. package/lib/cjs/curve/ProxyCurve.js +7 -7
  84. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  85. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  86. package/lib/cjs/curve/RegionOps.d.ts +76 -56
  87. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  88. package/lib/cjs/curve/RegionOps.js +83 -60
  89. package/lib/cjs/curve/RegionOps.js.map +1 -1
  90. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
  91. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  92. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  93. package/lib/cjs/curve/StrokeOptions.js +6 -2
  94. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  95. package/lib/cjs/curve/UnionRegion.d.ts +6 -5
  96. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  97. package/lib/cjs/curve/UnionRegion.js +17 -8
  98. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  99. package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  100. package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  101. package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  102. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  103. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
  104. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  105. package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
  106. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  107. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  108. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  109. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
  110. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  112. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  113. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  114. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  116. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  117. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
  118. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  119. package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  120. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
  121. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  122. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
  123. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  124. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  125. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  126. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
  127. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  128. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
  129. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  130. package/lib/cjs/geometry3d/Angle.d.ts +9 -0
  131. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  132. package/lib/cjs/geometry3d/Angle.js +13 -0
  133. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  134. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  135. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  136. package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
  137. package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
  138. package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
  139. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  140. package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
  141. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  142. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  143. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  144. package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
  145. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  146. package/lib/cjs/geometry3d/GeometryHandler.d.ts +5 -5
  147. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  148. package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  149. package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
  150. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  151. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  152. package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
  153. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  154. package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
  155. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  156. package/lib/cjs/geometry3d/Matrix3d.js +32 -5
  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.d.ts +41 -32
  160. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  161. package/lib/cjs/geometry3d/Plane3d.js +11 -8
  162. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  163. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  164. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  165. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  166. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  167. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  168. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  169. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  170. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  171. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
  172. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  173. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
  174. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  175. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  176. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
  177. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  178. package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
  179. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  180. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  181. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  182. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  183. package/lib/cjs/geometry3d/PolygonOps.d.ts +1 -2
  184. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  185. package/lib/cjs/geometry3d/PolygonOps.js +2 -3
  186. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  187. package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
  188. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  189. package/lib/cjs/geometry3d/PolylineOps.js +55 -0
  190. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  191. package/lib/cjs/geometry3d/Range.d.ts +134 -94
  192. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  193. package/lib/cjs/geometry3d/Range.js +297 -145
  194. package/lib/cjs/geometry3d/Range.js.map +1 -1
  195. package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
  196. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
  197. package/lib/cjs/geometry3d/Ray2d.js +146 -0
  198. package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
  199. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  201. package/lib/cjs/geometry3d/Transform.d.ts +10 -3
  202. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  203. package/lib/cjs/geometry3d/Transform.js +18 -6
  204. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  205. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  206. package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
  207. package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
  208. package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
  209. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  210. package/lib/cjs/numerics/Newton.js.map +1 -1
  211. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  212. package/lib/cjs/numerics/Polynomials.js +0 -2
  213. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  214. package/lib/cjs/numerics/Quadrature.js +5 -5
  215. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  216. package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
  217. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  218. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  219. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  220. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  221. package/lib/cjs/polyface/PolyfaceQuery.d.ts +73 -12
  222. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  223. package/lib/cjs/polyface/PolyfaceQuery.js +117 -31
  224. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  225. package/lib/cjs/polyface/TaggedNumericData.js +1 -1
  226. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  227. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  228. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  229. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  230. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +11 -0
  231. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  232. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +79 -1
  233. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  234. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  235. package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
  236. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  237. package/lib/cjs/serialization/GeometrySamples.js +30 -0
  238. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  239. package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
  240. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  241. package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
  242. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  243. package/lib/cjs/solid/LinearSweep.d.ts +2 -1
  244. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  245. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  246. package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
  247. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  248. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  249. package/lib/cjs/solid/RuledSweep.d.ts +2 -1
  250. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  251. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  252. package/lib/cjs/solid/SweepContour.d.ts +2 -2
  253. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  254. package/lib/cjs/solid/SweepContour.js +9 -0
  255. package/lib/cjs/solid/SweepContour.js.map +1 -1
  256. package/lib/cjs/topology/ChainMerge.js +1 -1
  257. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  258. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  259. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
  260. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  261. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
  262. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  263. package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  264. package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
  265. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  266. package/lib/cjs/topology/RegularizeFace.js +3 -3
  267. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  268. package/lib/cjs/topology/Triangulation.js +1 -1
  269. package/lib/cjs/topology/Triangulation.js.map +1 -1
  270. package/lib/esm/Geometry.js.map +1 -1
  271. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  272. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  273. package/lib/esm/bspline/BSplineCurve.js +1 -1
  274. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  275. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  276. package/lib/esm/bspline/BSplineSurface.js +1 -1
  277. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  278. package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
  279. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  280. package/lib/esm/bspline/BezierCurveBase.js +1 -1
  281. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  282. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  283. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  284. package/lib/esm/clipping/ClipPrimitive.js +2 -0
  285. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  286. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  287. package/lib/esm/core-geometry.d.ts +3 -1
  288. package/lib/esm/core-geometry.d.ts.map +1 -1
  289. package/lib/esm/core-geometry.js +3 -1
  290. package/lib/esm/core-geometry.js.map +1 -1
  291. package/lib/esm/curve/Arc3d.d.ts +2 -1
  292. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  293. package/lib/esm/curve/Arc3d.js +2 -1
  294. package/lib/esm/curve/Arc3d.js.map +1 -1
  295. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  296. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  297. package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
  298. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  299. package/lib/esm/curve/CurveCollection.d.ts +36 -26
  300. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  301. package/lib/esm/curve/CurveCollection.js +46 -39
  302. package/lib/esm/curve/CurveCollection.js.map +1 -1
  303. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  304. package/lib/esm/curve/CurveCurve.js.map +1 -1
  305. package/lib/esm/curve/CurveFactory.d.ts +67 -3
  306. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  307. package/lib/esm/curve/CurveFactory.js +74 -6
  308. package/lib/esm/curve/CurveFactory.js.map +1 -1
  309. package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
  310. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  311. package/lib/esm/curve/CurveLocationDetail.js +9 -7
  312. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  313. package/lib/esm/curve/CurveOps.d.ts +77 -0
  314. package/lib/esm/curve/CurveOps.d.ts.map +1 -0
  315. package/lib/esm/curve/CurveOps.js +156 -0
  316. package/lib/esm/curve/CurveOps.js.map +1 -0
  317. package/lib/esm/curve/CurvePrimitive.d.ts +17 -16
  318. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  319. package/lib/esm/curve/CurvePrimitive.js +4 -3
  320. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  321. package/lib/esm/curve/GeometryQuery.d.ts +2 -2
  322. package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
  323. package/lib/esm/curve/GeometryQuery.js +2 -2
  324. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  325. package/lib/esm/curve/LineSegment3d.d.ts +7 -5
  326. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  327. package/lib/esm/curve/LineSegment3d.js +5 -5
  328. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  329. package/lib/esm/curve/LineString3d.d.ts +2 -2
  330. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  331. package/lib/esm/curve/LineString3d.js +2 -2
  332. package/lib/esm/curve/LineString3d.js.map +1 -1
  333. package/lib/esm/curve/Loop.d.ts +7 -5
  334. package/lib/esm/curve/Loop.d.ts.map +1 -1
  335. package/lib/esm/curve/Loop.js +18 -6
  336. package/lib/esm/curve/Loop.js.map +1 -1
  337. package/lib/esm/curve/OffsetOptions.d.ts +97 -0
  338. package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
  339. package/lib/esm/curve/OffsetOptions.js +161 -0
  340. package/lib/esm/curve/OffsetOptions.js.map +1 -0
  341. package/lib/esm/curve/ParityRegion.d.ts +7 -7
  342. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  343. package/lib/esm/curve/ParityRegion.js +19 -11
  344. package/lib/esm/curve/ParityRegion.js.map +1 -1
  345. package/lib/esm/curve/Path.d.ts +6 -6
  346. package/lib/esm/curve/Path.d.ts.map +1 -1
  347. package/lib/esm/curve/Path.js +15 -9
  348. package/lib/esm/curve/Path.js.map +1 -1
  349. package/lib/esm/curve/ProxyCurve.d.ts +5 -7
  350. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  351. package/lib/esm/curve/ProxyCurve.js +7 -7
  352. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  353. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  354. package/lib/esm/curve/RegionOps.d.ts +76 -56
  355. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  356. package/lib/esm/curve/RegionOps.js +84 -61
  357. package/lib/esm/curve/RegionOps.js.map +1 -1
  358. package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
  359. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  360. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  361. package/lib/esm/curve/StrokeOptions.js +6 -2
  362. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  363. package/lib/esm/curve/UnionRegion.d.ts +6 -5
  364. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  365. package/lib/esm/curve/UnionRegion.js +17 -8
  366. package/lib/esm/curve/UnionRegion.js.map +1 -1
  367. package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  368. package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  369. package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  370. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  371. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
  372. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  373. package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
  374. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  375. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  376. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  377. package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
  378. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  379. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  380. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  381. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  382. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  383. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  384. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  385. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
  386. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  387. package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  388. package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
  389. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  390. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
  391. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  392. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  393. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  394. package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
  395. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  396. package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
  397. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  398. package/lib/esm/geometry3d/Angle.d.ts +9 -0
  399. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  400. package/lib/esm/geometry3d/Angle.js +13 -0
  401. package/lib/esm/geometry3d/Angle.js.map +1 -1
  402. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  403. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  404. package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
  405. package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
  406. package/lib/esm/geometry3d/BilinearPatch.js +51 -55
  407. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  408. package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
  409. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  410. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  411. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  412. package/lib/esm/geometry3d/FrameBuilder.js +13 -11
  413. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  414. package/lib/esm/geometry3d/GeometryHandler.d.ts +5 -5
  415. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  416. package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  417. package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
  418. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  419. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  420. package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
  421. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  422. package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
  423. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  424. package/lib/esm/geometry3d/Matrix3d.js +32 -5
  425. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  426. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  427. package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
  428. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  429. package/lib/esm/geometry3d/Plane3d.js +11 -8
  430. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  431. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  432. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  433. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  434. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  435. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  436. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  437. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  438. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  439. package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
  440. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  441. package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
  442. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  443. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  444. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
  445. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  446. package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
  447. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  448. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  449. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  450. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  451. package/lib/esm/geometry3d/PolygonOps.d.ts +1 -2
  452. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  453. package/lib/esm/geometry3d/PolygonOps.js +2 -3
  454. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  455. package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
  456. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  457. package/lib/esm/geometry3d/PolylineOps.js +56 -1
  458. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  459. package/lib/esm/geometry3d/Range.d.ts +134 -94
  460. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  461. package/lib/esm/geometry3d/Range.js +297 -145
  462. package/lib/esm/geometry3d/Range.js.map +1 -1
  463. package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
  464. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
  465. package/lib/esm/geometry3d/Ray2d.js +142 -0
  466. package/lib/esm/geometry3d/Ray2d.js.map +1 -0
  467. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  468. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  469. package/lib/esm/geometry3d/Transform.d.ts +10 -3
  470. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  471. package/lib/esm/geometry3d/Transform.js +18 -6
  472. package/lib/esm/geometry3d/Transform.js.map +1 -1
  473. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  474. package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
  475. package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
  476. package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
  477. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  478. package/lib/esm/numerics/Newton.js.map +1 -1
  479. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  480. package/lib/esm/numerics/Polynomials.js +0 -2
  481. package/lib/esm/numerics/Polynomials.js.map +1 -1
  482. package/lib/esm/numerics/Quadrature.js +5 -5
  483. package/lib/esm/numerics/Quadrature.js.map +1 -1
  484. package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
  485. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  486. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  487. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  488. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  489. package/lib/esm/polyface/PolyfaceQuery.d.ts +73 -12
  490. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  491. package/lib/esm/polyface/PolyfaceQuery.js +117 -32
  492. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  493. package/lib/esm/polyface/TaggedNumericData.js +1 -1
  494. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  495. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  496. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  497. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  498. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +11 -0
  499. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  500. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +78 -1
  501. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  502. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  503. package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
  504. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  505. package/lib/esm/serialization/GeometrySamples.js +30 -0
  506. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  507. package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
  508. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  509. package/lib/esm/serialization/IModelJsonSchema.js +2 -7
  510. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  511. package/lib/esm/solid/LinearSweep.d.ts +2 -1
  512. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  513. package/lib/esm/solid/LinearSweep.js.map +1 -1
  514. package/lib/esm/solid/RotationalSweep.d.ts +2 -1
  515. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  516. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  517. package/lib/esm/solid/RuledSweep.d.ts +2 -1
  518. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  519. package/lib/esm/solid/RuledSweep.js.map +1 -1
  520. package/lib/esm/solid/SweepContour.d.ts +2 -2
  521. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  522. package/lib/esm/solid/SweepContour.js +9 -0
  523. package/lib/esm/solid/SweepContour.js.map +1 -1
  524. package/lib/esm/topology/ChainMerge.js +1 -1
  525. package/lib/esm/topology/ChainMerge.js.map +1 -1
  526. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  527. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
  528. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  529. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
  530. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  531. package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  532. package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
  533. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  534. package/lib/esm/topology/RegularizeFace.js +3 -3
  535. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  536. package/lib/esm/topology/Triangulation.js +1 -1
  537. package/lib/esm/topology/Triangulation.js.map +1 -1
  538. package/package.json +6 -17
  539. package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
  540. package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
  541. package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
  542. package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
@@ -351,7 +351,7 @@ class Point4dArray {
351
351
  }
352
352
  /** unpack from xyzw xyzw... array to array of Point3d and array of weight.
353
353
  */
354
- static unpackFloat64ArrayToPointsAndWeights(data, points, weights, pointFormatter = Point3d.create) {
354
+ static unpackFloat64ArrayToPointsAndWeights(data, points, weights, pointFormatter = (x, y, z) => Point3d.create(x, y, z)) {
355
355
  points.length = 0;
356
356
  weights.length = 0;
357
357
  for (let i = 0; i + 3 < data.length; i += 4) {
@@ -804,7 +804,7 @@ class Point3dArray {
804
804
  * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`
805
805
  */
806
806
  static cloneDeepJSONNumberArrays(data) {
807
- const collector = new PointStringDeepXYZArrayCollector(this.xyzToArray);
807
+ const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));
808
808
  VariantPointDataStream.streamXYZ(data, collector);
809
809
  return collector.claimResult();
810
810
  }
@@ -849,7 +849,7 @@ class Point3dArray {
849
849
  * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`
850
850
  */
851
851
  static cloneDeepXYZPoint3dArrays(data) {
852
- const collector = new PointStringDeepXYZArrayCollector(Point3d.create);
852
+ const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));
853
853
  VariantPointDataStream.streamXYZ(data, collector);
854
854
  return collector.claimResult();
855
855
  }
@@ -892,7 +892,7 @@ class Point3dArray {
892
892
  let n = points.length;
893
893
  // Get deep copy
894
894
  const xy1 = points.slice(0, n);
895
- xy1.sort(Geometry.lexicalXYLessThan);
895
+ xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));
896
896
  if (n < 3) {
897
897
  for (const p of xy1)
898
898
  hullPoints.push(p);
@@ -917,7 +917,7 @@ class Point3dArray {
917
917
  const i0 = hullPoints.length - 1;
918
918
  xy1.length = numInside;
919
919
  xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.
920
- xy1.sort(Geometry.lexicalXYLessThan);
920
+ xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));
921
921
  n = xy1.length;
922
922
  // xy1.back () is already on stack.
923
923
  hullPoints.push(xy1[n - 1]);
@@ -1 +1 @@
1
- {"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.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 CartesianGeometry\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\nimport { IndexedXYZCollection } from \"./IndexedXYZCollection\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\r\nimport { Point2d } from \"./Point2dVector2d\";\r\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\r\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\r\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\r\n\r\n/**\r\n *\r\n * @param numA first candidate -- presumed 0 or positive\r\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\r\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\r\n */\r\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\r\n\r\n if (numB !== undefined){\r\n const numC = numB * multiplyBy;\r\n if (numC >= 0 && numC <= numA)\r\n return numC;\r\n }\r\n return numA;\r\n}\r\n/**\r\n * The `NumberArray` class contains static methods that act on arrays of numbers.\r\n * @public\r\n */\r\nexport class NumberArray {\r\n /** return the sum of values in an array, The summation is done with correction terms which\r\n * improves last-bit numeric accuracy.\r\n */\r\n public static preciseSum(data: number[]): number {\r\n const n = data.length;\r\n if (n === 0)\r\n return 0.0;\r\n let sum = data[0];\r\n let c = 0.0;\r\n let y: number;\r\n let t: number;\r\n for (let i = 1; i < n; i++) {\r\n y = data[i] - c;\r\n t = sum + y;\r\n c = (t - sum) - y;\r\n sum = t;\r\n }\r\n return sum;\r\n }\r\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\r\n public static isExactEqual(dataA: any[] | Float64Array | undefined, dataB: any[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (dataA[i] !== dataB[i])\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** Return true if arrays have identical counts and entries equal within tolerance */\r\n public static isAlmostEqual(\r\n dataA: number[] | Float64Array | undefined,\r\n dataB: number[] | Float64Array | undefined,\r\n tolerance: number): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (Math.abs(dataA[i] - dataB[i]) >= tolerance) return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\r\n public static sum(data: number[] | Float64Array): number {\r\n let sum = 0;\r\n for (const x of data) { sum += x; }\r\n return sum;\r\n }\r\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\r\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\r\n if (data) {\r\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\r\n }\r\n return false;\r\n }\r\n /** Return the max absolute value in a array of numbers. */\r\n public static maxAbsArray(values: number[]): number {\r\n const arrLen = values.length;\r\n if (arrLen === 0) {\r\n return 0.0;\r\n }\r\n let a = Math.abs(values[0]);\r\n for (let i = 1; i < arrLen; i++) {\r\n const b = Math.abs(values[i]);\r\n if (a < b) {\r\n a = b;\r\n }\r\n }\r\n return a;\r\n }\r\n /** return the max absolute value of a pair of numbers */\r\n public static maxAbsTwo(a1: number, a2: number): number {\r\n a1 = Math.abs(a1);\r\n a2 = Math.abs(a2);\r\n return (a1 > a2) ? a1 : a2;\r\n }\r\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n\r\n /** Return the max absolute difference between corresponding entries in two Float64Array\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n /**\r\n * Return an array with indicated start and end points, maximum step size internally\r\n * @param low low value\r\n * @param high high value\r\n * @param step max permitted step\r\n */\r\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\r\n if (low === high)\r\n return [low];\r\n const delta = high - low;\r\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\r\n const result = [];\r\n result.push(low);\r\n for (let i = 1; i < numInterval; i++) {\r\n result.push(low + (i / numInterval) * delta);\r\n }\r\n result.push(high);\r\n return result;\r\n }\r\n\r\n /** copy numbers from variant sources to number[]. */\r\n public static create(source: number[] | Float64Array): number[] {\r\n const result: number[] = [];\r\n for (const q of source)\r\n result.push(q);\r\n return result;\r\n }\r\n\r\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\r\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\r\n const result: number[] = [];\r\n if (knots === undefined || knots.length === 0)\r\n return result;\r\n let multiplicity0 = 1;\r\n const knot0 = knots[0];\r\n const knot1 = knots[knots.length - 1];\r\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\r\n let multiplicity1 = 1;\r\n const k1 = knots.length - 1;\r\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\r\n\r\n for (let k = 0; k < target0; k++)\r\n result.push(knot0);\r\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\r\n result.push(knots[k]);\r\n for (let k = 0; k < target1; k++)\r\n result.push(knot1);\r\n return result;\r\n }\r\n\r\n /** Compute the linear combination s of the numbers and scales.\r\n * @param data array of numbers d_i.\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\r\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\r\n */\r\n public static linearCombination(data: number[], scales: number[]): number {\r\n const numTerms = Math.min(data.length, scales.length);\r\n let sum = 0;\r\n for (let i = 0; i < numTerms; ++i)\r\n sum += scales[i] * data[i];\r\n return sum;\r\n }\r\n\r\n /** Compute the linear combination s of the colors and scales.\r\n * * The result is another color if the scales are in [0,1] and sum to 1.\r\n * @param colors array of colors c_i (rgba in first four bytes).\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\r\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\r\n */\r\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\r\n const numTerms = Math.min(colors.length, scales.length);\r\n const bytes = [0,0,0,0];\r\n // compute a convex combination of each byte\r\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\r\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\r\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\r\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\r\n bytes[iByte] += fraction * colorComponent;\r\n }\r\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\r\n }\r\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\r\n }\r\n}\r\n\r\n/**\r\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\r\n * @public\r\n */\r\nexport class Point2dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: undefined | Point2d[], dataB: undefined | Point2d[]): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++) {\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\r\n return data.map((p: Point2d) => p.clone());\r\n }\r\n /**\r\n * Return the number of points when trailing points that match point 0 are excluded.\r\n * @param data array of XAndY points.\r\n */\r\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\r\n let n = data.length;\r\n if (n < 2)\r\n return n;\r\n const x0 = data[0].x;\r\n const y0 = data[0].y;\r\n while (n > 1) {\r\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\r\n return n;\r\n n--;\r\n }\r\n return n;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\r\n * @public\r\n */\r\nexport class Vector3dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: undefined | Vector3d[], dataB: undefined | Vector3d[]): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Vector3d data[]\r\n * @param data source data\r\n */\r\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\r\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\r\n }\r\n}\r\n\r\n/**\r\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\r\n * @public\r\n */\r\nexport class Point4dArray {\r\n /** pack each point and its corresponding weight into a buffer of xyzw xyzw ... */\r\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array,\r\n result?: Float64Array): Float64Array | undefined {\r\n if (Array.isArray(data) && data[0] instanceof Point3d) {\r\n const points = data as Point3d[];\r\n if (points.length !== weights.length)\r\n return undefined;\r\n result = result ? result : new Float64Array(4 * points.length);\r\n let i = 0;\r\n let k = 0;\r\n for (k = 0; k < points.length; k++) {\r\n result[i++] = points[k].x;\r\n result[i++] = points[k].y;\r\n result[i++] = points[k].z;\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n } else {\r\n const points = data as (Float64Array | number[]);\r\n const numPoints = weights.length;\r\n if (points.length !== 3 * numPoints)\r\n return undefined;\r\n let i = 0; let k;\r\n result = result ? result : new Float64Array(4 * numPoints);\r\n for (k = 0; k < numPoints; k++) {\r\n const k0 = 3 * k;\r\n result[i++] = points[k0];\r\n result[i++] = points[k0 + 1];\r\n result[i++] = points[k0 + 2];\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** pack x,y,z,w in Float64Array. */\r\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\r\n result = result ? result : new Float64Array(4 * data.length);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n result[i++] = p.w;\r\n }\r\n return result;\r\n }\r\n /** unpack from ... to array of Point4d */\r\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\r\n const result = [];\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\r\n }\r\n return result;\r\n }\r\n /** unpack from xyzw xyzw... array to array of Point3d and array of weight.\r\n */\r\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\r\n pointFormatter: (x: number, y: number, z: number) => any = Point3d.create) {\r\n points.length = 0;\r\n weights.length = 0;\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\r\n weights.push(data[i + 3]);\r\n }\r\n }\r\n private static _workPoint4d = Point4d.create();\r\n /**\r\n * Multiply (and replace) each block of 4 values as a Point4d.\r\n * @param transform transform to apply\r\n * @param xyzw array of x,y,z,w points.\r\n */\r\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\r\n const numXYZW = xyzw.length;\r\n const xyzw1 = Point4dArray._workPoint4d;\r\n for (let i = 0; i + 3 < numXYZW; i += 4) {\r\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\r\n xyzw[i] = xyzw1.x;\r\n xyzw[i + 1] = xyzw1.y;\r\n xyzw[i + 2] = xyzw1.z;\r\n xyzw[i + 3] = xyzw1.w;\r\n }\r\n }\r\n /** test for near equality of all corresponding numeric values, treated as coordinates. */\r\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n for (const xyzw of data) {\r\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 4) {\r\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n/**\r\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\r\n * @public\r\n */\r\n\r\nexport class Point3dArray {\r\n /** pack x,y,z to `Float64Array` */\r\n public static packToFloat64Array(data: Point3d[]): Float64Array {\r\n const result = new Float64Array(3 * data.length);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute the 8 weights of trilinear mapping\r\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\r\n * @param weights preallocated array to receive weights.\r\n * @param u0 low u weight\r\n * @param u1 high u weight\r\n * @param v0 low v weight\r\n * @param v1 high v weight\r\n * @param w0 low w weight\r\n * @param w1 high w weight\r\n */\r\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\r\n\r\n weights[0] = u0 * v0 * w0;\r\n weights[1] = u1 * v0 * w0;\r\n weights[2] = u0 * v1 * w0;\r\n weights[3] = u1 * v1 * w0;\r\n weights[4] = u0 * v0 * w1;\r\n weights[5] = u1 * v0 * w1;\r\n weights[6] = u0 * v1 * w1;\r\n weights[7] = u1 * v1 * w1;\r\n }\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].x;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].y;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].z;\r\n return sum;\r\n }\r\n\r\n private static _weightUVW = new Float64Array(8);\r\n private static _weightDU = new Float64Array(8);\r\n private static _weightDV = new Float64Array(8);\r\n private static _weightDW = new Float64Array(8);\r\n /**\r\n * Compute a point by trilinear mapping.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result point\r\n */\r\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\r\n if (!result) result = Point3d.create(0, 0, 0);\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n let a;\r\n for (let i = 0; i < 8; i++) {\r\n a = this._weightUVW[i];\r\n result.x += a * points[i].x;\r\n result.y += a * points[i].y;\r\n result.z += a * points[i].z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute a point and derivatives wrt uvw by trilinear mapping.\r\n * * evaluated point is the point part of the transform\r\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result transform\r\n */\r\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\r\n return Transform.createRowValues(\r\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\r\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\r\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\r\n result);\r\n }\r\n /** unpack from a number array or Float64Array to an array of `Point3d` */\r\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\r\n const result = [];\r\n for (let i = 0; i + 2 < data.length; i += 3) {\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return an 2-dimensional array containing all the values of `data` in arrays of numPerBlock\r\n * @param data simple array of numbers\r\n * @param numPerBlock number of values in each block at first level down\r\n */\r\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n while (i < n) {\r\n // there is at least one more value for a block\r\n const row = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n row.push(data[i]);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return an 3-dimensional array containing all the values of `data` in arrays numPerRow blocks of numPerBlock\r\n * @param data simple array of numbers\r\n * @param numPerBlock number of values in each block at first level down\r\n */\r\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n let i2;\r\n while (i < n) {\r\n const row = [];\r\n i2 = i + numPerBlock * numPerRow;\r\n while (i < i2) {\r\n const block = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n block.push(data[i]);\r\n }\r\n row.push(block);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\r\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\r\n const xyz1 = Point3d.create();\r\n const numXYZ = xyz.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\r\n xyz[i] = xyz1.x;\r\n xyz[i + 1] = xyz1.y;\r\n xyz[i + 2] = xyz1.z;\r\n }\r\n }\r\n /** Apply Geometry.isAlmostEqual to corresponding coordinates */\r\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return simple average of all coordinates. (000 if empty array) */\r\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\r\n if (points instanceof IndexedXYZCollection) {\r\n result = Point3d.create(0, 0, 0, result);\r\n const p = Point3d.create();\r\n if (points.length > 0) {\r\n for (let i = 0; i < points.length; i++) {\r\n points.getPoint3dAtCheckedPointIndex(i, p);\r\n result.x += p.x; result.y += p.y; result.z += p.z;\r\n }\r\n result.scaleInPlace(1.0 / points.length);\r\n }\r\n return result;\r\n }\r\n const carrier = new Point3dArrayCarrier(points);\r\n return this.centroid(carrier);\r\n }\r\n\r\n /** Return the index of the point most distant from spacePoint */\r\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n for (let i = 0; i < points.length; i++) {\r\n d = spacePoint.distance(points[i]);\r\n if (d > dMax) {\r\n spacePoint.vectorTo(points[i], farVector);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\r\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n let vectorAB; // to be reused in loop !!!\r\n for (let i = 0; i < points.length; i++) {\r\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\r\n d = vectorAB.crossProductMagnitude(vector);\r\n if (d > dMax) {\r\n farVector.setFrom(vectorAB);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Return the index of the closest point in the array (full xyz) */\r\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\r\n let index = -1;\r\n let dMin = Number.MAX_VALUE;\r\n let d;\r\n const x0 = spacePoint.x;\r\n const y0 = spacePoint.y;\r\n const z0 = spacePoint.z;\r\n for (let i = 0; i < data.length; i++) {\r\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\r\n if (d < dMin) {\r\n index = i;\r\n dMin = d;\r\n }\r\n }\r\n return index;\r\n }\r\n /** return true iff all points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n let xyz;\r\n for (xyz of data) {\r\n if (Math.abs(plane.altitude(xyz)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Sum lengths of edges.\r\n * @param data points.\r\n */\r\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\r\n let sum = 0.0;\r\n\r\n if (Array.isArray(data)) {\r\n const n = selectOptionalClampedMin (data.length, maxPointsToUse, 1) - 1;\r\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\r\n if (addClosureEdge && n > 0)\r\n sum += data[0].distance(data[n]);\r\n\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = selectOptionalClampedMin (data.length, maxPointsToUse, 3);\r\n let i = 0;\r\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\r\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\r\n data[i + 4] - data[i + 1],\r\n data[i + 5] - data[i + 2]);\r\n }\r\n if (addClosureEdge && i >= 3) {\r\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\r\n data[1] - data[i + 1],\r\n data[2] - data[i + 2]);\r\n }\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * Count the number of points, but ...\r\n * * ignore trailing duplicates of point 0.\r\n * * return 0 if there are any duplicates within the remaining points.\r\n * @param points points to examine.\r\n */\r\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\r\n let n = points.length;\r\n // strip of (allow) trailing duplicates ...\r\n while (n > 1){\r\n if (points[0].isAlmostEqual (points[n-1], tolerance))\r\n n--;\r\n else\r\n break;\r\n }\r\n for (let i = 0; i+1 < n; i++)\r\n if (points[i].isAlmostEqual (points[i+1], tolerance))\r\n return 0;\r\n return n;\r\n }\r\n\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\r\n const result: Point3d[] = [];\r\n if (data.length === 0)\r\n return result;\r\n if (data instanceof Float64Array) {\r\n for (let i = 0; i + 2 < data.length; i += 3)\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n return result;\r\n }\r\n for (const p of data) {\r\n if (Array.isArray(p))\r\n result.push(Point3d.create(p[0], p[1], p[2]));\r\n else\r\n result.push(Point3d.create(p.x, p.y, p.z));\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return an array containing Point2d with xy parts of each Point3d\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\r\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\r\n }\r\n /**\r\n * clone points in the input array, inserting points within each edge to limit edge length.\r\n * @param points array of points\r\n * @param maxEdgeLength max length of an edge\r\n */\r\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\r\n if (points.length === 0)\r\n return [];\r\n const result = [points[0]];\r\n for (let i = 1; i < points.length; i++) {\r\n const a = points[i - 1].distance(points[i]);\r\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\r\n for (let k = 1; k < n; k++)\r\n result.push(points[i - 1].interpolate(k / n, points[i]));\r\n result.push(points[i]);\r\n\r\n }\r\n return result;\r\n }\r\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\r\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\r\n const collector = new PointStringDeepXYZArrayCollector(this.xyzToArray);\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\r\n */\r\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\r\n // data is an array ... each member is either Point3d or [x,y,z]\r\n const result = [];\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result.push([p.x, p.y, p.z]);\r\n } else if (Array.isArray(p)) {\r\n result.push([p[0], p[1], p.length > 2 ? p[2] : 0.0]);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\r\n */\r\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\r\n const result = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n } else if (Array.isArray(p)) {\r\n result[i++] = p[0];\r\n result[i++] = p[1];\r\n result[i++] = p.length > 2 ? p[2] : 0.0; // allow missing z\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\r\n const collector = new PointStringDeepXYZArrayCollector(Point3d.create);\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n\r\n /**\r\n * return perpendicular distance from points[indexB] to the segment points[indexA] to points[indexC].\r\n * * extrapolation option when projection is outside of fraction range 0..1 are:\r\n * * false ==> measure distance to closest endpoint\r\n * * true ==> measure distance to extended line segment.\r\n * (no index checking!)\r\n */\r\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\r\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\r\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\r\n const uDotU = vectorU.dotProduct(vectorU);\r\n const uDotV = vectorU.dotProduct(vectorV);\r\n let fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\r\n if (fraction === undefined)\r\n fraction = 0.0;\r\n if (!extrapolate) {\r\n if (fraction > 1.0)\r\n fraction = 1.0;\r\n if (fraction < 0.0)\r\n fraction = 0.0;\r\n }\r\n let h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\r\n // h2 should never be negative except for quirky tolerance ..\r\n if (h2 < 0.0)\r\n h2 = 0.0;\r\n return Math.sqrt(h2);\r\n }\r\n\r\n /** Computes the hull of the XY projection of points.\r\n * * Returns the hull as an array of Point3d\r\n * * Optionally returns non-hull points in `insidePoints[]`\r\n * * If both arrays empty if less than 3 points.\r\n * *\r\n */\r\n public static computeConvexHullXY(points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false) {\r\n hullPoints.length = 0;\r\n insidePoints.length = 0;\r\n let n = points.length;\r\n // Get deep copy\r\n const xy1: Point3d[] = points.slice(0, n);\r\n xy1.sort(Geometry.lexicalXYLessThan);\r\n if (n < 3) {\r\n for (const p of xy1)\r\n hullPoints.push(p);\r\n if (addClosurePoint && xy1.length > 0)\r\n hullPoints.push(xy1[0]);\r\n return;\r\n }\r\n hullPoints.push(xy1[0]); // This is sure to stay\r\n hullPoints.push(xy1[1]); // This one can be removed in loop.\r\n let numInside = 0;\r\n // First sweep creates upper hull\r\n for (let i = 2; i < n; i++) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n xy1[numInside++] = hullPoints[top];\r\n top--;\r\n hullPoints.pop();\r\n }\r\n hullPoints.push(candidate);\r\n }\r\n const i0 = hullPoints.length - 1;\r\n xy1.length = numInside;\r\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\r\n xy1.sort(Geometry.lexicalXYLessThan);\r\n n = xy1.length;\r\n // xy1.back () is already on stack.\r\n hullPoints.push(xy1[n - 1]);\r\n for (let i = n - 1; i-- > 0;) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n insidePoints.push(hullPoints[top]);\r\n top--;\r\n hullPoints.pop();\r\n }\r\n if (i > 0) // don't replicate start !!!\r\n hullPoints.push(candidate);\r\n }\r\n if (addClosurePoint)\r\n hullPoints.push(hullPoints[0]);\r\n }\r\n /**\r\n * Return (clones of) points in data[] with min and max x and y parts.\r\n * @param data array to examine.\r\n */\r\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\r\n if (data.length === 0)\r\n return undefined;\r\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\r\n let q;\r\n for (let i = 1; i < data.length; i++) {\r\n q = data[i];\r\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\r\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\r\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\r\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PointHelpers.js","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.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 CartesianGeometry\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\nimport { IndexedXYZCollection } from \"./IndexedXYZCollection\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"./Plane3dByOriginAndUnitNormal\";\r\nimport { Point2d } from \"./Point2dVector2d\";\r\nimport { Point3dArrayCarrier } from \"./Point3dArrayCarrier\";\r\nimport { Point3d, Vector3d, XYZ } from \"./Point3dVector3d\";\r\nimport { PointStringDeepXYZArrayCollector, VariantPointDataStream } from \"./PointStreaming\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XAndY, XYAndZ, XYZProps } from \"./XYZProps\";\r\n\r\n/**\r\n *\r\n * @param numA first candidate -- presumed 0 or positive\r\n * @param numB second candidate -- may be undefined, invalid if outside closed interval 0..numA\r\n * @param multiplyBy second candidate multiplier (applied only if candidate is defined)\r\n */\r\nfunction selectOptionalClampedMin(numA: number, numB: number | undefined, multiplyBy: number): number {\r\n\r\n if (numB !== undefined){\r\n const numC = numB * multiplyBy;\r\n if (numC >= 0 && numC <= numA)\r\n return numC;\r\n }\r\n return numA;\r\n}\r\n/**\r\n * The `NumberArray` class contains static methods that act on arrays of numbers.\r\n * @public\r\n */\r\nexport class NumberArray {\r\n /** return the sum of values in an array, The summation is done with correction terms which\r\n * improves last-bit numeric accuracy.\r\n */\r\n public static preciseSum(data: number[]): number {\r\n const n = data.length;\r\n if (n === 0)\r\n return 0.0;\r\n let sum = data[0];\r\n let c = 0.0;\r\n let y: number;\r\n let t: number;\r\n for (let i = 1; i < n; i++) {\r\n y = data[i] - c;\r\n t = sum + y;\r\n c = (t - sum) - y;\r\n sum = t;\r\n }\r\n return sum;\r\n }\r\n /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */\r\n public static isExactEqual(dataA: any[] | Float64Array | undefined, dataB: any[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (dataA[i] !== dataB[i])\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** Return true if arrays have identical counts and entries equal within tolerance */\r\n public static isAlmostEqual(\r\n dataA: number[] | Float64Array | undefined,\r\n dataB: number[] | Float64Array | undefined,\r\n tolerance: number): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (Math.abs(dataA[i] - dataB[i]) >= tolerance) return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return the sum of numbers in an array. Note that \"PreciseSum\" may be more accurate. */\r\n public static sum(data: number[] | Float64Array): number {\r\n let sum = 0;\r\n for (const x of data) { sum += x; }\r\n return sum;\r\n }\r\n /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */\r\n public static isCoordinateInArray(x: number, data: number[] | undefined): boolean {\r\n if (data) {\r\n for (const y of data) { if (Geometry.isSameCoordinate(x, y)) return true; }\r\n }\r\n return false;\r\n }\r\n /** Return the max absolute value in a array of numbers. */\r\n public static maxAbsArray(values: number[]): number {\r\n const arrLen = values.length;\r\n if (arrLen === 0) {\r\n return 0.0;\r\n }\r\n let a = Math.abs(values[0]);\r\n for (let i = 1; i < arrLen; i++) {\r\n const b = Math.abs(values[i]);\r\n if (a < b) {\r\n a = b;\r\n }\r\n }\r\n return a;\r\n }\r\n /** return the max absolute value of a pair of numbers */\r\n public static maxAbsTwo(a1: number, a2: number): number {\r\n a1 = Math.abs(a1);\r\n a2 = Math.abs(a2);\r\n return (a1 > a2) ? a1 : a2;\r\n }\r\n /** Return the max absolute difference between corresponding entries in two arrays of numbers\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiff(dataA: number[] | Float64Array, dataB: number[] | Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n\r\n /** Return the max absolute difference between corresponding entries in two Float64Array\r\n * * If sizes are mismatched, only the smaller length is tested.\r\n */\r\n public static maxAbsDiffFloat64(dataA: Float64Array, dataB: Float64Array): number {\r\n let a = 0.0;\r\n const n = Math.min(dataA.length, dataB.length);\r\n for (let i = 0; i < n; i++) { a = Math.max(a, Math.abs(dataA[i] - dataB[i])); }\r\n return a;\r\n }\r\n /**\r\n * Return an array with indicated start and end points, maximum step size internally\r\n * @param low low value\r\n * @param high high value\r\n * @param step max permitted step\r\n */\r\n public static createArrayWithMaxStepSize(low: number, high: number, step: number): number[] {\r\n if (low === high)\r\n return [low];\r\n const delta = high - low;\r\n const numInterval = Math.max(1, Math.floor(Math.abs(delta / step)));\r\n const result = [];\r\n result.push(low);\r\n for (let i = 1; i < numInterval; i++) {\r\n result.push(low + (i / numInterval) * delta);\r\n }\r\n result.push(high);\r\n return result;\r\n }\r\n\r\n /** copy numbers from variant sources to number[]. */\r\n public static create(source: number[] | Float64Array): number[] {\r\n const result: number[] = [];\r\n for (const q of source)\r\n result.push(q);\r\n return result;\r\n }\r\n\r\n /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */\r\n public static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[] {\r\n const result: number[] = [];\r\n if (knots === undefined || knots.length === 0)\r\n return result;\r\n let multiplicity0 = 1;\r\n const knot0 = knots[0];\r\n const knot1 = knots[knots.length - 1];\r\n for (; multiplicity0 < knots.length && knots[multiplicity0] === knot0;) { multiplicity0++; }\r\n let multiplicity1 = 1;\r\n const k1 = knots.length - 1;\r\n for (; k1 - multiplicity1 >= 0 && knots[k1 - multiplicity1] === knot1;) { multiplicity1++; }\r\n\r\n for (let k = 0; k < target0; k++)\r\n result.push(knot0);\r\n for (let k = multiplicity0; k + multiplicity1 < knots.length; k++)\r\n result.push(knots[k]);\r\n for (let k = 0; k < target1; k++)\r\n result.push(knot1);\r\n return result;\r\n }\r\n\r\n /** Compute the linear combination s of the numbers and scales.\r\n * @param data array of numbers d_i.\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `data`.\r\n * @return s = sum(d_i * s_i), where i ranges from 0 to min(data.length, scales.length).\r\n */\r\n public static linearCombination(data: number[], scales: number[]): number {\r\n const numTerms = Math.min(data.length, scales.length);\r\n let sum = 0;\r\n for (let i = 0; i < numTerms; ++i)\r\n sum += scales[i] * data[i];\r\n return sum;\r\n }\r\n\r\n /** Compute the linear combination s of the colors and scales.\r\n * * The result is another color if the scales are in [0,1] and sum to 1.\r\n * @param colors array of colors c_i (rgba in first four bytes).\r\n * @param scales array of scales s_i. For best results, `scales` should have the same length as `colors`.\r\n * @return s = sum(c_i * s_i), where i ranges from 0 to min(colors.length, scales.length).\r\n */\r\n public static linearCombinationOfColors(colors: number[], scales: number[]): number {\r\n const numTerms = Math.min(colors.length, scales.length);\r\n const bytes = [0,0,0,0];\r\n // compute a convex combination of each byte\r\n for (let iByte = 0, shiftBits = 0; iByte < 4; ++iByte, shiftBits += 8) {\r\n for (let iTerm = 0; iTerm < numTerms; ++iTerm) {\r\n const fraction = Geometry.clamp(scales[iTerm], 0, 1); // chop slop\r\n const colorComponent = (colors[iTerm] >>> shiftBits) & 0xFF;\r\n bytes[iByte] += fraction * colorComponent;\r\n }\r\n bytes[iByte] = (Math.floor(bytes[iByte]) & 0xFF) << shiftBits;\r\n }\r\n return bytes[0] | bytes[1] | bytes[2] | bytes[3];\r\n }\r\n}\r\n\r\n/**\r\n * The `Point2dArray` class contains static methods that act on arrays of 2d points.\r\n * @public\r\n */\r\nexport class Point2dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: undefined | Point2d[], dataB: undefined | Point2d[]): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++) {\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: Point2d[]): Point2d[] {\r\n return data.map((p: Point2d) => p.clone());\r\n }\r\n /**\r\n * Return the number of points when trailing points that match point 0 are excluded.\r\n * @param data array of XAndY points.\r\n */\r\n public static pointCountExcludingTrailingWraparound(data: XAndY[]): number {\r\n let n = data.length;\r\n if (n < 2)\r\n return n;\r\n const x0 = data[0].x;\r\n const y0 = data[0].y;\r\n while (n > 1) {\r\n if (!Geometry.isSameCoordinate(data[n - 1].x, x0) || !Geometry.isSameCoordinate(data[n - 1].y, y0))\r\n return n;\r\n n--;\r\n }\r\n return n;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * The `Vector3dArray` class contains static methods that act on arrays of 3d vectors.\r\n * @public\r\n */\r\nexport class Vector3dArray {\r\n /** Return true if arrays have same length and matching coordinates. */\r\n public static isAlmostEqual(dataA: undefined | Vector3d[], dataB: undefined | Vector3d[]): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n return true;\r\n }\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /**\r\n * Return an array containing clones of the Vector3d data[]\r\n * @param data source data\r\n */\r\n public static cloneVector3dArray(data: XYAndZ[]): Vector3d[] {\r\n return data.map((p: XYAndZ) => Vector3d.create(p.x, p.y, p.z));\r\n }\r\n}\r\n\r\n/**\r\n * The `Point4dArray` class contains static methods that act on arrays of 4d points.\r\n * @public\r\n */\r\nexport class Point4dArray {\r\n /** pack each point and its corresponding weight into a buffer of xyzw xyzw ... */\r\n public static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array,\r\n result?: Float64Array): Float64Array | undefined {\r\n if (Array.isArray(data) && data[0] instanceof Point3d) {\r\n const points = data as Point3d[];\r\n if (points.length !== weights.length)\r\n return undefined;\r\n result = result ? result : new Float64Array(4 * points.length);\r\n let i = 0;\r\n let k = 0;\r\n for (k = 0; k < points.length; k++) {\r\n result[i++] = points[k].x;\r\n result[i++] = points[k].y;\r\n result[i++] = points[k].z;\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n } else {\r\n const points = data as (Float64Array | number[]);\r\n const numPoints = weights.length;\r\n if (points.length !== 3 * numPoints)\r\n return undefined;\r\n let i = 0; let k;\r\n result = result ? result : new Float64Array(4 * numPoints);\r\n for (k = 0; k < numPoints; k++) {\r\n const k0 = 3 * k;\r\n result[i++] = points[k0];\r\n result[i++] = points[k0 + 1];\r\n result[i++] = points[k0 + 2];\r\n result[i++] = weights[k];\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** pack x,y,z,w in Float64Array. */\r\n public static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array {\r\n result = result ? result : new Float64Array(4 * data.length);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n result[i++] = p.w;\r\n }\r\n return result;\r\n }\r\n /** unpack from ... to array of Point4d */\r\n public static unpackToPoint4dArray(data: Float64Array): Point4d[] {\r\n const result = [];\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n result.push(Point4d.create(data[i], data[i + 1], data[i + 2], data[i + 3]));\r\n }\r\n return result;\r\n }\r\n /** unpack from xyzw xyzw... array to array of Point3d and array of weight.\r\n */\r\n public static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[],\r\n pointFormatter: (x: number, y: number, z: number) => any = (x, y, z) => Point3d.create(x, y, z)) {\r\n points.length = 0;\r\n weights.length = 0;\r\n for (let i = 0; i + 3 < data.length; i += 4) {\r\n points.push(pointFormatter(data[i], data[i + 1], data[i + 2]));\r\n weights.push(data[i + 3]);\r\n }\r\n }\r\n private static _workPoint4d = Point4d.create();\r\n /**\r\n * Multiply (and replace) each block of 4 values as a Point4d.\r\n * @param transform transform to apply\r\n * @param xyzw array of x,y,z,w points.\r\n */\r\n public static multiplyInPlace(transform: Transform, xyzw: Float64Array): void {\r\n const numXYZW = xyzw.length;\r\n const xyzw1 = Point4dArray._workPoint4d;\r\n for (let i = 0; i + 3 < numXYZW; i += 4) {\r\n transform.multiplyXYZW(xyzw[i], xyzw[i + 1], xyzw[i + 2], xyzw[i + 3], xyzw1);\r\n xyzw[i] = xyzw1.x;\r\n xyzw[i + 1] = xyzw1.y;\r\n xyzw[i + 2] = xyzw1.z;\r\n xyzw[i + 3] = xyzw1.w;\r\n }\r\n }\r\n /** test for near equality of all corresponding numeric values, treated as coordinates. */\r\n public static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n for (const xyzw of data) {\r\n if (Math.abs(plane.altitudeXYZW(xyzw.x, xyzw.y, xyzw.z, xyzw.w)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 4) {\r\n if (Math.abs(plane.altitudeXYZW(data[i], data[i + 1], data[i + 2], data[i + 3])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n/**\r\n * The `Point3dArray` class contains static methods that act on arrays of 3d points.\r\n * @public\r\n */\r\n\r\nexport class Point3dArray {\r\n /** pack x,y,z to `Float64Array` */\r\n public static packToFloat64Array(data: Point3d[]): Float64Array {\r\n const result = new Float64Array(3 * data.length);\r\n let i = 0;\r\n for (const p of data) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute the 8 weights of trilinear mapping\r\n * By appropriate choice of weights, this can be used for both point and derivative mappings.\r\n * @param weights preallocated array to receive weights.\r\n * @param u0 low u weight\r\n * @param u1 high u weight\r\n * @param v0 low v weight\r\n * @param v1 high v weight\r\n * @param w0 low w weight\r\n * @param w1 high w weight\r\n */\r\n public static evaluateTrilinearWeights(weights: Float64Array, u0: number, u1: number, v0: number, v1: number, w0: number, w1: number) {\r\n\r\n weights[0] = u0 * v0 * w0;\r\n weights[1] = u1 * v0 * w0;\r\n weights[2] = u0 * v1 * w0;\r\n weights[3] = u1 * v1 * w0;\r\n weights[4] = u0 * v0 * w1;\r\n weights[5] = u1 * v0 * w1;\r\n weights[6] = u0 * v1 * w1;\r\n weights[7] = u1 * v1 * w1;\r\n }\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedX(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].x;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedY(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].y;\r\n return sum;\r\n }\r\n\r\n /**\r\n * sum the weighted x components from a point array.\r\n * * weights.length is the number of summed terms\r\n * * points must have at least that length\r\n * @param weights\r\n * @param points\r\n */\r\n public static sumWeightedZ(weights: Float64Array, points: Point3d[]): number {\r\n let sum = 0.0;\r\n const n = weights.length;\r\n for (let i = 0; i < n; i++)\r\n sum += weights[i] * points[i].z;\r\n return sum;\r\n }\r\n\r\n private static _weightUVW = new Float64Array(8);\r\n private static _weightDU = new Float64Array(8);\r\n private static _weightDV = new Float64Array(8);\r\n private static _weightDW = new Float64Array(8);\r\n /**\r\n * Compute a point by trilinear mapping.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result point\r\n */\r\n public static evaluateTrilinearPoint(points: Point3d[], u: number, v: number, w: number, result?: Point3d): Point3d {\r\n if (!result) result = Point3d.create(0, 0, 0);\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n let a;\r\n for (let i = 0; i < 8; i++) {\r\n a = this._weightUVW[i];\r\n result.x += a * points[i].x;\r\n result.y += a * points[i].y;\r\n result.z += a * points[i].z;\r\n }\r\n return result;\r\n }\r\n /**\r\n * Compute a point and derivatives wrt uvw by trilinear mapping.\r\n * * evaluated point is the point part of the transform\r\n * * u,v,w derivatives are the respective columns of the matrix part of the transform.\r\n * @param points array of 8 points at corners, with x index varying fastest.\r\n * @param result optional result transform\r\n */\r\n public static evaluateTrilinearDerivativeTransform(points: Point3d[], u: number, v: number, w: number, result?: Transform): Transform {\r\n this.evaluateTrilinearWeights(this._weightUVW, 1 - u, u, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDU, -1, 1, 1 - v, v, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDV, 1 - u, u, -1, 1, 1 - w, w);\r\n this.evaluateTrilinearWeights(this._weightDW, 1 - u, u, 1 - v, v, -1, 1);\r\n return Transform.createRowValues(\r\n this.sumWeightedX(this._weightDU, points), this.sumWeightedX(this._weightDV, points), this.sumWeightedX(this._weightDW, points), this.sumWeightedX(this._weightUVW, points),\r\n this.sumWeightedY(this._weightDU, points), this.sumWeightedY(this._weightDV, points), this.sumWeightedY(this._weightDW, points), this.sumWeightedY(this._weightUVW, points),\r\n this.sumWeightedZ(this._weightDU, points), this.sumWeightedZ(this._weightDV, points), this.sumWeightedZ(this._weightDW, points), this.sumWeightedZ(this._weightUVW, points),\r\n result);\r\n }\r\n /** unpack from a number array or Float64Array to an array of `Point3d` */\r\n public static unpackNumbersToPoint3dArray(data: Float64Array | number[]): Point3d[] {\r\n const result = [];\r\n for (let i = 0; i + 2 < data.length; i += 3) {\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return an 2-dimensional array containing all the values of `data` in arrays of numPerBlock\r\n * @param data simple array of numbers\r\n * @param numPerBlock number of values in each block at first level down\r\n */\r\n public static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n while (i < n) {\r\n // there is at least one more value for a block\r\n const row = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n row.push(data[i]);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return an 3-dimensional array containing all the values of `data` in arrays numPerRow blocks of numPerBlock\r\n * @param data simple array of numbers\r\n * @param numPerBlock number of values in each block at first level down\r\n */\r\n public static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[] {\r\n const result = [];\r\n const n = data.length;\r\n let i = 0;\r\n let i1 = 0;\r\n let i2;\r\n while (i < n) {\r\n const row = [];\r\n i2 = i + numPerBlock * numPerRow;\r\n while (i < i2) {\r\n const block = [];\r\n i1 = i + numPerBlock;\r\n if (i1 > n)\r\n i1 = n;\r\n for (; i < i1; i++) {\r\n block.push(data[i]);\r\n }\r\n row.push(block);\r\n }\r\n result.push(row);\r\n }\r\n return result;\r\n }\r\n /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */\r\n public static multiplyInPlace(transform: Transform, xyz: Float64Array): void {\r\n const xyz1 = Point3d.create();\r\n const numXYZ = xyz.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n transform.multiplyXYZ(xyz[i], xyz[i + 1], xyz[i + 2], xyz1);\r\n xyz[i] = xyz1.x;\r\n xyz[i + 1] = xyz1.y;\r\n xyz[i + 2] = xyz1.z;\r\n }\r\n }\r\n /** Apply Geometry.isAlmostEqual to corresponding coordinates */\r\n public static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean {\r\n if (dataA && dataB) {\r\n if (dataA.length !== dataB.length)\r\n return false;\r\n if (dataA instanceof Float64Array && dataB instanceof Float64Array) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))\r\n return false;\r\n } else if (Array.isArray(dataA) && Array.isArray(dataB)) {\r\n for (let i = 0; i < dataA.length; i++)\r\n if (!dataA[i].isAlmostEqual(dataB[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // if both are null it is equal, otherwise unequal\r\n return (dataA === undefined && dataB === undefined);\r\n }\r\n\r\n /** return simple average of all coordinates. (000 if empty array) */\r\n public static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d {\r\n if (points instanceof IndexedXYZCollection) {\r\n result = Point3d.create(0, 0, 0, result);\r\n const p = Point3d.create();\r\n if (points.length > 0) {\r\n for (let i = 0; i < points.length; i++) {\r\n points.getPoint3dAtCheckedPointIndex(i, p);\r\n result.x += p.x; result.y += p.y; result.z += p.z;\r\n }\r\n result.scaleInPlace(1.0 / points.length);\r\n }\r\n return result;\r\n }\r\n const carrier = new Point3dArrayCarrier(points);\r\n return this.centroid(carrier);\r\n }\r\n\r\n /** Return the index of the point most distant from spacePoint */\r\n public static indexOfMostDistantPoint(points: Point3d[], spacePoint: XYZ, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n for (let i = 0; i < points.length; i++) {\r\n d = spacePoint.distance(points[i]);\r\n if (d > dMax) {\r\n spacePoint.vectorTo(points[i], farVector);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n /** return the index of the point whose vector from space point has the largest magnitude of cross product with given vector. */\r\n public static indexOfPointWithMaxCrossProductMagnitude(points: Point3d[], spacePoint: Point3d, vector: Vector3d, farVector: Vector3d): number | undefined {\r\n if (points.length === 0)\r\n return undefined;\r\n let dMax = -1;\r\n let d;\r\n let result = -1;\r\n let vectorAB; // to be reused in loop !!!\r\n for (let i = 0; i < points.length; i++) {\r\n vectorAB = spacePoint.vectorTo(points[i], vectorAB);\r\n d = vectorAB.crossProductMagnitude(vector);\r\n if (d > dMax) {\r\n farVector.setFrom(vectorAB);\r\n dMax = d;\r\n result = i;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /** Return the index of the closest point in the array (full xyz) */\r\n public static closestPointIndex(data: XYAndZ[], spacePoint: XYAndZ): number {\r\n let index = -1;\r\n let dMin = Number.MAX_VALUE;\r\n let d;\r\n const x0 = spacePoint.x;\r\n const y0 = spacePoint.y;\r\n const z0 = spacePoint.z;\r\n for (let i = 0; i < data.length; i++) {\r\n d = Geometry.distanceXYZXYZ(x0, y0, z0, data[i].x, data[i].y, data[i].z);\r\n if (d < dMin) {\r\n index = i;\r\n dMin = d;\r\n }\r\n }\r\n return index;\r\n }\r\n /** return true iff all points' altitudes are within tolerance of the plane.*/\r\n public static isCloseToPlane(data: Point3d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance: number = Geometry.smallMetricDistance): boolean {\r\n if (Array.isArray(data)) {\r\n let xyz;\r\n for (xyz of data) {\r\n if (Math.abs(plane.altitude(xyz)) > tolerance)\r\n return false;\r\n }\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = data.length;\r\n for (let i = 0; i + 2 < numXYZ; i += 3) {\r\n if (Math.abs(plane.altitudeXYZ(data[i], data[i + 1], data[i + 2])) > tolerance)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Sum lengths of edges.\r\n * @param data points.\r\n */\r\n public static sumEdgeLengths(data: Point3d[] | Float64Array, addClosureEdge: boolean = false, maxPointsToUse?: number): number {\r\n let sum = 0.0;\r\n\r\n if (Array.isArray(data)) {\r\n const n = selectOptionalClampedMin (data.length, maxPointsToUse, 1) - 1;\r\n for (let i = 0; i < n; i++) sum += data[i].distance(data[i + 1]);\r\n if (addClosureEdge && n > 0)\r\n sum += data[0].distance(data[n]);\r\n\r\n } else if (data instanceof Float64Array) {\r\n const numXYZ = selectOptionalClampedMin (data.length, maxPointsToUse, 3);\r\n let i = 0;\r\n for (; i + 5 < numXYZ; i += 3) { // final i points at final point x\r\n sum += Geometry.hypotenuseXYZ(data[i + 3] - data[i],\r\n data[i + 4] - data[i + 1],\r\n data[i + 5] - data[i + 2]);\r\n }\r\n if (addClosureEdge && i >= 3) {\r\n sum += Geometry.hypotenuseXYZ(data[0] - data[i],\r\n data[1] - data[i + 1],\r\n data[2] - data[i + 2]);\r\n }\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * Count the number of points, but ...\r\n * * ignore trailing duplicates of point 0.\r\n * * return 0 if there are any duplicates within the remaining points.\r\n * @param points points to examine.\r\n */\r\n public static countNonDuplicates(points: Point3d[], tolerance: number = Geometry.smallMetricDistance): number {\r\n let n = points.length;\r\n // strip of (allow) trailing duplicates ...\r\n while (n > 1){\r\n if (points[0].isAlmostEqual (points[n-1], tolerance))\r\n n--;\r\n else\r\n break;\r\n }\r\n for (let i = 0; i+1 < n; i++)\r\n if (points[i].isAlmostEqual (points[i+1], tolerance))\r\n return 0;\r\n return n;\r\n }\r\n\r\n /**\r\n * Return an array containing clones of the Point3d data[]\r\n * @param data source data\r\n */\r\n public static clonePoint3dArray(data: XYZProps[] | Float64Array): Point3d[] {\r\n const result: Point3d[] = [];\r\n if (data.length === 0)\r\n return result;\r\n if (data instanceof Float64Array) {\r\n for (let i = 0; i + 2 < data.length; i += 3)\r\n result.push(Point3d.create(data[i], data[i + 1], data[i + 2]));\r\n return result;\r\n }\r\n for (const p of data) {\r\n if (Array.isArray(p))\r\n result.push(Point3d.create(p[0], p[1], p[2]));\r\n else\r\n result.push(Point3d.create(p.x, p.y, p.z));\r\n }\r\n return result;\r\n }\r\n /**\r\n * Return an array containing Point2d with xy parts of each Point3d\r\n * @param data source data\r\n */\r\n public static clonePoint2dArray(data: XYAndZ[]): Point2d[] {\r\n return data.map((p: XYAndZ) => Point2d.create(p.x, p.y));\r\n }\r\n /**\r\n * clone points in the input array, inserting points within each edge to limit edge length.\r\n * @param points array of points\r\n * @param maxEdgeLength max length of an edge\r\n */\r\n public static cloneWithMaxEdgeLength(points: Point3d[], maxEdgeLength: number): Point3d[] {\r\n if (points.length === 0)\r\n return [];\r\n const result = [points[0]];\r\n for (let i = 1; i < points.length; i++) {\r\n const a = points[i - 1].distance(points[i]);\r\n const n = Geometry.stepCount(maxEdgeLength, a, 1);\r\n for (let k = 1; k < n; k++)\r\n result.push(points[i - 1].interpolate(k / n, points[i]));\r\n result.push(points[i]);\r\n\r\n }\r\n return result;\r\n }\r\n /** Pack isolated x,y,z args as a json `[x,y,z]` */\r\n private static xyzToArray(x: number, y: number, z: number): number[] { return [x, y, z]; }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as arrays of 3 numbers `[1,2,3]`\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepJSONNumberArrays(data: MultiLineStringDataVariant): number[][] {\r\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => this.xyzToArray(x, y, z));\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as arrays of 3 numbers\r\n */\r\n public static cloneXYZPropsAsNumberArray(data: XYZProps[]): number[][] {\r\n // data is an array ... each member is either Point3d or [x,y,z]\r\n const result = [];\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result.push([p.x, p.y, p.z]);\r\n } else if (Array.isArray(p)) {\r\n result.push([p[0], p[1], p.length > 2 ? p[2] : 0.0]);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * clone an array of [[XYZProps]] data, specifically as flattened array of number\r\n */\r\n public static cloneXYZPropsAsFloat64Array(data: XYZProps[]): Float64Array {\r\n const result = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of data) {\r\n if (p instanceof Point3d) {\r\n result[i++] = p.x;\r\n result[i++] = p.y;\r\n result[i++] = p.z;\r\n } else if (Array.isArray(p)) {\r\n result[i++] = p[0];\r\n result[i++] = p[1];\r\n result[i++] = p.length > 2 ? p[2] : 0.0; // allow missing z\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * return similarly-structured array, array of arrays, etc, with the lowest level point data specifically structured as `Point3d`.\r\n * @param data point data with various leaf forms such as `[1,2,3]`, `{x:1,y:2,z:3}`, `Point3d`\r\n */\r\n public static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[] {\r\n const collector = new PointStringDeepXYZArrayCollector((x, y, z) => Point3d.create(x, y, z));\r\n VariantPointDataStream.streamXYZ(data, collector);\r\n return collector.claimResult();\r\n }\r\n\r\n /**\r\n * return perpendicular distance from points[indexB] to the segment points[indexA] to points[indexC].\r\n * * extrapolation option when projection is outside of fraction range 0..1 are:\r\n * * false ==> measure distance to closest endpoint\r\n * * true ==> measure distance to extended line segment.\r\n * (no index checking!)\r\n */\r\n public static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number {\r\n const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);\r\n const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);\r\n const uDotU = vectorU.dotProduct(vectorU);\r\n const uDotV = vectorU.dotProduct(vectorV);\r\n let fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);\r\n if (fraction === undefined)\r\n fraction = 0.0;\r\n if (!extrapolate) {\r\n if (fraction > 1.0)\r\n fraction = 1.0;\r\n if (fraction < 0.0)\r\n fraction = 0.0;\r\n }\r\n let h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;\r\n // h2 should never be negative except for quirky tolerance ..\r\n if (h2 < 0.0)\r\n h2 = 0.0;\r\n return Math.sqrt(h2);\r\n }\r\n\r\n /** Computes the hull of the XY projection of points.\r\n * * Returns the hull as an array of Point3d\r\n * * Optionally returns non-hull points in `insidePoints[]`\r\n * * If both arrays empty if less than 3 points.\r\n * *\r\n */\r\n public static computeConvexHullXY(points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint: boolean = false) {\r\n hullPoints.length = 0;\r\n insidePoints.length = 0;\r\n let n = points.length;\r\n // Get deep copy\r\n const xy1: Point3d[] = points.slice(0, n);\r\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\r\n if (n < 3) {\r\n for (const p of xy1)\r\n hullPoints.push(p);\r\n if (addClosurePoint && xy1.length > 0)\r\n hullPoints.push(xy1[0]);\r\n return;\r\n }\r\n hullPoints.push(xy1[0]); // This is sure to stay\r\n hullPoints.push(xy1[1]); // This one can be removed in loop.\r\n let numInside = 0;\r\n // First sweep creates upper hull\r\n for (let i = 2; i < n; i++) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top >= 1 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n xy1[numInside++] = hullPoints[top];\r\n top--;\r\n hullPoints.pop();\r\n }\r\n hullPoints.push(candidate);\r\n }\r\n const i0 = hullPoints.length - 1;\r\n xy1.length = numInside;\r\n xy1.push(hullPoints[0]); // force first point to be reconsidered as final hull point.\r\n xy1.sort((a, b) => Geometry.lexicalXYLessThan(a, b));\r\n n = xy1.length;\r\n // xy1.back () is already on stack.\r\n hullPoints.push(xy1[n - 1]);\r\n for (let i = n - 1; i-- > 0;) {\r\n const candidate = xy1[i];\r\n let top = hullPoints.length - 1;\r\n while (top > i0 && hullPoints[top - 1].crossProductToPointsXY(hullPoints[top], candidate) <= 0.0) {\r\n insidePoints.push(hullPoints[top]);\r\n top--;\r\n hullPoints.pop();\r\n }\r\n if (i > 0) // don't replicate start !!!\r\n hullPoints.push(candidate);\r\n }\r\n if (addClosurePoint)\r\n hullPoints.push(hullPoints[0]);\r\n }\r\n /**\r\n * Return (clones of) points in data[] with min and max x and y parts.\r\n * @param data array to examine.\r\n */\r\n public static minMaxPoints(data: Point3d[]): { minXPoint: Point3d, maxXPoint: Point3d, minYPoint: Point3d, maxYPoint: Point3d } | undefined {\r\n if (data.length === 0)\r\n return undefined;\r\n const result = { minXPoint: data[0].clone(), maxXPoint: data[0].clone(), minYPoint: data[0].clone(), maxYPoint: data[0].clone() };\r\n let q;\r\n for (let i = 1; i < data.length; i++) {\r\n q = data[i];\r\n if (q.x < result.minXPoint.x) result.minXPoint.setFromPoint3d(q);\r\n if (q.x > result.maxXPoint.x) result.maxXPoint.setFromPoint3d(q);\r\n if (q.y < result.minYPoint.y) result.minYPoint.setFromPoint3d(q);\r\n if (q.y > result.maxYPoint.y) result.maxYPoint.setFromPoint3d(q);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
@@ -117,9 +117,8 @@ export declare class CutLoopMergeContext {
117
117
  */
118
118
  sortAndMergeLoops(): void;
119
119
  }
120
- /** Static class for operations that treat an array of points as a polygon (with area!) */
121
120
  /**
122
- * Various (static method) computations for arrays of points interpreted as a polygon.
121
+ * Various static methods to perform computations on an array of points interpreted as a polygon.
123
122
  * @public
124
123
  */
125
124
  export declare class PolygonOps {
@@ -1 +1 @@
1
- {"version":3,"file":"PolygonOps.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PolygonOps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PolygonOps.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PolygonOps.ts"],"names":[],"mappings":"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"}
@@ -204,7 +204,7 @@ export class CutLoopMergeContext {
204
204
  sortRay.direction.normalizeInPlace();
205
205
  for (const loop of this.inputLoops)
206
206
  loop.setSortCoordinates(sortRay);
207
- this.inputLoops.sort(CutLoop.sortFunction);
207
+ this.inputLoops.sort((loopA, loopB) => CutLoop.sortFunction(loopA, loopB));
208
208
  }
209
209
  }
210
210
  /**
@@ -250,9 +250,8 @@ export class CutLoopMergeContext {
250
250
  }
251
251
  }
252
252
  }
253
- /** Static class for operations that treat an array of points as a polygon (with area!) */
254
253
  /**
255
- * Various (static method) computations for arrays of points interpreted as a polygon.
254
+ * Various static methods to perform computations on an array of points interpreted as a polygon.
256
255
  * @public
257
256
  */
258
257
  class PolygonOps {