@itwin/core-geometry 5.3.0-dev.2 → 5.3.0-dev.21

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 (608) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.js.map +1 -1
  4. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  5. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  10. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  14. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  16. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  17. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  19. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  21. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  22. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  23. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  24. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  25. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  26. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  27. package/lib/cjs/core-geometry.js.map +1 -1
  28. package/lib/cjs/curve/Arc3d.d.ts +15 -1
  29. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  30. package/lib/cjs/curve/Arc3d.js +36 -9
  31. package/lib/cjs/curve/Arc3d.js.map +1 -1
  32. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  33. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  34. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  35. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  36. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  37. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  38. package/lib/cjs/curve/CurveFactory.d.ts +25 -8
  39. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  40. package/lib/cjs/curve/CurveFactory.js +51 -55
  41. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  42. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  43. package/lib/cjs/curve/CurveOps.d.ts +2 -5
  44. package/lib/cjs/curve/CurveOps.d.ts.map +1 -1
  45. package/lib/cjs/curve/CurveOps.js +2 -5
  46. package/lib/cjs/curve/CurveOps.js.map +1 -1
  47. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  48. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  49. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  50. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  51. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  52. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  53. package/lib/cjs/curve/LineString3d.js.map +1 -1
  54. package/lib/cjs/curve/Loop.js.map +1 -1
  55. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  56. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  57. package/lib/cjs/curve/Path.js.map +1 -1
  58. package/lib/cjs/curve/PointString3d.js.map +1 -1
  59. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  60. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  61. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  62. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  63. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  64. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +50 -15
  65. package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  66. package/lib/cjs/curve/Query/PlanarSubdivision.js +102 -84
  67. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  68. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  69. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  70. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  71. package/lib/cjs/curve/RegionOps.d.ts +44 -25
  72. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  73. package/lib/cjs/curve/RegionOps.js +74 -39
  74. package/lib/cjs/curve/RegionOps.js.map +1 -1
  75. package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  76. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +8 -8
  77. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  78. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  79. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  81. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  82. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  84. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  85. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  87. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  88. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -0
  89. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  90. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +102 -92
  91. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  94. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  96. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  100. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  101. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  102. package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  104. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
  105. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
  106. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
  107. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  108. package/lib/cjs/curve/spiral/ClothoidSeries.d.ts +10 -6
  109. package/lib/cjs/curve/spiral/ClothoidSeries.d.ts.map +1 -1
  110. package/lib/cjs/curve/spiral/ClothoidSeries.js +36 -19
  111. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  112. package/lib/cjs/curve/spiral/CubicEvaluator.d.ts +7 -6
  113. package/lib/cjs/curve/spiral/CubicEvaluator.d.ts.map +1 -1
  114. package/lib/cjs/curve/spiral/CubicEvaluator.js +29 -14
  115. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  116. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts +34 -44
  117. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
  118. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +47 -53
  119. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  120. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
  121. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
  122. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
  123. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  124. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +112 -104
  125. package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  126. package/lib/cjs/curve/spiral/DirectSpiral3d.js +143 -117
  127. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  128. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts +71 -53
  129. package/lib/cjs/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  130. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +99 -66
  131. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  132. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +8 -12
  133. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
  134. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +11 -13
  135. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  136. package/lib/cjs/curve/spiral/NormalizedTransition.d.ts +36 -29
  137. package/lib/cjs/curve/spiral/NormalizedTransition.d.ts.map +1 -1
  138. package/lib/cjs/curve/spiral/NormalizedTransition.js +62 -40
  139. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  140. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts +13 -18
  141. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
  142. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +21 -24
  143. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  144. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts +41 -27
  145. package/lib/cjs/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  146. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +50 -33
  147. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  148. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +45 -34
  149. package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  150. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +56 -38
  151. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  152. package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts +27 -21
  153. package/lib/cjs/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
  154. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +23 -18
  155. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  156. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  157. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  158. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  159. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  160. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  161. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  162. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  163. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  164. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  165. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  166. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  167. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +98 -99
  168. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  169. package/lib/cjs/geometry3d/GrowableXYArray.js +123 -111
  170. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  171. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +137 -143
  172. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  173. package/lib/cjs/geometry3d/GrowableXYZArray.js +167 -161
  174. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  175. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  176. package/lib/cjs/geometry3d/IndexedXYCollection.d.ts +51 -34
  177. package/lib/cjs/geometry3d/IndexedXYCollection.d.ts.map +1 -1
  178. package/lib/cjs/geometry3d/IndexedXYCollection.js +16 -6
  179. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  180. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +87 -93
  181. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  182. package/lib/cjs/geometry3d/IndexedXYZCollection.js +41 -38
  183. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  184. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  185. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  186. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  187. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  188. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  189. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  190. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  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.js.map +1 -1
  194. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  195. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  196. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  197. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  198. package/lib/cjs/geometry3d/PolylineOps.d.ts +2 -2
  199. package/lib/cjs/geometry3d/PolylineOps.js +2 -2
  200. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  201. package/lib/cjs/geometry3d/Range.js.map +1 -1
  202. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  203. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  204. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  205. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  206. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  207. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  208. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  209. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  210. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  211. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  212. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  213. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  214. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  215. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  216. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  217. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  218. package/lib/cjs/numerics/ClusterableArray.d.ts.map +1 -1
  219. package/lib/cjs/numerics/ClusterableArray.js +2 -2
  220. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  221. package/lib/cjs/numerics/Complex.js.map +1 -1
  222. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  223. package/lib/cjs/numerics/Newton.js.map +1 -1
  224. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  225. package/lib/cjs/numerics/PolarData.js.map +1 -1
  226. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  227. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  228. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  229. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  230. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  231. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  232. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  233. package/lib/cjs/polyface/AuxData.js.map +1 -1
  234. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  235. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  236. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  237. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  238. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  239. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  240. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  241. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  242. package/lib/cjs/polyface/Polyface.js.map +1 -1
  243. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  244. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  245. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  246. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  247. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  248. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  249. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  250. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  251. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  252. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  253. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  254. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  255. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  256. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  257. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  258. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  259. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  260. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  261. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  262. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  263. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  264. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  265. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  266. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  267. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  268. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  269. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  270. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  271. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  272. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  273. package/lib/cjs/solid/Box.js.map +1 -1
  274. package/lib/cjs/solid/Cone.js.map +1 -1
  275. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  276. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  277. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  278. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  279. package/lib/cjs/solid/Sphere.js.map +1 -1
  280. package/lib/cjs/solid/SweepContour.js.map +1 -1
  281. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  282. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  283. package/lib/cjs/topology/Graph.js.map +1 -1
  284. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  285. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  286. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  287. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  288. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  289. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  290. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  291. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  292. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  293. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  294. package/lib/cjs/topology/MaskManager.js.map +1 -1
  295. package/lib/cjs/topology/Merging.d.ts +15 -7
  296. package/lib/cjs/topology/Merging.d.ts.map +1 -1
  297. package/lib/cjs/topology/Merging.js +15 -10
  298. package/lib/cjs/topology/Merging.js.map +1 -1
  299. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  300. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  301. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  302. package/lib/cjs/topology/Triangulation.js.map +1 -1
  303. package/lib/cjs/topology/Voronoi.js.map +1 -1
  304. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  305. package/lib/esm/Constant.js.map +1 -1
  306. package/lib/esm/Geometry.js.map +1 -1
  307. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  308. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  309. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  310. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  311. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  312. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  313. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  314. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  315. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  316. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  317. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  318. package/lib/esm/bspline/KnotVector.js.map +1 -1
  319. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  320. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  321. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  322. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  323. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  324. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  325. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  326. package/lib/esm/clipping/ClipVector.js.map +1 -1
  327. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  328. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  329. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  330. package/lib/esm/core-geometry.js.map +1 -1
  331. package/lib/esm/curve/Arc3d.d.ts +15 -1
  332. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  333. package/lib/esm/curve/Arc3d.js +36 -9
  334. package/lib/esm/curve/Arc3d.js.map +1 -1
  335. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  336. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  337. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  338. package/lib/esm/curve/CurveCollection.js.map +1 -1
  339. package/lib/esm/curve/CurveCurve.js.map +1 -1
  340. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  341. package/lib/esm/curve/CurveFactory.d.ts +25 -8
  342. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  343. package/lib/esm/curve/CurveFactory.js +51 -55
  344. package/lib/esm/curve/CurveFactory.js.map +1 -1
  345. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  346. package/lib/esm/curve/CurveOps.d.ts +2 -5
  347. package/lib/esm/curve/CurveOps.d.ts.map +1 -1
  348. package/lib/esm/curve/CurveOps.js +2 -5
  349. package/lib/esm/curve/CurveOps.js.map +1 -1
  350. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  351. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  352. package/lib/esm/curve/CurveTypes.js.map +1 -1
  353. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  354. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  355. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  356. package/lib/esm/curve/LineString3d.js.map +1 -1
  357. package/lib/esm/curve/Loop.js.map +1 -1
  358. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  359. package/lib/esm/curve/ParityRegion.js.map +1 -1
  360. package/lib/esm/curve/Path.js.map +1 -1
  361. package/lib/esm/curve/PointString3d.js.map +1 -1
  362. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  363. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  364. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  365. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  366. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  367. package/lib/esm/curve/Query/PlanarSubdivision.d.ts +50 -15
  368. package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
  369. package/lib/esm/curve/Query/PlanarSubdivision.js +102 -84
  370. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  371. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  372. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  373. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  374. package/lib/esm/curve/RegionOps.d.ts +44 -25
  375. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  376. package/lib/esm/curve/RegionOps.js +72 -37
  377. package/lib/esm/curve/RegionOps.js.map +1 -1
  378. package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
  379. package/lib/esm/curve/RegionOpsClassificationSweeps.js +8 -8
  380. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  381. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  382. package/lib/esm/curve/UnionRegion.js.map +1 -1
  383. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
  384. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  385. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  386. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  387. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  388. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  389. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  390. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  391. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts +1 -0
  392. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.d.ts.map +1 -1
  393. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +102 -92
  394. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  395. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  396. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  397. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  398. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  399. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  400. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  401. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  402. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  403. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  404. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  405. package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
  406. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  407. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts +10 -13
  408. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.d.ts.map +1 -1
  409. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +23 -22
  410. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  411. package/lib/esm/curve/spiral/ClothoidSeries.d.ts +10 -6
  412. package/lib/esm/curve/spiral/ClothoidSeries.d.ts.map +1 -1
  413. package/lib/esm/curve/spiral/ClothoidSeries.js +36 -19
  414. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  415. package/lib/esm/curve/spiral/CubicEvaluator.d.ts +7 -6
  416. package/lib/esm/curve/spiral/CubicEvaluator.d.ts.map +1 -1
  417. package/lib/esm/curve/spiral/CubicEvaluator.js +29 -14
  418. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  419. package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts +34 -44
  420. package/lib/esm/curve/spiral/CzechSpiralEvaluator.d.ts.map +1 -1
  421. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +47 -53
  422. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  423. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts +2 -2
  424. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.d.ts.map +1 -1
  425. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +17 -7
  426. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  427. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +112 -104
  428. package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
  429. package/lib/esm/curve/spiral/DirectSpiral3d.js +143 -117
  430. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  431. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts +71 -53
  432. package/lib/esm/curve/spiral/IntegratedSpiral3d.d.ts.map +1 -1
  433. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +99 -66
  434. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  435. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts +8 -12
  436. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.d.ts.map +1 -1
  437. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +11 -13
  438. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  439. package/lib/esm/curve/spiral/NormalizedTransition.d.ts +36 -29
  440. package/lib/esm/curve/spiral/NormalizedTransition.d.ts.map +1 -1
  441. package/lib/esm/curve/spiral/NormalizedTransition.js +62 -40
  442. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  443. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts +13 -18
  444. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.d.ts.map +1 -1
  445. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +21 -24
  446. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  447. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts +41 -27
  448. package/lib/esm/curve/spiral/TransitionConditionalProperties.d.ts.map +1 -1
  449. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +50 -33
  450. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  451. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +45 -34
  452. package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
  453. package/lib/esm/curve/spiral/TransitionSpiral3d.js +56 -38
  454. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  455. package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts +27 -21
  456. package/lib/esm/curve/spiral/XYCurveEvaluator.d.ts.map +1 -1
  457. package/lib/esm/curve/spiral/XYCurveEvaluator.js +23 -18
  458. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  459. package/lib/esm/geometry3d/Angle.js.map +1 -1
  460. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  461. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  462. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  463. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  464. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  465. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  466. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  467. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  468. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  469. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  470. package/lib/esm/geometry3d/GrowableXYArray.d.ts +98 -99
  471. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  472. package/lib/esm/geometry3d/GrowableXYArray.js +124 -112
  473. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  474. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +137 -143
  475. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  476. package/lib/esm/geometry3d/GrowableXYZArray.js +167 -161
  477. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  478. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  479. package/lib/esm/geometry3d/IndexedXYCollection.d.ts +51 -34
  480. package/lib/esm/geometry3d/IndexedXYCollection.d.ts.map +1 -1
  481. package/lib/esm/geometry3d/IndexedXYCollection.js +14 -5
  482. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  483. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +87 -93
  484. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  485. package/lib/esm/geometry3d/IndexedXYZCollection.js +41 -38
  486. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  487. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  488. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  489. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  490. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  491. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  492. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  493. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  494. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  495. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  496. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  497. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  498. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  499. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  500. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  501. package/lib/esm/geometry3d/PolylineOps.d.ts +2 -2
  502. package/lib/esm/geometry3d/PolylineOps.js +2 -2
  503. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  504. package/lib/esm/geometry3d/Range.js.map +1 -1
  505. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  506. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  507. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  508. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  509. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  510. package/lib/esm/geometry3d/Transform.js.map +1 -1
  511. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  512. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  513. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  514. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  515. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  516. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  517. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  518. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  519. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  520. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  521. package/lib/esm/numerics/ClusterableArray.d.ts.map +1 -1
  522. package/lib/esm/numerics/ClusterableArray.js +2 -2
  523. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  524. package/lib/esm/numerics/Complex.js.map +1 -1
  525. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  526. package/lib/esm/numerics/Newton.js.map +1 -1
  527. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  528. package/lib/esm/numerics/PolarData.js.map +1 -1
  529. package/lib/esm/numerics/Polynomials.js.map +1 -1
  530. package/lib/esm/numerics/Quadrature.js.map +1 -1
  531. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  532. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  533. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  534. package/lib/esm/numerics/UnionFind.js.map +1 -1
  535. package/lib/esm/numerics/UsageSums.js.map +1 -1
  536. package/lib/esm/polyface/AuxData.js.map +1 -1
  537. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  538. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  539. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  540. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  541. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  542. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  543. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  544. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  545. package/lib/esm/polyface/Polyface.js.map +1 -1
  546. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  547. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  548. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  549. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  550. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  551. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  552. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  553. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  554. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  555. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  556. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  557. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  558. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  559. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  560. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  561. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  562. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  563. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  564. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  565. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  566. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  567. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  568. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  569. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  570. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  571. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  572. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  573. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  574. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  575. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  576. package/lib/esm/solid/Box.js.map +1 -1
  577. package/lib/esm/solid/Cone.js.map +1 -1
  578. package/lib/esm/solid/LinearSweep.js.map +1 -1
  579. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  580. package/lib/esm/solid/RuledSweep.js.map +1 -1
  581. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  582. package/lib/esm/solid/Sphere.js.map +1 -1
  583. package/lib/esm/solid/SweepContour.js.map +1 -1
  584. package/lib/esm/solid/TorusPipe.js.map +1 -1
  585. package/lib/esm/topology/ChainMerge.js.map +1 -1
  586. package/lib/esm/topology/Graph.js.map +1 -1
  587. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  588. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  589. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  590. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  591. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  592. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  593. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  594. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  595. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  596. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  597. package/lib/esm/topology/MaskManager.js.map +1 -1
  598. package/lib/esm/topology/Merging.d.ts +15 -7
  599. package/lib/esm/topology/Merging.d.ts.map +1 -1
  600. package/lib/esm/topology/Merging.js +15 -10
  601. package/lib/esm/topology/Merging.js.map +1 -1
  602. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  603. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  604. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  605. package/lib/esm/topology/Triangulation.js.map +1 -1
  606. package/lib/esm/topology/Voronoi.js.map +1 -1
  607. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  608. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCollection.js","sourceRoot":"","sources":["../../../src/curve/CurveCollection.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAgBlD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,eAAgB,SAAQ,aAAa;IACzD,wCAAwC;IACxB,gBAAgB,GAAG,iBAAiB,CAAC;IAGrD,uDAAuD;IAChD,OAAO,GAAY,KAAK,CAAC;IAGhC,6DAA6D;IACtD,UAAU;QACf,OAAO,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD;;;;;;OAMG;IACI,YAAY,CACjB,UAAmB,EAAE,UAAuC,KAAK,EAAE,MAA4B;QAE/F,IAAI,OAAwC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC;oBAChD,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;;;;;OAUG;IACI,YAAY,CACjB,UAAmB,EAAE,eAAsD,EAAE,OAAwB;QAErG,MAAM,aAAa,GAAG,IAAI,4BAA4B,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,KAAK,YAAY,cAAc;oBACjC,KAAK,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;qBAC7D,IAAI,KAAK,YAAY,eAAe;oBACvC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;;OAOG;IACI,WAAW,CAAC,UAAmB,EAAE,OAAwB;QAC9D,MAAM,QAAQ,GAA0B,EAAE,CAAC;QAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7F,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,CAAC;IACD;;;;;;;OAOG;IACI,cAAc,CAAC,UAAmB,EAAE,OAAwB;QACjE,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,IAAI,UAAU,CAAC;QAC9C,IAAI,OAA6B,CAAC;QAClC,IAAI,OAAO,EAAE,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACjF,OAAO,GAAG,QAAQ,CAAC,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACzH,MAAM,gBAAgB,GAAG,CAAC,EAAW,EAAU,EAAE;YAC/C,OAAO,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvI,CAAC,CAAC;QACF,IAAI,cAA+C,CAAC;QACpD,IAAI,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAClD,MAAM,qBAAqB,GAAG,CAAC,OAA4B,EAAE,EAAE;YAC7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;gBAC5C,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC/C,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,oHAAoH;IAC7G,cAAc;QACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;IAC3B,CAAC;IACD;;;;;;OAMG;IACI,MAAM;QACX,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,wGAAwG;IACjG,2BAA2B;QAChC,OAAO,6BAA6B,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,8CAA8C;IACvC,mBAAmB,CAAC,SAAoB;QAC7C,OAAO,uBAAuB,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;IACD,0BAA0B;IACV,KAAK;QACnB,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;IAC3D,CAAC;IACD,gDAAgD;IAChC,gBAAgB,CAAC,SAAoB;QACnD,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,uFAAuF;IAChF,4BAA4B;QACjC,OAAO,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD;;;;OAIG;IACK,wBAAwB,CAC9B,OAAyB,EAAE,0BAAmC,EAAE,qBAA8B,KAAK;QAEnG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,KAAK,YAAY,cAAc;oBACjC,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;qBACrF,IAAI,KAAK,YAAY,eAAe;oBACvC,KAAK,CAAC,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;;;;OAQG;IACI,sBAAsB,CAC3B,cAAiC,EAAE,6BAAsC,KAAK,EAAE,qBAA8B,KAAK;QAEnH,MAAM,OAAO,GAAqB,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;QACrF,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC;IACjB,CAAC;IACD;;;;;;OAMG;IACH,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtG,CAAC;IACD,+BAA+B;IACxB,WAAW;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD;;;OAGG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,0BAA0B;IACnB,MAAM;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD;;;;OAIG;IACH,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,0BAA0B;IACnB,MAAM;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAqBD;;;;OAIG;IACI,WAAW,CAAC,aAAsB,EAAE,SAAqB;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,4CAA4C,CACxD,MAAiC,EAAE,WAAmB,GAAG;QAEzD,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,IAAI,MAAM,YAAY,cAAc,EAAE,CAAC;YACrC,OAAO,mBAAmB,CAAC,4BAA4B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,MAAM,YAAY,eAAe,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,4CAA4C,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAClF,IAAI,MAAM;oBACR,OAAO,MAAM,CAAC;YAClB,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;;;;;OAOG;IACI,uBAAuB,CAAC,GAAqB,EAAE,OAAiB;QACrE,OAAO,yBAAyB,CAAC,kCAAkC,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;IACD,8GAA8G;IACvG,sBAAsB,CAAC,UAAoB;QAChD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,KAAK,UAAU;gBACtB,OAAO,IAAI,CAAC;YACd,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;gBACxD,IAAI,MAAM;oBACR,OAAO,MAAM,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAA,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,OAAgB,UAAW,SAAQ,eAAe;IACtD,yCAAyC;IAC/B,OAAO,CAAmB;IACpC,kBAAkB;IAClB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,2CAA2C;IAC3C,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,kFAAkF;IAC3E,UAAU,CAAC,MAAgB;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,UAAU;YACZ,OAAO,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;YAE/C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,6EAA6E;IACtE,QAAQ,CAAC,MAAgB;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,SAAS;YACX,OAAO,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;YAE9C,OAAO,SAAS,CAAC;IACrB,CAAC;IACD;;;;;OAKG;IACI,uBAAuB,CAAC,YAAoB,QAAQ,CAAC,mBAAmB,EAAE,SAAkB,KAAK;QACtG,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAChI,CAAC;IACD;;;OAGG;IACI,uBAAuB,CAAC,MAAc;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,UAAU;YACZ,OAAO,UAAU,CAAC,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;YAE5D,OAAO,SAAS,CAAC;IACrB,CAAC;IACD;;;OAGG;IACI,qBAAqB,CAAC,MAAc;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,SAAS;YACX,OAAO,SAAS,CAAC,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;;YAE3D,OAAO,SAAS,CAAC;IACrB,CAAC;IACD;;;;;OAKG;IACI,oBAAoB,CAAC,KAAa,EAAE,SAAkB,IAAI;QAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC;YACT,OAAO,SAAS,CAAC;QACnB,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,uCAAuC;YAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD;;;OAGG;IACI,gBAAgB,CAAC,OAAuB;QAC7C;;;;WAIG;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,EAAE,YAAY,YAAY;oBAC5B,OAAO,EAAE,CAAC,YAAY,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD;;;;OAIG;IACI,WAAW,CAAC,KAA2B;QAC5C,IAAI,KAAK,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,8BAA8B;IACvB,QAAQ,CAAC,CAAS;QACvB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,mEAAmE;IACnD,WAAW,CAAC,KAAc,EAAE,SAAqB;QAC/D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO;YAC9B,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD;;;OAGG;IACI,sBAAsB;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IACD,0CAA0C;IAC1B,cAAc;QAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IACD;;;OAGG;IACI,UAAU,CAAC,MAAkC,EAAE,iBAA2B;QAC/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;gBAC5B,OAAO,CAAC,CAAC;QACb,CAAC;QACD,IAAI,iBAAiB,IAAI,KAAK,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,UAAU,YAAY,UAAU,EAAE,CAAC;oBACrC,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM;wBAClC,OAAO,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,6GAA6G;IACtG,gEAAgE,CACrE,KAAa,EAAE,QAAgB,EAAE,SAAkB,KAAK,EAAE,MAA4B;QAEtF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,mBAAmB,CAAC,8CAA8C,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAe;IAC9C,wCAAwC;IACxB,mBAAmB,GAAG,aAAa,CAAC;IACpD,sDAAsD;IAC/C,mBAAmB,CAAC,KAAoB;QAC7C,OAAO,KAAK,YAAY,WAAW,CAAC;IACtC,CAAC;IACD;;;OAGG;IACO,SAAS,CAAa;IAChC,uCAAuC;IACvC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,kDAAkD;IAClD,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,gCAAgC;IACzB,MAAM,CAAC,MAAM,CAAC,GAAG,IAAgB;QACtC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,gFAAgF;IACzE,eAAe;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,mEAAmE;IAC5D,wBAAwB,CAAC,SAAkC,EAAE,gBAAwB,CAAC,CAAC;QAC5F,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,0CAA0C;IACnC,YAAY,CAAC,OAAuB;QACzC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC;QACV,KAAK,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;gBACjC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC/B,IAAI,EAAE;oBACJ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACjD,IAAI,YAAY;oBACd,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;OAMG;IACa,YAAY,CAC1B,UAAmB,EAAE,SAAsC,KAAK,EAAE,MAA4B;QAE9F,IAAI,OAAwC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;oBACjD,OAAO,GAAG,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,oCAAoC;IAC7B,cAAc;QACnB,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;IACD,mBAAmB;IACZ,WAAW,CAAC,KAA2B;QAC5C,IAAI,KAAK;YACP,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,2BAA2B;IACpB,QAAQ,CAAC,CAAS;QACvB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8EAA8E;IACvE,yBAAyB,CAAC,OAAwB;QACvD,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,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\n/** @packageDocumentation\n * @module Curve\n */\nimport { Geometry } from \"../Geometry\";\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { Transform } from \"../geometry3d/Transform\";\nimport { VariantCurveExtendParameter } from \"./CurveExtendMode\";\nimport { CurveLocationDetail } from \"./CurveLocationDetail\";\nimport { CurvePrimitive, TangentOptions } from \"./CurvePrimitive\";\nimport { RecursiveCurveProcessor } from \"./CurveProcessor\";\nimport { AnyCurve, type AnyRegion } from \"./CurveTypes\";\nimport { GeometryQuery } from \"./GeometryQuery\";\nimport { CloneCurvesContext } from \"./internalContexts/CloneCurvesContext\";\nimport { CloneWithExpandedLineStrings } from \"./internalContexts/CloneWithExpandedLineStrings\";\nimport { CountLinearPartsSearchContext } from \"./internalContexts/CountLinearPartsSearchContext\";\nimport { GapSearchContext } from \"./internalContexts/GapSearchContext\";\nimport { PlaneAltitudeRangeContext } from \"./internalContexts/PlaneAltitudeRangeContext\";\nimport { SumLengthsContext } from \"./internalContexts/SumLengthsContext\";\nimport { TransformInPlaceContext } from \"./internalContexts/TransformInPlaceContext\";\nimport { LineString3d } from \"./LineString3d\";\nimport { ProxyCurve } from \"./ProxyCurve\";\nimport { StrokeOptions } from \"./StrokeOptions\";\n\nimport type { Path } from \"./Path\";\nimport type { Loop } from \"./Loop\";\nimport { AnnounceTangentStrokeHandler } from \"./internalContexts/AnnounceTangentStrokeHandler\";\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\n\n/** Note: CurveChain and BagOfCurves classes are located in this file to prevent circular dependency. */\n\n/**\n * Describes the concrete type of a [[CurveCollection]]. Each type name maps to a specific subclass and can be\n * used in conditional statements for type-switching.\n * - \"loop\" => [[Loop]]\n * - \"path\" => [[Path]]\n * - \"unionRegion\" => [[UnionRegion]]\n * - \"parityRegion\" => [[ParityRegion]]\n * - \"bagOfCurves\" => [[BagOfCurves]]\n * @public\n */\nexport type CurveCollectionType = \"loop\" | \"path\" | \"unionRegion\" | \"parityRegion\" | \"bagOfCurves\";\n\n/**\n * A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:\n * - [[CurveChain]] - a non-instantiable intermediate class for a sequence of [[CurvePrimitive]] joining head-to-tail.\n * The two instantiable forms of `CurveChain` are:\n * - [[Path]] - a chain of curves. Does not have to be closed or planar. A closed `Path` is not treated as bounding a surface.\n * - [[Loop]] - a closed and planar chain of curves. A `Loop` is treated as bounding a planar area.\n * - [[ParityRegion]] - a collection of coplanar `Loop`, with \"in/out\" classification by parity rules.\n * - [[UnionRegion]] - a collection of coplanar `Loop` and/or `ParityRegion`, with \"in/out\" classification by union rules.\n * - [[BagOfCurves]] - a collection of [[AnyCurve]] with no implied structure.\n *\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\n * @public\n */\nexport abstract class CurveCollection extends GeometryQuery {\n /** String name for schema properties */\n public readonly geometryCategory = \"curveCollection\";\n /** Type discriminator. */\n public abstract readonly curveCollectionType: CurveCollectionType;\n /** Flag for inner loop status. Only used by `Loop`. */\n public isInner: boolean = false;\n /** Return the curve children. */\n public abstract override get children(): AnyCurve[];\n /** Return the sum of the lengths of all contained curves. */\n public sumLengths(): number {\n return SumLengthsContext.sumLengths(this);\n }\n /**\n * Return the closest point on the contained curves.\n * @param spacePoint point in space.\n * @param _extend unused here (pass false), but applicable to overrides in [[Path]] and [[BagOfCurves]].\n * @param result optional pre-allocated detail to populate and return.\n * @returns details of the closest point.\n */\n public closestPoint(\n spacePoint: Point3d, _extend: VariantCurveExtendParameter = false, result?: CurveLocationDetail,\n ): CurveLocationDetail | undefined {\n let detailA: CurveLocationDetail | undefined;\n const detailB = new CurveLocationDetail();\n if (this.children !== undefined) {\n for (const child of this.children) {\n if (child.closestPoint(spacePoint, false, detailB))\n detailA = result = CurveLocationDetail.chooseSmallerA(detailA, detailB)!.clone(result);\n }\n }\n return detailA;\n }\n /**\n * Announce all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to\n * the contained curves in the view defined by `options.vectorToEye`.\n * * Strictly speaking, each tangent line lies in the plane through `P` whose normal is the cross product of the curve\n * tangent at `P` and `options.vectorToEye`. This is equivalent to tangency as seen in a view plane perpendicular to\n * `options.vectorToEye`.\n * @param spacePoint point in space.\n * @param announceTangent callback to announce each computed tangent. The received [[CurveLocationDetail]] is reused\n * internally, so it should be cloned in the callback if it needs to be saved.\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\n */\n public emitTangents(\n spacePoint: Point3d, announceTangent: (tangent: CurveLocationDetail) => any, options?: TangentOptions,\n ): void {\n const strokeHandler = new AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);\n if (this.children !== undefined) {\n for (const child of this.children) {\n if (child instanceof CurvePrimitive)\n child.emitStrokableParts(strokeHandler, options?.strokeOptions);\n else if (child instanceof CurveCollection)\n child.emitTangents(spacePoint, announceTangent, options);\n }\n }\n }\n /**\n * Return all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the\n * contained curves in the view defined by `options.vectorToEye`.\n * * See [[emitTangents]] for the definition of tangency employed.\n * @param spacePoint point in space.\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\n * @returns an array of details of all tangent points or undefined if no tangent was found.\n */\n public allTangents(spacePoint: Point3d, options?: TangentOptions): CurveLocationDetail[] | undefined {\n const tangents: CurveLocationDetail[] = [];\n this.emitTangents(spacePoint, (t: CurveLocationDetail) => tangents.push(t.clone()), options);\n return (tangents.length === 0) ? undefined : tangents;\n }\n /**\n * Return the point `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the\n * contained curves in the view defined by `options.vectorToEye`, and `P` is closest to `options.hintPoint` in this view.\n * * See [[emitTangents]] for the definition of tangency employed.\n * @param spacePoint point in space.\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\n * @returns the detail of the closest tangent point or undefined if no tangent was found.\n */\n public closestTangent(spacePoint: Point3d, options?: TangentOptions): CurveLocationDetail | undefined {\n const hint = options?.hintPoint ?? spacePoint;\n let toLocal: Matrix3d | undefined;\n if (options?.vectorToEye && !options.vectorToEye.isExactEqual({ x: 0, y: 0, z: 1 }))\n toLocal = Matrix3d.createRigidViewAxesZTowardsEye(options.vectorToEye.x, options.vectorToEye.y, options.vectorToEye.z);\n const measureHintDist2 = (pt: Point3d): number => { // measure distance to hint in view plane coordinates\n return toLocal?.multiplyTransposeXYZ(hint.x - pt.x, hint.y - pt.y, hint.z - pt.z).magnitudeSquaredXY() ?? pt.distanceSquaredXY(hint);\n };\n let closestTangent: CurveLocationDetail | undefined;\n let closestDist2 = Geometry.largeCoordinateResult;\n const collectClosestTangent = (tangent: CurveLocationDetail) => {\n const dist2 = measureHintDist2(tangent.point);\n if (!closestTangent || dist2 < closestDist2) {\n closestTangent = tangent.clone(closestTangent);\n closestDist2 = dist2;\n }\n };\n this.emitTangents(spacePoint, collectClosestTangent, options);\n return closestTangent;\n }\n /** Reverse the collection's data so that each child curve's fractional stroking moves in the opposite direction. */\n public reverseInPlace(): void {\n for (const curve of this.children)\n curve.reverseInPlace();\n }\n /**\n * Return the max gap between adjacent primitives in Path and Loop collections.\n * * In a Path, gaps are computed between consecutive primitives.\n * * In a Loop, gaps are computed between consecutive primitives and between last and first.\n * * Gaps are NOT computed between consecutive CurvePrimitives in \"unstructured\" collections. The type is\n * \"unstructured\" so gaps should not be semantically meaningful.\n */\n public maxGap(): number {\n return GapSearchContext.maxGap(this);\n }\n /** Return true if the curve collection has any primitives other than LineSegment3d and LineString3d */\n public checkForNonLinearPrimitives(): boolean {\n return CountLinearPartsSearchContext.hasNonLinearPrimitives(this);\n }\n /** Apply transform recursively to children */\n public tryTransformInPlace(transform: Transform): boolean {\n return TransformInPlaceContext.tryTransformInPlace(this, transform);\n }\n /** Return a deep copy. */\n public override clone(): CurveCollection {\n return CloneCurvesContext.clone(this) as CurveCollection;\n }\n /** Create a deep copy of transformed curves. */\n public override cloneTransformed(transform: Transform): CurveCollection | undefined {\n return CloneCurvesContext.clone(this, transform);\n }\n /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */\n public cloneWithExpandedLineStrings(): CurveCollection {\n return CloneWithExpandedLineStrings.clone(this);\n }\n /**\n * Push all CurvePrimitives contained in the instance onto the `results` array.\n * * This method is recursive. For example, if the CurveCollection contains a Loop, all CurvePrimitives\n * of the Loop are pushed onto `results`.\n */\n private collectCurvePrimitivesGo(\n results: CurvePrimitive[], smallestPossiblePrimitives: boolean, explodeLinestrings: boolean = false,\n ): void {\n if (this.children) {\n for (const child of this.children) {\n if (child instanceof CurvePrimitive)\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\n else if (child instanceof CurveCollection)\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\n }\n }\n }\n /**\n * Return an array containing all CurvePrimitives in the instance.\n * * This method is recursive. For example, if the CurveCollection contains a Loop, all CurvePrimitives of\n * the Loop are pushed onto the returned array.\n * @param collectorArray optional array to receive primitives. If present, new primitives are ADDED (without\n * clearing the array).\n * @param smallestPossiblePrimitives if false, CurvePrimitiveWithDistanceIndex returns only itself. If true,\n * it recurses to its (otherwise hidden) children.\n */\n public collectCurvePrimitives(\n collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLineStrings: boolean = false,\n ): CurvePrimitive[] {\n const results: CurvePrimitive[] = collectorArray === undefined ? [] : collectorArray;\n this.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLineStrings);\n return results;\n }\n /**\n * Return true for planar region types:\n * * `Loop`\n * * `ParityRegion`\n * * `UnionRegion`\n * @see isAnyRegion\n */\n public get isAnyRegionType(): boolean {\n return this.dgnBoundaryType() === 2 || this.dgnBoundaryType() === 4 || this.dgnBoundaryType() === 5;\n }\n /** Type guard for AnyRegion */\n public isAnyRegion(): this is AnyRegion {\n return this.isAnyRegionType;\n }\n /**\n * Return true for a `Path`, i.e. a chain of curves joined head-to-tail\n * @see isPath\n */\n public get isOpenPath(): boolean {\n return this.dgnBoundaryType() === 1;\n }\n /** Type guard for Path */\n public isPath(): this is Path {\n return this.isOpenPath;\n }\n /**\n * Return true for a single-loop planar region type, i.e. `Loop`.\n * * This is NOT a test for physical closure of a `Path`.\n * @see isLoop\n */\n public get isClosedPath(): boolean {\n return this.dgnBoundaryType() === 2;\n }\n /** Type guard for Loop */\n public isLoop(): this is Loop {\n return this.isClosedPath;\n }\n\n /** Return a CurveCollection with the same structure but all curves replaced by strokes. */\n public abstract cloneStroked(options?: StrokeOptions): CurveCollection;\n /** Support method for ICurvePrimitive ... one line call to specific announce method . . */\n public abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void;\n /** Clone an empty collection. */\n public abstract cloneEmptyPeer(): CurveCollection;\n /**\n * Return the boundary type of a corresponding MicroStation CurveVector.\n * * Derived class must implement.\n */\n public abstract dgnBoundaryType(): number;\n /**\n * Try to add a child.\n * @param child child to add.\n * @return true if child is an acceptable type for this collection.\n */\n public abstract tryAddChild(child: AnyCurve | undefined): boolean;\n /** Return a child identified by by index */\n public abstract getChild(i: number): AnyCurve | undefined;\n /**\n * Extend (increase) the given range as needed to encompass all curves in the curve collection.\n * @param rangeToExtend the given range.\n * @param transform if supplied, the range is extended with transformed curves.\n */\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\n const children = this.children;\n if (children) {\n for (const c of children) {\n c.extendRange(rangeToExtend, transform);\n }\n }\n }\n /**\n * Find any CurvePrimitive in the source and evaluate it at the given fraction.\n * * The first CurvePrimitive found is evaluated. Any other CurvePrimitives are ignored.\n * @param source containing `CurvePrimitive` or `CurveCollection`\n * @param fraction fraction to use in `curve.fractionToPoint(fraction)`\n */\n public static createCurveLocationDetailOnAnyCurvePrimitive(\n source: GeometryQuery | undefined, fraction: number = 0.5,\n ): CurveLocationDetail | undefined {\n if (!source)\n return undefined;\n if (source instanceof CurvePrimitive) {\n return CurveLocationDetail.createCurveEvaluatedFraction(source, fraction);\n } else if (source instanceof CurveCollection && source.children !== undefined)\n for (const child of source.children) {\n const detail = this.createCurveLocationDetailOnAnyCurvePrimitive(child, fraction);\n if (detail)\n return detail;\n }\n return undefined;\n }\n /**\n * Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters\n * of projection.\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\n * @param lowHigh optional receiver for output\n * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the\n * end of the ray.\n */\n public projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\n }\n /** Return the immediate parent of the input curve in the instance, or undefined if it is not a descendant. */\n public findParentOfDescendant(descendant: AnyCurve): CurveCollection | undefined {\n for (const child of this.children) {\n if (child === descendant)\n return this;\n if (child instanceof CurveCollection) {\n const parent = child.findParentOfDescendant(descendant);\n if (parent)\n return parent;\n }\n }\n return undefined;\n };\n}\n\n/**\n * Shared base class for use by both open and closed paths.\n * * A `CurveChain` contains only CurvePrimitives. No other paths, loops, or regions allowed.\n * * The specific derived classes are `Path` and `Loop`.\n * * `CurveChain` is an intermediate class. It is not instantiable on its own.\n * * The related class `CurveChainWithDistanceIndex` is a `CurvePrimitive` whose API presents well-defined mappings\n * from fraction to xyz over the entire chain, but in fact does all the calculations over multiple primitives.\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\n * @public\n */\nexport abstract class CurveChain extends CurveCollection {\n /** The curve primitives in the chain. */\n protected _curves: CurvePrimitive[];\n /** Constructor */\n protected constructor() {\n super();\n this._curves = [];\n }\n /** Return the array of `CurvePrimitive` */\n public override get children(): CurvePrimitive[] {\n return this._curves;\n }\n /** Return the start point of the curve chain (start point of the first child). */\n public startPoint(result?: Point3d): Point3d | undefined {\n const firstChild = this.getChild(0);\n if (firstChild)\n return firstChild.fractionToPoint(0.0, result);\n else\n return undefined;\n }\n /** Return the end point of the curve chain (end point of the last child). */\n public endPoint(result?: Point3d): Point3d | undefined {\n const lastChild = this.getChild(this._curves.length - 1);\n if (lastChild)\n return lastChild.fractionToPoint(1.0, result);\n else\n return undefined;\n }\n /**\n * Whether the chain start and end points are defined and within tolerance.\n * * Does not check for planarity or degeneracy.\n * @param tolerance optional distance tolerance (default is [[Geometry.smallMetricDistance]])\n * @param xyOnly if true, ignore z coordinate (default is `false`)\n */\n public isPhysicallyClosedCurve(tolerance: number = Geometry.smallMetricDistance, xyOnly: boolean = false): boolean {\n const p0 = this.startPoint();\n const p1 = this.endPoint();\n return p0 !== undefined && p1 !== undefined && (xyOnly ? p0.isAlmostEqualXY(p1, tolerance) : p0.isAlmostEqual(p1, tolerance));\n }\n /**\n * Return the start point and derivative of the first child of the curve chain.\n * * For queries interior to the chain, use [[CurveChainWithDistanceIndex.fractionToPointAndDerivative]].\n */\n public startPointAndDerivative(result?: Ray3d): Ray3d | undefined {\n const firstChild = this.getChild(0);\n if (firstChild)\n return firstChild.fractionToPointAndDerivative(0.0, result);\n else\n return undefined;\n }\n /**\n * Return the end point and derivative of the last child of the curve chain.\n * * For queries interior to the chain, use [[CurveChainWithDistanceIndex.fractionToPointAndDerivative]].\n */\n public endPointAndDerivative(result?: Ray3d): Ray3d | undefined {\n const lastChild = this.getChild(this._curves.length - 1);\n if (lastChild)\n return lastChild.fractionToPointAndDerivative(1.0, result);\n else\n return undefined;\n }\n /**\n * Return the curve primitive at the given `index`, optionally using `modulo` to map `index` to the cyclic indexing.\n * * In particular, `-1` is the final curve.\n * @param index cyclic index\n * @param cyclic whether to employ modulo operator for wrap-around indexing. Default is `true`.\n */\n public cyclicCurvePrimitive(index: number, cyclic: boolean = true): CurvePrimitive | undefined {\n const n = this.children.length;\n if (n === 0)\n return undefined;\n if (index >= 0 && index < n) // try simplest non-cyclic access first\n return this.children[index];\n if (cyclic) {\n const index2 = Geometry.modulo(index, n);\n return this.children[index2];\n }\n return undefined;\n }\n /**\n * Stroke the chain into a simple xyz array.\n * @param options tolerance parameters controlling the stroking.\n */\n public getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined {\n /**\n * The object returned by \"cloneStroked\" has the same type (Loop or Path) but instead of a chain of\n * CurvePrimitives as children, it has a single LineString3d child. \"getPackedStrokes\" just returns\n * the points of that LineString3d using \"packedPoints\".\n */\n const tree = this.cloneStroked(options);\n if (tree instanceof CurveChain) {\n const children = tree.children;\n if (children.length === 1) {\n const ls = children[0];\n if (ls instanceof LineString3d)\n return ls.packedPoints;\n }\n }\n return undefined;\n }\n /** Return a structural clone, with CurvePrimitive objects stroked. */\n public abstract override cloneStroked(options?: StrokeOptions): CurveChain;\n /**\n * Add a child curve.\n * @param child curve to add to the chain. The curve is captured by this instance.\n * @return whether the child was added\n */\n public tryAddChild(child: AnyCurve | undefined): boolean {\n if (child && child instanceof CurvePrimitive) {\n this._curves.push(child);\n return true;\n }\n return false;\n }\n /** Return a child by index */\n public getChild(i: number): CurvePrimitive | undefined {\n if (i < this._curves.length) return this._curves[i];\n return undefined;\n }\n /** Invoke `curve.extendRange(range, transform)` for each child */\n public override extendRange(range: Range3d, transform?: Transform): void {\n for (const curve of this._curves)\n curve.extendRange(range, transform);\n }\n /**\n * Reverse each child curve (in place).\n * Reverse the order of the children array.\n */\n public reverseChildrenInPlace(): void {\n for (const curve of this._curves)\n curve.reverseInPlace();\n this._curves.reverse();\n }\n /** Same as [[reverseChildrenInPlace]]. */\n public override reverseInPlace(): void {\n this.reverseChildrenInPlace();\n }\n /**\n * Return the index where target is found in the array of children.\n * @param alsoSearchProxies whether to also check proxy curves of the children\n */\n public childIndex(target: CurvePrimitive | undefined, alsoSearchProxies?: boolean): number | undefined {\n for (let i = 0; i < this._curves.length; i++) {\n if (this._curves[i] === target)\n return i;\n }\n if (alsoSearchProxies ?? false) {\n for (let i = 0; i < this._curves.length; i++) {\n const childCurve = this._curves[i];\n if (childCurve instanceof ProxyCurve) {\n if (childCurve.proxyCurve === target)\n return i;\n }\n }\n }\n return undefined;\n }\n /** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive. */\n public primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(\n index: number, fraction: number, cyclic: boolean = false, result?: CurveLocationDetail,\n ): CurveLocationDetail | undefined {\n const primitive = this.cyclicCurvePrimitive(index, cyclic);\n if (primitive) {\n return CurveLocationDetail.createCurveEvaluatedFractionPointAndDerivative(primitive, fraction, result);\n }\n return undefined;\n }\n}\n\n/**\n * * A `BagOfCurves` object is a collection of `AnyCurve` objects.\n * * A `BagOfCurves` has no implied properties such as being planar.\n * @public\n */\nexport class BagOfCurves extends CurveCollection {\n /** String name for schema properties */\n public readonly curveCollectionType = \"bagOfCurves\";\n /** Test if `other` is an instance of `BagOfCurves` */\n public isSameGeometryClass(other: GeometryQuery): boolean {\n return other instanceof BagOfCurves;\n }\n /**\n * Array of children.\n * * No restrictions on type.\n */\n protected _children: AnyCurve[];\n /** Construct an empty `BagOfCurves` */\n public constructor() {\n super();\n this._children = [];\n }\n /** Return the (reference to) array of children */\n public override get children(): AnyCurve[] {\n return this._children;\n }\n /** Create with given curves. */\n public static create(...data: AnyCurve[]): BagOfCurves {\n const result = new BagOfCurves();\n for (const child of data) {\n result.tryAddChild(child);\n }\n return result;\n }\n /** Return the boundary type (0) of a corresponding MicroStation CurveVector */\n public dgnBoundaryType(): number {\n return 0;\n }\n /** Invoke `processor.announceBagOfCurves(this, indexInParent);` */\n public announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent: number = -1): void {\n return processor.announceBagOfCurves(this, indexInParent);\n }\n /** Clone all children in stroked form. */\n public cloneStroked(options?: StrokeOptions): BagOfCurves {\n const clone = new BagOfCurves();\n let child;\n for (child of this.children) {\n if (child instanceof CurvePrimitive) {\n const ls = LineString3d.create();\n child.emitStrokes(ls, options);\n if (ls)\n clone.children.push(ls);\n } else if (child instanceof CurveCollection) {\n const childStrokes = child.cloneStroked(options);\n if (childStrokes)\n clone.children.push(childStrokes);\n }\n }\n return clone;\n }\n /**\n * Return the closest point on the contained curves.\n * @param spacePoint point in space.\n * @param extend applicable only to children of type [[CurvePrimitive]], [[Path]], or [[BagOfCurves]]\n * @param result optional pre-allocated detail to populate and return.\n * @returns details of the closest point.\n */\n public override closestPoint(\n spacePoint: Point3d, extend: VariantCurveExtendParameter = false, result?: CurveLocationDetail,\n ): CurveLocationDetail | undefined {\n let detailA: CurveLocationDetail | undefined;\n const detailB = new CurveLocationDetail();\n if (this.children !== undefined) {\n for (const child of this.children) {\n if (child.closestPoint(spacePoint, extend, detailB))\n detailA = result = CurveLocationDetail.chooseSmallerA(detailA, detailB)!.clone(result);\n }\n }\n return detailA;\n }\n /** Return an empty `BagOfCurves` */\n public cloneEmptyPeer(): BagOfCurves {\n return new BagOfCurves();\n }\n /** Add a child */\n public tryAddChild(child: AnyCurve | undefined): boolean {\n if (child)\n this._children.push(child);\n return true;\n }\n /** Get a child by index */\n public getChild(i: number): AnyCurve | undefined {\n if (i < this._children.length)\n return this._children[i];\n return undefined;\n }\n /** Second step of double dispatch: call `handler.handleBagOfCurves(this)` */\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\n return handler.handleBagOfCurves(this);\n }\n}\n"]}
