@itwin/core-geometry 4.3.0-dev.9 → 4.3.1

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 (336) hide show
  1. package/CHANGELOG.md +62 -1
  2. package/lib/cjs/Geometry.d.ts +14 -2
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +20 -9
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts +12 -2
  7. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js +27 -17
  9. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve.d.ts +30 -16
  11. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSplineCurve.js +68 -44
  13. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve3dH.d.ts +27 -20
  15. package/lib/cjs/bspline/BSplineCurve3dH.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve3dH.js +136 -87
  17. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineSurface.d.ts +138 -74
  19. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  20. package/lib/cjs/bspline/BSplineSurface.js +242 -119
  21. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  22. package/lib/cjs/bspline/Bezier1dNd.d.ts +18 -4
  23. package/lib/cjs/bspline/Bezier1dNd.d.ts.map +1 -1
  24. package/lib/cjs/bspline/Bezier1dNd.js +19 -5
  25. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  26. package/lib/cjs/bspline/BezierCurve3dH.d.ts.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3dH.js +2 -1
  28. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  29. package/lib/cjs/bspline/KnotVector.d.ts +30 -33
  30. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  31. package/lib/cjs/bspline/KnotVector.js +76 -69
  32. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  33. package/lib/cjs/clipping/ClipUtils.d.ts +32 -5
  34. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  35. package/lib/cjs/clipping/ClipUtils.js +92 -11
  36. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  37. package/lib/cjs/core-geometry.d.ts +0 -2
  38. package/lib/cjs/core-geometry.d.ts.map +1 -1
  39. package/lib/cjs/core-geometry.js +0 -2
  40. package/lib/cjs/core-geometry.js.map +1 -1
  41. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  42. package/lib/cjs/curve/Arc3d.js +5 -5
  43. package/lib/cjs/curve/Arc3d.js.map +1 -1
  44. package/lib/cjs/curve/CurveLocationDetail.d.ts +1 -4
  45. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  46. package/lib/cjs/curve/CurveLocationDetail.js +4 -10
  47. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  48. package/lib/cjs/curve/CurveOps.d.ts +4 -5
  49. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  50. package/lib/cjs/curve/CurveOps.js +1 -1
  51. package/lib/cjs/curve/CurveOps.js.map +1 -1
  52. package/lib/cjs/curve/CurveTypes.d.ts +14 -2
  53. package/lib/cjs/curve/CurveTypes.d.ts.map +1 -1
  54. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  55. package/lib/cjs/curve/LineString3d.d.ts +3 -2
  56. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  57. package/lib/cjs/curve/LineString3d.js +1 -0
  58. package/lib/cjs/curve/LineString3d.js.map +1 -1
  59. package/lib/cjs/curve/PointString3d.d.ts +2 -1
  60. package/lib/cjs/curve/PointString3d.d.ts.map +1 -1
  61. package/lib/cjs/curve/PointString3d.js.map +1 -1
  62. package/lib/cjs/curve/RegionOps.d.ts +5 -11
  63. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  64. package/lib/cjs/curve/RegionOps.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +15 -9
  66. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  67. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +68 -56
  68. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +14 -16
  70. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +51 -69
  72. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -1
  74. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +3 -2
  75. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +2 -3
  77. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  78. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +4 -4
  80. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  81. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +38 -36
  82. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  83. package/lib/cjs/geometry3d/Angle.d.ts +0 -1
  84. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  85. package/lib/cjs/geometry3d/Angle.js +0 -1
  86. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  87. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +21 -5
  88. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  89. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +71 -45
  90. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  91. package/lib/cjs/geometry3d/Matrix3d.d.ts +20 -13
  92. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  93. package/lib/cjs/geometry3d/Matrix3d.js +28 -21
  94. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  95. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +11 -2
  96. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  97. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -5
  98. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  99. package/lib/cjs/geometry3d/PointHelpers.d.ts +58 -20
  100. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  101. package/lib/cjs/geometry3d/PointHelpers.js +213 -62
  102. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  103. package/lib/cjs/geometry3d/Segment1d.d.ts +5 -1
  104. package/lib/cjs/geometry3d/Segment1d.d.ts.map +1 -1
  105. package/lib/cjs/geometry3d/Segment1d.js +11 -7
  106. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  107. package/lib/cjs/geometry3d/Transform.d.ts +4 -5
  108. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  109. package/lib/cjs/geometry3d/Transform.js +4 -5
  110. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  111. package/lib/cjs/geometry4d/Point4d.d.ts +13 -0
  112. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  113. package/lib/cjs/geometry4d/Point4d.js +21 -0
  114. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  115. package/lib/cjs/numerics/BezierPolynomials.d.ts +88 -64
  116. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  117. package/lib/cjs/numerics/BezierPolynomials.js +92 -73
  118. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  119. package/lib/cjs/numerics/Newton.d.ts +143 -61
  120. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  121. package/lib/cjs/numerics/Newton.js +233 -66
  122. package/lib/cjs/numerics/Newton.js.map +1 -1
  123. package/lib/cjs/numerics/PascalCoefficients.d.ts +8 -12
  124. package/lib/cjs/numerics/PascalCoefficients.d.ts.map +1 -1
  125. package/lib/cjs/numerics/PascalCoefficients.js +10 -12
  126. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  127. package/lib/cjs/numerics/Polynomials.d.ts +6 -10
  128. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  129. package/lib/cjs/numerics/Polynomials.js +6 -10
  130. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  131. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +3 -0
  132. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  133. package/lib/cjs/polyface/PolyfaceBuilder.js +13 -2
  134. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  135. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  136. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  137. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  138. package/lib/cjs/polyface/PolyfaceQuery.d.ts +38 -11
  139. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  140. package/lib/cjs/polyface/PolyfaceQuery.js +93 -16
  141. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  142. package/lib/cjs/serialization/BGFBReader.d.ts +10 -10
  143. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  144. package/lib/cjs/serialization/BGFBReader.js +69 -42
  145. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  146. package/lib/cjs/serialization/BGFBWriter.d.ts +8 -8
  147. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  148. package/lib/cjs/serialization/BGFBWriter.js +80 -55
  149. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  150. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  151. package/lib/cjs/serialization/GeometrySamples.js +6 -8
  152. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  153. package/lib/cjs/serialization/IModelJsonSchema.d.ts +8 -14
  154. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  155. package/lib/cjs/serialization/IModelJsonSchema.js +85 -259
  156. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  157. package/lib/cjs/serialization/SerializationHelpers.d.ts +109 -0
  158. package/lib/cjs/serialization/SerializationHelpers.d.ts.map +1 -0
  159. package/lib/cjs/serialization/SerializationHelpers.js +591 -0
  160. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -0
  161. package/lib/cjs/topology/Graph.d.ts +399 -366
  162. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  163. package/lib/cjs/topology/Graph.js +531 -464
  164. package/lib/cjs/topology/Graph.js.map +1 -1
  165. package/lib/cjs/topology/MaskManager.d.ts +8 -9
  166. package/lib/cjs/topology/MaskManager.d.ts.map +1 -1
  167. package/lib/cjs/topology/MaskManager.js +11 -12
  168. package/lib/cjs/topology/MaskManager.js.map +1 -1
  169. package/lib/esm/Geometry.d.ts +14 -2
  170. package/lib/esm/Geometry.d.ts.map +1 -1
  171. package/lib/esm/Geometry.js +20 -9
  172. package/lib/esm/Geometry.js.map +1 -1
  173. package/lib/esm/bspline/BSpline1dNd.d.ts +12 -2
  174. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  175. package/lib/esm/bspline/BSpline1dNd.js +27 -17
  176. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  177. package/lib/esm/bspline/BSplineCurve.d.ts +30 -16
  178. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  179. package/lib/esm/bspline/BSplineCurve.js +68 -44
  180. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  181. package/lib/esm/bspline/BSplineCurve3dH.d.ts +27 -20
  182. package/lib/esm/bspline/BSplineCurve3dH.d.ts.map +1 -1
  183. package/lib/esm/bspline/BSplineCurve3dH.js +137 -88
  184. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  185. package/lib/esm/bspline/BSplineSurface.d.ts +138 -74
  186. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  187. package/lib/esm/bspline/BSplineSurface.js +242 -119
  188. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  189. package/lib/esm/bspline/Bezier1dNd.d.ts +18 -4
  190. package/lib/esm/bspline/Bezier1dNd.d.ts.map +1 -1
  191. package/lib/esm/bspline/Bezier1dNd.js +19 -5
  192. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  193. package/lib/esm/bspline/BezierCurve3dH.d.ts.map +1 -1
  194. package/lib/esm/bspline/BezierCurve3dH.js +2 -1
  195. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  196. package/lib/esm/bspline/KnotVector.d.ts +30 -33
  197. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  198. package/lib/esm/bspline/KnotVector.js +76 -69
  199. package/lib/esm/bspline/KnotVector.js.map +1 -1
  200. package/lib/esm/clipping/ClipUtils.d.ts +32 -5
  201. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  202. package/lib/esm/clipping/ClipUtils.js +92 -11
  203. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  204. package/lib/esm/core-geometry.d.ts +0 -2
  205. package/lib/esm/core-geometry.d.ts.map +1 -1
  206. package/lib/esm/core-geometry.js +0 -2
  207. package/lib/esm/core-geometry.js.map +1 -1
  208. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  209. package/lib/esm/curve/Arc3d.js +5 -5
  210. package/lib/esm/curve/Arc3d.js.map +1 -1
  211. package/lib/esm/curve/CurveLocationDetail.d.ts +1 -4
  212. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  213. package/lib/esm/curve/CurveLocationDetail.js +4 -10
  214. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  215. package/lib/esm/curve/CurveOps.d.ts +4 -5
  216. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  217. package/lib/esm/curve/CurveOps.js +1 -1
  218. package/lib/esm/curve/CurveOps.js.map +1 -1
  219. package/lib/esm/curve/CurveTypes.d.ts +14 -2
  220. package/lib/esm/curve/CurveTypes.d.ts.map +1 -1
  221. package/lib/esm/curve/CurveTypes.js.map +1 -1
  222. package/lib/esm/curve/LineString3d.d.ts +3 -2
  223. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  224. package/lib/esm/curve/LineString3d.js +1 -0
  225. package/lib/esm/curve/LineString3d.js.map +1 -1
  226. package/lib/esm/curve/PointString3d.d.ts +2 -1
  227. package/lib/esm/curve/PointString3d.d.ts.map +1 -1
  228. package/lib/esm/curve/PointString3d.js.map +1 -1
  229. package/lib/esm/curve/RegionOps.d.ts +5 -11
  230. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  231. package/lib/esm/curve/RegionOps.js.map +1 -1
  232. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +15 -9
  233. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  234. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +69 -57
  235. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  236. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +14 -16
  237. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  238. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +51 -68
  239. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  240. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -1
  241. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +3 -2
  242. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  243. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +2 -3
  244. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  245. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  246. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +4 -4
  247. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  248. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +38 -36
  249. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  250. package/lib/esm/geometry3d/Angle.d.ts +0 -1
  251. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  252. package/lib/esm/geometry3d/Angle.js +0 -1
  253. package/lib/esm/geometry3d/Angle.js.map +1 -1
  254. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +21 -5
  255. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  256. package/lib/esm/geometry3d/CoincidentGeometryOps.js +71 -45
  257. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  258. package/lib/esm/geometry3d/Matrix3d.d.ts +20 -13
  259. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  260. package/lib/esm/geometry3d/Matrix3d.js +28 -21
  261. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  262. package/lib/esm/geometry3d/Point3dVector3d.d.ts +11 -2
  263. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  264. package/lib/esm/geometry3d/Point3dVector3d.js +16 -5
  265. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  266. package/lib/esm/geometry3d/PointHelpers.d.ts +58 -20
  267. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  268. package/lib/esm/geometry3d/PointHelpers.js +213 -62
  269. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  270. package/lib/esm/geometry3d/Segment1d.d.ts +5 -1
  271. package/lib/esm/geometry3d/Segment1d.d.ts.map +1 -1
  272. package/lib/esm/geometry3d/Segment1d.js +11 -7
  273. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  274. package/lib/esm/geometry3d/Transform.d.ts +4 -5
  275. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  276. package/lib/esm/geometry3d/Transform.js +4 -5
  277. package/lib/esm/geometry3d/Transform.js.map +1 -1
  278. package/lib/esm/geometry4d/Point4d.d.ts +13 -0
  279. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  280. package/lib/esm/geometry4d/Point4d.js +21 -0
  281. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  282. package/lib/esm/numerics/BezierPolynomials.d.ts +88 -64
  283. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  284. package/lib/esm/numerics/BezierPolynomials.js +92 -73
  285. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  286. package/lib/esm/numerics/Newton.d.ts +143 -61
  287. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  288. package/lib/esm/numerics/Newton.js +229 -65
  289. package/lib/esm/numerics/Newton.js.map +1 -1
  290. package/lib/esm/numerics/PascalCoefficients.d.ts +8 -12
  291. package/lib/esm/numerics/PascalCoefficients.d.ts.map +1 -1
  292. package/lib/esm/numerics/PascalCoefficients.js +10 -12
  293. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  294. package/lib/esm/numerics/Polynomials.d.ts +6 -10
  295. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  296. package/lib/esm/numerics/Polynomials.js +6 -10
  297. package/lib/esm/numerics/Polynomials.js.map +1 -1
  298. package/lib/esm/polyface/PolyfaceBuilder.d.ts +3 -0
  299. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  300. package/lib/esm/polyface/PolyfaceBuilder.js +13 -2
  301. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  302. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  303. package/lib/esm/polyface/PolyfaceData.js +1 -1
  304. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  305. package/lib/esm/polyface/PolyfaceQuery.d.ts +38 -11
  306. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  307. package/lib/esm/polyface/PolyfaceQuery.js +93 -16
  308. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  309. package/lib/esm/serialization/BGFBReader.d.ts +10 -10
  310. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  311. package/lib/esm/serialization/BGFBReader.js +69 -42
  312. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  313. package/lib/esm/serialization/BGFBWriter.d.ts +8 -8
  314. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  315. package/lib/esm/serialization/BGFBWriter.js +80 -55
  316. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  317. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  318. package/lib/esm/serialization/GeometrySamples.js +7 -9
  319. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  320. package/lib/esm/serialization/IModelJsonSchema.d.ts +8 -14
  321. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  322. package/lib/esm/serialization/IModelJsonSchema.js +86 -260
  323. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  324. package/lib/esm/serialization/SerializationHelpers.d.ts +109 -0
  325. package/lib/esm/serialization/SerializationHelpers.d.ts.map +1 -0
  326. package/lib/esm/serialization/SerializationHelpers.js +588 -0
  327. package/lib/esm/serialization/SerializationHelpers.js.map +1 -0
  328. package/lib/esm/topology/Graph.d.ts +399 -366
  329. package/lib/esm/topology/Graph.d.ts.map +1 -1
  330. package/lib/esm/topology/Graph.js +531 -464
  331. package/lib/esm/topology/Graph.js.map +1 -1
  332. package/lib/esm/topology/MaskManager.d.ts +8 -9
  333. package/lib/esm/topology/MaskManager.d.ts.map +1 -1
  334. package/lib/esm/topology/MaskManager.js +11 -12
  335. package/lib/esm/topology/MaskManager.js.map +1 -1
  336. package/package.json +3 -4
