@itwin/core-geometry 4.1.0-dev.7 → 4.1.0-dev.71

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 (614) hide show
  1. package/CHANGELOG.md +87 -1
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  4. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.js +2 -2
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineSurface.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.js +1 -1
  9. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  10. package/lib/cjs/bspline/BezierCurveBase.d.ts +1 -1
  11. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BezierCurveBase.js +2 -2
  13. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  14. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  15. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts +15 -17
  16. package/lib/cjs/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  17. package/lib/cjs/clipping/AlternatingConvexClipTree.js +24 -20
  18. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  19. package/lib/cjs/clipping/BooleanClipFactory.d.ts +28 -28
  20. package/lib/cjs/clipping/BooleanClipFactory.d.ts.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipFactory.js +28 -28
  22. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  23. package/lib/cjs/clipping/BooleanClipNode.d.ts +11 -11
  24. package/lib/cjs/clipping/BooleanClipNode.d.ts.map +1 -1
  25. package/lib/cjs/clipping/BooleanClipNode.js +11 -11
  26. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  27. package/lib/cjs/clipping/ClipPlane.d.ts +73 -76
  28. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  29. package/lib/cjs/clipping/ClipPlane.js +105 -86
  30. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  31. package/lib/cjs/clipping/ClipPrimitive.d.ts +78 -47
  32. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  33. package/lib/cjs/clipping/ClipPrimitive.js +112 -54
  34. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  35. package/lib/cjs/clipping/ClipUtils.d.ts +54 -44
  36. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  37. package/lib/cjs/clipping/ClipUtils.js +33 -29
  38. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  39. package/lib/cjs/clipping/ClipVector.d.ts +39 -25
  40. package/lib/cjs/clipping/ClipVector.d.ts.map +1 -1
  41. package/lib/cjs/clipping/ClipVector.js +35 -23
  42. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  43. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +61 -38
  44. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  45. package/lib/cjs/clipping/ConvexClipPlaneSet.js +64 -41
  46. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  47. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  48. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  49. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  50. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  51. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  52. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  53. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  54. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  55. package/lib/cjs/core-geometry.d.ts +3 -1
  56. package/lib/cjs/core-geometry.d.ts.map +1 -1
  57. package/lib/cjs/core-geometry.js +3 -1
  58. package/lib/cjs/core-geometry.js.map +1 -1
  59. package/lib/cjs/curve/Arc3d.d.ts +2 -1
  60. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  61. package/lib/cjs/curve/Arc3d.js +3 -2
  62. package/lib/cjs/curve/Arc3d.js.map +1 -1
  63. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  64. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  65. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +71 -48
  66. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  67. package/lib/cjs/curve/CurveCollection.d.ts +36 -26
  68. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  69. package/lib/cjs/curve/CurveCollection.js +46 -39
  70. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  71. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  72. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  73. package/lib/cjs/curve/CurveFactory.d.ts +67 -3
  74. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  75. package/lib/cjs/curve/CurveFactory.js +75 -7
  76. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  77. package/lib/cjs/curve/CurveLocationDetail.d.ts +6 -6
  78. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  79. package/lib/cjs/curve/CurveLocationDetail.js +9 -7
  80. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  81. package/lib/cjs/curve/CurveOps.d.ts +77 -0
  82. package/lib/cjs/curve/CurveOps.d.ts.map +1 -0
  83. package/lib/cjs/curve/CurveOps.js +160 -0
  84. package/lib/cjs/curve/CurveOps.js.map +1 -0
  85. package/lib/cjs/curve/CurvePrimitive.d.ts +21 -18
  86. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  87. package/lib/cjs/curve/CurvePrimitive.js +4 -3
  88. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  89. package/lib/cjs/curve/GeometryQuery.d.ts +2 -2
  90. package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
  91. package/lib/cjs/curve/GeometryQuery.js +2 -2
  92. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  93. package/lib/cjs/curve/LineSegment3d.d.ts +7 -5
  94. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  95. package/lib/cjs/curve/LineSegment3d.js +6 -6
  96. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  97. package/lib/cjs/curve/LineString3d.d.ts +2 -2
  98. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  99. package/lib/cjs/curve/LineString3d.js +3 -3
  100. package/lib/cjs/curve/LineString3d.js.map +1 -1
  101. package/lib/cjs/curve/Loop.d.ts +7 -5
  102. package/lib/cjs/curve/Loop.d.ts.map +1 -1
  103. package/lib/cjs/curve/Loop.js +18 -6
  104. package/lib/cjs/curve/Loop.js.map +1 -1
  105. package/lib/cjs/curve/OffsetOptions.d.ts +97 -0
  106. package/lib/cjs/curve/OffsetOptions.d.ts.map +1 -0
  107. package/lib/cjs/curve/OffsetOptions.js +166 -0
  108. package/lib/cjs/curve/OffsetOptions.js.map +1 -0
  109. package/lib/cjs/curve/ParityRegion.d.ts +7 -7
  110. package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
  111. package/lib/cjs/curve/ParityRegion.js +19 -11
  112. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  113. package/lib/cjs/curve/Path.d.ts +6 -6
  114. package/lib/cjs/curve/Path.d.ts.map +1 -1
  115. package/lib/cjs/curve/Path.js +15 -9
  116. package/lib/cjs/curve/Path.js.map +1 -1
  117. package/lib/cjs/curve/ProxyCurve.d.ts +5 -7
  118. package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
  119. package/lib/cjs/curve/ProxyCurve.js +7 -7
  120. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  121. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  122. package/lib/cjs/curve/RegionOps.d.ts +76 -56
  123. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  124. package/lib/cjs/curve/RegionOps.js +83 -60
  125. package/lib/cjs/curve/RegionOps.js.map +1 -1
  126. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +2 -2
  127. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  128. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  129. package/lib/cjs/curve/StrokeOptions.js +6 -2
  130. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  131. package/lib/cjs/curve/UnionRegion.d.ts +6 -5
  132. package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
  133. package/lib/cjs/curve/UnionRegion.js +17 -8
  134. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  135. package/lib/cjs/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  136. package/lib/cjs/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  137. package/lib/cjs/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  138. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  139. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
  140. package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  141. package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
  142. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  143. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  144. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  145. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +130 -220
  146. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  147. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  148. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  149. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  150. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  151. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  152. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  153. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +89 -178
  154. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  155. package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  156. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
  157. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  158. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +1 -1
  159. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  160. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  161. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  162. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +2 -2
  163. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  164. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +1 -1
  165. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  166. package/lib/cjs/geometry3d/Angle.d.ts +9 -0
  167. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  168. package/lib/cjs/geometry3d/Angle.js +13 -0
  169. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  170. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  171. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  172. package/lib/cjs/geometry3d/BilinearPatch.d.ts +43 -48
  173. package/lib/cjs/geometry3d/BilinearPatch.d.ts.map +1 -1
  174. package/lib/cjs/geometry3d/BilinearPatch.js +51 -55
  175. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  176. package/lib/cjs/geometry3d/Ellipsoid.d.ts +1 -1
  177. package/lib/cjs/geometry3d/Ellipsoid.js +1 -1
  178. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  179. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  180. package/lib/cjs/geometry3d/FrameBuilder.js +13 -11
  181. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  182. package/lib/cjs/geometry3d/GeometryHandler.d.ts +5 -5
  183. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  184. package/lib/cjs/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  185. package/lib/cjs/geometry3d/GrowableBlockedArray.js +1 -1
  186. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  187. package/lib/cjs/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  188. package/lib/cjs/geometry3d/GrowableFloat64Array.js +1 -1
  189. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  190. package/lib/cjs/geometry3d/Matrix3d.d.ts +18 -0
  191. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  192. package/lib/cjs/geometry3d/Matrix3d.js +32 -5
  193. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  194. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  195. package/lib/cjs/geometry3d/Plane3d.d.ts +41 -32
  196. package/lib/cjs/geometry3d/Plane3d.d.ts.map +1 -1
  197. package/lib/cjs/geometry3d/Plane3d.js +11 -8
  198. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  199. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  200. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  201. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  202. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  203. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  204. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  205. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  206. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  207. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +8 -9
  208. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  209. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -10
  210. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  211. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  212. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +12 -4
  213. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  214. package/lib/cjs/geometry3d/Point3dVector3d.js +18 -5
  215. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  216. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  217. package/lib/cjs/geometry3d/PointHelpers.js +5 -5
  218. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  219. package/lib/cjs/geometry3d/PolygonOps.d.ts +1 -2
  220. package/lib/cjs/geometry3d/PolygonOps.d.ts.map +1 -1
  221. package/lib/cjs/geometry3d/PolygonOps.js +2 -3
  222. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  223. package/lib/cjs/geometry3d/PolylineOps.d.ts +16 -1
  224. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  225. package/lib/cjs/geometry3d/PolylineOps.js +55 -0
  226. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  227. package/lib/cjs/geometry3d/Range.d.ts +134 -94
  228. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  229. package/lib/cjs/geometry3d/Range.js +297 -145
  230. package/lib/cjs/geometry3d/Range.js.map +1 -1
  231. package/lib/cjs/geometry3d/Ray2d.d.ts +69 -0
  232. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -0
  233. package/lib/cjs/geometry3d/Ray2d.js +146 -0
  234. package/lib/cjs/geometry3d/Ray2d.js.map +1 -0
  235. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  236. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  237. package/lib/cjs/geometry3d/Transform.d.ts +10 -3
  238. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  239. package/lib/cjs/geometry3d/Transform.js +18 -6
  240. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  241. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  242. package/lib/cjs/numerics/ConvexPolygon2d.d.ts +7 -49
  243. package/lib/cjs/numerics/ConvexPolygon2d.d.ts.map +1 -1
  244. package/lib/cjs/numerics/ConvexPolygon2d.js +16 -107
  245. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  246. package/lib/cjs/numerics/Newton.js.map +1 -1
  247. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  248. package/lib/cjs/numerics/Polynomials.js +0 -2
  249. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  250. package/lib/cjs/numerics/Quadrature.js +5 -5
  251. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  252. package/lib/cjs/polyface/IndexedEdgeMatcher.js +1 -1
  253. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  254. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  255. package/lib/cjs/polyface/PolyfaceBuilder.js +2 -2
  256. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  257. package/lib/cjs/polyface/PolyfaceQuery.d.ts +73 -12
  258. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  259. package/lib/cjs/polyface/PolyfaceQuery.js +117 -31
  260. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  261. package/lib/cjs/polyface/TaggedNumericData.js +1 -1
  262. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  263. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  264. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  265. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  266. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts +11 -0
  267. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  268. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +79 -1
  269. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  270. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  271. package/lib/cjs/serialization/GeometrySamples.d.ts +11 -0
  272. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  273. package/lib/cjs/serialization/GeometrySamples.js +30 -0
  274. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  275. package/lib/cjs/serialization/IModelJsonSchema.d.ts +2 -7
  276. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  277. package/lib/cjs/serialization/IModelJsonSchema.js +2 -7
  278. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  279. package/lib/cjs/solid/LinearSweep.d.ts +2 -1
  280. package/lib/cjs/solid/LinearSweep.d.ts.map +1 -1
  281. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  282. package/lib/cjs/solid/RotationalSweep.d.ts +2 -1
  283. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  284. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  285. package/lib/cjs/solid/RuledSweep.d.ts +2 -1
  286. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  287. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  288. package/lib/cjs/solid/SweepContour.d.ts +2 -2
  289. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  290. package/lib/cjs/solid/SweepContour.js +9 -0
  291. package/lib/cjs/solid/SweepContour.js.map +1 -1
  292. package/lib/cjs/topology/ChainMerge.js +1 -1
  293. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  294. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  295. package/lib/cjs/topology/HalfEdgeGraphSearch.js +1 -1
  296. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  297. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +1 -1
  298. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  299. package/lib/cjs/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  300. package/lib/cjs/topology/HalfEdgePriorityQueue.js +1 -1
  301. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  302. package/lib/cjs/topology/RegularizeFace.js +3 -3
  303. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  304. package/lib/cjs/topology/Triangulation.js +1 -1
  305. package/lib/cjs/topology/Triangulation.js.map +1 -1
  306. package/lib/esm/Geometry.js.map +1 -1
  307. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  308. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  309. package/lib/esm/bspline/BSplineCurve.js +1 -1
  310. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  311. package/lib/esm/bspline/BSplineSurface.d.ts.map +1 -1
  312. package/lib/esm/bspline/BSplineSurface.js +1 -1
  313. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  314. package/lib/esm/bspline/BezierCurveBase.d.ts +1 -1
  315. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  316. package/lib/esm/bspline/BezierCurveBase.js +1 -1
  317. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  318. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  319. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts +15 -17
  320. package/lib/esm/clipping/AlternatingConvexClipTree.d.ts.map +1 -1
  321. package/lib/esm/clipping/AlternatingConvexClipTree.js +24 -20
  322. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  323. package/lib/esm/clipping/BooleanClipFactory.d.ts +28 -28
  324. package/lib/esm/clipping/BooleanClipFactory.d.ts.map +1 -1
  325. package/lib/esm/clipping/BooleanClipFactory.js +28 -28
  326. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  327. package/lib/esm/clipping/BooleanClipNode.d.ts +11 -11
  328. package/lib/esm/clipping/BooleanClipNode.d.ts.map +1 -1
  329. package/lib/esm/clipping/BooleanClipNode.js +11 -11
  330. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  331. package/lib/esm/clipping/ClipPlane.d.ts +73 -76
  332. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  333. package/lib/esm/clipping/ClipPlane.js +105 -86
  334. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  335. package/lib/esm/clipping/ClipPrimitive.d.ts +78 -47
  336. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  337. package/lib/esm/clipping/ClipPrimitive.js +112 -54
  338. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  339. package/lib/esm/clipping/ClipUtils.d.ts +54 -44
  340. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  341. package/lib/esm/clipping/ClipUtils.js +33 -29
  342. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  343. package/lib/esm/clipping/ClipVector.d.ts +39 -25
  344. package/lib/esm/clipping/ClipVector.d.ts.map +1 -1
  345. package/lib/esm/clipping/ClipVector.js +35 -23
  346. package/lib/esm/clipping/ClipVector.js.map +1 -1
  347. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +61 -38
  348. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  349. package/lib/esm/clipping/ConvexClipPlaneSet.js +64 -41
  350. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  351. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts +49 -30
  352. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.d.ts.map +1 -1
  353. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +50 -30
  354. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  355. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts +2 -2
  356. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.d.ts.map +1 -1
  357. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +2 -2
  358. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  359. package/lib/esm/core-geometry.d.ts +3 -1
  360. package/lib/esm/core-geometry.d.ts.map +1 -1
  361. package/lib/esm/core-geometry.js +3 -1
  362. package/lib/esm/core-geometry.js.map +1 -1
  363. package/lib/esm/curve/Arc3d.d.ts +2 -1
  364. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  365. package/lib/esm/curve/Arc3d.js +2 -1
  366. package/lib/esm/curve/Arc3d.js.map +1 -1
  367. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +62 -42
  368. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  369. package/lib/esm/curve/CurveChainWithDistanceIndex.js +70 -47
  370. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  371. package/lib/esm/curve/CurveCollection.d.ts +36 -26
  372. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  373. package/lib/esm/curve/CurveCollection.js +46 -39
  374. package/lib/esm/curve/CurveCollection.js.map +1 -1
  375. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  376. package/lib/esm/curve/CurveCurve.js.map +1 -1
  377. package/lib/esm/curve/CurveFactory.d.ts +67 -3
  378. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  379. package/lib/esm/curve/CurveFactory.js +74 -6
  380. package/lib/esm/curve/CurveFactory.js.map +1 -1
  381. package/lib/esm/curve/CurveLocationDetail.d.ts +6 -6
  382. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  383. package/lib/esm/curve/CurveLocationDetail.js +9 -7
  384. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  385. package/lib/esm/curve/CurveOps.d.ts +77 -0
  386. package/lib/esm/curve/CurveOps.d.ts.map +1 -0
  387. package/lib/esm/curve/CurveOps.js +156 -0
  388. package/lib/esm/curve/CurveOps.js.map +1 -0
  389. package/lib/esm/curve/CurvePrimitive.d.ts +21 -18
  390. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  391. package/lib/esm/curve/CurvePrimitive.js +4 -3
  392. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  393. package/lib/esm/curve/GeometryQuery.d.ts +2 -2
  394. package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
  395. package/lib/esm/curve/GeometryQuery.js +2 -2
  396. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  397. package/lib/esm/curve/LineSegment3d.d.ts +7 -5
  398. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  399. package/lib/esm/curve/LineSegment3d.js +5 -5
  400. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  401. package/lib/esm/curve/LineString3d.d.ts +2 -2
  402. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  403. package/lib/esm/curve/LineString3d.js +2 -2
  404. package/lib/esm/curve/LineString3d.js.map +1 -1
  405. package/lib/esm/curve/Loop.d.ts +7 -5
  406. package/lib/esm/curve/Loop.d.ts.map +1 -1
  407. package/lib/esm/curve/Loop.js +18 -6
  408. package/lib/esm/curve/Loop.js.map +1 -1
  409. package/lib/esm/curve/OffsetOptions.d.ts +97 -0
  410. package/lib/esm/curve/OffsetOptions.d.ts.map +1 -0
  411. package/lib/esm/curve/OffsetOptions.js +161 -0
  412. package/lib/esm/curve/OffsetOptions.js.map +1 -0
  413. package/lib/esm/curve/ParityRegion.d.ts +7 -7
  414. package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
  415. package/lib/esm/curve/ParityRegion.js +19 -11
  416. package/lib/esm/curve/ParityRegion.js.map +1 -1
  417. package/lib/esm/curve/Path.d.ts +6 -6
  418. package/lib/esm/curve/Path.d.ts.map +1 -1
  419. package/lib/esm/curve/Path.js +15 -9
  420. package/lib/esm/curve/Path.js.map +1 -1
  421. package/lib/esm/curve/ProxyCurve.d.ts +5 -7
  422. package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
  423. package/lib/esm/curve/ProxyCurve.js +7 -7
  424. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  425. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  426. package/lib/esm/curve/RegionOps.d.ts +76 -56
  427. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  428. package/lib/esm/curve/RegionOps.js +84 -61
  429. package/lib/esm/curve/RegionOps.js.map +1 -1
  430. package/lib/esm/curve/RegionOpsClassificationSweeps.js +2 -2
  431. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  432. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  433. package/lib/esm/curve/StrokeOptions.js +6 -2
  434. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  435. package/lib/esm/curve/UnionRegion.d.ts +6 -5
  436. package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
  437. package/lib/esm/curve/UnionRegion.js +17 -8
  438. package/lib/esm/curve/UnionRegion.js.map +1 -1
  439. package/lib/esm/curve/{ChainCollectorContext.d.ts → internalContexts/ChainCollectorContext.d.ts} +4 -4
  440. package/lib/esm/curve/internalContexts/ChainCollectorContext.d.ts.map +1 -0
  441. package/lib/esm/curve/{ChainCollectorContext.js → internalContexts/ChainCollectorContext.js} +4 -4
  442. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -0
  443. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
  444. package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
  445. package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
  446. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  447. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +59 -70
  448. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  449. package/lib/esm/curve/internalContexts/MultiChainCollector.js +129 -218
  450. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  451. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
  452. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
  453. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
  454. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  455. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts +23 -95
  456. package/lib/esm/curve/internalContexts/PolygonOffsetContext.d.ts.map +1 -1
  457. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +86 -173
  458. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  459. package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
  460. package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
  461. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  462. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +1 -1
  463. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  464. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +1 -1
  465. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  466. package/lib/esm/curve/spiral/TransitionSpiral3d.js +1 -1
  467. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  468. package/lib/esm/curve/spiral/XYCurveEvaluator.js +1 -1
  469. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  470. package/lib/esm/geometry3d/Angle.d.ts +9 -0
  471. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  472. package/lib/esm/geometry3d/Angle.js +13 -0
  473. package/lib/esm/geometry3d/Angle.js.map +1 -1
  474. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  475. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  476. package/lib/esm/geometry3d/BilinearPatch.d.ts +43 -48
  477. package/lib/esm/geometry3d/BilinearPatch.d.ts.map +1 -1
  478. package/lib/esm/geometry3d/BilinearPatch.js +51 -55
  479. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  480. package/lib/esm/geometry3d/Ellipsoid.d.ts +1 -1
  481. package/lib/esm/geometry3d/Ellipsoid.js +1 -1
  482. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  483. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  484. package/lib/esm/geometry3d/FrameBuilder.js +13 -11
  485. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  486. package/lib/esm/geometry3d/GeometryHandler.d.ts +5 -5
  487. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  488. package/lib/esm/geometry3d/GrowableBlockedArray.d.ts.map +1 -1
  489. package/lib/esm/geometry3d/GrowableBlockedArray.js +1 -1
  490. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  491. package/lib/esm/geometry3d/GrowableFloat64Array.d.ts.map +1 -1
  492. package/lib/esm/geometry3d/GrowableFloat64Array.js +1 -1
  493. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  494. package/lib/esm/geometry3d/Matrix3d.d.ts +18 -0
  495. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  496. package/lib/esm/geometry3d/Matrix3d.js +32 -5
  497. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  498. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  499. package/lib/esm/geometry3d/Plane3d.d.ts +41 -32
  500. package/lib/esm/geometry3d/Plane3d.d.ts.map +1 -1
  501. package/lib/esm/geometry3d/Plane3d.js +11 -8
  502. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  503. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +37 -34
  504. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  505. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +65 -43
  506. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  507. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +36 -32
  508. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts.map +1 -1
  509. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +37 -32
  510. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  511. package/lib/esm/geometry3d/Point2dVector2d.d.ts +8 -9
  512. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  513. package/lib/esm/geometry3d/Point2dVector2d.js +9 -10
  514. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  515. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  516. package/lib/esm/geometry3d/Point3dVector3d.d.ts +12 -4
  517. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  518. package/lib/esm/geometry3d/Point3dVector3d.js +18 -5
  519. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  520. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  521. package/lib/esm/geometry3d/PointHelpers.js +5 -5
  522. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  523. package/lib/esm/geometry3d/PolygonOps.d.ts +1 -2
  524. package/lib/esm/geometry3d/PolygonOps.d.ts.map +1 -1
  525. package/lib/esm/geometry3d/PolygonOps.js +2 -3
  526. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  527. package/lib/esm/geometry3d/PolylineOps.d.ts +16 -1
  528. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  529. package/lib/esm/geometry3d/PolylineOps.js +56 -1
  530. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  531. package/lib/esm/geometry3d/Range.d.ts +134 -94
  532. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  533. package/lib/esm/geometry3d/Range.js +297 -145
  534. package/lib/esm/geometry3d/Range.js.map +1 -1
  535. package/lib/esm/geometry3d/Ray2d.d.ts +69 -0
  536. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -0
  537. package/lib/esm/geometry3d/Ray2d.js +142 -0
  538. package/lib/esm/geometry3d/Ray2d.js.map +1 -0
  539. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  540. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  541. package/lib/esm/geometry3d/Transform.d.ts +10 -3
  542. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  543. package/lib/esm/geometry3d/Transform.js +18 -6
  544. package/lib/esm/geometry3d/Transform.js.map +1 -1
  545. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  546. package/lib/esm/numerics/ConvexPolygon2d.d.ts +7 -49
  547. package/lib/esm/numerics/ConvexPolygon2d.d.ts.map +1 -1
  548. package/lib/esm/numerics/ConvexPolygon2d.js +14 -104
  549. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  550. package/lib/esm/numerics/Newton.js.map +1 -1
  551. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  552. package/lib/esm/numerics/Polynomials.js +0 -2
  553. package/lib/esm/numerics/Polynomials.js.map +1 -1
  554. package/lib/esm/numerics/Quadrature.js +5 -5
  555. package/lib/esm/numerics/Quadrature.js.map +1 -1
  556. package/lib/esm/polyface/IndexedEdgeMatcher.js +1 -1
  557. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  558. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  559. package/lib/esm/polyface/PolyfaceBuilder.js +2 -2
  560. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  561. package/lib/esm/polyface/PolyfaceQuery.d.ts +73 -12
  562. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  563. package/lib/esm/polyface/PolyfaceQuery.js +117 -32
  564. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  565. package/lib/esm/polyface/TaggedNumericData.js +1 -1
  566. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  567. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +2 -2
  568. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  569. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  570. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts +11 -0
  571. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.d.ts.map +1 -1
  572. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +78 -1
  573. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  574. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  575. package/lib/esm/serialization/GeometrySamples.d.ts +11 -0
  576. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  577. package/lib/esm/serialization/GeometrySamples.js +30 -0
  578. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  579. package/lib/esm/serialization/IModelJsonSchema.d.ts +2 -7
  580. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  581. package/lib/esm/serialization/IModelJsonSchema.js +2 -7
  582. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  583. package/lib/esm/solid/LinearSweep.d.ts +2 -1
  584. package/lib/esm/solid/LinearSweep.d.ts.map +1 -1
  585. package/lib/esm/solid/LinearSweep.js.map +1 -1
  586. package/lib/esm/solid/RotationalSweep.d.ts +2 -1
  587. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  588. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  589. package/lib/esm/solid/RuledSweep.d.ts +2 -1
  590. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  591. package/lib/esm/solid/RuledSweep.js.map +1 -1
  592. package/lib/esm/solid/SweepContour.d.ts +2 -2
  593. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  594. package/lib/esm/solid/SweepContour.js +9 -0
  595. package/lib/esm/solid/SweepContour.js.map +1 -1
  596. package/lib/esm/topology/ChainMerge.js +1 -1
  597. package/lib/esm/topology/ChainMerge.js.map +1 -1
  598. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  599. package/lib/esm/topology/HalfEdgeGraphSearch.js +1 -1
  600. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  601. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +1 -1
  602. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  603. package/lib/esm/topology/HalfEdgePriorityQueue.d.ts.map +1 -1
  604. package/lib/esm/topology/HalfEdgePriorityQueue.js +1 -1
  605. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  606. package/lib/esm/topology/RegularizeFace.js +3 -3
  607. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  608. package/lib/esm/topology/Triangulation.js +1 -1
  609. package/lib/esm/topology/Triangulation.js.map +1 -1
  610. package/package.json +6 -17
  611. package/lib/cjs/curve/ChainCollectorContext.d.ts.map +0 -1
  612. package/lib/cjs/curve/ChainCollectorContext.js.map +0 -1
  613. package/lib/esm/curve/ChainCollectorContext.d.ts.map +0 -1
  614. package/lib/esm/curve/ChainCollectorContext.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"InterpolationCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.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 { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\r\nimport { BSplineCurve3d } from \"./BSplineCurve\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { XYZProps } from \"../geometry3d/XYZProps\";\r\n\r\n/**\r\n * fitPoints and end condition data for [[InterpolationCurve3d]]\r\n * * This is a \"json compatible\" version of [[InterpolationCurve3dOptions]]\r\n * @public\r\n */\r\nexport interface InterpolationCurve3dProps {\r\n /** order of the computed bspline (one more than degree) */\r\n order?: number;\r\n /** true if the B-spline construction should be periodic */\r\n closed?: boolean;\r\n /** if closed and no knots, compute chord length knots (1) or uniform knots (0). Chord length knots give best fit. */\r\n isChordLenKnots?: number;\r\n /** if !closed but first and last fitPoints are equal, pivot computed start/end tangent(s) so that they are colinear (1) or leave them be (0). */\r\n isColinearTangents?: number;\r\n /** if !closed and start/endTangent is given, set its magnitude to the first/last fit point chord length (1) or to the magnitude of the Bessel tangent (0). Bessel gives best fit. */\r\n isChordLenTangents?: number;\r\n /** if !closed and start/endTangent is absent, compute it using the natural end condition (1) or Bessel (0). Bessel gives best fit. */\r\n isNaturalTangents?: number;\r\n /** optional start tangent, pointing into curve. Magnitude is ignored. */\r\n startTangent?: XYZProps;\r\n /** optional end tangent, pointing into curve. Magnitude is ignored. */\r\n endTangent?: XYZProps;\r\n /** points that the curve must pass through */\r\n fitPoints: XYZProps[];\r\n /** parameters for curve fitting, one per fit point */\r\n knots?: number[];\r\n}\r\n\r\n/**\r\n * fitPoints and end condition data for [[InterpolationCurve3d]]\r\n * * This is a \"typed object\" version of the serializer-friendly [[InterpolationCurve3dProps]]\r\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\r\n * @public\r\n */\r\nexport class InterpolationCurve3dOptions {\r\n /**\r\n * Constructor.\r\n * @param fitPoints points to CAPTURE\r\n * @param knots array to CAPTURE\r\n */\r\n public constructor(fitPoints?: Point3d[], knots?: number[]) {\r\n this._fitPoints = fitPoints ? fitPoints : [];\r\n this._knots = knots;\r\n }\r\n\r\n private _order?: number;\r\n private _closed?: boolean;\r\n private _isChordLenKnots?: number;\r\n private _isColinearTangents?: number;\r\n private _isChordLenTangents?: number;\r\n private _isNaturalTangents?: number;\r\n private _startTangent?: Vector3d;\r\n private _endTangent?: Vector3d;\r\n private _fitPoints: Point3d[];\r\n private _knots?: number[];\r\n\r\n /** `order` as property */\r\n public get order(): number { return Geometry.resolveNumber(this._order, 4); }\r\n public set order(val: number) { this._order = val; }\r\n /** `closed` as property */\r\n public get closed(): boolean { return Geometry.resolveValue(this._closed, false); }\r\n public set closed(val: boolean) { this._closed = val; }\r\n /** `isChordLenKnots` as property */\r\n public get isChordLenKnots(): number { return Geometry.resolveNumber(this._isChordLenKnots, 0); }\r\n public set isChordLenKnots(val: number) { this._isChordLenKnots = val; }\r\n /** `isColinearTangents` as property */\r\n public get isColinearTangents(): number { return Geometry.resolveNumber(this._isColinearTangents, 0); }\r\n public set isColinearTangents(val: number) { this._isColinearTangents = val; }\r\n /** `isChordLenTangents` as property */\r\n public get isChordLenTangents(): number { return Geometry.resolveNumber(this._isChordLenTangents, 0); }\r\n public set isChordLenTangents(val: number) { this._isChordLenTangents = val; }\r\n /** `isNaturalTangents` as property */\r\n public get isNaturalTangents(): number { return Geometry.resolveNumber(this._isNaturalTangents, 0); }\r\n public set isNaturalTangents(val: number) { this._isNaturalTangents = val; }\r\n /** access POSSIBLY UNDEFINED start tangent. Setter CAPTURES. */\r\n public get startTangent(): Vector3d | undefined { return this._startTangent; }\r\n public set startTangent(val: Vector3d | undefined) { this._startTangent = val; }\r\n /** access POSSIBLY UNDEFINED end tangent. Setter CAPTURES. */\r\n public get endTangent(): Vector3d | undefined { return this._endTangent; }\r\n public set endTangent(val: Vector3d | undefined) { this._endTangent = val; }\r\n /** access POINTER TO fit points. Setter CAPTURES. */\r\n public get fitPoints(): Point3d[] { return this._fitPoints; }\r\n public set fitPoints(val: Point3d[]) { this._fitPoints = val; }\r\n /** access POSSIBLY UNDEFINED knots array. Setter CAPTURES. */\r\n public get knots(): number[] | undefined { return this._knots; }\r\n public set knots(val: number[] | undefined) { this._knots = val; }\r\n\r\n /** One step setup of properties not named in constructor.\r\n * * CAPTURE pointers to tangents.\r\n * * OPTIONALLY downgrade \"0\" values to undefined.\r\n */\r\n public captureOptionalProps(\r\n order: number | undefined,\r\n closed: boolean | undefined,\r\n isChordLenKnots: number | undefined,\r\n isColinearTangents: number | undefined,\r\n isChordLenTangent: number | undefined,\r\n isNaturalTangents: number | undefined,\r\n startTangent: Vector3d | undefined,\r\n endTangent: Vector3d | undefined\r\n ) {\r\n this._order = Geometry.resolveToUndefined(order, 0);\r\n this._closed = Geometry.resolveToUndefined(closed, false);\r\n this._isChordLenKnots = Geometry.resolveToUndefined(isChordLenKnots, 0);\r\n this._isColinearTangents = Geometry.resolveToUndefined(isColinearTangents, 0);\r\n this._isChordLenTangents = Geometry.resolveToUndefined(isChordLenTangent, 0);\r\n this._isNaturalTangents = Geometry.resolveToUndefined(isNaturalTangents, 0);\r\n this._startTangent = startTangent;\r\n this._endTangent = endTangent;\r\n\r\n }\r\n /** Clone with strongly typed members reduced to simple json, with \"undefined\" members omitted */\r\n public cloneAsInterpolationCurve3dProps(): InterpolationCurve3dProps {\r\n const props: InterpolationCurve3dProps = {\r\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\r\n knots: this._knots?.slice(),\r\n };\r\n if (this._order !== undefined)\r\n props.order = this._order;\r\n if (this._closed !== undefined)\r\n props.closed = this._closed;\r\n if (this._isChordLenKnots !== undefined)\r\n props.isChordLenKnots = this._isChordLenKnots;\r\n if (this._isColinearTangents !== undefined)\r\n props.isColinearTangents = this._isColinearTangents;\r\n if (this._isChordLenTangents !== undefined)\r\n props.isChordLenTangents = this._isChordLenTangents;\r\n if (this._isNaturalTangents !== undefined)\r\n props.isNaturalTangents = this._isNaturalTangents;\r\n if (this._startTangent !== undefined)\r\n props.startTangent = this._startTangent?.toArray();\r\n if (this._endTangent !== undefined)\r\n props.endTangent = this._endTangent?.toArray();\r\n return props;\r\n }\r\n /** Clone with strongly typed members reduced to simple json. */\r\n public clone(): InterpolationCurve3dOptions {\r\n const clone = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints), this.knots?.slice());\r\n clone._order = this.order;\r\n clone._closed = this.closed;\r\n clone._isChordLenKnots = this.isChordLenKnots;\r\n clone._isColinearTangents = this.isColinearTangents;\r\n clone._isChordLenTangents = this.isChordLenTangents;\r\n clone._isNaturalTangents = this.isNaturalTangents;\r\n clone._startTangent = this._startTangent?.clone();\r\n clone._endTangent = this._endTangent?.clone();\r\n return clone;\r\n }\r\n\r\n /** Clone with strongly typed members reduced to simple json. */\r\n public static create(source: InterpolationCurve3dProps): InterpolationCurve3dOptions {\r\n const result = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints), source.knots?.slice());\r\n result._order = source.order;\r\n result._closed = source.closed;\r\n result._isChordLenKnots = source.isChordLenKnots;\r\n result._isColinearTangents = source.isColinearTangents;\r\n result._isChordLenTangents = source.isChordLenTangents;\r\n result._isNaturalTangents = source.isNaturalTangents;\r\n result._startTangent = source.startTangent ? Vector3d.fromJSON(source.startTangent) : undefined;\r\n result._endTangent = source.endTangent ? Vector3d.fromJSON(source.endTangent) : undefined;\r\n return result;\r\n }\r\n // ugh.\r\n // vector equality test with awkward rule that 000 matches undefined.\r\n private static areAlmostEqualAllow000AsUndefined(a: Vector3d | undefined, b: Vector3d | undefined): boolean {\r\n if (a !== undefined && a.maxAbs() === 0)\r\n a = undefined;\r\n if (b !== undefined && b.maxAbs() === 0)\r\n b = undefined;\r\n if (a !== undefined && b !== undefined)\r\n return a.isAlmostEqual(b);\r\n return a === undefined && b === undefined;\r\n }\r\n public static areAlmostEqual(dataA: InterpolationCurve3dOptions | undefined, dataB: InterpolationCurve3dOptions | undefined): boolean {\r\n if (dataA === undefined && dataB === undefined)\r\n return true;\r\n if (dataA !== undefined && dataB !== undefined) {\r\n if (Geometry.areEqualAllowUndefined(dataA.order, dataB.order)\r\n && Geometry.areEqualAllowUndefined(dataA.closed, dataB.closed)\r\n && Geometry.areEqualAllowUndefined(dataA.isChordLenKnots, dataB.isChordLenKnots)\r\n && Geometry.areEqualAllowUndefined(dataA.isColinearTangents, dataB.isColinearTangents)\r\n && Geometry.areEqualAllowUndefined(dataA.isNaturalTangents, dataB.isNaturalTangents)\r\n && this.areAlmostEqualAllow000AsUndefined(dataA.startTangent, dataB.startTangent)\r\n && this.areAlmostEqualAllow000AsUndefined(dataA.endTangent, dataB.endTangent)\r\n && Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b))) {\r\n if (Geometry.almostEqualNumberArrays(dataA.knots, dataB.knots, (a: number, b: number) => a === b))\r\n return true;\r\n if (dataA.knots === undefined && dataB.knots === undefined)\r\n return true;\r\n /* alas .. need to allow tricky mismatch of end replication */\r\n let knotsA = dataA.knots, knotsB = dataB.knots;\r\n if (dataA.knots === undefined) // construct undefined knots to compare against defined knots\r\n knotsA = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataA.fitPoints, dataA.isChordLenKnots, dataA.closed);\r\n else if (dataB.knots === undefined)\r\n knotsB = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataB.fitPoints, dataB.isChordLenKnots, dataB.closed);\r\n knotsA = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsA, dataA.fitPoints.length, false);\r\n knotsB = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsB, dataB.fitPoints.length, false);\r\n return Geometry.almostEqualNumberArrays(knotsA, knotsB, (a: number, b: number) => Geometry.isAlmostEqualNumber(a, b));\r\n }\r\n }\r\n return false;\r\n }\r\n /** reverse the order or sense of all start-to-end related properties. */\r\n public reverseInPlace() {\r\n this.fitPoints.reverse();\r\n if (this.knots)\r\n this.knots.reverse();\r\n // Swap pointers to tangents. They don't need to be negated because they point into the curve.\r\n const oldStart = this._startTangent;\r\n this._startTangent = this.endTangent;\r\n this._endTangent = oldStart;\r\n }\r\n}\r\n\r\n/**\r\n * Interpolating curve.\r\n * * Derive from [[ProxyCurve]]\r\n * * Use a [[BSplineCurve3d]] as the proxy\r\n * *\r\n * @public\r\n */\r\nexport class InterpolationCurve3d extends ProxyCurve {\r\n public readonly curvePrimitiveType = \"interpolationCurve\";\r\n private _options: InterpolationCurve3dOptions;\r\n /**\r\n * CAPTURE properties and proxy curve.\r\n */\r\n private constructor(properties: InterpolationCurve3dOptions, proxyCurve: CurvePrimitive) {\r\n super(proxyCurve);\r\n this._options = properties;\r\n }\r\n\r\n public override dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n let result = handler.handleInterpolationCurve3d(this);\r\n if (undefined === result) // if handler doesn't specialize on interpolation curves, default to proxy\r\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\r\n return result;\r\n }\r\n /**\r\n * Create an [[InterpolationCurve3d]] based on points, knots, and other properties in the [[InterpolationCurve3dProps]] or [[InterpolationCurve3dOptions]].\r\n * * This saves a COPY OF the options or props.\r\n * * Use createCapture () if the options or props can be used without copy\r\n */\r\n public static create(options: InterpolationCurve3dOptions | InterpolationCurve3dProps): InterpolationCurve3d | undefined {\r\n let optionsCopy;\r\n if (options instanceof InterpolationCurve3dOptions) {\r\n optionsCopy = options.clone();\r\n } else {\r\n optionsCopy = InterpolationCurve3dOptions.create(options);\r\n }\r\n return InterpolationCurve3d.createCapture(optionsCopy);\r\n }\r\n /** Create an [[InterpolationCurve3d]]\r\n * * The options object is captured into the new curve object (not copied)\r\n */\r\n public static createCapture(options: InterpolationCurve3dOptions): InterpolationCurve3d | undefined {\r\n const proxyCurve = BSplineCurve3d.createFromInterpolationCurve3dOptions(options);\r\n if (proxyCurve)\r\n return new InterpolationCurve3d(options, proxyCurve);\r\n return undefined;\r\n }\r\n /** Return a (copy of) the defining points, packed as a Float64Array */\r\n public copyFitPointsFloat64Array(): Float64Array {\r\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\r\n }\r\n\r\n /**\r\n * Return json key-value pairs for for this [[InterpolationCurve3d]].\r\n * @returns\r\n */\r\n public toJSON(): any {\r\n return this._options.cloneAsInterpolationCurve3dProps();\r\n }\r\n /** Clone the [[InterpolationCurve3dProps]] object in this [[InterpolationCurve3d]] */\r\n public cloneProps(): InterpolationCurve3dProps {\r\n return this._options.cloneAsInterpolationCurve3dProps();\r\n }\r\n\r\n /** return the options pointer */\r\n public get options(): InterpolationCurve3dOptions { return this._options; }\r\n\r\n /**\r\n * Reverse the curve direction.\r\n * * This updates both the defining properties and the proxy bspline.\r\n */\r\n public reverseInPlace(): void {\r\n this._proxyCurve.reverseInPlace();\r\n this._options.reverseInPlace();\r\n }\r\n /**\r\n * Transform this [[InterpolationCurve3d]] and its defining data in place\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\r\n if (proxyOk) {\r\n transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);\r\n if (this._options.startTangent)\r\n transform.multiplyVectorInPlace(this._options.startTangent);\r\n if (this._options.endTangent)\r\n transform.multiplyVectorInPlace(this._options.endTangent);\r\n }\r\n return proxyOk;\r\n }\r\n\r\n /** Return a deep clone */\r\n public override clone(): InterpolationCurve3d {\r\n return new InterpolationCurve3d(this._options.clone(), this._proxyCurve.clone());\r\n }\r\n\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof InterpolationCurve3d) {\r\n return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);\r\n }\r\n return false;\r\n }\r\n\r\n /** Test if `other` is also an [[InterpolationCurve3d]] */\r\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof InterpolationCurve3d; }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"InterpolationCurve3d.js","sourceRoot":"","sources":["../../../src/bspline/InterpolationCurve3d.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 { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3dArray } from \"../geometry3d/PointHelpers\";\r\nimport { ProxyCurve } from \"../curve/ProxyCurve\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { BSplineCurveOps } from \"../bspline/BSplineCurveOps\";\r\nimport { BSplineCurve3d } from \"./BSplineCurve\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { XYZProps } from \"../geometry3d/XYZProps\";\r\n\r\n/**\r\n * fitPoints and end condition data for [[InterpolationCurve3d]]\r\n * * This is a \"json compatible\" version of [[InterpolationCurve3dOptions]]\r\n * @public\r\n */\r\nexport interface InterpolationCurve3dProps {\r\n /** order of the computed bspline (one more than degree) */\r\n order?: number;\r\n /** true if the B-spline construction should be periodic */\r\n closed?: boolean;\r\n /** if closed and no knots, compute chord length knots (1) or uniform knots (0). Chord length knots give best fit. */\r\n isChordLenKnots?: number;\r\n /** if !closed but first and last fitPoints are equal, pivot computed start/end tangent(s) so that they are colinear (1) or leave them be (0). */\r\n isColinearTangents?: number;\r\n /** if !closed and start/endTangent is given, set its magnitude to the first/last fit point chord length (1) or to the magnitude of the Bessel tangent (0). Bessel gives best fit. */\r\n isChordLenTangents?: number;\r\n /** if !closed and start/endTangent is absent, compute it using the natural end condition (1) or Bessel (0). Bessel gives best fit. */\r\n isNaturalTangents?: number;\r\n /** optional start tangent, pointing into curve. Magnitude is ignored. */\r\n startTangent?: XYZProps;\r\n /** optional end tangent, pointing into curve. Magnitude is ignored. */\r\n endTangent?: XYZProps;\r\n /** points that the curve must pass through */\r\n fitPoints: XYZProps[];\r\n /** parameters for curve fitting, one per fit point */\r\n knots?: number[];\r\n}\r\n\r\n/**\r\n * fitPoints and end condition data for [[InterpolationCurve3d]]\r\n * * This is a \"typed object\" version of the serializer-friendly [[InterpolationCurve3dProps]]\r\n * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.\r\n * @public\r\n */\r\nexport class InterpolationCurve3dOptions {\r\n /**\r\n * Constructor.\r\n * @param fitPoints points to CAPTURE\r\n * @param knots array to CAPTURE\r\n */\r\n public constructor(fitPoints?: Point3d[], knots?: number[]) {\r\n this._fitPoints = fitPoints ? fitPoints : [];\r\n this._knots = knots;\r\n }\r\n\r\n private _order?: number;\r\n private _closed?: boolean;\r\n private _isChordLenKnots?: number;\r\n private _isColinearTangents?: number;\r\n private _isChordLenTangents?: number;\r\n private _isNaturalTangents?: number;\r\n private _startTangent?: Vector3d;\r\n private _endTangent?: Vector3d;\r\n private _fitPoints: Point3d[];\r\n private _knots?: number[];\r\n\r\n /** `order` as property */\r\n public get order(): number { return Geometry.resolveNumber(this._order, 4); }\r\n public set order(val: number) { this._order = val; }\r\n /** `closed` as property */\r\n public get closed(): boolean { return Geometry.resolveValue(this._closed, false); }\r\n public set closed(val: boolean) { this._closed = val; }\r\n /** `isChordLenKnots` as property */\r\n public get isChordLenKnots(): number { return Geometry.resolveNumber(this._isChordLenKnots, 0); }\r\n public set isChordLenKnots(val: number) { this._isChordLenKnots = val; }\r\n /** `isColinearTangents` as property */\r\n public get isColinearTangents(): number { return Geometry.resolveNumber(this._isColinearTangents, 0); }\r\n public set isColinearTangents(val: number) { this._isColinearTangents = val; }\r\n /** `isChordLenTangents` as property */\r\n public get isChordLenTangents(): number { return Geometry.resolveNumber(this._isChordLenTangents, 0); }\r\n public set isChordLenTangents(val: number) { this._isChordLenTangents = val; }\r\n /** `isNaturalTangents` as property */\r\n public get isNaturalTangents(): number { return Geometry.resolveNumber(this._isNaturalTangents, 0); }\r\n public set isNaturalTangents(val: number) { this._isNaturalTangents = val; }\r\n /** access POSSIBLY UNDEFINED start tangent. Setter CAPTURES. */\r\n public get startTangent(): Vector3d | undefined { return this._startTangent; }\r\n public set startTangent(val: Vector3d | undefined) { this._startTangent = val; }\r\n /** access POSSIBLY UNDEFINED end tangent. Setter CAPTURES. */\r\n public get endTangent(): Vector3d | undefined { return this._endTangent; }\r\n public set endTangent(val: Vector3d | undefined) { this._endTangent = val; }\r\n /** access POINTER TO fit points. Setter CAPTURES. */\r\n public get fitPoints(): Point3d[] { return this._fitPoints; }\r\n public set fitPoints(val: Point3d[]) { this._fitPoints = val; }\r\n /** access POSSIBLY UNDEFINED knots array. Setter CAPTURES. */\r\n public get knots(): number[] | undefined { return this._knots; }\r\n public set knots(val: number[] | undefined) { this._knots = val; }\r\n\r\n /** One step setup of properties not named in constructor.\r\n * * CAPTURE pointers to tangents.\r\n * * OPTIONALLY downgrade \"0\" values to undefined.\r\n */\r\n public captureOptionalProps(\r\n order: number | undefined,\r\n closed: boolean | undefined,\r\n isChordLenKnots: number | undefined,\r\n isColinearTangents: number | undefined,\r\n isChordLenTangent: number | undefined,\r\n isNaturalTangents: number | undefined,\r\n startTangent: Vector3d | undefined,\r\n endTangent: Vector3d | undefined,\r\n ) {\r\n this._order = Geometry.resolveToUndefined(order, 0);\r\n this._closed = Geometry.resolveToUndefined(closed, false);\r\n this._isChordLenKnots = Geometry.resolveToUndefined(isChordLenKnots, 0);\r\n this._isColinearTangents = Geometry.resolveToUndefined(isColinearTangents, 0);\r\n this._isChordLenTangents = Geometry.resolveToUndefined(isChordLenTangent, 0);\r\n this._isNaturalTangents = Geometry.resolveToUndefined(isNaturalTangents, 0);\r\n this._startTangent = startTangent;\r\n this._endTangent = endTangent;\r\n\r\n }\r\n /** Clone with strongly typed members reduced to simple json, with \"undefined\" members omitted */\r\n public cloneAsInterpolationCurve3dProps(): InterpolationCurve3dProps {\r\n const props: InterpolationCurve3dProps = {\r\n fitPoints: Point3dArray.cloneDeepJSONNumberArrays(this.fitPoints),\r\n knots: this._knots?.slice(),\r\n };\r\n if (this._order !== undefined)\r\n props.order = this._order;\r\n if (this._closed !== undefined)\r\n props.closed = this._closed;\r\n if (this._isChordLenKnots !== undefined)\r\n props.isChordLenKnots = this._isChordLenKnots;\r\n if (this._isColinearTangents !== undefined)\r\n props.isColinearTangents = this._isColinearTangents;\r\n if (this._isChordLenTangents !== undefined)\r\n props.isChordLenTangents = this._isChordLenTangents;\r\n if (this._isNaturalTangents !== undefined)\r\n props.isNaturalTangents = this._isNaturalTangents;\r\n if (this._startTangent !== undefined)\r\n props.startTangent = this._startTangent?.toArray();\r\n if (this._endTangent !== undefined)\r\n props.endTangent = this._endTangent?.toArray();\r\n return props;\r\n }\r\n /** Clone with strongly typed members reduced to simple json. */\r\n public clone(): InterpolationCurve3dOptions {\r\n const clone = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(this.fitPoints), this.knots?.slice());\r\n clone._order = this.order;\r\n clone._closed = this.closed;\r\n clone._isChordLenKnots = this.isChordLenKnots;\r\n clone._isColinearTangents = this.isColinearTangents;\r\n clone._isChordLenTangents = this.isChordLenTangents;\r\n clone._isNaturalTangents = this.isNaturalTangents;\r\n clone._startTangent = this._startTangent?.clone();\r\n clone._endTangent = this._endTangent?.clone();\r\n return clone;\r\n }\r\n\r\n /** Clone with strongly typed members reduced to simple json. */\r\n public static create(source: InterpolationCurve3dProps): InterpolationCurve3dOptions {\r\n const result = new InterpolationCurve3dOptions(Point3dArray.clonePoint3dArray(source.fitPoints), source.knots?.slice());\r\n result._order = source.order;\r\n result._closed = source.closed;\r\n result._isChordLenKnots = source.isChordLenKnots;\r\n result._isColinearTangents = source.isColinearTangents;\r\n result._isChordLenTangents = source.isChordLenTangents;\r\n result._isNaturalTangents = source.isNaturalTangents;\r\n result._startTangent = source.startTangent ? Vector3d.fromJSON(source.startTangent) : undefined;\r\n result._endTangent = source.endTangent ? Vector3d.fromJSON(source.endTangent) : undefined;\r\n return result;\r\n }\r\n // ugh.\r\n // vector equality test with awkward rule that 000 matches undefined.\r\n private static areAlmostEqualAllow000AsUndefined(a: Vector3d | undefined, b: Vector3d | undefined): boolean {\r\n if (a !== undefined && a.maxAbs() === 0)\r\n a = undefined;\r\n if (b !== undefined && b.maxAbs() === 0)\r\n b = undefined;\r\n if (a !== undefined && b !== undefined)\r\n return a.isAlmostEqual(b);\r\n return a === undefined && b === undefined;\r\n }\r\n public static areAlmostEqual(dataA: InterpolationCurve3dOptions | undefined, dataB: InterpolationCurve3dOptions | undefined): boolean {\r\n if (dataA === undefined && dataB === undefined)\r\n return true;\r\n if (dataA !== undefined && dataB !== undefined) {\r\n if (Geometry.areEqualAllowUndefined(dataA.order, dataB.order)\r\n && Geometry.areEqualAllowUndefined(dataA.closed, dataB.closed)\r\n && Geometry.areEqualAllowUndefined(dataA.isChordLenKnots, dataB.isChordLenKnots)\r\n && Geometry.areEqualAllowUndefined(dataA.isColinearTangents, dataB.isColinearTangents)\r\n && Geometry.areEqualAllowUndefined(dataA.isNaturalTangents, dataB.isNaturalTangents)\r\n && this.areAlmostEqualAllow000AsUndefined(dataA.startTangent, dataB.startTangent)\r\n && this.areAlmostEqualAllow000AsUndefined(dataA.endTangent, dataB.endTangent)\r\n && Geometry.almostEqualArrays(dataA.fitPoints, dataB.fitPoints, (a: Point3d, b: Point3d) => a.isAlmostEqual(b))) {\r\n if (Geometry.almostEqualNumberArrays(dataA.knots, dataB.knots, (a: number, b: number) => a === b))\r\n return true;\r\n if (dataA.knots === undefined && dataB.knots === undefined)\r\n return true;\r\n /* alas .. need to allow tricky mismatch of end replication */\r\n let knotsA = dataA.knots, knotsB = dataB.knots;\r\n if (dataA.knots === undefined) // construct undefined knots to compare against defined knots\r\n knotsA = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataA.fitPoints, dataA.isChordLenKnots, dataA.closed);\r\n else if (dataB.knots === undefined)\r\n knotsB = BSplineCurveOps.C2CubicFit.constructFitParametersFromPoints(dataB.fitPoints, dataB.isChordLenKnots, dataB.closed);\r\n knotsA = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsA, dataA.fitPoints.length, false);\r\n knotsB = BSplineCurveOps.C2CubicFit.convertCubicKnotVectorToFitParams(knotsB, dataB.fitPoints.length, false);\r\n return Geometry.almostEqualNumberArrays(knotsA, knotsB, (a: number, b: number) => Geometry.isAlmostEqualNumber(a, b));\r\n }\r\n }\r\n return false;\r\n }\r\n /** reverse the order or sense of all start-to-end related properties. */\r\n public reverseInPlace() {\r\n this.fitPoints.reverse();\r\n if (this.knots)\r\n this.knots.reverse();\r\n // Swap pointers to tangents. They don't need to be negated because they point into the curve.\r\n const oldStart = this._startTangent;\r\n this._startTangent = this.endTangent;\r\n this._endTangent = oldStart;\r\n }\r\n}\r\n\r\n/**\r\n * Interpolating curve.\r\n * * Derive from [[ProxyCurve]]\r\n * * Use a [[BSplineCurve3d]] as the proxy\r\n * *\r\n * @public\r\n */\r\nexport class InterpolationCurve3d extends ProxyCurve {\r\n public readonly curvePrimitiveType = \"interpolationCurve\";\r\n private _options: InterpolationCurve3dOptions;\r\n /**\r\n * CAPTURE properties and proxy curve.\r\n */\r\n private constructor(properties: InterpolationCurve3dOptions, proxyCurve: CurvePrimitive) {\r\n super(proxyCurve);\r\n this._options = properties;\r\n }\r\n\r\n public override dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n let result = handler.handleInterpolationCurve3d(this);\r\n if (undefined === result) // if handler doesn't specialize on interpolation curves, default to proxy\r\n result = this._proxyCurve.dispatchToGeometryHandler(handler);\r\n return result;\r\n }\r\n /**\r\n * Create an [[InterpolationCurve3d]] based on points, knots, and other properties in the [[InterpolationCurve3dProps]] or [[InterpolationCurve3dOptions]].\r\n * * This saves a COPY OF the options or props.\r\n * * Use createCapture () if the options or props can be used without copy\r\n */\r\n public static create(options: InterpolationCurve3dOptions | InterpolationCurve3dProps): InterpolationCurve3d | undefined {\r\n let optionsCopy;\r\n if (options instanceof InterpolationCurve3dOptions) {\r\n optionsCopy = options.clone();\r\n } else {\r\n optionsCopy = InterpolationCurve3dOptions.create(options);\r\n }\r\n return InterpolationCurve3d.createCapture(optionsCopy);\r\n }\r\n /** Create an [[InterpolationCurve3d]]\r\n * * The options object is captured into the new curve object (not copied)\r\n */\r\n public static createCapture(options: InterpolationCurve3dOptions): InterpolationCurve3d | undefined {\r\n const proxyCurve = BSplineCurve3d.createFromInterpolationCurve3dOptions(options);\r\n if (proxyCurve)\r\n return new InterpolationCurve3d(options, proxyCurve);\r\n return undefined;\r\n }\r\n /** Return a (copy of) the defining points, packed as a Float64Array */\r\n public copyFitPointsFloat64Array(): Float64Array {\r\n return Point3dArray.cloneXYZPropsAsFloat64Array(this._options.fitPoints);\r\n }\r\n\r\n /**\r\n * Return json key-value pairs for for this [[InterpolationCurve3d]].\r\n * @returns\r\n */\r\n public toJSON(): any {\r\n return this._options.cloneAsInterpolationCurve3dProps();\r\n }\r\n /** Clone the [[InterpolationCurve3dProps]] object in this [[InterpolationCurve3d]] */\r\n public cloneProps(): InterpolationCurve3dProps {\r\n return this._options.cloneAsInterpolationCurve3dProps();\r\n }\r\n\r\n /** return the options pointer */\r\n public get options(): InterpolationCurve3dOptions { return this._options; }\r\n\r\n /**\r\n * Reverse the curve direction.\r\n * * This updates both the defining properties and the proxy bspline.\r\n */\r\n public reverseInPlace(): void {\r\n this._proxyCurve.reverseInPlace();\r\n this._options.reverseInPlace();\r\n }\r\n /**\r\n * Transform this [[InterpolationCurve3d]] and its defining data in place\r\n */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n const proxyOk = this._proxyCurve.tryTransformInPlace(transform);\r\n if (proxyOk) {\r\n transform.multiplyPoint3dArrayInPlace(this._options.fitPoints);\r\n if (this._options.startTangent)\r\n transform.multiplyVectorInPlace(this._options.startTangent);\r\n if (this._options.endTangent)\r\n transform.multiplyVectorInPlace(this._options.endTangent);\r\n }\r\n return proxyOk;\r\n }\r\n\r\n /** Return a deep clone */\r\n public override clone(): InterpolationCurve3d {\r\n return new InterpolationCurve3d(this._options.clone(), this._proxyCurve.clone());\r\n }\r\n\r\n public override isAlmostEqual(other: GeometryQuery): boolean {\r\n if (other instanceof InterpolationCurve3d) {\r\n return InterpolationCurve3dOptions.areAlmostEqual(this._options, other._options);\r\n }\r\n return false;\r\n }\r\n\r\n /** Test if `other` is also an [[InterpolationCurve3d]] */\r\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof InterpolationCurve3d; }\r\n\r\n}\r\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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"}
