@itwin/core-geometry 5.2.0-dev.29 → 5.2.0-dev.30

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 (737) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.d.ts +30 -10
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +74 -10
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.d.ts +19 -6
  7. package/lib/cjs/bspline/AkimaCurve3d.d.ts.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +21 -5
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurve.d.ts +3 -3
  12. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  13. package/lib/cjs/bspline/BSplineCurve.js +6 -6
  14. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  15. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  17. package/lib/cjs/bspline/BSplineCurveOps.js +1 -1
  18. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  19. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  20. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  21. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  22. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  23. package/lib/cjs/bspline/BezierCurveBase.d.ts +2 -2
  24. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  25. package/lib/cjs/bspline/BezierCurveBase.js +4 -6
  26. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  27. package/lib/cjs/bspline/InterpolationCurve3d.d.ts +27 -17
  28. package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/InterpolationCurve3d.js +17 -7
  30. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  32. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  33. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  34. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  35. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  36. package/lib/cjs/clipping/ClipPlane.d.ts +9 -3
  37. package/lib/cjs/clipping/ClipPlane.d.ts.map +1 -1
  38. package/lib/cjs/clipping/ClipPlane.js +8 -0
  39. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  40. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  41. package/lib/cjs/clipping/ClipUtils.d.ts +14 -1
  42. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  43. package/lib/cjs/clipping/ClipUtils.js +21 -3
  44. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  45. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  46. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts +2 -2
  47. package/lib/cjs/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  48. package/lib/cjs/clipping/ConvexClipPlaneSet.js +6 -4
  49. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  50. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  51. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  52. package/lib/cjs/core-geometry.js.map +1 -1
  53. package/lib/cjs/curve/Arc3d.d.ts +27 -17
  54. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  55. package/lib/cjs/curve/Arc3d.js +61 -35
  56. package/lib/cjs/curve/Arc3d.js.map +1 -1
  57. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  58. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  59. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  60. package/lib/cjs/curve/CurveCollection.d.ts +1 -0
  61. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  62. package/lib/cjs/curve/CurveCollection.js +1 -0
  63. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  64. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  65. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  66. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  67. package/lib/cjs/curve/CurveLocationDetail.d.ts +8 -7
  68. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  69. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  70. package/lib/cjs/curve/CurveOps.d.ts +51 -1
  71. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  72. package/lib/cjs/curve/CurveOps.js +97 -3
  73. package/lib/cjs/curve/CurveOps.js.map +1 -1
  74. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  75. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  76. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  77. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  78. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  79. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  80. package/lib/cjs/curve/LineString3d.d.ts +4 -4
  81. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  82. package/lib/cjs/curve/LineString3d.js +8 -8
  83. package/lib/cjs/curve/LineString3d.js.map +1 -1
  84. package/lib/cjs/curve/Loop.js.map +1 -1
  85. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  86. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  87. package/lib/cjs/curve/Path.js.map +1 -1
  88. package/lib/cjs/curve/PointString3d.js.map +1 -1
  89. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  90. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  91. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  92. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  93. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  94. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  95. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +6 -2
  96. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  97. package/lib/cjs/curve/Query/PlanarSubdivision.js +12 -7
  98. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  99. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  100. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  101. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  102. package/lib/cjs/curve/RegionOps.d.ts +9 -4
  103. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  104. package/lib/cjs/curve/RegionOps.js +10 -5
  105. package/lib/cjs/curve/RegionOps.js.map +1 -1
  106. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  107. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  108. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  109. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  110. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  111. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  112. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  113. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  114. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  115. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  116. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  117. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  118. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +2 -1
  119. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  120. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  121. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  122. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  123. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  124. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  125. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  126. package/lib/cjs/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  127. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +21 -18
  128. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  129. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  130. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  131. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  132. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  133. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  134. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  135. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  136. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  137. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  138. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  139. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  140. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +2 -2
  141. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  142. package/lib/cjs/curve/spiral/DirectSpiral3d.js +6 -2
  143. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  144. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  145. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  146. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +6 -2
  147. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  148. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  149. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  150. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  151. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  152. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  153. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  154. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +0 -3
  155. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  156. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  157. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  158. package/lib/cjs/geometry3d/AngleSweep.d.ts +6 -2
  159. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  160. package/lib/cjs/geometry3d/AngleSweep.js +12 -3
  161. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  162. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  163. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  164. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  165. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  166. package/lib/cjs/geometry3d/FrameBuilder.d.ts +2 -1
  167. package/lib/cjs/geometry3d/FrameBuilder.d.ts.map +1 -1
  168. package/lib/cjs/geometry3d/FrameBuilder.js +14 -18
  169. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  170. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  171. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  172. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  173. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  174. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  175. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  176. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  177. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  178. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  179. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  180. package/lib/cjs/geometry3d/Matrix3d.d.ts +1 -1
  181. package/lib/cjs/geometry3d/Matrix3d.js +1 -1
  182. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  183. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  184. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  185. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  186. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  187. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  188. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +18 -2
  189. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  190. package/lib/cjs/geometry3d/Point2dVector2d.js +37 -4
  191. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  192. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  193. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +1 -1
  194. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  195. package/lib/cjs/geometry3d/Point3dVector3d.js +1 -0
  196. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  197. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  198. package/lib/cjs/geometry3d/PointStreaming.d.ts +8 -0
  199. package/lib/cjs/geometry3d/PointStreaming.d.ts.map +1 -1
  200. package/lib/cjs/geometry3d/PointStreaming.js +18 -2
  201. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  202. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  203. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  204. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  205. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  206. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  207. package/lib/cjs/geometry3d/PolylineOps.d.ts +14 -3
  208. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  209. package/lib/cjs/geometry3d/PolylineOps.js +20 -4
  210. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  211. package/lib/cjs/geometry3d/Range.d.ts +34 -32
  212. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  213. package/lib/cjs/geometry3d/Range.js +28 -21
  214. package/lib/cjs/geometry3d/Range.js.map +1 -1
  215. package/lib/cjs/geometry3d/Ray2d.d.ts +16 -6
  216. package/lib/cjs/geometry3d/Ray2d.d.ts.map +1 -1
  217. package/lib/cjs/geometry3d/Ray2d.js +28 -4
  218. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  219. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  220. package/lib/cjs/geometry3d/Ray3d.js +3 -4
  221. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  222. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  223. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  224. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  225. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  226. package/lib/cjs/geometry3d/Transform.js +1 -1
  227. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  228. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  229. package/lib/cjs/geometry3d/XYZProps.d.ts +12 -1
  230. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/XYZProps.js +17 -2
  232. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  233. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  234. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  235. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  236. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  237. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  238. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  239. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  240. package/lib/cjs/numerics/BezierPolynomials.d.ts.map +1 -1
  241. package/lib/cjs/numerics/BezierPolynomials.js +5 -9
  242. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  243. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  244. package/lib/cjs/numerics/Complex.js.map +1 -1
  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/PascalCoefficients.js.map +1 -1
  248. package/lib/cjs/numerics/PolarData.js.map +1 -1
  249. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  250. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  251. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  252. package/lib/cjs/numerics/SmallSystem.d.ts +13 -7
  253. package/lib/cjs/numerics/SmallSystem.d.ts.map +1 -1
  254. package/lib/cjs/numerics/SmallSystem.js +13 -7
  255. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  256. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  257. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  258. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  259. package/lib/cjs/polyface/AuxData.js.map +1 -1
  260. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  261. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  262. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  263. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  264. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  265. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  266. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  267. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  268. package/lib/cjs/polyface/Polyface.js.map +1 -1
  269. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +25 -6
  270. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  271. package/lib/cjs/polyface/PolyfaceBuilder.js +59 -8
  272. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  273. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  274. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  275. package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
  276. package/lib/cjs/polyface/PolyfaceQuery.js +8 -10
  277. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  278. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  279. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  280. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  281. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  282. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  283. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  284. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  285. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  286. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  287. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  288. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  289. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  290. package/lib/cjs/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  291. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +9 -12
  292. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  293. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  294. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  295. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  296. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  297. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  298. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  299. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  300. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  301. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  302. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  303. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  304. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  305. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  306. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  307. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  308. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  309. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  310. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  311. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  312. package/lib/cjs/serialization/DeepCompare.js +1 -1
  313. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  314. package/lib/cjs/serialization/GeometrySamples.d.ts +2 -1
  315. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  316. package/lib/cjs/serialization/GeometrySamples.js +2 -1
  317. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  318. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  319. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  320. package/lib/cjs/solid/Box.js.map +1 -1
  321. package/lib/cjs/solid/Cone.js.map +1 -1
  322. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  323. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  324. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  325. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  326. package/lib/cjs/solid/Sphere.js.map +1 -1
  327. package/lib/cjs/solid/SweepContour.js.map +1 -1
  328. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  329. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  330. package/lib/cjs/topology/Graph.d.ts +38 -12
  331. package/lib/cjs/topology/Graph.d.ts.map +1 -1
  332. package/lib/cjs/topology/Graph.js +91 -23
  333. package/lib/cjs/topology/Graph.js.map +1 -1
  334. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  335. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  336. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  337. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  338. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts +20 -11
  339. package/lib/cjs/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  340. package/lib/cjs/topology/HalfEdgeGraphSearch.js +43 -39
  341. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  342. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  343. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  344. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  345. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  346. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  347. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  348. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  349. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  350. package/lib/cjs/topology/MaskManager.js.map +1 -1
  351. package/lib/cjs/topology/Merging.d.ts +7 -4
  352. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  353. package/lib/cjs/topology/Merging.js +16 -11
  354. package/lib/cjs/topology/Merging.js.map +1 -1
  355. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  356. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  357. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  358. package/lib/cjs/topology/Triangulation.d.ts +13 -11
  359. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  360. package/lib/cjs/topology/Triangulation.js +40 -36
  361. package/lib/cjs/topology/Triangulation.js.map +1 -1
  362. package/lib/cjs/topology/Voronoi.d.ts +195 -0
  363. package/lib/cjs/topology/Voronoi.d.ts.map +1 -0
  364. package/lib/cjs/topology/Voronoi.js +700 -0
  365. package/lib/cjs/topology/Voronoi.js.map +1 -0
  366. package/lib/cjs/topology/XYParitySearchContext.d.ts +1 -1
  367. package/lib/cjs/topology/XYParitySearchContext.d.ts.map +1 -1
  368. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  369. package/lib/esm/Constant.js.map +1 -1
  370. package/lib/esm/Geometry.d.ts +30 -10
  371. package/lib/esm/Geometry.d.ts.map +1 -1
  372. package/lib/esm/Geometry.js +74 -10
  373. package/lib/esm/Geometry.js.map +1 -1
  374. package/lib/esm/bspline/AkimaCurve3d.d.ts +19 -6
  375. package/lib/esm/bspline/AkimaCurve3d.d.ts.map +1 -1
  376. package/lib/esm/bspline/AkimaCurve3d.js +21 -5
  377. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  378. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  379. package/lib/esm/bspline/BSplineCurve.d.ts +3 -3
  380. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  381. package/lib/esm/bspline/BSplineCurve.js +6 -6
  382. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  383. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  384. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  385. package/lib/esm/bspline/BSplineCurveOps.js +1 -1
  386. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  387. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  388. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  389. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  390. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  391. package/lib/esm/bspline/BezierCurveBase.d.ts +2 -2
  392. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  393. package/lib/esm/bspline/BezierCurveBase.js +4 -6
  394. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  395. package/lib/esm/bspline/InterpolationCurve3d.d.ts +27 -17
  396. package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
  397. package/lib/esm/bspline/InterpolationCurve3d.js +17 -7
  398. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  399. package/lib/esm/bspline/KnotVector.js.map +1 -1
  400. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  401. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  402. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  403. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  404. package/lib/esm/clipping/ClipPlane.d.ts +9 -3
  405. package/lib/esm/clipping/ClipPlane.d.ts.map +1 -1
  406. package/lib/esm/clipping/ClipPlane.js +8 -0
  407. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  408. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  409. package/lib/esm/clipping/ClipUtils.d.ts +14 -1
  410. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  411. package/lib/esm/clipping/ClipUtils.js +21 -3
  412. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  413. package/lib/esm/clipping/ClipVector.js.map +1 -1
  414. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts +2 -2
  415. package/lib/esm/clipping/ConvexClipPlaneSet.d.ts.map +1 -1
  416. package/lib/esm/clipping/ConvexClipPlaneSet.js +6 -4
  417. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  418. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  419. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  420. package/lib/esm/core-geometry.js.map +1 -1
  421. package/lib/esm/curve/Arc3d.d.ts +27 -17
  422. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  423. package/lib/esm/curve/Arc3d.js +61 -35
  424. package/lib/esm/curve/Arc3d.js.map +1 -1
  425. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  426. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  427. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  428. package/lib/esm/curve/CurveCollection.d.ts +1 -0
  429. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  430. package/lib/esm/curve/CurveCollection.js +1 -0
  431. package/lib/esm/curve/CurveCollection.js.map +1 -1
  432. package/lib/esm/curve/CurveCurve.js.map +1 -1
  433. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  434. package/lib/esm/curve/CurveFactory.js.map +1 -1
  435. package/lib/esm/curve/CurveLocationDetail.d.ts +8 -7
  436. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  437. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  438. package/lib/esm/curve/CurveOps.d.ts +51 -1
  439. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  440. package/lib/esm/curve/CurveOps.js +98 -4
  441. package/lib/esm/curve/CurveOps.js.map +1 -1
  442. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  443. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  444. package/lib/esm/curve/CurveTypes.js.map +1 -1
  445. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  446. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  447. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  448. package/lib/esm/curve/LineString3d.d.ts +4 -4
  449. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  450. package/lib/esm/curve/LineString3d.js +8 -8
  451. package/lib/esm/curve/LineString3d.js.map +1 -1
  452. package/lib/esm/curve/Loop.js.map +1 -1
  453. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  454. package/lib/esm/curve/ParityRegion.js.map +1 -1
  455. package/lib/esm/curve/Path.js.map +1 -1
  456. package/lib/esm/curve/PointString3d.js.map +1 -1
  457. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  458. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +3 -3
  459. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  460. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  461. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  462. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  463. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +6 -2
  464. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  465. package/lib/esm/curve/Query/PlanarSubdivision.js +12 -7
  466. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  467. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  468. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  469. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  470. package/lib/esm/curve/RegionOps.d.ts +9 -4
  471. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  472. package/lib/esm/curve/RegionOps.js +10 -5
  473. package/lib/esm/curve/RegionOps.js.map +1 -1
  474. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  475. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  476. package/lib/esm/curve/UnionRegion.js.map +1 -1
  477. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  478. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  479. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  480. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  481. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  482. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  483. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  484. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  485. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  486. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +2 -1
  487. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  488. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  489. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  490. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  491. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  492. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  493. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts +4 -4
  494. package/lib/esm/curve/internalContexts/MultiChainCollector.d.ts.map +1 -1
  495. package/lib/esm/curve/internalContexts/MultiChainCollector.js +21 -18
  496. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  497. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  498. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  499. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  500. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  501. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  502. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  503. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  504. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  505. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  506. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  507. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  508. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +2 -2
  509. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  510. package/lib/esm/curve/spiral/DirectSpiral3d.js +6 -2
  511. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  512. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +2 -2
  513. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  514. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +6 -2
  515. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  516. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  517. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  518. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  519. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  520. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +5 -1
  521. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  522. package/lib/esm/curve/spiral/TransitionSpiral3d.js +0 -3
  523. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  524. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  525. package/lib/esm/geometry3d/Angle.js.map +1 -1
  526. package/lib/esm/geometry3d/AngleSweep.d.ts +6 -2
  527. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  528. package/lib/esm/geometry3d/AngleSweep.js +12 -3
  529. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  530. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  531. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  532. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  533. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  534. package/lib/esm/geometry3d/FrameBuilder.d.ts +2 -1
  535. package/lib/esm/geometry3d/FrameBuilder.d.ts.map +1 -1
  536. package/lib/esm/geometry3d/FrameBuilder.js +14 -18
  537. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  538. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  539. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  540. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  541. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  542. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  543. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  544. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  545. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  546. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  547. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  548. package/lib/esm/geometry3d/Matrix3d.d.ts +1 -1
  549. package/lib/esm/geometry3d/Matrix3d.js +1 -1
  550. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  551. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  552. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  553. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  554. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  555. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  556. package/lib/esm/geometry3d/Point2dVector2d.d.ts +18 -2
  557. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  558. package/lib/esm/geometry3d/Point2dVector2d.js +37 -4
  559. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  560. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  561. package/lib/esm/geometry3d/Point3dVector3d.d.ts +1 -1
  562. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  563. package/lib/esm/geometry3d/Point3dVector3d.js +1 -0
  564. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  565. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  566. package/lib/esm/geometry3d/PointStreaming.d.ts +8 -0
  567. package/lib/esm/geometry3d/PointStreaming.d.ts.map +1 -1
  568. package/lib/esm/geometry3d/PointStreaming.js +18 -2
  569. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  570. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  571. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts +8 -2
  572. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.d.ts.map +1 -1
  573. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +10 -4
  574. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  575. package/lib/esm/geometry3d/PolylineOps.d.ts +14 -3
  576. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  577. package/lib/esm/geometry3d/PolylineOps.js +20 -4
  578. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  579. package/lib/esm/geometry3d/Range.d.ts +34 -32
  580. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  581. package/lib/esm/geometry3d/Range.js +28 -21
  582. package/lib/esm/geometry3d/Range.js.map +1 -1
  583. package/lib/esm/geometry3d/Ray2d.d.ts +16 -6
  584. package/lib/esm/geometry3d/Ray2d.d.ts.map +1 -1
  585. package/lib/esm/geometry3d/Ray2d.js +28 -4
  586. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  587. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  588. package/lib/esm/geometry3d/Ray3d.js +3 -4
  589. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  590. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  591. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  592. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  593. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  594. package/lib/esm/geometry3d/Transform.js +1 -1
  595. package/lib/esm/geometry3d/Transform.js.map +1 -1
  596. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  597. package/lib/esm/geometry3d/XYZProps.d.ts +12 -1
  598. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  599. package/lib/esm/geometry3d/XYZProps.js +16 -1
  600. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  601. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  602. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  603. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  604. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  605. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  606. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  607. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  608. package/lib/esm/numerics/BezierPolynomials.d.ts.map +1 -1
  609. package/lib/esm/numerics/BezierPolynomials.js +5 -9
  610. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  611. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  612. package/lib/esm/numerics/Complex.js.map +1 -1
  613. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  614. package/lib/esm/numerics/Newton.js.map +1 -1
  615. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  616. package/lib/esm/numerics/PolarData.js.map +1 -1
  617. package/lib/esm/numerics/Polynomials.js.map +1 -1
  618. package/lib/esm/numerics/Quadrature.js.map +1 -1
  619. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  620. package/lib/esm/numerics/SmallSystem.d.ts +13 -7
  621. package/lib/esm/numerics/SmallSystem.d.ts.map +1 -1
  622. package/lib/esm/numerics/SmallSystem.js +13 -7
  623. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  624. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  625. package/lib/esm/numerics/UnionFind.js.map +1 -1
  626. package/lib/esm/numerics/UsageSums.js.map +1 -1
  627. package/lib/esm/polyface/AuxData.js.map +1 -1
  628. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  629. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  630. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  631. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  632. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  633. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  634. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  635. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  636. package/lib/esm/polyface/Polyface.js.map +1 -1
  637. package/lib/esm/polyface/PolyfaceBuilder.d.ts +25 -6
  638. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  639. package/lib/esm/polyface/PolyfaceBuilder.js +59 -8
  640. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  641. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  642. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  643. package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
  644. package/lib/esm/polyface/PolyfaceQuery.js +8 -10
  645. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  646. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  647. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  648. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  649. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts +8 -5
  650. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.d.ts.map +1 -1
  651. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +8 -4
  652. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  653. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts +3 -3
  654. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.d.ts.map +1 -1
  655. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +1 -1
  656. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  657. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts +4 -2
  658. package/lib/esm/polyface/RangeTree/RangeTreeNode.d.ts.map +1 -1
  659. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +9 -12
  660. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  661. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts +8 -3
  662. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.d.ts.map +1 -1
  663. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +13 -6
  664. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  665. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  666. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  667. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  668. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  669. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  670. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  671. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  672. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  673. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  674. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  675. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  676. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  677. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  678. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  679. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  680. package/lib/esm/serialization/DeepCompare.js +1 -1
  681. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  682. package/lib/esm/serialization/GeometrySamples.d.ts +2 -1
  683. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  684. package/lib/esm/serialization/GeometrySamples.js +2 -1
  685. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  686. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  687. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  688. package/lib/esm/solid/Box.js.map +1 -1
  689. package/lib/esm/solid/Cone.js.map +1 -1
  690. package/lib/esm/solid/LinearSweep.js.map +1 -1
  691. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  692. package/lib/esm/solid/RuledSweep.js.map +1 -1
  693. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  694. package/lib/esm/solid/Sphere.js.map +1 -1
  695. package/lib/esm/solid/SweepContour.js.map +1 -1
  696. package/lib/esm/solid/TorusPipe.js.map +1 -1
  697. package/lib/esm/topology/ChainMerge.js.map +1 -1
  698. package/lib/esm/topology/Graph.d.ts +38 -12
  699. package/lib/esm/topology/Graph.d.ts.map +1 -1
  700. package/lib/esm/topology/Graph.js +92 -24
  701. package/lib/esm/topology/Graph.js.map +1 -1
  702. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +5 -4
  703. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts.map +1 -1
  704. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +6 -5
  705. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  706. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts +20 -11
  707. package/lib/esm/topology/HalfEdgeGraphSearch.d.ts.map +1 -1
  708. package/lib/esm/topology/HalfEdgeGraphSearch.js +43 -39
  709. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  710. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  711. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  712. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  713. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  714. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  715. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  716. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  717. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  718. package/lib/esm/topology/MaskManager.js.map +1 -1
  719. package/lib/esm/topology/Merging.d.ts +7 -4
  720. package/lib/esm/topology/Merging.d.ts.map +1 -1
  721. package/lib/esm/topology/Merging.js +17 -12
  722. package/lib/esm/topology/Merging.js.map +1 -1
  723. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  724. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  725. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  726. package/lib/esm/topology/Triangulation.d.ts +13 -11
  727. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  728. package/lib/esm/topology/Triangulation.js +40 -36
  729. package/lib/esm/topology/Triangulation.js.map +1 -1
  730. package/lib/esm/topology/Voronoi.d.ts +195 -0
  731. package/lib/esm/topology/Voronoi.d.ts.map +1 -0
  732. package/lib/esm/topology/Voronoi.js +696 -0
  733. package/lib/esm/topology/Voronoi.js.map +1 -0
  734. package/lib/esm/topology/XYParitySearchContext.d.ts +1 -1
  735. package/lib/esm/topology/XYParitySearchContext.d.ts.map +1 -1
  736. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  737. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"MultiChainCollector.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../../Geometry\";\nimport { FrameBuilder } from \"../../geometry3d/FrameBuilder\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { XYAndZ } from \"../../geometry3d/XYZProps\";\nimport { Arc3d } from \"../Arc3d\";\nimport { BagOfCurves, CurveCollection } from \"../CurveCollection\";\nimport { CurveCurve } from \"../CurveCurve\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { AnyChain, AnyCurve } from \"../CurveTypes\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\nimport { Loop } from \"../Loop\";\nimport { Path } from \"../Path\";\nimport { RegionOps } from \"../RegionOps\";\nimport { StrokeOptions } from \"../StrokeOptions\";\n\n/**\n * Manage a growing array of arrays of curve primitives that are to be joined \"head to tail\" in paths.\n * * The caller makes a sequence of calls to announce individual primitives.\n * * This collector (unlike the simpler [[ChainCollectorContext]]) expects to have inputs arriving in random order, leaving multiple open chains in play at any time.\n * * When all curves have been announced, the call to `grabResult` restructures the various active chains into Paths (and optionally, Loops).\n * * Chain formation is dependent upon input fragment order, as a greedy algorithm is employed.\n * * Usage pattern is\n * * initialization: `context = new MultiChainCollector(gapTol, planeTol)`\n * * many times:\n * * `context.captureCurve(anyCurve)`\n * * `context.captureCurvePrimitive(primitive)`\n * * end: `result = context.grabResult(makeLoopIfClosed)`\n * @internal\n */\nexport class MultiChainCollector {\n /** Accumulated chains. */\n private _chains: CurvePrimitive[][];\n /** Largest gap distance to close. */\n private _gapTolerance: number;\n /** End point snap tolerance (assumed to be as tight or tighter than gapTolerance). */\n private _snapTolerance: number;\n /** Planarity tolerance, used to determine whether to return a Path or Loop in `grabResult(true)`. If undefined, always Path. */\n private _planeTolerance: number | undefined;\n\n private static _staticPointA: Point3d;\n private static _staticPointB: Point3d;\n private _xyzWork0?: Point3d;\n private _xyzWork1?: Point3d;\n\n /** Initialize with an empty array of chains.\n * @param gapTolerance tolerance for calling endpoints identical\n * @param planeTolerance tolerance for considering a closed chain to be planar. If undefined, only create Path. If defined, create Loops for closed chains within tolerance of a plane.\n */\n public constructor(gapTolerance = Geometry.smallMetricDistance, planeTolerance?: number) {\n this._chains = [];\n this._gapTolerance = gapTolerance;\n this._snapTolerance = Geometry.smallMetricDistance;\n this._planeTolerance = planeTolerance;\n }\n /**\n * Find a chain (with index _other than_ exceptChainIndex) that starts or ends at xyz\n * @param xyz endpoint to check\n * @param tolerance absolute distance tolerance for equating endpoints\n * @param exceptChainIndex index of chain to ignore. Send -1 to consider all chains.\n */\n private findAnyChainToConnect(xyz: Point3d, tolerance: number, exceptChainIndex: number = -1): { chainIndex: number, atEnd: boolean } | undefined {\n for (let chainIndexA = 0; chainIndexA < this._chains.length; chainIndexA++) {\n if (exceptChainIndex === chainIndexA)\n continue;\n const chain = this._chains[chainIndexA];\n this._xyzWork1 = chain[chain.length - 1].endPoint(this._xyzWork1);\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\n return { chainIndex: chainIndexA, atEnd: true };\n this._xyzWork1 = chain[0].startPoint(this._xyzWork1);\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\n return { chainIndex: chainIndexA, atEnd: false };\n }\n return undefined;\n }\n /**\n * Insert a single curve primitive into the active chains.\n * * The primitive is captured (not cloned)\n * * The primitive may be reversed in place\n * @param candidate curve to add to the context\n */\n public captureCurvePrimitive(candidate: CurvePrimitive) {\n if (this._snapTolerance < this._gapTolerance) {\n if (this.attachPrimitiveToAnyChain(candidate, this._snapTolerance))\n return;\n }\n if (this.attachPrimitiveToAnyChain(candidate, this._gapTolerance))\n return;\n this._chains.push([candidate]);\n }\n /**\n * Insert any curve into the collection.\n * * This recurses into Path, Loop, BagOfCurves etc\n * * All primitives are captured, and may be reversed in place.\n * @param candidate curve to add to the context\n */\n public captureCurve(candidate: AnyCurve) {\n if (candidate instanceof CurvePrimitive)\n this.captureCurvePrimitive(candidate);\n else if (candidate instanceof CurveCollection) {\n for (const c of candidate.children)\n this.captureCurve(c);\n }\n }\n /** If allowed by the geometry type, move an endpoint. */\n private static simpleEndPointMove(curve: CurvePrimitive, atEnd: boolean, to: XYAndZ): boolean {\n if (curve instanceof (LineSegment3d)) {\n if (atEnd) {\n curve.point1Ref.setFrom(to);\n } else {\n curve.point0Ref.setFrom(to);\n }\n return true;\n } else if (curve instanceof LineString3d && curve.numPoints() > 0) {\n const i = atEnd ? curve.numPoints() - 1 : 0;\n curve.packedPoints.setAtCheckedPointIndex(i, to);\n return true;\n }\n return false;\n }\n /**\n * Try to move the end of curve0 and/or the start of curve1 to a common point.\n * * All z-coordinates are ignored.\n * @param curve0 first curve, assumed to end close to the start of curve1\n * @param curve1 second curve, assumed to start close to the end of curve0\n * @param gapTolerance max distance to move a curve start/end point\n * @returns whether curve start/end point(s) moved\n */\n private static moveHeadOrTail(curve0: CurvePrimitive, curve1: CurvePrimitive, gapTolerance: number): boolean {\n const xyz0 = curve0.endPoint();\n const xyz1 = curve1.startPoint();\n const minShift = Geometry.smallMetricDistance * 0.001;\n const d01 = xyz0.distanceXY(xyz1);\n if (d01 < minShift)\n return false;\n // try lines and linestrings\n if (d01 < gapTolerance) {\n if (this.simpleEndPointMove(curve1, false, xyz0) || this.simpleEndPointMove(curve0, true, xyz1))\n return true;\n }\n // try other primitive types\n const intersections = CurveCurve.intersectionXYPairs(curve0, true, curve1, true);\n const shiftFactor = 5.0;\n for (const pair of intersections) {\n const detail0 = pair.detailA;\n const detail1 = pair.detailB;\n const distance0 = detail0.point.distanceXY(xyz0);\n const distance1 = detail1.point.distanceXY(xyz1);\n if (distance0 < shiftFactor * gapTolerance && distance1 < shiftFactor * gapTolerance) {\n if (curve0 instanceof Arc3d && curve1 instanceof Arc3d) {\n const radians0End = curve0.sweep.fractionToRadians(detail0.fraction);\n curve0.sweep.setStartEndRadians(curve0.sweep.startRadians, radians0End);\n const radians1Start = curve1.sweep.fractionToRadians(detail1.fraction);\n curve1.sweep.setStartEndRadians(radians1Start, curve1.sweep.endRadians);\n return true;\n }\n // TODO: other combinations of types\n }\n }\n return false;\n }\n /** Announce a curve primitive\n * * If a \"nearby\" connection is possible, insert the candidate in the chain and force endpoint match.\n * * Otherwise start a new chain.\n */\n private attachPrimitiveToAnyChain(candidate: CurvePrimitive, tolerance: number): boolean {\n if (candidate) {\n this._xyzWork0 = candidate.startPoint(this._xyzWork0);\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\n if (connect) {\n if (connect.atEnd) {\n const chain = this._chains[connect.chainIndex];\n const index0 = chain.length - 1;\n this._chains[connect.chainIndex].push(candidate);\n MultiChainCollector.moveHeadOrTail(chain[index0], chain[index0 + 1], this._gapTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n } else {\n candidate.reverseInPlace();\n const chain = this._chains[connect.chainIndex];\n chain.splice(0, 0, candidate);\n MultiChainCollector.moveHeadOrTail(chain[0], chain[1], this._gapTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n }\n } else {\n this._xyzWork0 = candidate.endPoint(this._xyzWork0);\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\n if (connect) {\n if (connect.atEnd) {\n candidate.reverseInPlace();\n const chain = this._chains[connect.chainIndex];\n const index0 = chain.length - 1;\n this._chains[connect.chainIndex].push(candidate);\n MultiChainCollector.moveHeadOrTail(chain[index0], chain[index0 + 1], this._gapTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n } else {\n const chain = this._chains[connect.chainIndex];\n chain.splice(0, 0, candidate);\n MultiChainCollector.moveHeadOrTail(chain[0], chain[1], this._gapTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n }\n }\n }\n }\n return false;\n }\n /**\n * Merge two entries in the chain array.\n * * Move each primitive from chainB to the end of chainA.\n * * Clear chainB.\n * * Move the final chain to chainB index.\n * * Decrement the array length.\n * @param chainIndexA index of chainA\n * @param chainIndexB index of chainB\n */\n private mergeChainsForwardForward(chainIndexA: number, chainIndexB: number) {\n const chainA = this._chains[chainIndexA];\n const chainB = this._chains[chainIndexB];\n for (const p of chainB) {\n chainA.push(p);\n }\n chainB.length = 0; // chainIndexB is unused\n const lastChainIndex = this._chains.length - 1;\n if (chainIndexB !== lastChainIndex)\n this._chains[chainIndexB] = this._chains[lastChainIndex];\n this._chains.pop();\n }\n /** Reverse the curve chain in place. */\n private reverseChain(chainIndex: number) {\n const chain = this._chains[chainIndex];\n chain.reverse();\n for (const p of chain)\n p.reverseInPlace();\n }\n /** See if the head or tail of chainIndex matches any existing chain. If so, merge the two chains. */\n private searchAndMergeChainIndex(chainIndex: number, tolerance: number): void {\n // ASSUME valid index of non-empty chain\n const chain = this._chains[chainIndex];\n const lastIndexInChain = chain.length - 1;\n this._xyzWork0 = chain[0].startPoint(this._xyzWork0);\n // try start with any other chain\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\n if (connect) {\n if (!connect.atEnd)\n this.reverseChain(connect.chainIndex);\n this.mergeChainsForwardForward(connect.chainIndex, chainIndex);\n return;\n }\n // try end with any other chain\n this._xyzWork0 = chain[lastIndexInChain].endPoint(this._xyzWork0);\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\n if (connect) {\n if (connect.atEnd)\n this.reverseChain(connect.chainIndex);\n this.mergeChainsForwardForward(chainIndex, connect.chainIndex);\n return;\n }\n }\n /**\n * Convert an array of curve primitives into the simplest possible strongly typed curve structure.\n * @param curves input array, assembled correctly into a single contiguous path, captured by returned object\n * @param makeLoopIfClosed whether to return a Loop from physically closed coplanar curves, otherwise Path\n * @return Loop or Path if multiple curves; the primitive if only one curve; undefined if no curves\n */\n private promoteArrayToCurves(curves: CurvePrimitive[], makeLoopIfClosed: boolean): CurvePrimitive | Path | Loop | undefined {\n if (curves.length === 0)\n return undefined;\n if (makeLoopIfClosed) {\n const primitive0 = curves[0];\n const primitiveN = curves[curves.length - 1];\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\n if (MultiChainCollector.moveHeadOrTail(primitiveN, primitive0, this._gapTolerance)) {\n // get the corrected coordinates\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\n }\n if (MultiChainCollector._staticPointA.isAlmostEqual(MultiChainCollector._staticPointB, this._gapTolerance)) {\n const localToWorld = FrameBuilder.createRightHandedLocalToWorld(curves);\n if (localToWorld) {\n const worldToLocal = localToWorld.inverse();\n if (worldToLocal) {\n const range = RegionOps.curveArrayRange(curves, worldToLocal);\n if (this._planeTolerance !== undefined && range.zLength() <= this._planeTolerance) {\n return Loop.createArray(curves);\n }\n }\n }\n return Path.createArray(curves);\n }\n }\n if (curves.length === 1)\n return curves[0];\n return Path.createArray(curves);\n }\n /** Stroke the curve chain to a line string, de-duplicate the points. */\n private chainToLineString3d(chain: CurvePrimitive[], options?: StrokeOptions): LineString3d | undefined {\n if (chain.length === 0)\n return undefined;\n const linestring = LineString3d.create();\n for (const curve of chain)\n curve.emitStrokes(linestring, options);\n linestring.removeDuplicatePoints(this._gapTolerance);\n return linestring;\n }\n /** Return the collected results, structured as the simplest possible type. */\n public grabResult(makeLoopIfClosed: boolean = false): AnyChain | undefined {\n const chains = this._chains;\n if (chains.length === 0)\n return undefined;\n if (chains.length === 1)\n return this.promoteArrayToCurves(chains[0], makeLoopIfClosed);\n const bag = BagOfCurves.create();\n for (const chain of chains) {\n const q = this.promoteArrayToCurves(chain, makeLoopIfClosed);\n bag.tryAddChild(q);\n }\n return bag;\n }\n /**\n * Return chains as individual calls to announceChain.\n * * Does not use planeTolerance.\n */\n public announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void, options?: StrokeOptions): void {\n const chains = this._chains;\n if (chains.length === 1) {\n const ls = this.chainToLineString3d(chains[0], options);\n if (ls)\n announceChain(ls);\n } else if (chains.length > 1) {\n for (const chain of chains) {\n const ls = this.chainToLineString3d(chain, options);\n if (ls)\n announceChain(ls);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"MultiChainCollector.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.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 Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { FrameBuilder } from \"../../geometry3d/FrameBuilder\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { XYAndZ } from \"../../geometry3d/XYZProps\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { BagOfCurves, CurveCollection } from \"../CurveCollection\";\r\nimport { CurveCurve } from \"../CurveCurve\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { AnyChain, AnyCurve } from \"../CurveTypes\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop } from \"../Loop\";\r\nimport { Path } from \"../Path\";\r\nimport { RegionOps } from \"../RegionOps\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Manage a growing array of arrays of curve primitives that are to be joined \"head to tail\" in paths.\r\n * * The caller makes a sequence of calls to announce individual primitives.\r\n * * This collector (unlike the simpler [[ChainCollectorContext]]) expects to have inputs arriving in random order, leaving multiple open chains in play at any time.\r\n * * When all curves have been announced, the call to `grabResult` restructures the various active chains into Paths (and optionally, Loops).\r\n * * Chain formation is dependent upon input fragment order, as a greedy algorithm is employed.\r\n * * Usage pattern is\r\n * * initialization: `context = new MultiChainCollector(gapTol, planeTol)`\r\n * * many times:\r\n * * `context.captureCurve(anyCurve)`\r\n * * `context.captureCurvePrimitive(primitive)`\r\n * * end: `result = context.grabResult(makeLoopIfClosed)`\r\n * @internal\r\n */\r\nexport class MultiChainCollector {\r\n /** Accumulated chains. */\r\n private _chains: CurvePrimitive[][];\r\n /** Largest gap distance to close. */\r\n private _gapTolerance: number;\r\n /** End point snap tolerance. Internally, this is an upper bound on gapTolerance. */\r\n private _snapTolerance: number;\r\n /** Planarity tolerance, used to determine whether to return a Path or Loop in `grabResult(true)`. If undefined, always Path. */\r\n private _planeTolerance: number | undefined;\r\n\r\n private static _staticPointA: Point3d;\r\n private static _staticPointB: Point3d;\r\n private _xyzWork0?: Point3d;\r\n private _xyzWork1?: Point3d;\r\n\r\n /** Initialize with an empty array of chains.\r\n * @param gapTolerance distance tolerance for calling endpoints identical\r\n * @param planeTolerance distance tolerance for considering a closed chain to be planar. If undefined, only create Path. If defined, create Loops for closed chains within tolerance of a plane.\r\n */\r\n public constructor(gapTolerance = Geometry.smallMetricDistance, planeTolerance?: number) {\r\n this._chains = [];\r\n this._gapTolerance = gapTolerance;\r\n this._snapTolerance = Geometry.smallMetricDistance;\r\n this._planeTolerance = planeTolerance;\r\n }\r\n /**\r\n * Find a chain (with index _other than_ exceptChainIndex) that starts or ends at xyz\r\n * @param xyz endpoint to check\r\n * @param distanceTol absolute distance tolerance for equating endpoints\r\n * @param exceptChainIndex index of chain to ignore. Send -1 to consider all chains.\r\n */\r\n private findAnyChainToConnect(xyz: Point3d, distanceTol: number, exceptChainIndex: number = -1): { chainIndex: number, atEnd: boolean } | undefined {\r\n for (let chainIndexA = 0; chainIndexA < this._chains.length; chainIndexA++) {\r\n if (exceptChainIndex === chainIndexA)\r\n continue;\r\n const chain = this._chains[chainIndexA];\r\n this._xyzWork1 = chain[chain.length - 1].endPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz, distanceTol))\r\n return { chainIndex: chainIndexA, atEnd: true };\r\n this._xyzWork1 = chain[0].startPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz, distanceTol))\r\n return { chainIndex: chainIndexA, atEnd: false };\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Insert a single curve primitive into the active chains.\r\n * * The primitive is captured (not cloned)\r\n * * The primitive may be reversed in place\r\n * @param candidate curve to add to the context\r\n */\r\n public captureCurvePrimitive(candidate: CurvePrimitive) {\r\n if (this._snapTolerance < this._gapTolerance) {\r\n if (this.attachPrimitiveToAnyChain(candidate, this._snapTolerance))\r\n return;\r\n }\r\n if (this.attachPrimitiveToAnyChain(candidate, this._gapTolerance))\r\n return;\r\n this._chains.push([candidate]);\r\n }\r\n /**\r\n * Insert any curve into the collection.\r\n * * This recurses into Path, Loop, BagOfCurves etc\r\n * * All primitives are captured, and may be reversed in place.\r\n * @param candidate curve to add to the context\r\n */\r\n public captureCurve(candidate: AnyCurve) {\r\n if (candidate instanceof CurvePrimitive)\r\n this.captureCurvePrimitive(candidate);\r\n else if (candidate instanceof CurveCollection) {\r\n for (const c of candidate.children)\r\n this.captureCurve(c);\r\n }\r\n }\r\n /** If allowed by the geometry type, move an endpoint. */\r\n private static simpleEndPointMove(curve: CurvePrimitive, atEnd: boolean, to: XYAndZ): boolean {\r\n if (curve instanceof (LineSegment3d)) {\r\n if (atEnd) {\r\n curve.point1Ref.setFrom(to);\r\n } else {\r\n curve.point0Ref.setFrom(to);\r\n }\r\n return true;\r\n } else if (curve instanceof LineString3d && curve.numPoints() > 0) {\r\n const i = atEnd ? curve.numPoints() - 1 : 0;\r\n curve.packedPoints.setAtCheckedPointIndex(i, to);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Try to move the end of curve0 and/or the start of curve1 to a common point.\r\n * * All z-coordinates are ignored.\r\n * @param curve0 first curve, assumed to end close to the start of curve1\r\n * @param curve1 second curve, assumed to start close to the end of curve0\r\n * @param gapTolerance max distance to move a curve start/end point\r\n * @returns whether curve start/end point(s) moved\r\n */\r\n private static moveHeadOrTail(curve0: CurvePrimitive, curve1: CurvePrimitive, gapTolerance: number): boolean {\r\n const xyz0 = curve0.endPoint();\r\n const xyz1 = curve1.startPoint();\r\n const minShift = Geometry.smallMetricDistance * 0.001;\r\n const d01 = xyz0.distanceXY(xyz1);\r\n if (d01 < minShift)\r\n return false;\r\n // try lines and linestrings\r\n if (d01 < gapTolerance) {\r\n if (this.simpleEndPointMove(curve1, false, xyz0) || this.simpleEndPointMove(curve0, true, xyz1))\r\n return true;\r\n }\r\n // try other primitive types\r\n const intersections = CurveCurve.intersectionXYPairs(curve0, true, curve1, true);\r\n const shiftFactor = 5.0;\r\n for (const pair of intersections) {\r\n const detail0 = pair.detailA;\r\n const detail1 = pair.detailB;\r\n const distance0 = detail0.point.distanceXY(xyz0);\r\n const distance1 = detail1.point.distanceXY(xyz1);\r\n if (distance0 < shiftFactor * gapTolerance && distance1 < shiftFactor * gapTolerance) {\r\n if (curve0 instanceof Arc3d && curve1 instanceof Arc3d) {\r\n const radians0End = curve0.sweep.fractionToRadians(detail0.fraction);\r\n curve0.sweep.setStartEndRadians(curve0.sweep.startRadians, radians0End);\r\n const radians1Start = curve1.sweep.fractionToRadians(detail1.fraction);\r\n curve1.sweep.setStartEndRadians(radians1Start, curve1.sweep.endRadians);\r\n return true;\r\n }\r\n // TODO: other combinations of types\r\n }\r\n }\r\n return false;\r\n }\r\n /** Announce a curve primitive\r\n * * If a \"nearby\" connection is possible, insert the candidate in the chain and force endpoint match.\r\n * * Otherwise start a new chain.\r\n */\r\n private attachPrimitiveToAnyChain(candidate: CurvePrimitive, distanceTol: number): boolean {\r\n if (candidate.curveLength() < distanceTol) {\r\n return true;\r\n } else {\r\n this._xyzWork0 = candidate.startPoint(this._xyzWork0);\r\n let connect = this.findAnyChainToConnect(this._xyzWork0, distanceTol);\r\n if (connect) {\r\n if (connect.atEnd) {\r\n const chain = this._chains[connect.chainIndex];\r\n const index0 = chain.length - 1;\r\n this._chains[connect.chainIndex].push(candidate);\r\n MultiChainCollector.moveHeadOrTail(chain[index0], chain[index0 + 1], this._gapTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, distanceTol);\r\n return true;\r\n } else {\r\n candidate.reverseInPlace();\r\n const chain = this._chains[connect.chainIndex];\r\n chain.splice(0, 0, candidate);\r\n MultiChainCollector.moveHeadOrTail(chain[0], chain[1], this._gapTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, distanceTol);\r\n return true;\r\n }\r\n } else {\r\n this._xyzWork0 = candidate.endPoint(this._xyzWork0);\r\n connect = this.findAnyChainToConnect(this._xyzWork0, distanceTol);\r\n if (connect) {\r\n if (connect.atEnd) {\r\n candidate.reverseInPlace();\r\n const chain = this._chains[connect.chainIndex];\r\n const index0 = chain.length - 1;\r\n this._chains[connect.chainIndex].push(candidate);\r\n MultiChainCollector.moveHeadOrTail(chain[index0], chain[index0 + 1], this._gapTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, distanceTol);\r\n return true;\r\n } else {\r\n const chain = this._chains[connect.chainIndex];\r\n chain.splice(0, 0, candidate);\r\n MultiChainCollector.moveHeadOrTail(chain[0], chain[1], this._gapTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, distanceTol);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * Merge two entries in the chain array.\r\n * * Move each primitive from chainB to the end of chainA.\r\n * * Clear chainB.\r\n * * Move the final chain to chainB index.\r\n * * Decrement the array length.\r\n * @param chainIndexA index of chainA\r\n * @param chainIndexB index of chainB\r\n */\r\n private mergeChainsForwardForward(chainIndexA: number, chainIndexB: number) {\r\n const chainA = this._chains[chainIndexA];\r\n const chainB = this._chains[chainIndexB];\r\n for (const p of chainB) {\r\n chainA.push(p);\r\n }\r\n chainB.length = 0; // chainIndexB is unused\r\n const lastChainIndex = this._chains.length - 1;\r\n if (chainIndexB !== lastChainIndex)\r\n this._chains[chainIndexB] = this._chains[lastChainIndex];\r\n this._chains.pop();\r\n }\r\n /** Reverse the curve chain in place. */\r\n private reverseChain(chainIndex: number) {\r\n const chain = this._chains[chainIndex];\r\n chain.reverse();\r\n for (const p of chain)\r\n p.reverseInPlace();\r\n }\r\n /** See if the head or tail of chainIndex matches any existing chain. If so, merge the two chains. */\r\n private searchAndMergeChainIndex(chainIndex: number, distanceTol: number): void {\r\n // ASSUME valid index of non-empty chain\r\n const chain = this._chains[chainIndex];\r\n const lastIndexInChain = chain.length - 1;\r\n this._xyzWork0 = chain[0].startPoint(this._xyzWork0);\r\n // try start with any other chain\r\n let connect = this.findAnyChainToConnect(this._xyzWork0, distanceTol, chainIndex);\r\n if (connect) {\r\n if (!connect.atEnd)\r\n this.reverseChain(connect.chainIndex);\r\n this.mergeChainsForwardForward(connect.chainIndex, chainIndex);\r\n return;\r\n }\r\n // try end with any other chain\r\n this._xyzWork0 = chain[lastIndexInChain].endPoint(this._xyzWork0);\r\n connect = this.findAnyChainToConnect(this._xyzWork0, distanceTol, chainIndex);\r\n if (connect) {\r\n if (connect.atEnd)\r\n this.reverseChain(connect.chainIndex);\r\n this.mergeChainsForwardForward(chainIndex, connect.chainIndex);\r\n return;\r\n }\r\n }\r\n /**\r\n * Convert an array of curve primitives into the simplest possible strongly typed curve structure.\r\n * @param curves input array, assembled correctly into a single contiguous path, captured by returned object\r\n * @param makeLoopIfClosed whether to return a Loop from physically closed coplanar curves, otherwise Path\r\n * @return Loop or Path if multiple curves; the primitive if only one curve; undefined if no curves\r\n */\r\n private promoteArrayToCurves(curves: CurvePrimitive[], makeLoopIfClosed: boolean): CurvePrimitive | Path | Loop | undefined {\r\n if (curves.length === 0)\r\n return undefined;\r\n if (makeLoopIfClosed) {\r\n const primitive0 = curves[0];\r\n const primitiveN = curves[curves.length - 1];\r\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\r\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\r\n if (MultiChainCollector.moveHeadOrTail(primitiveN, primitive0, this._gapTolerance)) {\r\n // get the corrected coordinates\r\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\r\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\r\n }\r\n if (MultiChainCollector._staticPointA.isAlmostEqual(MultiChainCollector._staticPointB, this._gapTolerance)) {\r\n const localToWorld = FrameBuilder.createRightHandedLocalToWorld(curves);\r\n if (localToWorld) {\r\n const worldToLocal = localToWorld.inverse();\r\n if (worldToLocal) {\r\n const range = RegionOps.curveArrayRange(curves, worldToLocal);\r\n if (this._planeTolerance !== undefined && range.zLength() <= this._planeTolerance) {\r\n return Loop.createArray(curves);\r\n }\r\n }\r\n }\r\n return Path.createArray(curves);\r\n }\r\n }\r\n if (curves.length === 1)\r\n return curves[0];\r\n return Path.createArray(curves);\r\n }\r\n /** Stroke the curve chain to a line string, de-duplicate the points. */\r\n private chainToLineString3d(chain: CurvePrimitive[], options?: StrokeOptions): LineString3d | undefined {\r\n if (chain.length === 0)\r\n return undefined;\r\n const linestring = LineString3d.create();\r\n for (const curve of chain)\r\n curve.emitStrokes(linestring, options);\r\n linestring.removeDuplicatePoints(this._gapTolerance);\r\n return linestring;\r\n }\r\n /** Return the collected results, structured as the simplest possible type. */\r\n public grabResult(makeLoopIfClosed: boolean = false): AnyChain | undefined {\r\n const chains = this._chains;\r\n if (chains.length === 0)\r\n return undefined;\r\n if (chains.length === 1)\r\n return this.promoteArrayToCurves(chains[0], makeLoopIfClosed);\r\n const bag = BagOfCurves.create();\r\n for (const chain of chains) {\r\n const q = this.promoteArrayToCurves(chain, makeLoopIfClosed);\r\n bag.tryAddChild(q);\r\n }\r\n return bag;\r\n }\r\n /**\r\n * Return chains as individual calls to announceChain.\r\n * * Does not use planeTolerance.\r\n */\r\n public announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void, options?: StrokeOptions): void {\r\n const chains = this._chains;\r\n if (chains.length === 1) {\r\n const ls = this.chainToLineString3d(chains[0], options);\r\n if (ls)\r\n announceChain(ls);\r\n } else if (chains.length > 1) {\r\n for (const chain of chains) {\r\n const ls = this.chainToLineString3d(chain, options);\r\n if (ls)\r\n announceChain(ls);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NewtonRtoRStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/NewtonRtoRStrokeHandler.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;GAGG;AACH,MAAM,OAAgB,uBAAwB,SAAQ,mBAAmB;IAC7D,qBAAqB,CAA6B;IAC5D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;IACD;;;;;OAKG;IACI,yBAAyB,CAAC,KAAiC;QAChE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IACD,sCAAsC;IAC/B,uBAAuB,CAAC,MAAkC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { NewtonEvaluatorRtoR } from \"../../numerics/Newton\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/**\n * Intermediate class for managing the parentCurve announcements from an IStrokeHandler.\n * @internal\n */\nexport abstract class NewtonRtoRStrokeHandler extends NewtonEvaluatorRtoR {\n protected _parentCurvePrimitive: CurvePrimitive | undefined;\n constructor() {\n super();\n this._parentCurvePrimitive = undefined;\n }\n /**\n * Retain the parentCurvePrimitive.\n * * Calling this method tells the handler that the parent curve is to be used for detail searches.\n * * Example: Transition spiral search is based on linestring first, then the exact spiral.\n * * Example: CurveChainWithDistanceIndex does NOT do this announcement; the constituents act independently.\n */\n public startParentCurvePrimitive(curve: CurvePrimitive | undefined): void {\n this._parentCurvePrimitive = curve;\n }\n /** Forget the parentCurvePrimitive */\n public endParentCurvePrimitive(_curve: CurvePrimitive | undefined): void {\n this._parentCurvePrimitive = undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"NewtonRtoRStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/NewtonRtoRStrokeHandler.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;GAGG;AACH,MAAM,OAAgB,uBAAwB,SAAQ,mBAAmB;IAC7D,qBAAqB,CAA6B;IAC5D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;IACD;;;;;OAKG;IACI,yBAAyB,CAAC,KAAiC;QAChE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IACD,sCAAsC;IAC/B,uBAAuB,CAAC,MAAkC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { NewtonEvaluatorRtoR } from \"../../numerics/Newton\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\n\r\n/**\r\n * Intermediate class for managing the parentCurve announcements from an IStrokeHandler.\r\n * @internal\r\n */\r\nexport abstract class NewtonRtoRStrokeHandler extends NewtonEvaluatorRtoR {\r\n protected _parentCurvePrimitive: CurvePrimitive | undefined;\r\n constructor() {\r\n super();\r\n this._parentCurvePrimitive = undefined;\r\n }\r\n /**\r\n * Retain the parentCurvePrimitive.\r\n * * Calling this method tells the handler that the parent curve is to be used for detail searches.\r\n * * Example: Transition spiral search is based on linestring first, then the exact spiral.\r\n * * Example: CurveChainWithDistanceIndex does NOT do this announcement; the constituents act independently.\r\n */\r\n public startParentCurvePrimitive(curve: CurvePrimitive | undefined): void {\r\n this._parentCurvePrimitive = curve;\r\n }\r\n /** Forget the parentCurvePrimitive */\r\n public endParentCurvePrimitive(_curve: CurvePrimitive | undefined): void {\r\n this._parentCurvePrimitive = undefined;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\nimport { Angle } from \"../../geometry3d/Angle\";\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range1d } from \"../../geometry3d/Range\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\nimport { Arc3d } from \"../Arc3d\";\nimport { GeometryQuery } from \"../GeometryQuery\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\nimport { StrokeOptions } from \"../StrokeOptions\";\n\n/**\n * Accumulator context for searching for extrema of geometry along a plane.\n * @internal\n */\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\n public plane: PlaneAltitudeEvaluator;\n public range: Range1d;\n public lowPoint: Point3d | undefined;\n public highPoint: Point3d | undefined;\n private constructor(plane: PlaneAltitudeEvaluator) {\n super();\n this.plane = plane;\n this.range = Range1d.createNull();\n this.resetRange();\n }\n\n public resetRange() {\n this.range.setNull();\n }\n\n public announcePoint(point: Point3d) {\n const h = this.plane.altitude(point);\n if (this.range.extendLow(h))\n this.lowPoint = point.clone(this.lowPoint);\n if (this.range.extendHigh(h))\n this.highPoint = point.clone(this.highPoint);\n }\n\n public announcePoints(points: GrowableXYZArray) {\n for (let i = 0; i < points.length; i++) {\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\n if (this.range.extendLow(h))\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\n if (this.range.extendHigh(h))\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\n }\n }\n\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\n const context = new PlaneAltitudeRangeContext(plane);\n return context;\n }\n\n public override handleLineSegment3d(segment: LineSegment3d) {\n this.announcePoint(segment.point0Ref);\n this.announcePoint(segment.point1Ref);\n }\n\n public override handleLineString3d(lineString: LineString3d) {\n this.announcePoints(lineString.packedPoints);\n }\n\n private _strokeOptions?: StrokeOptions;\n\n private initStrokeOptions() {\n // TODO: compute the exact extrema; until then stroke aggressively\n if (undefined === this._strokeOptions) {\n this._strokeOptions = new StrokeOptions();\n this._strokeOptions.angleTol = Angle.createDegrees(1);\n }\n }\n\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\n this.initStrokeOptions();\n const ls = LineString3d.create();\n bcurve.emitStrokes(ls, this._strokeOptions);\n this.handleLineString3d(ls);\n }\n\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\n this.initStrokeOptions();\n const ls = LineString3d.create();\n bcurve.emitStrokes(ls, this._strokeOptions);\n this.handleLineString3d(ls);\n }\n\n private _sineCosinePolynomial?: SineCosinePolynomial;\n\n private _workPoint?: Point3d;\n\n public override handleArc3d(g: Arc3d) {\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\n if (g.sweep.isRadiansInSweep(radians))\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\n radians += Math.PI;\n if (g.sweep.isRadiansInSweep(radians))\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\n }\n\n private static findExtremesInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d,\n ): PlaneAltitudeRangeContext | undefined {\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\n const vector = direction instanceof Ray3d ? direction.direction : direction;\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\n if (plane) {\n const context = new PlaneAltitudeRangeContext(plane);\n if (geometry instanceof GeometryQuery) {\n geometry.dispatchToGeometryHandler(context);\n } else if (geometry instanceof GrowableXYZArray) {\n context.announcePoints(geometry);\n } else {\n for (const pt of geometry)\n context.announcePoint(pt);\n }\n return context;\n }\n return undefined;\n }\n /**\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and\n * return points at min and max altitude, packed into a `LineSegment3d`.\n * @param geometry geometry to project\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremePointsInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d,\n ): LineSegment3d | undefined {\n const context = this.findExtremesInDirection(geometry, direction);\n if (context && context.highPoint && context.lowPoint)\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\n return undefined;\n }\n\n /**\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return\n * the min and max altitudes, packed into a Range1d.\n * @param geometry geometry to project\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremeAltitudesInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d,\n ): Range1d | undefined {\n const context = this.findExtremesInDirection(geometry, direction);\n if (context && !context.range.isNull)\n return Range1d.createFrom(context.range, lowHigh);\n return undefined;\n }\n\n /**\n * Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\n * @param geometry geometry to project\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremeFractionsAlongDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d,\n ): Range1d | undefined {\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\n if (undefined !== range) {\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\n if (undefined !== scaleToFraction) {\n range.low *= scaleToFraction;\n range.high *= scaleToFraction;\n return range;\n }\n }\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.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 Curve\r\n */\r\n\r\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Accumulator context for searching for extrema of geometry along a plane.\r\n * @internal\r\n */\r\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\r\n public plane: PlaneAltitudeEvaluator;\r\n public range: Range1d;\r\n public lowPoint: Point3d | undefined;\r\n public highPoint: Point3d | undefined;\r\n private constructor(plane: PlaneAltitudeEvaluator) {\r\n super();\r\n this.plane = plane;\r\n this.range = Range1d.createNull();\r\n this.resetRange();\r\n }\r\n\r\n public resetRange() {\r\n this.range.setNull();\r\n }\r\n\r\n public announcePoint(point: Point3d) {\r\n const h = this.plane.altitude(point);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = point.clone(this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = point.clone(this.highPoint);\r\n }\r\n\r\n public announcePoints(points: GrowableXYZArray) {\r\n for (let i = 0; i < points.length; i++) {\r\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\r\n }\r\n }\r\n\r\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n return context;\r\n }\r\n\r\n public override handleLineSegment3d(segment: LineSegment3d) {\r\n this.announcePoint(segment.point0Ref);\r\n this.announcePoint(segment.point1Ref);\r\n }\r\n\r\n public override handleLineString3d(lineString: LineString3d) {\r\n this.announcePoints(lineString.packedPoints);\r\n }\r\n\r\n private _strokeOptions?: StrokeOptions;\r\n\r\n private initStrokeOptions() {\r\n // TODO: compute the exact extrema; until then stroke aggressively\r\n if (undefined === this._strokeOptions) {\r\n this._strokeOptions = new StrokeOptions();\r\n this._strokeOptions.angleTol = Angle.createDegrees(1);\r\n }\r\n }\r\n\r\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n private _sineCosinePolynomial?: SineCosinePolynomial;\r\n\r\n private _workPoint?: Point3d;\r\n\r\n public override handleArc3d(g: Arc3d) {\r\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\r\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n radians += Math.PI;\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\r\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\r\n }\r\n\r\n private static findExtremesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d,\r\n ): PlaneAltitudeRangeContext | undefined {\r\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\r\n const vector = direction instanceof Ray3d ? direction.direction : direction;\r\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\r\n if (plane) {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n if (geometry instanceof GeometryQuery) {\r\n geometry.dispatchToGeometryHandler(context);\r\n } else if (geometry instanceof GrowableXYZArray) {\r\n context.announcePoints(geometry);\r\n } else {\r\n for (const pt of geometry)\r\n context.announcePoint(pt);\r\n }\r\n return context;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and\r\n * return points at min and max altitude, packed into a `LineSegment3d`.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremePointsInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d,\r\n ): LineSegment3d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && context.highPoint && context.lowPoint)\r\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return\r\n * the min and max altitudes, packed into a Range1d.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeAltitudesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d,\r\n ): Range1d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && !context.range.isNull)\r\n return Range1d.createFrom(context.range, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeFractionsAlongDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d,\r\n ): Range1d | undefined {\r\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\r\n if (undefined !== range) {\r\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\r\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\r\n if (undefined !== scaleToFraction) {\r\n range.low *= scaleToFraction;\r\n range.high *= scaleToFraction;\r\n return range;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PolygonOffsetContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PolygonOffsetContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { Geometry } from \"../../Geometry\";\nimport { AngleSweep } from \"../../geometry3d/AngleSweep\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\nimport { CurveCurve } from \"../CurveCurve\";\nimport { CurveCurveApproachType, CurveLocationDetailPair } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\nimport { Loop } from \"../Loop\";\nimport { JointOptions, OffsetOptions } from \"../OffsetOptions\";\nimport { Path } from \"../Path\";\nimport { RegionOps } from \"../RegionOps\";\n\n/**\n * Classification of how the joint is constructed.\n * @internal\n */\nenum JointMode {\n Unknown = 0, /** used when joint mode is unknown. */\n Cap = 1, /** used to annotate a \"Joint\" at the start/end of a curve without wrap (so there's no \"other\" curve). */\n Extend = 2, /** used when offset curves do not intersect and needs expanding to connect. */\n Trim = -1, /** used when offset curves intersect and still goes beyond the intersection so need trimming. */\n JustGeometry = 3, /** unused */\n Gap = 4, /** used when joint construction fails, resulting in a gap in the offset filled by a line segment. */\n}\n\n/**\n * Description of geometry around a joint.\n * @internal\n */\nclass Joint {\n /** Enumeration of how the joint is constructed. */\n public flexure: JointMode;\n /** Curve before the joint. */\n public curve0?: CurvePrimitive;\n /** Fractional position on curve0 (may be a trim or extension). */\n public fraction0?: number;\n /** Curve after the joint (may be a trim or extension). */\n public curve1?: CurvePrimitive;\n /** Fractional position on curve1. */\n public fraction1?: number;\n /** Curve to be added within the joint. */\n public jointCurve?: CurvePrimitive;\n /** Common point on the original curves. */\n public swingPoint?: Point3d;\n /** Pointer to next joint. */\n public nextJoint?: Joint;\n /** Pointer to previous joint. */\n public previousJoint?: Joint;\n // capture references to all data members\n public constructor(\n curve0: CurvePrimitive | undefined, curve1: CurvePrimitive | undefined, swingPoint: Point3d | undefined,\n ) {\n this.curve0 = curve0;\n this.curve1 = curve1;\n this.swingPoint = swingPoint;\n this.flexure = JointMode.Unknown;\n }\n /**\n * Try to construct an arc transition from ray0 to ray1 with given center.\n */\n public static constructArc(ray0: Ray3d, center: Point3d | undefined, ray1: Ray3d): Arc3d | undefined {\n if (center !== undefined && Geometry.isSameCoordinate(ray0.origin.distance(center), ray1.origin.distance(center))) {\n const angle = ray0.direction.angleToXY(ray1.direction);\n const vector0 = Vector3d.createStartEnd(center, ray0.origin);\n const vector90 = vector0.rotate90CCWXY();\n return Arc3d.create(center, vector0, vector90, AngleSweep.createStartEndRadians(0.0, angle.radians));\n }\n return undefined;\n }\n /** Extract a json object of {curve0:data, fraction0:data, curve1:data, fraction1:data} */\n public shallowExtract(): any {\n return { curve0: this.curve0, curve1: this.curve1, fraction0: this.fraction0, fraction1: this.fraction1 };\n }\n /** Establish the nextJoint and previousJoint links from joint0 to joint1. */\n public static link(joint0: Joint, joint1: Joint | undefined) {\n joint0.nextJoint = joint1;\n if (joint1)\n joint1.previousJoint = joint0;\n if (joint0.curve1 && joint1 && !joint1.curve0)\n joint1.curve0 = joint0.curve1;\n else if (!joint0.curve1 && joint1 && joint1.curve0)\n joint0.curve1 = joint1.curve0;\n }\n /**\n * * If nextJoint and nextJoint.fraction0 are defined, return them.\n * * Otherwise return defaultValue\n */\n public nextJointFraction0(defaultValue: number): number {\n if (this.nextJoint && this.nextJoint.fraction0 !== undefined)\n return this.nextJoint.fraction0;\n return defaultValue;\n }\n private static addStrokes(destination: LineString3d, curve?: CurvePrimitive) {\n if (curve) {\n curve.emitStrokes(destination);\n }\n }\n private static addPoint(destination: LineString3d, point: Point3d) {\n if (destination.packedPoints.length > 0) {\n const pointA = destination.endPoint();\n if (!pointA.isAlmostEqual(point))\n destination.packedPoints.push(point);\n }\n }\n /** Append stroke points along the offset curve defined by the Joint chain to the destination line string. */\n public static collectStrokesFromChain(start: Joint, destination: LineString3d, maxTest: number = 100) {\n let numOut = -2 * maxTest; // allow extra things to happen\n Joint.visitJointsOnChain(\n start,\n (joint: Joint) => {\n this.addStrokes(destination, joint.jointCurve);\n if (joint.curve1 && joint.fraction1 !== undefined) {\n const fA = joint.fraction1;\n const fB = joint.nextJointFraction0(1.0);\n let curve1;\n if (fA === 0.0 && fB === 1.0)\n curve1 = joint.curve1.clone();\n else if (fA < fB)\n curve1 = joint.curve1.clonePartialCurve(fA, fB); // trimming is done by clonePartialCurve\n if (curve1) {\n if (!joint.jointCurve) {\n this.addPoint(destination, curve1.startPoint());\n }\n }\n this.addStrokes(destination, curve1);\n }\n return numOut++ < maxTest;\n },\n maxTest,\n );\n }\n private static collectPrimitive(destination: CurvePrimitive[], primitive?: CurvePrimitive) {\n if (primitive) {\n if (destination.length > 0) {\n const pointA = destination[destination.length - 1].endPoint();\n const pointB = primitive.startPoint();\n if (!pointA.isAlmostEqual(pointB)) {\n destination.push(LineSegment3d.create(pointA, pointB));\n }\n }\n destination.push(primitive);\n }\n }\n private static adjustJointToPrimitives(joint: Joint) {\n const ls = joint.jointCurve;\n if (ls instanceof LineString3d) {\n if (joint.curve0) {\n const curvePoint = joint.curve0.endPoint();\n const jointPoint0 = ls.startPoint();\n if (!curvePoint.isAlmostEqual(jointPoint0))\n ls.packedPoints.setAtCheckedPointIndex(0, curvePoint);\n }\n if (joint.curve1) {\n const curvePoint = joint.curve1.startPoint();\n const jointPoint1 = ls.endPoint();\n if (!curvePoint.isAlmostEqual(jointPoint1))\n ls.packedPoints.setAtCheckedPointIndex(ls.packedPoints.length - 1, curvePoint);\n }\n }\n }\n /** Append CurvePrimitives along the offset curve defined by the Joint chain to the destination array. */\n public static collectCurvesFromChain(start: Joint | undefined, destination: CurvePrimitive[], maxTest: number = 100) {\n if (start === undefined)\n return;\n let numOut = -2 * maxTest; // allow extra things to happen\n Joint.visitJointsOnChain(\n start,\n (joint: Joint) => {\n this.adjustJointToPrimitives(joint);\n this.collectPrimitive(destination, joint.jointCurve);\n if (joint.curve1 && joint.fraction1 !== undefined) {\n const fA = joint.fraction1;\n const fB = joint.nextJointFraction0(1.0);\n let curve1;\n if (fA === 0.0 && fB === 1.0)\n curve1 = joint.curve1.clone();\n else if (fA < fB)\n curve1 = joint.curve1.clonePartialCurve(fA, fB); // trimming is done by clonePartialCurve\n this.collectPrimitive(destination, curve1);\n }\n return numOut++ < maxTest;\n },\n maxTest,\n );\n }\n /**\n * Execute `joint.annotateJointMode()` at all joints on the chain to set some of the joints' attributes,\n * such as whether to extend both curves to intersection or to fill the gap between curves.\n */\n public static annotateChain(start: Joint | undefined, options: JointOptions, maxTest: number = 100) {\n if (start)\n Joint.visitJointsOnChain(start, (joint: Joint) => { joint.annotateJointMode(options); return true; }, maxTest);\n }\n /**\n * Visit joints on a chain.\n * * Terminates if `callback` returns `false`.\n * @param start first (and, for cyclic chain, final) joint.\n * @param callback function to call with each Joint as a single parameter.\n * @param maxTest\n */\n public static visitJointsOnChain(start: Joint, callback: (joint: Joint) => boolean, maxTest: number = 100): boolean {\n let joint: Joint | undefined = start;\n if (joint) {\n let numTest = 0;\n while (joint !== undefined) {\n if (numTest++ >= maxTest + 5) // allow extra things to happen\n return true;\n if (!callback(joint))\n return false;\n joint = joint.nextJoint;\n if (joint === start)\n break;\n }\n }\n return true;\n }\n /** NOTE: no assumption on type of curve0, curve1 */\n private annotateExtension(options: JointOptions) {\n if (this.curve0 && this.curve1) {\n const ray0 = this.curve0.fractionToPointAndDerivative(1.0);\n const ray1 = this.curve1.fractionToPointAndDerivative(0.0);\n ray0.direction.z = ray1.direction.z = 0.0; // xy-offset\n const intersection = Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines\n if (intersection.approachType === CurveCurveApproachType.Intersection) {\n if (intersection.detailA.fraction >= 0.0 && intersection.detailB.fraction <= 0.0) {\n this.fraction0 = 1.0;\n this.fraction1 = 0.0;\n this.flexure = JointMode.Extend;\n const theta = ray0.getDirectionRef().angleToXY(ray1.getDirectionRef()); // angle between the 2 ray lines\n if (options.needArc(theta)) {\n const arc = Joint.constructArc(ray0, (this.curve0 as any).baseCurveEnd, ray1);\n if (arc) {\n this.jointCurve = arc;\n return;\n }\n }\n const numChamferPoints = options.numChamferPoints(theta); // how many interior points in the linestring\n if (numChamferPoints <= 1) { // create sharp corner\n this.jointCurve = LineString3d.create(ray0.origin, intersection.detailA.point, ray1.origin);\n return;\n }\n if (numChamferPoints > 1) { // create chamfer corner (a line string)\n const radians0 = theta.radians;\n const numHalfStep = 2.0 * numChamferPoints;\n const halfStepRadians = radians0 / numHalfStep;\n const arc = Joint.constructArc(ray0, (this.curve0 as any).baseCurveEnd, ray1);\n if (arc !== undefined) {\n const radialFraction = 1 / Math.cos(halfStepRadians);\n const jointCurve = LineString3d.create();\n this.jointCurve = jointCurve;\n jointCurve.addPoint(ray0.origin); // possibly extend segment or line string\n\n for (let i = 0; i < numChamferPoints; i++) {\n const arcFraction = (1 + 2 * i) / numHalfStep;\n jointCurve.addPoint(arc.fractionAndRadialFractionToPoint(arcFraction, radialFraction));\n }\n jointCurve.addPoint(ray1.origin); // possibly extend segment or line string.\n return;\n }\n }\n }\n }\n // if there is no intersection between the 2 ray lines, fill the gap by a line segment\n this.flexure = JointMode.Gap;\n this.jointCurve = LineSegment3d.create(this.curve0.fractionToPoint(1.0), this.curve1.fractionToPoint(0.0));\n this.fraction0 = 1.0;\n this.fraction1 = 0.0;\n }\n }\n /** Select the index at which summed fraction difference is smallest */\n private selectIntersectionIndexByFraction(\n fractionA: number, fractionB: number, intersections: CurveLocationDetailPair[],\n ): number {\n let index = -1;\n let aMin = Number.MAX_VALUE;\n for (let i = 0; i < intersections.length; i++) {\n const a = Math.abs(intersections[i].detailA.fraction - fractionA)\n + Math.abs(intersections[i].detailB.fraction - fractionB);\n if (a < aMin) {\n aMin = a;\n index = i;\n }\n }\n return index;\n }\n /**\n * Examine the adjacent geometry to set some of joint attributes:\n * * set JointMode: one of Cap, Extend, or Trim\n * * set fraction0 and fraction1 of intersection of curve0 and curve1\n * * set joint curve\n * * this REFERENCES curve0, curve1, fraction0, fraction1\n * * this does not reference nextJoint and previousJoint\n */\n public annotateJointMode(options: JointOptions): void {\n if (!this.curve0 && this.curve1) { // joint at the start of the chain\n this.flexure = JointMode.Cap;\n this.fraction1 = 0.0;\n } else if (this.curve0 && !this.curve1) { // joint at the end of the chain\n this.flexure = JointMode.Cap;\n this.fraction0 = 1.0;\n } else if (this.curve0 && this.curve1) { // joints at the middle of the chain\n if (this.curve0.endPoint().isAlmostEqualXY(this.curve1.startPoint())) { // joint at shared endpoint\n this.fraction0 = 1.0;\n this.fraction1 = 0.0;\n this.flexure = JointMode.Trim;\n } else if (this.curve0 instanceof LineSegment3d && this.curve1 instanceof LineSegment3d) { // pair of lines\n const ray0 = this.curve0.fractionToPointAndDerivative(0.0);\n const ray1 = this.curve1.fractionToPointAndDerivative(0.0);\n ray0.direction.z = ray1.direction.z = 0.0; // xy-offset\n const intersection = Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines\n if (intersection.approachType === CurveCurveApproachType.Intersection || intersection.approachType === CurveCurveApproachType.PerpendicularChord) {\n this.fraction0 = intersection.detailA.fraction;\n this.fraction1 = intersection.detailB.fraction;\n if (this.fraction0 >= 1.0 && this.fraction1 <= 0.0) { // need to extend\n this.annotateExtension(options);\n } else if (this.fraction0 < 1.0 && this.fraction1 > 0.0) { // need to trim\n this.flexure = JointMode.Trim;\n } else if (this.fraction0 > 1.0 && this.fraction1 > 1.0) { // need to fill gap with a single line segment\n this.flexure = JointMode.Gap;\n this.jointCurve = LineSegment3d.create(this.curve0.fractionToPoint(1.0), this.curve1.fractionToPoint(0.0));\n this.fraction0 = 1.0;\n this.fraction1 = 0.0;\n }\n }\n } else { // generic pair of curves\n const intersections = CurveCurve.intersectionXYPairs(this.curve0, false, this.curve1, false);\n const intersectionIndex = this.selectIntersectionIndexByFraction(1.0, 0.0, intersections);\n if (intersectionIndex >= 0) { // need to trim\n this.flexure = JointMode.Trim;\n this.fraction0 = intersections[intersectionIndex].detailA.fraction;\n this.fraction1 = intersections[intersectionIndex].detailB.fraction;\n } else { // need to extend\n this.annotateExtension(options);\n }\n }\n }\n }\n /**\n * * Examine the primitive trim fractions between each pair of joints.\n * * If trim fractions indicate the primitive must disappear, replace the joint pair by a new joint pointing at\n * surrounding primitives\n * @param start\n */\n public static removeDegeneratePrimitives(\n start: Joint, options: JointOptions, maxTest: number,\n ): { newStart: Joint, numJointRemoved: number } {\n let jointA: Joint | undefined = start;\n let numRemoved = 0;\n let numTest = 0;\n if (jointA) {\n while (jointA !== undefined && numTest++ < maxTest) {\n // each iteration looks at the two curves f, g on either side of jointB\n const jointB = jointA.nextJoint;\n if (jointA\n && jointB\n && jointA.previousJoint\n && jointB.nextJoint\n && jointA.fraction1 !== undefined\n && jointB.fraction0 !== undefined\n ) {\n // f0 and f1 are fractions on primitive f, between jointA and jointB.\n const f0 = jointA.fraction1;\n const f1 = jointB.fraction0;\n // g0 and g1 are fractions on primitive g, between jointB and jointC.\n const g0 = jointB.fraction1;\n const g1 = jointB.nextJoint.fraction0;\n const eliminateF = f0 >= f1 || f0 > 1.0;\n const eliminateG = (g0 !== undefined && g0 > 1.0) || (g0 !== undefined && g1 !== undefined && g0 >= g1);\n if (eliminateF && eliminateG) { // collapse jointA, jointB, and jointC into a new joint\n const jointC = jointB.nextJoint;\n const newJoint: Joint = new Joint(jointA.curve0, jointC.curve1, undefined);\n Joint.link(jointA.previousJoint, newJoint);\n Joint.link(newJoint, jointC.nextJoint);\n newJoint.annotateJointMode(options);\n if (newJoint.previousJoint)\n newJoint.previousJoint.annotateJointMode(options);\n if (newJoint.nextJoint)\n newJoint.nextJoint.annotateJointMode(options);\n numRemoved += 2;\n if (jointA === start || jointB === start || jointC === start)\n start = newJoint;\n jointA = newJoint;\n } else if (eliminateF) { // collapse jointA and jointB into a new joint\n const newJoint: Joint = new Joint(jointA.curve0, jointB.curve1, undefined);\n Joint.link(jointA.previousJoint, newJoint);\n Joint.link(newJoint, jointB.nextJoint);\n newJoint.annotateJointMode(options);\n if (newJoint.previousJoint)\n newJoint.previousJoint.annotateJointMode(options);\n if (newJoint.nextJoint)\n newJoint.nextJoint.annotateJointMode(options);\n numRemoved++;\n if (jointA === start || jointB === start)\n start = newJoint;\n jointA = newJoint;\n }\n }\n jointA = jointA.nextJoint;\n if (jointA === start)\n break;\n }\n }\n return { newStart: start, numJointRemoved: numRemoved };\n }\n}\n\n/**\n * Context for building a wire xy-offset.\n * @internal\n */\nexport class PolygonWireOffsetContext {\n /** Construct a context. */\n public constructor() { }\n private static _unitAlong = Vector3d.create();\n private static _unitPerp = Vector3d.create();\n private static _offsetA = Point3d.create();\n private static _offsetB = Point3d.create();\n // Construct a single offset from base points\n private static createOffsetSegment(\n basePointA: Point3d, basePointB: Point3d, distance: number,\n ): CurvePrimitive | undefined {\n Vector3d.createStartEnd(basePointA, basePointB, this._unitAlong);\n this._unitAlong.z = 0.0; // xy-offset\n if (this._unitAlong.normalizeInPlace()) {\n this._unitAlong.rotate90CCWXY(this._unitPerp);\n const segment = LineSegment3d.create(\n basePointA.plusScaled(this._unitPerp, distance, this._offsetA),\n basePointB.plusScaled(this._unitPerp, distance, this._offsetB),\n );\n CurveChainWireOffsetContext.applyBasePoints(segment, basePointA.clone(), basePointB.clone());\n return segment;\n }\n return undefined;\n }\n /**\n * Construct a wire (not area) that is offset from given polyline or polygon.\n * * For best results, points should be in a horizontal plane because z-coordinates are ignored.\n * * This is a simple wire offset (in the form of a line string), not an area.\n * * If offsetDistance is given as a number, default OffsetOptions are applied.\n * * See [[JointOptions]] class doc for offset construction rules.\n * @param points a single loop or path\n * @param wrap true to offset the wraparound joint. Assumes first = last point.\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or JointOptions\n * object.\n */\n public constructPolygonWireXYOffset(\n points: Point3d[], wrap: boolean, leftOffsetDistanceOrOptions: number | JointOptions,\n ): CurveChain | undefined {\n if (wrap && !points[0].isAlmostEqual(points[points.length - 1]))\n wrap = false; // no wrap possible for polylines\n // create raw offset segments as a linked list of Joints, starting with joint0\n const options = JointOptions.create(leftOffsetDistanceOrOptions);\n const numPoints = points.length;\n let fragment0: CurvePrimitive | undefined;\n let joint0, previousJoint: Joint | undefined;\n for (let i = 0; i + 1 < numPoints; ++i) {\n if (!previousJoint) { // start the linked list at the first nontrivial xy-segment\n if (fragment0 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance))\n previousJoint = joint0 = new Joint(undefined, fragment0, points[i]);\n } else {\n const fragment1 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance);\n if (fragment1) { // append the next nontrivial xy-segment\n const newJoint = new Joint(fragment0, fragment1, points[i]);\n Joint.link(previousJoint, newJoint);\n previousJoint = newJoint;\n fragment0 = fragment1;\n }\n }\n }\n if (!fragment0 || !previousJoint || !joint0)\n return undefined; // no edge with positive xy-length\n const lastJoint = wrap ? joint0 : new Joint(fragment0, undefined, points[numPoints - 1]);\n Joint.link(previousJoint, lastJoint);\n Joint.annotateChain(joint0, options, numPoints);\n // make limited passes through the Joint chain until no self-intersections are removed\n for (let pass = 0; pass++ < 5;) {\n const state = Joint.removeDegeneratePrimitives(joint0, options, numPoints);\n joint0 = state.newStart;\n if (state.numJointRemoved === 0)\n break;\n }\n const chain = LineString3d.create();\n Joint.collectStrokesFromChain(joint0, chain, numPoints); // compute offset corners (by extension/trim)\n const n = chain.packedPoints.length;\n if (n > 1) {\n if (chain.packedPoints.front()!.isAlmostEqual(chain.packedPoints.back()!))\n return Loop.create(chain);\n else\n return Path.create(chain);\n }\n return undefined;\n }\n}\n\n/**\n * Context for building a wire xy-offset from a Path or Loop of CurvePrimitives\n * @internal\n */\nexport class CurveChainWireOffsetContext {\n /** construct a context. */\n public constructor() { }\n /**\n * Annotate a CurvePrimitive with properties `baseCurveStart` and `baseCurveEnd`.\n * @param cp curve primitive to annotate\n * @param startPoint optional start point\n * @param endPoint optional end point\n * @return the input CurvePrimitive with annotations\n */\n public static applyBasePoints(\n cp: CurvePrimitive | undefined, startPoint: Point3d | undefined, endPoint: Point3d | undefined,\n ): CurvePrimitive | undefined {\n if (cp !== undefined) {\n if (startPoint !== undefined)\n (cp as any).baseCurveStart = startPoint;\n if (endPoint !== undefined)\n (cp as any).baseCurveEnd = endPoint;\n }\n return cp;\n }\n /**\n * Create the offset of a single curve primitive as viewed in the xy-plane (ignoring z).\n * * Each primitive may be labeled (as an `any` object) with start or end point of base curve:\n * * `(primitive as any).baseCurveStart: Point3d`\n * * `(primitive as any).baseCurveEnd: Point3d`\n * @param curve primitive to offset\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object\n */\n public static createSingleOffsetPrimitiveXY(\n curve: CurvePrimitive, offsetDistanceOrOptions: number | OffsetOptions,\n ): CurvePrimitive | CurvePrimitive[] | undefined {\n const offset = curve.constructOffsetXY(offsetDistanceOrOptions);\n if (offset === undefined)\n return undefined;\n // decorate each offset with its base curve's endpoints\n if (Array.isArray(offset)) {\n const basePrims = curve.collectCurvePrimitives(undefined, true, true);\n if (basePrims.length !== offset.length)\n return undefined; // unexpected aggregate curve type!\n for (let i = 0; i < basePrims.length; ++i)\n this.applyBasePoints(offset[i], basePrims[i].startPoint(), basePrims[i].endPoint());\n return offset;\n }\n return this.applyBasePoints(offset, curve.startPoint(), curve.endPoint());\n }\n /**\n * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).\n * * The construction will remove \"some\" local effects of features smaller than the offset distance, but will\n * not detect self intersection among widely separated edges.\n * * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/Offset\n * @param curves base curves.\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.\n */\n public static constructCurveXYOffset(\n curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions | OffsetOptions,\n ): CurveCollection | undefined {\n const wrap: boolean = curves instanceof Loop;\n const offsetOptions = OffsetOptions.create(offsetDistanceOrOptions);\n const simpleOffsets: CurvePrimitive[] = [];\n // traverse primitives (children of curves) and create simple offsets of each primitive as an array\n for (const c of curves.children) {\n const c1 = CurveChainWireOffsetContext.createSingleOffsetPrimitiveXY(c, offsetOptions);\n if (c1 === undefined) {\n // bad; maybe arc to inside?\n } else if (c1 instanceof CurvePrimitive) {\n simpleOffsets.push(c1);\n } else if (Array.isArray(c1)) {\n for (const c2 of c1) {\n if (c2 instanceof CurvePrimitive)\n simpleOffsets.push(c2);\n }\n }\n }\n // create joints between array elements to make offsets as a linked list (joint0)\n let fragment0;\n let newJoint;\n let previousJoint;\n let joint0;\n for (const fragment1 of simpleOffsets) {\n if (fragment1) {\n newJoint = new Joint(fragment0, fragment1, fragment1.fractionToPoint(0.0));\n if (newJoint !== undefined)\n if (joint0 === undefined)\n joint0 = newJoint;\n if (previousJoint)\n Joint.link(previousJoint, newJoint);\n previousJoint = newJoint;\n fragment0 = fragment1;\n }\n }\n if (joint0 && previousJoint && curves instanceof Loop)\n Joint.link(previousJoint, joint0);\n // annotateChain sets some of the joint attributes (including how to extend curves or fill the gap between curves)\n const numOffset = simpleOffsets.length;\n Joint.annotateChain(joint0, offsetOptions.jointOptions, numOffset);\n if (joint0) {\n // make limited passes through the Joint chain until no self-intersections are removed\n for (let pass = 0; pass++ < 5;) {\n const state = Joint.removeDegeneratePrimitives(joint0, offsetOptions.jointOptions, numOffset);\n joint0 = state.newStart;\n if (state.numJointRemoved === 0)\n break;\n }\n }\n // turn the Joint linked list into a CurveCollection. trimming is done in collectCurvesFromChain\n const outputCurves: CurvePrimitive[] = [];\n Joint.collectCurvesFromChain(joint0, outputCurves, numOffset);\n return RegionOps.createLoopPathOrBagOfCurves(outputCurves, wrap, true);\n }\n}\n"]}