@@ -18,7 +18,7 @@ export declare class NumberArray {
18
18
  /** Return true if arrays have identical counts and equal entries (using `!==` comparison) */
19
19
  static isExactEqual(dataA: any[] | Float64Array | undefined, dataB: any[] | Float64Array | undefined): boolean;
20
20
  /** Return true if arrays have identical counts and entries equal within tolerance */
21
- static isAlmostEqual(dataA: number[] | Float64Array | undefined, dataB: number[] | Float64Array | undefined, tolerance: number): boolean;
21
+ static isAlmostEqual(dataA: number[] | Float64Array | undefined, dataB: number[] | Float64Array | undefined, tolerance?: number): boolean;
22
22
  /** return the sum of numbers in an array. Note that "PreciseSum" may be more accurate. */
23
23
  static sum(data: number[] | Float64Array): number;
24
24
  /** test if coordinate x appears (to tolerance by `Geometry.isSameCoordinate`) in this array of numbers */
@@ -42,8 +42,23 @@ export declare class NumberArray {
42
42
  * @param step max permitted step
43
43
  */
44
44
  static createArrayWithMaxStepSize(low: number, high: number, step: number): number[];
45
- /** copy numbers from variant sources to number[]. */
45
+ /** Copy numbers from variant sources to number[]. */
46
46
  static create(source: number[] | Float64Array): number[];
47
+ /** Copy number[][]. */
48
+ static copy2d(source: number[][]): number[][];
49
+ /** Copy number[][][]. */
50
+ static copy3d(source: number[][][]): number[][][];
51
+ /** Copy numbers from Float64Array to number[][].
52
+ * @param numPerBlock block size
53
+ */
54
+ static unpack2d(source: Float64Array, numPerBlock: number): number[][] | undefined;
55
+ /** Copy numbers from Float64Array to number[][][].
56
+ * @param numPerRow row size
57
+ * @param numPerBlock block size
58
+ */
59
+ static unpack3d(source: Float64Array, numPerRow: number, numPerBlock: number): number[][][] | undefined;
60
+ /** Copy numbers from 1d/2d/3d array to Float64Array. */
61
+ static pack(source: number[] | number[][] | number[][][]): Float64Array;
47
62
  /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */
48
63
  static cloneWithStartAndEndMultiplicity(knots: number[] | undefined, target0: number, target1: number): number[];
49
64
  /** Compute the linear combination s of the numbers and scales.
@@ -96,13 +111,30 @@ export declare class Vector3dArray {
96
111
  * @public
97
112
  */
98
113
  export declare class Point4dArray {
99
- /** pack each point and its corresponding weight into a buffer of xyzw xyzw ... */
114
+ /**
115
+ * Copy each weighted point and its corresponding weight into a packed buffer.
116
+ * @param data array of weighted xyz
117
+ * @param weights scalar weight array
118
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
119
+ * @return packed weighted point array
120
+ */
100
121
  static packPointsAndWeightsToFloat64Array(data: Point3d[] | Float64Array | number[], weights: number[] | Float64Array, result?: Float64Array): Float64Array | undefined;
101
- /** pack x,y,z,w in Float64Array. */
122
+ /**
123
+ * Copy 4d points into a packed buffer.
124
+ * @param data array of xyzw
125
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
126
+ * @return packed point array
127
+ */
102
128
  static packToFloat64Array(data: Point4d[], result?: Float64Array): Float64Array;
103
129
  /** unpack from ... to array of Point4d */
104
130
  static unpackToPoint4dArray(data: Float64Array): Point4d[];
105
- /** unpack from xyzw xyzw... array to array of Point3d and array of weight.
131
+ /**
132
+ * Unpack packed 4D data to a Point3d array and an array of weights.
133
+ * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].
134
+ * @param data input 4D points (packed)
135
+ * @param points output 3D data
136
+ * @param weights output weights (w portion of input)
137
+ * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.
106
138
  */
107
139
  static unpackFloat64ArrayToPointsAndWeights(data: Float64Array, points: Point3d[], weights: number[], pointFormatter?: (x: number, y: number, z: number) => any): void;
108
140
  private static _workPoint4d;
@@ -112,7 +144,7 @@ export declare class Point4dArray {
112
144
  * @param xyzw array of x,y,z,w points.
113
145
  */
114
146
  static multiplyInPlace(transform: Transform, xyzw: Float64Array): void;
115
- /** test for near equality of all corresponding numeric values, treated as coordinates. */
147
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
116
148
  static isAlmostEqual(dataA: Point4d[] | Float64Array | undefined, dataB: Point4d[] | Float64Array | undefined): boolean;
117
149
  /** return true iff all xyzw points' altitudes are within tolerance of the plane.*/
118
150
  static isCloseToPlane(data: Point4d[] | Float64Array, plane: Plane3dByOriginAndUnitNormal, tolerance?: number): boolean;
@@ -122,8 +154,13 @@ export declare class Point4dArray {
122
154
  * @public
123
155
  */
124
156
  export declare class Point3dArray {
125
- /** pack x,y,z to `Float64Array` */
126
- static packToFloat64Array(data: Point3d[]): Float64Array;
157
+ /**
158
+ * Copy 3d points into a packed buffer.
159
+ * @param data array of xyz
160
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
161
+ * @return packed point array
162
+ */
163
+ static packToFloat64Array(data: Point3d[], result?: Float64Array): Float64Array;
127
164
  /**
128
165
  * Compute the 8 weights of trilinear mapping
129
166
  * By appropriate choice of weights, this can be used for both point and derivative mappings.
@@ -187,14 +224,15 @@ export declare class Point3dArray {
187
224
  */
188
225
  static unpackNumbersToNestedArrays(data: Float64Array, numPerBlock: number): any[];
189
226
  /**
190
- * return an 3-dimensional array containing all the values of `data` in arrays numPerRow blocks of numPerBlock
227
+ * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.
191
228
  * @param data simple array of numbers
192
- * @param numPerBlock number of values in each block at first level down
229
+ * @param numPerBlock number of values in each block
230
+ * @param numPerRow number of blocks per row
193
231
  */
194
232
  static unpackNumbersToNestedArraysIJK(data: Float64Array, numPerBlock: number, numPerRow: number): any[];
195
233
  /** multiply a transform times each x,y,z triple and replace the x,y,z in the packed array */
196
234
  static multiplyInPlace(transform: Transform, xyz: Float64Array): void;
197
- /** Apply Geometry.isAlmostEqual to corresponding coordinates */
235
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
198
236
  static isAlmostEqual(dataA: Point3d[] | Float64Array | undefined, dataB: Point3d[] | Float64Array | undefined): boolean;
199
237
  /** return simple average of all coordinates. (000 if empty array) */
200
238
  static centroid(points: IndexedXYZCollection | Point3d[], result?: Point3d): Point3d;
@@ -255,18 +293,18 @@ export declare class Point3dArray {
255
293
  */
256
294
  static cloneDeepXYZPoint3dArrays(data: MultiLineStringDataVariant): any[];
257
295
  /**
258
- * return perpendicular distance from points[indexB] to the segment points[indexA] to points[indexC].
259
- * * extrapolation option when projection is outside of fraction range 0..1 are:
260
- * * false ==> measure distance to closest endpoint
261
- * * true ==> measure distance to extended line segment.
262
- * (no index checking!)
296
+ * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].
297
+ * * Extrapolation options when the projection is outside of the fraction range [0,1] are:
298
+ * * false ==> return distance to closest endpoint
299
+ * * true ==> return distance to extended line segment
300
+ * * There is no index checking!
263
301
  */
264
302
  static distanceIndexedPointBToSegmentAC(points: Point3d[], indexA: number, indexB: number, indexC: number, extrapolate: boolean): number;
265
303
  /** Computes the hull of the XY projection of points.
266
- * * Returns the hull as an array of Point3d
267
- * * Optionally returns non-hull points in `insidePoints[]`
268
- * * If both arrays empty if less than 3 points.
269
- * *
304
+ * @param points input points, z-coordinates ignored
305
+ * @param hullPoints (output) points on the convex hull (cloned from input points)
306
+ * @param insidePoints (output) points not on the convex hull (cloned from input points)
307
+ * @param addClosurePoint whether to append the first hull point to `hullPoints`
270
308
  */
271
309
  static computeConvexHullXY(points: Point3d[], hullPoints: Point3d[], insidePoints: Point3d[], addClosurePoint?: boolean): void;
272
310
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"PointHelpers.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointHelpers.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/PointHelpers.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiBrD;;;GAGG;AACH,qBAAa,WAAW;IACtB;;OAEG;WACW,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAgBhD,6FAA6F;WAC/E,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO;IAWrH,qFAAqF;WACvE,aAAa,CACzB,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,SAAS,EAC1C,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,SAAS,EAC1C,SAAS,GAAE,MAAqC,GAAG,OAAO;IAY5D,2FAA2F;WAC7E,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,MAAM;IAKxD,0GAA0G;WAC5F,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO;IAMjF,2DAA2D;WAC7C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAcnD,yDAAyD;WAC3C,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAKvD;;OAEG;WACW,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,MAAM;IAOhG;;OAEG;WACW,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM;IAMjF;;;;;OAKG;WACW,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAc3F,qDAAqD;WACvC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,MAAM,EAAE;IAO/D,uBAAuB;WACT,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;IAWpD,yBAAyB;WACX,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE;IAexD;;OAEG;WACW,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,SAAS;IAMzF;;;OAGG;WACW,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS;IAM9G,wDAAwD;WAC1C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY;IAuC9E,6HAA6H;WAC/G,gCAAgC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAqBvH;;;;OAIG;WACW,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAQzE;;;;;OAKG;WACW,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;CAcpF;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,uEAAuE;WACzD,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,OAAO;IAYhG;;;OAGG;WACW,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IAG3D;;;OAGG;WACW,qCAAqC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM;CAc3E;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,uEAAuE;WACzD,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,GAAG,OAAO;IAWlG;;;OAGG;WACW,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE;CAG7D;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;;;;OAMG;WACW,kCAAkC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS;IAkC9K;;;;;OAKG;WACW,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAatF,2CAA2C;WAC7B,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE;IAOjE;;;;;;;OAOG;WACW,oCAAoC,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EACzG,cAAc,GAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,GAA0C;IAQjG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoB;IAC/C;;;;OAIG;WACW,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAW7E,iGAAiG;WACnF,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO;IAgC9H,mFAAmF;WACrE,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,GAAE,MAAqC,GAAG,OAAO;CAgB7J;AACD;;;GAGG;AAEH,qBAAa,YAAY;IACvB;;;;;OAKG;WACW,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAYtF;;;;;;;;;;OAUG;WACW,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAWpI;;;;;;OAMG;WACW,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;IAQ5E;;;;;;OAMG;WACW,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;IAQ5E;;;;;;OAMG;WACW,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;IAQ5E,OAAO,CAAC,MAAM,CAAC,UAAU,CAAuB;IAChD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuB;IAC/C;;;;OAIG;WACW,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAYnH;;;;;;OAMG;WACW,oCAAoC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS;IAWrI,0EAA0E;WAC5D,2BAA2B,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE;IAQnF;;;;OAIG;WACW,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE;IAmBzF;;;;;OAKG;WACW,8BAA8B,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE;IAuB/G,8FAA8F;WAChF,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI;IAU5E,iGAAiG;WACnF,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO;IAgC9H,uEAAuE;WACzD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAiB3F,iEAAiE;WACnD,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;IAgBlH,gIAAgI;WAClH,wCAAwC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;IAmBzJ,oEAAoE;WACtD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAgB3E,8EAA8E;WAChE,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,GAAE,MAAqC,GAAG,OAAO;IAiB5J;;;OAGG;WACW,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,cAAc,GAAE,OAAe,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IA0B9H;;;;;OAKG;WACW,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,GAAE,MAAqC,GAAG,MAAM;IAe7G;;;OAGG;WACW,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,GAAG,OAAO,EAAE;IAiB3E;;;OAGG;WACW,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IAG1D;;;;OAIG;WACW,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,EAAE;IAczF,mDAAmD;IACnD,OAAO,CAAC,MAAM,CAAC,UAAU;IAEzB;;;OAGG;WACW,yBAAyB,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,EAAE,EAAE;IAKrF;;OAEG;WACW,0BAA0B,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE;IAoBtE;;OAEG;WACW,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY;IAqBzE;;;OAGG;WACW,yBAAyB,CAAC,IAAI,EAAE,0BAA0B,GAAG,GAAG,EAAE;IAMhF;;;;;;OAMG;WACW,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM;IAoB/I;;;;;OAKG;WACW,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,eAAe,GAAE,OAAe;IAiDrI;;;OAGG;WACW,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;CAc5I"}
@@ -65,12 +65,12 @@ export class NumberArray {
65
65
  return (dataA === undefined && dataB === undefined);
66
66
  }
67
67
  /** Return true if arrays have identical counts and entries equal within tolerance */
68
- static isAlmostEqual(dataA, dataB, tolerance) {
68
+ static isAlmostEqual(dataA, dataB, tolerance = Geometry.smallMetricDistance) {
69
69
  if (dataA && dataB) {
70
70
  if (dataA.length !== dataB.length)
71
71
  return false;
72
72
  for (let i = 0; i < dataA.length; i++)
73
- if (Math.abs(dataA[i] - dataB[i]) >= tolerance)
73
+ if (Math.abs(dataA[i] - dataB[i]) > tolerance)
74
74
  return false;
75
75
  return true;
76
76
  }
@@ -156,13 +156,97 @@ export class NumberArray {
156
156
  result.push(high);
157
157
  return result;
158
158
  }
159
- /** copy numbers from variant sources to number[]. */
159
+ /** Copy numbers from variant sources to number[]. */
160
160
  static create(source) {
161
161
  const result = [];
162
162
  for (const q of source)
163
163
  result.push(q);
164
164
  return result;
165
165
  }
166
+ /** Copy number[][]. */
167
+ static copy2d(source) {
168
+ const result = [];
169
+ for (const row of source) {
170
+ const newRow = [];
171
+ for (const entry of row)
172
+ newRow.push(entry);
173
+ result.push(newRow);
174
+ }
175
+ return result;
176
+ }
177
+ /** Copy number[][][]. */
178
+ static copy3d(source) {
179
+ const result = [];
180
+ for (const row of source) {
181
+ const newRow = [];
182
+ for (const block of row) {
183
+ const newBlock = [];
184
+ for (const entry of block)
185
+ newBlock.push(entry);
186
+ newRow.push(newBlock);
187
+ }
188
+ result.push(newRow);
189
+ }
190
+ return result;
191
+ }
192
+ /** Copy numbers from Float64Array to number[][].
193
+ * @param numPerBlock block size
194
+ */
195
+ static unpack2d(source, numPerBlock) {
196
+ if (numPerBlock < 1)
197
+ return undefined;
198
+ return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock);
199
+ }
200
+ /** Copy numbers from Float64Array to number[][][].
201
+ * @param numPerRow row size
202
+ * @param numPerBlock block size
203
+ */
204
+ static unpack3d(source, numPerRow, numPerBlock) {
205
+ if (numPerBlock < 1 || numPerRow < 1)
206
+ return undefined;
207
+ return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow);
208
+ }
209
+ /** Copy numbers from 1d/2d/3d array to Float64Array. */
210
+ static pack(source) {
211
+ const numRows = source.length;
212
+ let numPerRow = 0;
213
+ let numPerBlock = 0;
214
+ let numCoords = 0;
215
+ if (numRows > 0) {
216
+ numCoords = numRows;
217
+ if (Array.isArray(source[0])) {
218
+ numPerRow = source[0].length;
219
+ if (numPerRow > 0) {
220
+ numCoords *= numPerRow;
221
+ if (Array.isArray(source[0][0])) {
222
+ numPerBlock = source[0][0].length;
223
+ if (numPerBlock > 0)
224
+ numCoords *= numPerBlock;
225
+ }
226
+ }
227
+ }
228
+ }
229
+ const result = new Float64Array(numCoords);
230
+ if (numPerBlock > 0) {
231
+ const src3d = source;
232
+ for (let i = 0, c = 0; i < numRows; ++i)
233
+ for (let j = 0; j < numPerRow; ++j)
234
+ for (let k = 0; k < numPerBlock; ++k)
235
+ result[c++] = src3d[i][j][k];
236
+ }
237
+ else if (numPerRow > 0) {
238
+ const src2d = source;
239
+ for (let i = 0, c = 0; i < numRows; ++i)
240
+ for (let j = 0; j < numPerRow; ++j)
241
+ result[c++] = src2d[i][j];
242
+ }
243
+ else if (numRows > 0) {
244
+ const src1d = source;
245
+ for (let i = 0, c = 0; i < numRows; ++i)
246
+ result[c++] = src1d[i];
247
+ }
248
+ return result;
249
+ }
166
250
  /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */
167
251
  static cloneWithStartAndEndMultiplicity(knots, target0, target1) {
168
252
  const result = [];
@@ -293,16 +377,23 @@ export class Vector3dArray {
293
377
  * @public
294
378
  */
295
379
  class Point4dArray {
296
- /** pack each point and its corresponding weight into a buffer of xyzw xyzw ... */
380
+ /**
381
+ * Copy each weighted point and its corresponding weight into a packed buffer.
382
+ * @param data array of weighted xyz
383
+ * @param weights scalar weight array
384
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
385
+ * @return packed weighted point array
386
+ */
297
387
  static packPointsAndWeightsToFloat64Array(data, weights, result) {
388
+ let points;
298
389
  if (Array.isArray(data) && data[0] instanceof Point3d) {
299
- const points = data;
390
+ points = data;
300
391
  if (points.length !== weights.length)
301
392
  return undefined;
302
- result = result ? result : new Float64Array(4 * points.length);
303
- let i = 0;
304
- let k = 0;
305
- for (k = 0; k < points.length; k++) {
393
+ const numValues = 4 * points.length;
394
+ if (!result || result.length < numValues)
395
+ result = new Float64Array(numValues);
396
+ for (let i = 0, k = 0; k < points.length; k++) {
306
397
  result[i++] = points[k].x;
307
398
  result[i++] = points[k].y;
308
399
  result[i++] = points[k].z;
@@ -310,28 +401,32 @@ class Point4dArray {
310
401
  }
311
402
  return result;
312
403
  }
313
- else {
314
- const points = data;
315
- const numPoints = weights.length;
316
- if (points.length !== 3 * numPoints)
317
- return undefined;
318
- let i = 0;
319
- let k;
320
- result = result ? result : new Float64Array(4 * numPoints);
321
- for (k = 0; k < numPoints; k++) {
322
- const k0 = 3 * k;
323
- result[i++] = points[k0];
324
- result[i++] = points[k0 + 1];
325
- result[i++] = points[k0 + 2];
326
- result[i++] = weights[k];
327
- }
328
- return result;
404
+ points = data;
405
+ const numPoints = weights.length;
406
+ if (points.length !== 3 * numPoints)
407
+ return undefined;
408
+ const numValues1 = 4 * numPoints;
409
+ if (!result || result.length < numValues1)
410
+ result = new Float64Array(numValues1);
411
+ for (let i = 0, k = 0; k < numPoints; k++) {
412
+ const k0 = 3 * k;
413
+ result[i++] = points[k0];
414
+ result[i++] = points[k0 + 1];
415
+ result[i++] = points[k0 + 2];
416
+ result[i++] = weights[k];
329
417
  }
330
- return undefined;
418
+ return result;
331
419
  }
332
- /** pack x,y,z,w in Float64Array. */
420
+ /**
421
+ * Copy 4d points into a packed buffer.
422
+ * @param data array of xyzw
423
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
424
+ * @return packed point array
425
+ */
333
426
  static packToFloat64Array(data, result) {
334
- result = result ? result : new Float64Array(4 * data.length);
427
+ const numValues = 4 * data.length;
428
+ if (!result || result.length < numValues)
429
+ result = new Float64Array(numValues);
335
430
  let i = 0;
336
431
  for (const p of data) {
337
432
  result[i++] = p.x;
@@ -349,7 +444,13 @@ class Point4dArray {
349
444
  }
350
445
  return result;
351
446
  }
352
- /** unpack from xyzw xyzw... array to array of Point3d and array of weight.
447
+ /**
448
+ * Unpack packed 4D data to a Point3d array and an array of weights.
449
+ * * `WeightStyle` of `data` is not assumed. If input data is of form [a,b,c,d], default output arrays will have form [a,b,c] and [d].
450
+ * @param data input 4D points (packed)
451
+ * @param points output 3D data
452
+ * @param weights output weights (w portion of input)
453
+ * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.
353
454
  */
354
455
  static unpackFloat64ArrayToPointsAndWeights(data, points, weights, pointFormatter = (x, y, z) => Point3d.create(x, y, z)) {
355
456
  points.length = 0;
@@ -375,21 +476,36 @@ class Point4dArray {
375
476
  xyzw[i + 3] = xyzw1.w;
376
477
  }
377
478
  }
378
- /** test for near equality of all corresponding numeric values, treated as coordinates. */
479
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
379
480
  static isAlmostEqual(dataA, dataB) {
380
481
  if (dataA && dataB) {
381
- if (dataA.length !== dataB.length)
382
- return false;
383
482
  if (dataA instanceof Float64Array && dataB instanceof Float64Array) {
483
+ if (dataA.length !== dataB.length)
484
+ return false;
384
485
  for (let i = 0; i < dataA.length; i++)
385
486
  if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))
386
487
  return false;
387
488
  }
388
489
  else if (Array.isArray(dataA) && Array.isArray(dataB)) {
490
+ if (dataA.length !== dataB.length)
491
+ return false;
389
492
  for (let i = 0; i < dataA.length; i++)
390
493
  if (!dataA[i].isAlmostEqual(dataB[i]))
391
494
  return false;
392
495
  }
496
+ else { // different types
497
+ const points = dataA instanceof Float64Array ? dataB : dataA;
498
+ const numbers = dataA instanceof Float64Array ? dataA : dataB;
499
+ if (numbers.length !== points.length * 4)
500
+ return false;
501
+ for (let iPoint = 0; iPoint < points.length; ++iPoint) {
502
+ if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint]) ||
503
+ !Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1]) ||
504
+ !Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2]) ||
505
+ !Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3]))
506
+ return false;
507
+ }
508
+ }
393
509
  return true;
394
510
  }
395
511
  // if both are null it is equal, otherwise unequal
@@ -420,9 +536,16 @@ export { Point4dArray };
420
536
  * @public
421
537
  */
422
538
  class Point3dArray {
423
- /** pack x,y,z to `Float64Array` */
424
- static packToFloat64Array(data) {
425
- const result = new Float64Array(3 * data.length);
539
+ /**
540
+ * Copy 3d points into a packed buffer.
541
+ * @param data array of xyz
542
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
543
+ * @return packed point array
544
+ */
545
+ static packToFloat64Array(data, result) {
546
+ const numValues = 3 * data.length;
547
+ if (!result || result.length < numValues)
548
+ result = new Float64Array(numValues);
426
549
  let i = 0;
427
550
  for (const p of data) {
428
551
  result[i++] = p.x;
@@ -558,9 +681,10 @@ class Point3dArray {
558
681
  return result;
559
682
  }
560
683
  /**
561
- * return an 3-dimensional array containing all the values of `data` in arrays numPerRow blocks of numPerBlock
684
+ * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.
562
685
  * @param data simple array of numbers
563
- * @param numPerBlock number of values in each block at first level down
686
+ * @param numPerBlock number of values in each block
687
+ * @param numPerRow number of blocks per row
564
688
  */
565
689
  static unpackNumbersToNestedArraysIJK(data, numPerBlock, numPerRow) {
566
690
  const result = [];
@@ -596,21 +720,35 @@ class Point3dArray {
596
720
  xyz[i + 2] = xyz1.z;
597
721
  }
598
722
  }
599
- /** Apply Geometry.isAlmostEqual to corresponding coordinates */
723
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
600
724
  static isAlmostEqual(dataA, dataB) {
601
725
  if (dataA && dataB) {
602
- if (dataA.length !== dataB.length)
603
- return false;
604
726
  if (dataA instanceof Float64Array && dataB instanceof Float64Array) {
727
+ if (dataA.length !== dataB.length)
728
+ return false;
605
729
  for (let i = 0; i < dataA.length; i++)
606
730
  if (!Geometry.isSameCoordinate(dataA[i], dataB[i]))
607
731
  return false;
608
732
  }
609
733
  else if (Array.isArray(dataA) && Array.isArray(dataB)) {
734
+ if (dataA.length !== dataB.length)
735
+ return false;
610
736
  for (let i = 0; i < dataA.length; i++)
611
737
  if (!dataA[i].isAlmostEqual(dataB[i]))
612
738
  return false;
613
739
  }
740
+ else { // different types
741
+ const points = dataA instanceof Float64Array ? dataB : dataA;
742
+ const numbers = dataA instanceof Float64Array ? dataA : dataB;
743
+ if (numbers.length !== points.length * 3)
744
+ return false;
745
+ for (let iPoint = 0; iPoint < points.length; ++iPoint) {
746
+ if (!Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint]) ||
747
+ !Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1]) ||
748
+ !Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2]))
749
+ return false;
750
+ }
751
+ }
614
752
  return true;
615
753
  }
616
754
  // if both are null it is equal, otherwise unequal
@@ -819,7 +957,16 @@ class Point3dArray {
819
957
  result.push([p.x, p.y, p.z]);
820
958
  }
821
959
  else if (Array.isArray(p)) {
822
- result.push([p[0], p[1], p.length > 2 ? p[2] : 0.0]);
960
+ const x = p.length > 0 ? p[0] : 0.0;
961
+ const y = p.length > 1 ? p[1] : 0.0;
962
+ const z = p.length > 2 ? p[2] : 0.0;
963
+ result.push([x, y, z]);
964
+ }
965
+ else {
966
+ const x = p.x !== undefined ? p.x : 0.0;
967
+ const y = p.y !== undefined ? p.y : 0.0;
968
+ const z = p.z !== undefined ? p.z : 0.0;
969
+ result.push([x, y, z]);
823
970
  }
824
971
  }
825
972
  return result;
@@ -837,9 +984,14 @@ class Point3dArray {
837
984
  result[i++] = p.z;
838
985
  }
839
986
  else if (Array.isArray(p)) {
840
- result[i++] = p[0];
841
- result[i++] = p[1];
842
- result[i++] = p.length > 2 ? p[2] : 0.0; // allow missing z
987
+ result[i++] = p.length > 0 ? p[0] : 0.0;
988
+ result[i++] = p.length > 1 ? p[1] : 0.0;
989
+ result[i++] = p.length > 2 ? p[2] : 0.0;
990
+ }
991
+ else {
992
+ result[i++] = p.x !== undefined ? p.x : 0.0;
993
+ result[i++] = p.y !== undefined ? p.y : 0.0;
994
+ result[i++] = p.z !== undefined ? p.z : 0.0;
843
995
  }
844
996
  }
