@itwin/core-geometry 4.1.0-dev.8 → 4.1.0-dev.80

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 (896) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  7. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js +2 -2
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  13. package/lib/cjs/bspline/BSplineSurface.js +1 -1
  14. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  15. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  17. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  18. package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
  19. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  20. package/lib/cjs/bspline/BezierCurveBase.js +2 -2
  21. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  22. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  23. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  24. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  25. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
  26. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  27. package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
  28. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  29. package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
  30. package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
  31. package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
  32. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  33. package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
  34. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  35. package/lib/cjs/clipping/BooleanClipNode.js +11 -11
  36. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  37. package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
  38. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  39. package/lib/cjs/clipping/ClipPlane.js +105 -86
  40. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  41. package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
  42. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  43. package/lib/cjs/clipping/ClipPrimitive.js +112 -54
  44. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  45. package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
  46. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  47. package/lib/cjs/clipping/ClipUtils.js +33 -29
  48. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  49. package/lib/cjs/clipping/ClipVector.d.ts +39 -25
  50. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  51. package/lib/cjs/clipping/ClipVector.js +35 -23
  52. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  53. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
  54. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  55. package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
  56. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  57. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  58. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  60. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  62. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  63. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  64. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  65. package/lib/cjs/core-geometry.d.ts +5 -1
  66. package/lib/cjs/core-geometry.d.ts.map +1 -1
  67. package/lib/cjs/core-geometry.js +5 -1
  68. package/lib/cjs/core-geometry.js.map +1 -1
  69. package/lib/cjs/curve/Arc3d.d.ts +4 -3
  70. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  71. package/lib/cjs/curve/Arc3d.js +7 -5
  72. package/lib/cjs/curve/Arc3d.js.map +1 -1
  73. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  74. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  75. package/lib/cjs/curve/CurveChain.js.map +1 -1
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  78. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
  79. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  80. package/lib/cjs/curve/CurveCollection.d.ts +36 -26
  81. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  82. package/lib/cjs/curve/CurveCollection.js +46 -39
  83. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  84. package/lib/cjs/curve/CurveCurve.d.ts +6 -2
  85. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  86. package/lib/cjs/curve/CurveCurve.js +13 -9
  87. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  88. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts +74 -68
  89. package/lib/cjs/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
  90. package/lib/cjs/curve/CurveCurveCloseApproachXY.js +100 -108
  91. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
  92. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts +46 -48
  93. package/lib/cjs/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurveCurveIntersectXY.js +72 -61
  95. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  96. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts +32 -38
  97. package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
  98. package/lib/cjs/curve/CurveCurveIntersectXYZ.js +86 -97
  99. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
  100. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  101. package/lib/cjs/curve/CurveFactory.d.ts +67 -3
  102. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  103. package/lib/cjs/curve/CurveFactory.js +75 -7
  104. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  105. package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
  106. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  107. package/lib/cjs/curve/CurveLocationDetail.js +9 -7
  108. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  109. package/lib/cjs/curve/CurveOps.d.ts +77 -0
  110. package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
  111. package/lib/cjs/curve/CurveOps.js +160 -0
  112. package/lib/cjs/curve/CurveOps.js.map +1 -0
  113. package/lib/cjs/curve/CurvePrimitive.d.ts +26 -18
  114. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  115. package/lib/cjs/curve/CurvePrimitive.js +4 -3
  116. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  117. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  118. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  119. package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
  120. package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
  121. package/lib/cjs/curve/GeometryQuery.js +2 -2
  122. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  123. package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
  124. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  125. package/lib/cjs/curve/LineSegment3d.js +6 -6
  126. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  127. package/lib/cjs/curve/LineString3d.d.ts +2 -2
  128. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  129. package/lib/cjs/curve/LineString3d.js +3 -3
  130. package/lib/cjs/curve/LineString3d.js.map +1 -1
  131. package/lib/cjs/curve/Loop.d.ts +7 -5
  132. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  133. package/lib/cjs/curve/Loop.js +18 -6
  134. package/lib/cjs/curve/Loop.js.map +1 -1
  135. package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
  136. package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
  137. package/lib/cjs/curve/OffsetOptions.js +166 -0
  138. package/lib/cjs/curve/OffsetOptions.js.map +1 -0
  139. package/lib/cjs/curve/ParityRegion.d.ts +7 -7
  140. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  141. package/lib/cjs/curve/ParityRegion.js +19 -11
  142. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  143. package/lib/cjs/curve/Path.d.ts +6 -6
  144. package/lib/cjs/curve/Path.d.ts.map +1 -1
  145. package/lib/cjs/curve/Path.js +15 -9
  146. package/lib/cjs/curve/Path.js.map +1 -1
  147. package/lib/cjs/curve/PointString3d.js.map +1 -1
  148. package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
  149. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  150. package/lib/cjs/curve/ProxyCurve.js +7 -7
  151. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  152. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  153. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  154. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  155. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  156. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  157. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  158. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  159. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  160. package/lib/cjs/curve/RegionOps.d.ts +76 -56
  161. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  162. package/lib/cjs/curve/RegionOps.js +83 -60
  163. package/lib/cjs/curve/RegionOps.js.map +1 -1
  164. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
  165. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  166. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  167. package/lib/cjs/curve/StrokeOptions.js +6 -2
  168. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  169. package/lib/cjs/curve/UnionRegion.d.ts +6 -5
  170. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  171. package/lib/cjs/curve/UnionRegion.js +17 -8
  172. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  173. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  174. package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  175. package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  176. package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  177. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  178. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  179. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  180. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  181. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  182. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  183. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  184. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
  185. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  186. package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
  187. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  188. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  189. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  190. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
  191. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  192. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  193. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  194. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  195. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  196. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  197. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  198. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  199. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
  200. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  201. package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  202. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
  203. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  204. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  205. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  206. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  207. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  208. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  209. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  210. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  211. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
  212. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  213. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  214. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  215. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  216. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  217. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  218. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  219. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
  220. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  221. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
  222. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  223. package/lib/cjs/geometry3d/Angle.d.ts +9 -0
  224. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  225. package/lib/cjs/geometry3d/Angle.js +13 -0
  226. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  227. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  228. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  229. package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
  230. package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
  232. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  233. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  234. package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
  235. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  236. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  237. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  238. package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
  239. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  240. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  241. package/lib/cjs/geometry3d/GeometryHandler.d.ts +103 -97
  242. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  243. package/lib/cjs/geometry3d/GeometryHandler.js +247 -124
  244. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  245. package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  246. package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
  247. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  248. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  249. package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
  250. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  251. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  252. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  253. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  254. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  255. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  256. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  257. package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
  258. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  259. package/lib/cjs/geometry3d/Matrix3d.js +32 -5
  260. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  261. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  262. package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
  263. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  264. package/lib/cjs/geometry3d/Plane3d.js +11 -8
  265. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  266. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  267. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  268. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  269. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  270. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  271. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  272. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  273. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  274. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  275. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
  276. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  277. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
  278. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  279. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  280. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
  281. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  282. package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
  283. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  284. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  285. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  286. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  287. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  288. package/lib/cjs/geometry3d/PolygonOps.d.ts +6 -2
  289. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  290. package/lib/cjs/geometry3d/PolygonOps.js +31 -22
  291. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  292. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  293. package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
  294. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  295. package/lib/cjs/geometry3d/PolylineOps.js +55 -0
  296. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  297. package/lib/cjs/geometry3d/Range.d.ts +134 -94
  298. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  299. package/lib/cjs/geometry3d/Range.js +297 -145
  300. package/lib/cjs/geometry3d/Range.js.map +1 -1
  301. package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
  302. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
  303. package/lib/cjs/geometry3d/Ray2d.js +146 -0
  304. package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
  305. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  306. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  307. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  308. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  309. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  310. package/lib/cjs/geometry3d/Transform.d.ts +10 -3
  311. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  312. package/lib/cjs/geometry3d/Transform.js +18 -6
  313. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  314. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  315. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  316. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  317. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  318. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  319. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  320. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  321. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  322. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  323. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  324. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  325. package/lib/cjs/numerics/Complex.js.map +1 -1
  326. package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
  327. package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
  328. package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
  329. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  330. package/lib/cjs/numerics/Newton.js.map +1 -1
  331. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  332. package/lib/cjs/numerics/PolarData.js.map +1 -1
  333. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  334. package/lib/cjs/numerics/Polynomials.js +0 -2
  335. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  336. package/lib/cjs/numerics/Quadrature.js +5 -5
  337. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  338. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  339. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  340. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  341. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  342. package/lib/cjs/polyface/AuxData.js.map +1 -1
  343. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  344. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  345. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  346. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  347. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  348. package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
  349. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  350. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  351. package/lib/cjs/polyface/Polyface.js.map +1 -1
  352. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  353. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  354. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  355. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  356. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  357. package/lib/cjs/polyface/PolyfaceQuery.d.ts +93 -14
  358. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  359. package/lib/cjs/polyface/PolyfaceQuery.js +173 -34
  360. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  361. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  362. package/lib/cjs/polyface/TaggedNumericData.js +1 -1
  363. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  364. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  365. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  366. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  367. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
  368. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
  369. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
  370. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  371. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
  372. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
  373. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
  374. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  375. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
  376. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
  377. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
  378. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  379. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  380. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
  381. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
  382. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  383. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  384. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
  385. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  386. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +104 -1
  387. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  388. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  389. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  390. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  391. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  392. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  393. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  394. package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
  395. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  396. package/lib/cjs/serialization/GeometrySamples.js +30 -0
  397. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  398. package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
  399. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  400. package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
  401. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  402. package/lib/cjs/solid/Box.js.map +1 -1
  403. package/lib/cjs/solid/Cone.js.map +1 -1
  404. package/lib/cjs/solid/LinearSweep.d.ts +2 -1
  405. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  406. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  407. package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
  408. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  409. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  410. package/lib/cjs/solid/RuledSweep.d.ts +2 -1
  411. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  412. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  413. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  414. package/lib/cjs/solid/Sphere.js.map +1 -1
  415. package/lib/cjs/solid/SweepContour.d.ts +2 -2
  416. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  417. package/lib/cjs/solid/SweepContour.js +9 -0
  418. package/lib/cjs/solid/SweepContour.js.map +1 -1
  419. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  420. package/lib/cjs/topology/ChainMerge.js +1 -1
  421. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  422. package/lib/cjs/topology/Graph.js.map +1 -1
  423. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  424. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  425. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
  426. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  427. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
  428. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  429. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  430. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  431. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  432. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  433. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  434. package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  435. package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
  436. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  437. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  438. package/lib/cjs/topology/MaskManager.js.map +1 -1
  439. package/lib/cjs/topology/Merging.js.map +1 -1
  440. package/lib/cjs/topology/RegularizeFace.js +3 -3
  441. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  442. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  443. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  444. package/lib/cjs/topology/Triangulation.js +1 -1
  445. package/lib/cjs/topology/Triangulation.js.map +1 -1
  446. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  447. package/lib/esm/Constant.js.map +1 -1
  448. package/lib/esm/Geometry.js.map +1 -1
  449. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  450. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  451. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  452. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  453. package/lib/esm/bspline/BSplineCurve.js +1 -1
  454. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  455. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  456. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  457. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  458. package/lib/esm/bspline/BSplineSurface.js +1 -1
  459. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  460. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  461. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  462. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  463. package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
  464. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  465. package/lib/esm/bspline/BezierCurveBase.js +1 -1
  466. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  467. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  468. package/lib/esm/bspline/KnotVector.js.map +1 -1
  469. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  470. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
  471. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  472. package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
  473. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  474. package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
  475. package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
  476. package/lib/esm/clipping/BooleanClipFactory.js +28 -28
  477. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  478. package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
  479. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  480. package/lib/esm/clipping/BooleanClipNode.js +11 -11
  481. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  482. package/lib/esm/clipping/ClipPlane.d.ts +73 -76
  483. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  484. package/lib/esm/clipping/ClipPlane.js +105 -86
  485. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  486. package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
  487. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  488. package/lib/esm/clipping/ClipPrimitive.js +112 -54
  489. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  490. package/lib/esm/clipping/ClipUtils.d.ts +54 -44
  491. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  492. package/lib/esm/clipping/ClipUtils.js +33 -29
  493. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  494. package/lib/esm/clipping/ClipVector.d.ts +39 -25
  495. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  496. package/lib/esm/clipping/ClipVector.js +35 -23
  497. package/lib/esm/clipping/ClipVector.js.map +1 -1
  498. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
  499. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  500. package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
  501. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  502. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  503. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  504. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  505. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  506. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  507. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  508. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  509. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  510. package/lib/esm/core-geometry.d.ts +5 -1
  511. package/lib/esm/core-geometry.d.ts.map +1 -1
  512. package/lib/esm/core-geometry.js +5 -1
  513. package/lib/esm/core-geometry.js.map +1 -1
  514. package/lib/esm/curve/Arc3d.d.ts +4 -3
  515. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  516. package/lib/esm/curve/Arc3d.js +6 -4
  517. package/lib/esm/curve/Arc3d.js.map +1 -1
  518. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  519. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  520. package/lib/esm/curve/CurveChain.js.map +1 -1
  521. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  522. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  523. package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
  524. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  525. package/lib/esm/curve/CurveCollection.d.ts +36 -26
  526. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  527. package/lib/esm/curve/CurveCollection.js +46 -39
  528. package/lib/esm/curve/CurveCollection.js.map +1 -1
  529. package/lib/esm/curve/CurveCurve.d.ts +6 -2
  530. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  531. package/lib/esm/curve/CurveCurve.js +13 -9
  532. package/lib/esm/curve/CurveCurve.js.map +1 -1
  533. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts +74 -68
  534. package/lib/esm/curve/CurveCurveCloseApproachXY.d.ts.map +1 -1
  535. package/lib/esm/curve/CurveCurveCloseApproachXY.js +100 -108
  536. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
  537. package/lib/esm/curve/CurveCurveIntersectXY.d.ts +46 -48
  538. package/lib/esm/curve/CurveCurveIntersectXY.d.ts.map +1 -1
  539. package/lib/esm/curve/CurveCurveIntersectXY.js +72 -61
  540. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  541. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts +32 -38
  542. package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
  543. package/lib/esm/curve/CurveCurveIntersectXYZ.js +86 -97
  544. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
  545. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  546. package/lib/esm/curve/CurveFactory.d.ts +67 -3
  547. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  548. package/lib/esm/curve/CurveFactory.js +74 -6
  549. package/lib/esm/curve/CurveFactory.js.map +1 -1
  550. package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
  551. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  552. package/lib/esm/curve/CurveLocationDetail.js +9 -7
  553. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  554. package/lib/esm/curve/CurveOps.d.ts +77 -0
  555. package/lib/esm/curve/CurveOps.d.ts.map +1 -0
  556. package/lib/esm/curve/CurveOps.js +156 -0
  557. package/lib/esm/curve/CurveOps.js.map +1 -0
  558. package/lib/esm/curve/CurvePrimitive.d.ts +26 -18
  559. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  560. package/lib/esm/curve/CurvePrimitive.js +4 -3
  561. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  562. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  563. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  564. package/lib/esm/curve/GeometryQuery.d.ts +2 -2
  565. package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
  566. package/lib/esm/curve/GeometryQuery.js +2 -2
  567. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  568. package/lib/esm/curve/LineSegment3d.d.ts +7 -5
  569. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  570. package/lib/esm/curve/LineSegment3d.js +5 -5
  571. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  572. package/lib/esm/curve/LineString3d.d.ts +2 -2
  573. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  574. package/lib/esm/curve/LineString3d.js +2 -2
  575. package/lib/esm/curve/LineString3d.js.map +1 -1
  576. package/lib/esm/curve/Loop.d.ts +7 -5
  577. package/lib/esm/curve/Loop.d.ts.map +1 -1
  578. package/lib/esm/curve/Loop.js +18 -6
  579. package/lib/esm/curve/Loop.js.map +1 -1
  580. package/lib/esm/curve/OffsetOptions.d.ts +97 -0
  581. package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
  582. package/lib/esm/curve/OffsetOptions.js +161 -0
  583. package/lib/esm/curve/OffsetOptions.js.map +1 -0
  584. package/lib/esm/curve/ParityRegion.d.ts +7 -7
  585. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  586. package/lib/esm/curve/ParityRegion.js +19 -11
  587. package/lib/esm/curve/ParityRegion.js.map +1 -1
  588. package/lib/esm/curve/Path.d.ts +6 -6
  589. package/lib/esm/curve/Path.d.ts.map +1 -1
  590. package/lib/esm/curve/Path.js +15 -9
  591. package/lib/esm/curve/Path.js.map +1 -1
  592. package/lib/esm/curve/PointString3d.js.map +1 -1
  593. package/lib/esm/curve/ProxyCurve.d.ts +5 -7
  594. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  595. package/lib/esm/curve/ProxyCurve.js +7 -7
  596. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  597. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  598. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  599. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  600. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  601. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  602. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  603. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  604. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  605. package/lib/esm/curve/RegionOps.d.ts +76 -56
  606. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  607. package/lib/esm/curve/RegionOps.js +84 -61
  608. package/lib/esm/curve/RegionOps.js.map +1 -1
  609. package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
  610. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  611. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  612. package/lib/esm/curve/StrokeOptions.js +6 -2
  613. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  614. package/lib/esm/curve/UnionRegion.d.ts +6 -5
  615. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  616. package/lib/esm/curve/UnionRegion.js +17 -8
  617. package/lib/esm/curve/UnionRegion.js.map +1 -1
  618. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  619. package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  620. package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  621. package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  622. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  623. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  624. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  625. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  626. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  627. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  628. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  629. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
  630. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  631. package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
  632. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  633. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  634. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  635. package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
  636. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  637. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  638. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  639. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  640. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  641. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  642. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  643. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  644. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
  645. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  646. package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  647. package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
  648. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  649. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  650. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  651. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  652. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  653. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  654. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  655. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  656. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
  657. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  658. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  659. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  660. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  661. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  662. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  663. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  664. package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
  665. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  666. package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
  667. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  668. package/lib/esm/geometry3d/Angle.d.ts +9 -0
  669. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  670. package/lib/esm/geometry3d/Angle.js +13 -0
  671. package/lib/esm/geometry3d/Angle.js.map +1 -1
  672. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  673. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  674. package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
  675. package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
  676. package/lib/esm/geometry3d/BilinearPatch.js +51 -55
  677. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  678. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  679. package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
  680. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  681. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  682. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  683. package/lib/esm/geometry3d/FrameBuilder.js +13 -11
  684. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  685. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  686. package/lib/esm/geometry3d/GeometryHandler.d.ts +103 -97
  687. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  688. package/lib/esm/geometry3d/GeometryHandler.js +247 -124
  689. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  690. package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  691. package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
  692. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  693. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  694. package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
  695. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  696. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  697. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  698. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  699. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  700. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  701. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  702. package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
  703. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  704. package/lib/esm/geometry3d/Matrix3d.js +32 -5
  705. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  706. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  707. package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
  708. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  709. package/lib/esm/geometry3d/Plane3d.js +11 -8
  710. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  711. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  712. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  713. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  714. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  715. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  716. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  717. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  718. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  719. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  720. package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
  721. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  722. package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
  723. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  724. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  725. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
  726. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  727. package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
  728. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  729. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  730. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  731. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  732. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  733. package/lib/esm/geometry3d/PolygonOps.d.ts +6 -2
  734. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  735. package/lib/esm/geometry3d/PolygonOps.js +31 -22
  736. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  737. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  738. package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
  739. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  740. package/lib/esm/geometry3d/PolylineOps.js +56 -1
  741. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  742. package/lib/esm/geometry3d/Range.d.ts +134 -94
  743. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  744. package/lib/esm/geometry3d/Range.js +297 -145
  745. package/lib/esm/geometry3d/Range.js.map +1 -1
  746. package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
  747. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
  748. package/lib/esm/geometry3d/Ray2d.js +142 -0
  749. package/lib/esm/geometry3d/Ray2d.js.map +1 -0
  750. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  751. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  752. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  753. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  754. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  755. package/lib/esm/geometry3d/Transform.d.ts +10 -3
  756. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  757. package/lib/esm/geometry3d/Transform.js +18 -6
  758. package/lib/esm/geometry3d/Transform.js.map +1 -1
  759. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  760. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  761. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  762. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  763. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  764. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  765. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  766. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  767. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  768. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  769. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  770. package/lib/esm/numerics/Complex.js.map +1 -1
  771. package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
  772. package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
  773. package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
  774. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  775. package/lib/esm/numerics/Newton.js.map +1 -1
  776. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  777. package/lib/esm/numerics/PolarData.js.map +1 -1
  778. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  779. package/lib/esm/numerics/Polynomials.js +0 -2
  780. package/lib/esm/numerics/Polynomials.js.map +1 -1
  781. package/lib/esm/numerics/Quadrature.js +5 -5
  782. package/lib/esm/numerics/Quadrature.js.map +1 -1
  783. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  784. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  785. package/lib/esm/numerics/UnionFind.js.map +1 -1
  786. package/lib/esm/numerics/UsageSums.js.map +1 -1
  787. package/lib/esm/polyface/AuxData.js.map +1 -1
  788. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  789. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  790. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  791. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  792. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  793. package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
  794. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  795. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  796. package/lib/esm/polyface/Polyface.js.map +1 -1
  797. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  798. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  799. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  800. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  801. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  802. package/lib/esm/polyface/PolyfaceQuery.d.ts +93 -14
  803. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  804. package/lib/esm/polyface/PolyfaceQuery.js +173 -35
  805. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  806. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  807. package/lib/esm/polyface/TaggedNumericData.js +1 -1
  808. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  809. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  810. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  811. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  812. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts +27 -19
  813. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.d.ts.map +1 -1
  814. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +30 -12
  815. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  816. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts +12 -8
  817. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.d.ts.map +1 -1
  818. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +18 -4
  819. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  820. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts +3 -4
  821. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.d.ts.map +1 -1
  822. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -5
  823. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  824. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  825. package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts +15 -12
  826. package/lib/esm/polyface/multiclip/Range2dSearchInterface.d.ts.map +1 -1
  827. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  828. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  829. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +38 -0
  830. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  831. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +102 -1
  832. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  833. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  834. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  835. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  836. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  837. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  838. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  839. package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
  840. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  841. package/lib/esm/serialization/GeometrySamples.js +30 -0
  842. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  843. package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
  844. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  845. package/lib/esm/serialization/IModelJsonSchema.js +2 -7
  846. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  847. package/lib/esm/solid/Box.js.map +1 -1
  848. package/lib/esm/solid/Cone.js.map +1 -1
  849. package/lib/esm/solid/LinearSweep.d.ts +2 -1
  850. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  851. package/lib/esm/solid/LinearSweep.js.map +1 -1
  852. package/lib/esm/solid/RotationalSweep.d.ts +2 -1
  853. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  854. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  855. package/lib/esm/solid/RuledSweep.d.ts +2 -1
  856. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  857. package/lib/esm/solid/RuledSweep.js.map +1 -1
  858. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  859. package/lib/esm/solid/Sphere.js.map +1 -1
  860. package/lib/esm/solid/SweepContour.d.ts +2 -2
  861. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  862. package/lib/esm/solid/SweepContour.js +9 -0
  863. package/lib/esm/solid/SweepContour.js.map +1 -1
  864. package/lib/esm/solid/TorusPipe.js.map +1 -1
  865. package/lib/esm/topology/ChainMerge.js +1 -1
  866. package/lib/esm/topology/ChainMerge.js.map +1 -1
  867. package/lib/esm/topology/Graph.js.map +1 -1
  868. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  869. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  870. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
  871. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  872. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
  873. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  874. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  875. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  876. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  877. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  878. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  879. package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  880. package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
  881. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  882. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  883. package/lib/esm/topology/MaskManager.js.map +1 -1
  884. package/lib/esm/topology/Merging.js.map +1 -1
  885. package/lib/esm/topology/RegularizeFace.js +3 -3
  886. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  887. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  888. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  889. package/lib/esm/topology/Triangulation.js +1 -1
  890. package/lib/esm/topology/Triangulation.js.map +1 -1
  891. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  892. package/package.json +6 -17
  893. package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
  894. package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
  895. package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
  896. package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"KnotVector.js","sourceRoot":"","sources":["../../../src/bspline/KnotVector.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 { NumberArray } from \"../geometry3d/PointHelpers\";\r\n\r\n/**\r\n * Enumeration of the possible ways of converting a \"periodic\" knot vector to an open knot vector.\r\n * None (0) ==> no wrap possible\r\n * OpenByAddingControlPoints (1) ==> wrapped by adding poles\r\n * OpenByRemovingKnots (2) ==> wrapped by deleting extreme knots.\r\n * @public\r\n */\r\nexport enum BSplineWrapMode {\r\n /** No conversion to periodic */\r\n None = 0,\r\n /** Convert to periodic by removing control points. This is typical for closed bcurve constructed by control points with maximum continuity.\r\n * * Knots stay the same in open and periodic form.\r\n * * Periodic form omits {degree} control points.\r\n */\r\n OpenByAddingControlPoints = 1,\r\n /** Convert to periodic by adding special knots. This is typical of closed bcurve constructed as exact circular or elliptic arc\r\n * * 2 knots on each end are omitted in open form\r\n * * poles stay the same.\r\n */\r\n OpenByRemovingKnots = 2,\r\n}\r\n/**\r\n * Array of non-decreasing numbers acting as a knot array for bsplines.\r\n *\r\n * * Essential identity: numKnots = numPoles + order - 2 = numPoles + degree - 1\r\n * * Various bspline libraries have confusion over how many \"end knots\" are needed. \"Many\" libraries (including MicroStation)\r\n * incorrectly demand \"order\" knots at each end for clamping. But only \"order - 1\" are really needed.\r\n * * This class uses the \"order-1\" convention.\r\n * * This class provides queries to convert among spanIndex and knotIndex\r\n * * A span is a single interval of the knots.\r\n * * The left knot of span {k} is knot {k+degree-1}\r\n * * This class provides queries to convert among spanFraction, fraction of knot range, and knot\r\n * * core computations (evaluateBasisFunctions) have leftKnotIndex and global knot value as inputs. Callers need to\r\n * know their primary values (global knot, spanFraction).\r\n * @public\r\n */\r\nexport class KnotVector {\r\n /** The simple array of knot values. */\r\n public knots: Float64Array;\r\n /** Return the degree of basis functions defined in these knots. */\r\n public degree: number;\r\n private _knot0: number;\r\n private _knot1: number;\r\n\r\n private _wrapMode?: BSplineWrapMode;\r\n /** tolerance for considering two knots to be the same. */\r\n public static readonly knotTolerance = 1.0e-9;\r\n /** Return the leftmost knot value (of the active interval, ignoring unclamped leading knots)*/\r\n public get leftKnot() { return this._knot0; }\r\n /** Return the rightmost knot value (of the active interval, ignoring unclamped leading knots)*/\r\n public get rightKnot() { return this._knot1; }\r\n /** Return the index of the leftmost knot of the active interval */\r\n public get leftKnotIndex() { return this.degree - 1; }\r\n /** Return the index of the rightmost knot of the active interval */\r\n public get rightKnotIndex() { return this.knots.length - this.degree; }\r\n /** 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. */\r\n public get wrappable() { return this._wrapMode === undefined ? BSplineWrapMode.None : this._wrapMode; }\r\n public set wrappable(value: BSplineWrapMode) { this._wrapMode = value; }\r\n /** Return the number of bezier spans. Note that this includes zero-length spans if there are repeated knots. */\r\n public get numSpans() { return this.rightKnotIndex - this.leftKnotIndex; }\r\n /**\r\n *\r\n * * If knots is a number array or Float64Array, the those values become the local knot array.\r\n * * If knots is a simple number, the local knot array is allocated to that size but left as zeros.\r\n * @param knots\r\n * @param degree\r\n */\r\n private constructor(knots: number[] | Float64Array | number, degree: number, wrapMode?: BSplineWrapMode) {\r\n this.degree = degree;\r\n this._wrapMode = wrapMode;\r\n // default values to satisfy compiler -- real values hapn setupFixedValues or final else defers to user\r\n this._knot0 = 0.0;\r\n this._knot1 = 1.0;\r\n // satisfy the initialize checker ..\r\n if (Array.isArray(knots)) { // remark: This ctor is private. The callers (as of April 2019) do not use this path.\r\n this.knots = new Float64Array(knots.length);\r\n this.setKnots(knots);\r\n this.setupFixedValues();\r\n } else if (knots instanceof Float64Array) {\r\n this.knots = knots.slice();\r\n this.setupFixedValues();\r\n } else { // caller is responsible for filling array separately ...\r\n this.knots = new Float64Array(knots);\r\n }\r\n }\r\n /** copy degree and knots to a new KnotVector. */\r\n public clone(): KnotVector { return new KnotVector(this.knots, this.degree, this.wrappable); }\r\n private setupFixedValues() {\r\n // These should be read-only . ..\r\n this._knot0 = this.knots[this.degree - 1];\r\n this._knot1 = this.knots[this.knots.length - this.degree];\r\n }\r\n /** Return the total knot distance from beginning to end. */\r\n public get knotLength01(): number { return this._knot1 - this._knot0; }\r\n /**\r\n * Returns true if all numeric values have wraparound conditions for \"closed\" knotVector with specified wrap mode\r\n * @param mode optional test mode. If undefined, use the this.wrappable.\r\n */\r\n public testClosable(mode?: BSplineWrapMode): boolean {\r\n if (mode === undefined)\r\n mode = this.wrappable;\r\n const leftKnotIndex = this.leftKnotIndex;\r\n const rightKnotIndex = this.rightKnotIndex;\r\n const period = this.rightKnot - this.leftKnot;\r\n const degree = this.degree;\r\n const indexDelta = rightKnotIndex - leftKnotIndex;\r\n // maximum continuity mode . . .\r\n if (mode === BSplineWrapMode.OpenByAddingControlPoints) {\r\n for (let k0 = leftKnotIndex - degree + 1; k0 < leftKnotIndex + degree - 1; k0++) {\r\n const k1 = k0 + indexDelta;\r\n if (!Geometry.isSameCoordinate(this.knots[k0] + period, this.knots[k1]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n // arc mode ...\r\n if (mode === BSplineWrapMode.OpenByRemovingKnots) {\r\n // we expect {degree} replicated knots at each end . . .\r\n const numRepeated = degree - 1;\r\n const leftKnot = this.knots[leftKnotIndex];\r\n const rightKnot = this.knots[rightKnotIndex];\r\n for (let i = 0; i < numRepeated; i++) {\r\n if (!Geometry.isSameCoordinate(leftKnot, this.knots[leftKnotIndex - i - 1]))\r\n return false;\r\n if (!Geometry.isSameCoordinate(rightKnot, this.knots[rightKnotIndex + i + 1]))\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n /** Test matching degree and knot values */\r\n public isAlmostEqual(other: KnotVector): boolean {\r\n if (this.degree !== other.degree) return false;\r\n return NumberArray.isAlmostEqual(this.knots, other.knots, KnotVector.knotTolerance);\r\n }\r\n\r\n /** Compute the multiplicity of the input knot, or zero if not a knot. */\r\n public getKnotMultiplicity(knot: number): number {\r\n let m = 0;\r\n for (const k of this.knots) {\r\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\r\n ++m;\r\n else if (knot < k)\r\n break;\r\n }\r\n return m;\r\n }\r\n\r\n /** Compute the multiplicity of the knot at the given index. */\r\n public getKnotMultiplicityAtIndex(knotIndex: number): number {\r\n let m = 0;\r\n if (knotIndex >= 0 && knotIndex < this.knots.length) {\r\n const knot = this.knots[knotIndex];\r\n ++m; // count this knot\r\n for (let i = knotIndex - 1; i >= 0; --i) {\r\n const k = this.knots[i];\r\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\r\n ++m; // found multiple to left of knot\r\n else if (knot > k)\r\n break;\r\n }\r\n for (let i = knotIndex + 1; i < this.knots.length; ++i) {\r\n const k = this.knots[i];\r\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\r\n ++m; // found multiple to right of knot\r\n else if (knot < k)\r\n break;\r\n }\r\n }\r\n return m;\r\n }\r\n\r\n /** Transform knots to span [0,1].\r\n * @returns false if and only if this.knotLength01 is trivial\r\n */\r\n public normalize(): boolean {\r\n if (this.knotLength01 < KnotVector.knotTolerance)\r\n return false;\r\n const divisor = 1.0 / this.knotLength01;\r\n const leftKnot = this.leftKnot;\r\n for (let i = 0; i < this.knots.length; ++i)\r\n this.knots[i] = (this.knots[i] - leftKnot) * divisor;\r\n // explicitly set rightKnot and its multiples to 1.0 to avoid round-off\r\n for (let i = this.rightKnotIndex - 1; i > this.leftKnotIndex && (this.knots[i] === this.knots[this.rightKnotIndex]); --i) this.knots[i] = 1.0;\r\n for (let i = this.rightKnotIndex + 1; i < this.knots.length && (this.knots[i] === this.knots[this.rightKnotIndex]); ++i) this.knots[i] = 1.0;\r\n this.knots[this.rightKnotIndex] = 1.0;\r\n this.setupFixedValues();\r\n return true;\r\n }\r\n\r\n /** install knot values from an array, optionally ignoring first and last.\r\n */\r\n public setKnots(knots: number[] | Float64Array, skipFirstAndLast?: boolean) {\r\n const numAllocate = skipFirstAndLast ? knots.length - 2 : knots.length;\r\n if (numAllocate !== this.knots.length)\r\n this.knots = new Float64Array(numAllocate);\r\n if (skipFirstAndLast) {\r\n for (let i = 1; i + 1 < knots.length; i++)\r\n this.knots[i - 1] = knots[i];\r\n\r\n } else {\r\n for (let i = 0; i < knots.length; i++)\r\n this.knots[i] = knots[i];\r\n }\r\n this.setupFixedValues();\r\n }\r\n\r\n /** install knot values from an array, optionally ignoring first and last. */\r\n public setKnotsCapture(knots: Float64Array) {\r\n this.knots = knots;\r\n this.setupFixedValues();\r\n }\r\n\r\n /**\r\n * Create knot vector with {degree-1} replicated knots at start and end, and uniform knots between.\r\n * @param numPoles Number of poles\r\n * @param degree degree of polynomial\r\n * @param a0 left knot value for active interval\r\n * @param a1 right knot value for active interval\r\n */\r\n public static createUniformClamped(numPoles: number, degree: number, a0: number, a1: number): KnotVector {\r\n const knots = new KnotVector(numPoles + degree - 1, degree);\r\n let k = 0;\r\n for (let m = 0; m < degree; m++)knots.knots[k++] = a0;\r\n const du = 1.0 / (numPoles - degree);\r\n for (let i = 1; i + degree < numPoles; i++)\r\n knots.knots[k++] = a0 + i * du * (a1 - a0);\r\n for (let m = 0; m < degree; m++)knots.knots[k++] = a1;\r\n knots.setupFixedValues();\r\n return knots;\r\n }\r\n /**\r\n * Create knot vector with wraparound knots at start and end, and uniform knots between.\r\n * @param numInterval number of intervals in knot space. (NOT POLE COUNT)\r\n * @param degree degree of polynomial\r\n * @param a0 left knot value for active interval\r\n * @param a1 right knot value for active interval\r\n */\r\n public static createUniformWrapped(numInterval: number, degree: number, a0: number, a1: number): KnotVector {\r\n const knots = new KnotVector(numInterval + 2 * degree - 1, degree);\r\n const du = 1.0 / numInterval;\r\n for (let i = 1 - degree, k = 0; i < numInterval + degree; i++, k++) {\r\n knots.knots[k] = Geometry.interpolate(a0, i * du, a1);\r\n }\r\n knots.setupFixedValues();\r\n return knots;\r\n }\r\n\r\n /**\r\n * Create knot vector with given knot values and degree.\r\n * @param knotArray knot values\r\n * @param degree degree of polynomial\r\n * @param skipFirstAndLast true to skip copying the first and last knot values.\r\n */\r\n public static create(knotArray: number[] | Float64Array, degree: number, skipFirstAndLast?: boolean): KnotVector {\r\n const numAllocate = skipFirstAndLast ? knotArray.length - 2 : knotArray.length;\r\n const knots = new KnotVector(numAllocate, degree);\r\n knots.setKnots(knotArray, skipFirstAndLast);\r\n return knots;\r\n }\r\n\r\n /**\r\n * Return the average of degree consecutive knots beginning at knotIndex.\r\n */\r\n public grevilleKnot(knotIndex: number): number {\r\n if (knotIndex < 0) return this.leftKnot;\r\n if (knotIndex > this.rightKnotIndex) return this.rightKnot;\r\n let sum = 0.0;\r\n for (let i = knotIndex; i < knotIndex + this.degree; i++)\r\n sum += this.knots[i];\r\n return sum / this.degree;\r\n }\r\n /** Return an array sized for a set of the basis function values. */\r\n public createBasisArray(): Float64Array { return new Float64Array(this.degree + 1); }\r\n /** Convert localFraction within the interval following an indexed knot to a knot value. */\r\n public baseKnotFractionToKnot(knotIndex0: number, localFraction: number): number {\r\n const knot0 = this.knots[knotIndex0];\r\n localFraction = Geometry.clamp(localFraction, 0, 1);\r\n return knot0 + localFraction * (this.knots[knotIndex0 + 1] - knot0);\r\n }\r\n /** Convert localFraction within an indexed bezier span to a knot value. */\r\n public spanFractionToKnot(spanIndex: number, localFraction: number): number {\r\n const k = this.spanIndexToLeftKnotIndex(spanIndex);\r\n localFraction = Geometry.clamp(localFraction, 0, 1);\r\n return this.knots[k] + localFraction * (this.knots[k + 1] - this.knots[k]);\r\n }\r\n /** Convert localFraction within an indexed bezier span to fraction of active knot range. */\r\n public spanFractionToFraction(spanIndex: number, localFraction: number): number {\r\n const knot = this.spanFractionToKnot(spanIndex, localFraction);\r\n return (knot - this.leftKnot) / (this.rightKnot - this.leftKnot);\r\n }\r\n /** Return fraction of active knot range to knot value. */\r\n public fractionToKnot(fraction: number): number {\r\n fraction = Geometry.clamp(fraction, 0, 1); // B-splines are not extendable\r\n return Geometry.interpolate(this.knots[this.degree - 1], fraction, this.knots[this.knots.length - this.degree]);\r\n }\r\n /**\r\n * Evaluate basis functions f[] at knot value u.\r\n *\r\n * @param u knot value for evaluation\r\n * @param f array of order basis function values\r\n */\r\n public evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array) {\r\n f[0] = 1.0;\r\n if (this.degree < 1) return;\r\n // direct compute for linear part ...\r\n const u0 = this.knots[knotIndex0];\r\n const u1 = this.knots[knotIndex0 + 1];\r\n f[1] = (u - u0) / (u1 - u0);\r\n f[0] = 1.0 - f[1];\r\n if (this.degree < 2) return;\r\n\r\n for (let depth = 1; depth < this.degree; depth++) {\r\n let kLeft = knotIndex0 - depth;\r\n let kRight = kLeft + depth + 1;\r\n let gCarry = 0.0;\r\n for (let step = 0; step <= depth; step++) {\r\n const tLeft = this.knots[kLeft++];\r\n const tRight = this.knots[kRight++];\r\n const fraction = (u - tLeft) / (tRight - tLeft);\r\n const g1 = f[step] * fraction;\r\n const g0 = f[step] * (1.0 - fraction);\r\n f[step] = gCarry + g0;\r\n gCarry = g1;\r\n }\r\n f[depth + 1] = gCarry;\r\n }\r\n }\r\n\r\n /**\r\n * Evaluate basis functions f[], derivatives df[], and optional second derivatives ddf[] at knot value u.\r\n *\r\n * @param u knot value for evaluation\r\n * @param f array of order basis function values\r\n * @param df array of order basis derivative values\r\n * @param ddf array of order basis second derivative values\r\n */\r\n public evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array) {\r\n f[0] = 1.0; df[0] = 0.0;\r\n if (this.degree < 1) return;\r\n // direct compute for linear part ...\r\n const u0 = this.knots[knotIndex0];\r\n const u1 = this.knots[knotIndex0 + 1];\r\n // ah = 1/(u1-u0) is the derivative of fraction0\r\n // (-ah) is the derivative of fraction1.\r\n let ah = 1.0 / (u1 - u0);\r\n f[1] = (u - u0) * ah;\r\n f[0] = 1.0 - f[1];\r\n df[0] = -ah; df[1] = ah;\r\n if (ddf) { // first derivative started constant, second derivative started zero.\r\n ddf[0] = 0.0; ddf[1] = 0.0;\r\n }\r\n if (this.degree < 2) return;\r\n for (let depth = 1; depth < this.degree; depth++) {\r\n let kLeft = knotIndex0 - depth;\r\n let kRight = kLeft + depth + 1;\r\n let gCarry = 0.0;\r\n let dgCarry = 0.0;\r\n let ddgCarry = 0.0;\r\n // f, df, ddf, are each row vectors with product of `step` linear terms.\r\n // f is multiplied on the right by matrix V. Each row has 2 nonzero entries (which sum to 1) (0,0,1-fraction, fraction,0,0,0)\r\n // Each row of the derivative dV is two entries (0,0, -1/h, 1/h,0,0,0)\r\n // Hence fnew = f * V\r\n // dfnew = df * V + f * dV\r\n // ddfnew = ddf * V + df*dV + df * dV + f * ddV\r\n // but ddV is zero so\r\n // ddfnew = ddf * V + 2 * df * dV\r\n for (let step = 0; step <= depth; step++) {\r\n const tLeft = this.knots[kLeft++];\r\n const tRight = this.knots[kRight++];\r\n ah = 1.0 / (tRight - tLeft);\r\n const fraction = (u - tLeft) * ah;\r\n const fraction1 = 1.0 - fraction;\r\n const g1 = f[step] * fraction;\r\n const g0 = f[step] * fraction1;\r\n const dg1 = df[step] * fraction + f[step] * ah;\r\n const dg0 = df[step] * fraction1 - f[step] * ah;\r\n const dfSave = 2.0 * df[step] * ah;\r\n f[step] = gCarry + g0;\r\n df[step] = dgCarry + dg0;\r\n gCarry = g1;\r\n dgCarry = dg1;\r\n if (ddf) { // do the backward reference to df before rewriting df !!!\r\n const ddg1 = ddf[step] * fraction + dfSave;\r\n const ddg0 = ddf[step] * fraction1 - dfSave;\r\n ddf[step] = ddgCarry + ddg0;\r\n ddgCarry = ddg1;\r\n }\r\n }\r\n f[depth + 1] = gCarry;\r\n df[depth + 1] = dgCarry;\r\n if (ddf)\r\n ddf[depth + 1] = ddgCarry;\r\n }\r\n }\r\n /** Find the knot span bracketing knots[i] <= u < knots[i+1] and return i.\r\n * * If u has no such bracket, return the smaller index of the closest nontrivial bracket.\r\n * @param u value to bracket\r\n */\r\n public knotToLeftKnotIndex(u: number): number {\r\n for (let i = this.leftKnotIndex; i < this.rightKnotIndex; ++i) {\r\n if (u < this.knots[i + 1])\r\n return i;\r\n }\r\n // for u >= rightKnot, return left index of last nontrivial span\r\n for (let i = this.rightKnotIndex; i > this.leftKnotIndex; --i) {\r\n if (this.knots[i] - this.knots[i - 1] >= KnotVector.knotTolerance)\r\n return i - 1;\r\n }\r\n return this.rightKnotIndex - 1; // shouldn't get here\r\n }\r\n /**\r\n * Given a span index, return the index of the knot at its left.\r\n * @param spanIndex index of span\r\n */\r\n public spanIndexToLeftKnotIndex(spanIndex: number): number {\r\n const d = this.degree;\r\n if (spanIndex <= 0.0) return d - 1;\r\n return Math.min(spanIndex + d - 1, this.knots.length - d - 1);\r\n }\r\n /** Return the knot interval length of indexed bezier span. */\r\n public spanIndexToSpanLength(spanIndex: number): number {\r\n const k = this.spanIndexToLeftKnotIndex(spanIndex);\r\n return this.knots[k + 1] - this.knots[k];\r\n }\r\n /**\r\n * Given a span index, test if it is within range and has nonzero length.\r\n * * note that a false return does not imply there are no more spans. This may be a double knot (zero length span) followed by more real spans\r\n * @param spanIndex index of span to test.\r\n */\r\n public isIndexOfRealSpan(spanIndex: number): boolean {\r\n if (spanIndex >= 0 && spanIndex < this.numSpans)\r\n return !Geometry.isSmallMetricDistance(this.spanIndexToSpanLength(spanIndex));\r\n return false;\r\n }\r\n /** Reflect all knots so `leftKnot` and `rightKnot` are maintained but interval lengths reverse. */\r\n public reflectKnots() {\r\n const a = this.leftKnot;\r\n const b = this.rightKnot;\r\n const numKnots = this.knots.length;\r\n for (let i = 0; i < numKnots; i++)\r\n this.knots[i] = a + (b - this.knots[i]);\r\n this.knots.reverse();\r\n }\r\n /**\r\n * return a simple array form of the knots. optionally replicate the first and last\r\n * in classic over-clamped manner\r\n */\r\n public copyKnots(includeExtraEndKnot: boolean): number[] {\r\n const wrap = this.wrappable === BSplineWrapMode.OpenByAddingControlPoints && this.testClosable();\r\n const leftIndex = this.leftKnotIndex;\r\n const rightIndex = this.rightKnotIndex;\r\n const a0 = this.leftKnot;\r\n const a1 = this.rightKnot;\r\n const delta = a1 - a0;\r\n const degree = this.degree;\r\n const values: number[] = [];\r\n if (includeExtraEndKnot) {\r\n if (wrap) {\r\n values.push(this.knots[rightIndex - degree] - delta);\r\n } else {\r\n values.push(this.knots[0]);\r\n }\r\n }\r\n for (const u of this.knots) values.push(u);\r\n if (includeExtraEndKnot) {\r\n if (wrap) {\r\n values.push(this.knots[leftIndex + degree] + delta);\r\n } else\r\n values.push(values[values.length - 1]);\r\n }\r\n return values;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"KnotVector.js","sourceRoot":"","sources":["../../../src/bspline/KnotVector.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Bspline\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { NumberArray } from \"../geometry3d/PointHelpers\";\n\n/**\n * Enumeration of the possible ways of converting a \"periodic\" knot vector to an open knot vector.\n * None (0) ==> no wrap possible\n * OpenByAddingControlPoints (1) ==> wrapped by adding poles\n * OpenByRemovingKnots (2) ==> wrapped by deleting extreme knots.\n * @public\n */\nexport enum BSplineWrapMode {\n /** No conversion to periodic */\n None = 0,\n /** Convert to periodic by removing control points. This is typical for closed bcurve constructed by control points with maximum continuity.\n * * Knots stay the same in open and periodic form.\n * * Periodic form omits {degree} control points.\n */\n OpenByAddingControlPoints = 1,\n /** Convert to periodic by adding special knots. This is typical of closed bcurve constructed as exact circular or elliptic arc\n * * 2 knots on each end are omitted in open form\n * * poles stay the same.\n */\n OpenByRemovingKnots = 2,\n}\n/**\n * Array of non-decreasing numbers acting as a knot array for bsplines.\n *\n * * Essential identity: numKnots = numPoles + order - 2 = numPoles + degree - 1\n * * Various bspline libraries have confusion over how many \"end knots\" are needed. \"Many\" libraries (including MicroStation)\n * incorrectly demand \"order\" knots at each end for clamping. But only \"order - 1\" are really needed.\n * * This class uses the \"order-1\" convention.\n * * This class provides queries to convert among spanIndex and knotIndex\n * * A span is a single interval of the knots.\n * * The left knot of span {k} is knot {k+degree-1}\n * * This class provides queries to convert among spanFraction, fraction of knot range, and knot\n * * core computations (evaluateBasisFunctions) have leftKnotIndex and global knot value as inputs. Callers need to\n * know their primary values (global knot, spanFraction).\n * @public\n */\nexport class KnotVector {\n /** The simple array of knot values. */\n public knots: Float64Array;\n /** Return the degree of basis functions defined in these knots. */\n public degree: number;\n private _knot0: number;\n private _knot1: number;\n\n private _wrapMode?: BSplineWrapMode;\n /** tolerance for considering two knots to be the same. */\n public static readonly knotTolerance = 1.0e-9;\n /** Return the leftmost knot value (of the active interval, ignoring unclamped leading knots)*/\n public get leftKnot() { return this._knot0; }\n /** Return the rightmost knot value (of the active interval, ignoring unclamped leading knots)*/\n public get rightKnot() { return this._knot1; }\n /** Return the index of the leftmost knot of the active interval */\n public get leftKnotIndex() { return this.degree - 1; }\n /** Return the index of the rightmost knot of the active interval */\n public get rightKnotIndex() { return this.knots.length - this.degree; }\n /** 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. */\n public get wrappable() { return this._wrapMode === undefined ? BSplineWrapMode.None : this._wrapMode; }\n public set wrappable(value: BSplineWrapMode) { this._wrapMode = value; }\n /** Return the number of bezier spans. Note that this includes zero-length spans if there are repeated knots. */\n public get numSpans() { return this.rightKnotIndex - this.leftKnotIndex; }\n /**\n *\n * * If knots is a number array or Float64Array, the those values become the local knot array.\n * * If knots is a simple number, the local knot array is allocated to that size but left as zeros.\n * @param knots\n * @param degree\n */\n private constructor(knots: number[] | Float64Array | number, degree: number, wrapMode?: BSplineWrapMode) {\n this.degree = degree;\n this._wrapMode = wrapMode;\n // default values to satisfy compiler -- real values hapn setupFixedValues or final else defers to user\n this._knot0 = 0.0;\n this._knot1 = 1.0;\n // satisfy the initialize checker ..\n if (Array.isArray(knots)) { // remark: This ctor is private. The callers (as of April 2019) do not use this path.\n this.knots = new Float64Array(knots.length);\n this.setKnots(knots);\n this.setupFixedValues();\n } else if (knots instanceof Float64Array) {\n this.knots = knots.slice();\n this.setupFixedValues();\n } else { // caller is responsible for filling array separately ...\n this.knots = new Float64Array(knots);\n }\n }\n /** copy degree and knots to a new KnotVector. */\n public clone(): KnotVector { return new KnotVector(this.knots, this.degree, this.wrappable); }\n private setupFixedValues() {\n // These should be read-only . ..\n this._knot0 = this.knots[this.degree - 1];\n this._knot1 = this.knots[this.knots.length - this.degree];\n }\n /** Return the total knot distance from beginning to end. */\n public get knotLength01(): number { return this._knot1 - this._knot0; }\n /**\n * Returns true if all numeric values have wraparound conditions for \"closed\" knotVector with specified wrap mode\n * @param mode optional test mode. If undefined, use the this.wrappable.\n */\n public testClosable(mode?: BSplineWrapMode): boolean {\n if (mode === undefined)\n mode = this.wrappable;\n const leftKnotIndex = this.leftKnotIndex;\n const rightKnotIndex = this.rightKnotIndex;\n const period = this.rightKnot - this.leftKnot;\n const degree = this.degree;\n const indexDelta = rightKnotIndex - leftKnotIndex;\n // maximum continuity mode . . .\n if (mode === BSplineWrapMode.OpenByAddingControlPoints) {\n for (let k0 = leftKnotIndex - degree + 1; k0 < leftKnotIndex + degree - 1; k0++) {\n const k1 = k0 + indexDelta;\n if (!Geometry.isSameCoordinate(this.knots[k0] + period, this.knots[k1]))\n return false;\n }\n return true;\n }\n // arc mode ...\n if (mode === BSplineWrapMode.OpenByRemovingKnots) {\n // we expect {degree} replicated knots at each end . . .\n const numRepeated = degree - 1;\n const leftKnot = this.knots[leftKnotIndex];\n const rightKnot = this.knots[rightKnotIndex];\n for (let i = 0; i < numRepeated; i++) {\n if (!Geometry.isSameCoordinate(leftKnot, this.knots[leftKnotIndex - i - 1]))\n return false;\n if (!Geometry.isSameCoordinate(rightKnot, this.knots[rightKnotIndex + i + 1]))\n return false;\n }\n return true;\n }\n\n return false;\n }\n /** Test matching degree and knot values */\n public isAlmostEqual(other: KnotVector): boolean {\n if (this.degree !== other.degree) return false;\n return NumberArray.isAlmostEqual(this.knots, other.knots, KnotVector.knotTolerance);\n }\n\n /** Compute the multiplicity of the input knot, or zero if not a knot. */\n public getKnotMultiplicity(knot: number): number {\n let m = 0;\n for (const k of this.knots) {\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\n ++m;\n else if (knot < k)\n break;\n }\n return m;\n }\n\n /** Compute the multiplicity of the knot at the given index. */\n public getKnotMultiplicityAtIndex(knotIndex: number): number {\n let m = 0;\n if (knotIndex >= 0 && knotIndex < this.knots.length) {\n const knot = this.knots[knotIndex];\n ++m; // count this knot\n for (let i = knotIndex - 1; i >= 0; --i) {\n const k = this.knots[i];\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\n ++m; // found multiple to left of knot\n else if (knot > k)\n break;\n }\n for (let i = knotIndex + 1; i < this.knots.length; ++i) {\n const k = this.knots[i];\n if (Math.abs(k - knot) < KnotVector.knotTolerance)\n ++m; // found multiple to right of knot\n else if (knot < k)\n break;\n }\n }\n return m;\n }\n\n /** Transform knots to span [0,1].\n * @returns false if and only if this.knotLength01 is trivial\n */\n public normalize(): boolean {\n if (this.knotLength01 < KnotVector.knotTolerance)\n return false;\n const divisor = 1.0 / this.knotLength01;\n const leftKnot = this.leftKnot;\n for (let i = 0; i < this.knots.length; ++i)\n this.knots[i] = (this.knots[i] - leftKnot) * divisor;\n // explicitly set rightKnot and its multiples to 1.0 to avoid round-off\n for (let i = this.rightKnotIndex - 1; i > this.leftKnotIndex && (this.knots[i] === this.knots[this.rightKnotIndex]); --i) this.knots[i] = 1.0;\n for (let i = this.rightKnotIndex + 1; i < this.knots.length && (this.knots[i] === this.knots[this.rightKnotIndex]); ++i) this.knots[i] = 1.0;\n this.knots[this.rightKnotIndex] = 1.0;\n this.setupFixedValues();\n return true;\n }\n\n /** install knot values from an array, optionally ignoring first and last.\n */\n public setKnots(knots: number[] | Float64Array, skipFirstAndLast?: boolean) {\n const numAllocate = skipFirstAndLast ? knots.length - 2 : knots.length;\n if (numAllocate !== this.knots.length)\n this.knots = new Float64Array(numAllocate);\n if (skipFirstAndLast) {\n for (let i = 1; i + 1 < knots.length; i++)\n this.knots[i - 1] = knots[i];\n\n } else {\n for (let i = 0; i < knots.length; i++)\n this.knots[i] = knots[i];\n }\n this.setupFixedValues();\n }\n\n /** install knot values from an array, optionally ignoring first and last. */\n public setKnotsCapture(knots: Float64Array) {\n this.knots = knots;\n this.setupFixedValues();\n }\n\n /**\n * Create knot vector with {degree-1} replicated knots at start and end, and uniform knots between.\n * @param numPoles Number of poles\n * @param degree degree of polynomial\n * @param a0 left knot value for active interval\n * @param a1 right knot value for active interval\n */\n public static createUniformClamped(numPoles: number, degree: number, a0: number, a1: number): KnotVector {\n const knots = new KnotVector(numPoles + degree - 1, degree);\n let k = 0;\n for (let m = 0; m < degree; m++)knots.knots[k++] = a0;\n const du = 1.0 / (numPoles - degree);\n for (let i = 1; i + degree < numPoles; i++)\n knots.knots[k++] = a0 + i * du * (a1 - a0);\n for (let m = 0; m < degree; m++)knots.knots[k++] = a1;\n knots.setupFixedValues();\n return knots;\n }\n /**\n * Create knot vector with wraparound knots at start and end, and uniform knots between.\n * @param numInterval number of intervals in knot space. (NOT POLE COUNT)\n * @param degree degree of polynomial\n * @param a0 left knot value for active interval\n * @param a1 right knot value for active interval\n */\n public static createUniformWrapped(numInterval: number, degree: number, a0: number, a1: number): KnotVector {\n const knots = new KnotVector(numInterval + 2 * degree - 1, degree);\n const du = 1.0 / numInterval;\n for (let i = 1 - degree, k = 0; i < numInterval + degree; i++, k++) {\n knots.knots[k] = Geometry.interpolate(a0, i * du, a1);\n }\n knots.setupFixedValues();\n return knots;\n }\n\n /**\n * Create knot vector with given knot values and degree.\n * @param knotArray knot values\n * @param degree degree of polynomial\n * @param skipFirstAndLast true to skip copying the first and last knot values.\n */\n public static create(knotArray: number[] | Float64Array, degree: number, skipFirstAndLast?: boolean): KnotVector {\n const numAllocate = skipFirstAndLast ? knotArray.length - 2 : knotArray.length;\n const knots = new KnotVector(numAllocate, degree);\n knots.setKnots(knotArray, skipFirstAndLast);\n return knots;\n }\n\n /**\n * Return the average of degree consecutive knots beginning at knotIndex.\n */\n public grevilleKnot(knotIndex: number): number {\n if (knotIndex < 0) return this.leftKnot;\n if (knotIndex > this.rightKnotIndex) return this.rightKnot;\n let sum = 0.0;\n for (let i = knotIndex; i < knotIndex + this.degree; i++)\n sum += this.knots[i];\n return sum / this.degree;\n }\n /** Return an array sized for a set of the basis function values. */\n public createBasisArray(): Float64Array { return new Float64Array(this.degree + 1); }\n /** Convert localFraction within the interval following an indexed knot to a knot value. */\n public baseKnotFractionToKnot(knotIndex0: number, localFraction: number): number {\n const knot0 = this.knots[knotIndex0];\n localFraction = Geometry.clamp(localFraction, 0, 1);\n return knot0 + localFraction * (this.knots[knotIndex0 + 1] - knot0);\n }\n /** Convert localFraction within an indexed bezier span to a knot value. */\n public spanFractionToKnot(spanIndex: number, localFraction: number): number {\n const k = this.spanIndexToLeftKnotIndex(spanIndex);\n localFraction = Geometry.clamp(localFraction, 0, 1);\n return this.knots[k] + localFraction * (this.knots[k + 1] - this.knots[k]);\n }\n /** Convert localFraction within an indexed bezier span to fraction of active knot range. */\n public spanFractionToFraction(spanIndex: number, localFraction: number): number {\n const knot = this.spanFractionToKnot(spanIndex, localFraction);\n return (knot - this.leftKnot) / (this.rightKnot - this.leftKnot);\n }\n /** Return fraction of active knot range to knot value. */\n public fractionToKnot(fraction: number): number {\n fraction = Geometry.clamp(fraction, 0, 1); // B-splines are not extendable\n return Geometry.interpolate(this.knots[this.degree - 1], fraction, this.knots[this.knots.length - this.degree]);\n }\n /**\n * Evaluate basis functions f[] at knot value u.\n *\n * @param u knot value for evaluation\n * @param f array of order basis function values\n */\n public evaluateBasisFunctions(knotIndex0: number, u: number, f: Float64Array) {\n f[0] = 1.0;\n if (this.degree < 1) return;\n // direct compute for linear part ...\n const u0 = this.knots[knotIndex0];\n const u1 = this.knots[knotIndex0 + 1];\n f[1] = (u - u0) / (u1 - u0);\n f[0] = 1.0 - f[1];\n if (this.degree < 2) return;\n\n for (let depth = 1; depth < this.degree; depth++) {\n let kLeft = knotIndex0 - depth;\n let kRight = kLeft + depth + 1;\n let gCarry = 0.0;\n for (let step = 0; step <= depth; step++) {\n const tLeft = this.knots[kLeft++];\n const tRight = this.knots[kRight++];\n const fraction = (u - tLeft) / (tRight - tLeft);\n const g1 = f[step] * fraction;\n const g0 = f[step] * (1.0 - fraction);\n f[step] = gCarry + g0;\n gCarry = g1;\n }\n f[depth + 1] = gCarry;\n }\n }\n\n /**\n * Evaluate basis functions f[], derivatives df[], and optional second derivatives ddf[] at knot value u.\n *\n * @param u knot value for evaluation\n * @param f array of order basis function values\n * @param df array of order basis derivative values\n * @param ddf array of order basis second derivative values\n */\n public evaluateBasisFunctions1(knotIndex0: number, u: number, f: Float64Array, df: Float64Array, ddf?: Float64Array) {\n f[0] = 1.0; df[0] = 0.0;\n if (this.degree < 1) return;\n // direct compute for linear part ...\n const u0 = this.knots[knotIndex0];\n const u1 = this.knots[knotIndex0 + 1];\n // ah = 1/(u1-u0) is the derivative of fraction0\n // (-ah) is the derivative of fraction1.\n let ah = 1.0 / (u1 - u0);\n f[1] = (u - u0) * ah;\n f[0] = 1.0 - f[1];\n df[0] = -ah; df[1] = ah;\n if (ddf) { // first derivative started constant, second derivative started zero.\n ddf[0] = 0.0; ddf[1] = 0.0;\n }\n if (this.degree < 2) return;\n for (let depth = 1; depth < this.degree; depth++) {\n let kLeft = knotIndex0 - depth;\n let kRight = kLeft + depth + 1;\n let gCarry = 0.0;\n let dgCarry = 0.0;\n let ddgCarry = 0.0;\n // f, df, ddf, are each row vectors with product of `step` linear terms.\n // f is multiplied on the right by matrix V. Each row has 2 nonzero entries (which sum to 1) (0,0,1-fraction, fraction,0,0,0)\n // Each row of the derivative dV is two entries (0,0, -1/h, 1/h,0,0,0)\n // Hence fnew = f * V\n // dfnew = df * V + f * dV\n // ddfnew = ddf * V + df*dV + df * dV + f * ddV\n // but ddV is zero so\n // ddfnew = ddf * V + 2 * df * dV\n for (let step = 0; step <= depth; step++) {\n const tLeft = this.knots[kLeft++];\n const tRight = this.knots[kRight++];\n ah = 1.0 / (tRight - tLeft);\n const fraction = (u - tLeft) * ah;\n const fraction1 = 1.0 - fraction;\n const g1 = f[step] * fraction;\n const g0 = f[step] * fraction1;\n const dg1 = df[step] * fraction + f[step] * ah;\n const dg0 = df[step] * fraction1 - f[step] * ah;\n const dfSave = 2.0 * df[step] * ah;\n f[step] = gCarry + g0;\n df[step] = dgCarry + dg0;\n gCarry = g1;\n dgCarry = dg1;\n if (ddf) { // do the backward reference to df before rewriting df !!!\n const ddg1 = ddf[step] * fraction + dfSave;\n const ddg0 = ddf[step] * fraction1 - dfSave;\n ddf[step] = ddgCarry + ddg0;\n ddgCarry = ddg1;\n }\n }\n f[depth + 1] = gCarry;\n df[depth + 1] = dgCarry;\n if (ddf)\n ddf[depth + 1] = ddgCarry;\n }\n }\n /** Find the knot span bracketing knots[i] <= u < knots[i+1] and return i.\n * * If u has no such bracket, return the smaller index of the closest nontrivial bracket.\n * @param u value to bracket\n */\n public knotToLeftKnotIndex(u: number): number {\n for (let i = this.leftKnotIndex; i < this.rightKnotIndex; ++i) {\n if (u < this.knots[i + 1])\n return i;\n }\n // for u >= rightKnot, return left index of last nontrivial span\n for (let i = this.rightKnotIndex; i > this.leftKnotIndex; --i) {\n if (this.knots[i] - this.knots[i - 1] >= KnotVector.knotTolerance)\n return i - 1;\n }\n return this.rightKnotIndex - 1; // shouldn't get here\n }\n /**\n * Given a span index, return the index of the knot at its left.\n * @param spanIndex index of span\n */\n public spanIndexToLeftKnotIndex(spanIndex: number): number {\n const d = this.degree;\n if (spanIndex <= 0.0) return d - 1;\n return Math.min(spanIndex + d - 1, this.knots.length - d - 1);\n }\n /** Return the knot interval length of indexed bezier span. */\n public spanIndexToSpanLength(spanIndex: number): number {\n const k = this.spanIndexToLeftKnotIndex(spanIndex);\n return this.knots[k + 1] - this.knots[k];\n }\n /**\n * Given a span index, test if it is within range and has nonzero length.\n * * note that a false return does not imply there are no more spans. This may be a double knot (zero length span) followed by more real spans\n * @param spanIndex index of span to test.\n */\n public isIndexOfRealSpan(spanIndex: number): boolean {\n if (spanIndex >= 0 && spanIndex < this.numSpans)\n return !Geometry.isSmallMetricDistance(this.spanIndexToSpanLength(spanIndex));\n return false;\n }\n /** Reflect all knots so `leftKnot` and `rightKnot` are maintained but interval lengths reverse. */\n public reflectKnots() {\n const a = this.leftKnot;\n const b = this.rightKnot;\n const numKnots = this.knots.length;\n for (let i = 0; i < numKnots; i++)\n this.knots[i] = a + (b - this.knots[i]);\n this.knots.reverse();\n }\n /**\n * return a simple array form of the knots. optionally replicate the first and last\n * in classic over-clamped manner\n */\n public copyKnots(includeExtraEndKnot: boolean): number[] {\n const wrap = this.wrappable === BSplineWrapMode.OpenByAddingControlPoints && this.testClosable();\n const leftIndex = this.leftKnotIndex;\n const rightIndex = this.rightKnotIndex;\n const a0 = this.leftKnot;\n const a1 = this.rightKnot;\n const delta = a1 - a0;\n const degree = this.degree;\n const values: number[] = [];\n if (includeExtraEndKnot) {\n if (wrap) {\n values.push(this.knots[rightIndex - degree] - delta);\n } else {\n values.push(this.knots[0]);\n }\n }\n for (const u of this.knots) values.push(u);\n if (includeExtraEndKnot) {\n if (wrap) {\n values.push(this.knots[leftIndex + degree] + delta);\n } else\n values.push(values[values.length - 1]);\n }\n return values;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SurfaceLocationDetail.js","sourceRoot":"","sources":["../../../src/bspline/SurfaceLocationDetail.ts"],"names":[],"mappings":";;;AASA,mEAAwD;AACxD,mEAAwD;AAExD;;;;;GAKG;AACH,MAAa,uBAAuB;IASlC,iCAAiC;IACjC,YAAmB,OAAmB,EAAE,EAAY,EAAE,KAAe;QACnE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAO,CAAC,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAO,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACf,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA8B,EAAE,EAAW,EAAE,KAAc;QAC5F,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,EAAE;YACJ,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,2BAA2B,CAAC,OAA8B,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc;QAC5G,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF;AA3CD,0DA2CC;AACD;;;GAGG;AACH,MAAa,6BAA6B;IAKxC,+BAA+B;IAC/B,YAAmB,WAAgC,EAAE,aAAsC;QACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAVD,sEAUC","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 Curve\r\n */\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { UVSurface } from \"../geometry3d/GeometryHandler\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n/**\r\n * CurveLocationDetail carries point and paramter data about a point evaluated on a curve.\r\n * * These are returned by a variety of queries.\r\n * * Particular contents can vary among the queries.\r\n * @public\r\n */\r\nexport class UVSurfaceLocationDetail {\r\n /** The surface being evaluated */\r\n public surface?: UVSurface;\r\n /** uv coordinates in the surface */\r\n public uv: Point2d;\r\n /** The point on the surface */\r\n public point: Point3d;\r\n /** A context-specific numeric value. (E.g. a distance) */\r\n public a: number;\r\n /** Construct with empty data. */\r\n public constructor(surface?: UVSurface, uv?: Point2d, point?: Point3d) {\r\n this.surface = surface;\r\n this.point = point ? point : Point3d.createZero();\r\n this.uv = uv ? uv : Point2d.createZero();\r\n this.a = 0.0;\r\n }\r\n /**\r\n * Create a new detail structure.\r\n * @param surface\r\n * @param uv coordinates to copy (not capture) into the `detail.uv`\r\n * @param point coordinates to copy (not capture) into the `detail.point`\r\n */\r\n public static createSurfaceUVPoint(surface: UVSurface | undefined, uv: Point2d, point: Point3d): UVSurfaceLocationDetail {\r\n const detail = new UVSurfaceLocationDetail(surface);\r\n if (uv)\r\n detail.uv.setFrom(uv);\r\n detail.point.setFromPoint3d(point);\r\n return detail;\r\n }\r\n /**\r\n * Create a new detail structure.\r\n * @param surface\r\n * @param uv coordinates to copy (not capture) into the `detail.uv`\r\n * @param point coordinates to copy (not capture) into the `detail.point`\r\n */\r\n public static createSurfaceUVNumbersPoint(surface: UVSurface | undefined, u: number, v: number, point: Point3d): UVSurfaceLocationDetail {\r\n const detail = new UVSurfaceLocationDetail(surface);\r\n detail.uv.x = u;\r\n detail.uv.y = v;\r\n detail.point.setFromPoint3d(point);\r\n return detail;\r\n }\r\n\r\n}\r\n/**\r\n * Carrier for both curve and surface data, e.g. from intersection calculations.\r\n * @public\r\n */\r\nexport class CurveAndSurfaceLocationDetail {\r\n /** detailed location on the curve */\r\n public curveDetail: CurveLocationDetail;\r\n /** detailed location on the surface */\r\n public surfaceDetail: UVSurfaceLocationDetail;\r\n /** CAPTURE both details . . */\r\n public constructor(curveDetail: CurveLocationDetail, surfaceDetail: UVSurfaceLocationDetail) {\r\n this.curveDetail = curveDetail;\r\n this.surfaceDetail = surfaceDetail;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SurfaceLocationDetail.js","sourceRoot":"","sources":["../../../src/bspline/SurfaceLocationDetail.ts"],"names":[],"mappings":";;;AASA,mEAAwD;AACxD,mEAAwD;AAExD;;;;;GAKG;AACH,MAAa,uBAAuB;IASlC,iCAAiC;IACjC,YAAmB,OAAmB,EAAE,EAAY,EAAE,KAAe;QACnE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAO,CAAC,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAO,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACf,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA8B,EAAE,EAAW,EAAE,KAAc;QAC5F,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,EAAE;YACJ,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,2BAA2B,CAAC,OAA8B,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc;QAC5G,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF;AA3CD,0DA2CC;AACD;;;GAGG;AACH,MAAa,6BAA6B;IAKxC,+BAA+B;IAC/B,YAAmB,WAAgC,EAAE,aAAsC;QACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAVD,sEAUC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\nimport { UVSurface } from \"../geometry3d/GeometryHandler\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/**\n * CurveLocationDetail carries point and paramter data about a point evaluated on a curve.\n * * These are returned by a variety of queries.\n * * Particular contents can vary among the queries.\n * @public\n */\nexport class UVSurfaceLocationDetail {\n /** The surface being evaluated */\n public surface?: UVSurface;\n /** uv coordinates in the surface */\n public uv: Point2d;\n /** The point on the surface */\n public point: Point3d;\n /** A context-specific numeric value. (E.g. a distance) */\n public a: number;\n /** Construct with empty data. */\n public constructor(surface?: UVSurface, uv?: Point2d, point?: Point3d) {\n this.surface = surface;\n this.point = point ? point : Point3d.createZero();\n this.uv = uv ? uv : Point2d.createZero();\n this.a = 0.0;\n }\n /**\n * Create a new detail structure.\n * @param surface\n * @param uv coordinates to copy (not capture) into the `detail.uv`\n * @param point coordinates to copy (not capture) into the `detail.point`\n */\n public static createSurfaceUVPoint(surface: UVSurface | undefined, uv: Point2d, point: Point3d): UVSurfaceLocationDetail {\n const detail = new UVSurfaceLocationDetail(surface);\n if (uv)\n detail.uv.setFrom(uv);\n detail.point.setFromPoint3d(point);\n return detail;\n }\n /**\n * Create a new detail structure.\n * @param surface\n * @param uv coordinates to copy (not capture) into the `detail.uv`\n * @param point coordinates to copy (not capture) into the `detail.point`\n */\n public static createSurfaceUVNumbersPoint(surface: UVSurface | undefined, u: number, v: number, point: Point3d): UVSurfaceLocationDetail {\n const detail = new UVSurfaceLocationDetail(surface);\n detail.uv.x = u;\n detail.uv.y = v;\n detail.point.setFromPoint3d(point);\n return detail;\n }\n\n}\n/**\n * Carrier for both curve and surface data, e.g. from intersection calculations.\n * @public\n */\nexport class CurveAndSurfaceLocationDetail {\n /** detailed location on the curve */\n public curveDetail: CurveLocationDetail;\n /** detailed location on the surface */\n public surfaceDetail: UVSurfaceLocationDetail;\n /** CAPTURE both details . . */\n public constructor(curveDetail: CurveLocationDetail, surfaceDetail: UVSurfaceLocationDetail) {\n this.curveDetail = curveDetail;\n this.surfaceDetail = surfaceDetail;\n }\n}\n"]}