1
+ {"version":3,"file":"PolygonOffsetContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PolygonOffsetContext.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 Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { AngleSweep } from \"../../geometry3d/AngleSweep\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { CurveCurve } from \"../CurveCurve\";\r\nimport { CurveCurveApproachType, CurveLocationDetailPair } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { Loop } from \"../Loop\";\r\nimport { JointOptions, OffsetOptions } from \"../OffsetOptions\";\r\nimport { Path } from \"../Path\";\r\nimport { RegionOps } from \"../RegionOps\";\r\n\r\n/**\r\n * Classification of how the joint is constructed.\r\n * @internal\r\n */\r\nenum JointMode {\r\n Unknown = 0, /** used when joint mode is unknown. */\r\n Cap = 1, /** used to annotate a \"Joint\" at the start/end of a curve without wrap (so there's no \"other\" curve). */\r\n Extend = 2, /** used when offset curves do not intersect and needs expanding to connect. */\r\n Trim = -1, /** used when offset curves intersect and still goes beyond the intersection so need trimming. */\r\n JustGeometry = 3, /** unused */\r\n Gap = 4, /** used when joint construction fails, resulting in a gap in the offset filled by a line segment. */\r\n}\r\n\r\n/**\r\n * Description of geometry around a joint.\r\n * @internal\r\n */\r\nclass Joint {\r\n /** Enumeration of how the joint is constructed. */\r\n public flexure: JointMode;\r\n /** Curve before the joint. */\r\n public curve0?: CurvePrimitive;\r\n /** Fractional position on curve0 (may be a trim or extension). */\r\n public fraction0?: number;\r\n /** Curve after the joint (may be a trim or extension). */\r\n public curve1?: CurvePrimitive;\r\n /** Fractional position on curve1. */\r\n public fraction1?: number;\r\n /** Curve to be added within the joint. */\r\n public jointCurve?: CurvePrimitive;\r\n /** Common point on the original curves. */\r\n public swingPoint?: Point3d;\r\n /** Pointer to next joint. */\r\n public nextJoint?: Joint;\r\n /** Pointer to previous joint. */\r\n public previousJoint?: Joint;\r\n // capture references to all data members\r\n public constructor(\r\n curve0: CurvePrimitive | undefined, curve1: CurvePrimitive | undefined, swingPoint: Point3d | undefined,\r\n ) {\r\n this.curve0 = curve0;\r\n this.curve1 = curve1;\r\n this.swingPoint = swingPoint;\r\n this.flexure = JointMode.Unknown;\r\n }\r\n /**\r\n * Try to construct an arc transition from ray0 to ray1 with given center.\r\n */\r\n public static constructArc(ray0: Ray3d, center: Point3d | undefined, ray1: Ray3d): Arc3d | undefined {\r\n if (center !== undefined && Geometry.isSameCoordinate(ray0.origin.distance(center), ray1.origin.distance(center))) {\r\n const angle = ray0.direction.angleToXY(ray1.direction);\r\n const vector0 = Vector3d.createStartEnd(center, ray0.origin);\r\n const vector90 = vector0.rotate90CCWXY();\r\n return Arc3d.create(center, vector0, vector90, AngleSweep.createStartEndRadians(0.0, angle.radians));\r\n }\r\n return undefined;\r\n }\r\n /** Extract a json object of {curve0:data, fraction0:data, curve1:data, fraction1:data} */\r\n public shallowExtract(): any {\r\n return { curve0: this.curve0, curve1: this.curve1, fraction0: this.fraction0, fraction1: this.fraction1 };\r\n }\r\n /** Establish the nextJoint and previousJoint links from joint0 to joint1. */\r\n public static link(joint0: Joint, joint1: Joint | undefined) {\r\n joint0.nextJoint = joint1;\r\n if (joint1)\r\n joint1.previousJoint = joint0;\r\n if (joint0.curve1 && joint1 && !joint1.curve0)\r\n joint1.curve0 = joint0.curve1;\r\n else if (!joint0.curve1 && joint1 && joint1.curve0)\r\n joint0.curve1 = joint1.curve0;\r\n }\r\n /**\r\n * * If nextJoint and nextJoint.fraction0 are defined, return them.\r\n * * Otherwise return defaultValue\r\n */\r\n public nextJointFraction0(defaultValue: number): number {\r\n if (this.nextJoint && this.nextJoint.fraction0 !== undefined)\r\n return this.nextJoint.fraction0;\r\n return defaultValue;\r\n }\r\n private static addStrokes(destination: LineString3d, curve?: CurvePrimitive) {\r\n if (curve) {\r\n curve.emitStrokes(destination);\r\n }\r\n }\r\n private static addPoint(destination: LineString3d, point: Point3d) {\r\n if (destination.packedPoints.length > 0) {\r\n const pointA = destination.endPoint();\r\n if (!pointA.isAlmostEqual(point))\r\n destination.packedPoints.push(point);\r\n }\r\n }\r\n /** Append stroke points along the offset curve defined by the Joint chain to the destination line string. */\r\n public static collectStrokesFromChain(start: Joint, destination: LineString3d, maxTest: number = 100) {\r\n let numOut = -2 * maxTest; // allow extra things to happen\r\n Joint.visitJointsOnChain(\r\n start,\r\n (joint: Joint) => {\r\n this.addStrokes(destination, joint.jointCurve);\r\n if (joint.curve1 && joint.fraction1 !== undefined) {\r\n const fA = joint.fraction1;\r\n const fB = joint.nextJointFraction0(1.0);\r\n let curve1;\r\n if (fA === 0.0 && fB === 1.0)\r\n curve1 = joint.curve1.clone();\r\n else if (fA < fB)\r\n curve1 = joint.curve1.clonePartialCurve(fA, fB); // trimming is done by clonePartialCurve\r\n if (curve1) {\r\n if (!joint.jointCurve) {\r\n this.addPoint(destination, curve1.startPoint());\r\n }\r\n }\r\n this.addStrokes(destination, curve1);\r\n }\r\n return numOut++ < maxTest;\r\n },\r\n maxTest,\r\n );\r\n }\r\n private static collectPrimitive(destination: CurvePrimitive[], primitive?: CurvePrimitive) {\r\n if (primitive) {\r\n if (destination.length > 0) {\r\n const pointA = destination[destination.length - 1].endPoint();\r\n const pointB = primitive.startPoint();\r\n if (!pointA.isAlmostEqual(pointB)) {\r\n destination.push(LineSegment3d.create(pointA, pointB));\r\n }\r\n }\r\n destination.push(primitive);\r\n }\r\n }\r\n private static adjustJointToPrimitives(joint: Joint) {\r\n const ls = joint.jointCurve;\r\n if (ls instanceof LineString3d) {\r\n if (joint.curve0) {\r\n const curvePoint = joint.curve0.endPoint();\r\n const jointPoint0 = ls.startPoint();\r\n if (!curvePoint.isAlmostEqual(jointPoint0))\r\n ls.packedPoints.setAtCheckedPointIndex(0, curvePoint);\r\n }\r\n if (joint.curve1) {\r\n const curvePoint = joint.curve1.startPoint();\r\n const jointPoint1 = ls.endPoint();\r\n if (!curvePoint.isAlmostEqual(jointPoint1))\r\n ls.packedPoints.setAtCheckedPointIndex(ls.packedPoints.length - 1, curvePoint);\r\n }\r\n }\r\n }\r\n /** Append CurvePrimitives along the offset curve defined by the Joint chain to the destination array. */\r\n public static collectCurvesFromChain(start: Joint | undefined, destination: CurvePrimitive[], maxTest: number = 100) {\r\n if (start === undefined)\r\n return;\r\n let numOut = -2 * maxTest; // allow extra things to happen\r\n Joint.visitJointsOnChain(\r\n start,\r\n (joint: Joint) => {\r\n this.adjustJointToPrimitives(joint);\r\n this.collectPrimitive(destination, joint.jointCurve);\r\n if (joint.curve1 && joint.fraction1 !== undefined) {\r\n const fA = joint.fraction1;\r\n const fB = joint.nextJointFraction0(1.0);\r\n let curve1;\r\n if (fA === 0.0 && fB === 1.0)\r\n curve1 = joint.curve1.clone();\r\n else if (fA < fB)\r\n curve1 = joint.curve1.clonePartialCurve(fA, fB); // trimming is done by clonePartialCurve\r\n this.collectPrimitive(destination, curve1);\r\n }\r\n return numOut++ < maxTest;\r\n },\r\n maxTest,\r\n );\r\n }\r\n /**\r\n * Execute `joint.annotateJointMode()` at all joints on the chain to set some of the joints' attributes,\r\n * such as whether to extend both curves to intersection or to fill the gap between curves.\r\n */\r\n public static annotateChain(start: Joint | undefined, options: JointOptions, maxTest: number = 100) {\r\n if (start)\r\n Joint.visitJointsOnChain(start, (joint: Joint) => { joint.annotateJointMode(options); return true; }, maxTest);\r\n }\r\n /**\r\n * Visit joints on a chain.\r\n * * Terminates if `callback` returns `false`.\r\n * @param start first (and, for cyclic chain, final) joint.\r\n * @param callback function to call with each Joint as a single parameter.\r\n * @param maxTest\r\n */\r\n public static visitJointsOnChain(start: Joint, callback: (joint: Joint) => boolean, maxTest: number = 100): boolean {\r\n let joint: Joint | undefined = start;\r\n if (joint) {\r\n let numTest = 0;\r\n while (joint !== undefined) {\r\n if (numTest++ >= maxTest + 5) // allow extra things to happen\r\n return true;\r\n if (!callback(joint))\r\n return false;\r\n joint = joint.nextJoint;\r\n if (joint === start)\r\n break;\r\n }\r\n }\r\n return true;\r\n }\r\n /** NOTE: no assumption on type of curve0, curve1 */\r\n private annotateExtension(options: JointOptions) {\r\n if (this.curve0 && this.curve1) {\r\n const ray0 = this.curve0.fractionToPointAndDerivative(1.0);\r\n const ray1 = this.curve1.fractionToPointAndDerivative(0.0);\r\n ray0.direction.z = ray1.direction.z = 0.0; // xy-offset\r\n const intersection = Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines\r\n if (intersection.approachType === CurveCurveApproachType.Intersection) {\r\n if (intersection.detailA.fraction >= 0.0 && intersection.detailB.fraction <= 0.0) {\r\n this.fraction0 = 1.0;\r\n this.fraction1 = 0.0;\r\n this.flexure = JointMode.Extend;\r\n const theta = ray0.getDirectionRef().angleToXY(ray1.getDirectionRef()); // angle between the 2 ray lines\r\n if (options.needArc(theta)) {\r\n const arc = Joint.constructArc(ray0, (this.curve0 as any).baseCurveEnd, ray1);\r\n if (arc) {\r\n this.jointCurve = arc;\r\n return;\r\n }\r\n }\r\n const numChamferPoints = options.numChamferPoints(theta); // how many interior points in the linestring\r\n if (numChamferPoints <= 1) { // create sharp corner\r\n this.jointCurve = LineString3d.create(ray0.origin, intersection.detailA.point, ray1.origin);\r\n return;\r\n }\r\n if (numChamferPoints > 1) { // create chamfer corner (a line string)\r\n const radians0 = theta.radians;\r\n const numHalfStep = 2.0 * numChamferPoints;\r\n const halfStepRadians = radians0 / numHalfStep;\r\n const arc = Joint.constructArc(ray0, (this.curve0 as any).baseCurveEnd, ray1);\r\n if (arc !== undefined) {\r\n const radialFraction = 1 / Math.cos(halfStepRadians);\r\n const jointCurve = LineString3d.create();\r\n this.jointCurve = jointCurve;\r\n jointCurve.addPoint(ray0.origin); // possibly extend segment or line string\r\n\r\n for (let i = 0; i < numChamferPoints; i++) {\r\n const arcFraction = (1 + 2 * i) / numHalfStep;\r\n jointCurve.addPoint(arc.fractionAndRadialFractionToPoint(arcFraction, radialFraction));\r\n }\r\n jointCurve.addPoint(ray1.origin); // possibly extend segment or line string.\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n // if there is no intersection between the 2 ray lines, fill the gap by a line segment\r\n this.flexure = JointMode.Gap;\r\n this.jointCurve = LineSegment3d.create(this.curve0.fractionToPoint(1.0), this.curve1.fractionToPoint(0.0));\r\n this.fraction0 = 1.0;\r\n this.fraction1 = 0.0;\r\n }\r\n }\r\n /** Select the index at which summed fraction difference is smallest */\r\n private selectIntersectionIndexByFraction(\r\n fractionA: number, fractionB: number, intersections: CurveLocationDetailPair[],\r\n ): number {\r\n let index = -1;\r\n let aMin = Number.MAX_VALUE;\r\n for (let i = 0; i < intersections.length; i++) {\r\n const a = Math.abs(intersections[i].detailA.fraction - fractionA)\r\n + Math.abs(intersections[i].detailB.fraction - fractionB);\r\n if (a < aMin) {\r\n aMin = a;\r\n index = i;\r\n }\r\n }\r\n return index;\r\n }\r\n /**\r\n * Examine the adjacent geometry to set some of joint attributes:\r\n * * set JointMode: one of Cap, Extend, or Trim\r\n * * set fraction0 and fraction1 of intersection of curve0 and curve1\r\n * * set joint curve\r\n * * this REFERENCES curve0, curve1, fraction0, fraction1\r\n * * this does not reference nextJoint and previousJoint\r\n */\r\n public annotateJointMode(options: JointOptions): void {\r\n if (!this.curve0 && this.curve1) { // joint at the start of the chain\r\n this.flexure = JointMode.Cap;\r\n this.fraction1 = 0.0;\r\n } else if (this.curve0 && !this.curve1) { // joint at the end of the chain\r\n this.flexure = JointMode.Cap;\r\n this.fraction0 = 1.0;\r\n } else if (this.curve0 && this.curve1) { // joints at the middle of the chain\r\n if (this.curve0.endPoint().isAlmostEqualXY(this.curve1.startPoint())) { // joint at shared endpoint\r\n this.fraction0 = 1.0;\r\n this.fraction1 = 0.0;\r\n this.flexure = JointMode.Trim;\r\n } else if (this.curve0 instanceof LineSegment3d && this.curve1 instanceof LineSegment3d) { // pair of lines\r\n const ray0 = this.curve0.fractionToPointAndDerivative(0.0);\r\n const ray1 = this.curve1.fractionToPointAndDerivative(0.0);\r\n ray0.direction.z = ray1.direction.z = 0.0; // xy-offset\r\n const intersection = Ray3d.closestApproachRay3dRay3d(ray0, ray1); // intersection of the 2 ray lines\r\n if (intersection.approachType === CurveCurveApproachType.Intersection || intersection.approachType === CurveCurveApproachType.PerpendicularChord) {\r\n this.fraction0 = intersection.detailA.fraction;\r\n this.fraction1 = intersection.detailB.fraction;\r\n if (this.fraction0 >= 1.0 && this.fraction1 <= 0.0) { // need to extend\r\n this.annotateExtension(options);\r\n } else if (this.fraction0 < 1.0 && this.fraction1 > 0.0) { // need to trim\r\n this.flexure = JointMode.Trim;\r\n } else if (this.fraction0 > 1.0 && this.fraction1 > 1.0) { // need to fill gap with a single line segment\r\n this.flexure = JointMode.Gap;\r\n this.jointCurve = LineSegment3d.create(this.curve0.fractionToPoint(1.0), this.curve1.fractionToPoint(0.0));\r\n this.fraction0 = 1.0;\r\n this.fraction1 = 0.0;\r\n }\r\n }\r\n } else { // generic pair of curves\r\n const intersections = CurveCurve.intersectionXYPairs(this.curve0, false, this.curve1, false);\r\n const intersectionIndex = this.selectIntersectionIndexByFraction(1.0, 0.0, intersections);\r\n if (intersectionIndex >= 0) { // need to trim\r\n this.flexure = JointMode.Trim;\r\n this.fraction0 = intersections[intersectionIndex].detailA.fraction;\r\n this.fraction1 = intersections[intersectionIndex].detailB.fraction;\r\n } else { // need to extend\r\n this.annotateExtension(options);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * * Examine the primitive trim fractions between each pair of joints.\r\n * * If trim fractions indicate the primitive must disappear, replace the joint pair by a new joint pointing at\r\n * surrounding primitives\r\n * @param start\r\n */\r\n public static removeDegeneratePrimitives(\r\n start: Joint, options: JointOptions, maxTest: number,\r\n ): { newStart: Joint, numJointRemoved: number } {\r\n let jointA: Joint | undefined = start;\r\n let numRemoved = 0;\r\n let numTest = 0;\r\n if (jointA) {\r\n while (jointA !== undefined && numTest++ < maxTest) {\r\n // each iteration looks at the two curves f, g on either side of jointB\r\n const jointB = jointA.nextJoint;\r\n if (jointA\r\n && jointB\r\n && jointA.previousJoint\r\n && jointB.nextJoint\r\n && jointA.fraction1 !== undefined\r\n && jointB.fraction0 !== undefined\r\n ) {\r\n // f0 and f1 are fractions on primitive f, between jointA and jointB.\r\n const f0 = jointA.fraction1;\r\n const f1 = jointB.fraction0;\r\n // g0 and g1 are fractions on primitive g, between jointB and jointC.\r\n const g0 = jointB.fraction1;\r\n const g1 = jointB.nextJoint.fraction0;\r\n const eliminateF = f0 >= f1 || f0 > 1.0;\r\n const eliminateG = (g0 !== undefined && g0 > 1.0) || (g0 !== undefined && g1 !== undefined && g0 >= g1);\r\n if (eliminateF && eliminateG) { // collapse jointA, jointB, and jointC into a new joint\r\n const jointC = jointB.nextJoint;\r\n const newJoint: Joint = new Joint(jointA.curve0, jointC.curve1, undefined);\r\n Joint.link(jointA.previousJoint, newJoint);\r\n Joint.link(newJoint, jointC.nextJoint);\r\n newJoint.annotateJointMode(options);\r\n if (newJoint.previousJoint)\r\n newJoint.previousJoint.annotateJointMode(options);\r\n if (newJoint.nextJoint)\r\n newJoint.nextJoint.annotateJointMode(options);\r\n numRemoved += 2;\r\n if (jointA === start || jointB === start || jointC === start)\r\n start = newJoint;\r\n jointA = newJoint;\r\n } else if (eliminateF) { // collapse jointA and jointB into a new joint\r\n const newJoint: Joint = new Joint(jointA.curve0, jointB.curve1, undefined);\r\n Joint.link(jointA.previousJoint, newJoint);\r\n Joint.link(newJoint, jointB.nextJoint);\r\n newJoint.annotateJointMode(options);\r\n if (newJoint.previousJoint)\r\n newJoint.previousJoint.annotateJointMode(options);\r\n if (newJoint.nextJoint)\r\n newJoint.nextJoint.annotateJointMode(options);\r\n numRemoved++;\r\n if (jointA === start || jointB === start)\r\n start = newJoint;\r\n jointA = newJoint;\r\n }\r\n }\r\n jointA = jointA.nextJoint;\r\n if (jointA === start)\r\n break;\r\n }\r\n }\r\n return { newStart: start, numJointRemoved: numRemoved };\r\n }\r\n}\r\n\r\n/**\r\n * Context for building a wire xy-offset.\r\n * @internal\r\n */\r\nexport class PolygonWireOffsetContext {\r\n /** Construct a context. */\r\n public constructor() { }\r\n private static _unitAlong = Vector3d.create();\r\n private static _unitPerp = Vector3d.create();\r\n private static _offsetA = Point3d.create();\r\n private static _offsetB = Point3d.create();\r\n // Construct a single offset from base points\r\n private static createOffsetSegment(\r\n basePointA: Point3d, basePointB: Point3d, distance: number,\r\n ): CurvePrimitive | undefined {\r\n Vector3d.createStartEnd(basePointA, basePointB, this._unitAlong);\r\n this._unitAlong.z = 0.0; // xy-offset\r\n if (this._unitAlong.normalizeInPlace()) {\r\n this._unitAlong.rotate90CCWXY(this._unitPerp);\r\n const segment = LineSegment3d.create(\r\n basePointA.plusScaled(this._unitPerp, distance, this._offsetA),\r\n basePointB.plusScaled(this._unitPerp, distance, this._offsetB),\r\n );\r\n CurveChainWireOffsetContext.applyBasePoints(segment, basePointA.clone(), basePointB.clone());\r\n return segment;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Construct a wire (not area) that is offset from given polyline or polygon.\r\n * * For best results, points should be in a horizontal plane because z-coordinates are ignored.\r\n * * This is a simple wire offset (in the form of a line string), not an area.\r\n * * If offsetDistance is given as a number, default OffsetOptions are applied.\r\n * * See [[JointOptions]] class doc for offset construction rules.\r\n * @param points a single loop or path\r\n * @param wrap true to offset the wraparound joint. Assumes first = last point.\r\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or JointOptions\r\n * object.\r\n */\r\n public constructPolygonWireXYOffset(\r\n points: Point3d[], wrap: boolean, leftOffsetDistanceOrOptions: number | JointOptions,\r\n ): CurveChain | undefined {\r\n if (wrap && !points[0].isAlmostEqual(points[points.length - 1]))\r\n wrap = false; // no wrap possible for polylines\r\n // create raw offset segments as a linked list of Joints, starting with joint0\r\n const options = JointOptions.create(leftOffsetDistanceOrOptions);\r\n const numPoints = points.length;\r\n let fragment0: CurvePrimitive | undefined;\r\n let joint0, previousJoint: Joint | undefined;\r\n for (let i = 0; i + 1 < numPoints; ++i) {\r\n if (!previousJoint) { // start the linked list at the first nontrivial xy-segment\r\n if (fragment0 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance))\r\n previousJoint = joint0 = new Joint(undefined, fragment0, points[i]);\r\n } else {\r\n const fragment1 = PolygonWireOffsetContext.createOffsetSegment(points[i], points[i + 1], options.leftOffsetDistance);\r\n if (fragment1) { // append the next nontrivial xy-segment\r\n const newJoint = new Joint(fragment0, fragment1, points[i]);\r\n Joint.link(previousJoint, newJoint);\r\n previousJoint = newJoint;\r\n fragment0 = fragment1;\r\n }\r\n }\r\n }\r\n if (!fragment0 || !previousJoint || !joint0)\r\n return undefined; // no edge with positive xy-length\r\n const lastJoint = wrap ? joint0 : new Joint(fragment0, undefined, points[numPoints - 1]);\r\n Joint.link(previousJoint, lastJoint);\r\n Joint.annotateChain(joint0, options, numPoints);\r\n // make limited passes through the Joint chain until no self-intersections are removed\r\n for (let pass = 0; pass++ < 5;) {\r\n const state = Joint.removeDegeneratePrimitives(joint0, options, numPoints);\r\n joint0 = state.newStart;\r\n if (state.numJointRemoved === 0)\r\n break;\r\n }\r\n const chain = LineString3d.create();\r\n Joint.collectStrokesFromChain(joint0, chain, numPoints); // compute offset corners (by extension/trim)\r\n const n = chain.packedPoints.length;\r\n if (n > 1) {\r\n if (chain.packedPoints.front()!.isAlmostEqual(chain.packedPoints.back()!))\r\n return Loop.create(chain);\r\n else\r\n return Path.create(chain);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Context for building a wire xy-offset from a Path or Loop of CurvePrimitives\r\n * @internal\r\n */\r\nexport class CurveChainWireOffsetContext {\r\n /** construct a context. */\r\n public constructor() { }\r\n /**\r\n * Annotate a CurvePrimitive with properties `baseCurveStart` and `baseCurveEnd`.\r\n * @param cp curve primitive to annotate\r\n * @param startPoint optional start point\r\n * @param endPoint optional end point\r\n * @return the input CurvePrimitive with annotations\r\n */\r\n public static applyBasePoints(\r\n cp: CurvePrimitive | undefined, startPoint: Point3d | undefined, endPoint: Point3d | undefined,\r\n ): CurvePrimitive | undefined {\r\n if (cp !== undefined) {\r\n if (startPoint !== undefined)\r\n (cp as any).baseCurveStart = startPoint;\r\n if (endPoint !== undefined)\r\n (cp as any).baseCurveEnd = endPoint;\r\n }\r\n return cp;\r\n }\r\n /**\r\n * Create the offset of a single curve primitive as viewed in the xy-plane (ignoring z).\r\n * * Each primitive may be labeled (as an `any` object) with start or end point of base curve:\r\n * * `(primitive as any).baseCurveStart: Point3d`\r\n * * `(primitive as any).baseCurveEnd: Point3d`\r\n * @param curve primitive to offset\r\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object\r\n */\r\n public static createSingleOffsetPrimitiveXY(\r\n curve: CurvePrimitive, offsetDistanceOrOptions: number | OffsetOptions,\r\n ): CurvePrimitive | CurvePrimitive[] | undefined {\r\n const offset = curve.constructOffsetXY(offsetDistanceOrOptions);\r\n if (offset === undefined)\r\n return undefined;\r\n // decorate each offset with its base curve's endpoints\r\n if (Array.isArray(offset)) {\r\n const basePrims = curve.collectCurvePrimitives(undefined, true, true);\r\n if (basePrims.length !== offset.length)\r\n return undefined; // unexpected aggregate curve type!\r\n for (let i = 0; i < basePrims.length; ++i)\r\n this.applyBasePoints(offset[i], basePrims[i].startPoint(), basePrims[i].endPoint());\r\n return offset;\r\n }\r\n return this.applyBasePoints(offset, curve.startPoint(), curve.endPoint());\r\n }\r\n /**\r\n * Construct curves that are offset from a Path or Loop as viewed in xy-plane (ignoring z).\r\n * * The construction will remove \"some\" local effects of features smaller than the offset distance, but will\r\n * not detect self intersection among widely separated edges.\r\n * * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/Offset\r\n * @param curves base curves.\r\n * @param offsetDistanceOrOptions offset distance (positive to left of curve, negative to right) or options object.\r\n */\r\n public static constructCurveXYOffset(\r\n curves: Path | Loop, offsetDistanceOrOptions: number | JointOptions | OffsetOptions,\r\n ): CurveCollection | undefined {\r\n const wrap: boolean = curves instanceof Loop;\r\n const offsetOptions = OffsetOptions.create(offsetDistanceOrOptions);\r\n const simpleOffsets: CurvePrimitive[] = [];\r\n // traverse primitives (children of curves) and create simple offsets of each primitive as an array\r\n for (const c of curves.children) {\r\n const c1 = CurveChainWireOffsetContext.createSingleOffsetPrimitiveXY(c, offsetOptions);\r\n if (c1 === undefined) {\r\n // bad; maybe arc to inside?\r\n } else if (c1 instanceof CurvePrimitive) {\r\n simpleOffsets.push(c1);\r\n } else if (Array.isArray(c1)) {\r\n for (const c2 of c1) {\r\n if (c2 instanceof CurvePrimitive)\r\n simpleOffsets.push(c2);\r\n }\r\n }\r\n }\r\n // create joints between array elements to make offsets as a linked list (joint0)\r\n let fragment0;\r\n let newJoint;\r\n let previousJoint;\r\n let joint0;\r\n for (const fragment1 of simpleOffsets) {\r\n if (fragment1) {\r\n newJoint = new Joint(fragment0, fragment1, fragment1.fractionToPoint(0.0));\r\n if (newJoint !== undefined)\r\n if (joint0 === undefined)\r\n joint0 = newJoint;\r\n if (previousJoint)\r\n Joint.link(previousJoint, newJoint);\r\n previousJoint = newJoint;\r\n fragment0 = fragment1;\r\n }\r\n }\r\n if (joint0 && previousJoint && curves instanceof Loop)\r\n Joint.link(previousJoint, joint0);\r\n // annotateChain sets some of the joint attributes (including how to extend curves or fill the gap between curves)\r\n const numOffset = simpleOffsets.length;\r\n Joint.annotateChain(joint0, offsetOptions.jointOptions, numOffset);\r\n if (joint0) {\r\n // make limited passes through the Joint chain until no self-intersections are removed\r\n for (let pass = 0; pass++ < 5;) {\r\n const state = Joint.removeDegeneratePrimitives(joint0, offsetOptions.jointOptions, numOffset);\r\n joint0 = state.newStart;\r\n if (state.numJointRemoved === 0)\r\n break;\r\n }\r\n }\r\n // turn the Joint linked list into a CurveCollection. trimming is done in collectCurvesFromChain\r\n const outputCurves: CurvePrimitive[] = [];\r\n Joint.collectCurvesFromChain(joint0, outputCurves, numOffset);\r\n return RegionOps.createLoopPathOrBagOfCurves(outputCurves, wrap, true);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SumLengthsContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,uBAAuB;IACpD,IAAI,CAAS;IACrB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IACM,MAAM,CAAC,UAAU,CAAC,MAAuB;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IACe,sBAAsB,CAAC,cAA8B,EAAE,cAAsB;QAC3F,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { RecursiveCurveProcessor } from \"../CurveProcessor\";\n\n/**\n * Algorithmic class: Sum lengths of curves\n * @internal\n */\nexport class SumLengthsContext extends RecursiveCurveProcessor {\n private _sum: number;\n private constructor() {\n super();\n this._sum = 0.0;\n }\n public static sumLengths(target: CurveCollection): number {\n const context = new SumLengthsContext();\n target.announceToCurveProcessor(context);\n return context._sum;\n }\n public override announceCurvePrimitive(curvePrimitive: CurvePrimitive, _indexInParent: number): void {\n this._sum += curvePrimitive.curveLength();\n }\n}\n"]}
1
+ {"version":3,"file":"SumLengthsContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,uBAAuB;IACpD,IAAI,CAAS;IACrB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IACM,MAAM,CAAC,UAAU,CAAC,MAAuB;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IACe,sBAAsB,CAAC,cAA8B,EAAE,cAAsB;QAC3F,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;CACF","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 Curve\r\n */\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"../CurveProcessor\";\r\n\r\n/**\r\n * Algorithmic class: Sum lengths of curves\r\n * @internal\r\n */\r\nexport class SumLengthsContext extends RecursiveCurveProcessor {\r\n private _sum: number;\r\n private constructor() {\r\n super();\r\n this._sum = 0.0;\r\n }\r\n public static sumLengths(target: CurveCollection): number {\r\n const context = new SumLengthsContext();\r\n target.announceToCurveProcessor(context);\r\n return context._sum;\r\n }\r\n public override announceCurvePrimitive(curvePrimitive: CurvePrimitive, _indexInParent: number): void {\r\n this._sum += curvePrimitive.curveLength();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TransferWithSplitArcs.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/TransferWithSplitArcs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3D;QACE,KAAK,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IACkB,OAAO,CAAC,SAAyB;QAClD,IAAI,SAAS,YAAY,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,sCAAsC;YACpG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,OAAO,SAAS,CAAC;IACnB,CAAC;IACM,MAAM,CAAU,KAAK,CAAC,MAAuB;QAClD,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,OAA0B,CAAC;IAC5C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { Arc3d } from \"../Arc3d\";\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { CloneCurvesContext } from \"./CloneCurvesContext\";\n\n/**\n * Algorithmic class for shallow-copying a CurveCollection with each full-sweep arc replaced by two half-sweep arcs.\n * * Often useful for building graphs from loops.\n * @internal\n */\nexport class TransferWithSplitArcs extends CloneCurvesContext {\n public constructor() {\n super(undefined);\n }\n protected override doClone(primitive: CurvePrimitive): CurvePrimitive | CurvePrimitive[] {\n if (primitive instanceof Arc3d && primitive.sweep.isFullCircle) // replace full arc with two half arcs\n return [primitive.clonePartialCurve(0.0, 0.5), primitive.clonePartialCurve(0.5, 1)];\n return primitive;\n }\n public static override clone(target: CurveCollection): CurveCollection {\n const context = new TransferWithSplitArcs();\n target.announceToCurveProcessor(context);\n return context._result as CurveCollection;\n }\n}"]}
1
+ {"version":3,"file":"TransferWithSplitArcs.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/TransferWithSplitArcs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IAC3D;QACE,KAAK,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IACkB,OAAO,CAAC,SAAyB;QAClD,IAAI,SAAS,YAAY,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,sCAAsC;YACpG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtF,OAAO,SAAS,CAAC;IACnB,CAAC;IACM,MAAM,CAAU,KAAK,CAAC,MAAuB;QAClD,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC5C,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,OAA0B,CAAC;IAC5C,CAAC;CACF","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 Curve\r\n */\r\n\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { CloneCurvesContext } from \"./CloneCurvesContext\";\r\n\r\n/**\r\n * Algorithmic class for shallow-copying a CurveCollection with each full-sweep arc replaced by two half-sweep arcs.\r\n * * Often useful for building graphs from loops.\r\n * @internal\r\n */\r\nexport class TransferWithSplitArcs extends CloneCurvesContext {\r\n public constructor() {\r\n super(undefined);\r\n }\r\n protected override doClone(primitive: CurvePrimitive): CurvePrimitive | CurvePrimitive[] {\r\n if (primitive instanceof Arc3d && primitive.sweep.isFullCircle) // replace full arc with two half arcs\r\n return [primitive.clonePartialCurve(0.0, 0.5), primitive.clonePartialCurve(0.5, 1)];\r\n return primitive;\r\n }\r\n public static override clone(target: CurveCollection): CurveCollection {\r\n const context = new TransferWithSplitArcs();\r\n target.announceToCurveProcessor(context);\r\n return context._result as CurveCollection;\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TransformInPlaceContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/TransformInPlaceContext.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,uBAAuB;IAC3D,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAY;IAC5B,YAAY,SAAoB,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IACrG,MAAM,CAAC,mBAAmB,CAAC,MAAuB,EAAE,SAAoB;QAC7E,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAC/B,CAAC;IACe,sBAAsB,CAAC,cAA8B,EAAE,cAAsB;QAC3F,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;;YAEf,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\nimport { Transform } from \"../../geometry3d/Transform\";\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { RecursiveCurveProcessor } from \"../CurveProcessor\";\n\n/** Algorithmic class: Transform curves in place.\n * @internal\n */\nexport class TransformInPlaceContext extends RecursiveCurveProcessor {\n public numFail: number;\n public numOK: number;\n public transform: Transform;\n constructor(transform: Transform) { super(); this.numFail = 0; this.numOK = 0; this.transform = transform; }\n public static tryTransformInPlace(target: CurveCollection, transform: Transform): boolean {\n const context = new TransformInPlaceContext(transform);\n target.announceToCurveProcessor(context);\n return context.numFail === 0;\n }\n public override announceCurvePrimitive(curvePrimitive: CurvePrimitive, _indexInParent: number): void {\n if (!curvePrimitive.tryTransformInPlace(this.transform))\n this.numFail++;\n else\n this.numOK++;\n }\n}\n"]}
1
+ {"version":3,"file":"TransformInPlaceContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/TransformInPlaceContext.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,uBAAuB;IAC3D,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAY;IAC5B,YAAY,SAAoB,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IACrG,MAAM,CAAC,mBAAmB,CAAC,MAAuB,EAAE,SAAoB;QAC7E,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;IAC/B,CAAC;IACe,sBAAsB,CAAC,cAA8B,EAAE,cAAsB;QAC3F,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;;YAEf,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { Transform } from \"../../geometry3d/Transform\";\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"../CurveProcessor\";\r\n\r\n/** Algorithmic class: Transform curves in place.\r\n * @internal\r\n */\r\nexport class TransformInPlaceContext extends RecursiveCurveProcessor {\r\n public numFail: number;\r\n public numOK: number;\r\n public transform: Transform;\r\n constructor(transform: Transform) { super(); this.numFail = 0; this.numOK = 0; this.transform = transform; }\r\n public static tryTransformInPlace(target: CurveCollection, transform: Transform): boolean {\r\n const context = new TransformInPlaceContext(transform);\r\n target.announceToCurveProcessor(context);\r\n return context.numFail === 0;\r\n }\r\n public override announceCurvePrimitive(curvePrimitive: CurvePrimitive, _indexInParent: number): void {\r\n if (!curvePrimitive.tryTransformInPlace(this.transform))\r\n this.numFail++;\r\n else\r\n this.numOK++;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AustralianRailCorpXYEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/AustralianRailCorpXYEvaluator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { Geometry } from \"../../Geometry\";\nimport { Angle } from \"../../geometry3d/Angle\";\nimport { CubicEvaluator } from \"./CubicEvaluator\";\n/**\n * AustralianRailCorp spiral (also known as New South Wales spiral)\n * * The ultimate curve is a cubic `y = m * x^3`.\n * * `m` is a constant throughout the curve.\n * * Computation of m from the R and L is an complicated sequence, but is only done at construction time.\n * @internal\n */\nexport class AustralianRailCorpXYEvaluator extends CubicEvaluator {\n private _nominalLength1: number;\n private _nominalRadius1: number;\n private constructor(nominalLength1: number, nominalRadius1: number, axisLength: number, cubicM: number) {\n super(axisLength, cubicM);\n this._nominalLength1 = nominalLength1;\n this._nominalRadius1 = nominalRadius1;\n }\n public get nominalLength1() { return this._nominalLength1; }\n public get nominalRadius1() { return this._nominalRadius1; }\n public clone(): AustralianRailCorpXYEvaluator { return new AustralianRailCorpXYEvaluator(this._nominalLength1, this._nominalRadius1, this._axisLength, this._cubicM); }\n public static create(nominalLength1: number, nominalRadius1: number): AustralianRailCorpXYEvaluator | undefined {\n const axisLength = AustralianRailCorpXYEvaluator.radiusAndNominalLengthToAxisLength(nominalRadius1, nominalLength1);\n const phi = this.radiusAndAxisLengthToPhi(nominalRadius1, axisLength);\n const xc2 = axisLength * axisLength;\n const cubicM = Math.tan(phi) / (3.0 * xc2);\n return new AustralianRailCorpXYEvaluator(nominalLength1, nominalRadius1, axisLength, cubicM);\n }\n /**\n * Compute the phi constant for AustralianRail spiral with given end radius and length along axis.\n * @param nominalRadius1\n * @param axisLength\n */\n public static radiusAndAxisLengthToPhi(nominalRadius1: number, axisLength: number): number {\n const xc = axisLength;\n const expr1 = (2. / Math.sqrt(3.));\n let expr2 = (-(3. / 4.) * Math.sqrt(3.) * xc / nominalRadius1);\n if (expr2 < -1.0)\n expr2 = -1.0;\n if (expr2 > 1.0)\n expr2 = 1.0;\n const expr3 = Angle.degreesToRadians(240);\n\n return Math.asin(expr1 * Math.cos(Math.acos(expr2) / 3. + expr3));\n }\n public override scaleInPlace(scaleFactor: number) {\n // apply the scale factor to all contents.\n // all distances scale directly . . .\n this._nominalLength1 *= scaleFactor;\n this._nominalRadius1 *= scaleFactor;\n super.scaleInPlace(scaleFactor);\n }\n /** Compute length along axis for AustralianRail spiral nominal radius and length.\n *\n */\n public static radiusAndNominalLengthToAxisLength(nominalRadius1: number, nominalLength1: number, tolerance: number = 1.0e-5,\n requiredConvergenceCount: number = 2) {\n const R = nominalRadius1;\n let idx = 0;\n let m, phi, xc2;\n\n let xc = .7 * nominalLength1;\n let convergenceCount = 0;\n // remark: This converges quickly --\n // for L=100, R=400\n // ** full precision at 7th iteration.\n // ** classic tolerance 1.0e-5 (7 digits from L) with requiredConvergenceCount = 1 gives 11 digits after 3 iterations\n // ** each iteration adds about 2 digits. This is quite good for a successive replacement without derivative !!!\n // ** Unanswerable question: If this is only done once and reused over all evaluations, do you want:\n // * run the 7 iterations to get full precision\n // * stop with the classic tolerance to get compatibility?\n for (idx = 0; idx < 100; ++idx) {\n phi = this.radiusAndAxisLengthToPhi(R, xc);\n xc2 = xc * xc;\n m = Math.tan(phi) / (3.0 * xc2);\n const m2x4 = m * m * xc2 * xc2;\n const correction = xc * m2x4 * (\n (9. / 10) + m2x4 * (\n -(9. / 8.) + m2x4 * (\n +(729. / 208.) + m2x4 *\n -(32805. / 2176.))));\n const correctedLength = xc + correction;\n xc = (nominalLength1 / correctedLength) * xc;\n\n if (Math.abs(nominalLength1 - correctedLength) < tolerance) {\n convergenceCount++;\n if (convergenceCount >= requiredConvergenceCount)\n break;\n } else {\n convergenceCount = 0;\n }\n }\n return xc;\n }\n public isAlmostEqual(other: any): boolean {\n if (other instanceof AustralianRailCorpXYEvaluator) {\n return Geometry.isAlmostEqualNumber(this._cubicM, other._cubicM)\n && Geometry.isAlmostEqualNumber(this._axisLength, other._axisLength)\n && Geometry.isAlmostEqualNumber(this._nominalLength1, other._nominalLength1)\n && Geometry.isAlmostEqualNumber(this._nominalRadius1, other._nominalRadius1);\n }\n return false;\n }\n /**\n * Return a (quite good approximation) of fraction along x axis for given distance along spiral.\n * * The AustralianRailSpiral has a supporting power series to approximately map distance along the spiral to an x coordinate.\n * * The `xToFraction(x)` method quickly (with a single divide) converts this x to fraction used fro this.fractionToX (fraction), this.fractionToY(fraction) etc to get coordinates and derivatives.\n * * The x-to-distance relation is not as precise as the CurvePrimitive method moveSignedDistanceFromFraction.\n * * It is supported here for users interested in replicating the AustralianRail distance mapping rather than the more accurate CurvePrimitive measurements.\n * * Round tripping distance through (a) distanceAlongSpiralToAustralianApproximateX, (b) xToFraction, and (c) curveLengthBetweenFractions has\n * * 10 digit accuracy for L/R = 4, 12 digit accuracy for L/R = 10\n * @param s distance along the axis.\n */\n public distanceAlongSpiralToAustralianApproximateX(s: number): number {\n const a1 = 0.9000;\n const a2 = 5.1750;\n const a3 = 43.1948;\n const a4 = 426.0564;\n const m = this._cubicM;\n const m2s4 = m * m * s * s * s * s;\n const x = s * (1.0 - m2s4 * (a1 - m2s4 * (a2 - m2s4 * (a3 - m2s4 * a4))));\n return x;\n }\n}\n"]}
1
+ {"version":3,"file":"AustralianRailCorpXYEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/AustralianRailCorpXYEvaluator.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 Curve\r\n */\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { CubicEvaluator } from \"./CubicEvaluator\";\r\n/**\r\n * AustralianRailCorp spiral (also known as New South Wales spiral)\r\n * * The ultimate curve is a cubic `y = m * x^3`.\r\n * * `m` is a constant throughout the curve.\r\n * * Computation of m from the R and L is an complicated sequence, but is only done at construction time.\r\n * @internal\r\n */\r\nexport class AustralianRailCorpXYEvaluator extends CubicEvaluator {\r\n private _nominalLength1: number;\r\n private _nominalRadius1: number;\r\n private constructor(nominalLength1: number, nominalRadius1: number, axisLength: number, cubicM: number) {\r\n super(axisLength, cubicM);\r\n this._nominalLength1 = nominalLength1;\r\n this._nominalRadius1 = nominalRadius1;\r\n }\r\n public get nominalLength1() { return this._nominalLength1; }\r\n public get nominalRadius1() { return this._nominalRadius1; }\r\n public clone(): AustralianRailCorpXYEvaluator { return new AustralianRailCorpXYEvaluator(this._nominalLength1, this._nominalRadius1, this._axisLength, this._cubicM); }\r\n public static create(nominalLength1: number, nominalRadius1: number): AustralianRailCorpXYEvaluator | undefined {\r\n const axisLength = AustralianRailCorpXYEvaluator.radiusAndNominalLengthToAxisLength(nominalRadius1, nominalLength1);\r\n const phi = this.radiusAndAxisLengthToPhi(nominalRadius1, axisLength);\r\n const xc2 = axisLength * axisLength;\r\n const cubicM = Math.tan(phi) / (3.0 * xc2);\r\n return new AustralianRailCorpXYEvaluator(nominalLength1, nominalRadius1, axisLength, cubicM);\r\n }\r\n /**\r\n * Compute the phi constant for AustralianRail spiral with given end radius and length along axis.\r\n * @param nominalRadius1\r\n * @param axisLength\r\n */\r\n public static radiusAndAxisLengthToPhi(nominalRadius1: number, axisLength: number): number {\r\n const xc = axisLength;\r\n const expr1 = (2. / Math.sqrt(3.));\r\n let expr2 = (-(3. / 4.) * Math.sqrt(3.) * xc / nominalRadius1);\r\n if (expr2 < -1.0)\r\n expr2 = -1.0;\r\n if (expr2 > 1.0)\r\n expr2 = 1.0;\r\n const expr3 = Angle.degreesToRadians(240);\r\n\r\n return Math.asin(expr1 * Math.cos(Math.acos(expr2) / 3. + expr3));\r\n }\r\n public override scaleInPlace(scaleFactor: number) {\r\n // apply the scale factor to all contents.\r\n // all distances scale directly . . .\r\n this._nominalLength1 *= scaleFactor;\r\n this._nominalRadius1 *= scaleFactor;\r\n super.scaleInPlace(scaleFactor);\r\n }\r\n /** Compute length along axis for AustralianRail spiral nominal radius and length.\r\n *\r\n */\r\n public static radiusAndNominalLengthToAxisLength(nominalRadius1: number, nominalLength1: number, tolerance: number = 1.0e-5,\r\n requiredConvergenceCount: number = 2) {\r\n const R = nominalRadius1;\r\n let idx = 0;\r\n let m, phi, xc2;\r\n\r\n let xc = .7 * nominalLength1;\r\n let convergenceCount = 0;\r\n // remark: This converges quickly --\r\n // for L=100, R=400\r\n // ** full precision at 7th iteration.\r\n // ** classic tolerance 1.0e-5 (7 digits from L) with requiredConvergenceCount = 1 gives 11 digits after 3 iterations\r\n // ** each iteration adds about 2 digits. This is quite good for a successive replacement without derivative !!!\r\n // ** Unanswerable question: If this is only done once and reused over all evaluations, do you want:\r\n // * run the 7 iterations to get full precision\r\n // * stop with the classic tolerance to get compatibility?\r\n for (idx = 0; idx < 100; ++idx) {\r\n phi = this.radiusAndAxisLengthToPhi(R, xc);\r\n xc2 = xc * xc;\r\n m = Math.tan(phi) / (3.0 * xc2);\r\n const m2x4 = m * m * xc2 * xc2;\r\n const correction = xc * m2x4 * (\r\n (9. / 10) + m2x4 * (\r\n -(9. / 8.) + m2x4 * (\r\n +(729. / 208.) + m2x4 *\r\n -(32805. / 2176.))));\r\n const correctedLength = xc + correction;\r\n xc = (nominalLength1 / correctedLength) * xc;\r\n\r\n if (Math.abs(nominalLength1 - correctedLength) < tolerance) {\r\n convergenceCount++;\r\n if (convergenceCount >= requiredConvergenceCount)\r\n break;\r\n } else {\r\n convergenceCount = 0;\r\n }\r\n }\r\n return xc;\r\n }\r\n public isAlmostEqual(other: any): boolean {\r\n if (other instanceof AustralianRailCorpXYEvaluator) {\r\n return Geometry.isAlmostEqualNumber(this._cubicM, other._cubicM)\r\n && Geometry.isAlmostEqualNumber(this._axisLength, other._axisLength)\r\n && Geometry.isAlmostEqualNumber(this._nominalLength1, other._nominalLength1)\r\n && Geometry.isAlmostEqualNumber(this._nominalRadius1, other._nominalRadius1);\r\n }\r\n return false;\r\n }\r\n /**\r\n * Return a (quite good approximation) of fraction along x axis for given distance along spiral.\r\n * * The AustralianRailSpiral has a supporting power series to approximately map distance along the spiral to an x coordinate.\r\n * * The `xToFraction(x)` method quickly (with a single divide) converts this x to fraction used fro this.fractionToX (fraction), this.fractionToY(fraction) etc to get coordinates and derivatives.\r\n * * The x-to-distance relation is not as precise as the CurvePrimitive method moveSignedDistanceFromFraction.\r\n * * It is supported here for users interested in replicating the AustralianRail distance mapping rather than the more accurate CurvePrimitive measurements.\r\n * * Round tripping distance through (a) distanceAlongSpiralToAustralianApproximateX, (b) xToFraction, and (c) curveLengthBetweenFractions has\r\n * * 10 digit accuracy for L/R = 4, 12 digit accuracy for L/R = 10\r\n * @param s distance along the axis.\r\n */\r\n public distanceAlongSpiralToAustralianApproximateX(s: number): number {\r\n const a1 = 0.9000;\r\n const a2 = 5.1750;\r\n const a3 = 43.1948;\r\n const a4 = 426.0564;\r\n const m = this._cubicM;\r\n const m2s4 = m * m * s * s * s * s;\r\n const x = s * (1.0 - m2s4 * (a1 - m2s4 * (a2 - m2s4 * (a3 - m2s4 * a4))));\r\n return x;\r\n }\r\n}\r\n"]}