@itwin/core-geometry 4.3.0-dev.9 → 4.4.0-dev.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 +38 -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
@@ -0,0 +1,591 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SerializationHelpers = void 0;
8
+ /** @packageDocumentation
9
+ * @module Serialization
10
+ */
11
+ const KnotVector_1 = require("../bspline/KnotVector");
12
+ const PointHelpers_1 = require("../geometry3d/PointHelpers");
13
+ /**
14
+ * `SerializationHelpers` namespace has helper classes for serializing and deserializing geometry.
15
+ * @internal
16
+ */
17
+ var SerializationHelpers;
18
+ (function (SerializationHelpers) {
19
+ /** Constructor with required data. Inputs are captured, not copied. */
20
+ function createBSplineCurveData(poles, dim, knots, numPoles, order) {
21
+ return { poles, dim, params: { numPoles, order, knots } };
22
+ }
23
+ SerializationHelpers.createBSplineCurveData = createBSplineCurveData;
24
+ /** Constructor with required data. Inputs are captured, not copied. */
25
+ function createBSplineSurfaceData(poles, dim, uKnots, uNumPoles, uOrder, vKnots, vNumPoles, vOrder) {
26
+ return { poles, dim, uParams: { numPoles: uNumPoles, order: uOrder, knots: uKnots }, vParams: { numPoles: vNumPoles, order: vOrder, knots: vKnots } };
27
+ }
28
+ SerializationHelpers.createBSplineSurfaceData = createBSplineSurfaceData;
29
+ /** Clone curve data */
30
+ function cloneBSplineCurveData(source) {
31
+ return {
32
+ poles: (source.poles instanceof Float64Array) ? new Float64Array(source.poles) : PointHelpers_1.NumberArray.copy2d(source.poles),
33
+ dim: source.dim,
34
+ weights: source.weights ? source.weights.slice() : undefined,
35
+ params: {
36
+ numPoles: source.params.numPoles,
37
+ order: source.params.order,
38
+ closed: source.params.closed,
39
+ knots: source.params.knots.slice(),
40
+ wrapMode: source.params.wrapMode,
41
+ },
42
+ };
43
+ }
44
+ SerializationHelpers.cloneBSplineCurveData = cloneBSplineCurveData;
45
+ /** Clone surface data */
46
+ function cloneBSplineSurfaceData(source) {
47
+ return {
48
+ poles: (source.poles instanceof Float64Array) ? new Float64Array(source.poles) : PointHelpers_1.NumberArray.copy3d(source.poles),
49
+ dim: source.dim,
50
+ weights: source.weights ? ((source.weights instanceof Float64Array) ? source.weights.slice() : PointHelpers_1.NumberArray.copy2d(source.weights)) : undefined,
51
+ uParams: {
52
+ numPoles: source.uParams.numPoles,
53
+ order: source.uParams.order,
54
+ closed: source.uParams.closed,
55
+ knots: source.uParams.knots.slice(),
56
+ wrapMode: source.uParams.wrapMode,
57
+ },
58
+ vParams: {
59
+ numPoles: source.vParams.numPoles,
60
+ order: source.vParams.order,
61
+ closed: source.vParams.closed,
62
+ knots: source.vParams.knots.slice(),
63
+ wrapMode: source.vParams.wrapMode,
64
+ },
65
+ };
66
+ }
67
+ SerializationHelpers.cloneBSplineSurfaceData = cloneBSplineSurfaceData;
68
+ /** Copy from source to dest */
69
+ function copyBSplineCurveDataPoles(source) {
70
+ let nPole = 0;
71
+ let nCoordPerPole = 0;
72
+ let nPoleCoords = 0;
73
+ let poleDimProduct = 0;
74
+ if (source.poles instanceof Float64Array) {
75
+ nPole = source.params.numPoles;
76
+ nCoordPerPole = source.dim;
77
+ nPoleCoords = source.poles.length;
78
+ poleDimProduct = nPole * nCoordPerPole;
79
+ }
80
+ else {
81
+ nPole = source.poles.length;
82
+ if (nPole > 0)
83
+ nCoordPerPole = source.poles[0].length;
84
+ nPoleCoords = poleDimProduct = nPole * nCoordPerPole;
85
+ }
86
+ if (0 === poleDimProduct || poleDimProduct > nPoleCoords || nCoordPerPole !== source.dim)
87
+ return {};
88
+ let nWeight = 0;
89
+ let nWeightCoords = 0;
90
+ let weightDimProduct = 0;
91
+ if (source.weights !== undefined) {
92
+ if (source.weights instanceof Float64Array) {
93
+ nWeight = source.params.numPoles;
94
+ nWeightCoords = source.weights.length;
95
+ weightDimProduct = nWeight;
96
+ }
97
+ else {
98
+ nWeight = source.weights.length;
99
+ nWeightCoords = weightDimProduct = nWeight;
100
+ }
101
+ if (0 === weightDimProduct || weightDimProduct > nWeightCoords || nWeight !== nPole)
102
+ return {};
103
+ }
104
+ // convert variant source to structured number array
105
+ let poles;
106
+ let weights;
107
+ if (source.poles instanceof Float64Array)
108
+ poles = PointHelpers_1.NumberArray.unpack2d(source.poles, nCoordPerPole);
109
+ else
110
+ poles = PointHelpers_1.NumberArray.copy2d(source.poles);
111
+ if (poles && source.weights)
112
+ weights = PointHelpers_1.NumberArray.create(source.weights);
113
+ return { poles, weights };
114
+ }
115
+ /** Copy from source to dest */
116
+ function copyBSplineSurfaceDataPoles(source) {
117
+ let nPoleRow = 0;
118
+ let nPolePerRow = 0;
119
+ let nCoordPerPole = 0;
120
+ let nCoords = 0;
121
+ let poleDimProduct = 0;
122
+ if (source.poles instanceof Float64Array) {
123
+ nPoleRow = source.vParams.numPoles;
124
+ nPolePerRow = source.uParams.numPoles;
125
+ nCoordPerPole = source.dim;
126
+ nCoords = source.poles.length;
127
+ poleDimProduct = nPoleRow * nPolePerRow * nCoordPerPole;
128
+ }
129
+ else {
130
+ nPoleRow = source.poles.length;
131
+ if (nPoleRow > 0)
132
+ nPolePerRow = source.poles[0].length;
133
+ if (nPolePerRow > 0)
134
+ nCoordPerPole = source.poles[0][0].length;
135
+ nCoords = poleDimProduct = nPoleRow * nPolePerRow * nCoordPerPole;
136
+ }
137
+ if (0 === poleDimProduct || poleDimProduct > nCoords || nCoordPerPole !== source.dim)
138
+ return {};
139
+ let nWeightRow = 0;
140
+ let nWeightPerRow = 0;
141
+ let nWeightCoords = 0;
142
+ let weightDimProduct = 0;
143
+ if (source.weights !== undefined) {
144
+ if (source.weights instanceof Float64Array) {
145
+ nWeightRow = source.vParams.numPoles;
146
+ nWeightPerRow = source.uParams.numPoles;
147
+ nWeightCoords = source.weights.length;
148
+ weightDimProduct = nWeightRow * nWeightPerRow;
149
+ }
150
+ else {
151
+ nWeightRow = source.weights.length;
152
+ if (nWeightRow > 0)
153
+ nWeightPerRow = source.weights[0].length;
154
+ nWeightCoords = weightDimProduct = nWeightRow * nWeightPerRow;
155
+ }
156
+ if (0 === weightDimProduct || weightDimProduct > nWeightCoords || nWeightRow !== nPoleRow || nWeightPerRow !== nPolePerRow)
157
+ return {};
158
+ }
159
+ // convert variant source to structured number array
160
+ let poles;
161
+ let weights;
162
+ if (source.poles instanceof Float64Array)
163
+ poles = PointHelpers_1.NumberArray.unpack3d(source.poles, nPolePerRow, nCoordPerPole);
164
+ else
165
+ poles = PointHelpers_1.NumberArray.copy3d(source.poles);
166
+ if (poles && source.weights) {
167
+ if (source.weights instanceof Float64Array)
168
+ weights = PointHelpers_1.NumberArray.unpack2d(source.weights, nWeightPerRow);
169
+ else
170
+ weights = PointHelpers_1.NumberArray.copy2d(source.weights);
171
+ }
172
+ return { poles, weights };
173
+ }
174
+ /** Convert data arrays to the types specified by options. */
175
+ function convertBSplineCurveDataArrays(data, options) {
176
+ if (undefined !== options?.jsonPoles) {
177
+ const packedPoles = data.poles instanceof Float64Array;
178
+ if (options.jsonPoles && packedPoles)
179
+ data.poles = PointHelpers_1.NumberArray.unpack2d(data.poles, data.dim);
180
+ else if (!options.jsonPoles && !packedPoles)
181
+ data.poles = PointHelpers_1.NumberArray.pack(data.poles);
182
+ if (data.weights) {
183
+ const packedWeights = data.weights instanceof Float64Array;
184
+ if (options.jsonPoles && packedWeights)
185
+ data.weights = PointHelpers_1.NumberArray.create(data.weights);
186
+ else if (!options.jsonPoles && !packedWeights)
187
+ data.weights = PointHelpers_1.NumberArray.pack(data.weights);
188
+ }
189
+ }
190
+ if (undefined !== options?.jsonKnots) {
191
+ const packedKnots = data.params.knots instanceof Float64Array;
192
+ if (options.jsonKnots && packedKnots)
193
+ data.params.knots = PointHelpers_1.NumberArray.create(data.params.knots);
194
+ else if (!options.jsonKnots && !packedKnots)
195
+ data.params.knots = PointHelpers_1.NumberArray.pack(data.params.knots);
196
+ }
197
+ }
198
+ /** Convert data arrays to the types specified by options. */
199
+ function convertBSplineSurfaceDataArrays(data, options) {
200
+ if (undefined !== options?.jsonPoles) {
201
+ const packedPoles = data.poles instanceof Float64Array;
202
+ if (options.jsonPoles && packedPoles)
203
+ data.poles = PointHelpers_1.NumberArray.unpack3d(data.poles, data.uParams.numPoles, data.dim);
204
+ else if (!options.jsonPoles && !packedPoles)
205
+ data.poles = PointHelpers_1.NumberArray.pack(data.poles);
206
+ if (data.weights) {
207
+ const packedWeights = data.weights instanceof Float64Array;
208
+ if (options.jsonPoles && packedWeights)
209
+ data.weights = PointHelpers_1.NumberArray.unpack2d(data.weights, data.uParams.numPoles);
210
+ else if (!options.jsonPoles && !packedWeights)
211
+ data.weights = PointHelpers_1.NumberArray.pack(data.weights);
212
+ }
213
+ }
214
+ if (undefined !== options?.jsonKnots) {
215
+ const packedKnotsU = data.uParams.knots instanceof Float64Array;
216
+ if (options.jsonKnots && packedKnotsU)
217
+ data.uParams.knots = PointHelpers_1.NumberArray.create(data.uParams.knots);
218
+ else if (!options.jsonKnots && !packedKnotsU)
219
+ data.uParams.knots = PointHelpers_1.NumberArray.pack(data.uParams.knots);
220
+ const packedKnotsV = data.vParams.knots instanceof Float64Array;
221
+ if (options.jsonKnots && packedKnotsV)
222
+ data.vParams.knots = PointHelpers_1.NumberArray.create(data.vParams.knots);
223
+ else if (!options.jsonKnots && !packedKnotsV)
224
+ data.vParams.knots = PointHelpers_1.NumberArray.pack(data.vParams.knots);
225
+ }
226
+ }
227
+ class Import {
228
+ /** copy knots, with options to control destination type and extraneous knot removal */
229
+ static copyKnots(knots, options, iStart, iEnd) {
230
+ if (undefined === iStart)
231
+ iStart = 0;
232
+ if (undefined === iEnd)
233
+ iEnd = knots.length;
234
+ if (options?.removeExtraKnots) {
235
+ ++iStart; // ignore start knot
236
+ --iEnd; // ignore end knot
237
+ }
238
+ let newNumKnots = iEnd - iStart;
239
+ if (newNumKnots < 0)
240
+ newNumKnots = 0;
241
+ const newKnots = options?.jsonKnots ? new Array(newNumKnots) : new Float64Array(newNumKnots);
242
+ for (let i = iStart, k = 0; i < iEnd; i++, k++)
243
+ newKnots[k] = knots[i];
244
+ return newKnots;
245
+ }
246
+ /**
247
+ * Recognize the special legacy periodic B-spline data of mode BSplineWrapMode.OpenByRemovingKnots, and return the corresponding modern open clamped knots.
248
+ * * Note that the B-spline poles corresponding to the converted knots remain unchanged, but it is assumed that first and last poles are equal.
249
+ * * Example: the legacy 7-point quadratic circle periodic knots {-1/3 0 0 0 1/3 1/3 2/3 2/3 1 1 1 4/3} are converted to open knots {0 0 1/3 1/3 2/3 2/3 1 1}.
250
+ * * General form of knot vector (k = order, d = k-1 = degree, p = numPoles):
251
+ * * * legacy input: {k/2 periodically extended knots} {start knot multiplicity k} {p-k interior knots} {end knot multiplicity k} {d/2 periodically extended knots}
252
+ * * * converted output: {start knot multiplicity d} {p-k interior knots} {end knot multiplicity d}
253
+ * @param knots classic knot vector to test
254
+ * @param numPoles number of poles
255
+ * @param order B-spline order
256
+ * @param options for output type, extraneous knot removal
257
+ * @returns open knots if legacy periodic B-spline input data is recognized; otherwise, undefined
258
+ * @see Export.closeLegacyPeriodicKnots
259
+ */
260
+ static openLegacyPeriodicKnots(knots, numPoles, order, options) {
261
+ const numKnots = knots.length;
262
+ if (order < 2 || numPoles + 2 * order - 1 !== numKnots)
263
+ return undefined; // not legacy periodic knots
264
+ const startKnot = knots[order - 1];
265
+ const endKnot = knots[numKnots - order];
266
+ const iStart0 = Math.floor(order / 2); // index of first expected multiple of the start knot
267
+ const iEnd0 = iStart0 + numPoles; // index of first expected multiple of the end knot
268
+ const iEnd1 = iEnd0 + order; // one past index of last expected multiple of the end knot
269
+ for (let i = 0; i < order; ++i) {
270
+ if (Math.abs(knots[iStart0 + i] - startKnot) >= KnotVector_1.KnotVector.knotTolerance)
271
+ return undefined; // start knot multiplicity too small
272
+ if (Math.abs(knots[iEnd0 + i] - endKnot) >= KnotVector_1.KnotVector.knotTolerance)
273
+ return undefined; // end knot multiplicity too small
274
+ }
275
+ return this.copyKnots(knots, options, iStart0, iEnd1);
276
+ }
277
+ /** Prepare imported B-spline curve data for eventual conversion to BSplineCurve3d | BSplineCurve3dH:
278
+ * * Opens legacy "fake" periodic data by expanding knots
279
+ * * Opens true periodic data by expanding poles and weights
280
+ * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.
281
+ * @param options output specifications
282
+ * @returns whether data was successfully prepared
283
+ */
284
+ static prepareBSplineCurveData(data, options) {
285
+ let polesExpanded;
286
+ let weightsExpanded;
287
+ let knotsCorrected;
288
+ data.params.wrapMode = undefined;
289
+ if (true === data.params.closed) {
290
+ knotsCorrected = this.openLegacyPeriodicKnots(data.params.knots, data.params.numPoles, data.params.order, options);
291
+ if (undefined !== knotsCorrected) {
292
+ // legacy periodic knots removed, poles untouched
293
+ data.params.knots = knotsCorrected;
294
+ data.params.wrapMode = KnotVector_1.BSplineWrapMode.OpenByRemovingKnots;
295
+ }
296
+ else {
297
+ // wrap poles, knots untouched
298
+ if (!polesExpanded) {
299
+ const arrays = copyBSplineCurveDataPoles(data);
300
+ if (undefined === arrays.poles)
301
+ return false; // invalid input
302
+ data.poles = polesExpanded = arrays.poles;
303
+ data.weights = weightsExpanded = arrays.weights;
304
+ }
305
+ for (let i = 0; i < data.params.order - 1; ++i) {
306
+ const wraparoundPt = [];
307
+ for (let j = 0; j < data.dim; ++j)
308
+ wraparoundPt.push(polesExpanded[i][j]);
309
+ polesExpanded.push(wraparoundPt); // append degree wraparound poles
310
+ }
311
+ if (weightsExpanded) {
312
+ for (let i = 0; i < data.params.order - 1; ++i)
313
+ weightsExpanded.push(weightsExpanded[i]); // append degree wraparound weights
314
+ }
315
+ data.params.numPoles += data.params.order - 1;
316
+ data.params.wrapMode = KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints;
317
+ }
318
+ }
319
+ if (options?.removeExtraKnots) {
320
+ if (!knotsCorrected)
321
+ data.params.knots = this.copyKnots(data.params.knots, options);
322
+ }
323
+ data.params.closed = undefined; // we are open
324
+ convertBSplineCurveDataArrays(data, options);
325
+ return true;
326
+ }
327
+ /** Prepare imported B-spline surface data for eventual conversion to BSplineSurface3d | BSplineSurface3dH:
328
+ * * Opens legacy "fake" periodic data by expanding knots
329
+ * * Opens true periodic data by expanding poles and weights
330
+ * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.
331
+ * @param options output specifications
332
+ * @returns whether data was successfully prepared
333
+ */
334
+ static prepareBSplineSurfaceData(data, options) {
335
+ let polesExpanded;
336
+ let weightsExpanded;
337
+ let uKnotsCorrected;
338
+ let vKnotsCorrected;
339
+ data.uParams.wrapMode = data.vParams.wrapMode = undefined;
340
+ if (true === data.uParams.closed) {
341
+ uKnotsCorrected = this.openLegacyPeriodicKnots(data.uParams.knots, data.uParams.numPoles, data.uParams.order, options);
342
+ if (undefined !== uKnotsCorrected) {
343
+ // legacy periodic knots removed, poles untouched
344
+ data.uParams.knots = uKnotsCorrected;
345
+ data.uParams.wrapMode = KnotVector_1.BSplineWrapMode.OpenByRemovingKnots;
346
+ }
347
+ else {
348
+ // wrap poles, knots untouched
349
+ if (!polesExpanded) {
350
+ const arrays = copyBSplineSurfaceDataPoles(data);
351
+ if (undefined === arrays.poles)
352
+ return false; // invalid input
353
+ data.poles = polesExpanded = arrays.poles;
354
+ data.weights = weightsExpanded = arrays.weights;
355
+ }
356
+ for (let i = 0; i < data.vParams.numPoles; ++i) { // #rows
357
+ for (let j = 0; j < data.uParams.order - 1; ++j) {
358
+ const wraparoundPt = [];
359
+ for (let k = 0; k < data.dim; ++k)
360
+ wraparoundPt.push(polesExpanded[i][j][k]);
361
+ polesExpanded[i].push(wraparoundPt); // append degreeU wraparound poles to each row
362
+ }
363
+ }
364
+ if (weightsExpanded) {
365
+ for (let i = 0; i < data.vParams.numPoles; ++i) // #rows
366
+ for (let j = 0; j < data.uParams.order - 1; ++j)
367
+ weightsExpanded[i].push(weightsExpanded[i][j]); // append degreeU wraparound weights to each row
368
+ }
369
+ data.uParams.numPoles += data.uParams.order - 1;
370
+ data.uParams.wrapMode = KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints;
371
+ }
372
+ }
373
+ if (true === data.vParams.closed) {
374
+ vKnotsCorrected = this.openLegacyPeriodicKnots(data.vParams.knots, data.vParams.numPoles, data.vParams.order, options);
375
+ if (undefined !== vKnotsCorrected) {
376
+ // legacy periodic knots removed, poles untouched
377
+ data.vParams.knots = vKnotsCorrected;
378
+ data.vParams.wrapMode = KnotVector_1.BSplineWrapMode.OpenByRemovingKnots;
379
+ }
380
+ else {
381
+ // wrap poles, knots untouched
382
+ if (!polesExpanded) {
383
+ const arrays = copyBSplineSurfaceDataPoles(data);
384
+ if (undefined === arrays.poles)
385
+ return false; // invalid input
386
+ data.poles = polesExpanded = arrays.poles;
387
+ data.weights = weightsExpanded = arrays.weights;
388
+ }
389
+ for (let i = 0; i < data.vParams.order - 1; ++i) {
390
+ const wrapAroundRow = [];
391
+ for (let j = 0; j < data.uParams.numPoles; ++j) { // #cols
392
+ const wrapAroundPt = [];
393
+ for (let k = 0; k < data.dim; ++k)
394
+ wrapAroundPt.push(polesExpanded[i][j][k]);
395
+ wrapAroundRow.push(wrapAroundPt);
396
+ }
397
+ polesExpanded.push(wrapAroundRow); // append degreeV wraparound rows of poles
398
+ }
399
+ if (weightsExpanded) {
400
+ for (let i = 0; i < data.vParams.order - 1; ++i) {
401
+ const wrapAroundRow = [];
402
+ for (let j = 0; j < data.uParams.numPoles; ++j) // #cols
403
+ wrapAroundRow.push(weightsExpanded[i][j]);
404
+ weightsExpanded.push(wrapAroundRow); // append degreeV wraparound rows of weights
405
+ }
406
+ }
407
+ data.vParams.numPoles += data.vParams.order - 1;
408
+ data.vParams.wrapMode = KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints;
409
+ }
410
+ }
411
+ if (options?.removeExtraKnots) {
412
+ if (!uKnotsCorrected)
413
+ data.uParams.knots = this.copyKnots(data.uParams.knots, options);
414
+ if (!vKnotsCorrected)
415
+ data.vParams.knots = this.copyKnots(data.vParams.knots, options);
416
+ }
417
+ data.uParams.closed = data.vParams.closed = undefined; // we are open
418
+ convertBSplineSurfaceDataArrays(data, options);
419
+ return true;
420
+ }
421
+ }
422
+ SerializationHelpers.Import = Import;
423
+ class Export {
424
+ /**
425
+ * Restore special legacy periodic B-spline knots opened via BSplineWrapMode.OpenByRemovingKnots logic.
426
+ * @param knots modern knot vector: {start knot multiplicity d} {p-k interior knots} {end knot multiplicity d}
427
+ * @param order B-spline order
428
+ * @param options for output type
429
+ * @param wrapMode wrap mode of the knots
430
+ * @returns legacy periodic knots (with classic extraneous start/end knot) if wrapMode recognized; otherwise, undefined
431
+ * @see Import.openLegacyPeriodicKnots
432
+ */
433
+ static closeLegacyPeriodicKnots(knots, order, options, wrapMode) {
434
+ if (wrapMode === undefined || wrapMode !== KnotVector_1.BSplineWrapMode.OpenByRemovingKnots)
435
+ return undefined;
436
+ const degree = order - 1;
437
+ const leftIndex = degree - 1;
438
+ const rightIndex = knots.length - degree;
439
+ const leftKnot = knots[leftIndex];
440
+ const rightKnot = knots[rightIndex];
441
+ const knotPeriod = rightKnot - leftKnot;
442
+ const newNumKnots = knots.length + degree + 2;
443
+ const newKnots = options?.jsonKnots ? new Array(newNumKnots) : new Float64Array(newNumKnots);
444
+ let k = 0;
445
+ for (let i = Math.floor(order / 2); i > 0; --i)
446
+ newKnots[k++] = knots[rightIndex - i] - knotPeriod;
447
+ newKnots[k++] = leftKnot; // extraneous start knot
448
+ for (const knot of knots)
449
+ newKnots[k++] = knot;
450
+ newKnots[k++] = rightKnot; // extraneous end knot
451
+ for (let i = 1; i <= Math.floor(degree / 2); ++i)
452
+ newKnots[k++] = knots[leftIndex + i] + knotPeriod;
453
+ return newKnots;
454
+ }
455
+ /**
456
+ * Prepare data from a B-spline curve for export.
457
+ * * adds classic extraneous knot at start and end of knot vector
458
+ * * re-closes periodic data based on BSplineWrapMode
459
+ * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.
460
+ * @param options output specifications
461
+ * @returns whether data was successfully prepared
462
+ */
463
+ static prepareBSplineCurveData(data, options) {
464
+ let polesTrimmed;
465
+ let weightsTrimmed;
466
+ let knotsCorrected;
467
+ data.params.closed = undefined;
468
+ switch (data.params.wrapMode) {
469
+ case KnotVector_1.BSplineWrapMode.OpenByRemovingKnots: {
470
+ // add legacy periodic and extraneous knots, poles untouched
471
+ knotsCorrected = this.closeLegacyPeriodicKnots(data.params.knots, data.params.order, options, data.params.wrapMode);
472
+ if (undefined === knotsCorrected)
473
+ return false; // invalid input
474
+ data.params.knots = knotsCorrected;
475
+ data.params.closed = true;
476
+ break;
477
+ }
478
+ case KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints: {
479
+ // unwrap poles, knots untouched
480
+ if (!polesTrimmed) {
481
+ const arrays = copyBSplineCurveDataPoles(data);
482
+ if (undefined === arrays.poles)
483
+ return false; // invalid input
484
+ data.poles = polesTrimmed = arrays.poles;
485
+ data.weights = weightsTrimmed = arrays.weights;
486
+ }
487
+ for (let i = 0; i < data.params.order - 1; ++i)
488
+ polesTrimmed.pop(); // remove last degree poles
489
+ if (weightsTrimmed) {
490
+ for (let i = 0; i < data.params.order - 1; ++i)
491
+ weightsTrimmed.pop(); // remove last degree weights
492
+ }
493
+ data.params.numPoles -= data.params.order - 1;
494
+ data.params.closed = true;
495
+ break;
496
+ }
497
+ }
498
+ // always add extraneous knots
499
+ if (!knotsCorrected)
500
+ data.params.knots = KnotVector_1.KnotVector.copyKnots(data.params.knots, data.params.order - 1, true, data.params.wrapMode);
501
+ convertBSplineCurveDataArrays(data, options);
502
+ return true;
503
+ }
504
+ /**
505
+ * Prepare data from a B-spline surface for export.
506
+ * * adds classic extraneous knot at start and end of knot vectors
507
+ * * re-closes periodic data based on BSplineWrapMode
508
+ * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.
509
+ * @param options output specifications
510
+ * @returns whether data was successfully prepared
511
+ */
512
+ static prepareBSplineSurfaceData(data, options) {
513
+ let polesTrimmed;
514
+ let weightsTrimmed;
515
+ let uKnotsCorrected;
516
+ let vKnotsCorrected;
517
+ data.uParams.closed = data.vParams.closed = undefined;
518
+ switch (data.uParams.wrapMode) {
519
+ case KnotVector_1.BSplineWrapMode.OpenByRemovingKnots: {
520
+ // add legacy periodic and extraneous knots, poles untouched
521
+ uKnotsCorrected = this.closeLegacyPeriodicKnots(data.uParams.knots, data.uParams.order, options, data.uParams.wrapMode);
522
+ if (undefined === uKnotsCorrected)
523
+ return false; // invalid input
524
+ data.uParams.knots = uKnotsCorrected;
525
+ data.uParams.closed = true;
526
+ break;
527
+ }
528
+ case KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints: {
529
+ // unwrap poles, knots untouched
530
+ if (!polesTrimmed) {
531
+ const arrays = copyBSplineSurfaceDataPoles(data);
532
+ if (undefined === arrays.poles)
533
+ return false; // invalid input
534
+ data.poles = polesTrimmed = arrays.poles;
535
+ data.weights = weightsTrimmed = arrays.weights;
536
+ }
537
+ for (let i = 0; i < data.vParams.numPoles; ++i) // #rows
538
+ for (let j = 0; j < data.uParams.order - 1; ++j)
539
+ polesTrimmed[i].pop(); // remove last degreeU poles from each row
540
+ if (weightsTrimmed) {
541
+ for (let i = 0; i < data.vParams.numPoles; ++i) // #rows
542
+ for (let j = 0; j < data.uParams.order - 1; ++j)
543
+ weightsTrimmed[i].pop(); // remove last degreeU weights from each row
544
+ }
545
+ data.uParams.numPoles -= data.uParams.order - 1;
546
+ data.uParams.closed = true;
547
+ break;
548
+ }
549
+ }
550
+ switch (data.vParams.wrapMode) {
551
+ case KnotVector_1.BSplineWrapMode.OpenByRemovingKnots: {
552
+ // add legacy periodic and extraneous knots, poles untouched
553
+ vKnotsCorrected = this.closeLegacyPeriodicKnots(data.vParams.knots, data.vParams.order, options, data.vParams.wrapMode);
554
+ if (undefined === vKnotsCorrected)
555
+ return false; // invalid input
556
+ data.vParams.knots = vKnotsCorrected;
557
+ data.vParams.closed = true;
558
+ break;
559
+ }
560
+ case KnotVector_1.BSplineWrapMode.OpenByAddingControlPoints: {
561
+ // unwrap poles, knots untouched
562
+ if (!polesTrimmed) {
563
+ const arrays = copyBSplineSurfaceDataPoles(data);
564
+ if (undefined === arrays.poles)
565
+ return false; // invalid input
566
+ data.poles = polesTrimmed = arrays.poles;
567
+ data.weights = weightsTrimmed = arrays.weights;
568
+ }
569
+ for (let i = 0; i < data.vParams.order - 1; ++i)
570
+ polesTrimmed.pop(); // remove last degreeV rows of poles
571
+ if (weightsTrimmed) {
572
+ for (let i = 0; i < data.vParams.order - 1; ++i)
573
+ weightsTrimmed.pop(); // remove last degreeV rows of weights
574
+ }
575
+ data.vParams.numPoles -= data.vParams.order - 1;
576
+ data.vParams.closed = true;
577
+ break;
578
+ }
579
+ }
580
+ // always add extraneous knots
581
+ if (!uKnotsCorrected)
582
+ data.uParams.knots = KnotVector_1.KnotVector.copyKnots(data.uParams.knots, data.uParams.order - 1, true, data.uParams.wrapMode);
583
+ if (!vKnotsCorrected)
584
+ data.vParams.knots = KnotVector_1.KnotVector.copyKnots(data.vParams.knots, data.vParams.order - 1, true, data.vParams.wrapMode);
585
+ convertBSplineSurfaceDataArrays(data, options);
586
+ return true;
587
+ }
588
+ }
589
+ SerializationHelpers.Export = Export;
590
+ })(SerializationHelpers = exports.SerializationHelpers || (exports.SerializationHelpers = {}));
591
+ //# sourceMappingURL=SerializationHelpers.js.map