@itwin/core-geometry 4.3.0-dev.2 → 4.3.0-dev.20

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 (350) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/lib/cjs/Geometry.d.ts.map +1 -1
  3. package/lib/cjs/Geometry.js +2 -4
  4. package/lib/cjs/Geometry.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.d.ts +12 -2
  6. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js +27 -17
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.d.ts +30 -16
  10. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurve.js +68 -44
  12. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  13. package/lib/cjs/bspline/BSplineCurve3dH.d.ts +27 -20
  14. package/lib/cjs/bspline/BSplineCurve3dH.d.ts.map +1 -1
  15. package/lib/cjs/bspline/BSplineCurve3dH.js +136 -87
  16. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  17. package/lib/cjs/bspline/BSplineSurface.d.ts +138 -74
  18. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  19. package/lib/cjs/bspline/BSplineSurface.js +242 -119
  20. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  21. package/lib/cjs/bspline/Bezier1dNd.d.ts +18 -4
  22. package/lib/cjs/bspline/Bezier1dNd.d.ts.map +1 -1
  23. package/lib/cjs/bspline/Bezier1dNd.js +19 -5
  24. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  25. package/lib/cjs/bspline/BezierCurve3dH.d.ts.map +1 -1
  26. package/lib/cjs/bspline/BezierCurve3dH.js +2 -1
  27. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  28. package/lib/cjs/bspline/KnotVector.d.ts +30 -33
  29. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  30. package/lib/cjs/bspline/KnotVector.js +76 -69
  31. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  32. package/lib/cjs/clipping/AlternatingConvexClipTree.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/curve/CurveChainWithDistanceIndex.d.ts +18 -1
  38. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +47 -0
  40. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  41. package/lib/cjs/curve/CurveCollection.d.ts +9 -9
  42. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  43. package/lib/cjs/curve/CurveCollection.js +7 -10
  44. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  45. package/lib/cjs/curve/CurveCurve.d.ts +2 -2
  46. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  47. package/lib/cjs/curve/CurveCurve.js +3 -16
  48. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  49. package/lib/cjs/curve/CurveLocationDetail.d.ts +17 -4
  50. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  51. package/lib/cjs/curve/CurveLocationDetail.js +32 -10
  52. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  53. package/lib/cjs/curve/CurveOps.d.ts +4 -5
  54. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  55. package/lib/cjs/curve/CurveOps.js +1 -1
  56. package/lib/cjs/curve/CurveOps.js.map +1 -1
  57. package/lib/cjs/curve/CurveTypes.d.ts +14 -2
  58. package/lib/cjs/curve/CurveTypes.d.ts.map +1 -1
  59. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  60. package/lib/cjs/curve/CurveWireMomentsXYZ.d.ts.map +1 -1
  61. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -4
  62. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  63. package/lib/cjs/curve/LineString3d.d.ts +3 -6
  64. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  65. package/lib/cjs/curve/LineString3d.js +1 -4
  66. package/lib/cjs/curve/LineString3d.js.map +1 -1
  67. package/lib/cjs/curve/PointString3d.d.ts +2 -1
  68. package/lib/cjs/curve/PointString3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/PointString3d.js.map +1 -1
  70. package/lib/cjs/curve/RegionOps.d.ts +7 -12
  71. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  72. package/lib/cjs/curve/RegionOps.js +2 -1
  73. package/lib/cjs/curve/RegionOps.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +0 -9
  75. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  76. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +16 -35
  77. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +12 -6
  79. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  80. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +80 -18
  81. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts +11 -5
  83. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -1
  84. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +73 -8
  85. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +2 -3
  87. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  88. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +2 -3
  89. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  90. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +4 -4
  91. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  92. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +38 -36
  93. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  94. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts +21 -5
  95. package/lib/cjs/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  96. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +71 -45
  97. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  98. package/lib/cjs/geometry3d/Matrix3d.d.ts +20 -13
  99. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  100. package/lib/cjs/geometry3d/Matrix3d.js +28 -21
  101. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  102. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +11 -2
  103. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  104. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -5
  105. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  106. package/lib/cjs/geometry3d/PointHelpers.d.ts +58 -20
  107. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  108. package/lib/cjs/geometry3d/PointHelpers.js +213 -62
  109. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  110. package/lib/cjs/geometry3d/Segment1d.d.ts +5 -1
  111. package/lib/cjs/geometry3d/Segment1d.d.ts.map +1 -1
  112. package/lib/cjs/geometry3d/Segment1d.js +11 -7
  113. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  114. package/lib/cjs/geometry3d/Transform.d.ts +2 -3
  115. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  116. package/lib/cjs/geometry3d/Transform.js +2 -3
  117. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  118. package/lib/cjs/geometry4d/Point4d.d.ts +14 -1
  119. package/lib/cjs/geometry4d/Point4d.d.ts.map +1 -1
  120. package/lib/cjs/geometry4d/Point4d.js +22 -1
  121. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  122. package/lib/cjs/numerics/BezierPolynomials.d.ts +91 -68
  123. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  124. package/lib/cjs/numerics/BezierPolynomials.js +100 -79
  125. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  126. package/lib/cjs/numerics/Newton.d.ts +115 -60
  127. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  128. package/lib/cjs/numerics/Newton.js +120 -62
  129. package/lib/cjs/numerics/Newton.js.map +1 -1
  130. package/lib/cjs/numerics/PascalCoefficients.d.ts +8 -12
  131. package/lib/cjs/numerics/PascalCoefficients.d.ts.map +1 -1
  132. package/lib/cjs/numerics/PascalCoefficients.js +10 -12
  133. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  134. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  135. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  136. package/lib/cjs/numerics/Polynomials.js +2 -2
  137. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  138. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +3 -0
  139. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  140. package/lib/cjs/polyface/PolyfaceBuilder.js +13 -2
  141. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  142. package/lib/cjs/polyface/PolyfaceClip.d.ts +1 -1
  143. package/lib/cjs/polyface/PolyfaceClip.d.ts.map +1 -1
  144. package/lib/cjs/polyface/PolyfaceClip.js +6 -3
  145. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  146. package/lib/cjs/polyface/PolyfaceData.d.ts +1 -1
  147. package/lib/cjs/polyface/PolyfaceData.js +1 -1
  148. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  149. package/lib/cjs/polyface/PolyfaceQuery.d.ts +39 -12
  150. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  151. package/lib/cjs/polyface/PolyfaceQuery.js +94 -17
  152. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  153. package/lib/cjs/serialization/BGFBReader.d.ts +10 -10
  154. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  155. package/lib/cjs/serialization/BGFBReader.js +69 -42
  156. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  157. package/lib/cjs/serialization/BGFBWriter.d.ts +8 -8
  158. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  159. package/lib/cjs/serialization/BGFBWriter.js +80 -55
  160. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  161. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  162. package/lib/cjs/serialization/GeometrySamples.js +6 -8
  163. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  164. package/lib/cjs/serialization/IModelJsonSchema.d.ts +8 -14
  165. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  166. package/lib/cjs/serialization/IModelJsonSchema.js +85 -259
  167. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  168. package/lib/cjs/serialization/SerializationHelpers.d.ts +109 -0
  169. package/lib/cjs/serialization/SerializationHelpers.d.ts.map +1 -0
  170. package/lib/cjs/serialization/SerializationHelpers.js +591 -0
  171. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -0
  172. package/lib/cjs/solid/SweepContour.d.ts +4 -2
  173. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  174. package/lib/cjs/solid/SweepContour.js +4 -2
  175. package/lib/cjs/solid/SweepContour.js.map +1 -1
  176. package/lib/esm/Geometry.d.ts.map +1 -1
  177. package/lib/esm/Geometry.js +2 -4
  178. package/lib/esm/Geometry.js.map +1 -1
  179. package/lib/esm/bspline/BSpline1dNd.d.ts +12 -2
  180. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  181. package/lib/esm/bspline/BSpline1dNd.js +27 -17
  182. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  183. package/lib/esm/bspline/BSplineCurve.d.ts +30 -16
  184. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  185. package/lib/esm/bspline/BSplineCurve.js +68 -44
  186. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  187. package/lib/esm/bspline/BSplineCurve3dH.d.ts +27 -20
  188. package/lib/esm/bspline/BSplineCurve3dH.d.ts.map +1 -1
  189. package/lib/esm/bspline/BSplineCurve3dH.js +137 -88
  190. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  191. package/lib/esm/bspline/BSplineSurface.d.ts +138 -74
  192. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  193. package/lib/esm/bspline/BSplineSurface.js +242 -119
  194. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  195. package/lib/esm/bspline/Bezier1dNd.d.ts +18 -4
  196. package/lib/esm/bspline/Bezier1dNd.d.ts.map +1 -1
  197. package/lib/esm/bspline/Bezier1dNd.js +19 -5
  198. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  199. package/lib/esm/bspline/BezierCurve3dH.d.ts.map +1 -1
  200. package/lib/esm/bspline/BezierCurve3dH.js +2 -1
  201. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  202. package/lib/esm/bspline/KnotVector.d.ts +30 -33
  203. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  204. package/lib/esm/bspline/KnotVector.js +76 -69
  205. package/lib/esm/bspline/KnotVector.js.map +1 -1
  206. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  207. package/lib/esm/clipping/ClipUtils.d.ts +32 -5
  208. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  209. package/lib/esm/clipping/ClipUtils.js +92 -11
  210. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  211. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +18 -1
  212. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  213. package/lib/esm/curve/CurveChainWithDistanceIndex.js +48 -1
  214. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  215. package/lib/esm/curve/CurveCollection.d.ts +9 -9
  216. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  217. package/lib/esm/curve/CurveCollection.js +7 -10
  218. package/lib/esm/curve/CurveCollection.js.map +1 -1
  219. package/lib/esm/curve/CurveCurve.d.ts +2 -2
  220. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  221. package/lib/esm/curve/CurveCurve.js +3 -16
  222. package/lib/esm/curve/CurveCurve.js.map +1 -1
  223. package/lib/esm/curve/CurveLocationDetail.d.ts +17 -4
  224. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  225. package/lib/esm/curve/CurveLocationDetail.js +32 -10
  226. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  227. package/lib/esm/curve/CurveOps.d.ts +4 -5
  228. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  229. package/lib/esm/curve/CurveOps.js +1 -1
  230. package/lib/esm/curve/CurveOps.js.map +1 -1
  231. package/lib/esm/curve/CurveTypes.d.ts +14 -2
  232. package/lib/esm/curve/CurveTypes.d.ts.map +1 -1
  233. package/lib/esm/curve/CurveTypes.js.map +1 -1
  234. package/lib/esm/curve/CurveWireMomentsXYZ.d.ts.map +1 -1
  235. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -4
  236. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  237. package/lib/esm/curve/LineString3d.d.ts +3 -6
  238. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  239. package/lib/esm/curve/LineString3d.js +1 -4
  240. package/lib/esm/curve/LineString3d.js.map +1 -1
  241. package/lib/esm/curve/PointString3d.d.ts +2 -1
  242. package/lib/esm/curve/PointString3d.d.ts.map +1 -1
  243. package/lib/esm/curve/PointString3d.js.map +1 -1
  244. package/lib/esm/curve/RegionOps.d.ts +7 -12
  245. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  246. package/lib/esm/curve/RegionOps.js +2 -1
  247. package/lib/esm/curve/RegionOps.js.map +1 -1
  248. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +0 -9
  249. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  250. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +16 -35
  251. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  252. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +12 -6
  253. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  254. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +81 -19
  255. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  256. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts +11 -5
  257. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.d.ts.map +1 -1
  258. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +74 -9
  259. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  260. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +2 -3
  261. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  262. package/lib/esm/curve/internalContexts/MultiChainCollector.js +2 -3
  263. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  264. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +4 -4
  265. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  266. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +38 -36
  267. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  268. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts +21 -5
  269. package/lib/esm/geometry3d/CoincidentGeometryOps.d.ts.map +1 -1
  270. package/lib/esm/geometry3d/CoincidentGeometryOps.js +71 -45
  271. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  272. package/lib/esm/geometry3d/Matrix3d.d.ts +20 -13
  273. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  274. package/lib/esm/geometry3d/Matrix3d.js +28 -21
  275. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  276. package/lib/esm/geometry3d/Point3dVector3d.d.ts +11 -2
  277. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  278. package/lib/esm/geometry3d/Point3dVector3d.js +16 -5
  279. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  280. package/lib/esm/geometry3d/PointHelpers.d.ts +58 -20
  281. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  282. package/lib/esm/geometry3d/PointHelpers.js +213 -62
  283. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  284. package/lib/esm/geometry3d/Segment1d.d.ts +5 -1
  285. package/lib/esm/geometry3d/Segment1d.d.ts.map +1 -1
  286. package/lib/esm/geometry3d/Segment1d.js +11 -7
  287. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  288. package/lib/esm/geometry3d/Transform.d.ts +2 -3
  289. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  290. package/lib/esm/geometry3d/Transform.js +2 -3
  291. package/lib/esm/geometry3d/Transform.js.map +1 -1
  292. package/lib/esm/geometry4d/Point4d.d.ts +14 -1
  293. package/lib/esm/geometry4d/Point4d.d.ts.map +1 -1
  294. package/lib/esm/geometry4d/Point4d.js +22 -1
  295. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  296. package/lib/esm/numerics/BezierPolynomials.d.ts +91 -68
  297. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  298. package/lib/esm/numerics/BezierPolynomials.js +100 -79
  299. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  300. package/lib/esm/numerics/Newton.d.ts +115 -60
  301. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  302. package/lib/esm/numerics/Newton.js +120 -62
  303. package/lib/esm/numerics/Newton.js.map +1 -1
  304. package/lib/esm/numerics/PascalCoefficients.d.ts +8 -12
  305. package/lib/esm/numerics/PascalCoefficients.d.ts.map +1 -1
  306. package/lib/esm/numerics/PascalCoefficients.js +10 -12
  307. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  308. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  309. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  310. package/lib/esm/numerics/Polynomials.js +2 -2
  311. package/lib/esm/numerics/Polynomials.js.map +1 -1
  312. package/lib/esm/polyface/PolyfaceBuilder.d.ts +3 -0
  313. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  314. package/lib/esm/polyface/PolyfaceBuilder.js +13 -2
  315. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  316. package/lib/esm/polyface/PolyfaceClip.d.ts +1 -1
  317. package/lib/esm/polyface/PolyfaceClip.d.ts.map +1 -1
  318. package/lib/esm/polyface/PolyfaceClip.js +6 -3
  319. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  320. package/lib/esm/polyface/PolyfaceData.d.ts +1 -1
  321. package/lib/esm/polyface/PolyfaceData.js +1 -1
  322. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  323. package/lib/esm/polyface/PolyfaceQuery.d.ts +39 -12
  324. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  325. package/lib/esm/polyface/PolyfaceQuery.js +94 -17
  326. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  327. package/lib/esm/serialization/BGFBReader.d.ts +10 -10
  328. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  329. package/lib/esm/serialization/BGFBReader.js +69 -42
  330. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  331. package/lib/esm/serialization/BGFBWriter.d.ts +8 -8
  332. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  333. package/lib/esm/serialization/BGFBWriter.js +80 -55
  334. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  335. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  336. package/lib/esm/serialization/GeometrySamples.js +7 -9
  337. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  338. package/lib/esm/serialization/IModelJsonSchema.d.ts +8 -14
  339. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  340. package/lib/esm/serialization/IModelJsonSchema.js +86 -260
  341. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  342. package/lib/esm/serialization/SerializationHelpers.d.ts +109 -0
  343. package/lib/esm/serialization/SerializationHelpers.d.ts.map +1 -0
  344. package/lib/esm/serialization/SerializationHelpers.js +588 -0
  345. package/lib/esm/serialization/SerializationHelpers.js.map +1 -0
  346. package/lib/esm/solid/SweepContour.d.ts +4 -2
  347. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  348. package/lib/esm/solid/SweepContour.js +4 -2
  349. package/lib/esm/solid/SweepContour.js.map +1 -1
  350. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerializationHelpers.js","sourceRoot":"","sources":["../../../src/serialization/SerializationHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Serialization\r\n */\r\nimport { BSplineWrapMode, KnotVector } from \"../bspline/KnotVector\";\r\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\r\n\r\n/**\r\n * `SerializationHelpers` namespace has helper classes for serializing and deserializing geometry.\r\n * @internal\r\n */\r\nexport namespace SerializationHelpers {\r\n export interface BSplineParams {\r\n numPoles: number;\r\n order: number;\r\n closed?: boolean;\r\n knots: number[] | Float64Array;\r\n wrapMode?: BSplineWrapMode;\r\n }\r\n export interface BSplineCurveData {\r\n poles: number[][] | Float64Array;\r\n dim: number; // # coordinates per pole = inner dimension of poles array (3,4)\r\n weights?: number[] | Float64Array; // if defined, poles are assumed to be weighted and dim 3\r\n params: BSplineParams;\r\n }\r\n export interface BSplineSurfaceData {\r\n poles: number[][][] | Float64Array;\r\n dim: number; // # coordinates per pole = inner dimension of poles array (3,4)\r\n weights?: number[][] | Float64Array; // if defined, poles are assumed to be weighted and dim 3\r\n uParams: BSplineParams; // uParams.numPoles = # cols (middle dimension) of poles\r\n vParams: BSplineParams; // vParams.numPoles = # rows (outer dimension) of poles\r\n }\r\n export interface BSplineDataOptions {\r\n jsonPoles?: boolean; // type of output pole/weight arrays. true: structured number array; false: Float64Array; undefined: either\r\n jsonKnots?: boolean; // type of output knot arrays. true: number array; false: Float64Array; undefined: either\r\n removeExtraKnots?: boolean; // extraneous knot handling during Import: true: remove them; false | undefined: leave them. Has no effect during Export, which always outputs the extraneous knots.\r\n }\r\n\r\n /** Constructor with required data. Inputs are captured, not copied. */\r\n export function createBSplineCurveData(poles: number[][] | Float64Array, dim: number, knots: number[] | Float64Array, numPoles: number, order: number): BSplineCurveData {\r\n return { poles, dim, params: { numPoles, order, knots } };\r\n }\r\n\r\n /** Constructor with required data. Inputs are captured, not copied. */\r\n export function createBSplineSurfaceData(poles: number[][][] | Float64Array, dim: number, uKnots: number[] | Float64Array, uNumPoles: number, uOrder: number, vKnots: number[] | Float64Array, vNumPoles: number, vOrder: number): BSplineSurfaceData {\r\n return { poles, dim, uParams: { numPoles: uNumPoles, order: uOrder, knots: uKnots }, vParams: { numPoles: vNumPoles, order: vOrder, knots: vKnots } };\r\n }\r\n\r\n /** Clone curve data */\r\n export function cloneBSplineCurveData(source: BSplineCurveData): BSplineCurveData {\r\n return {\r\n poles: (source.poles instanceof Float64Array) ? new Float64Array(source.poles) : NumberArray.copy2d(source.poles),\r\n dim: source.dim,\r\n weights: source.weights ? source.weights.slice() : undefined,\r\n params: {\r\n numPoles: source.params.numPoles,\r\n order: source.params.order,\r\n closed: source.params.closed,\r\n knots: source.params.knots.slice(),\r\n wrapMode: source.params.wrapMode,\r\n },\r\n };\r\n }\r\n\r\n /** Clone surface data */\r\n export function cloneBSplineSurfaceData(source: BSplineSurfaceData): BSplineSurfaceData {\r\n return {\r\n poles: (source.poles instanceof Float64Array) ? new Float64Array(source.poles) : NumberArray.copy3d(source.poles),\r\n dim: source.dim,\r\n weights: source.weights ? ((source.weights instanceof Float64Array) ? source.weights.slice() : NumberArray.copy2d(source.weights)) : undefined,\r\n uParams: {\r\n numPoles: source.uParams.numPoles,\r\n order: source.uParams.order,\r\n closed: source.uParams.closed,\r\n knots: source.uParams.knots.slice(),\r\n wrapMode: source.uParams.wrapMode,\r\n },\r\n vParams: {\r\n numPoles: source.vParams.numPoles,\r\n order: source.vParams.order,\r\n closed: source.vParams.closed,\r\n knots: source.vParams.knots.slice(),\r\n wrapMode: source.vParams.wrapMode,\r\n },\r\n };\r\n }\r\n\r\n /** Copy from source to dest */\r\n function copyBSplineCurveDataPoles(source: BSplineCurveData): {poles?: number[][], weights?: number[]} {\r\n let nPole = 0;\r\n let nCoordPerPole = 0;\r\n let nPoleCoords = 0;\r\n let poleDimProduct = 0;\r\n if (source.poles instanceof Float64Array) {\r\n nPole = source.params.numPoles;\r\n nCoordPerPole = source.dim;\r\n nPoleCoords = source.poles.length;\r\n poleDimProduct = nPole * nCoordPerPole;\r\n } else {\r\n nPole = source.poles.length;\r\n if (nPole > 0)\r\n nCoordPerPole = source.poles[0].length;\r\n nPoleCoords = poleDimProduct = nPole * nCoordPerPole;\r\n }\r\n if (0 === poleDimProduct || poleDimProduct > nPoleCoords || nCoordPerPole !== source.dim)\r\n return {};\r\n\r\n let nWeight = 0;\r\n let nWeightCoords = 0;\r\n let weightDimProduct = 0;\r\n if (source.weights !== undefined) {\r\n if (source.weights instanceof Float64Array) {\r\n nWeight = source.params.numPoles;\r\n nWeightCoords = source.weights.length;\r\n weightDimProduct = nWeight;\r\n } else {\r\n nWeight = source.weights.length;\r\n nWeightCoords = weightDimProduct = nWeight;\r\n }\r\n if (0 === weightDimProduct || weightDimProduct > nWeightCoords || nWeight !== nPole)\r\n return {};\r\n }\r\n\r\n // convert variant source to structured number array\r\n let poles: number[][] | undefined;\r\n let weights: number[] | undefined;\r\n if (source.poles instanceof Float64Array)\r\n poles = NumberArray.unpack2d(source.poles, nCoordPerPole);\r\n else\r\n poles = NumberArray.copy2d(source.poles);\r\n if (poles && source.weights)\r\n weights = NumberArray.create(source.weights);\r\n return {poles, weights};\r\n }\r\n\r\n /** Copy from source to dest */\r\n function copyBSplineSurfaceDataPoles(source: BSplineSurfaceData): {poles?: number[][][], weights?: number[][]} {\r\n let nPoleRow = 0;\r\n let nPolePerRow = 0;\r\n let nCoordPerPole = 0;\r\n let nCoords = 0;\r\n let poleDimProduct = 0;\r\n if (source.poles instanceof Float64Array) {\r\n nPoleRow = source.vParams.numPoles;\r\n nPolePerRow = source.uParams.numPoles;\r\n nCoordPerPole = source.dim;\r\n nCoords = source.poles.length;\r\n poleDimProduct = nPoleRow * nPolePerRow * nCoordPerPole;\r\n } else {\r\n nPoleRow = source.poles.length;\r\n if (nPoleRow > 0)\r\n nPolePerRow = source.poles[0].length;\r\n if (nPolePerRow > 0)\r\n nCoordPerPole = source.poles[0][0].length;\r\n nCoords = poleDimProduct = nPoleRow * nPolePerRow * nCoordPerPole;\r\n }\r\n if (0 === poleDimProduct || poleDimProduct > nCoords || nCoordPerPole !== source.dim)\r\n return {};\r\n\r\n let nWeightRow = 0;\r\n let nWeightPerRow = 0;\r\n let nWeightCoords = 0;\r\n let weightDimProduct = 0;\r\n if (source.weights !== undefined) {\r\n if (source.weights instanceof Float64Array) {\r\n nWeightRow = source.vParams.numPoles;\r\n nWeightPerRow = source.uParams.numPoles;\r\n nWeightCoords = source.weights.length;\r\n weightDimProduct = nWeightRow * nWeightPerRow;\r\n } else {\r\n nWeightRow = source.weights.length;\r\n if (nWeightRow > 0)\r\n nWeightPerRow = source.weights[0].length;\r\n nWeightCoords = weightDimProduct = nWeightRow * nWeightPerRow;\r\n }\r\n if (0 === weightDimProduct || weightDimProduct > nWeightCoords || nWeightRow !== nPoleRow || nWeightPerRow !== nPolePerRow)\r\n return {};\r\n }\r\n\r\n // convert variant source to structured number array\r\n let poles: number[][][] | undefined;\r\n let weights: number[][] | undefined;\r\n if (source.poles instanceof Float64Array)\r\n poles = NumberArray.unpack3d(source.poles, nPolePerRow, nCoordPerPole);\r\n else\r\n poles = NumberArray.copy3d(source.poles);\r\n if (poles && source.weights) {\r\n if (source.weights instanceof Float64Array)\r\n weights = NumberArray.unpack2d(source.weights, nWeightPerRow);\r\n else\r\n weights = NumberArray.copy2d(source.weights);\r\n }\r\n return {poles, weights};\r\n }\r\n\r\n /** Convert data arrays to the types specified by options. */\r\n function convertBSplineCurveDataArrays(data: BSplineCurveData, options?: BSplineDataOptions) {\r\n if (undefined !== options?.jsonPoles) {\r\n const packedPoles = data.poles instanceof Float64Array;\r\n if (options.jsonPoles && packedPoles)\r\n data.poles = NumberArray.unpack2d(data.poles as Float64Array, data.dim)!;\r\n else if (!options.jsonPoles && !packedPoles)\r\n data.poles = NumberArray.pack(data.poles as number[][]);\r\n\r\n if (data.weights) {\r\n const packedWeights = data.weights instanceof Float64Array;\r\n if (options.jsonPoles && packedWeights)\r\n data.weights = NumberArray.create(data.weights);\r\n else if (!options.jsonPoles && !packedWeights)\r\n data.weights = NumberArray.pack(data.weights as number[]);\r\n }\r\n }\r\n if (undefined !== options?.jsonKnots) {\r\n const packedKnots = data.params.knots instanceof Float64Array;\r\n if (options.jsonKnots && packedKnots)\r\n data.params.knots = NumberArray.create(data.params.knots);\r\n else if (!options.jsonKnots && !packedKnots)\r\n data.params.knots = NumberArray.pack(data.params.knots as number[]);\r\n }\r\n }\r\n\r\n /** Convert data arrays to the types specified by options. */\r\n function convertBSplineSurfaceDataArrays(data: BSplineSurfaceData, options?: BSplineDataOptions) {\r\n if (undefined !== options?.jsonPoles) {\r\n const packedPoles = data.poles instanceof Float64Array;\r\n if (options.jsonPoles && packedPoles)\r\n data.poles = NumberArray.unpack3d(data.poles as Float64Array, data.uParams.numPoles, data.dim)!;\r\n else if (!options.jsonPoles && !packedPoles)\r\n data.poles = NumberArray.pack(data.poles as number[][][]);\r\n\r\n if (data.weights) {\r\n const packedWeights = data.weights instanceof Float64Array;\r\n if (options.jsonPoles && packedWeights)\r\n data.weights = NumberArray.unpack2d(data.weights as Float64Array, data.uParams.numPoles);\r\n else if (!options.jsonPoles && !packedWeights)\r\n data.weights = NumberArray.pack(data.weights as number[][]);\r\n }\r\n }\r\n if (undefined !== options?.jsonKnots) {\r\n const packedKnotsU = data.uParams.knots instanceof Float64Array;\r\n if (options.jsonKnots && packedKnotsU)\r\n data.uParams.knots = NumberArray.create(data.uParams.knots);\r\n else if (!options.jsonKnots && !packedKnotsU)\r\n data.uParams.knots = NumberArray.pack(data.uParams.knots as number[]);\r\n\r\n const packedKnotsV = data.vParams.knots instanceof Float64Array;\r\n if (options.jsonKnots && packedKnotsV)\r\n data.vParams.knots = NumberArray.create(data.vParams.knots);\r\n else if (!options.jsonKnots && !packedKnotsV)\r\n data.vParams.knots = NumberArray.pack(data.vParams.knots as number[]);\r\n }\r\n }\r\n\r\n export class Import {\r\n /** copy knots, with options to control destination type and extraneous knot removal */\r\n private static copyKnots(knots: Float64Array | number[], options?: BSplineDataOptions, iStart?: number, iEnd?: number): Float64Array| number[] {\r\n if (undefined === iStart)\r\n iStart = 0;\r\n if (undefined === iEnd)\r\n iEnd = knots.length;\r\n if (options?.removeExtraKnots) {\r\n ++iStart; // ignore start knot\r\n --iEnd; // ignore end knot\r\n }\r\n let newNumKnots = iEnd - iStart;\r\n if (newNumKnots < 0)\r\n newNumKnots = 0;\r\n const newKnots = options?.jsonKnots ? new Array<number>(newNumKnots) : new Float64Array(newNumKnots);\r\n for (let i = iStart, k = 0; i < iEnd; i++, k++)\r\n newKnots[k] = knots[i];\r\n return newKnots;\r\n }\r\n\r\n /**\r\n * Recognize the special legacy periodic B-spline data of mode BSplineWrapMode.OpenByRemovingKnots, and return the corresponding modern open clamped knots.\r\n * * Note that the B-spline poles corresponding to the converted knots remain unchanged, but it is assumed that first and last poles are equal.\r\n * * Example: the legacy 7-point quadratic circle periodic knots {-1/3 0 0 0 1/3 1/3 2/3 2/3 1 1 1 4/3} are converted to open knots {0 0 1/3 1/3 2/3 2/3 1 1}.\r\n * * General form of knot vector (k = order, d = k-1 = degree, p = numPoles):\r\n * * * legacy input: {k/2 periodically extended knots} {start knot multiplicity k} {p-k interior knots} {end knot multiplicity k} {d/2 periodically extended knots}\r\n * * * converted output: {start knot multiplicity d} {p-k interior knots} {end knot multiplicity d}\r\n * @param knots classic knot vector to test\r\n * @param numPoles number of poles\r\n * @param order B-spline order\r\n * @param options for output type, extraneous knot removal\r\n * @returns open knots if legacy periodic B-spline input data is recognized; otherwise, undefined\r\n * @see Export.closeLegacyPeriodicKnots\r\n */\r\n private static openLegacyPeriodicKnots(knots: Float64Array | number[], numPoles: number, order: number, options?: BSplineDataOptions): Float64Array | number[] | undefined {\r\n const numKnots = knots.length;\r\n if (order < 2 || numPoles + 2 * order - 1 !== numKnots)\r\n return undefined; // not legacy periodic knots\r\n\r\n const startKnot = knots[order - 1];\r\n const endKnot = knots[numKnots - order];\r\n const iStart0 = Math.floor(order / 2); // index of first expected multiple of the start knot\r\n const iEnd0 = iStart0 + numPoles; // index of first expected multiple of the end knot\r\n const iEnd1 = iEnd0 + order; // one past index of last expected multiple of the end knot\r\n for (let i = 0; i < order; ++i) {\r\n if (Math.abs(knots[iStart0 + i] - startKnot) >= KnotVector.knotTolerance)\r\n return undefined; // start knot multiplicity too small\r\n if (Math.abs(knots[iEnd0 + i] - endKnot) >= KnotVector.knotTolerance)\r\n return undefined; // end knot multiplicity too small\r\n }\r\n return this.copyKnots(knots, options, iStart0, iEnd1);\r\n }\r\n\r\n /** Prepare imported B-spline curve data for eventual conversion to BSplineCurve3d | BSplineCurve3dH:\r\n * * Opens legacy \"fake\" periodic data by expanding knots\r\n * * Opens true periodic data by expanding poles and weights\r\n * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.\r\n * @param options output specifications\r\n * @returns whether data was successfully prepared\r\n */\r\n public static prepareBSplineCurveData(data: BSplineCurveData, options?: BSplineDataOptions): boolean {\r\n let polesExpanded: number[][] | undefined;\r\n let weightsExpanded: number[] | undefined;\r\n let knotsCorrected: number[] | Float64Array | undefined;\r\n data.params.wrapMode = undefined;\r\n\r\n if (true === data.params.closed) {\r\n knotsCorrected = this.openLegacyPeriodicKnots(data.params.knots, data.params.numPoles, data.params.order, options);\r\n if (undefined !== knotsCorrected) {\r\n // legacy periodic knots removed, poles untouched\r\n data.params.knots = knotsCorrected;\r\n data.params.wrapMode = BSplineWrapMode.OpenByRemovingKnots;\r\n } else {\r\n // wrap poles, knots untouched\r\n if (!polesExpanded) {\r\n const arrays = copyBSplineCurveDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesExpanded = arrays.poles;\r\n data.weights = weightsExpanded = arrays.weights;\r\n }\r\n for (let i = 0; i < data.params.order - 1; ++i) {\r\n const wraparoundPt = [];\r\n for (let j = 0; j < data.dim; ++j)\r\n wraparoundPt.push(polesExpanded[i][j]);\r\n polesExpanded.push(wraparoundPt); // append degree wraparound poles\r\n }\r\n if (weightsExpanded) {\r\n for (let i = 0; i < data.params.order - 1; ++i)\r\n weightsExpanded.push(weightsExpanded[i]); // append degree wraparound weights\r\n }\r\n data.params.numPoles += data.params.order - 1;\r\n data.params.wrapMode = BSplineWrapMode.OpenByAddingControlPoints;\r\n }\r\n }\r\n\r\n if (options?.removeExtraKnots) {\r\n if (!knotsCorrected)\r\n data.params.knots = this.copyKnots(data.params.knots, options);\r\n }\r\n\r\n data.params.closed = undefined; // we are open\r\n\r\n convertBSplineCurveDataArrays(data, options);\r\n return true;\r\n }\r\n\r\n /** Prepare imported B-spline surface data for eventual conversion to BSplineSurface3d | BSplineSurface3dH:\r\n * * Opens legacy \"fake\" periodic data by expanding knots\r\n * * Opens true periodic data by expanding poles and weights\r\n * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.\r\n * @param options output specifications\r\n * @returns whether data was successfully prepared\r\n */\r\n public static prepareBSplineSurfaceData(data: BSplineSurfaceData, options?: BSplineDataOptions): boolean {\r\n let polesExpanded: number[][][] | undefined;\r\n let weightsExpanded: number[][] | undefined;\r\n let uKnotsCorrected: number[] | Float64Array | undefined;\r\n let vKnotsCorrected: number[] | Float64Array | undefined;\r\n data.uParams.wrapMode = data.vParams.wrapMode = undefined;\r\n\r\n if (true === data.uParams.closed) {\r\n uKnotsCorrected = this.openLegacyPeriodicKnots(data.uParams.knots, data.uParams.numPoles, data.uParams.order, options);\r\n if (undefined !== uKnotsCorrected) {\r\n // legacy periodic knots removed, poles untouched\r\n data.uParams.knots = uKnotsCorrected;\r\n data.uParams.wrapMode = BSplineWrapMode.OpenByRemovingKnots;\r\n } else {\r\n // wrap poles, knots untouched\r\n if (!polesExpanded) {\r\n const arrays = copyBSplineSurfaceDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesExpanded = arrays.poles;\r\n data.weights = weightsExpanded = arrays.weights;\r\n }\r\n for (let i = 0; i < data.vParams.numPoles; ++i) { // #rows\r\n for (let j = 0; j < data.uParams.order - 1; ++j) {\r\n const wraparoundPt = [];\r\n for (let k = 0; k < data.dim; ++k)\r\n wraparoundPt.push(polesExpanded[i][j][k]);\r\n polesExpanded[i].push(wraparoundPt); // append degreeU wraparound poles to each row\r\n }\r\n }\r\n if (weightsExpanded) {\r\n for (let i = 0; i < data.vParams.numPoles; ++i) // #rows\r\n for (let j = 0; j < data.uParams.order - 1; ++j)\r\n weightsExpanded[i].push(weightsExpanded[i][j]); // append degreeU wraparound weights to each row\r\n }\r\n data.uParams.numPoles += data.uParams.order - 1;\r\n data.uParams.wrapMode = BSplineWrapMode.OpenByAddingControlPoints;\r\n }\r\n }\r\n\r\n if (true === data.vParams.closed) {\r\n vKnotsCorrected = this.openLegacyPeriodicKnots(data.vParams.knots, data.vParams.numPoles, data.vParams.order, options);\r\n if (undefined !== vKnotsCorrected) {\r\n // legacy periodic knots removed, poles untouched\r\n data.vParams.knots = vKnotsCorrected;\r\n data.vParams.wrapMode = BSplineWrapMode.OpenByRemovingKnots;\r\n } else {\r\n // wrap poles, knots untouched\r\n if (!polesExpanded) {\r\n const arrays = copyBSplineSurfaceDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesExpanded = arrays.poles;\r\n data.weights = weightsExpanded = arrays.weights;\r\n }\r\n for (let i = 0; i < data.vParams.order - 1; ++i) {\r\n const wrapAroundRow = [];\r\n for (let j = 0; j < data.uParams.numPoles; ++j) { // #cols\r\n const wrapAroundPt = [];\r\n for (let k = 0; k < data.dim; ++k)\r\n wrapAroundPt.push(polesExpanded[i][j][k]);\r\n wrapAroundRow.push(wrapAroundPt);\r\n }\r\n polesExpanded.push(wrapAroundRow); // append degreeV wraparound rows of poles\r\n }\r\n if (weightsExpanded) {\r\n for (let i = 0; i < data.vParams.order - 1; ++i) {\r\n const wrapAroundRow = [];\r\n for (let j = 0; j < data.uParams.numPoles; ++j) // #cols\r\n wrapAroundRow.push(weightsExpanded[i][j]);\r\n weightsExpanded.push(wrapAroundRow); // append degreeV wraparound rows of weights\r\n }\r\n }\r\n data.vParams.numPoles += data.vParams.order - 1;\r\n data.vParams.wrapMode = BSplineWrapMode.OpenByAddingControlPoints;\r\n }\r\n }\r\n\r\n if (options?.removeExtraKnots) {\r\n if (!uKnotsCorrected)\r\n data.uParams.knots = this.copyKnots(data.uParams.knots, options);\r\n if (!vKnotsCorrected)\r\n data.vParams.knots = this.copyKnots(data.vParams.knots, options);\r\n }\r\n\r\n data.uParams.closed = data.vParams.closed = undefined; // we are open\r\n\r\n convertBSplineSurfaceDataArrays(data, options);\r\n return true;\r\n }\r\n }\r\n\r\n export class Export {\r\n /**\r\n * Restore special legacy periodic B-spline knots opened via BSplineWrapMode.OpenByRemovingKnots logic.\r\n * @param knots modern knot vector: {start knot multiplicity d} {p-k interior knots} {end knot multiplicity d}\r\n * @param order B-spline order\r\n * @param options for output type\r\n * @param wrapMode wrap mode of the knots\r\n * @returns legacy periodic knots (with classic extraneous start/end knot) if wrapMode recognized; otherwise, undefined\r\n * @see Import.openLegacyPeriodicKnots\r\n */\r\n private static closeLegacyPeriodicKnots(knots: Float64Array | number[], order: number, options?: BSplineDataOptions, wrapMode?: BSplineWrapMode): Float64Array | number[] | undefined {\r\n if (wrapMode === undefined || wrapMode !== BSplineWrapMode.OpenByRemovingKnots)\r\n return undefined;\r\n\r\n const degree = order - 1;\r\n const leftIndex = degree - 1;\r\n const rightIndex = knots.length - degree;\r\n const leftKnot = knots[leftIndex];\r\n const rightKnot = knots[rightIndex];\r\n const knotPeriod = rightKnot - leftKnot;\r\n const newNumKnots = knots.length + degree + 2;\r\n const newKnots = options?.jsonKnots ? new Array<number>(newNumKnots) : new Float64Array(newNumKnots);\r\n\r\n let k = 0;\r\n for (let i = Math.floor(order / 2); i > 0; --i)\r\n newKnots[k++] = knots[rightIndex - i] - knotPeriod;\r\n newKnots[k++] = leftKnot; // extraneous start knot\r\n for (const knot of knots)\r\n newKnots[k++] = knot;\r\n newKnots[k++] = rightKnot; // extraneous end knot\r\n for (let i = 1; i <= Math.floor(degree / 2); ++i)\r\n newKnots[k++] = knots[leftIndex + i] + knotPeriod;\r\n\r\n return newKnots;\r\n }\r\n\r\n /**\r\n * Prepare data from a B-spline curve for export.\r\n * * adds classic extraneous knot at start and end of knot vector\r\n * * re-closes periodic data based on BSplineWrapMode\r\n * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.\r\n * @param options output specifications\r\n * @returns whether data was successfully prepared\r\n */\r\n public static prepareBSplineCurveData(data: BSplineCurveData, options?: BSplineDataOptions): boolean {\r\n let polesTrimmed: number[][] | undefined;\r\n let weightsTrimmed: number[] | undefined;\r\n let knotsCorrected: number[] | Float64Array | undefined;\r\n data.params.closed = undefined;\r\n\r\n switch (data.params.wrapMode) {\r\n case BSplineWrapMode.OpenByRemovingKnots: {\r\n // add legacy periodic and extraneous knots, poles untouched\r\n knotsCorrected = this.closeLegacyPeriodicKnots(data.params.knots, data.params.order, options, data.params.wrapMode);\r\n if (undefined === knotsCorrected)\r\n return false; // invalid input\r\n data.params.knots = knotsCorrected;\r\n data.params.closed = true;\r\n break;\r\n }\r\n case BSplineWrapMode.OpenByAddingControlPoints: {\r\n // unwrap poles, knots untouched\r\n if (!polesTrimmed) {\r\n const arrays = copyBSplineCurveDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesTrimmed = arrays.poles;\r\n data.weights = weightsTrimmed = arrays.weights;\r\n }\r\n for (let i = 0; i < data.params.order - 1; ++i)\r\n polesTrimmed.pop(); // remove last degree poles\r\n if (weightsTrimmed) {\r\n for (let i = 0; i < data.params.order - 1; ++i)\r\n weightsTrimmed.pop(); // remove last degree weights\r\n }\r\n data.params.numPoles -= data.params.order - 1;\r\n data.params.closed = true;\r\n break;\r\n }\r\n }\r\n\r\n // always add extraneous knots\r\n if (!knotsCorrected)\r\n data.params.knots = KnotVector.copyKnots(data.params.knots, data.params.order - 1, true, data.params.wrapMode);\r\n\r\n convertBSplineCurveDataArrays(data, options);\r\n return true;\r\n }\r\n\r\n /**\r\n * Prepare data from a B-spline surface for export.\r\n * * adds classic extraneous knot at start and end of knot vectors\r\n * * re-closes periodic data based on BSplineWrapMode\r\n * @param data updated in place. If poles/weights/knots are updated, their respective arrays are reallocated.\r\n * @param options output specifications\r\n * @returns whether data was successfully prepared\r\n */\r\n public static prepareBSplineSurfaceData(data: BSplineSurfaceData, options?: BSplineDataOptions): boolean {\r\n let polesTrimmed: number[][][] | undefined;\r\n let weightsTrimmed: number[][] | undefined;\r\n let uKnotsCorrected: number[] | Float64Array | undefined;\r\n let vKnotsCorrected: number[] | Float64Array | undefined;\r\n data.uParams.closed = data.vParams.closed = undefined;\r\n\r\n switch (data.uParams.wrapMode) {\r\n case BSplineWrapMode.OpenByRemovingKnots: {\r\n // add legacy periodic and extraneous knots, poles untouched\r\n uKnotsCorrected = this.closeLegacyPeriodicKnots(data.uParams.knots, data.uParams.order, options, data.uParams.wrapMode);\r\n if (undefined === uKnotsCorrected)\r\n return false; // invalid input\r\n data.uParams.knots = uKnotsCorrected;\r\n data.uParams.closed = true;\r\n break;\r\n }\r\n case BSplineWrapMode.OpenByAddingControlPoints: {\r\n // unwrap poles, knots untouched\r\n if (!polesTrimmed) {\r\n const arrays = copyBSplineSurfaceDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesTrimmed = arrays.poles;\r\n data.weights = weightsTrimmed = arrays.weights;\r\n }\r\n for (let i = 0; i < data.vParams.numPoles; ++i) // #rows\r\n for (let j = 0; j < data.uParams.order - 1; ++j)\r\n polesTrimmed[i].pop(); // remove last degreeU poles from each row\r\n if (weightsTrimmed) {\r\n for (let i = 0; i < data.vParams.numPoles; ++i) // #rows\r\n for (let j = 0; j < data.uParams.order - 1; ++j)\r\n weightsTrimmed[i].pop(); // remove last degreeU weights from each row\r\n }\r\n data.uParams.numPoles -= data.uParams.order - 1;\r\n data.uParams.closed = true;\r\n break;\r\n }\r\n }\r\n\r\n switch (data.vParams.wrapMode) {\r\n case BSplineWrapMode.OpenByRemovingKnots: {\r\n // add legacy periodic and extraneous knots, poles untouched\r\n vKnotsCorrected = this.closeLegacyPeriodicKnots(data.vParams.knots, data.vParams.order, options, data.vParams.wrapMode);\r\n if (undefined === vKnotsCorrected)\r\n return false; // invalid input\r\n data.vParams.knots = vKnotsCorrected;\r\n data.vParams.closed = true;\r\n break;\r\n }\r\n case BSplineWrapMode.OpenByAddingControlPoints: {\r\n // unwrap poles, knots untouched\r\n if (!polesTrimmed) {\r\n const arrays = copyBSplineSurfaceDataPoles(data);\r\n if (undefined === arrays.poles)\r\n return false; // invalid input\r\n data.poles = polesTrimmed = arrays.poles;\r\n data.weights = weightsTrimmed = arrays.weights;\r\n }\r\n for (let i = 0; i < data.vParams.order - 1; ++i)\r\n polesTrimmed.pop(); // remove last degreeV rows of poles\r\n if (weightsTrimmed) {\r\n for (let i = 0; i < data.vParams.order - 1; ++i)\r\n weightsTrimmed.pop(); // remove last degreeV rows of weights\r\n }\r\n data.vParams.numPoles -= data.vParams.order - 1;\r\n data.vParams.closed = true;\r\n break;\r\n }\r\n }\r\n\r\n // always add extraneous knots\r\n if (!uKnotsCorrected)\r\n data.uParams.knots = KnotVector.copyKnots(data.uParams.knots, data.uParams.order - 1, true, data.uParams.wrapMode);\r\n if (!vKnotsCorrected)\r\n data.vParams.knots = KnotVector.copyKnots(data.vParams.knots, data.vParams.order - 1, true, data.vParams.wrapMode);\r\n\r\n convertBSplineSurfaceDataArrays(data, options);\r\n return true;\r\n }\r\n }\r\n}\r\n"]}