1
+ {"version":3,"file":"CurveCollection.js","sourceRoot":"","sources":["../../../src/curve/CurveCollection.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 { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { VariantCurveExtendParameter } from \"./CurveExtendMode\";\r\nimport { CurveLocationDetail } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive, TangentOptions } from \"./CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"./CurveProcessor\";\r\nimport { AnyCurve, type AnyRegion } from \"./CurveTypes\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { CloneCurvesContext } from \"./internalContexts/CloneCurvesContext\";\r\nimport { CloneWithExpandedLineStrings } from \"./internalContexts/CloneWithExpandedLineStrings\";\r\nimport { CountLinearPartsSearchContext } from \"./internalContexts/CountLinearPartsSearchContext\";\r\nimport { GapSearchContext } from \"./internalContexts/GapSearchContext\";\r\nimport { PlaneAltitudeRangeContext } from \"./internalContexts/PlaneAltitudeRangeContext\";\r\nimport { SumLengthsContext } from \"./internalContexts/SumLengthsContext\";\r\nimport { TransformInPlaceContext } from \"./internalContexts/TransformInPlaceContext\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { ProxyCurve } from \"./ProxyCurve\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\nimport type { Path } from \"./Path\";\r\nimport type { Loop } from \"./Loop\";\r\nimport { AnnounceTangentStrokeHandler } from \"./internalContexts/AnnounceTangentStrokeHandler\";\r\nimport { Matrix3d } from \"../geometry3d/Matrix3d\";\r\n\r\n/** Note: CurveChain and BagOfCurves classes are located in this file to prevent circular dependency. */\r\n\r\n/**\r\n * Describes the concrete type of a [[CurveCollection]]. Each type name maps to a specific subclass and can be\r\n * used in conditional statements for type-switching.\r\n * - \"loop\" => [[Loop]]\r\n * - \"path\" => [[Path]]\r\n * - \"unionRegion\" => [[UnionRegion]]\r\n * - \"parityRegion\" => [[ParityRegion]]\r\n * - \"bagOfCurves\" => [[BagOfCurves]]\r\n * @public\r\n */\r\nexport type CurveCollectionType = \"loop\" | \"path\" | \"unionRegion\" | \"parityRegion\" | \"bagOfCurves\";\r\n\r\n/**\r\n * A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:\r\n * - [[CurveChain]] - a non-instantiable intermediate class for a sequence of [[CurvePrimitive]] joining head-to-tail.\r\n * The two instantiable forms of `CurveChain` are:\r\n * - [[Path]] - a chain of curves. Does not have to be closed or planar. A closed `Path` is not treated as bounding a surface.\r\n * - [[Loop]] - a closed and planar chain of curves. A `Loop` is treated as bounding a planar area.\r\n * - [[ParityRegion]] - a collection of coplanar `Loop`, with \"in/out\" classification by parity rules.\r\n * - [[UnionRegion]] - a collection of coplanar `Loop` and/or `ParityRegion`, with \"in/out\" classification by union rules.\r\n * - [[BagOfCurves]] - a collection of [[AnyCurve]] with no implied structure.\r\n *\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveCollection extends GeometryQuery {\r\n /** String name for schema properties */\r\n public readonly geometryCategory = \"curveCollection\";\r\n /** Type discriminator. */\r\n public abstract readonly curveCollectionType: CurveCollectionType;\r\n /** Flag for inner loop status. Only used by `Loop`. */\r\n public isInner: boolean = false;\r\n /** Return the curve children. */\r\n public abstract override get children(): AnyCurve[];\r\n /** Return the sum of the lengths of all contained curves. */\r\n public sumLengths(): number {\r\n return SumLengthsContext.sumLengths(this);\r\n }\r\n /**\r\n * Return the closest point on the contained curves.\r\n * @param spacePoint point in space.\r\n * @param _extend unused here (pass false), but applicable to overrides in [[Path]] and [[BagOfCurves]].\r\n * @param result optional pre-allocated detail to populate and return.\r\n * @returns details of the closest point.\r\n */\r\n public closestPoint(\r\n spacePoint: Point3d, _extend: VariantCurveExtendParameter = false, result?: CurveLocationDetail,\r\n ): CurveLocationDetail | undefined {\r\n let detailA: CurveLocationDetail | undefined;\r\n const detailB = new CurveLocationDetail();\r\n if (this.children !== undefined) {\r\n for (const child of this.children) {\r\n if (child.closestPoint(spacePoint, false, detailB))\r\n detailA = result = CurveLocationDetail.chooseSmallerA(detailA, detailB)!.clone(result);\r\n }\r\n }\r\n return detailA;\r\n }\r\n /**\r\n * Announce all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to\r\n * the contained curves in the view defined by `options.vectorToEye`.\r\n * * Strictly speaking, each tangent line lies in the plane through `P` whose normal is the cross product of the curve\r\n * tangent at `P` and `options.vectorToEye`. This is equivalent to tangency as seen in a view plane perpendicular to\r\n * `options.vectorToEye`.\r\n * @param spacePoint point in space.\r\n * @param announceTangent callback to announce each computed tangent. The received [[CurveLocationDetail]] is reused\r\n * internally, so it should be cloned in the callback if it needs to be saved.\r\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\r\n */\r\n public emitTangents(\r\n spacePoint: Point3d, announceTangent: (tangent: CurveLocationDetail) => any, options?: TangentOptions,\r\n ): void {\r\n const strokeHandler = new AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);\r\n if (this.children !== undefined) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive)\r\n child.emitStrokableParts(strokeHandler, options?.strokeOptions);\r\n else if (child instanceof CurveCollection)\r\n child.emitTangents(spacePoint, announceTangent, options);\r\n }\r\n }\r\n }\r\n /**\r\n * Return all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the\r\n * contained curves in the view defined by `options.vectorToEye`.\r\n * * See [[emitTangents]] for the definition of tangency employed.\r\n * @param spacePoint point in space.\r\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\r\n * @returns an array of details of all tangent points or undefined if no tangent was found.\r\n */\r\n public allTangents(spacePoint: Point3d, options?: TangentOptions): CurveLocationDetail[] | undefined {\r\n const tangents: CurveLocationDetail[] = [];\r\n this.emitTangents(spacePoint, (t: CurveLocationDetail) => tangents.push(t.clone()), options);\r\n return (tangents.length === 0) ? undefined : tangents;\r\n }\r\n /**\r\n * Return the point `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the\r\n * contained curves in the view defined by `options.vectorToEye`, and `P` is closest to `options.hintPoint` in this view.\r\n * * See [[emitTangents]] for the definition of tangency employed.\r\n * @param spacePoint point in space.\r\n * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.\r\n * @returns the detail of the closest tangent point or undefined if no tangent was found.\r\n */\r\n public closestTangent(spacePoint: Point3d, options?: TangentOptions): CurveLocationDetail | undefined {\r\n const hint = options?.hintPoint ?? spacePoint;\r\n let toLocal: Matrix3d | undefined;\r\n if (options?.vectorToEye && !options.vectorToEye.isExactEqual({ x: 0, y: 0, z: 1 }))\r\n toLocal = Matrix3d.createRigidViewAxesZTowardsEye(options.vectorToEye.x, options.vectorToEye.y, options.vectorToEye.z);\r\n const measureHintDist2 = (pt: Point3d): number => { // measure distance to hint in view plane coordinates\r\n return toLocal?.multiplyTransposeXYZ(hint.x - pt.x, hint.y - pt.y, hint.z - pt.z).magnitudeSquaredXY() ?? pt.distanceSquaredXY(hint);\r\n };\r\n let closestTangent: CurveLocationDetail | undefined;\r\n let closestDist2 = Geometry.largeCoordinateResult;\r\n const collectClosestTangent = (tangent: CurveLocationDetail) => {\r\n const dist2 = measureHintDist2(tangent.point);\r\n if (!closestTangent || dist2 < closestDist2) {\r\n closestTangent = tangent.clone(closestTangent);\r\n closestDist2 = dist2;\r\n }\r\n };\r\n this.emitTangents(spacePoint, collectClosestTangent, options);\r\n return closestTangent;\r\n }\r\n /** Reverse the collection's data so that each child curve's fractional stroking moves in the opposite direction. */\r\n public reverseInPlace(): void {\r\n for (const curve of this.children)\r\n curve.reverseInPlace();\r\n }\r\n /**\r\n * Return the max gap between adjacent primitives in Path and Loop collections.\r\n * * In a Path, gaps are computed between consecutive primitives.\r\n * * In a Loop, gaps are computed between consecutive primitives and between last and first.\r\n * * Gaps are NOT computed between consecutive CurvePrimitives in \"unstructured\" collections. The type is\r\n * \"unstructured\" so gaps should not be semantically meaningful.\r\n */\r\n public maxGap(): number {\r\n return GapSearchContext.maxGap(this);\r\n }\r\n /** Return true if the curve collection has any primitives other than LineSegment3d and LineString3d */\r\n public checkForNonLinearPrimitives(): boolean {\r\n return CountLinearPartsSearchContext.hasNonLinearPrimitives(this);\r\n }\r\n /** Apply transform recursively to children */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n return TransformInPlaceContext.tryTransformInPlace(this, transform);\r\n }\r\n /** Return a deep copy. */\r\n public override clone(): CurveCollection {\r\n return CloneCurvesContext.clone(this) as CurveCollection;\r\n }\r\n /** Create a deep copy of transformed curves. */\r\n public override cloneTransformed(transform: Transform): CurveCollection | undefined {\r\n return CloneCurvesContext.clone(this, transform);\r\n }\r\n /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */\r\n public cloneWithExpandedLineStrings(): CurveCollection {\r\n return CloneWithExpandedLineStrings.clone(this);\r\n }\r\n /**\r\n * Push all CurvePrimitives contained in the instance onto the `results` array.\r\n * * This method is recursive. For example, if the CurveCollection contains a Loop, all CurvePrimitives\r\n * of the Loop are pushed onto `results`.\r\n */\r\n private collectCurvePrimitivesGo(\r\n results: CurvePrimitive[], smallestPossiblePrimitives: boolean, explodeLinestrings: boolean = false,\r\n ): void {\r\n if (this.children) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n else if (child instanceof CurveCollection)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n }\r\n }\r\n }\r\n /**\r\n * Return an array containing all CurvePrimitives in the instance.\r\n * * This method is recursive. For example, if the CurveCollection contains a Loop, all CurvePrimitives of\r\n * the Loop are pushed onto the returned array.\r\n * @param collectorArray optional array to receive primitives. If present, new primitives are ADDED (without\r\n * clearing the array).\r\n * @param smallestPossiblePrimitives if false, CurvePrimitiveWithDistanceIndex returns only itself. If true,\r\n * it recurses to its (otherwise hidden) children.\r\n */\r\n public collectCurvePrimitives(\r\n collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLineStrings: boolean = false,\r\n ): CurvePrimitive[] {\r\n const results: CurvePrimitive[] = collectorArray === undefined ? [] : collectorArray;\r\n this.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLineStrings);\r\n return results;\r\n }\r\n /**\r\n * Return true for planar region types:\r\n * * `Loop`\r\n * * `ParityRegion`\r\n * * `UnionRegion`\r\n * @see isAnyRegion\r\n */\r\n public get isAnyRegionType(): boolean {\r\n return this.dgnBoundaryType() === 2 || this.dgnBoundaryType() === 4 || this.dgnBoundaryType() === 5;\r\n }\r\n /** Type guard for AnyRegion */\r\n public isAnyRegion(): this is AnyRegion {\r\n return this.isAnyRegionType;\r\n }\r\n /**\r\n * Return true for a `Path`, i.e. a chain of curves joined head-to-tail\r\n * @see isPath\r\n */\r\n public get isOpenPath(): boolean {\r\n return this.dgnBoundaryType() === 1;\r\n }\r\n /** Type guard for Path */\r\n public isPath(): this is Path {\r\n return this.isOpenPath;\r\n }\r\n /**\r\n * Return true for a single-loop planar region type, i.e. `Loop`.\r\n * * This is NOT a test for physical closure of a `Path`.\r\n * @see isLoop\r\n */\r\n public get isClosedPath(): boolean {\r\n return this.dgnBoundaryType() === 2;\r\n }\r\n /** Type guard for Loop */\r\n public isLoop(): this is Loop {\r\n return this.isClosedPath;\r\n }\r\n\r\n /** Return a CurveCollection with the same structure but all curves replaced by strokes. */\r\n public abstract cloneStroked(options?: StrokeOptions): CurveCollection;\r\n /** Support method for ICurvePrimitive ... one line call to specific announce method . . */\r\n public abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void;\r\n /** Clone an empty collection. */\r\n public abstract cloneEmptyPeer(): CurveCollection;\r\n /**\r\n * Return the boundary type of a corresponding MicroStation CurveVector.\r\n * * Derived class must implement.\r\n */\r\n public abstract dgnBoundaryType(): number;\r\n /**\r\n * Try to add a child.\r\n * @param child child to add.\r\n * @return true if child is an acceptable type for this collection.\r\n */\r\n public abstract tryAddChild(child: AnyCurve | undefined): boolean;\r\n /** Return a child identified by by index */\r\n public abstract getChild(i: number): AnyCurve | undefined;\r\n /**\r\n * Extend (increase) the given range as needed to encompass all curves in the curve collection.\r\n * @param rangeToExtend the given range.\r\n * @param transform if supplied, the range is extended with transformed curves.\r\n */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const children = this.children;\r\n if (children) {\r\n for (const c of children) {\r\n c.extendRange(rangeToExtend, transform);\r\n }\r\n }\r\n }\r\n /**\r\n * Find any CurvePrimitive in the source and evaluate it at the given fraction.\r\n * * The first CurvePrimitive found is evaluated. Any other CurvePrimitives are ignored.\r\n * @param source containing `CurvePrimitive` or `CurveCollection`\r\n * @param fraction fraction to use in `curve.fractionToPoint(fraction)`\r\n */\r\n public static createCurveLocationDetailOnAnyCurvePrimitive(\r\n source: GeometryQuery | undefined, fraction: number = 0.5,\r\n ): CurveLocationDetail | undefined {\r\n if (!source)\r\n return undefined;\r\n if (source instanceof CurvePrimitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFraction(source, fraction);\r\n } else if (source instanceof CurveCollection && source.children !== undefined)\r\n for (const child of source.children) {\r\n const detail = this.createCurveLocationDetailOnAnyCurvePrimitive(child, fraction);\r\n if (detail)\r\n return detail;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters\r\n * of projection.\r\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the\r\n * end of the ray.\r\n */\r\n public projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\r\n }\r\n /** Return the immediate parent of the input curve in the instance, or undefined if it is not a descendant. */\r\n public findParentOfDescendant(descendant: AnyCurve): CurveCollection | undefined {\r\n for (const child of this.children) {\r\n if (child === descendant)\r\n return this;\r\n if (child instanceof CurveCollection) {\r\n const parent = child.findParentOfDescendant(descendant);\r\n if (parent)\r\n return parent;\r\n }\r\n }\r\n return undefined;\r\n };\r\n}\r\n\r\n/**\r\n * Shared base class for use by both open and closed paths.\r\n * * A `CurveChain` contains only CurvePrimitives. No other paths, loops, or regions allowed.\r\n * * The specific derived classes are `Path` and `Loop`.\r\n * * `CurveChain` is an intermediate class. It is not instantiable on its own.\r\n * * The related class `CurveChainWithDistanceIndex` is a `CurvePrimitive` whose API presents well-defined mappings\r\n * from fraction to xyz over the entire chain, but in fact does all the calculations over multiple primitives.\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveChain extends CurveCollection {\r\n /** The curve primitives in the chain. */\r\n protected _curves: CurvePrimitive[];\r\n /** Constructor */\r\n protected constructor() {\r\n super();\r\n this._curves = [];\r\n }\r\n /** Return the array of `CurvePrimitive` */\r\n public override get children(): CurvePrimitive[] {\r\n return this._curves;\r\n }\r\n /** Return the start point of the curve chain (start point of the first child). */\r\n public startPoint(result?: Point3d): Point3d | undefined {\r\n const firstChild = this.getChild(0);\r\n if (firstChild)\r\n return firstChild.fractionToPoint(0.0, result);\r\n else\r\n return undefined;\r\n }\r\n /** Return the end point of the curve chain (end point of the last child). */\r\n public endPoint(result?: Point3d): Point3d | undefined {\r\n const lastChild = this.getChild(this._curves.length - 1);\r\n if (lastChild)\r\n return lastChild.fractionToPoint(1.0, result);\r\n else\r\n return undefined;\r\n }\r\n /**\r\n * Whether the chain start and end points are defined and within tolerance.\r\n * * Does not check for planarity or degeneracy.\r\n * @param tolerance optional distance tolerance (default is [[Geometry.smallMetricDistance]])\r\n * @param xyOnly if true, ignore z coordinate (default is `false`)\r\n */\r\n public isPhysicallyClosedCurve(tolerance: number = Geometry.smallMetricDistance, xyOnly: boolean = false): boolean {\r\n const p0 = this.startPoint();\r\n const p1 = this.endPoint();\r\n return p0 !== undefined && p1 !== undefined && (xyOnly ? p0.isAlmostEqualXY(p1, tolerance) : p0.isAlmostEqual(p1, tolerance));\r\n }\r\n /**\r\n * Return the start point and derivative of the first child of the curve chain.\r\n * * For queries interior to the chain, use [[CurveChainWithDistanceIndex.fractionToPointAndDerivative]].\r\n */\r\n public startPointAndDerivative(result?: Ray3d): Ray3d | undefined {\r\n const firstChild = this.getChild(0);\r\n if (firstChild)\r\n return firstChild.fractionToPointAndDerivative(0.0, result);\r\n else\r\n return undefined;\r\n }\r\n /**\r\n * Return the end point and derivative of the last child of the curve chain.\r\n * * For queries interior to the chain, use [[CurveChainWithDistanceIndex.fractionToPointAndDerivative]].\r\n */\r\n public endPointAndDerivative(result?: Ray3d): Ray3d | undefined {\r\n const lastChild = this.getChild(this._curves.length - 1);\r\n if (lastChild)\r\n return lastChild.fractionToPointAndDerivative(1.0, result);\r\n else\r\n return undefined;\r\n }\r\n /**\r\n * Return the curve primitive at the given `index`, optionally using `modulo` to map `index` to the cyclic indexing.\r\n * * In particular, `-1` is the final curve.\r\n * @param index cyclic index\r\n * @param cyclic whether to employ modulo operator for wrap-around indexing. Default is `true`.\r\n */\r\n public cyclicCurvePrimitive(index: number, cyclic: boolean = true): CurvePrimitive | undefined {\r\n const n = this.children.length;\r\n if (n === 0)\r\n return undefined;\r\n if (index >= 0 && index < n) // try simplest non-cyclic access first\r\n return this.children[index];\r\n if (cyclic) {\r\n const index2 = Geometry.modulo(index, n);\r\n return this.children[index2];\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Stroke the chain into a simple xyz array.\r\n * @param options tolerance parameters controlling the stroking.\r\n */\r\n public getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined {\r\n /**\r\n * The object returned by \"cloneStroked\" has the same type (Loop or Path) but instead of a chain of\r\n * CurvePrimitives as children, it has a single LineString3d child. \"getPackedStrokes\" just returns\r\n * the points of that LineString3d using \"packedPoints\".\r\n */\r\n const tree = this.cloneStroked(options);\r\n if (tree instanceof CurveChain) {\r\n const children = tree.children;\r\n if (children.length === 1) {\r\n const ls = children[0];\r\n if (ls instanceof LineString3d)\r\n return ls.packedPoints;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Return a structural clone, with CurvePrimitive objects stroked. */\r\n public abstract override cloneStroked(options?: StrokeOptions): CurveChain;\r\n /**\r\n * Add a child curve.\r\n * @param child curve to add to the chain. The curve is captured by this instance.\r\n * @return whether the child was added\r\n */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child && child instanceof CurvePrimitive) {\r\n this._curves.push(child);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return a child by index */\r\n public getChild(i: number): CurvePrimitive | undefined {\r\n if (i < this._curves.length) return this._curves[i];\r\n return undefined;\r\n }\r\n /** Invoke `curve.extendRange(range, transform)` for each child */\r\n public override extendRange(range: Range3d, transform?: Transform): void {\r\n for (const curve of this._curves)\r\n curve.extendRange(range, transform);\r\n }\r\n /**\r\n * Reverse each child curve (in place).\r\n * Reverse the order of the children array.\r\n */\r\n public reverseChildrenInPlace(): void {\r\n for (const curve of this._curves)\r\n curve.reverseInPlace();\r\n this._curves.reverse();\r\n }\r\n /** Same as [[reverseChildrenInPlace]]. */\r\n public override reverseInPlace(): void {\r\n this.reverseChildrenInPlace();\r\n }\r\n /**\r\n * Return the index where target is found in the array of children.\r\n * @param alsoSearchProxies whether to also check proxy curves of the children\r\n */\r\n public childIndex(target: CurvePrimitive | undefined, alsoSearchProxies?: boolean): number | undefined {\r\n for (let i = 0; i < this._curves.length; i++) {\r\n if (this._curves[i] === target)\r\n return i;\r\n }\r\n if (alsoSearchProxies ?? false) {\r\n for (let i = 0; i < this._curves.length; i++) {\r\n const childCurve = this._curves[i];\r\n if (childCurve instanceof ProxyCurve) {\r\n if (childCurve.proxyCurve === target)\r\n return i;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive. */\r\n public primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(\r\n index: number, fraction: number, cyclic: boolean = false, result?: CurveLocationDetail,\r\n ): CurveLocationDetail | undefined {\r\n const primitive = this.cyclicCurvePrimitive(index, cyclic);\r\n if (primitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFractionPointAndDerivative(primitive, fraction, result);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * * A `BagOfCurves` object is a collection of `AnyCurve` objects.\r\n * * A `BagOfCurves` has no implied properties such as being planar.\r\n * @public\r\n */\r\nexport class BagOfCurves extends CurveCollection {\r\n /** String name for schema properties */\r\n public readonly curveCollectionType = \"bagOfCurves\";\r\n /** Test if `other` is an instance of `BagOfCurves` */\r\n public isSameGeometryClass(other: GeometryQuery): boolean {\r\n return other instanceof BagOfCurves;\r\n }\r\n /**\r\n * Array of children.\r\n * * No restrictions on type.\r\n */\r\n protected _children: AnyCurve[];\r\n /** Construct an empty `BagOfCurves` */\r\n public constructor() {\r\n super();\r\n this._children = [];\r\n }\r\n /** Return the (reference to) array of children */\r\n public override get children(): AnyCurve[] {\r\n return this._children;\r\n }\r\n /** Create with given curves. */\r\n public static create(...data: AnyCurve[]): BagOfCurves {\r\n const result = new BagOfCurves();\r\n for (const child of data) {\r\n result.tryAddChild(child);\r\n }\r\n return result;\r\n }\r\n /** Return the boundary type (0) of a corresponding MicroStation CurveVector */\r\n public dgnBoundaryType(): number {\r\n return 0;\r\n }\r\n /** Invoke `processor.announceBagOfCurves(this, indexInParent);` */\r\n public announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent: number = -1): void {\r\n return processor.announceBagOfCurves(this, indexInParent);\r\n }\r\n /** Clone all children in stroked form. */\r\n public cloneStroked(options?: StrokeOptions): BagOfCurves {\r\n const clone = new BagOfCurves();\r\n let child;\r\n for (child of this.children) {\r\n if (child instanceof CurvePrimitive) {\r\n const ls = LineString3d.create();\r\n child.emitStrokes(ls, options);\r\n if (ls)\r\n clone.children.push(ls);\r\n } else if (child instanceof CurveCollection) {\r\n const childStrokes = child.cloneStroked(options);\r\n if (childStrokes)\r\n clone.children.push(childStrokes);\r\n }\r\n }\r\n return clone;\r\n }\r\n /**\r\n * Return the closest point on the contained curves.\r\n * @param spacePoint point in space.\r\n * @param extend applicable only to children of type [[CurvePrimitive]], [[Path]], or [[BagOfCurves]]\r\n * @param result optional pre-allocated detail to populate and return.\r\n * @returns details of the closest point.\r\n */\r\n public override closestPoint(\r\n spacePoint: Point3d, extend: VariantCurveExtendParameter = false, result?: CurveLocationDetail,\r\n ): CurveLocationDetail | undefined {\r\n let detailA: CurveLocationDetail | undefined;\r\n const detailB = new CurveLocationDetail();\r\n if (this.children !== undefined) {\r\n for (const child of this.children) {\r\n if (child.closestPoint(spacePoint, extend, detailB))\r\n detailA = result = CurveLocationDetail.chooseSmallerA(detailA, detailB)!.clone(result);\r\n }\r\n }\r\n return detailA;\r\n }\r\n /** Return an empty `BagOfCurves` */\r\n public cloneEmptyPeer(): BagOfCurves {\r\n return new BagOfCurves();\r\n }\r\n /** Add a child */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child)\r\n this._children.push(child);\r\n return true;\r\n }\r\n /** Get a child by index */\r\n public getChild(i: number): AnyCurve | undefined {\r\n if (i < this._children.length)\r\n return this._children[i];\r\n return undefined;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBagOfCurves(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBagOfCurves(this);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CurveCurve.js","sourceRoot":"","sources":["../../../src/curve/CurveCurve.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 { Matrix4d } from \"../geometry4d/Matrix4d\";\nimport { CurveLocationDetailPair } from \"./CurveLocationDetail\";\nimport { CurvePrimitive } from \"./CurvePrimitive\";\nimport { AnyCurve } from \"./CurveTypes\";\nimport { CurveCurveCloseApproachXY } from \"./internalContexts/CurveCurveCloseApproachXY\";\nimport { CurveCurveIntersectXY } from \"./internalContexts/CurveCurveIntersectXY\";\nimport { CurveCurveIntersectXYZ } from \"./internalContexts/CurveCurveIntersectXYZ\";\n\n/**\n * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.\n * @public\n */\nexport class CurveCurve {\n /**\n * Return xy intersections of 2 curves.\n * * Curves can be extended if extend flags are set. B-splines are not extended even if the flag is set.\n * @param curveA first curve\n * @param extendA true to allow curveA to extend\n * @param curveB second curve\n * @param extendB true to allow curveB to extend\n * @param tolerance optional distance tolerance for coincidence\n */\n public static intersectionXYPairs(\n curveA: AnyCurve,\n extendA: boolean,\n curveB: AnyCurve,\n extendB: boolean,\n tolerance: number = Geometry.smallMetricDistance,\n ): CurveLocationDetailPair[] {\n return CurveCurve.intersectionProjectedXYPairs(undefined, curveA, extendA, curveB, extendB, tolerance);\n }\n /**\n * Return xy intersections of 2 projected curves.\n * * Curves can be extended if extend flags are set. B-splines are not extended even if the flag is set.\n * @param worldToLocal transform (possibly perspective) defining the local coordinates in which to compute xy intersections\n * @param curveA first curve\n * @param extendA true to allow curveA to extend\n * @param curveB second curve\n * @param extendB true to allow curveB to extend\n * @param tolerance optional distance tolerance for coincidence\n */\n public static intersectionProjectedXYPairs(\n worldToLocal: Matrix4d | undefined,\n curveA: AnyCurve,\n extendA: boolean,\n curveB: AnyCurve,\n extendB: boolean,\n tolerance: number = Geometry.smallMetricDistance,\n ): CurveLocationDetailPair[] {\n const handler = new CurveCurveIntersectXY(worldToLocal, extendA, curveB, extendB, tolerance);\n curveA.dispatchToGeometryHandler(handler);\n return handler.grabPairedResults();\n }\n /**\n * Return full 3d xyz intersections of 2 curves.\n * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.\n * * Not Implemented for bspline and bezier curves.\n * @param curveA first curve\n * @param extendA true to allow curveA to extend\n * @param curveB second curve\n * @param extendB true to allow curveB to extend\n * @returns array of intersections structured as CurveLocationDetailPair[]\n */\n public static intersectionXYZPairs(\n curveA: AnyCurve, extendA: boolean, curveB: AnyCurve, extendB: boolean,\n ): CurveLocationDetailPair[] {\n const handler = new CurveCurveIntersectXYZ(extendA, curveB, extendB);\n curveA.dispatchToGeometryHandler(handler);\n return handler.grabPairedResults();\n }\n /**\n * Return xy intersections of input curves.\n * @param primitives input curves to intersect\n * @param tolerance optional distance tolerance for coincidence\n */\n public static allIntersectionsAmongPrimitivesXY(\n primitives: CurvePrimitive[], tolerance: number = Geometry.smallMetricDistance,\n ): CurveLocationDetailPair[] {\n const handler = new CurveCurveIntersectXY(undefined, false, undefined, false, tolerance);\n for (let i = 0; i < primitives.length; i++) {\n const curveA = primitives[i];\n for (let j = i + 1; j < primitives.length; j++) {\n handler.resetGeometry(primitives[j]);\n curveA.dispatchToGeometryHandler(handler);\n }\n }\n return handler.grabPairedResults();\n }\n /**\n * Return at least one XY close approach between 2 curves.\n * * Close approach xy-distances are measured without regard to z. This is equivalent to their separation distance\n * as seen in the top view, or as measured between their projections onto the xy-plane.\n * * If more than one approach is returned, one of them is the closest approach.\n * * If an input curve is a `CurveCollection`, then close approaches are computed to each `CurvePrimitive` child.\n * This can lead to many returned pairs, especially when both inputs are `CurveCollection`s. If an input curve is\n * an `AnyRegion` then close approaches are computed only to the boundary curves, not to the interior.\n * @param curveA first curve\n * @param curveB second curve\n * @param maxDistance maximum xy-distance to consider between the curves.\n * Close approaches further than this xy-distance are not returned.\n */\n public static closeApproachProjectedXYPairs(\n curveA: AnyCurve, curveB: AnyCurve, maxDistance: number,\n ): CurveLocationDetailPair[] {\n const handler = new CurveCurveCloseApproachXY(curveB);\n handler.maxDistanceToAccept = maxDistance;\n curveA.dispatchToGeometryHandler(handler);\n return handler.grabPairedResults();\n }\n /**\n * Convenience method that calls [[closeApproachProjectedXYPairs]] with a large `maxDistance`\n * and returns a detail pair representing the closest xy-approach between the curves.\n * * There may be many detail pairs that represent \"closest\" xy-approach, including coincident interval pairs,\n * isolated intersections, or close approaches within tolerance of each other. This method makes no attempt to\n * distinguish among them, and returns a pair whose `detail.point` values are separated by the smallest xy distance\n * found among the pairs.\n * @param curveA first curve\n * @param curveB second curve\n * @return detail pair of closest xy-approach, undefined if not found\n */\n public static closestApproachProjectedXYPair(curveA: AnyCurve, curveB: AnyCurve): CurveLocationDetailPair | undefined {\n const range = curveA.range();\n range.extendRange(curveB.range());\n const maxDistance = range.low.distanceXY(range.high);\n const closeApproaches = this.closeApproachProjectedXYPairs(curveA, curveB, maxDistance);\n if (!closeApproaches.length)\n return undefined;\n let iMin = 0;\n let minDistXY = 2 * maxDistance;\n for (let i = 0; i < closeApproaches.length; ++i) {\n const distXY = closeApproaches[i].detailA.point.distanceXY(closeApproaches[i].detailB.point);\n if (distXY < minDistXY) {\n iMin = i;\n minDistXY = distXY;\n }\n }\n return closeApproaches[iMin];\n }\n}\n"]}
1
+ {"version":3,"file":"CurveCurve.js","sourceRoot":"","sources":["../../../src/curve/CurveCurve.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 { Matrix4d } from \"../geometry4d/Matrix4d\";\r\nimport { CurveLocationDetailPair } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { AnyCurve } from \"./CurveTypes\";\r\nimport { CurveCurveCloseApproachXY } from \"./internalContexts/CurveCurveCloseApproachXY\";\r\nimport { CurveCurveIntersectXY } from \"./internalContexts/CurveCurveIntersectXY\";\r\nimport { CurveCurveIntersectXYZ } from \"./internalContexts/CurveCurveIntersectXYZ\";\r\n\r\n/**\r\n * `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.\r\n * @public\r\n */\r\nexport class CurveCurve {\r\n /**\r\n * Return xy intersections of 2 curves.\r\n * * Curves can be extended if extend flags are set. B-splines are not extended even if the flag is set.\r\n * @param curveA first curve\r\n * @param extendA true to allow curveA to extend\r\n * @param curveB second curve\r\n * @param extendB true to allow curveB to extend\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static intersectionXYPairs(\r\n curveA: AnyCurve,\r\n extendA: boolean,\r\n curveB: AnyCurve,\r\n extendB: boolean,\r\n tolerance: number = Geometry.smallMetricDistance,\r\n ): CurveLocationDetailPair[] {\r\n return CurveCurve.intersectionProjectedXYPairs(undefined, curveA, extendA, curveB, extendB, tolerance);\r\n }\r\n /**\r\n * Return xy intersections of 2 projected curves.\r\n * * Curves can be extended if extend flags are set. B-splines are not extended even if the flag is set.\r\n * @param worldToLocal transform (possibly perspective) defining the local coordinates in which to compute xy intersections\r\n * @param curveA first curve\r\n * @param extendA true to allow curveA to extend\r\n * @param curveB second curve\r\n * @param extendB true to allow curveB to extend\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static intersectionProjectedXYPairs(\r\n worldToLocal: Matrix4d | undefined,\r\n curveA: AnyCurve,\r\n extendA: boolean,\r\n curveB: AnyCurve,\r\n extendB: boolean,\r\n tolerance: number = Geometry.smallMetricDistance,\r\n ): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(worldToLocal, extendA, curveB, extendB, tolerance);\r\n curveA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return full 3d xyz intersections of 2 curves.\r\n * * Implemented for combinations of LineSegment3d, LineString3d, Arc3d.\r\n * * Not Implemented for bspline and bezier curves.\r\n * @param curveA first curve\r\n * @param extendA true to allow curveA to extend\r\n * @param curveB second curve\r\n * @param extendB true to allow curveB to extend\r\n * @returns array of intersections structured as CurveLocationDetailPair[]\r\n */\r\n public static intersectionXYZPairs(\r\n curveA: AnyCurve, extendA: boolean, curveB: AnyCurve, extendB: boolean,\r\n ): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXYZ(extendA, curveB, extendB);\r\n curveA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return xy intersections of input curves.\r\n * @param primitives input curves to intersect\r\n * @param tolerance optional distance tolerance for coincidence\r\n */\r\n public static allIntersectionsAmongPrimitivesXY(\r\n primitives: CurvePrimitive[], tolerance: number = Geometry.smallMetricDistance,\r\n ): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveIntersectXY(undefined, false, undefined, false, tolerance);\r\n for (let i = 0; i < primitives.length; i++) {\r\n const curveA = primitives[i];\r\n for (let j = i + 1; j < primitives.length; j++) {\r\n handler.resetGeometry(primitives[j]);\r\n curveA.dispatchToGeometryHandler(handler);\r\n }\r\n }\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Return at least one XY close approach between 2 curves.\r\n * * Close approach xy-distances are measured without regard to z. This is equivalent to their separation distance\r\n * as seen in the top view, or as measured between their projections onto the xy-plane.\r\n * * If more than one approach is returned, one of them is the closest approach.\r\n * * If an input curve is a `CurveCollection`, then close approaches are computed to each `CurvePrimitive` child.\r\n * This can lead to many returned pairs, especially when both inputs are `CurveCollection`s. If an input curve is\r\n * an `AnyRegion` then close approaches are computed only to the boundary curves, not to the interior.\r\n * @param curveA first curve\r\n * @param curveB second curve\r\n * @param maxDistance maximum xy-distance to consider between the curves.\r\n * Close approaches further than this xy-distance are not returned.\r\n */\r\n public static closeApproachProjectedXYPairs(\r\n curveA: AnyCurve, curveB: AnyCurve, maxDistance: number,\r\n ): CurveLocationDetailPair[] {\r\n const handler = new CurveCurveCloseApproachXY(curveB);\r\n handler.maxDistanceToAccept = maxDistance;\r\n curveA.dispatchToGeometryHandler(handler);\r\n return handler.grabPairedResults();\r\n }\r\n /**\r\n * Convenience method that calls [[closeApproachProjectedXYPairs]] with a large `maxDistance`\r\n * and returns a detail pair representing the closest xy-approach between the curves.\r\n * * There may be many detail pairs that represent \"closest\" xy-approach, including coincident interval pairs,\r\n * isolated intersections, or close approaches within tolerance of each other. This method makes no attempt to\r\n * distinguish among them, and returns a pair whose `detail.point` values are separated by the smallest xy distance\r\n * found among the pairs.\r\n * @param curveA first curve\r\n * @param curveB second curve\r\n * @return detail pair of closest xy-approach, undefined if not found\r\n */\r\n public static closestApproachProjectedXYPair(curveA: AnyCurve, curveB: AnyCurve): CurveLocationDetailPair | undefined {\r\n const range = curveA.range();\r\n range.extendRange(curveB.range());\r\n const maxDistance = range.low.distanceXY(range.high);\r\n const closeApproaches = this.closeApproachProjectedXYPairs(curveA, curveB, maxDistance);\r\n if (!closeApproaches.length)\r\n return undefined;\r\n let iMin = 0;\r\n let minDistXY = 2 * maxDistance;\r\n for (let i = 0; i < closeApproaches.length; ++i) {\r\n const distXY = closeApproaches[i].detailA.point.distanceXY(closeApproaches[i].detailB.point);\r\n if (distXY < minDistXY) {\r\n iMin = i;\r\n minDistXY = distXY;\r\n }\r\n }\r\n return closeApproaches[iMin];\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CurveExtendMode.js","sourceRoot":"","sources":["../../../src/curve/CurveExtendMode.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\";\n\n/**\n * Enumeration of condition for extending a curve beyond start or end point.\n * * Not all CurvePrimitives support these modes.\n * @public\n */\nexport enum CurveExtendMode {\n /** No extension allowed. */\n None = 0,\n /** Extend along continuation of the end tangent. */\n OnTangent = 1,\n /** Extend along continuation of the curve. */\n OnCurve = 2,\n}\n/**\n * Logic for deciding how a curve may be extended for closest point or intersection searches.\n * @public\n */\nexport class CurveExtendOptions {\n /**\n * Given a `VariantCurveExtendParameter`, isolate the particular CurveExtendMode in effect at an end.\n * * Return `CurveExtendMode.None` if `param === false`.\n * * Return `CurveExtendMode.OnCurve` if `param === true`.\n * * Return the param if it is a single CurveExtendMode.\n * * Return dereferenced array at entry `endIndex` if the param is an array of CurveExtendMode.\n */\n public static resolveVariantCurveExtendParameterToCurveExtendMode(\n param: VariantCurveExtendParameter, endIndex: 0 | 1,\n ): CurveExtendMode {\n if (param === false)\n return CurveExtendMode.None;\n if (param === true)\n return CurveExtendMode.OnCurve;\n if (Array.isArray(param))\n return param.length > endIndex ? param[endIndex] : CurveExtendMode.None;\n return param;\n }\n /**\n * Correct fraction to be within [0,1].\n * * If fraction is in [0,1] return it unchanged.\n * * If fraction is less than 0 use `extendParam` to decide whether to return it unchanged, or to return 0.\n * * If fraction is greater than 1 use `extendParam` to decide whether to return it unchanged, or to return 1.\n */\n public static correctFraction(extendParam: VariantCurveExtendParameter, fraction: number): number {\n if (fraction < 0) {\n const mode = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 0);\n if (mode === CurveExtendMode.None)\n fraction = 0.0;\n } else if (fraction > 1.0) {\n const mode = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 1);\n if (mode === CurveExtendMode.None)\n fraction = 1.0;\n }\n return fraction;\n }\n /**\n * Adjust a radians value to an angle sweep, extending beyond or clamping to [0,1] according to `extendParam`:\n * * If `radians` is within the sweep, convert it to a fraction of the sweep.\n * * If `radians` is outside the sweep and `extendParam` does not allow extension at both ends, adjust the fraction:\n * * fraction below 0 if `extendParam` allows extension only at start\n * * fraction above 1 if `extendParam` allows extension only at end\n * * fraction clamped to [0,1] if `extendParam` disallows extension at both ends\n * @returns adjusted fraction of sweep, and a boolean indicating whether it is valid, i.e. whether `radians` lies in\n * the sweep extended per `extendParam`.\n */\n public static resolveRadiansToValidSweepFraction(\n extendParam: VariantCurveExtendParameter, radians: number, sweep: AngleSweep,\n ): { fraction: number, isValid: boolean } {\n let fraction = sweep.radiansToSignedPeriodicFraction(radians);\n let isValid = true;\n if (!sweep.isRadiansInSweep(radians)) {\n const fractionPeriod = sweep.fractionPeriod();\n const mode0 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 0);\n const mode1 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 1);\n if (mode0 !== CurveExtendMode.None) {\n if (mode1 === CurveExtendMode.None) { // only extend to negative\n if (fraction > 1.0)\n fraction -= fractionPeriod;\n }\n } else if (mode1 !== CurveExtendMode.None) { // only extend to positive\n if (fraction < 0.0)\n fraction += fractionPeriod;\n } else { // no extension allowed\n fraction = Geometry.clamp(fraction, 0, 1);\n isValid = false;\n }\n }\n return { fraction, isValid };\n }\n\n /** Call [[resolveRadiansToValidSweepFraction]] and return only the fraction. */\n public static resolveRadiansToSweepFraction(\n extendParam: VariantCurveExtendParameter, radians: number, sweep: AngleSweep,\n ): number {\n return this.resolveRadiansToValidSweepFraction(extendParam, radians, sweep).fraction;\n }\n}\n/**\n * Variant options for extending a curve.\n * * Useful for specifying either a single boolean/`CurveExtendMode` option applicable to both ends of the curve,\n * or an array of options, the first entry of which applies to the curve start; the second, to curve end.\n * @public\n */\nexport type VariantCurveExtendParameter = boolean | CurveExtendMode | CurveExtendMode[];\n"]}
1
+ {"version":3,"file":"CurveExtendMode.js","sourceRoot":"","sources":["../../../src/curve/CurveExtendMode.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\n\r\n/**\r\n * Enumeration of condition for extending a curve beyond start or end point.\r\n * * Not all CurvePrimitives support these modes.\r\n * @public\r\n */\r\nexport enum CurveExtendMode {\r\n /** No extension allowed. */\r\n None = 0,\r\n /** Extend along continuation of the end tangent. */\r\n OnTangent = 1,\r\n /** Extend along continuation of the curve. */\r\n OnCurve = 2,\r\n}\r\n/**\r\n * Logic for deciding how a curve may be extended for closest point or intersection searches.\r\n * @public\r\n */\r\nexport class CurveExtendOptions {\r\n /**\r\n * Given a `VariantCurveExtendParameter`, isolate the particular CurveExtendMode in effect at an end.\r\n * * Return `CurveExtendMode.None` if `param === false`.\r\n * * Return `CurveExtendMode.OnCurve` if `param === true`.\r\n * * Return the param if it is a single CurveExtendMode.\r\n * * Return dereferenced array at entry `endIndex` if the param is an array of CurveExtendMode.\r\n */\r\n public static resolveVariantCurveExtendParameterToCurveExtendMode(\r\n param: VariantCurveExtendParameter, endIndex: 0 | 1,\r\n ): CurveExtendMode {\r\n if (param === false)\r\n return CurveExtendMode.None;\r\n if (param === true)\r\n return CurveExtendMode.OnCurve;\r\n if (Array.isArray(param))\r\n return param.length > endIndex ? param[endIndex] : CurveExtendMode.None;\r\n return param;\r\n }\r\n /**\r\n * Correct fraction to be within [0,1].\r\n * * If fraction is in [0,1] return it unchanged.\r\n * * If fraction is less than 0 use `extendParam` to decide whether to return it unchanged, or to return 0.\r\n * * If fraction is greater than 1 use `extendParam` to decide whether to return it unchanged, or to return 1.\r\n */\r\n public static correctFraction(extendParam: VariantCurveExtendParameter, fraction: number): number {\r\n if (fraction < 0) {\r\n const mode = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 0);\r\n if (mode === CurveExtendMode.None)\r\n fraction = 0.0;\r\n } else if (fraction > 1.0) {\r\n const mode = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 1);\r\n if (mode === CurveExtendMode.None)\r\n fraction = 1.0;\r\n }\r\n return fraction;\r\n }\r\n /**\r\n * Adjust a radians value to an angle sweep, extending beyond or clamping to [0,1] according to `extendParam`:\r\n * * If `radians` is within the sweep, convert it to a fraction of the sweep.\r\n * * If `radians` is outside the sweep and `extendParam` does not allow extension at both ends, adjust the fraction:\r\n * * fraction below 0 if `extendParam` allows extension only at start\r\n * * fraction above 1 if `extendParam` allows extension only at end\r\n * * fraction clamped to [0,1] if `extendParam` disallows extension at both ends\r\n * @returns adjusted fraction of sweep, and a boolean indicating whether it is valid, i.e. whether `radians` lies in\r\n * the sweep extended per `extendParam`.\r\n */\r\n public static resolveRadiansToValidSweepFraction(\r\n extendParam: VariantCurveExtendParameter, radians: number, sweep: AngleSweep,\r\n ): { fraction: number, isValid: boolean } {\r\n let fraction = sweep.radiansToSignedPeriodicFraction(radians);\r\n let isValid = true;\r\n if (!sweep.isRadiansInSweep(radians)) {\r\n const fractionPeriod = sweep.fractionPeriod();\r\n const mode0 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 0);\r\n const mode1 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 1);\r\n if (mode0 !== CurveExtendMode.None) {\r\n if (mode1 === CurveExtendMode.None) { // only extend to negative\r\n if (fraction > 1.0)\r\n fraction -= fractionPeriod;\r\n }\r\n } else if (mode1 !== CurveExtendMode.None) { // only extend to positive\r\n if (fraction < 0.0)\r\n fraction += fractionPeriod;\r\n } else { // no extension allowed\r\n fraction = Geometry.clamp(fraction, 0, 1);\r\n isValid = false;\r\n }\r\n }\r\n return { fraction, isValid };\r\n }\r\n\r\n /** Call [[resolveRadiansToValidSweepFraction]] and return only the fraction. */\r\n public static resolveRadiansToSweepFraction(\r\n extendParam: VariantCurveExtendParameter, radians: number, sweep: AngleSweep,\r\n ): number {\r\n return this.resolveRadiansToValidSweepFraction(extendParam, radians, sweep).fraction;\r\n }\r\n}\r\n/**\r\n * Variant options for extending a curve.\r\n * * Useful for specifying either a single boolean/`CurveExtendMode` option applicable to both ends of the curve,\r\n * or an array of options, the first entry of which applies to the curve start; the second, to curve end.\r\n * @public\r\n */\r\nexport type VariantCurveExtendParameter = boolean | CurveExtendMode | CurveExtendMode[];\r\n"]}
@@ -1,6 +1,3 @@
1
- /** @packageDocumentation
2
- * @module Curve
3
- */
4
1
  import { PlaneAltitudeEvaluator } from "../Geometry";
5
2
  import { Angle } from "../geometry3d/Angle";
6
3
  import { AngleSweep } from "../geometry3d/AngleSweep";
@@ -70,6 +67,27 @@ export interface MiteredSweepOptions {
70
67
  /** The last section's normal is aligned to this vector, typically the end tangent of the smooth curve stroked for the centerline. */
71
68
  endTangent?: Vector3d;
72
69
  }
70
+ /**
71
+ * Interface bundling options for [[CurveFactory.createFilletsInLineString]].
72
+ * @public
73
+ */
74
+ export interface CreateFilletsInLineStringOptions {
75
+ /**
76
+ * Allow creation of retrograde edges to join large-radius fillets.
77
+ * * If `true` (default), cusps are present in the output `Path` when the radius is too large.
78
+ * * If `false`, a fillet with overly large radius is disallowed, resulting in a simple corner.
79
+ */
80
+ allowCusp?: boolean;
81
+ /**
82
+ * Whether to fillet the closure.
83
+ * * If `true`, the input line string is treated as a polygon (closure point optional), and the output `Path` is
84
+ * closed and has a fillet at its start point. If both first and last input points are identical, the last point's
85
+ * entry in the radius array is ignored.
86
+ * * If `false` (default), the first and last points receive no fillet and their respective entries in the radius
87
+ * array are ignored.
88
+ */
89
+ filletClosure?: boolean;
90
+ }
73
91
  /**
74
92
  * The `CurveFactory` class contains methods for specialized curve constructions.
75
93
  * @public
@@ -87,13 +105,12 @@ export declare class CurveFactory {
87
105
  * Construct a sequence of alternating lines and arcs with the arcs creating tangent transition between consecutive edges.
88
106
  * * If the radius parameter is a number, that radius is used throughout.
89
107
  * * If the radius parameter is an array of numbers, `radius[i]` is applied at `point[i]`.
90
- * * Note that since no fillet is constructed at the initial or final point, those entries in `radius[]` are never referenced.
91
- * * A zero radius for any point indicates to leave the as a simple corner.
92
- * @param points point source
108
+ * * A zero radius for any point indicates to leave the as a simple corner.
109
+ * @param points point source.
93
110
  * @param radius fillet radius or array of radii indexed to correspond to the points.
94
- * @param allowBackupAlongEdge true to allow edges to be created going "backwards" along edges if needed to create the blend.
111
+ * @param allowCuspOrOptions flag to allow cusps in output (default `true`), or a list of extended options.
95
112
  */
96
- static createFilletsInLineString(points: LineString3d | IndexedXYZCollection | Point3d[], radius: number | number[], allowBackupAlongEdge?: boolean): Path | undefined;
113
+ static createFilletsInLineString(points: LineString3d | IndexedXYZCollection | Point3d[], radius: number | number[], allowCuspOrOptions?: boolean | CreateFilletsInLineStringOptions): Path | undefined;
97
114
  /**
98
115
  * Create a `Loop` with given xy corners and fixed z.
99
116
  * * The corners always proceed counter clockwise from lower left.
@@ -1 +1 @@
1
- {"version":3,"file":"CurveFactory.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CurveFactory.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveFactory.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  /** @packageDocumentation
6
6
  * @module Curve
7
7
  */
8
+ import { assert } from "@itwin/core-bentley";
8
9
  import { AxisIndex, AxisOrder, Geometry } from "../Geometry";
9
10
  import { Angle } from "../geometry3d/Angle";
10
11
  import { AngleSweep } from "../geometry3d/AngleSweep";
@@ -73,77 +74,72 @@ export class CurveFactory {
73
74
  * Construct a sequence of alternating lines and arcs with the arcs creating tangent transition between consecutive edges.
74
75
  * * If the radius parameter is a number, that radius is used throughout.
75
76
  * * If the radius parameter is an array of numbers, `radius[i]` is applied at `point[i]`.
76
- * * Note that since no fillet is constructed at the initial or final point, those entries in `radius[]` are never referenced.
77
- * * A zero radius for any point indicates to leave the as a simple corner.
78
- * @param points point source
77
+ * * A zero radius for any point indicates to leave the as a simple corner.
78
+ * @param points point source.
79
79
  * @param radius fillet radius or array of radii indexed to correspond to the points.
80
- * @param allowBackupAlongEdge true to allow edges to be created going "backwards" along edges if needed to create the blend.
80
+ * @param allowCuspOrOptions flag to allow cusps in output (default `true`), or a list of extended options.
81
81
  */
82
- static createFilletsInLineString(points, radius, allowBackupAlongEdge = true) {
82
+ static createFilletsInLineString(points, radius, allowCuspOrOptions = true) {
83
83
  if (Array.isArray(points))
84
- return this.createFilletsInLineString(new Point3dArrayCarrier(points), radius, allowBackupAlongEdge);
84
+ return this.createFilletsInLineString(new Point3dArrayCarrier(points), radius, allowCuspOrOptions);
85
85
  if (points instanceof LineString3d)
86
- return this.createFilletsInLineString(points.packedPoints, radius, allowBackupAlongEdge);
87
- const n = points.length;
86
+ return this.createFilletsInLineString(points.packedPoints, radius, allowCuspOrOptions);
87
+ let allowCusp = true;
88
+ let filletClosure = false;
89
+ if (typeof allowCuspOrOptions === "boolean") {
90
+ allowCusp = allowCuspOrOptions;
91
+ }
92
+ else {
93
+ allowCusp = allowCuspOrOptions.allowCusp ?? true;
94
+ filletClosure = allowCuspOrOptions.filletClosure ?? false;
95
+ }
96
+ let n = points.length;
97
+ if (filletClosure && points.almostEqualIndexIndex(0, n - 1))
98
+ n--; // ignore closure point
88
99
  if (n <= 1)
89
100
  return undefined;
90
- const pointA = points.getPoint3dAtCheckedPointIndex(0);
91
- const pointB = points.getPoint3dAtCheckedPointIndex(1);
92
- // remark: n=2 and n=3 cases should fall out from loop logic
101
+ const pointA = Point3d.create();
102
+ const pointB = Point3d.create();
103
+ const pointC = Point3d.create();
93
104
  const blendArray = [];
94
- // build one-sided blends at each end . .
95
- blendArray.push({ fraction10: 0.0, fraction12: 0.0, point: pointA.clone() });
96
- for (let i = 1; i + 1 < n; i++) {
97
- const pointC = points.getPoint3dAtCheckedPointIndex(i + 1);
98
- let thisRadius = 0;
99
- if (Array.isArray(radius)) {
100
- if (i < radius.length)
101
- thisRadius = radius[i];
105
+ // remark: n=2 and n=3 cases should fall out from loop logic
106
+ for (let i = 0; i < n; i++) {
107
+ let thisRadius = Math.abs(Array.isArray(radius) ? (i < radius.length ? radius[i] : 0) : radius);
108
+ if (!Number.isFinite(thisRadius))
109
+ thisRadius = 0;
110
+ if (thisRadius === 0 || (!filletClosure && (i === 0 || i === n - 1))) {
111
+ blendArray.push({ fraction10: 0, fraction12: 0, point: points.getPoint3dAtUncheckedPointIndex(i) });
102
112
  }
103
- else if (Number.isFinite(radius))
104
- thisRadius = radius;
105
- if (thisRadius !== 0.0)
113
+ else {
114
+ points.getPoint3dAtUncheckedPointIndex(Geometry.modulo(i - 1, n), pointA);
115
+ points.getPoint3dAtUncheckedPointIndex(i, pointB);
116
+ points.getPoint3dAtUncheckedPointIndex(Geometry.modulo(i + 1, n), pointC);
106
117
  blendArray.push(Arc3d.createFilletArc(pointA, pointB, pointC, thisRadius));
107
- else
108
- blendArray.push({ fraction10: 0.0, fraction12: 0.0, point: pointB.clone() });
109
- pointA.setFromPoint3d(pointB);
110
- pointB.setFromPoint3d(pointC);
118
+ }
111
119
  }
112
- blendArray.push({ fraction10: 0.0, fraction12: 0.0, point: pointB.clone() });
113
- if (!allowBackupAlongEdge) {
114
- // suppress arcs that have overlap with both neighbors or flood either neighbor ..
115
- for (let i = 1; i + 1 < n; i++) {
116
- const b = blendArray[i];
117
- if (b.fraction10 > 1.0
118
- || b.fraction12 > 1.0
119
- || 1.0 - b.fraction10 < blendArray[i - 1].fraction12
120
- || b.fraction12 > 1.0 - blendArray[i + 1].fraction10) {
121
- b.fraction10 = 0.0;
122
- b.fraction12 = 0.0;
123
- blendArray[i].arc = undefined;
120
+ assert(blendArray.length === n);
121
+ if (!allowCusp) {
122
+ // suppress arcs that overlap a neighboring arc, or that consume the entire segment
123
+ for (let i = 0; i < n; i++) {
124
+ const bB = blendArray[i];
125
+ if (!bB.arc)
126
+ continue;
127
+ const bA = blendArray[Geometry.modulo(i - 1, n)];
128
+ const bC = blendArray[Geometry.modulo(i + 1, n)];
129
+ if (bB.fraction10 > 1 || bB.fraction12 > 1 || 1 - bB.fraction10 < bA.fraction12 || bB.fraction12 > 1 - bC.fraction10) {
130
+ bB.fraction10 = bB.fraction12 = 0;
131
+ bB.arc = undefined;
124
132
  }
125
133
  }
126
- /* The "1-b" logic above prevents this loop from ever doing anything.
127
- // on edge with conflict, suppress the arc with larger fraction
128
- for (let i = 1; i < n; i++) {
129
- const b0 = blendArray[i - 1];
130
- const b1 = blendArray[i];
131
- if (b0.fraction12 > 1 - b1.fraction10) {
132
- const b = b0.fraction12 > b1.fraction12 ? b1 : b0;
133
- b.fraction10 = 0.0;
134
- b.fraction12 = 0.0;
135
- blendArray[i].arc = undefined;
136
- }
137
- } */
138
134
  }
139
135
  const path = Path.create();
140
- this.addPartialSegment(path, allowBackupAlongEdge, blendArray[0].point, blendArray[1].point, blendArray[0].fraction12, 1.0 - blendArray[1].fraction10);
141
- // add each path and successor edge ...
142
- for (let i = 1; i + 1 < points.length; i++) {
136
+ for (let i = 0; i < n; i++) {
143
137
  const b0 = blendArray[i];
144
- const b1 = blendArray[i + 1];
145
138
  path.tryAddChild(b0.arc);
146
- this.addPartialSegment(path, allowBackupAlongEdge, b0.point, b1.point, b0.fraction12, 1.0 - b1.fraction10);
139
+ if (i + 1 < n || filletClosure) {
140
+ const b1 = blendArray[Geometry.modulo(i + 1, n)];
141
+ this.addPartialSegment(path, allowCusp, b0.point, b1.point, b0.fraction12, 1 - b1.fraction10);
142
+ }
147
143
  }
148
144
  return path;
149
145
  }