@@ -10,7 +10,7 @@ import { GrowableXYZArrayCache } from "../geometry3d/ReusableObjectCache";
10
10
  /**
11
11
  * An AlternatingConvexClipTreeNode is a node in a tree structure in which
12
12
  * <ul>
13
- * <li>Each node contains a ConvexClipPlaneSet
13
+ * <li>Each node contains a ConvexClipPlaneSet.
14
14
  * <li>Each node contains an array of children which are also AlternatingConvexClipTreeNode.
15
15
  * <li>The rule for an in/out decision is that a point is IN the subtree under a node if
16
16
  * <ul>
@@ -43,27 +43,27 @@ export declare class AlternatingCCTreeNode implements PolygonClipper {
43
43
  * </ul>
44
44
  */
45
45
  static createTreeForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode;
46
- /**
47
- * Build the outer convex hull will inlets as first level children
48
- */
46
+ /** Build the outer convex hull with inlets as first level children. */
49
47
  static createHullAndInletsForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode;
50
48
  private extractLoopsGo;
51
49
  /**
52
50
  * Return an array with all the loops in the tree.
53
- * This looses the alternating structure of the tree, but the collection still matches well-formed polygons by parity rules.
51
+ * This loses the alternating structure of the tree, but the collection still matches well-formed polygons by
52
+ * parity rules.
54
53
  */