@@ -80,9 +80,11 @@ export declare class SweepContour {
80
80
  announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void;
81
81
  /**
82
82
  * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.
83
- * @param sweepVector the sweep direction (does not have to be perpendicular to the contour). If undefined, the sweep direction is perpendicular to the plane of the contour, and no caps are constructed.
83
+ * @param sweepVector the sweep direction and distance:
84
+ * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).
85
+ * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.
84
86
  * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.
85
- * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`. That is, sweepVector indicates both direction and distance.
87
+ * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.
86
88
  * @param options how to stroke the contour
87
89
  * @returns clipper defined by faceting then sweeping the contour region
88
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SweepContour.d.ts","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE;;;;GAIG;AACH,qBAAa,YAAY;IACvB,0EAA0E;IACnE,MAAM,EAAE,eAAe,CAAC;IAC/B,yEAAyE;IAClE,YAAY,EAAE,SAAS,CAAC;IAC/B,yCAAyC;IAClC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IAE/B,aAAa;IACb,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO;IAaP;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAOzG;;;;OAIG;WACW,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAqBtH;;;OAGG;WACW,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;IAQzF,uCAAuC;IAChC,SAAS,IAAI,eAAe;IACnC;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAgBzD,2BAA2B;IACpB,KAAK,IAAI,YAAY;IAG5B,kCAAkC;IAC3B,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAMvE,yDAAyD;IAClD,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAezC,yDAAyD;IAClD,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAStD,oCAAoC;IACpC,IAAW,SAAS,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;OAIG;IACI,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAcjD;;;OAGG;IACI,WAAW;IAGlB;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAKnF;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKjG;;;;;;;OAOG;IACI,iCAAiC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAE,OAAe,EAAE,IAAI,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,0BAA0B,GAAG,SAAS;CA8ChL"}
1
+ {"version":3,"file":"SweepContour.d.ts","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAa,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAW,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE;;;;GAIG;AACH,qBAAa,YAAY;IACvB,0EAA0E;IACnE,MAAM,EAAE,eAAe,CAAC;IAC/B,yEAAyE;IAClE,YAAY,EAAE,SAAS,CAAC;IAC/B,yCAAyC;IAClC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IAE/B,aAAa;IACb,OAAO,CAAC,UAAU,CAAC,CAAkB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAkB;IAElC,OAAO;IAaP;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAOzG;;;;OAIG;WACW,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IAqBtH;;;OAGG;WACW,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;IAQzF,uCAAuC;IAChC,SAAS,IAAI,eAAe;IACnC;;;OAGG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAgBzD,2BAA2B;IACpB,KAAK,IAAI,YAAY;IAG5B,kCAAkC;IAC3B,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS;IAMvE,yDAAyD;IAClD,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAezC,yDAAyD;IAClD,gBAAgB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAStD,oCAAoC;IACpC,IAAW,SAAS,IAAI,eAAe,GAAG,SAAS,CAElD;IAED;;;;OAIG;IACI,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAcjD;;;OAGG;IACI,WAAW;IAGlB;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;IAKnF;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKjG;;;;;;;;;OASG;IACI,iCAAiC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAE,OAAe,EAAE,IAAI,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,0BAA0B,GAAG,SAAS;CA8ChL"}
@@ -194,9 +194,11 @@ export class SweepContour {
194
194
  }
195
195
  /**
196
196
  * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.
197
- * @param sweepVector the sweep direction (does not have to be perpendicular to the contour). If undefined, the sweep direction is perpendicular to the plane of the contour, and no caps are constructed.
197
+ * @param sweepVector the sweep direction and distance:
198
+ * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).
199
+ * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.
198
200
  * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.
199
- * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`. That is, sweepVector indicates both direction and distance.
201
+ * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.
200
202
  * @param options how to stroke the contour
201
203
  * @returns clipper defined by faceting then sweeping the contour region
202
204
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SweepContour.js","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Solid\r\n */\r\n\r\nimport { ClipPlane } from \"../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\r\nimport { AnyCurve, AnyRegion } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { RegionOps } from \"../curve/RegionOps\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\n\r\n/**\r\n * Sweepable planar contour with Transform for local to world interaction.\r\n * * The surface/solid classes `LinearSweep`, `RotationalSweep`, `RuledSweep` use this for their swept contours.\r\n * @public\r\n */\r\nexport class SweepContour {\r\n /** The underlying curve collection, in its world coordinates position. */\r\n public curves: CurveCollection;\r\n /** coordinate frame that in which the curves are all in the xy plane. */\r\n public localToWorld: Transform;\r\n /** Axis used only in rotational case. */\r\n public axis: Ray3d | undefined;\r\n\r\n /** caches */\r\n private _xyStrokes?: CurveCollection;\r\n private _facets?: IndexedPolyface;\r\n\r\n private constructor(contour: AnyCurve, map: Transform, axis: Ray3d | undefined) {\r\n if (contour instanceof CurvePrimitive) {\r\n // this.curves is a CurveCollection (not AnyCurve) so that contour type determines closure.\r\n // This is the only time we detect CurvePrimitive closure and wrap as a relevant CurveChain.\r\n // Note that we are ASSUMING closure means planar here. This is potentially problematic.\r\n const primitive = contour;\r\n contour = contour.startPoint().isAlmostEqual(contour.endPoint()) ? new Loop() : new Path();\r\n contour.tryAddChild(primitive);\r\n }\r\n this.curves = contour;\r\n this.localToWorld = map;\r\n this.axis = axis;\r\n }\r\n /** Create for linear sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForLinearSweep(contour: AnyCurve, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, contour);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, undefined);\r\n }\r\n return undefined;\r\n }\r\n /** Create for linear sweep.\r\n * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in, parity logic is employed.\r\n * For best results, all points should be coplanar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForPolygon(points: MultiLineStringDataVariant, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, points);\r\n if (localToWorld) {\r\n if (defaultNormal !== undefined) {\r\n if (localToWorld.matrix.dotColumnZ(defaultNormal))\r\n localToWorld.matrix.scaleColumnsInPlace(1.0, -1.0, -1.0);\r\n }\r\n const linestrings = LineString3d.createArrayOfLineString3d(points);\r\n const loops = [];\r\n for (const ls of linestrings) {\r\n ls.addClosurePoint();\r\n loops.push(Loop.create(ls));\r\n }\r\n if (loops.length === 1) {\r\n return new SweepContour(loops[0], localToWorld, undefined);\r\n } else if (loops.length > 1) {\r\n return new SweepContour(ParityRegion.createLoops(loops), localToWorld, undefined);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Create for rotational sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\r\n * @param axis rotation axis\r\n */\r\n public static createForRotation(contour: AnyCurve, axis: Ray3d): SweepContour | undefined {\r\n // createRightHandedFrame -- the axis is a last-gasp resolver for in-plane vectors.\r\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, contour, axis);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, axis.clone());\r\n }\r\n return undefined;\r\n }\r\n /** Return (Reference to) the curves */\r\n public getCurves(): CurveCollection { return this.curves; }\r\n /**\r\n * Apply `transform` to the curves, axis.\r\n * * The local to world frame is reconstructed for the transformed curves.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (this.curves.tryTransformInPlace(transform)) {\r\n if (this.axis)\r\n this.axis.transformInPlace(transform);\r\n\r\n const localToWorld = this.axis !== undefined\r\n ? FrameBuilder.createRightHandedFrame(undefined, this.curves, this.axis)\r\n : FrameBuilder.createRightHandedFrame(undefined, this.curves);\r\n if (localToWorld) {\r\n this.localToWorld.setFrom(localToWorld);\r\n this._xyStrokes = undefined;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return a deep clone. */\r\n public clone(): SweepContour {\r\n return new SweepContour(this.curves.clone(), this.localToWorld.clone(), this.axis);\r\n }\r\n /** Return a transformed clone. */\r\n public cloneTransformed(transform: Transform): SweepContour | undefined {\r\n const newContour = this.clone();\r\n if (newContour.tryTransformInPlace(transform))\r\n return newContour;\r\n return undefined;\r\n }\r\n /** Test for near equality of curves, frame, and axis. */\r\n public isAlmostEqual(other: any): boolean {\r\n if (! (other instanceof SweepContour))\r\n return false;\r\n if (!this.curves.isAlmostEqual(other.curves))\r\n return false;\r\n if (!this.localToWorld.isAlmostEqual(other.localToWorld))\r\n return false;\r\n if (this.axis && other.axis) {\r\n if (!this.axis.isAlmostEqual(other.axis))\r\n return false;\r\n } else if (this.axis || other.axis)\r\n return false;\r\n return true;\r\n }\r\n\r\n /** Recompute the local strokes cache for this contour */\r\n public computeXYStrokes(options?: StrokeOptions): void {\r\n this._xyStrokes = undefined;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (worldToLocal) {\r\n const strokes = this.curves.cloneStroked(options);\r\n if (strokes.tryTransformInPlace(worldToLocal))\r\n this._xyStrokes = strokes;\r\n }\r\n }\r\n /** Return cached contour strokes */\r\n public get xyStrokes(): CurveCollection | undefined {\r\n return this._xyStrokes;\r\n }\r\n\r\n /**\r\n * Build the (cached) internal facets for the contour.\r\n * @param options primarily how to stroke the contour, but also how to facet it.\r\n * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar triangles are removed to return maximally convex facets.\r\n */\r\n public buildFacets(options?: StrokeOptions): void {\r\n if (this._facets)\r\n return;\r\n if (!this.curves.isAnyRegion())\r\n return;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (!worldToLocal)\r\n return;\r\n const localRegion = this.curves.cloneTransformed(worldToLocal) as AnyRegion | undefined;\r\n if (!localRegion)\r\n return;\r\n if (this._facets = RegionOps.facetRegionXY(localRegion, options))\r\n this._facets.tryTransformInPlace(this.localToWorld);\r\n }\r\n /**\r\n * Delete facet cache.\r\n * * This protects against PolyfaceBuilder reusing facets constructed with different options settings.\r\n */\r\n public purgeFacets() {\r\n this._facets = undefined;\r\n }\r\n /** Emit facets to a builder.\r\n * This method may cache and reuse facets over multiple calls.\r\n */\r\n public emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform) {\r\n this.buildFacets(builder.options);\r\n if (this._facets)\r\n builder.addIndexedPolyface(this._facets, reverse, transform);\r\n }\r\n /** Emit facets to a function\r\n * This method may cache and reuse facets over multiple calls.\r\n * @param announce callback to receive the facet set\r\n * @param options how to stroke the contour\r\n */\r\n public announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void {\r\n this.buildFacets(options);\r\n if (this._facets)\r\n announce(this._facets);\r\n }\r\n /**\r\n * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.\r\n * @param sweepVector the sweep direction (does not have to be perpendicular to the contour). If undefined, the sweep direction is perpendicular to the plane of the contour, and no caps are constructed.\r\n * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.\r\n * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`. That is, sweepVector indicates both direction and distance.\r\n * @param options how to stroke the contour\r\n * @returns clipper defined by faceting then sweeping the contour region\r\n */\r\n public sweepToUnionOfConvexClipPlaneSets(sweepVector?: Vector3d, cap0: boolean = false, cap1: boolean = false, options?: StrokeOptions): UnionOfConvexClipPlaneSets | undefined {\r\n if (!options)\r\n options = StrokeOptions.createForFacets();\r\n if (!sweepVector) {\r\n cap0 = cap1 = false;\r\n sweepVector = this.localToWorld.matrix.columnZ();\r\n }\r\n options.maximizeConvexFacets = true; // produce fewer ConvexClipPlaneSets\r\n // It's a trip around the barn, but it's easy to make a polyface and scan it . . .\r\n this.buildFacets(options);\r\n const facets = this._facets;\r\n if (facets) {\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n const result = UnionOfConvexClipPlaneSets.createEmpty();\r\n const visitor = facets.createVisitor(1);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n const numEdges = visitor.point.length - 1;\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n for (let i = 0; i < numEdges; i++) {\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\r\n const plane = ClipPlane.createEdgeAndUpVector(point1, point0, sweepVector);\r\n const visible = visitor.edgeVisible[i];\r\n plane?.setFlags(!visible, !visible);\r\n clipper.addPlaneToConvexSet(plane);\r\n }\r\n result.addConvexSet(clipper);\r\n }\r\n if (cap0 || cap1) {\r\n const zVector = this.localToWorld.matrix.columnZ();\r\n const plane0Origin = this.localToWorld.getOrigin();\r\n const plane1Origin = plane0Origin.plus(sweepVector);\r\n const inwardNormal0 = zVector.clone();\r\n const inwardNormal1 = zVector.negate();\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n if (cap0)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal0, plane0Origin));\r\n if (cap1)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal1, plane1Origin));\r\n result.addConvexSet(clipper);\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SweepContour.js","sourceRoot":"","sources":["../../../src/solid/SweepContour.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Solid\r\n */\r\n\r\nimport { ClipPlane } from \"../clipping/ClipPlane\";\r\nimport { ConvexClipPlaneSet } from \"../clipping/ConvexClipPlaneSet\";\r\nimport { UnionOfConvexClipPlaneSets } from \"../clipping/UnionOfConvexClipPlaneSets\";\r\nimport { AnyCurve, AnyRegion } from \"../curve/CurveTypes\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Loop } from \"../curve/Loop\";\r\nimport { ParityRegion } from \"../curve/ParityRegion\";\r\nimport { Path } from \"../curve/Path\";\r\nimport { RegionOps } from \"../curve/RegionOps\";\r\nimport { StrokeOptions } from \"../curve/StrokeOptions\";\r\nimport { FrameBuilder } from \"../geometry3d/FrameBuilder\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { IndexedPolyface } from \"../polyface/Polyface\";\r\nimport { PolyfaceBuilder } from \"../polyface/PolyfaceBuilder\";\r\nimport { MultiLineStringDataVariant } from \"../topology/Triangulation\";\r\n\r\n/**\r\n * Sweepable planar contour with Transform for local to world interaction.\r\n * * The surface/solid classes `LinearSweep`, `RotationalSweep`, `RuledSweep` use this for their swept contours.\r\n * @public\r\n */\r\nexport class SweepContour {\r\n /** The underlying curve collection, in its world coordinates position. */\r\n public curves: CurveCollection;\r\n /** coordinate frame that in which the curves are all in the xy plane. */\r\n public localToWorld: Transform;\r\n /** Axis used only in rotational case. */\r\n public axis: Ray3d | undefined;\r\n\r\n /** caches */\r\n private _xyStrokes?: CurveCollection;\r\n private _facets?: IndexedPolyface;\r\n\r\n private constructor(contour: AnyCurve, map: Transform, axis: Ray3d | undefined) {\r\n if (contour instanceof CurvePrimitive) {\r\n // this.curves is a CurveCollection (not AnyCurve) so that contour type determines closure.\r\n // This is the only time we detect CurvePrimitive closure and wrap as a relevant CurveChain.\r\n // Note that we are ASSUMING closure means planar here. This is potentially problematic.\r\n const primitive = contour;\r\n contour = contour.startPoint().isAlmostEqual(contour.endPoint()) ? new Loop() : new Path();\r\n contour.tryAddChild(primitive);\r\n }\r\n this.curves = contour;\r\n this.localToWorld = map;\r\n this.axis = axis;\r\n }\r\n /** Create for linear sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForLinearSweep(contour: AnyCurve, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, contour);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, undefined);\r\n }\r\n return undefined;\r\n }\r\n /** Create for linear sweep.\r\n * @param points polygon to sweep, CAPTURED as a Loop. Closure point is optional. If multiple polygons are passed in, parity logic is employed.\r\n * For best results, all points should be coplanar.\r\n * @param defaultNormal optional default normal for guiding coordinate frame setup.\r\n */\r\n public static createForPolygon(points: MultiLineStringDataVariant, defaultNormal?: Vector3d): SweepContour | undefined {\r\n const localToWorld = FrameBuilder.createRightHandedFrame(defaultNormal, points);\r\n if (localToWorld) {\r\n if (defaultNormal !== undefined) {\r\n if (localToWorld.matrix.dotColumnZ(defaultNormal))\r\n localToWorld.matrix.scaleColumnsInPlace(1.0, -1.0, -1.0);\r\n }\r\n const linestrings = LineString3d.createArrayOfLineString3d(points);\r\n const loops = [];\r\n for (const ls of linestrings) {\r\n ls.addClosurePoint();\r\n loops.push(Loop.create(ls));\r\n }\r\n if (loops.length === 1) {\r\n return new SweepContour(loops[0], localToWorld, undefined);\r\n } else if (loops.length > 1) {\r\n return new SweepContour(ParityRegion.createLoops(loops), localToWorld, undefined);\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Create for rotational sweep.\r\n * @param contour curve to sweep, CAPTURED. For best results, contour should be planar.\r\n * @param axis rotation axis\r\n */\r\n public static createForRotation(contour: AnyCurve, axis: Ray3d): SweepContour | undefined {\r\n // createRightHandedFrame -- the axis is a last-gasp resolver for in-plane vectors.\r\n const localToWorld = FrameBuilder.createRightHandedFrame(undefined, contour, axis);\r\n if (localToWorld) {\r\n return new SweepContour(contour, localToWorld, axis.clone());\r\n }\r\n return undefined;\r\n }\r\n /** Return (Reference to) the curves */\r\n public getCurves(): CurveCollection { return this.curves; }\r\n /**\r\n * Apply `transform` to the curves, axis.\r\n * * The local to world frame is reconstructed for the transformed curves.\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n if (this.curves.tryTransformInPlace(transform)) {\r\n if (this.axis)\r\n this.axis.transformInPlace(transform);\r\n\r\n const localToWorld = this.axis !== undefined\r\n ? FrameBuilder.createRightHandedFrame(undefined, this.curves, this.axis)\r\n : FrameBuilder.createRightHandedFrame(undefined, this.curves);\r\n if (localToWorld) {\r\n this.localToWorld.setFrom(localToWorld);\r\n this._xyStrokes = undefined;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return a deep clone. */\r\n public clone(): SweepContour {\r\n return new SweepContour(this.curves.clone(), this.localToWorld.clone(), this.axis);\r\n }\r\n /** Return a transformed clone. */\r\n public cloneTransformed(transform: Transform): SweepContour | undefined {\r\n const newContour = this.clone();\r\n if (newContour.tryTransformInPlace(transform))\r\n return newContour;\r\n return undefined;\r\n }\r\n /** Test for near equality of curves, frame, and axis. */\r\n public isAlmostEqual(other: any): boolean {\r\n if (! (other instanceof SweepContour))\r\n return false;\r\n if (!this.curves.isAlmostEqual(other.curves))\r\n return false;\r\n if (!this.localToWorld.isAlmostEqual(other.localToWorld))\r\n return false;\r\n if (this.axis && other.axis) {\r\n if (!this.axis.isAlmostEqual(other.axis))\r\n return false;\r\n } else if (this.axis || other.axis)\r\n return false;\r\n return true;\r\n }\r\n\r\n /** Recompute the local strokes cache for this contour */\r\n public computeXYStrokes(options?: StrokeOptions): void {\r\n this._xyStrokes = undefined;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (worldToLocal) {\r\n const strokes = this.curves.cloneStroked(options);\r\n if (strokes.tryTransformInPlace(worldToLocal))\r\n this._xyStrokes = strokes;\r\n }\r\n }\r\n /** Return cached contour strokes */\r\n public get xyStrokes(): CurveCollection | undefined {\r\n return this._xyStrokes;\r\n }\r\n\r\n /**\r\n * Build the (cached) internal facets for the contour.\r\n * @param options primarily how to stroke the contour, but also how to facet it.\r\n * * By default, a triangulation is computed, but if `options.maximizeConvexFacets === true`, edges between coplanar triangles are removed to return maximally convex facets.\r\n */\r\n public buildFacets(options?: StrokeOptions): void {\r\n if (this._facets)\r\n return;\r\n if (!this.curves.isAnyRegion())\r\n return;\r\n const worldToLocal = this.localToWorld.inverse();\r\n if (!worldToLocal)\r\n return;\r\n const localRegion = this.curves.cloneTransformed(worldToLocal) as AnyRegion | undefined;\r\n if (!localRegion)\r\n return;\r\n if (this._facets = RegionOps.facetRegionXY(localRegion, options))\r\n this._facets.tryTransformInPlace(this.localToWorld);\r\n }\r\n /**\r\n * Delete facet cache.\r\n * * This protects against PolyfaceBuilder reusing facets constructed with different options settings.\r\n */\r\n public purgeFacets() {\r\n this._facets = undefined;\r\n }\r\n /** Emit facets to a builder.\r\n * This method may cache and reuse facets over multiple calls.\r\n */\r\n public emitFacets(builder: PolyfaceBuilder, reverse: boolean, transform?: Transform) {\r\n this.buildFacets(builder.options);\r\n if (this._facets)\r\n builder.addIndexedPolyface(this._facets, reverse, transform);\r\n }\r\n /** Emit facets to a function\r\n * This method may cache and reuse facets over multiple calls.\r\n * @param announce callback to receive the facet set\r\n * @param options how to stroke the contour\r\n */\r\n public announceFacets(announce: (facets: IndexedPolyface) => void, options?: StrokeOptions): void {\r\n this.buildFacets(options);\r\n if (this._facets)\r\n announce(this._facets);\r\n }\r\n /**\r\n * Create a UnionOfConvexClipPlaneSets that clips to the swept faceted contour region.\r\n * @param sweepVector the sweep direction and distance:\r\n * * If undefined, the sweep direction is along the contour normal and no caps are constructed (the sweep is infinite in both directions).\r\n * * If defined, the returned clipper is inverted if and only if sweepVector is in the opposite half-space as the computed contour normal.\r\n * @param cap0 construct a clip plane equal to the contour plane. Note that `sweepVector` must be defined.\r\n * @param cap1 construct a clip plane parallel to the contour plane at the end of `sweepVector`.\r\n * @param options how to stroke the contour\r\n * @returns clipper defined by faceting then sweeping the contour region\r\n */\r\n public sweepToUnionOfConvexClipPlaneSets(sweepVector?: Vector3d, cap0: boolean = false, cap1: boolean = false, options?: StrokeOptions): UnionOfConvexClipPlaneSets | undefined {\r\n if (!options)\r\n options = StrokeOptions.createForFacets();\r\n if (!sweepVector) {\r\n cap0 = cap1 = false;\r\n sweepVector = this.localToWorld.matrix.columnZ();\r\n }\r\n options.maximizeConvexFacets = true; // produce fewer ConvexClipPlaneSets\r\n // It's a trip around the barn, but it's easy to make a polyface and scan it . . .\r\n this.buildFacets(options);\r\n const facets = this._facets;\r\n if (facets) {\r\n const point0 = Point3d.create();\r\n const point1 = Point3d.create();\r\n const result = UnionOfConvexClipPlaneSets.createEmpty();\r\n const visitor = facets.createVisitor(1);\r\n for (visitor.reset(); visitor.moveToNextFacet();) {\r\n const numEdges = visitor.point.length - 1;\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n for (let i = 0; i < numEdges; i++) {\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i, point0);\r\n visitor.point.getPoint3dAtUncheckedPointIndex(i + 1, point1);\r\n const plane = ClipPlane.createEdgeAndUpVector(point1, point0, sweepVector);\r\n const visible = visitor.edgeVisible[i];\r\n plane?.setFlags(!visible, !visible);\r\n clipper.addPlaneToConvexSet(plane);\r\n }\r\n result.addConvexSet(clipper);\r\n }\r\n if (cap0 || cap1) {\r\n const zVector = this.localToWorld.matrix.columnZ();\r\n const plane0Origin = this.localToWorld.getOrigin();\r\n const plane1Origin = plane0Origin.plus(sweepVector);\r\n const inwardNormal0 = zVector.clone();\r\n const inwardNormal1 = zVector.negate();\r\n const clipper = ConvexClipPlaneSet.createEmpty();\r\n if (cap0)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal0, plane0Origin));\r\n if (cap1)\r\n clipper.addPlaneToConvexSet(ClipPlane.createNormalAndPoint(inwardNormal1, plane1Origin));\r\n result.addConvexSet(clipper);\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-geometry",
3
- "version": "4.3.0-dev.2",
3
+ "version": "4.3.0-dev.20",
4
4
  "description": "iTwin.js Core Geometry library",
5
5
  "main": "lib/cjs/core-geometry.js",
6
6
  "module": "lib/esm/core-geometry.js",
@@ -35,11 +35,11 @@
35
35
  "nyc": "^15.1.0",
36
36
  "rimraf": "^3.0.2",
37
37
  "typescript": "~5.0.2",
38
- "@itwin/build-tools": "4.3.0-dev.2"
38
+ "@itwin/build-tools": "4.3.0-dev.20"
39
39
  },
40
40
  "dependencies": {
41
41
  "flatbuffers": "~1.12.0",
42
- "@itwin/core-bentley": "4.3.0-dev.2"
42
+ "@itwin/core-bentley": "4.3.0-dev.20"
43
43
  },
44
44
  "nyc": {
45
45
  "extends": "./node_modules/@itwin/build-tools/.nycrc",