@itwin/core-geometry 4.3.0-dev.8 → 4.3.0

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 +57 -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":"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"}
@@ -68,12 +68,12 @@ class NumberArray {
68
68
  return (dataA === undefined && dataB === undefined);
69
69
  }
70
70
  /** Return true if arrays have identical counts and entries equal within tolerance */
71
- static isAlmostEqual(dataA, dataB, tolerance) {
71
+ static isAlmostEqual(dataA, dataB, tolerance = Geometry_1.Geometry.smallMetricDistance) {
72
72
  if (dataA && dataB) {
73
73
  if (dataA.length !== dataB.length)
74
74
  return false;
75
75
  for (let i = 0; i < dataA.length; i++)
76
- if (Math.abs(dataA[i] - dataB[i]) >= tolerance)
76
+ if (Math.abs(dataA[i] - dataB[i]) > tolerance)
77
77
  return false;
78
78
  return true;
79
79
  }
@@ -159,13 +159,97 @@ class NumberArray {
159
159
  result.push(high);
160
160
  return result;
161
161
  }
162
- /** copy numbers from variant sources to number[]. */
162
+ /** Copy numbers from variant sources to number[]. */
163
163
  static create(source) {
164
164
  const result = [];
165
165
  for (const q of source)
166
166
  result.push(q);
167
167
  return result;
168
168
  }
169
+ /** Copy number[][]. */
170
+ static copy2d(source) {
171
+ const result = [];
172
+ for (const row of source) {
173
+ const newRow = [];
174
+ for (const entry of row)
175
+ newRow.push(entry);
176
+ result.push(newRow);
177
+ }
178
+ return result;
179
+ }
180
+ /** Copy number[][][]. */
181
+ static copy3d(source) {
182
+ const result = [];
183
+ for (const row of source) {
184
+ const newRow = [];
185
+ for (const block of row) {
186
+ const newBlock = [];
187
+ for (const entry of block)
188
+ newBlock.push(entry);
189
+ newRow.push(newBlock);
190
+ }
191
+ result.push(newRow);
192
+ }
193
+ return result;
194
+ }
195
+ /** Copy numbers from Float64Array to number[][].
196
+ * @param numPerBlock block size
197
+ */
198
+ static unpack2d(source, numPerBlock) {
199
+ if (numPerBlock < 1)
200
+ return undefined;
201
+ return Point3dArray.unpackNumbersToNestedArrays(source, numPerBlock);
202
+ }
203
+ /** Copy numbers from Float64Array to number[][][].
204
+ * @param numPerRow row size
205
+ * @param numPerBlock block size
206
+ */
207
+ static unpack3d(source, numPerRow, numPerBlock) {
208
+ if (numPerBlock < 1 || numPerRow < 1)
209
+ return undefined;
210
+ return Point3dArray.unpackNumbersToNestedArraysIJK(source, numPerBlock, numPerRow);
211
+ }
212
+ /** Copy numbers from 1d/2d/3d array to Float64Array. */
213
+ static pack(source) {
214
+ const numRows = source.length;
215
+ let numPerRow = 0;
216
+ let numPerBlock = 0;
217
+ let numCoords = 0;
218
+ if (numRows > 0) {
219
+ numCoords = numRows;
220
+ if (Array.isArray(source[0])) {
221
+ numPerRow = source[0].length;
222
+ if (numPerRow > 0) {
223
+ numCoords *= numPerRow;
224
+ if (Array.isArray(source[0][0])) {
225
+ numPerBlock = source[0][0].length;
226
+ if (numPerBlock > 0)
227
+ numCoords *= numPerBlock;
228
+ }
229
+ }
230
+ }
231
+ }
232
+ const result = new Float64Array(numCoords);
233
+ if (numPerBlock > 0) {
234
+ const src3d = source;
235
+ for (let i = 0, c = 0; i < numRows; ++i)
236
+ for (let j = 0; j < numPerRow; ++j)
237
+ for (let k = 0; k < numPerBlock; ++k)
238
+ result[c++] = src3d[i][j][k];
239
+ }
240
+ else if (numPerRow > 0) {
241
+ const src2d = source;
242
+ for (let i = 0, c = 0; i < numRows; ++i)
243
+ for (let j = 0; j < numPerRow; ++j)
244
+ result[c++] = src2d[i][j];
245
+ }
246
+ else if (numRows > 0) {
247
+ const src1d = source;
248
+ for (let i = 0, c = 0; i < numRows; ++i)
249
+ result[c++] = src1d[i];
250
+ }
251
+ return result;
252
+ }
169
253
  /** Return a copy of the knots array, with multiplicity of first and last knots raised or lowered to expectedMultiplicity. */
170
254
  static cloneWithStartAndEndMultiplicity(knots, target0, target1) {
171
255
  const result = [];
@@ -299,16 +383,23 @@ exports.Vector3dArray = Vector3dArray;
299
383
  * @public
300
384
  */
301
385
  class Point4dArray {
302
- /** pack each point and its corresponding weight into a buffer of xyzw xyzw ... */
386
+ /**
387
+ * Copy each weighted point and its corresponding weight into a packed buffer.
388
+ * @param data array of weighted xyz
389
+ * @param weights scalar weight array
390
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
391
+ * @return packed weighted point array
392
+ */
303
393
  static packPointsAndWeightsToFloat64Array(data, weights, result) {
394
+ let points;
304
395
  if (Array.isArray(data) && data[0] instanceof Point3dVector3d_1.Point3d) {
305
- const points = data;
396
+ points = data;
306
397
  if (points.length !== weights.length)
307
398
  return undefined;
308
- result = result ? result : new Float64Array(4 * points.length);
309
- let i = 0;
310
- let k = 0;
311
- for (k = 0; k < points.length; k++) {
399
+ const numValues = 4 * points.length;
400
+ if (!result || result.length < numValues)
401
+ result = new Float64Array(numValues);
402
+ for (let i = 0, k = 0; k < points.length; k++) {
312
403
  result[i++] = points[k].x;
313
404
  result[i++] = points[k].y;
314
405
  result[i++] = points[k].z;
@@ -316,28 +407,32 @@ class Point4dArray {
316
407
  }
317
408
  return result;
318
409
  }
319
- else {
320
- const points = data;
321
- const numPoints = weights.length;
322
- if (points.length !== 3 * numPoints)
323
- return undefined;
324
- let i = 0;
325
- let k;
326
- result = result ? result : new Float64Array(4 * numPoints);
327
- for (k = 0; k < numPoints; k++) {
328
- const k0 = 3 * k;
329
- result[i++] = points[k0];
330
- result[i++] = points[k0 + 1];
331
- result[i++] = points[k0 + 2];
332
- result[i++] = weights[k];
333
- }
334
- return result;
410
+ points = data;
411
+ const numPoints = weights.length;
412
+ if (points.length !== 3 * numPoints)
413
+ return undefined;
414
+ const numValues1 = 4 * numPoints;
415
+ if (!result || result.length < numValues1)
416
+ result = new Float64Array(numValues1);
417
+ for (let i = 0, k = 0; k < numPoints; k++) {
418
+ const k0 = 3 * k;
419
+ result[i++] = points[k0];
420
+ result[i++] = points[k0 + 1];
421
+ result[i++] = points[k0 + 2];
422
+ result[i++] = weights[k];
335
423
  }
336
- return undefined;
424
+ return result;
337
425
  }
338
- /** pack x,y,z,w in Float64Array. */
426
+ /**
427
+ * Copy 4d points into a packed buffer.
428
+ * @param data array of xyzw
429
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
430
+ * @return packed point array
431
+ */
339
432
  static packToFloat64Array(data, result) {
340
- result = result ? result : new Float64Array(4 * data.length);
433
+ const numValues = 4 * data.length;
434
+ if (!result || result.length < numValues)
435
+ result = new Float64Array(numValues);
341
436
  let i = 0;
342
437
  for (const p of data) {
343
438
  result[i++] = p.x;
@@ -355,7 +450,13 @@ class Point4dArray {
355
450
  }
356
451
  return result;
357
452
  }
358
- /** unpack from xyzw xyzw... array to array of Point3d and array of weight.
453
+ /**
454
+ * Unpack packed 4D data to a Point3d array and an array of weights.
455
+ * * `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].
456
+ * @param data input 4D points (packed)
457
+ * @param points output 3D data
458
+ * @param weights output weights (w portion of input)
459
+ * @param pointFormatter optional xyz formatter. By default, returns a Point3d created from the xyz portion of the input.
359
460
  */
360
461
  static unpackFloat64ArrayToPointsAndWeights(data, points, weights, pointFormatter = (x, y, z) => Point3dVector3d_1.Point3d.create(x, y, z)) {
361
462
  points.length = 0;
@@ -381,21 +482,36 @@ class Point4dArray {
381
482
  xyzw[i + 3] = xyzw1.w;
382
483
  }
383
484
  }
384
- /** test for near equality of all corresponding numeric values, treated as coordinates. */
485
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
385
486
  static isAlmostEqual(dataA, dataB) {
386
487
  if (dataA && dataB) {
387
- if (dataA.length !== dataB.length)
388
- return false;
389
488
  if (dataA instanceof Float64Array && dataB instanceof Float64Array) {
489
+ if (dataA.length !== dataB.length)
490
+ return false;
390
491
  for (let i = 0; i < dataA.length; i++)
391
492
  if (!Geometry_1.Geometry.isSameCoordinate(dataA[i], dataB[i]))
392
493
  return false;
393
494
  }
394
495
  else if (Array.isArray(dataA) && Array.isArray(dataB)) {
496
+ if (dataA.length !== dataB.length)
497
+ return false;
395
498
  for (let i = 0; i < dataA.length; i++)
396
499
  if (!dataA[i].isAlmostEqual(dataB[i]))
397
500
  return false;
398
501
  }
502
+ else { // different types
503
+ const points = dataA instanceof Float64Array ? dataB : dataA;
504
+ const numbers = dataA instanceof Float64Array ? dataA : dataB;
505
+ if (numbers.length !== points.length * 4)
506
+ return false;
507
+ for (let iPoint = 0; iPoint < points.length; ++iPoint) {
508
+ if (!Geometry_1.Geometry.isSameCoordinate(points[iPoint].x, numbers[4 * iPoint]) ||
509
+ !Geometry_1.Geometry.isSameCoordinate(points[iPoint].y, numbers[4 * iPoint + 1]) ||
510
+ !Geometry_1.Geometry.isSameCoordinate(points[iPoint].z, numbers[4 * iPoint + 2]) ||
511
+ !Geometry_1.Geometry.isSameCoordinate(points[iPoint].w, numbers[4 * iPoint + 3]))
512
+ return false;
513
+ }
514
+ }
399
515
  return true;
400
516
  }
401
517
  // if both are null it is equal, otherwise unequal
@@ -426,9 +542,16 @@ exports.Point4dArray = Point4dArray;
426
542
  * @public
427
543
  */
428
544
  class Point3dArray {
429
- /** pack x,y,z to `Float64Array` */
430
- static packToFloat64Array(data) {
431
- const result = new Float64Array(3 * data.length);
545
+ /**
546
+ * Copy 3d points into a packed buffer.
547
+ * @param data array of xyz
548
+ * @param result optional destination array. If insufficiently sized, a new array is returned.
549
+ * @return packed point array
550
+ */
551
+ static packToFloat64Array(data, result) {
552
+ const numValues = 3 * data.length;
553
+ if (!result || result.length < numValues)
554
+ result = new Float64Array(numValues);
432
555
  let i = 0;
433
556
  for (const p of data) {
434
557
  result[i++] = p.x;
@@ -564,9 +687,10 @@ class Point3dArray {
564
687
  return result;
565
688
  }
566
689
  /**
567
- * return an 3-dimensional array containing all the values of `data` in arrays numPerRow blocks of numPerBlock
690
+ * Return a 3-dimensional array containing all the values of `data` in rows of numPerRow blocks of size numPerBlock.
568
691
  * @param data simple array of numbers
569
- * @param numPerBlock number of values in each block at first level down
692
+ * @param numPerBlock number of values in each block
693
+ * @param numPerRow number of blocks per row
570
694
  */
571
695
  static unpackNumbersToNestedArraysIJK(data, numPerBlock, numPerRow) {
572
696
  const result = [];
@@ -602,21 +726,35 @@ class Point3dArray {
602
726
  xyz[i + 2] = xyz1.z;
603
727
  }
604
728
  }
605
- /** Apply Geometry.isAlmostEqual to corresponding coordinates */
729
+ /** Test arrays for near equality of all corresponding numeric values, treated as coordinates. */
606
730
  static isAlmostEqual(dataA, dataB) {
607
731
  if (dataA && dataB) {
608
- if (dataA.length !== dataB.length)
609
- return false;
610
732
  if (dataA instanceof Float64Array && dataB instanceof Float64Array) {
733
+ if (dataA.length !== dataB.length)
734
+ return false;
611
735
  for (let i = 0; i < dataA.length; i++)
612
736
  if (!Geometry_1.Geometry.isSameCoordinate(dataA[i], dataB[i]))
613
737
  return false;
614
738
  }
615
739
  else if (Array.isArray(dataA) && Array.isArray(dataB)) {
740
+ if (dataA.length !== dataB.length)
741
+ return false;
616
742
  for (let i = 0; i < dataA.length; i++)
617
743
  if (!dataA[i].isAlmostEqual(dataB[i]))
618
744
  return false;
619
745
  }
746
+ else { // different types
747
+ const points = dataA instanceof Float64Array ? dataB : dataA;
748
+ const numbers = dataA instanceof Float64Array ? dataA : dataB;
749
+ if (numbers.length !== points.length * 3)
750
+ return false;
751
+ for (let iPoint = 0; iPoint < points.length; ++iPoint) {
752
+ if (!Geometry_1.Geometry.isSameCoordinate(points[iPoint].x, numbers[3 * iPoint]) ||
753
+ !Geometry_1.Geometry.isSameCoordinate(points[iPoint].y, numbers[3 * iPoint + 1]) ||
754
+ !Geometry_1.Geometry.isSameCoordinate(points[iPoint].z, numbers[3 * iPoint + 2]))
755
+ return false;
756
+ }
757
+ }
620
758
  return true;
621
759
  }
622
760
  // if both are null it is equal, otherwise unequal
@@ -825,7 +963,16 @@ class Point3dArray {
825
963
  result.push([p.x, p.y, p.z]);
826
964
  }
827
965
  else if (Array.isArray(p)) {
828
- result.push([p[0], p[1], p.length > 2 ? p[2] : 0.0]);
966
+ const x = p.length > 0 ? p[0] : 0.0;
967
+ const y = p.length > 1 ? p[1] : 0.0;
968
+ const z = p.length > 2 ? p[2] : 0.0;
969
+ result.push([x, y, z]);
970
+ }
971
+ else {
972
+ const x = p.x !== undefined ? p.x : 0.0;
973
+ const y = p.y !== undefined ? p.y : 0.0;
974
+ const z = p.z !== undefined ? p.z : 0.0;
975
+ result.push([x, y, z]);
829
976
  }
830
977
  }
831
978
  return result;
@@ -843,9 +990,14 @@ class Point3dArray {
843
990
  result[i++] = p.z;
844
991
  }
845
992
  else if (Array.isArray(p)) {
846
- result[i++] = p[0];
847
- result[i++] = p[1];
848
- result[i++] = p.length > 2 ? p[2] : 0.0; // allow missing z
993
+ result[i++] = p.length > 0 ? p[0] : 0.0;
994
+ result[i++] = p.length > 1 ? p[1] : 0.0;
995
+ result[i++] = p.length > 2 ? p[2] : 0.0;
996
+ }
997
+ else {
998
+ result[i++] = p.x !== undefined ? p.x : 0.0;
999
+ result[i++] = p.y !== undefined ? p.y : 0.0;
1000
+ result[i++] = p.z !== undefined ? p.z : 0.0;
849
1001
  }
850
1002
  }
851
1003
  return result;
@@ -860,37 +1012,36 @@ class Point3dArray {
860
1012
  return collector.claimResult();
861
1013
  }
862
1014
  /**
863
- * return perpendicular distance from points[indexB] to the segment points[indexA] to points[indexC].
864
- * * extrapolation option when projection is outside of fraction range 0..1 are:
865
- * * false ==> measure distance to closest endpoint
866
- * * true ==> measure distance to extended line segment.
867
- * (no index checking!)
1015
+ * Return perpendicular distance from points[indexB] to the segment from points[indexA] to points[indexC].
1016
+ * * Extrapolation options when the projection is outside of the fraction range [0,1] are:
1017
+ * * false ==> return distance to closest endpoint
1018
+ * * true ==> return distance to extended line segment
1019
+ * * There is no index checking!
868
1020
  */
869
1021
  static distanceIndexedPointBToSegmentAC(points, indexA, indexB, indexC, extrapolate) {
870
1022
  const vectorU = Point3dVector3d_1.Vector3d.createStartEnd(points[indexA], points[indexC]);
871
1023
  const vectorV = Point3dVector3d_1.Vector3d.createStartEnd(points[indexA], points[indexB]);
872
1024
  const uDotU = vectorU.dotProduct(vectorU);
873
1025
  const uDotV = vectorU.dotProduct(vectorV);
874
- let fraction = Geometry_1.Geometry.conditionalDivideFraction(uDotV, uDotU);
1026
+ const fraction = Geometry_1.Geometry.conditionalDivideFraction(uDotV, uDotU);
875
1027
  if (fraction === undefined)
876
- fraction = 0.0;
1028
+ return vectorV.magnitude(); // AC is degenerate; return ||B-A||
877
1029
  if (!extrapolate) {
878
1030
  if (fraction > 1.0)
879
- fraction = 1.0;
1031
+ return points[indexB].distance(points[indexC]); // return ||B-C||
880
1032
  if (fraction < 0.0)
881
- fraction = 0.0;
1033
+ return vectorV.magnitude(); // return ||B-A||
882
1034
  }
883
- let h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;
884
- // h2 should never be negative except for quirky tolerance ..
885
- if (h2 < 0.0)
886
- h2 = 0.0;
887
- return Math.sqrt(h2);
1035
+ // return distance to projection on (extended) segment
1036
+ const h2 = vectorV.magnitudeSquared() - fraction * fraction * uDotU;
1037
+ // h2 should never be negative except for quirky tolerance...
1038
+ return h2 <= 0.0 ? 0.0 : Math.sqrt(h2);
888
1039
  }
889
1040
  /** Computes the hull of the XY projection of points.
890
- * * Returns the hull as an array of Point3d
891
- * * Optionally returns non-hull points in `insidePoints[]`
892
- * * If both arrays empty if less than 3 points.
893
- * *
1041
+ * @param points input points, z-coordinates ignored
1042
+ * @param hullPoints (output) points on the convex hull (cloned from input points)
1043
+ * @param insidePoints (output) points not on the convex hull (cloned from input points)
1044
+ * @param addClosurePoint whether to append the first hull point to `hullPoints`
894
1045
  */
895
1046
  static computeConvexHullXY(points, hullPoints, insidePoints, addClosurePoint = false) {
896
1047
  hullPoints.length = 0;