845
997
  return result;
@@ -854,37 +1006,36 @@ class Point3dArray {
854
1006
  return collector.claimResult();
855
1007
  }
856
1008
  /**
857
- * return perpendicular distance from points[indexB] to the segment points[indexA] to points[indexC].
858
- * * extrapolation option when projection is outside of fraction range 0..1 are:
859
- * * false ==> measure distance to closest endpoint
860
- * * true ==> measure distance to extended line segment.
861
- * (no index checking!)
1009
+ * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].
1010
+ * * Extrapolation options when the projection is outside of the fraction range [0,1] are:
1011
+ * * false ==> return distance to closest endpoint
1012
+ * * true ==> return distance to extended line segment
1013
+ * * There is no index checking!
862
1014
  */
863
1015
  static distanceIndexedPointBToSegmentAC(points, indexA, indexB, indexC, extrapolate) {
864
1016
  const vectorU = Vector3d.createStartEnd(points[indexA], points[indexC]);
865
1017
  const vectorV = Vector3d.createStartEnd(points[indexA], points[indexB]);
866
1018
  const uDotU = vectorU.dotProduct(vectorU);
867
1019
  const uDotV = vectorU.dotProduct(vectorV);
868
- let fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);
1020
+ const fraction = Geometry.conditionalDivideFraction(uDotV, uDotU);
869
1021
  if (fraction === undefined)