55
54
  extractLoops(): Point3d[][];
56
- /** Resets this AlternatingConvexClipTreeNode to a newly-created state */
55
+ /** Resets this AlternatingConvexClipTreeNode to a newly-created state. */
57
56
  empty(): void;
58
57
  /** Creates a deep copy of this node (expensive - copies Geometry, and is recursive for children array). */
59
58
  clone(result?: AlternatingCCTreeNode): AlternatingCCTreeNode;
60
59
  /** Add a new child that has an empty plane set and given indices. */
61
60
  addEmptyChild(index0: number, numPoints: number): void;
62
- /** Add a plane to the ConvexClipPlaneSet */
61
+ /** Add a plane to the ConvexClipPlaneSet. */
63
62
  addPlane(plane: ClipPlane): void;
64
63
  /** Search with alternating in and out semantics. */
65
64
  isPointOnOrInside(point: Point3d): boolean;
66
- /** Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
65
+ /**
66
+ * Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
67
67
  * * The child pointer is pushed directly to the tree -- not cloned.
68
68
  */
69
69
  captureConvexClipPlaneSetAsVoid(child: AlternatingCCTreeNode): void;
@@ -72,16 +72,14 @@ export declare class AlternatingCCTreeNode implements PolygonClipper {
72
72
  /** Append start-end positions for curve intervals classified as inside or outside. */
73
73
  appendCurveCollectionClipIntervals(curves: CurveCollection, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[]): void;
74
74
  /**
75
- *
76
- * @param xyz input polygon. This is not changed.
77
- * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
78
- * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
75
+ * @param xyz input polygon. This is not changed.
76
+ * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from
77
+ * the cache. This is NOT cleared.
78
+ * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed
79
+ * from the cache. This is NOT cleared.
79
80
  * @param arrayCache cache for reusable GrowableXYZArray.
80
81
  */
81
82
  appendPolygonClip(xyz: GrowableXYZArray, insideFragments: GrowableXYZArray[], outsideFragments: GrowableXYZArray[], arrayCache: GrowableXYZArrayCache): void;
82
- /**
83
- *
84
- */
85
83
  depth(): number;
86
84
  }