@@ -24,7 +24,7 @@ import { Point3dArray } from "../geometry3d/PointHelpers";
24
24
  /**
25
25
  * An AlternatingConvexClipTreeNode is a node in a tree structure in which
26
26
  * <ul>
27
- * <li>Each node contains a ConvexClipPlaneSet
27
+ * <li>Each node contains a ConvexClipPlaneSet.
28
28
  * <li>Each node contains an array of children which are also AlternatingConvexClipTreeNode.
29
29
  * <li>The rule for an in/out decision is that a point is IN the subtree under a node if
30
30
  * <ul>
@@ -70,9 +70,7 @@ export class AlternatingCCTreeNode {
70
70
  builder.buildHullTree(result); // <-- Currently ALWAYS returns true
71
71
  return result;
72
72
  }
73
- /**
74
- * Build the outer convex hull will inlets as first level children
75
- */
73
+ /** Build the outer convex hull with inlets as first level children. */
76
74
  static createHullAndInletsForPolygon(points, result) {
77
75
  result = result ? result : new AlternatingCCTreeNode();
78
76
  result.empty();
@@ -87,14 +85,15 @@ export class AlternatingCCTreeNode {
87
85
  }
88
86
  /**
89
87
  * Return an array with all the loops in the tree.
90
- * This looses the alternating structure of the tree, but the collection still matches well-formed polygons by parity rules.
88
+ * This loses the alternating structure of the tree, but the collection still matches well-formed polygons by
89
+ * parity rules.
91
90
  */
92
91
  extractLoops() {
93
92
  const loops = [];
94
93
  this.extractLoopsGo(loops);
95
94
  return loops;
96
95
  }
97
- /** Resets this AlternatingConvexClipTreeNode to a newly-created state */
96
+ /** Resets this AlternatingConvexClipTreeNode to a newly-created state. */
98
97
  empty() {
99
98
  this.points.length = 0;
100
99
  this.planes.planes.length = 0;
@@ -121,7 +120,7 @@ export class AlternatingCCTreeNode {
121
120
  const newNode = AlternatingCCTreeNode.createWithIndices(index0, numPoints);
122
121
  this.children.push(newNode);
123
122
  }
124
- /** Add a plane to the ConvexClipPlaneSet */
123
+ /** Add a plane to the ConvexClipPlaneSet. */
125
124
  addPlane(plane) {
126
125
  this.planes.addPlaneToConvexSet(plane);
127
126
  }
@@ -136,7 +135,8 @@ export class AlternatingCCTreeNode {
136
135
  }
137
136
  return true;
138
137
  }
139
- /** Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
138
+ /**
139
+ * Add an AlternatingConvexClipTreeNode as a child of this one -- i.e. a hole.
140
140
  * * The child pointer is pushed directly to the tree -- not cloned.
141
141
  */
142
142
  captureConvexClipPlaneSetAsVoid(child) {
@@ -153,10 +153,11 @@ export class AlternatingCCTreeNode {
153
153
  clipper.appendCurveCollectionClip(this, curves, insideIntervals, outsideIntervals);
154
154
  }
155
155
  /**
156
- *
157
- * @param xyz input polygon. This is not changed.
158
- * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
159
- * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed from the cache. This is NOT cleared.
156
+ * @param xyz input polygon. This is not changed.
157
+ * @param insideFragments Array to receive "inside" fragments. Each fragment is a GrowableXYZArray grabbed from
158
+ * the cache. This is NOT cleared.
159
+ * @param outsideFragments Array to receive "outside" fragments. Each fragment is a GrowableXYZArray grabbed
160
+ * from the cache. This is NOT cleared.
160
161
  * @param arrayCache cache for reusable GrowableXYZArray.
161
162
  */
162
163
  appendPolygonClip(xyz, insideFragments, outsideFragments, arrayCache) {
@@ -189,9 +190,6 @@ export class AlternatingCCTreeNode {
189
190
  }
190
191
  }
191
192
  }
192
- /**
193
- *
194
- */
195
193
  depth() {
196
194
  const myDepth = 1;
197
195
  let maxChildDepth = 0;
@@ -222,9 +220,15 @@ export class AlternatingCCTreeBuilder {
222
220
  result._points.pop();
223
221
  return result;
224
222
  }
225
- get period() { return this._points.length; }
226
- indexAfter(i) { return (i + 1) % this._points.length; }
227
- indexBefore(i) { return (i + this._points.length - 1) % this._points.length; }
223
+ get period() {
224
+ return this._points.length;
225
+ }
226
+ indexAfter(i) {
227
+ return (i + 1) % this._points.length;
228
+ }
229
+ indexBefore(i) {
230
+ return (i + this._points.length - 1) % this._points.length;
231
+ }
228
232
  pushIndex(primaryPointIndex) {
229
233
  this._stack.push(primaryPointIndex);
230
234
  }
@@ -458,8 +462,8 @@ class AlternatingCCTreeNodeCurveClipper {
458
462
  return false;
459
463
  }
460
464
  /**
461
- * 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
462
- * (expensive -- must clone items of arrays during "swaps")
465
+ * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack
466
+ * has clip for this node (expensive -- must clone items of arrays during "swaps").
463
467
  */
464
468
  recurse(node) {
465
469
  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":["/*---------------------------------------------------------------------------------------------\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 * <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 /** Build the outer convex hull with inlets as first level children. */\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 loses the alternating structure of the tree, but the collection still matches well-formed polygons by\r\n * 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 /** 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 /** 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 /** Add a plane to the ConvexClipPlaneSet. */\r\n public addPlane(plane: ClipPlane) {\r\n this.planes.addPlaneToConvexSet(plane);\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 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 /** Append start-end positions for curve intervals classified as inside or outside. */\r\n public appendCurvePrimitiveClipIntervals(\r\n curve: CurvePrimitive, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[],\r\n ): void {\r\n const clipper = new AlternatingCCTreeNodeCurveClipper();\r\n clipper.appendSingleClipPrimitive(this, curve, insideIntervals, outsideIntervals);\r\n }\r\n /** Append start-end positions for curve intervals classified as inside or outside. */\r\n public appendCurveCollectionClipIntervals(\r\n curves: CurveCollection, insideIntervals: CurveLocationDetailPair[], outsideIntervals: CurveLocationDetailPair[],\r\n ): void {\r\n const clipper = new AlternatingCCTreeNodeCurveClipper();\r\n clipper.appendCurveCollectionClip(this, curves, insideIntervals, outsideIntervals);\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\r\n * the cache. This is NOT cleared.\r\n * @param outsideFragments Array to receive \"outside\" fragments. Each fragment is a GrowableXYZArray grabbed\r\n * 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,\r\n ): 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 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/**\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 public get period(): number {\r\n return this._points.length;\r\n }\r\n public indexAfter(i: number) {\r\n return (i + 1) % this._points.length;\r\n }\r\n public indexBefore(i: number) {\r\n 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 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 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 * 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 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 /** 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 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 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 private buildHullTreeGo(\r\n root: AlternatingCCTreeNode, isPositiveArea: boolean, recurseToChildren: boolean = true,\r\n ): 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(\r\n points[k0], points[k1], Vector3d.create(0, 0, 1), Angle.createRadians(0),\r\n );\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 return true; // Are there failure modes? What happens with crossing data?..\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\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 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 private clearSegmentStack() {\r\n while (this._stackDepth > 0)\r\n this.popSegmentFrame(); // and that will reduce stack depth\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 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 /** 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 private isTopOfStackEmpty(): boolean {\r\n return this._topOfStack.length === 0;\r\n }\r\n // Is re-used by method calls\r\n private static _fractionIntervals: number[] = [];\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 * Run one level of recursion. On return, the stack is one level deeper than at entry and the new top of the stack\r\n * has clip for this node (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 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 * 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 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 * 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"]}