870
- fraction = 0.0;
1022
+ return vectorV.magnitude(); // AC is degenerate; return ||B-A||
871
1023
  if (!extrapolate) {
872
1024
  if (fraction > 1.0)
873
- fraction = 1.0;
1025
+ return points[indexB].distance(points[indexC]); // return ||B-C||
874
1026
  if (fraction < 0.0)
875
- fraction = 0.0;
1027
+ return vectorV.magnitude(); // return ||B-A||
876
1028
  }
877
- let h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;
878
- // h2 should never be negative except for quirky tolerance ..
879
- if (h2 < 0.0)
880
- h2 = 0.0;
881
- return Math.sqrt(h2);
1029
+ // return distance to projection on (extended) segment
1030
+ const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;
1031
+ // h2 should never be negative except for quirky tolerance...
1032
+ return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);
882
1033
  }
883
1034
  /** Computes the hull of the XY projection of points.
884
- * * Returns the hull as an array of Point3d
885
- * * Optionally returns non-hull points in `insidePoints[]`
886
- * * If both arrays empty if less than 3 points.
887
- * *
1035
+ * @param points input points, z-coordinates ignored
1036
+ * @param hullPoints (output) points on the convex hull (cloned from input points)
1037
+ * @param insidePoints (output) points not on the convex hull (cloned from input points)
1038
+ * @param addClosurePoint whether to append the first hull point to `hullPoints`
888
1039
  */
889
1040
  static computeConvexHullXY(points, hullPoints, insidePoints, addClosurePoint = false) {
890
1041
  hullPoints.length = 0;