87
85
  /**
@@ -147,8 +145,8 @@ export declare class AlternatingCCTreeNodeCurveClipper {
147
145
  private static _fractionIntervals;
148
146
  private appendSingleClipToStack;
149
147
  /**
150
- * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack has clip for this node
151
- * (expensive -- must clone items of arrays during "swaps")
148
+ * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack
149
+ * has clip for this node (expensive -- must clone items of arrays during "swaps").
152
150
  */
153
151
  private recurse;
154
152
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AlternatingConvexClipTree.d.ts","sourceRoot":"","sources":["../../../src/clipping/AlternatingConvexClipTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlternatingConvexClipTree.d.ts","sourceRoot":"","sources":["../../../src/clipping/AlternatingConvexClipTree.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ const PointHelpers_1 = require("../geometry3d/PointHelpers");
27
27
  /**
28
28
  * An AlternatingConvexClipTreeNode is a node in a tree structure in which
29
29
  * <ul>
30
- * <li>Each node contains a ConvexClipPlaneSet
30
+ * <li>Each node contains a ConvexClipPlaneSet.
31
31
  * <li>Each node contains an array of children which are also AlternatingConvexClipTreeNode.
32
32
  * <li>The rule for an in/out decision is that a point is IN the subtree under a node if
33
33
  * <ul>
@@ -73,9 +73,7 @@ class AlternatingCCTreeNode {
73
73
  builder.buildHullTree(result); // <-- Currently ALWAYS returns true
74
74
  return result;
75
75
  }
76
- /**
77
- * Build the outer convex hull will inlets as first level children
78
- */
76
+ /** Build the outer convex hull with inlets as first level children. */
79
77
  static createHullAndInletsForPolygon(points, result) {
80
78
  result = result ? result : new AlternatingCCTreeNode();
81
79
  result.empty();
@@ -90,14 +88,15 @@ class AlternatingCCTreeNode {
90
88
  }
91
89
  /**
92
90
  * Return an array with all the loops in the tree.
93
- * This looses the alternating structure of the tree, but the collection still matches well-formed polygons by parity rules.
91
+ * This loses the alternating structure of the tree, but the collection still matches well-formed polygons by
92
+ * parity rules.
94
93
  */
95
94
  extractLoops() {
96
95
  const loops = [];
97
96
  this.extractLoopsGo(loops);
98
97
  return loops;
99
98
  }
100
- /** Resets this AlternatingConvexClipTreeNode to a newly-created state */
99
+ /** Resets this AlternatingConvexClipTreeNode to a newly-created state. */
101
100
  empty() {
102
101
  this.points.length = 0;
103
102
  this.planes.planes.length = 0;
@@ -124,7 +123,7 @@ class AlternatingCCTreeNode {
124
123
  const newNode = AlternatingCCTreeNode.createWithIndices(index0, numPoints);
125
124
  this.children.push(newNode);
126
125
  }
127
- /** Add a plane to the ConvexClipPlaneSet */
126
+ /** Add a plane to the ConvexClipPlaneSet. */
128
127
  addPlane(plane) {
129
128
  this.planes.addPlaneToConvexSet(plane);
130
129
  }
@@ -139,7 +138,8 @@ class AlternatingCCTreeNode {
139
138
  }
140
139
  return true;
141
140
  }
142
- /** Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
141
+ /**
142
+ * Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
143
143
  * * The child pointer is pushed directly to the tree -- not cloned.
144
144
  */
145
145
  captureConvexClipPlaneSetAsVoid(child) {
@@ -156,10 +156,11 @@ class AlternatingCCTreeNode {
156
156
  clipper.appendCurveCollectionClip(this, curves, insideIntervals, outsideIntervals);
157
157
  }
158
158
  /**
159
- *
160
- * @param xyz input polygon. This is not changed.
161
- * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
162
- * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
159
+ * @param xyz input polygon. This is not changed.
160
+ * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from
161
+ * the cache. This is NOT cleared.
162
+ * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed
163
+ * from the cache. This is NOT cleared.
163
164
  * @param arrayCache cache for reusable GrowableXYZArray.
164
165
  */
165
166
  appendPolygonClip(xyz, insideFragments, outsideFragments, arrayCache) {
@@ -192,9 +193,6 @@ class AlternatingCCTreeNode {
192
193
  }
193
194
  }
194
195
  }
195
- /**
196
- *
197
- */
198
196
  depth() {
199
197
  const myDepth = 1;
200
198
  let maxChildDepth = 0;
@@ -226,9 +224,15 @@ class AlternatingCCTreeBuilder {
226
224
  result._points.pop();
227
225
  return result;
228
226
  }
229
- get period() { return this._points.length; }
230
- indexAfter(i) { return (i + 1) % this._points.length; }
231
- indexBefore(i) { return (i + this._points.length - 1) % this._points.length; }
227
+ get period() {
228
+ return this._points.length;
229
+ }
230
+ indexAfter(i) {
231
+ return (i + 1) % this._points.length;
232
+ }
233
+ indexBefore(i) {
234
+ return (i + this._points.length - 1) % this._points.length;
235
+ }
232
236
  pushIndex(primaryPointIndex) {
233
237
  this._stack.push(primaryPointIndex);
234
238
  }
@@ -463,8 +467,8 @@ class AlternatingCCTreeNodeCurveClipper {
463
467
  return false;
464
468
  }
465
469
  /**
466
- * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack has clip for this node
467
- * (expensive -- must clone items of arrays during "swaps")
470
+ * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack
471
+ * has clip for this node (expensive -- must clone items of arrays during "swaps").
468
472
  */
469
473
  recurse(node) {
470
474
  this.pushEmptySegmentFrame();
@@ -1 +1 @@
1
- {"version":3,"file":"AlternatingConvexClipTree.js","sourceRoot":"","sources":["../../../src/clipping/AlternatingConvexClipTree.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 CartesianGeometry\r\n */\r\n\r\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CurveCollection } from \"../curve/CurveCollection\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../curve/CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../curve/LineString3d\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\nimport { Range1dArray } from \"../numerics/Range1dArray\";\r\nimport { ClipPlane } from \"./ClipPlane\";\r\nimport { ClipUtilities, PolygonClipper } from \"./ClipUtils\";\r\nimport { ConvexClipPlaneSet } from \"./ConvexClipPlaneSet\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\n\r\n/**\r\n * An AlternatingConvexClipTreeNode is a node in a tree structure in which\r\n * <ul>\r\n * <li>Each node contains a ConvexClipPlaneSet\r\n * <li>Each node contains an array of children which are also AlternatingConvexClipTreeNode.\r\n * <li>The rule for an in/out decision is that a point is IN the subtree under a node if\r\n * <ul>\r\n * <li>It is IN the node's ConvexClipPlaneSet.\r\n * <li>It is NOT IN any of the children.\r\n * </ul>\r\n * <li>Applying \"NOT IN any of the children\" locally to children at each level means that the ConvexClipPlaneSet\r\n * at adjacent levels flip between being positive areas and holes.\r\n * <li>Use an AlternatingConvexClipTreeNodeBuilder to construct the tree from a polygon.\r\n * <li>It is possible for the root clip plane set to be empty. An empty clip plane set returns \"true\"\r\n * for all point tests, so the meaning is just that holes are to be subtracted from the rest\r\n * of space.\r\n * <li>Although the interpretation of in/out alternates with tree levels, the ConvexClipPlaneSets\r\n * at each level are all \"enclosing\" planes in the usual way.\r\n * </ul>\r\n */\r\nexport class AlternatingCCTreeNode implements PolygonClipper {\r\n public points: Point3d[] = [];\r\n public planes: ConvexClipPlaneSet = ConvexClipPlaneSet.createEmpty();\r\n public children: AlternatingCCTreeNode[] = [];\r\n public startIdx: number = -1; // Start index into the master array (not the local points array)\r\n public numPoints: number = -1; // Number of points used in the master array\r\n\r\n private constructor() { }\r\n\r\n /** Initialize this node with index data referencing the parent polygon. */\r\n public static createWithIndices(index0: number, numPoints: number, result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\r\n result = result ? result : new AlternatingCCTreeNode();\r\n result.startIdx = index0;\r\n result.numPoints = numPoints;\r\n result.children.length = 0;\r\n return result;\r\n }\r\n\r\n /**\r\n * <ul>\r\n * <li>Build the tree for a polygon.\r\n * <li>Caller creates the root node with empty constructor AlternatingConvexClipTreeNode.\r\n * </ul>\r\n */\r\n public static createTreeForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\r\n result = result ? result : new AlternatingCCTreeNode();\r\n result.empty();\r\n const builder = AlternatingCCTreeBuilder.createPointsRef(points);\r\n builder.buildHullTree(result); // <-- Currently ALWAYS returns true\r\n return result;\r\n }\r\n\r\n /**\r\n * Build the outer convex hull will inlets as first level children\r\n */\r\n public static createHullAndInletsForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\r\n result = result ? result : new AlternatingCCTreeNode();\r\n result.empty();\r\n const builder = AlternatingCCTreeBuilder.createPointsRef(points);\r\n builder.buildHullAndInletsForPolygon(result); // <-- Currently ALWAYS returns true\r\n return result;\r\n }\r\n private extractLoopsGo(loops: Point3d[][]) {\r\n loops.push(Point3dArray.clonePoint3dArray(this.points));\r\n for (const c of this.children)\r\n c.extractLoopsGo(loops);\r\n }\r\n/**\r\n * Return an array with all the loops in the tree.\r\n * This looses the alternating structure of the tree, but the collection still matches well-formed polygons by parity rules.\r\n */\r\n public extractLoops(): Point3d[][]{\r\n const loops: Point3d[][] = [];\r\n this.extractLoopsGo(loops);\r\n return loops;\r\n }\r\n /** Resets this AlternatingConvexClipTreeNode to a newly-created state */\r\n public empty() {\r\n this.points.length = 0;\r\n this.planes.planes.length = 0;\r\n this.children.length = 0;\r\n this.startIdx = -1;\r\n this.numPoints = -1;\r\n }\r\n\r\n /** Creates a deep copy of this node (expensive - copies Geometry, and is recursive for children array). */\r\n public clone(result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\r\n result = result ? result : new AlternatingCCTreeNode();\r\n for (const point of this.points)\r\n result.points.push(point.clone());\r\n result.planes = ConvexClipPlaneSet.createEmpty();\r\n for (const plane of this.planes.planes)\r\n result.planes.planes.push(plane.clone());\r\n for (const node of this.children)\r\n result.children.push(node.clone());\r\n result.startIdx = this.startIdx;\r\n result.numPoints = this.numPoints;\r\n return result;\r\n }\r\n\r\n /** Add a new child that has an empty plane set and given indices. */\r\n public addEmptyChild(index0: number, numPoints: number) {\r\n const newNode = AlternatingCCTreeNode.createWithIndices(index0, numPoints);\r\n this.children.push(newNode);\r\n }\r\n\r\n /** Add a plane to the ConvexClipPlaneSet */\r\n public addPlane(plane: ClipPlane) {\r\n this.planes.addPlaneToConvexSet(plane);\r\n }\r\n\r\n /** Search with alternating in and out semantics. */\r\n public isPointOnOrInside(point: Point3d): boolean {\r\n const inRoot = this.planes.isPointOnOrInside(point, 0.0);\r\n if (!inRoot)\r\n return false;\r\n\r\n for (const child of this.children) {\r\n if (child.isPointOnOrInside(point))\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.\r\n * * The child pointer is pushed directly to the tree -- not cloned.\r\n */\r\n public captureConvexClipPlaneSetAsVoid(child: AlternatingCCTreeNode) {\r\n this.children.push(child);\r\n }\r\n\r\n /** Append start-end positions for curve intervals classified as inside or outside. */\r\n public appendCurvePrimitiveClipIntervals(curve: CurvePrimitive, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[]) {\r\n const clipper = new AlternatingCCTreeNodeCurveClipper();\r\n clipper.appendSingleClipPrimitive(this, curve, insideIntervals, outsideIntervals);\r\n }\r\n\r\n /** Append start-end positions for curve intervals classified as inside or outside. */\r\n public appendCurveCollectionClipIntervals(curves: CurveCollection, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[]) {\r\n const clipper = new AlternatingCCTreeNodeCurveClipper();\r\n clipper.appendCurveCollectionClip(this, curves, insideIntervals, outsideIntervals);\r\n }\r\n /**\r\n *\r\n * @param xyz input polygon. This is not changed.\r\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.\r\n * @param arrayCache cache for reusable GrowableXYZArray.\r\n */\r\n public appendPolygonClip(\r\n xyz: GrowableXYZArray,\r\n insideFragments: GrowableXYZArray[],\r\n outsideFragments: GrowableXYZArray[],\r\n arrayCache: GrowableXYZArrayCache): void {\r\n // At first level ..\r\n // newInside is subject to re-clip by children.\r\n // outside is definitively outside\r\n const oldOutsideCount = outsideFragments.length;\r\n const newInside = this.planes.clipInsidePushOutside(xyz, outsideFragments, arrayCache);\r\n if (newInside === undefined) {\r\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards (outsideFragments, oldOutsideCount, xyz, arrayCache);\r\n } else {\r\n let carryForwardA = [newInside];\r\n let carryForwardB: GrowableXYZArray[] = [];\r\n let tempAB;\r\n let shard;\r\n for (const c of this.children) {\r\n carryForwardB.length = 0;\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n // Anything inside this child is truly outside ...\r\n c.appendPolygonClip(shard, outsideFragments, carryForwardB, arrayCache);\r\n arrayCache.dropToCache(shard);\r\n }\r\n tempAB = carryForwardB;\r\n carryForwardB = carryForwardA; // and that is empty\r\n carryForwardA = tempAB;\r\n }\r\n while (undefined !== (shard = carryForwardA.pop())) {\r\n insideFragments.push(shard);\r\n }\r\n }\r\n }\r\n /**\r\n *\r\n */\r\n public depth(): number {\r\n const myDepth = 1;\r\n let maxChildDepth = 0;\r\n for (const c of this.children) {\r\n maxChildDepth = Math.max(maxChildDepth, c.depth());\r\n }\r\n return myDepth + maxChildDepth;\r\n }\r\n}\r\n/**\r\n * Context structure for building an AlternatingConvexClipTreeNode from a polygon.\r\n * <ul>\r\n * <li> The polygon is copied to the local m_points structure.\r\n * <li> During construction, m_stack contains indices of a sequence of points with uniform concavity.\r\n * </ul>\r\n */\r\nexport class AlternatingCCTreeBuilder {\r\n private _points: Point3d[] = [];\r\n private _stack: number[] = [];\r\n\r\n private constructor() { }\r\n\r\n public static createPointsRef(points: Point3d[], result?: AlternatingCCTreeBuilder): AlternatingCCTreeBuilder {\r\n result = result ? result : new AlternatingCCTreeBuilder();\r\n result._points = points;\r\n if (PolygonOps.areaXY(points) < 0.0)\r\n result._points.reverse();\r\n if (result._points[result._points.length - 1].isAlmostEqualMetric(result._points[0]))\r\n result._points.pop();\r\n return result;\r\n }\r\n\r\n public get period(): number { return this._points.length; }\r\n\r\n public indexAfter(i: number) { return (i + 1) % this._points.length; }\r\n public indexBefore(i: number) { return (i + this._points.length - 1) % this._points.length; }\r\n\r\n public pushIndex(primaryPointIndex: number) {\r\n this._stack.push(primaryPointIndex);\r\n }\r\n\r\n private static cross(pointA: Point3d, pointB: Point3d, pointC: Point3d): number {\r\n return pointA.crossProductToPointsXY(pointB, pointC);\r\n }\r\n /*\r\n public isInsideTurn(pointA: Point3d, pointB: Point3d, pointC: Point3d, sign: number) {\r\n return sign * AlternatingCCTreeBuilder.cross(pointA, pointB, pointC) > 0;\r\n }\r\n */\r\n public cyclicStackPoint(cyclicIndex: number): Point3d { // SIGNED index -- but negatives must be in first 10 periods?\r\n let stackIndex: number;\r\n const stack = this._stack;\r\n if (cyclicIndex > 0)\r\n stackIndex = cyclicIndex;\r\n else\r\n stackIndex = cyclicIndex + 10 * stack.length;\r\n stackIndex = stackIndex % stack.length;\r\n return this._points[stack[stackIndex]];\r\n }\r\n\r\n public signFromStackTip(pointIndex: number, sign: number) {\r\n const pointA = this.cyclicStackPoint(-2);\r\n const pointB = this.cyclicStackPoint(-1);\r\n const pointC = this._points[pointIndex];\r\n return sign * AlternatingCCTreeBuilder.cross(pointA, pointB, pointC) >= 0.0 ? 1 : -1;\r\n }\r\n\r\n /*\r\n * Test of xyz is in the convex region bounded by stack points:\r\n * <ul>\r\n * <li>polygon[i0]..polygon[i1]\r\n * <li>polygon[j0]..polygon[j1]\r\n * <li>polygon[i0]..polygon[i1]\r\n * </ul>\r\n * with \"inside\" controlled by sign multiplier.\r\n public isConvexContinuation(point: Point3d, i0: number, i1: number, j0: number, j1: number, sign: number): boolean {\r\n const points = this.points;\r\n const stack = this.stack;\r\n return this.isInsideTurn(points[stack[i0]], points[stack[i1]], point, sign)\r\n && this.isInsideTurn(points[stack[i0]], points[stack[j0]], point, sign)\r\n && this.isInsideTurn(points[stack[j1]], points[stack[i1]], point, sign);\r\n }\r\n */\r\n\r\n public get indexOfMaxX() {\r\n let k = 0;\r\n const points = this._points;\r\n const nPoints = this._points.length;\r\n for (let i = 1; i < nPoints; i++) {\r\n if (points[i].x > points[k].x)\r\n k = i;\r\n }\r\n return k;\r\n }\r\n\r\n /** Pop from the stack until the sign condition is satisfied */\r\n public extendHullChain(k: number, sign: number, pushAfterPops: boolean) {\r\n while (this._stack.length > 1 && this.signFromStackTip(k, sign) < 0.0)\r\n this._stack.pop();\r\n if (pushAfterPops)\r\n this.pushIndex(k);\r\n }\r\n\r\n public collectHullChain(kStart: number, numK: number, sign: number) {\r\n this._stack.length = 0;\r\n if (numK > 2) {\r\n let k = kStart;\r\n for (let i = 0; i < numK; i++) {\r\n this.extendHullChain(k, sign, true);\r\n k = this.indexAfter(k);\r\n }\r\n }\r\n }\r\n\r\n public collectHullPointsInArray(points: Point3d[], kStart: number, numK: number, _sign: number) {\r\n points.length = 0;\r\n if (numK > 2) {\r\n let k = kStart;\r\n for (let i = 0; i < numK; i++) {\r\n points.push(this._points[k]);\r\n k = this.indexAfter(k);\r\n }\r\n }\r\n }\r\n\r\n private buildHullTreeGo(root: AlternatingCCTreeNode, isPositiveArea: boolean, recurseToChildren: boolean = true): boolean {\r\n this.collectHullChain(root.startIdx, root.numPoints, isPositiveArea ? 1.0 : -1.0);\r\n root.points.length = 0;\r\n const stack = this._stack;\r\n const points = this._points;\r\n const stackLen = stack.length;\r\n\r\n for (let i = 0; i < stackLen; i++) {\r\n const k0 = stack[i];\r\n root.points.push(points[k0]);\r\n if (i + 1 < stackLen) {\r\n let k1 = stack[i + 1];\r\n if (k1 === this.indexAfter(k0)) {\r\n // two original points in sequence -- need a clip plane right here!!!\r\n const plane = ClipPlane.createEdgeAndUpVector(points[k0], points[k1], Vector3d.create(0, 0, 1), Angle.createRadians(0));\r\n if (plane !== undefined) {\r\n if (isPositiveArea)\r\n plane.negateInPlace();\r\n root.addPlane(plane);\r\n }\r\n } else {\r\n if (k1 < k0)\r\n k1 += this.period;\r\n root.addEmptyChild(k0, k1 - k0 + 1);\r\n }\r\n }\r\n }\r\n if (recurseToChildren){\r\n for (const child of root.children)\r\n this.buildHullTreeGo(child, !isPositiveArea);\r\n } else {\r\n for (const child of root.children)\r\n this.collectHullPointsInArray(child.points, child.startIdx, child.numPoints, isPositiveArea ? -1.0 : 1.0);\r\n\r\n }\r\n\r\n return true; // Are there failure modes? What happens with crossing data?..\r\n }\r\n\r\n /**\r\n * <ul>\r\n * <li> Input a ClipTreeRoot that has start and count data\r\n * <li> Build the hull for that data range\r\n * <li> Store the hull points in the root\r\n * <li> Add children with start and count data\r\n * <li> Recursively move to children\r\n * </ul>\r\n */\r\n public buildHullAndInletsForPolygon(root: AlternatingCCTreeNode): boolean {\r\n AlternatingCCTreeNode.createWithIndices(this.indexOfMaxX, this.period + 1, root);\r\n return this.buildHullTreeGo(root, true, false);\r\n }\r\n /**\r\n * <ul>\r\n * <li> Input a ClipTreeRoot that has start and count data\r\n * <li> Build the hull for that data range\r\n * <li> Store the hull points in the root\r\n * <li> Add children with start and count data\r\n * <li> Recursively move to children\r\n * </ul>\r\n */\r\n public buildHullTree(root: AlternatingCCTreeNode): boolean {\r\n AlternatingCCTreeNode.createWithIndices(this.indexOfMaxX, this.period + 1, root);\r\n return this.buildHullTreeGo(root, true);\r\n }\r\n\r\n}\r\n\r\nexport class AlternatingCCTreeNodeCurveClipper {\r\n private _curve: CurvePrimitive | undefined;\r\n private _intervalStack: Range1d[][];\r\n private _stackDepth: number;\r\n\r\n public constructor() {\r\n this._stackDepth = 0;\r\n this._intervalStack = [];\r\n }\r\n\r\n private setCurveRef(curve: CurvePrimitive) { this._curve = curve; }\r\n\r\n private popSegmentFrame() {\r\n if (this._stackDepth > 0) {\r\n this._topOfStack.length = 0; // formality.\r\n this._stackDepth -= 1;\r\n }\r\n }\r\n\r\n private clearSegmentStack() {\r\n while (this._stackDepth > 0)\r\n this.popSegmentFrame(); // and that will reduce stack depth\r\n }\r\n\r\n private pushEmptySegmentFrame() {\r\n this._stackDepth += 1;\r\n while (this._intervalStack.length < this._stackDepth)\r\n this._intervalStack.push([]);\r\n this._topOfStack.length = 0;\r\n }\r\n\r\n private get _topOfStack(): Range1d[] { return this._intervalStack[this._stackDepth - 1]; }\r\n // set the top of the stack (as defined by stackDepth -- not array length)\r\n private set _topOfStack(value: Range1d[]) {\r\n const n = this._stackDepth;\r\n if (n > 0)\r\n this._intervalStack[n - 1] = value;\r\n }\r\n\r\n /** Access entry [topOfStack() - numSkip] */\r\n private stackEntry(numSkip: number): Range1d[] {\r\n if (numSkip <= this._stackDepth)\r\n return this._intervalStack[this._stackDepth - 1 - numSkip];\r\n else\r\n return [];\r\n }\r\n\r\n private isTopOfStackEmpty(): boolean {\r\n return this._topOfStack.length === 0;\r\n }\r\n\r\n // Is re-used by method calls\r\n private static _fractionIntervals: number[] = [];\r\n\r\n private appendSingleClipToStack(planes: ConvexClipPlaneSet, insideSegments: Range1d[]): boolean {\r\n const fractionIntervals = AlternatingCCTreeNodeCurveClipper._fractionIntervals;\r\n\r\n if (this._curve instanceof LineSegment3d) {\r\n const segment = this._curve;\r\n let f0: number;\r\n let f1: number;\r\n if (segment.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => { f0 = a0; f1 = a1; })) {\r\n insideSegments.push(Range1d.createXX(f0!, f1!));\r\n }\r\n return true;\r\n\r\n } else if (this._curve instanceof Arc3d) {\r\n const arc = this._curve;\r\n fractionIntervals.length = 0;\r\n arc.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => {\r\n fractionIntervals.push(a0); fractionIntervals.push(a1);\r\n });\r\n for (let i = 0; i < fractionIntervals.length; i += 2)\r\n insideSegments.push(Range1d.createXX(fractionIntervals[i], fractionIntervals[i + 1]));\r\n return true;\r\n\r\n } else if (this._curve instanceof LineString3d && (this._curve).points.length > 1) {\r\n const linestring = this._curve;\r\n let f0: number;\r\n let f1: number;\r\n const nPoints = linestring.points.length;\r\n const df = 1.0 / (nPoints - 1);\r\n for (let i = 0; i < nPoints - 1; i++) {\r\n const segment = LineSegment3d.create(linestring.points[i], linestring.points[i + 1]);\r\n if (segment.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => { f0 = a0; f1 = a1; })) {\r\n insideSegments.push(Range1d.createXX((i + f0!) * df, (i + f1!) * df));\r\n }\r\n }\r\n return true;\r\n\r\n } else if (this._curve instanceof BSplineCurve3d) {\r\n const bcurve = this._curve;\r\n fractionIntervals.length = 0;\r\n bcurve.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => {\r\n fractionIntervals.push(a0); fractionIntervals.push(a1);\r\n });\r\n for (let i = 0; i < fractionIntervals.length; i += 2)\r\n insideSegments.push(Range1d.createXX(fractionIntervals[i], fractionIntervals[i + 1]));\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack has clip for this node\r\n * (expensive -- must clone items of arrays during \"swaps\")\r\n */\r\n private recurse(node: AlternatingCCTreeNode) {\r\n this.pushEmptySegmentFrame();\r\n this.appendSingleClipToStack(node.planes, this._topOfStack);\r\n Range1dArray.sort(this._topOfStack);\r\n if (this.isTopOfStackEmpty())\r\n return;\r\n\r\n for (const child of node.children) {\r\n this.recurse(child);\r\n if (!this.isTopOfStackEmpty()) {\r\n const ranges = Range1dArray.differenceSorted(this.stackEntry(1), this.stackEntry(0));\r\n this.popSegmentFrame();\r\n this._topOfStack = ranges;\r\n } else {\r\n this.popSegmentFrame();\r\n }\r\n if (this.isTopOfStackEmpty())\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Modifies the insideIntervals array given in place.\r\n * Note: curve given is passed by reference and stored.\r\n */\r\n public appendSingleClipPrimitive(root: AlternatingCCTreeNode, curve: CurvePrimitive,\r\n insideIntervals: CurveLocationDetailPair[], _outsideIntervals: CurveLocationDetailPair[]) {\r\n this.setCurveRef(curve);\r\n this.clearSegmentStack();\r\n this.recurse(root);\r\n if (this._stackDepth !== 1)\r\n return;\r\n\r\n const intervals = this._topOfStack;\r\n for (const interval of intervals) {\r\n const f0 = interval.low;\r\n const f1 = interval.high;\r\n const xyz0 = curve.fractionToPoint(f0);\r\n const xyz1 = curve.fractionToPoint(f1);\r\n insideIntervals.push(CurveLocationDetailPair.createCapture(\r\n CurveLocationDetail.createCurveFractionPoint(curve, f0, xyz0),\r\n CurveLocationDetail.createCurveFractionPoint(curve, f1, xyz1),\r\n ));\r\n }\r\n this.popSegmentFrame();\r\n }\r\n\r\n /**\r\n * Modifies the insideIntervals array given in place.\r\n * Note: curve given is passed by reference and stored.\r\n */\r\n public appendCurveCollectionClip(root: AlternatingCCTreeNode, curve: CurveCollection,\r\n insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[]) {\r\n for (const cp of curve.children!) {\r\n if (cp instanceof CurvePrimitive)\r\n this.appendSingleClipPrimitive(root, cp, insideIntervals, outsideIntervals);\r\n else if (cp instanceof CurveCollection)\r\n this.appendCurveCollectionClip(root, cp, insideIntervals, outsideIntervals);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AlternatingConvexClipTree.js","sourceRoot":"","sources":["../../../src/clipping/AlternatingConvexClipTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module CartesianGeometry\n */\n\nimport { BSplineCurve3d } from \"../bspline/BSplineCurve\";\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CurveCollection } from \"../curve/CurveCollection\";\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../curve/CurveLocationDetail\";\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { LineString3d } from \"../curve/LineString3d\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { PolygonOps } from \"../geometry3d/PolygonOps\";\nimport { Range1d } from \"../geometry3d/Range\";\nimport { Range1dArray } from \"../numerics/Range1dArray\";\nimport { ClipPlane } from \"./ClipPlane\";\nimport { ClipUtilities, PolygonClipper } from \"./ClipUtils\";\nimport { ConvexClipPlaneSet } from \"./ConvexClipPlaneSet\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { GrowableXYZArrayCache } from \"../geometry3d/ReusableObjectCache\";\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\n\n/**\n * An AlternatingConvexClipTreeNode is a node in a tree structure in which\n * <ul>\n * <li>Each node contains a ConvexClipPlaneSet.\n * <li>Each node contains an array of children which are also AlternatingConvexClipTreeNode.\n * <li>The rule for an in/out decision is that a point is IN the subtree under a node if\n * <ul>\n * <li>It is IN the node's ConvexClipPlaneSet.\n * <li>It is NOT IN any of the children.\n * </ul>\n * <li>Applying \"NOT IN any of the children\" locally to children at each level means that the ConvexClipPlaneSet\n * at adjacent levels flip between being positive areas and holes.\n * <li>Use an AlternatingConvexClipTreeNodeBuilder to construct the tree from a polygon.\n * <li>It is possible for the root clip plane set to be empty. An empty clip plane set returns \"true\"\n * for all point tests, so the meaning is just that holes are to be subtracted from the rest\n * of space.\n * <li>Although the interpretation of in/out alternates with tree levels, the ConvexClipPlaneSets\n * at each level are all \"enclosing\" planes in the usual way.\n * </ul>\n */\nexport class AlternatingCCTreeNode implements PolygonClipper {\n public points: Point3d[] = [];\n public planes: ConvexClipPlaneSet = ConvexClipPlaneSet.createEmpty();\n public children: AlternatingCCTreeNode[] = [];\n public startIdx: number = -1; // Start index into the master array (not the local points array)\n public numPoints: number = -1; // Number of points used in the master array\n\n private constructor() { }\n\n /** Initialize this node with index data referencing the parent polygon. */\n public static createWithIndices(index0: number, numPoints: number, result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\n result = result ? result : new AlternatingCCTreeNode();\n result.startIdx = index0;\n result.numPoints = numPoints;\n result.children.length = 0;\n return result;\n }\n /**\n * <ul>\n * <li>Build the tree for a polygon.\n * <li>Caller creates the root node with empty constructor AlternatingConvexClipTreeNode.\n * </ul>\n */\n public static createTreeForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\n result = result ? result : new AlternatingCCTreeNode();\n result.empty();\n const builder = AlternatingCCTreeBuilder.createPointsRef(points);\n builder.buildHullTree(result); // <-- Currently ALWAYS returns true\n return result;\n }\n /** Build the outer convex hull with inlets as first level children. */\n public static createHullAndInletsForPolygon(points: Point3d[], result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\n result = result ? result : new AlternatingCCTreeNode();\n result.empty();\n const builder = AlternatingCCTreeBuilder.createPointsRef(points);\n builder.buildHullAndInletsForPolygon(result); // <-- Currently ALWAYS returns true\n return result;\n }\n private extractLoopsGo(loops: Point3d[][]) {\n loops.push(Point3dArray.clonePoint3dArray(this.points));\n for (const c of this.children)\n c.extractLoopsGo(loops);\n }\n /**\n * Return an array with all the loops in the tree.\n * This loses the alternating structure of the tree, but the collection still matches well-formed polygons by\n * parity rules.\n */\n public extractLoops(): Point3d[][] {\n const loops: Point3d[][] = [];\n this.extractLoopsGo(loops);\n return loops;\n }\n /** Resets this AlternatingConvexClipTreeNode to a newly-created state. */\n public empty() {\n this.points.length = 0;\n this.planes.planes.length = 0;\n this.children.length = 0;\n this.startIdx = -1;\n this.numPoints = -1;\n }\n /** Creates a deep copy of this node (expensive - copies Geometry, and is recursive for children array). */\n public clone(result?: AlternatingCCTreeNode): AlternatingCCTreeNode {\n result = result ? result : new AlternatingCCTreeNode();\n for (const point of this.points)\n result.points.push(point.clone());\n result.planes = ConvexClipPlaneSet.createEmpty();\n for (const plane of this.planes.planes)\n result.planes.planes.push(plane.clone());\n for (const node of this.children)\n result.children.push(node.clone());\n result.startIdx = this.startIdx;\n result.numPoints = this.numPoints;\n return result;\n }\n /** Add a new child that has an empty plane set and given indices. */\n public addEmptyChild(index0: number, numPoints: number) {\n const newNode = AlternatingCCTreeNode.createWithIndices(index0, numPoints);\n this.children.push(newNode);\n }\n /** Add a plane to the ConvexClipPlaneSet. */\n public addPlane(plane: ClipPlane) {\n this.planes.addPlaneToConvexSet(plane);\n }\n /** Search with alternating in and out semantics. */\n public isPointOnOrInside(point: Point3d): boolean {\n const inRoot = this.planes.isPointOnOrInside(point, 0.0);\n if (!inRoot)\n return false;\n for (const child of this.children) {\n if (child.isPointOnOrInside(point))\n return false;\n }\n return true;\n }\n /**\n * Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.\n * * The child pointer is pushed directly to the tree -- not cloned.\n */\n public captureConvexClipPlaneSetAsVoid(child: AlternatingCCTreeNode) {\n this.children.push(child);\n }\n /** Append start-end positions for curve intervals classified as inside or outside. */\n public appendCurvePrimitiveClipIntervals(\n curve: CurvePrimitive, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[],\n ): void {\n const clipper = new AlternatingCCTreeNodeCurveClipper();\n clipper.appendSingleClipPrimitive(this, curve, insideIntervals, outsideIntervals);\n }\n /** Append start-end positions for curve intervals classified as inside or outside. */\n public appendCurveCollectionClipIntervals(\n curves: CurveCollection, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[],\n ): void {\n const clipper = new AlternatingCCTreeNodeCurveClipper();\n clipper.appendCurveCollectionClip(this, curves, insideIntervals, outsideIntervals);\n }\n /**\n * @param xyz input polygon. This is not changed.\n * @param insideFragments Array to receive \"inside\" fragments. Each fragment is a GrowableXYZArray grabbed from\n * the cache. This is NOT cleared.\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed\n * from the cache. This is NOT cleared.\n * @param arrayCache cache for reusable GrowableXYZArray.\n */\n public appendPolygonClip(\n xyz: GrowableXYZArray,\n insideFragments: GrowableXYZArray[],\n outsideFragments: GrowableXYZArray[],\n arrayCache: GrowableXYZArrayCache,\n ): void {\n // At first level ..\n // newInside is subject to re-clip by children.\n // outside is definitively outside\n const oldOutsideCount = outsideFragments.length;\n const newInside = this.planes.clipInsidePushOutside(xyz, outsideFragments, arrayCache);\n if (newInside === undefined) {\n ClipUtilities.restoreSingletonInPlaceOfMultipleShards(outsideFragments, oldOutsideCount, xyz, arrayCache);\n } else {\n let carryForwardA = [newInside];\n let carryForwardB: GrowableXYZArray[] = [];\n let tempAB;\n let shard;\n for (const c of this.children) {\n carryForwardB.length = 0;\n while (undefined !== (shard = carryForwardA.pop())) {\n // Anything inside this child is truly outside ...\n c.appendPolygonClip(shard, outsideFragments, carryForwardB, arrayCache);\n arrayCache.dropToCache(shard);\n }\n tempAB = carryForwardB;\n carryForwardB = carryForwardA; // and that is empty\n carryForwardA = tempAB;\n }\n while (undefined !== (shard = carryForwardA.pop())) {\n insideFragments.push(shard);\n }\n }\n }\n public depth(): number {\n const myDepth = 1;\n let maxChildDepth = 0;\n for (const c of this.children) {\n maxChildDepth = Math.max(maxChildDepth, c.depth());\n }\n return myDepth + maxChildDepth;\n }\n}\n\n/**\n * Context structure for building an AlternatingConvexClipTreeNode from a polygon.\n * <ul>\n * <li> The polygon is copied to the local m_points structure.\n * <li> During construction, m_stack contains indices of a sequence of points with uniform concavity.\n * </ul>\n */\nexport class AlternatingCCTreeBuilder {\n private _points: Point3d[] = [];\n private _stack: number[] = [];\n\n private constructor() { }\n\n public static createPointsRef(points: Point3d[], result?: AlternatingCCTreeBuilder): AlternatingCCTreeBuilder {\n result = result ? result : new AlternatingCCTreeBuilder();\n result._points = points;\n if (PolygonOps.areaXY(points) < 0.0)\n result._points.reverse();\n if (result._points[result._points.length - 1].isAlmostEqualMetric(result._points[0]))\n result._points.pop();\n return result;\n }\n public get period(): number {\n return this._points.length;\n }\n public indexAfter(i: number) {\n return (i + 1) % this._points.length;\n }\n public indexBefore(i: number) {\n return (i + this._points.length - 1) % this._points.length;\n }\n public pushIndex(primaryPointIndex: number) {\n this._stack.push(primaryPointIndex);\n }\n private static cross(pointA: Point3d, pointB: Point3d, pointC: Point3d): number {\n return pointA.crossProductToPointsXY(pointB, pointC);\n }\n /*\n public isInsideTurn(pointA: Point3d, pointB: Point3d, pointC: Point3d, sign: number) {\n return sign * AlternatingCCTreeBuilder.cross(pointA, pointB, pointC) > 0;\n }\n */\n public cyclicStackPoint(cyclicIndex: number): Point3d { // SIGNED index -- but negatives must be in first 10 periods?\n let stackIndex: number;\n const stack = this._stack;\n if (cyclicIndex > 0)\n stackIndex = cyclicIndex;\n else\n stackIndex = cyclicIndex + 10 * stack.length;\n stackIndex = stackIndex % stack.length;\n return this._points[stack[stackIndex]];\n }\n public signFromStackTip(pointIndex: number, sign: number) {\n const pointA = this.cyclicStackPoint(-2);\n const pointB = this.cyclicStackPoint(-1);\n const pointC = this._points[pointIndex];\n return sign * AlternatingCCTreeBuilder.cross(pointA, pointB, pointC) >= 0.0 ? 1 : -1;\n }\n /*\n * Test of xyz is in the convex region bounded by stack points:\n * <ul>\n * <li>polygon[i0]..polygon[i1]\n * <li>polygon[j0]..polygon[j1]\n * <li>polygon[i0]..polygon[i1]\n * </ul>\n * with \"inside\" controlled by sign multiplier.\n public isConvexContinuation(point: Point3d, i0: number, i1: number, j0: number, j1: number, sign: number): boolean {\n const points = this.points;\n const stack = this.stack;\n return this.isInsideTurn(points[stack[i0]], points[stack[i1]], point, sign)\n && this.isInsideTurn(points[stack[i0]], points[stack[j0]], point, sign)\n && this.isInsideTurn(points[stack[j1]], points[stack[i1]], point, sign);\n }\n */\n public get indexOfMaxX() {\n let k = 0;\n const points = this._points;\n const nPoints = this._points.length;\n for (let i = 1; i < nPoints; i++) {\n if (points[i].x > points[k].x)\n k = i;\n }\n return k;\n }\n /** Pop from the stack until the sign condition is satisfied */\n public extendHullChain(k: number, sign: number, pushAfterPops: boolean) {\n while (this._stack.length > 1 && this.signFromStackTip(k, sign) < 0.0)\n this._stack.pop();\n if (pushAfterPops)\n this.pushIndex(k);\n }\n public collectHullChain(kStart: number, numK: number, sign: number) {\n this._stack.length = 0;\n if (numK > 2) {\n let k = kStart;\n for (let i = 0; i < numK; i++) {\n this.extendHullChain(k, sign, true);\n k = this.indexAfter(k);\n }\n }\n }\n public collectHullPointsInArray(points: Point3d[], kStart: number, numK: number, _sign: number) {\n points.length = 0;\n if (numK > 2) {\n let k = kStart;\n for (let i = 0; i < numK; i++) {\n points.push(this._points[k]);\n k = this.indexAfter(k);\n }\n }\n }\n private buildHullTreeGo(\n root: AlternatingCCTreeNode, isPositiveArea: boolean, recurseToChildren: boolean = true,\n ): boolean {\n this.collectHullChain(root.startIdx, root.numPoints, isPositiveArea ? 1.0 : -1.0);\n root.points.length = 0;\n const stack = this._stack;\n const points = this._points;\n const stackLen = stack.length;\n\n for (let i = 0; i < stackLen; i++) {\n const k0 = stack[i];\n root.points.push(points[k0]);\n if (i + 1 < stackLen) {\n let k1 = stack[i + 1];\n if (k1 === this.indexAfter(k0)) {\n // two original points in sequence -- need a clip plane right here!!!\n const plane = ClipPlane.createEdgeAndUpVector(\n points[k0], points[k1], Vector3d.create(0, 0, 1), Angle.createRadians(0),\n );\n if (plane !== undefined) {\n if (isPositiveArea)\n plane.negateInPlace();\n root.addPlane(plane);\n }\n } else {\n if (k1 < k0)\n k1 += this.period;\n root.addEmptyChild(k0, k1 - k0 + 1);\n }\n }\n }\n if (recurseToChildren) {\n for (const child of root.children)\n this.buildHullTreeGo(child, !isPositiveArea);\n } else {\n for (const child of root.children)\n this.collectHullPointsInArray(child.points, child.startIdx, child.numPoints, isPositiveArea ? -1.0 : 1.0);\n }\n return true; // Are there failure modes? What happens with crossing data?..\n }\n /**\n * <ul>\n * <li> Input a ClipTreeRoot that has start and count data\n * <li> Build the hull for that data range\n * <li> Store the hull points in the root\n * <li> Add children with start and count data\n * <li> Recursively move to children\n * </ul>\n */\n public buildHullAndInletsForPolygon(root: AlternatingCCTreeNode): boolean {\n AlternatingCCTreeNode.createWithIndices(this.indexOfMaxX, this.period + 1, root);\n return this.buildHullTreeGo(root, true, false);\n }\n /**\n * <ul>\n * <li> Input a ClipTreeRoot that has start and count data\n * <li> Build the hull for that data range\n * <li> Store the hull points in the root\n * <li> Add children with start and count data\n * <li> Recursively move to children\n * </ul>\n */\n public buildHullTree(root: AlternatingCCTreeNode): boolean {\n AlternatingCCTreeNode.createWithIndices(this.indexOfMaxX, this.period + 1, root);\n return this.buildHullTreeGo(root, true);\n }\n}\n\nexport class AlternatingCCTreeNodeCurveClipper {\n private _curve: CurvePrimitive | undefined;\n private _intervalStack: Range1d[][];\n private _stackDepth: number;\n\n public constructor() {\n this._stackDepth = 0;\n this._intervalStack = [];\n }\n\n private setCurveRef(curve: CurvePrimitive) { this._curve = curve; }\n private popSegmentFrame() {\n if (this._stackDepth > 0) {\n this._topOfStack.length = 0; // formality.\n this._stackDepth -= 1;\n }\n }\n private clearSegmentStack() {\n while (this._stackDepth > 0)\n this.popSegmentFrame(); // and that will reduce stack depth\n }\n private pushEmptySegmentFrame() {\n this._stackDepth += 1;\n while (this._intervalStack.length < this._stackDepth)\n this._intervalStack.push([]);\n this._topOfStack.length = 0;\n }\n private get _topOfStack(): Range1d[] { return this._intervalStack[this._stackDepth - 1]; }\n // set the top of the stack (as defined by stackDepth -- not array length)\n private set _topOfStack(value: Range1d[]) {\n const n = this._stackDepth;\n if (n > 0)\n this._intervalStack[n - 1] = value;\n }\n /** Access entry [topOfStack() - numSkip] */\n private stackEntry(numSkip: number): Range1d[] {\n if (numSkip <= this._stackDepth)\n return this._intervalStack[this._stackDepth - 1 - numSkip];\n else\n return [];\n }\n private isTopOfStackEmpty(): boolean {\n return this._topOfStack.length === 0;\n }\n // Is re-used by method calls\n private static _fractionIntervals: number[] = [];\n private appendSingleClipToStack(planes: ConvexClipPlaneSet, insideSegments: Range1d[]): boolean {\n const fractionIntervals = AlternatingCCTreeNodeCurveClipper._fractionIntervals;\n\n if (this._curve instanceof LineSegment3d) {\n const segment = this._curve;\n let f0: number;\n let f1: number;\n if (segment.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => { f0 = a0; f1 = a1; })) {\n insideSegments.push(Range1d.createXX(f0!, f1!));\n }\n return true;\n\n } else if (this._curve instanceof Arc3d) {\n const arc = this._curve;\n fractionIntervals.length = 0;\n arc.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => {\n fractionIntervals.push(a0); fractionIntervals.push(a1);\n });\n for (let i = 0; i < fractionIntervals.length; i += 2)\n insideSegments.push(Range1d.createXX(fractionIntervals[i], fractionIntervals[i + 1]));\n return true;\n\n } else if (this._curve instanceof LineString3d && (this._curve).points.length > 1) {\n const linestring = this._curve;\n let f0: number;\n let f1: number;\n const nPoints = linestring.points.length;\n const df = 1.0 / (nPoints - 1);\n for (let i = 0; i < nPoints - 1; i++) {\n const segment = LineSegment3d.create(linestring.points[i], linestring.points[i + 1]);\n if (segment.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => { f0 = a0; f1 = a1; })) {\n insideSegments.push(Range1d.createXX((i + f0!) * df, (i + f1!) * df));\n }\n }\n return true;\n\n } else if (this._curve instanceof BSplineCurve3d) {\n const bcurve = this._curve;\n fractionIntervals.length = 0;\n bcurve.announceClipIntervals(planes, (a0: number, a1: number, _cp: CurvePrimitive) => {\n fractionIntervals.push(a0); fractionIntervals.push(a1);\n });\n for (let i = 0; i < fractionIntervals.length; i += 2)\n insideSegments.push(Range1d.createXX(fractionIntervals[i], fractionIntervals[i + 1]));\n return true;\n }\n\n return false;\n }\n /**\n * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack\n * has clip for this node (expensive -- must clone items of arrays during \"swaps\").\n */\n private recurse(node: AlternatingCCTreeNode) {\n this.pushEmptySegmentFrame();\n this.appendSingleClipToStack(node.planes, this._topOfStack);\n Range1dArray.sort(this._topOfStack);\n if (this.isTopOfStackEmpty())\n return;\n for (const child of node.children) {\n this.recurse(child);\n if (!this.isTopOfStackEmpty()) {\n const ranges = Range1dArray.differenceSorted(this.stackEntry(1), this.stackEntry(0));\n this.popSegmentFrame();\n this._topOfStack = ranges;\n } else {\n this.popSegmentFrame();\n }\n if (this.isTopOfStackEmpty())\n break;\n }\n }\n /**\n * Modifies the insideIntervals array given in place.\n * Note: curve given is passed by reference and stored.\n */\n public appendSingleClipPrimitive(root: AlternatingCCTreeNode, curve: CurvePrimitive,\n insideIntervals: CurveLocationDetailPair[], _outsideIntervals: CurveLocationDetailPair[]) {\n this.setCurveRef(curve);\n this.clearSegmentStack();\n this.recurse(root);\n if (this._stackDepth !== 1)\n return;\n const intervals = this._topOfStack;\n for (const interval of intervals) {\n const f0 = interval.low;\n const f1 = interval.high;\n const xyz0 = curve.fractionToPoint(f0);\n const xyz1 = curve.fractionToPoint(f1);\n insideIntervals.push(CurveLocationDetailPair.createCapture(\n CurveLocationDetail.createCurveFractionPoint(curve, f0, xyz0),\n CurveLocationDetail.createCurveFractionPoint(curve, f1, xyz1),\n ));\n }\n this.popSegmentFrame();\n }\n /**\n * Modifies the insideIntervals array given in place.\n * Note: curve given is passed by reference and stored.\n */\n public appendCurveCollectionClip(root: AlternatingCCTreeNode, curve: CurveCollection,\n insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[]) {\n for (const cp of curve.children!) {\n if (cp instanceof CurvePrimitive)\n this.appendSingleClipPrimitive(root, cp, insideIntervals, outsideIntervals);\n else if (cp instanceof CurveCollection)\n this.appendCurveCollectionClip(root, cp, insideIntervals, outsideIntervals);\n }\n }\n}\n"]}