@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
@@ -1 +1 @@
1
- {"version":3,"file":"Bezier1dNd.js","sourceRoot":"","sources":["../../../src/bspline/Bezier1dNd.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierCoffs, UnivariateBezier } from \"../numerics/BezierPolynomials\";\r\nimport { KnotVector } from \"./KnotVector\";\r\n\r\n/**\r\n * Shared implementation details for derived bezier curve classes\r\n * * BezierCurve3d implements with blockSize 3.\r\n * * BezierCurve3dH implements with blockSize 4.\r\n * @public\r\n */\r\nexport class Bezier1dNd {\r\n private _packedData: Float64Array;\r\n private _order: number; // bezier order. probably low\r\n private _blockSize: number; // loosely expected to be 1 to 4.\r\n private _basis: BezierCoffs; // server for basis queries. It carries coefficients that we don't use.\r\n // constructor CAPTURES the control points array.\r\n public constructor(blockSize: number, polygon: Float64Array) {\r\n this._blockSize = blockSize;\r\n this._order = Math.floor(polygon.length / blockSize); // This should be an integer!!!\r\n this._packedData = polygon;\r\n this._basis = new UnivariateBezier(this._order);\r\n }\r\n /** return a clone of the data array */\r\n public clonePolygon(result?: Float64Array): Float64Array {\r\n const n = this._packedData.length;\r\n if (!result || result.length !== n)\r\n return this._packedData.slice();\r\n /** move data into the supplied result */\r\n for (let i = 0; i < n; i++)\r\n result[i] = this._packedData[i];\r\n return result;\r\n }\r\n /** Return the bezier order */\r\n public get order() { return this._order; }\r\n /** return the packed data array. This is a REFERENCE to the array. */\r\n public get packedData() { return this._packedData; }\r\n /** Create a Bezier1dNd, using the structure of `data[0]` to determine the bezier order. */\r\n public static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n if (data[0] instanceof Point3d) {\r\n const polygon = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new Bezier1dNd(3, polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n const polygon = new Float64Array(data.length * 4);\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new Bezier1dNd(4, polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n const polygon = new Float64Array(data.length * 2);\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n }\r\n return new Bezier1dNd(2, polygon);\r\n }\r\n return undefined;\r\n }\r\n /** Return the curve value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluate(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctions(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** Return the curve derivative value at bezier fraction `s`\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluateDerivative(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctionDerivatives(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /** get a single point of the polygon as a simple array. */\r\n public getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined {\r\n if (!buffer)\r\n buffer = new Float64Array(this._blockSize);\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n buffer[k] = this._packedData[k0 + k];\r\n return buffer;\r\n }\r\n return undefined;\r\n }\r\n /** set a single point of the polygon as a simple array. */\r\n public setPolygonPoint(i: number, buffer: Float64Array) {\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n this._packedData[k0 + k] = buffer[k];\r\n }\r\n }\r\n /** Load order * dimension doubles from data[dimension * spanIndex] as poles\r\n * @param data packed source array. block size in `data` assumed to match dimension for this.\r\n * @param spanIndex block index in data.\r\n */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n let k = spanIndex * this._blockSize;\r\n for (let i = 0; i < this._packedData.length; i++)\r\n this._packedData[i] = data[k++];\r\n }\r\n /** Load order * (dataDimension + 1) doubles from data[dataDimension * spanIndex] as poles with weight inserted\r\n * @param data packed array of data.\r\n * @param dataDimension dimension of data. Must have `dataDimension+1=this.order`\r\n * @param spanIndex index of first data block to access.\r\n * @param weight weight to append to each block\r\n */\r\n public loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number) {\r\n let destIndex = 0;\r\n const order = this._order;\r\n let dataIndex = spanIndex * dataDimension;\r\n for (let i = 0; i < order; i++) {\r\n for (let j = 0; j < dataDimension; j++)\r\n this._packedData[destIndex++] = data[dataIndex++];\r\n this._packedData[destIndex++] = weight;\r\n }\r\n }\r\n /** return a json array of arrays with each control point as a lower level array of numbers */\r\n public unpackToJsonArrays(): any[] {\r\n return Point3dArray.unpackNumbersToNestedArrays(this._packedData, this._blockSize);\r\n }\r\n /** equality test with usual metric tolerances */\r\n public isAlmostEqual(other: any): boolean {\r\n if (other instanceof Bezier1dNd) {\r\n if (this._blockSize !== other._blockSize)\r\n return false;\r\n if (this._order !== other._order)\r\n return false;\r\n if (this._packedData.length !== other._packedData.length)\r\n return false;\r\n for (let i = 0; i < this._packedData.length; i++) {\r\n if (!Geometry.isSameCoordinate(this._packedData[i], other._packedData[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** block-by-block reversal */\r\n public reverseInPlace() {\r\n const m = this._blockSize;\r\n const n = this._order;\r\n let i, j;\r\n let a;\r\n for (i = 0, j = (n - 1) * m; i < j; i += m, j -= m) {\r\n for (let k = 0; k < m; k++) {\r\n a = this._packedData[i + k];\r\n this._packedData[i + k] = this._packedData[j + k];\r\n this._packedData[j + k] = a;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * interpolate at `fraction` between poleA and poleB.\r\n * * Data is left \"in place\" in poleIndexA\r\n * @param poleIndexA first pole index\r\n * @param fraction fractional position\r\n * @param poleIndexB second pole index\r\n */\r\n public interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number) {\r\n let i0 = poleIndexA * this._blockSize;\r\n let i1 = poleIndexB * this._blockSize;\r\n const data = this._packedData;\r\n for (let i = 0; i < this._blockSize; i++ , i0++ , i1++) {\r\n data[i0] += fraction * (data[i1] - data[i0]);\r\n }\r\n }\r\n\r\n /**\r\n * Compute new control points to \"clamp\" bspline unsaturated support to saturated form.\r\n * * At input time, the control points are associated with the input knots (unsaturated)\r\n * * At output, the control points are modified by repeated knot insertion to be fully clamped.\r\n * @param knots knot values for the current (unsaturated) pole set\r\n * @param spanIndex index of span whose (unsaturated) poles are in the bezier.\r\n */\r\n public saturateInPlace(knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n this.setInterval(knotA, knotB);\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n this.interpolatePoleInPlace(i, fraction, i + 1);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window ia always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n this.interpolatePoleInPlace(degree - i, fraction, degree - i - 1);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * * On input, the array is the coefficients of one span of a bspline, packed in an array of `(knots.order)` values.\r\n * * These are modified in place, and on return are a bezier for the same knot interval.\r\n * @param coffs input as bspline coefficients, returned as bezier coefficients\r\n * @param knots knot vector\r\n * @param spanIndex index of span whose (unsaturated) poles are in the coefficients.\r\n */\r\n public static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n coffs[i] = coffs[i] + fraction * (coffs[i + 1] - coffs[i]);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n let k;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window is always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n k = degree - i;\r\n coffs[k] += fraction * (coffs[k - 1] - coffs[k]);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval 0..fraction of the original\r\n * @param fraction \"end\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepLeft(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return false;\r\n const g = 1.0 - fraction; // interpolations will pull towards right indices\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i1 = order - 1; i1 >= level; i1--) {\r\n this.interpolatePoleInPlace(i1, g, i1 - 1); // leave updates to right\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval fraction..1 of the original\r\n * @param fraction \"start\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepRight(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return false;\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i0 = 0; i0 + level < order; i0++)\r\n this.interpolatePoleInPlace(i0, fraction, i0 + 1); // leave updates to left.\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * @param fraction0 fraction for first split. This is the start of the output polygon\r\n * @param fraction1 fraction for second split. This is the end of the output polygon\r\n * @return false if fractions are (almost) identical.\r\n */\r\n public subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction0, fraction1))\r\n return false;\r\n if (fraction1 < fraction0) {\r\n this.subdivideToIntervalInPlace(fraction1, fraction0);\r\n this.reverseInPlace();\r\n return true;\r\n }\r\n this.subdivideInPlaceKeepLeft(fraction1);\r\n this.subdivideInPlaceKeepRight(fraction0 / fraction1);\r\n return true;\r\n }\r\n\r\n /** optional interval for mapping to a parent object */\r\n public interval?: Segment1d;\r\n /** create or update the mapping to parent curve. */\r\n public setInterval(a: number, b: number) {\r\n this.interval = Segment1d.create(a, b, this.interval);\r\n }\r\n /** map a fraction to the parent space. */\r\n public fractionToParentFraction(fraction: number): number { return this.interval ? this.interval.fractionToPoint(fraction) : fraction; }\r\n}\r\n"]}
1
+ {"version":3,"file":"Bezier1dNd.js","sourceRoot":"","sources":["../../../src/bspline/Bezier1dNd.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { Segment1d } from \"../geometry3d/Segment1d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierCoffs, UnivariateBezier } from \"../numerics/BezierPolynomials\";\r\nimport { KnotVector } from \"./KnotVector\";\r\n\r\n/**\r\n * Shared implementation details for derived bezier curve classes\r\n * * BezierCurve3d implements with blockSize 3.\r\n * * BezierCurve3dH implements with blockSize 4.\r\n * @public\r\n */\r\nexport class Bezier1dNd {\r\n private _packedData: Float64Array;\r\n private _order: number; // bezier order. probably low\r\n private _blockSize: number; // loosely expected to be 1 to 4.\r\n private _basis: BezierCoffs; // server for basis queries. It carries coefficients that we don't use.\r\n // constructor CAPTURES the control points array.\r\n public constructor(blockSize: number, polygon: Float64Array) {\r\n this._blockSize = blockSize;\r\n this._order = Math.floor(polygon.length / blockSize); // This should be an integer!!!\r\n this._packedData = polygon;\r\n this._basis = new UnivariateBezier(this._order);\r\n }\r\n /**\r\n * Return a clone of the data array.\r\n * @param result optional destination array. If not the _same_ size as the data array, a new array is returned.\r\n */\r\n public clonePolygon(result?: Float64Array): Float64Array {\r\n const n = this._packedData.length;\r\n if (!result || result.length !== n)\r\n return this._packedData.slice();\r\n /** move data into the supplied result */\r\n for (let i = 0; i < n; i++)\r\n result[i] = this._packedData[i];\r\n return result;\r\n }\r\n /** Return the bezier order */\r\n public get order() { return this._order; }\r\n /** return the packed data array. This is a REFERENCE to the array. */\r\n public get packedData() { return this._packedData; }\r\n /** Create a Bezier1dNd, using the structure of `data[0]` to determine the bezier order. */\r\n public static create(data: Point2d[] | Point3d[] | Point4d[]): Bezier1dNd | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n if (data[0] instanceof Point3d) {\r\n const polygon = new Float64Array(data.length * 3);\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n }\r\n return new Bezier1dNd(3, polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n const polygon = new Float64Array(data.length * 4);\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new Bezier1dNd(4, polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n const polygon = new Float64Array(data.length * 2);\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n }\r\n return new Bezier1dNd(2, polygon);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Return the curve value at bezier fraction `s`.\r\n * @param s bezier parameter for evaluation\r\n * @param buffer optional destination of length `blockSize`. If insufficient length, a new array is returned.\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluate(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctions(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /**\r\n * Return the curve derivative value at bezier fraction `s`.\r\n * @param s bezier parameter for evaluation\r\n * @param buffer optional destination of length `blockSize`. If insufficient length, a new array is returned.\r\n * @return buffer of length `blockSize`.\r\n */\r\n public evaluateDerivative(s: number, buffer?: Float64Array): Float64Array {\r\n return this._basis.sumBasisFunctionDerivatives(s, this._packedData, this._blockSize, buffer);\r\n }\r\n /**\r\n * Return a point of the polygon as a simple array.\r\n * @param i index of desired point\r\n * @param buffer optional destination of length `blockSize`. If insufficient length, a new array is returned.\r\n * @return point as simple array of length `blockSize`, or undefined if index out of range.\r\n */\r\n public getPolygonPoint(i: number, buffer?: Float64Array): Float64Array | undefined {\r\n if (!buffer || buffer.length < this._blockSize)\r\n buffer = new Float64Array(this._blockSize);\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n buffer[k] = this._packedData[k0 + k];\r\n return buffer;\r\n }\r\n return undefined;\r\n }\r\n /** set a single point of the polygon as a simple array. */\r\n public setPolygonPoint(i: number, buffer: Float64Array) {\r\n if (i >= 0 && i < this._order) {\r\n const k0 = this._blockSize * i;\r\n for (let k = 0; k < this._blockSize; k++)\r\n this._packedData[k0 + k] = buffer[k];\r\n }\r\n }\r\n /** Load order * dimension doubles from data[dimension * spanIndex] as poles\r\n * @param data packed source array. block size in `data` assumed to match dimension for this.\r\n * @param spanIndex block index in data.\r\n */\r\n public loadSpanPoles(data: Float64Array, spanIndex: number) {\r\n let k = spanIndex * this._blockSize;\r\n for (let i = 0; i < this._packedData.length; i++)\r\n this._packedData[i] = data[k++];\r\n }\r\n /** Load order * (dataDimension + 1) doubles from data[dataDimension * spanIndex] as poles with weight inserted\r\n * @param data packed array of data.\r\n * @param dataDimension dimension of data. Must have `dataDimension+1=this.order`\r\n * @param spanIndex index of first data block to access.\r\n * @param weight weight to append to each block\r\n */\r\n public loadSpanPolesWithWeight(data: Float64Array, dataDimension: number, spanIndex: number, weight: number) {\r\n let destIndex = 0;\r\n const order = this._order;\r\n let dataIndex = spanIndex * dataDimension;\r\n for (let i = 0; i < order; i++) {\r\n for (let j = 0; j < dataDimension; j++)\r\n this._packedData[destIndex++] = data[dataIndex++];\r\n this._packedData[destIndex++] = weight;\r\n }\r\n }\r\n /** return a json array of arrays with each control point as a lower level array of numbers */\r\n public unpackToJsonArrays(): any[] {\r\n return Point3dArray.unpackNumbersToNestedArrays(this._packedData, this._blockSize);\r\n }\r\n /** equality test with usual metric tolerances */\r\n public isAlmostEqual(other: any): boolean {\r\n if (other instanceof Bezier1dNd) {\r\n if (this._blockSize !== other._blockSize)\r\n return false;\r\n if (this._order !== other._order)\r\n return false;\r\n if (this._packedData.length !== other._packedData.length)\r\n return false;\r\n for (let i = 0; i < this._packedData.length; i++) {\r\n if (!Geometry.isSameCoordinate(this._packedData[i], other._packedData[i]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** block-by-block reversal */\r\n public reverseInPlace() {\r\n const m = this._blockSize;\r\n const n = this._order;\r\n let i, j;\r\n let a;\r\n for (i = 0, j = (n - 1) * m; i < j; i += m, j -= m) {\r\n for (let k = 0; k < m; k++) {\r\n a = this._packedData[i + k];\r\n this._packedData[i + k] = this._packedData[j + k];\r\n this._packedData[j + k] = a;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * interpolate at `fraction` between poleA and poleB.\r\n * * Data is left \"in place\" in poleIndexA\r\n * @param poleIndexA first pole index\r\n * @param fraction fractional position\r\n * @param poleIndexB second pole index\r\n */\r\n public interpolatePoleInPlace(poleIndexA: number, fraction: number, poleIndexB: number) {\r\n let i0 = poleIndexA * this._blockSize;\r\n let i1 = poleIndexB * this._blockSize;\r\n const data = this._packedData;\r\n for (let i = 0; i < this._blockSize; i++ , i0++ , i1++) {\r\n data[i0] += fraction * (data[i1] - data[i0]);\r\n }\r\n }\r\n\r\n /**\r\n * Compute new control points to \"clamp\" bspline unsaturated support to saturated form.\r\n * * At input time, the control points are associated with the input knots (unsaturated)\r\n * * At output, the control points are modified by repeated knot insertion to be fully clamped.\r\n * @param knots knot values for the current (unsaturated) pole set\r\n * @param spanIndex index of span whose (unsaturated) poles are in the bezier.\r\n */\r\n public saturateInPlace(knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n this.setInterval(knotA, knotB);\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n this.interpolatePoleInPlace(i, fraction, i + 1);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window ia always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n this.interpolatePoleInPlace(degree - i, fraction, degree - i - 1);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * * On input, the array is the coefficients of one span of a bspline, packed in an array of `(knots.order)` values.\r\n * * These are modified in place, and on return are a bezier for the same knot interval.\r\n * @param coffs input as bspline coefficients, returned as bezier coefficients\r\n * @param knots knot vector\r\n * @param spanIndex index of span whose (unsaturated) poles are in the coefficients.\r\n */\r\n public static saturate1dInPlace(coffs: Float64Array, knots: KnotVector, spanIndex: number): boolean {\r\n const degree = knots.degree;\r\n const kA = spanIndex + degree - 1; // left knot index of the active span\r\n const kB = kA + 1;\r\n if (spanIndex < 0 || spanIndex >= knots.numSpans)\r\n return false;\r\n const knotArray = knots.knots;\r\n const knotA = knotArray[kA];\r\n const knotB = knotArray[kB];\r\n if (knotB <= knotA + KnotVector.knotTolerance)\r\n return false;\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n // left numInsert poles are pulled forward\r\n let k0 = kA - numInsert;\r\n if (knotArray[k0] < knotA) {\r\n let k1 = kB;\r\n for (let i = 0; i < numInsert; i++ , k0++ , k1++) {\r\n const knot0 = knotArray[k0];\r\n const knot1 = knotArray[k1];\r\n const fraction = (knotA - knot0) / (knot1 - knot0);\r\n coffs[i] = coffs[i] + fraction * (coffs[i + 1] - coffs[i]);\r\n }\r\n }\r\n }\r\n for (let numInsert = degree - 1; numInsert > 0; numInsert--) {\r\n let k2 = kB + numInsert;\r\n let k;\r\n if (knotArray[k2] > knotB) {\r\n for (let i = 0; i < numInsert; i++ , k2--) {\r\n const knot2 = knotArray[k2]; // right side of moving window\r\n // left side of window is always the (previously saturated) knotA\r\n const fraction = (knotB - knot2) / (knotA - knot2);\r\n k = degree - i;\r\n coffs[k] += fraction * (coffs[k - 1] - coffs[k]);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval 0..fraction of the original\r\n * @param fraction \"end\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepLeft(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return false;\r\n const g = 1.0 - fraction; // interpolations will pull towards right indices\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i1 = order - 1; i1 >= level; i1--) {\r\n this.interpolatePoleInPlace(i1, g, i1 - 1); // leave updates to right\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Apply deCasteljau interpolations to isolate a smaller bezier polygon, representing interval fraction..1 of the original\r\n * @param fraction \"start\" fraction for split.\r\n * @returns false if fraction is 0 or 1 -- no changes applied.\r\n */\r\n public subdivideInPlaceKeepRight(fraction: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction, 0.0))\r\n return true;\r\n if (Geometry.isAlmostEqualNumber(fraction, 1.0))\r\n return false;\r\n const order = this.order;\r\n for (let level = 1; level < order; level++) {\r\n for (let i0 = 0; i0 + level < order; i0++)\r\n this.interpolatePoleInPlace(i0, fraction, i0 + 1); // leave updates to left.\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Saturate a univariate bspline coefficient array in place\r\n * @param fraction0 fraction for first split. This is the start of the output polygon\r\n * @param fraction1 fraction for second split. This is the end of the output polygon\r\n * @return false if fractions are (almost) identical.\r\n */\r\n public subdivideToIntervalInPlace(fraction0: number, fraction1: number): boolean {\r\n if (Geometry.isAlmostEqualNumber(fraction0, fraction1))\r\n return false;\r\n if (fraction1 < fraction0) {\r\n this.subdivideToIntervalInPlace(fraction1, fraction0);\r\n this.reverseInPlace();\r\n return true;\r\n }\r\n this.subdivideInPlaceKeepLeft(fraction1);\r\n this.subdivideInPlaceKeepRight(fraction0 / fraction1);\r\n return true;\r\n }\r\n\r\n /** optional interval for mapping to a parent object */\r\n public interval?: Segment1d;\r\n /** create or update the mapping to parent curve. */\r\n public setInterval(a: number, b: number) {\r\n this.interval = Segment1d.create(a, b, this.interval);\r\n }\r\n /** map a fraction to the parent space. */\r\n public fractionToParentFraction(fraction: number): number { return this.interval ? this.interval.fractionToPoint(fraction) : fraction; }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BezierCurve3dH.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BezierCurve3dH.d.ts","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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"}
@@ -153,7 +153,8 @@ class BezierCurve3dH extends BezierCurveBase_1.BezierCurveBase {
153
153
  /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */
154
154
  fractionToPoint4d(fraction, result) {
155
155
  this._polygon.evaluate(fraction, this._workData0);
156
- return Point4d_1.Point4d.createFromPackedXYZW(this._workData0, 0, result);
156
+ result = Point4d_1.Point4d.createFromPacked(this._workData0, 0, result);
157
+ return result ? result : Point4d_1.Point4d.createZero();
157
158
  }
158
159
  /** Return the cartesian point and derivative vector. */
159
160
  fractionToPointAndDerivative(fraction, result) {
@@ -1 +1 @@
1
- {"version":3,"file":"BezierCurve3dH.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n/** 3d curve with homogeneous weights.\r\n * * A control point with weight w and cartesian (projected) coordinates x,y,z has the weight multiplied into the coordinates,\r\n * hence the control point as stored is (xw, yw, zw, w).\r\n * @public\r\n */\r\nexport class BezierCurve3dH extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3dH. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3dH; }\r\n /**\r\n * Apply (multiply by) an affine transform\r\n * @param transform\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZWToFloat64Array(data[0], data[1], data[2], data[3], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply (multiply by) a perspective transform\r\n * @param matrix\r\n */\r\n public tryMultiplyMatrix4dInPlace(matrix: Matrix4d) {\r\n matrix.multiplyBlockedFloat64ArrayInPlace(this._polygon.packedData);\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z,x] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], data[3], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole normalized to weight 1\r\n */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.createFromPackedXYZW(data, 0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Returns true if all weights are within tolerance of 1.0\r\n */\r\n public isUnitWeight(tolerance?: number): boolean {\r\n if (tolerance === undefined)\r\n tolerance = Geometry.smallAngleRadians;\r\n const aLow = 1.0 - tolerance;\r\n const aHigh = 1.0 + tolerance;\r\n const data = this._polygon.packedData;\r\n const n = data.length;\r\n let a;\r\n for (let i = 3; i < n; i += 4) {\r\n a = data[i];\r\n if (a < aLow || a > aHigh)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3dH`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(4, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 4);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3dH {\r\n const polygonArray = new Float64Array(order * 4); // and we trust that this is all zeros !!!\r\n return new BezierCurve3dH(polygonArray);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number) {\r\n this._polygon.loadSpanPolesWithWeight(data, 3, spanIndex, weight);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan4dPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone the entire curve. */\r\n public override clone(): BezierCurve3dH {\r\n return new BezierCurve3dH(this._polygon.clonePolygon());\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n result = Point3d.createFromPackedXYZW(this._workData0, 0, result);\r\n return result ? result : Point3d.createZero();\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint4d(fraction: number, result?: Point4d): Point4d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n return Point4d.createFromPackedXYZW(this._workData0, 0, result);\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n result = Ray3d.createWeightedDerivative(this._workData0, this._workData1, result);\r\n if (result)\r\n return result;\r\n // Bad. Very Bad. Return origin and x axis. Should be undefined, but usual cartesian types do not allow that\r\n return Ray3d.createXAxis();\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** test for nearly equal control points */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3dH) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3dH(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3dH(this);\r\n }\r\n /**\r\n * Form dot products of each pole with given coefficients. Return as entries in products array.\r\n * @param products array of (scalar) dot products\r\n * @param ax x coefficient\r\n * @param ay y coefficient\r\n * @param az z coefficient\r\n * @param aw w coefficient\r\n */\r\n public poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number) {\r\n const n = this.numPoles;\r\n const data = this._polygon.packedData;\r\n for (let i = 0, k = 0; i < n; i++, k += 4)\r\n products[i] = ax * data[k] + ay * data[k + 1] + az * data[k + 2] + aw * data[k + 3];\r\n }\r\n /** Find the closest point within the bezier span, using true perpendicular test (but no endpoint test)\r\n * * If closer than previously recorded, update the CurveLocationDetail\r\n * * This assumes this bezier is saturated.\r\n * @param spacePoint point being projected\r\n * @param detail pre-allocated detail to record (evolving) closest point.\r\n * @returns true if an updated occurred, false if either (a) no perpendicular projections or (b) perpendiculars were not closer.\r\n */\r\n public updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail,\r\n testAt0: boolean = false,\r\n testAt1: boolean = false): boolean {\r\n let numUpdates = 0;\r\n let roots: number[] | undefined;\r\n if (this.isUnitWeight()) {\r\n // unweighted !!!\r\n const productOrder = 2 * this.order - 2;\r\n this.allocateAndZeroBezierWorkData(productOrder, 0, 0);\r\n const bezier = this._workBezier!;\r\n // closestPoint condition is:\r\n // (spacePoint - curvePoint) DOT curveTangent = 0;\r\n // Each product (x,y,z) of the DOT is the product of two bezier polynomials\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 0, -spacePoint.x, 0);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 1, -spacePoint.y, 1);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 2, -spacePoint.z, 2);\r\n roots = bezier.roots(0.0, true);\r\n } else {\r\n // This bezier has weights.\r\n // The pure cartesian closest point condition is\r\n // (spacePoint - X/w) DOT (X' w - w' X)/ w^2 = 0\r\n // ignoring denominator and using bezier coefficient differences for the derivative, making the numerator 0 is\r\n // (w * spacePoint - X) DOT ( DELTA X * w - DELTA w * X) = 0\r\n const orderA = this.order;\r\n const orderB = 2 * this.order - 2; // products of component and component difference.\r\n const productOrder = orderA + orderB - 1;\r\n this.allocateAndZeroBezierWorkData(productOrder, orderA, orderB);\r\n const bezier = this._workBezier!;\r\n const workA = this._workCoffsA!;\r\n const workB = this._workCoffsB!;\r\n const packedData = this._polygon.packedData;\r\n for (let i = 0; i < 3; i++) {\r\n // x representing loop pass: (w * spacePoint.x - curve.x(s)) * (curveDelta.x(s) * curve.w(s) - curve.x(s) * curveDelta.w(s))\r\n // (and p.w is always 1)\r\n for (let k = 0; k < workA.length; k++)workA[k] = 0;\r\n for (let k = 0; k < workB.length; k++)workB[k] = 0;\r\n BezierPolynomialAlgebra.scaledComponentSum(workA, packedData, 4, orderA, 3, spacePoint.at(i), // w * spacePoint.x\r\n i, -1.0); // curve.x(s) * 1.0\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, 1.0, 3, 0.0, i);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, -1.0, i, 0.0, 3);\r\n BezierPolynomialAlgebra.accumulateProduct(bezier.coffs, workA, workB);\r\n }\r\n roots = bezier.roots(0.0, true);\r\n }\r\n if (roots) {\r\n for (const fraction of roots) {\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n numUpdates += detail.updateIfCloserCurveFractionPointDistance(this, fraction, xyz, a) ? 1 : 0;\r\n }\r\n }\r\n if (testAt0)\r\n numUpdates += this.updateDetailAtFraction (detail, 0.0, spacePoint) ? 1 : 0;\r\n if (testAt1)\r\n numUpdates += this.updateDetailAtFraction (detail, 1.0, spacePoint) ? 1 : 0;\r\n return numUpdates > 0;\r\n }\r\n private updateDetailAtFraction(detail: CurveLocationDetail, fraction: number, spacePoint: Point3d): boolean{\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n return detail.updateIfCloserCurveFractionPointDistance (this, fraction, xyz, a);\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, 0, 0);\r\n const bezier = this._workBezier!;\r\n const data = this._polygon.packedData;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n 1.0,\r\n axisIndex, 0.0,\r\n 3);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n -1.0,\r\n 3, 0.0,\r\n axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, order, order);\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n const weightCoffs = this._workCoffsB!; // to hold weights\r\n const bezier = this._workBezier!;\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n\r\n const data = this._polygon.packedData; // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n // apply one row of the transform to get the transformed coff by itself\r\n let weight;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n for (let i = 0, k = 0; i < order; i++, k += 4) {\r\n weight = data[k + 3];\r\n componentCoffs[i] = transform.multiplyComponentXYZW(axisIndex, data[k], data[k + 1], data[k + 2], weight);\r\n weightCoffs[i] = weight;\r\n }\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, componentCoffs, weightCoffs, 1.0);\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, weightCoffs, componentCoffs, -1.0);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BezierCurve3dH.js","sourceRoot":"","sources":["../../../src/bspline/BezierCurve3dH.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Bspline\r\n */\r\n\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BezierPolynomialAlgebra } from \"../numerics/BezierPolynomials\";\r\nimport { BezierCurveBase } from \"./BezierCurveBase\";\r\n\r\n/** 3d curve with homogeneous weights.\r\n * * A control point with weight w and cartesian (projected) coordinates x,y,z has the weight multiplied into the coordinates,\r\n * hence the control point as stored is (xw, yw, zw, w).\r\n * @public\r\n */\r\nexport class BezierCurve3dH extends BezierCurveBase {\r\n /** test if `other` is also a BezierCurve3dH. */\r\n public isSameGeometryClass(other: any): boolean { return other instanceof BezierCurve3dH; }\r\n /**\r\n * Apply (multiply by) an affine transform\r\n * @param transform\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const data = this._workData0;\r\n for (let i = 0; i < this._polygon.order; i++) {\r\n this._polygon.getPolygonPoint(i, data);\r\n transform.multiplyXYZWToFloat64Array(data[0], data[1], data[2], data[3], data);\r\n this._polygon.setPolygonPoint(i, data);\r\n }\r\n return true;\r\n }\r\n /**\r\n * Apply (multiply by) a perspective transform\r\n * @param matrix\r\n */\r\n public tryMultiplyMatrix4dInPlace(matrix: Matrix4d) {\r\n matrix.multiplyBlockedFloat64ArrayInPlace(this._polygon.packedData);\r\n }\r\n private _workRay0: Ray3d;\r\n private _workRay1: Ray3d;\r\n /** Return a specific pole as a full `[x,y,z,x] Point4d` */\r\n public getPolePoint4d(i: number, result?: Point4d): Point4d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point4d.create(data[0], data[1], data[2], data[3], result);\r\n return undefined;\r\n }\r\n /** Return a specific pole normalized to weight 1\r\n */\r\n public getPolePoint3d(i: number, result?: Point3d): Point3d | undefined {\r\n const data = this._polygon.getPolygonPoint(i, this._workData0);\r\n if (data)\r\n return Point3d.createFromPackedXYZW(data, 0, result);\r\n return undefined;\r\n }\r\n /**\r\n * Returns true if all weights are within tolerance of 1.0\r\n */\r\n public isUnitWeight(tolerance?: number): boolean {\r\n if (tolerance === undefined)\r\n tolerance = Geometry.smallAngleRadians;\r\n const aLow = 1.0 - tolerance;\r\n const aHigh = 1.0 + tolerance;\r\n const data = this._polygon.packedData;\r\n const n = data.length;\r\n let a;\r\n for (let i = 3; i < n; i += 4) {\r\n a = data[i];\r\n if (a < aLow || a > aHigh)\r\n return false;\r\n }\r\n return true;\r\n }\r\n /**\r\n * Capture a polygon as the data for a new `BezierCurve3dH`\r\n * @param polygon complete packed data and order.\r\n */\r\n private constructor(polygon: Float64Array) {\r\n super(4, polygon);\r\n this._workRay0 = Ray3d.createXAxis();\r\n this._workRay1 = Ray3d.createXAxis();\r\n }\r\n /** Create a curve with given points.\r\n * * If input is `Point2d[]`, the points are promoted with `z=0` and `w=1`\r\n * * If input is `Point3d[]`, the points are promoted with w=1`\r\n *\r\n */\r\n public static create(data: Point3d[] | Point4d[] | Point2d[]): BezierCurve3dH | undefined {\r\n if (data.length < 1)\r\n return undefined;\r\n const polygon = new Float64Array(data.length * 4);\r\n if (data[0] instanceof Point3d) {\r\n let i = 0;\r\n for (const p of (data as Point3d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point4d) {\r\n let i = 0;\r\n for (const p of (data as Point4d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = p.z;\r\n polygon[i++] = p.w;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n } else if (data[0] instanceof Point2d) {\r\n let i = 0;\r\n for (const p of (data as Point2d[])) {\r\n polygon[i++] = p.x;\r\n polygon[i++] = p.y;\r\n polygon[i++] = 0.0;\r\n polygon[i++] = 1.0;\r\n }\r\n return new BezierCurve3dH(polygon);\r\n }\r\n return undefined;\r\n }\r\n /** create a bezier curve of specified order, filled with zeros */\r\n public static createOrder(order: number): BezierCurve3dH {\r\n const polygonArray = new Float64Array(order * 4); // and we trust that this is all zeros !!!\r\n return new BezierCurve3dH(polygonArray);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan3dPolesWithWeight(data: Float64Array, spanIndex: number, weight: number) {\r\n this._polygon.loadSpanPolesWithWeight(data, 3, spanIndex, weight);\r\n }\r\n /** Load order * 4 doubles from data[3 * spanIndex] as poles (with added weight) */\r\n public loadSpan4dPoles(data: Float64Array, spanIndex: number) {\r\n this._polygon.loadSpanPoles(data, spanIndex);\r\n }\r\n /** Clone the entire curve. */\r\n public override clone(): BezierCurve3dH {\r\n return new BezierCurve3dH(this._polygon.clonePolygon());\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n result = Point3d.createFromPackedXYZW(this._workData0, 0, result);\r\n return result ? result : Point3d.createZero();\r\n }\r\n /** Return a (deweighted) point on the curve. If deweight fails, returns 000 */\r\n public fractionToPoint4d(fraction: number, result?: Point4d): Point4d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n result = Point4d.createFromPacked(this._workData0, 0, result);\r\n return result ? result : Point4d.createZero();\r\n }\r\n /** Return the cartesian point and derivative vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n this._polygon.evaluate(fraction, this._workData0);\r\n this._polygon.evaluateDerivative(fraction, this._workData1);\r\n result = Ray3d.createWeightedDerivative(this._workData0, this._workData1, result);\r\n if (result)\r\n return result;\r\n // Bad. Very Bad. Return origin and x axis. Should be undefined, but usual cartesian types do not allow that\r\n return Ray3d.createXAxis();\r\n }\r\n /** Construct a plane with\r\n * * origin at the fractional position along the arc\r\n * * x axis is the first derivative, i.e. tangent along the arc\r\n * * y axis is the second derivative, i.e. in the plane and on the center side of the tangent.\r\n * If the arc is circular, the second derivative is directly towards the center\r\n */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const epsilon = 1.0e-8;\r\n const a = 1.0 / (2.0 * epsilon);\r\n if (!result)\r\n result = Plane3dByOriginAndVectors.createXYPlane();\r\n const ray = this.fractionToPointAndDerivative(fraction, this._workRay0);\r\n result.origin.setFrom(ray.origin);\r\n result.vectorU.setFrom(ray.direction);\r\n const ray0 = this.fractionToPointAndDerivative(fraction - epsilon, this._workRay0);\r\n const ray1 = this.fractionToPointAndDerivative(fraction + epsilon, this._workRay1);\r\n Vector3d.createAdd2Scaled(ray0.direction, -a, ray1.direction, a, result.vectorV);\r\n return result;\r\n }\r\n /** test for nearly equal control points */\r\n public override isAlmostEqual(other: any): boolean {\r\n if (other instanceof BezierCurve3dH) {\r\n return this._polygon.isAlmostEqual(other._polygon);\r\n }\r\n return false;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBezierCurve3dH(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBezierCurve3dH(this);\r\n }\r\n /**\r\n * Form dot products of each pole with given coefficients. Return as entries in products array.\r\n * @param products array of (scalar) dot products\r\n * @param ax x coefficient\r\n * @param ay y coefficient\r\n * @param az z coefficient\r\n * @param aw w coefficient\r\n */\r\n public poleProductsXYZW(products: Float64Array, ax: number, ay: number, az: number, aw: number) {\r\n const n = this.numPoles;\r\n const data = this._polygon.packedData;\r\n for (let i = 0, k = 0; i < n; i++, k += 4)\r\n products[i] = ax * data[k] + ay * data[k + 1] + az * data[k + 2] + aw * data[k + 3];\r\n }\r\n /** Find the closest point within the bezier span, using true perpendicular test (but no endpoint test)\r\n * * If closer than previously recorded, update the CurveLocationDetail\r\n * * This assumes this bezier is saturated.\r\n * @param spacePoint point being projected\r\n * @param detail pre-allocated detail to record (evolving) closest point.\r\n * @returns true if an updated occurred, false if either (a) no perpendicular projections or (b) perpendiculars were not closer.\r\n */\r\n public updateClosestPointByTruePerpendicular(spacePoint: Point3d, detail: CurveLocationDetail,\r\n testAt0: boolean = false,\r\n testAt1: boolean = false): boolean {\r\n let numUpdates = 0;\r\n let roots: number[] | undefined;\r\n if (this.isUnitWeight()) {\r\n // unweighted !!!\r\n const productOrder = 2 * this.order - 2;\r\n this.allocateAndZeroBezierWorkData(productOrder, 0, 0);\r\n const bezier = this._workBezier!;\r\n // closestPoint condition is:\r\n // (spacePoint - curvePoint) DOT curveTangent = 0;\r\n // Each product (x,y,z) of the DOT is the product of two bezier polynomials\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 0, -spacePoint.x, 0);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 1, -spacePoint.y, 1);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(bezier.coffs, this._polygon.packedData, 4, this.order, 1.0, 2, -spacePoint.z, 2);\r\n roots = bezier.roots(0.0, true);\r\n } else {\r\n // This bezier has weights.\r\n // The pure cartesian closest point condition is\r\n // (spacePoint - X/w) DOT (X' w - w' X)/ w^2 = 0\r\n // ignoring denominator and using bezier coefficient differences for the derivative, making the numerator 0 is\r\n // (w * spacePoint - X) DOT ( DELTA X * w - DELTA w * X) = 0\r\n const orderA = this.order;\r\n const orderB = 2 * this.order - 2; // products of component and component difference.\r\n const productOrder = orderA + orderB - 1;\r\n this.allocateAndZeroBezierWorkData(productOrder, orderA, orderB);\r\n const bezier = this._workBezier!;\r\n const workA = this._workCoffsA!;\r\n const workB = this._workCoffsB!;\r\n const packedData = this._polygon.packedData;\r\n for (let i = 0; i < 3; i++) {\r\n // x representing loop pass: (w * spacePoint.x - curve.x(s)) * (curveDelta.x(s) * curve.w(s) - curve.x(s) * curveDelta.w(s))\r\n // (and p.w is always 1)\r\n for (let k = 0; k < workA.length; k++)workA[k] = 0;\r\n for (let k = 0; k < workB.length; k++)workB[k] = 0;\r\n BezierPolynomialAlgebra.scaledComponentSum(workA, packedData, 4, orderA, 3, spacePoint.at(i), // w * spacePoint.x\r\n i, -1.0); // curve.x(s) * 1.0\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, 1.0, 3, 0.0, i);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(workB, packedData, 4, orderA, -1.0, i, 0.0, 3);\r\n BezierPolynomialAlgebra.accumulateProduct(bezier.coffs, workA, workB);\r\n }\r\n roots = bezier.roots(0.0, true);\r\n }\r\n if (roots) {\r\n for (const fraction of roots) {\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n numUpdates += detail.updateIfCloserCurveFractionPointDistance(this, fraction, xyz, a) ? 1 : 0;\r\n }\r\n }\r\n if (testAt0)\r\n numUpdates += this.updateDetailAtFraction (detail, 0.0, spacePoint) ? 1 : 0;\r\n if (testAt1)\r\n numUpdates += this.updateDetailAtFraction (detail, 1.0, spacePoint) ? 1 : 0;\r\n return numUpdates > 0;\r\n }\r\n private updateDetailAtFraction(detail: CurveLocationDetail, fraction: number, spacePoint: Point3d): boolean{\r\n const xyz = this.fractionToPoint(fraction);\r\n const a = xyz.distance(spacePoint);\r\n return detail.updateIfCloserCurveFractionPointDistance (this, fraction, xyz, a);\r\n }\r\n /** Extend `rangeToExtend`, using candidate extrema at\r\n * * both end points\r\n * * any internal extrema in x,y,z\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform) {\r\n const order = this.order;\r\n if (!transform) {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, 0, 0);\r\n const bezier = this._workBezier!;\r\n const data = this._polygon.packedData;\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n 1.0,\r\n axisIndex, 0.0,\r\n 3);\r\n BezierPolynomialAlgebra.accumulateScaledShiftedComponentTimesComponentDelta(\r\n bezier.coffs,\r\n data, 4, order,\r\n -1.0,\r\n 3, 0.0,\r\n axisIndex);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extend(this._workPoint0);\r\n }\r\n }\r\n }\r\n } else {\r\n this.allocateAndZeroBezierWorkData(order * 2 - 2, order, order);\r\n const componentCoffs = this._workCoffsA!; // to hold transformed copy of x,y,z in turn.\r\n const weightCoffs = this._workCoffsB!; // to hold weights\r\n const bezier = this._workBezier!;\r\n\r\n this.getPolePoint3d(0, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n this.getPolePoint3d(order - 1, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n\r\n const data = this._polygon.packedData; // Example:\r\n // For x component ...\r\n // coefficients of (weighted x) are at axisIndex=0\r\n // deweighted polynomial is (x(s)/w(s))\r\n // its derivative (to be zeroed) is\r\n // (x'(s)*w(s) -x(s) * w'(s)) / w^2(s)\r\n // The coefficients of the derivatives are (degree times) differences of successive coffs.\r\n // Make the numerator zero to get extrema\r\n // apply one row of the transform to get the transformed coff by itself\r\n let weight;\r\n for (let axisIndex = 0; axisIndex < 3; axisIndex++) {\r\n bezier.zero();\r\n for (let i = 0, k = 0; i < order; i++, k += 4) {\r\n weight = data[k + 3];\r\n componentCoffs[i] = transform.multiplyComponentXYZW(axisIndex, data[k], data[k + 1], data[k + 2], weight);\r\n weightCoffs[i] = weight;\r\n }\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, componentCoffs, weightCoffs, 1.0);\r\n BezierPolynomialAlgebra.accumulateProductWithDifferences(bezier.coffs, weightCoffs, componentCoffs, -1.0);\r\n const roots = bezier.roots(0.0, true);\r\n if (roots && roots.length > 0) {\r\n for (const r of roots) {\r\n this.fractionToPoint(r, this._workPoint0);\r\n rangeToExtend.extendTransformedPoint(transform, this._workPoint0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -2,38 +2,34 @@
2
2
  * @module Bspline
3
3
  */
4
4
  /**
5
- * Enumeration of the possible ways of converting a "periodic" knot vector to an open knot vector.
6
- * None (0) ==> no wrap possible
7
- * OpenByAddingControlPoints (1) ==> wrapped by adding poles
8
- * OpenByRemovingKnots (2) ==> wrapped by deleting extreme knots.
5
+ * B-spline curve and surface types in this library are non-periodic. But they can be created from legacy periodic data.
6
+ * This enumeration lists the possible ways a B-spline object can have been created from legacy periodic data.
9
7
  * @public
10
8
  */
11
9
  export declare enum BSplineWrapMode {
12
- /** No conversion to periodic */
10
+ /** No conversion performed. */
13
11
  None = 0,
14
- /** Convert to periodic by removing control points. This is typical for closed bcurve constructed by control points with maximum continuity.
15
- * * Knots stay the same in open and periodic form.
16
- * * Periodic form omits {degree} control points.
12
+ /** The B-spline was opened up by adding degree wrap-around control points to the legacy periodic data.
13
+ * * This is typical of B-splines constructed with maximum (degree - 1) continuity.
14
+ * * Knots are unaffected by this conversion.
17
15
  */
18
16
  OpenByAddingControlPoints = 1,
19
- /** Convert to periodic by adding special knots. This is typical of closed bcurve constructed as exact circular or elliptic arc
20
- * * 2 knots on each end are omitted in open form
21
- * * poles stay the same.
17
+ /** The B-spline was opened up by removing degree extreme knots from the legacy periodic data.
18
+ * * This is typical of rational B-spline curves representing full circles and ellipses.
19
+ * * Poles are unaffected by this conversion.
22
20
  */
23
21
  OpenByRemovingKnots = 2
24
22
  }
25
23
  /**
26
- * Array of non-decreasing numbers acting as a knot array for bsplines.
24
+ * Array of non-decreasing numbers acting as a knot array for B-splines.
27
25
  *
28
26
  * * Essential identity: numKnots = numPoles + order - 2 = numPoles + degree - 1
29
- * * Various bspline libraries have confusion over how many "end knots" are needed. "Many" libraries (including MicroStation)
30
- * incorrectly demand "order" knots at each end for clamping. But only "order - 1" are really needed.
31
- * * This class uses the "order-1" convention.
32
- * * This class provides queries to convert among spanIndex and knotIndex
27
+ * * Various B-spline libraries have confusion over how many "end knots" are needed. Many libraries (including MicroStation and Parasolid)
28
+ * demand order knots at each end for clamping. But only order-1 are really needed. This class uses the order-1 convention.
33
29
  * * A span is a single interval of the knots.
34
- * * The left knot of span {k} is knot {k+degree-1}
35
- * * This class provides queries to convert among spanFraction, fraction of knot range, and knot
36
- * * core computations (evaluateBasisFunctions) have leftKnotIndex and global knot value as inputs. Callers need to
30
+ * * The left knot of span {k} is knot {k+degree-1}.
31
+ * * This class provides queries to convert among spanIndex, knotIndex, spanFraction, fraction of knot range, and knot.
32
+ * * Core computations (evaluateBasisFunctions) have leftKnotIndex and global knot value as inputs. Callers need to
37
33
  * know their primary values (global knot, spanFraction).
38
34
  * @public
39
35
  */
@@ -55,7 +51,7 @@ export declare class KnotVector {
55
51
  get leftKnotIndex(): number;
56
52
  /** Return the index of the rightmost knot of the active interval */
57
53
  get rightKnotIndex(): number;
58
- /** Whether the bspline was created by adding poles into "closed" structure. This is used by serialize/deserialize to mark knotVector's that were converted from periodic style. */
54
+ /** Whether this KnotVector was created by converting legacy periodic data during deserialization. The conversion used is specified by BSplineWrapMode, and is reversed at serialization time. */
59
55
  get wrappable(): BSplineWrapMode;
60
56
  set wrappable(value: BSplineWrapMode);
61
57
  /** Return the number of bezier spans. Note that this includes zero-length spans if there are repeated knots. */
@@ -74,8 +70,8 @@ export declare class KnotVector {
74
70
  /** Return the total knot distance from beginning to end. */
75
71
  get knotLength01(): number;
76
72
  /**
77
- * Returns true if all numeric values have wraparound conditions for "closed" knotVector with specified wrap mode
78
- * @param mode optional test mode. If undefined, use the this.wrappable.
73
+ * Returns true if all numeric values have wraparound conditions that allow the knots to be closed with specified wrap mode.
74
+ * @param mode optional test mode. If undefined, use this.wrappable.
79
75
  */
80
76
  testClosable(mode?: BSplineWrapMode): boolean;
81
77
  /** Test matching degree and knot values */
@@ -91,7 +87,7 @@ export declare class KnotVector {
91
87
  /** install knot values from an array, optionally ignoring first and last.
92
88
  */
93
89
  setKnots(knots: number[] | Float64Array, skipFirstAndLast?: boolean): void;
94
- /** install knot values from an array, optionally ignoring first and last. */
90
+ /** Set knots to input array (CAPTURED) */
95
91
  setKnotsCapture(knots: Float64Array): void;
96
92
  /**
97
93
  * Create knot vector with {degree-1} replicated knots at start and end, and uniform knots between.
@@ -134,18 +130,20 @@ export declare class KnotVector {
134
130
  * Evaluate basis functions f[] at knot value u.
135
131
  *
136
132
  * @param u knot value for evaluation
137
- * @param f array of order basis function values
133
+ * @param f preallocated output array of order basis function values
134
+ * @returns true if and only if output array is sufficiently sized
138
135
  */
139
- evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array): void;
136
+ evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array): boolean;
140
137
  /**
141
138
  * Evaluate basis functions f[], derivatives df[], and optional second derivatives ddf[] at knot value u.
142
139
  *
143
140
  * @param u knot value for evaluation
144
- * @param f array of order basis function values
145
- * @param df array of order basis derivative values
146
- * @param ddf array of order basis second derivative values
141
+ * @param f preallocated output array of order basis function values
142
+ * @param df preallocated output array of order basis derivative values
143
+ * @param ddf optional preallocated output array of order basis second derivative values
144
+ * @returns true if and only if output arrays are sufficiently sized
147
145
  */
148
- evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array): void;
146
+ evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array): boolean;
149
147
  /** Find the knot span bracketing knots[i] <= u < knots[i+1] and return i.
150
148
  * * If u has no such bracket, return the smaller index of the closest nontrivial bracket.
151
149
  * @param u value to bracket
@@ -166,10 +164,9 @@ export declare class KnotVector {
166
164
  isIndexOfRealSpan(spanIndex: number): boolean;
167
165
  /** Reflect all knots so `leftKnot` and `rightKnot` are maintained but interval lengths reverse. */
168
166
  reflectKnots(): void;
169
- /**
170
- * return a simple array form of the knots. optionally replicate the first and last
171
- * in classic over-clamped manner
172
- */
167
+ /** Return a simple array form of the knots. Optionally replicate the first and last in classic over-clamped manner. */
168
+ static copyKnots(knots: number[] | Float64Array, degree: number, includeExtraEndKnot?: boolean, wrapMode?: BSplineWrapMode): number[];
169
+ /** Return a simple array form of the knots. Optionally replicate the first and last in classic over-clamped manner. */
173
170
  copyKnots(includeExtraEndKnot: boolean): number[];
174
171
  }
175
172
  //# sourceMappingURL=KnotVector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KnotVector.d.ts","sourceRoot":"","sources":["../../../src/bspline/KnotVector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KnotVector.d.ts","sourceRoot":"","sources":["../../../src/bspline/KnotVector.ts"],"names":[],"mappings":"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"}