@itwin/core-geometry 4.1.0-dev.54 → 4.1.0-dev.56

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 (419) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.js.map +1 -1
  3. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  4. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  5. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  7. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  9. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  10. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  11. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  12. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  13. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  15. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  16. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  17. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  18. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  19. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  20. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  21. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  22. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  23. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  24. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  25. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  26. package/lib/cjs/core-geometry.js.map +1 -1
  27. package/lib/cjs/curve/Arc3d.js.map +1 -1
  28. package/lib/cjs/curve/ChainCollectorContext.js.map +1 -1
  29. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  30. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  31. package/lib/cjs/curve/CurveChain.js.map +1 -1
  32. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  33. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  34. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  35. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
  36. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  37. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
  38. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  39. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  40. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  41. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  42. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  43. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  44. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  45. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  46. package/lib/cjs/curve/LineString3d.js.map +1 -1
  47. package/lib/cjs/curve/Loop.js.map +1 -1
  48. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  49. package/lib/cjs/curve/Path.js.map +1 -1
  50. package/lib/cjs/curve/PointString3d.js.map +1 -1
  51. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  52. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  53. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  54. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  55. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  56. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  57. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  58. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  59. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  60. package/lib/cjs/curve/RegionOps.js.map +1 -1
  61. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  62. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  63. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  64. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  65. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  66. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  78. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  79. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  80. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  81. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  82. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  83. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  84. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  85. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  86. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  87. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  88. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  89. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  90. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  91. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  92. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  93. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  94. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  95. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  96. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  97. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  98. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  99. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  100. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  101. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  102. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  103. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  104. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  105. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  106. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  107. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  108. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  109. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  110. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  111. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  112. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  113. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  114. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  115. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  116. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  117. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  118. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  119. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  120. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  121. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  122. package/lib/cjs/geometry3d/Range.js.map +1 -1
  123. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  124. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  125. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  126. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  127. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  128. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  129. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  130. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  131. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  132. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  133. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  134. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  135. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  136. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  137. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  138. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  139. package/lib/cjs/numerics/Complex.js.map +1 -1
  140. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  141. package/lib/cjs/numerics/Newton.js.map +1 -1
  142. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  143. package/lib/cjs/numerics/PolarData.js.map +1 -1
  144. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  145. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  146. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  147. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  148. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  149. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  150. package/lib/cjs/polyface/AuxData.js.map +1 -1
  151. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  152. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  153. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  154. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  155. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  156. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  157. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  158. package/lib/cjs/polyface/Polyface.js.map +1 -1
  159. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  160. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  161. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  162. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  163. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  164. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  165. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  166. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  167. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  168. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  169. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  170. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  171. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  172. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  173. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  174. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  175. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  176. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  177. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  178. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  179. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  180. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  181. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  182. package/lib/cjs/solid/Box.js.map +1 -1
  183. package/lib/cjs/solid/Cone.js.map +1 -1
  184. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  185. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  186. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  187. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  188. package/lib/cjs/solid/Sphere.js.map +1 -1
  189. package/lib/cjs/solid/SweepContour.js.map +1 -1
  190. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  191. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  192. package/lib/cjs/topology/Graph.js.map +1 -1
  193. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  194. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  195. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  196. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  197. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  198. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  199. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  200. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  201. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  202. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  203. package/lib/cjs/topology/MaskManager.js.map +1 -1
  204. package/lib/cjs/topology/Merging.js.map +1 -1
  205. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  206. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  207. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  208. package/lib/cjs/topology/Triangulation.js.map +1 -1
  209. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  210. package/lib/esm/Constant.js.map +1 -1
  211. package/lib/esm/Geometry.js.map +1 -1
  212. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  213. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  214. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  215. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  216. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  217. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  218. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  219. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  220. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  221. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  222. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  223. package/lib/esm/bspline/KnotVector.js.map +1 -1
  224. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  225. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  226. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  227. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  228. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  229. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  230. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  231. package/lib/esm/clipping/ClipVector.js.map +1 -1
  232. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  233. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  234. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  235. package/lib/esm/core-geometry.js.map +1 -1
  236. package/lib/esm/curve/Arc3d.js.map +1 -1
  237. package/lib/esm/curve/ChainCollectorContext.js.map +1 -1
  238. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  239. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  240. package/lib/esm/curve/CurveChain.js.map +1 -1
  241. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  242. package/lib/esm/curve/CurveCollection.js.map +1 -1
  243. package/lib/esm/curve/CurveCurve.js.map +1 -1
  244. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
  245. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  246. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
  247. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  248. package/lib/esm/curve/CurveFactory.js.map +1 -1
  249. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  250. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  251. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  252. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  253. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  254. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  255. package/lib/esm/curve/LineString3d.js.map +1 -1
  256. package/lib/esm/curve/Loop.js.map +1 -1
  257. package/lib/esm/curve/ParityRegion.js.map +1 -1
  258. package/lib/esm/curve/Path.js.map +1 -1
  259. package/lib/esm/curve/PointString3d.js.map +1 -1
  260. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  261. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  262. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  263. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  264. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  265. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  266. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  267. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  268. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  269. package/lib/esm/curve/RegionOps.js.map +1 -1
  270. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  271. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  272. package/lib/esm/curve/UnionRegion.js.map +1 -1
  273. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  274. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  275. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  276. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  277. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  278. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  279. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  280. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  281. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  282. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  283. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  284. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  285. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  286. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  287. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  288. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  289. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  290. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  291. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  292. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  293. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  294. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  295. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  296. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  297. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  298. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  299. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  300. package/lib/esm/geometry3d/Angle.js.map +1 -1
  301. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  302. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  303. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  304. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  305. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  306. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  307. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  308. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  309. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  310. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  311. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  312. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  313. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  314. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  315. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  316. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  317. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  318. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  319. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  320. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  321. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  322. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  323. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  324. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  325. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  326. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  327. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  328. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  329. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  330. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  331. package/lib/esm/geometry3d/Range.js.map +1 -1
  332. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  333. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  334. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  335. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  336. package/lib/esm/geometry3d/Transform.js.map +1 -1
  337. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  338. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  339. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  340. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  341. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  342. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  343. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  344. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  345. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  346. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  347. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  348. package/lib/esm/numerics/Complex.js.map +1 -1
  349. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  350. package/lib/esm/numerics/Newton.js.map +1 -1
  351. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  352. package/lib/esm/numerics/PolarData.js.map +1 -1
  353. package/lib/esm/numerics/Polynomials.js.map +1 -1
  354. package/lib/esm/numerics/Quadrature.js.map +1 -1
  355. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  356. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  357. package/lib/esm/numerics/UnionFind.js.map +1 -1
  358. package/lib/esm/numerics/UsageSums.js.map +1 -1
  359. package/lib/esm/polyface/AuxData.js.map +1 -1
  360. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  361. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  362. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  363. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  364. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  365. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  366. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  367. package/lib/esm/polyface/Polyface.js.map +1 -1
  368. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  369. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  370. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  371. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  372. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  373. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  374. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  375. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  376. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  377. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  378. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  379. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  380. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  381. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  382. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  383. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  384. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  385. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  386. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  387. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  388. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  389. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  390. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  391. package/lib/esm/solid/Box.js.map +1 -1
  392. package/lib/esm/solid/Cone.js.map +1 -1
  393. package/lib/esm/solid/LinearSweep.js.map +1 -1
  394. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  395. package/lib/esm/solid/RuledSweep.js.map +1 -1
  396. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  397. package/lib/esm/solid/Sphere.js.map +1 -1
  398. package/lib/esm/solid/SweepContour.js.map +1 -1
  399. package/lib/esm/solid/TorusPipe.js.map +1 -1
  400. package/lib/esm/topology/ChainMerge.js.map +1 -1
  401. package/lib/esm/topology/Graph.js.map +1 -1
  402. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  403. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  404. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  405. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  406. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  407. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  408. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  409. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  410. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  411. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  412. package/lib/esm/topology/MaskManager.js.map +1 -1
  413. package/lib/esm/topology/Merging.js.map +1 -1
  414. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  415. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  416. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  417. package/lib/esm/topology/Triangulation.js.map +1 -1
  418. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  419. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CurveLengthContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveLengthContext.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 { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { GaussMapper } from \"../../numerics/Quadrature\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\n\r\n/**\r\n * Context for computing the length of a CurvePrimitive.\r\n * @internal\r\n */\r\nexport class CurveLengthContext implements IStrokeHandler {\r\n private _curve: CurvePrimitive | undefined;\r\n private _summedLength: number;\r\n private _ray: Ray3d;\r\n private _fraction0: number;\r\n private _fraction1: number;\r\n private _gaussMapper: GaussMapper;\r\n\r\n private tangentMagnitude(fraction: number): number {\r\n this._ray = (this._curve as CurvePrimitive).fractionToPointAndDerivative(fraction, this._ray);\r\n return this._ray.direction.magnitude();\r\n }\r\n\r\n /** Return the fraction0 installed at construction time. */\r\n public get getFraction0(): number {\r\n return this._fraction0;\r\n }\r\n\r\n /** Return the fraction1 installed at construction time. */\r\n public get getFraction1(): number {\r\n return this._fraction1;\r\n }\r\n\r\n public getSum() {\r\n return this._summedLength;\r\n }\r\n\r\n public constructor(fraction0: number = 0.0, fraction1: number = 1.0, numGaussPoints: number = 5) {\r\n this.startCurvePrimitive(undefined);\r\n this._summedLength = 0.0;\r\n this._ray = Ray3d.createZero();\r\n if (fraction0 < fraction1) {\r\n this._fraction0 = fraction0;\r\n this._fraction1 = fraction1;\r\n } else {\r\n this._fraction0 = fraction1;\r\n this._fraction1 = fraction0;\r\n }\r\n this._gaussMapper = new GaussMapper(numGaussPoints);\r\n }\r\n\r\n public startCurvePrimitive(curve: CurvePrimitive | undefined) {\r\n this._curve = curve;\r\n }\r\n\r\n public startParentCurvePrimitive(_curve: CurvePrimitive) {\r\n }\r\n\r\n public endParentCurvePrimitive(_curve: CurvePrimitive) {\r\n }\r\n\r\n public endCurvePrimitive() {\r\n }\r\n\r\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\r\n const range = Range1d.createXX(fraction0, fraction1);\r\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\r\n if (!range.isNull) {\r\n this.startCurvePrimitive(cp);\r\n if (numStrokes < 1)\r\n numStrokes = 1;\r\n const df = 1.0 / numStrokes;\r\n for (let i = 1; i <= numStrokes; i++) {\r\n const fractionA = range.fractionToPoint((i - 1) * df);\r\n const fractionB = i === numStrokes ? range.high : range.fractionToPoint(i * df);\r\n const numGauss = this._gaussMapper.mapXAndW(fractionA, fractionB);\r\n for (let k = 0; k < numGauss; k++) {\r\n this._summedLength += this._gaussMapper.gaussW[k] * this.tangentMagnitude(this._gaussMapper.gaussX[k]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public announceSegmentInterval(_cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number): void {\r\n const segmentLength = point0.distance(point1);\r\n if (this._fraction0 <= fraction0 && fraction1 <= this._fraction1)\r\n this._summedLength += segmentLength;\r\n else {\r\n const range = Range1d.createXX(fraction0, fraction1);\r\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\r\n if (!range.isNull)\r\n this._summedLength += segmentLength * range.length() / (fraction1 - fraction0);\r\n }\r\n }\r\n\r\n public announcePointTangent(_xyz: Point3d, _fraction: number, _tangent: Vector3d): void {\r\n // uh oh -- need to retain point for next interval\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CurveLengthContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveLengthContext.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 { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range1d } from \"../../geometry3d/Range\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { GaussMapper } from \"../../numerics/Quadrature\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/**\n * Context for computing the length of a CurvePrimitive.\n * @internal\n */\nexport class CurveLengthContext implements IStrokeHandler {\n private _curve: CurvePrimitive | undefined;\n private _summedLength: number;\n private _ray: Ray3d;\n private _fraction0: number;\n private _fraction1: number;\n private _gaussMapper: GaussMapper;\n\n private tangentMagnitude(fraction: number): number {\n this._ray = (this._curve as CurvePrimitive).fractionToPointAndDerivative(fraction, this._ray);\n return this._ray.direction.magnitude();\n }\n\n /** Return the fraction0 installed at construction time. */\n public get getFraction0(): number {\n return this._fraction0;\n }\n\n /** Return the fraction1 installed at construction time. */\n public get getFraction1(): number {\n return this._fraction1;\n }\n\n public getSum() {\n return this._summedLength;\n }\n\n public constructor(fraction0: number = 0.0, fraction1: number = 1.0, numGaussPoints: number = 5) {\n this.startCurvePrimitive(undefined);\n this._summedLength = 0.0;\n this._ray = Ray3d.createZero();\n if (fraction0 < fraction1) {\n this._fraction0 = fraction0;\n this._fraction1 = fraction1;\n } else {\n this._fraction0 = fraction1;\n this._fraction1 = fraction0;\n }\n this._gaussMapper = new GaussMapper(numGaussPoints);\n }\n\n public startCurvePrimitive(curve: CurvePrimitive | undefined) {\n this._curve = curve;\n }\n\n public startParentCurvePrimitive(_curve: CurvePrimitive) {\n }\n\n public endParentCurvePrimitive(_curve: CurvePrimitive) {\n }\n\n public endCurvePrimitive() {\n }\n\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\n const range = Range1d.createXX(fraction0, fraction1);\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\n if (!range.isNull) {\n this.startCurvePrimitive(cp);\n if (numStrokes < 1)\n numStrokes = 1;\n const df = 1.0 / numStrokes;\n for (let i = 1; i <= numStrokes; i++) {\n const fractionA = range.fractionToPoint((i - 1) * df);\n const fractionB = i === numStrokes ? range.high : range.fractionToPoint(i * df);\n const numGauss = this._gaussMapper.mapXAndW(fractionA, fractionB);\n for (let k = 0; k < numGauss; k++) {\n this._summedLength += this._gaussMapper.gaussW[k] * this.tangentMagnitude(this._gaussMapper.gaussX[k]);\n }\n }\n }\n }\n\n public announceSegmentInterval(_cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number): void {\n const segmentLength = point0.distance(point1);\n if (this._fraction0 <= fraction0 && fraction1 <= this._fraction1)\n this._summedLength += segmentLength;\n else {\n const range = Range1d.createXX(fraction0, fraction1);\n range.intersectRangeXXInPlace(this._fraction0, this._fraction1);\n if (!range.isNull)\n this._summedLength += segmentLength * range.length() / (fraction1 - fraction0);\n }\n }\n\n public announcePointTangent(_xyz: Point3d, _fraction: number, _tangent: Vector3d): void {\n // uh oh -- need to retain point for next interval\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CurveOffsetXYHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveOffsetXYHandler.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 { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\r\nimport { InterpolationCurve3dOptions } from \"../../bspline/InterpolationCurve3d\";\r\nimport { BSplineCurveOps } from \"../../bspline/BSplineCurveOps\";\r\n\r\n/**\r\n * Context for constructing the xy-offset of a CurvePrimitive by interpolating the xy-offsets of computed strokes.\r\n * @internal\r\n */\r\n export class CurveOffsetXYHandler implements IStrokeHandler {\r\n private _offsetDistance: number;\r\n private _fitOptions: InterpolationCurve3dOptions;\r\n\r\n // temporary workspace\r\n private _p0 = Point3d.createZero();\r\n private _p1 = Point3d.createZero();\r\n private _v0 = Vector3d.createZero();\r\n private _v1 = Vector3d.createZero();\r\n private _r0 = Ray3d.createZero();\r\n\r\n public constructor(cp: CurvePrimitive, offsetDistance: number) {\r\n this._offsetDistance = offsetDistance;\r\n this._fitOptions = new InterpolationCurve3dOptions();\r\n const startTangent = cp.fractionToPointAndUnitTangent(0.0, this._r0).direction.clone();\r\n const endTangent = cp.fractionToPointAndUnitTangent(1.0, this._r0).direction.negate(); // points into curve\r\n this._fitOptions.startTangent = startTangent;\r\n this._fitOptions.endTangent = endTangent;\r\n if (this._fitOptions.closed = (cp.startPoint(this._p0).isAlmostEqual(cp.endPoint(this._p1)) && startTangent.isParallelTo(endTangent, true)))\r\n this._fitOptions.isChordLenKnots = 1;\r\n }\r\n private pushOffsetPoint(xyz: Point3d, tangent: Vector3d) {\r\n if (!Geometry.isSmallMetricDistance(tangent.x) || !Geometry.isSmallMetricDistance(tangent.y))\r\n this._fitOptions.fitPoints.push(xyz.plusScaled(tangent.unitPerpendicularXY(this._v0), this._offsetDistance));\r\n }\r\n public needPrimaryGeometryForStrokes() { return true; }\r\n public startParentCurvePrimitive(_cp: CurvePrimitive) { }\r\n public startCurvePrimitive(_cp: CurvePrimitive) { }\r\n public endCurvePrimitive(_cp: CurvePrimitive) { }\r\n public endParentCurvePrimitive(_cp: CurvePrimitive) { }\r\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\r\n for (let i = 0; i <= numStrokes; ++i) { // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\r\n const fraction = Geometry.interpolate(fraction0, i / numStrokes, fraction1);\r\n const ray = cp.fractionToPointAndDerivative(fraction, this._r0);\r\n this.pushOffsetPoint(ray.origin, ray.direction);\r\n }\r\n }\r\n public announceSegmentInterval(_cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, _fraction0: number, _fraction1: number): void {\r\n if (numStrokes > 0) {\r\n const tangent = Vector3d.createStartEnd(point0, point1, this._v1);\r\n for (let i = 0; i <= numStrokes; ++i) { // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\r\n this.pushOffsetPoint(point0.interpolate(i / numStrokes, point1, this._p0), tangent);\r\n }\r\n }\r\n }\r\n public announcePointTangent(xyz: Point3d, _fraction: number, tangent: Vector3d): void {\r\n this.pushOffsetPoint(xyz, tangent);\r\n }\r\n /**\r\n * Construct a C2 cubic interpolating B-spline curve through the collected xy-offset points.\r\n * @returns the xy-offset curve\r\n */\r\n public claimResult(): BSplineCurve3d | undefined {\r\n return BSplineCurveOps.createThroughPointsC2Cubic(this._fitOptions);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CurveOffsetXYHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CurveOffsetXYHandler.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 { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\nimport { InterpolationCurve3dOptions } from \"../../bspline/InterpolationCurve3d\";\nimport { BSplineCurveOps } from \"../../bspline/BSplineCurveOps\";\n\n/**\n * Context for constructing the xy-offset of a CurvePrimitive by interpolating the xy-offsets of computed strokes.\n * @internal\n */\n export class CurveOffsetXYHandler implements IStrokeHandler {\n private _offsetDistance: number;\n private _fitOptions: InterpolationCurve3dOptions;\n\n // temporary workspace\n private _p0 = Point3d.createZero();\n private _p1 = Point3d.createZero();\n private _v0 = Vector3d.createZero();\n private _v1 = Vector3d.createZero();\n private _r0 = Ray3d.createZero();\n\n public constructor(cp: CurvePrimitive, offsetDistance: number) {\n this._offsetDistance = offsetDistance;\n this._fitOptions = new InterpolationCurve3dOptions();\n const startTangent = cp.fractionToPointAndUnitTangent(0.0, this._r0).direction.clone();\n const endTangent = cp.fractionToPointAndUnitTangent(1.0, this._r0).direction.negate(); // points into curve\n this._fitOptions.startTangent = startTangent;\n this._fitOptions.endTangent = endTangent;\n if (this._fitOptions.closed = (cp.startPoint(this._p0).isAlmostEqual(cp.endPoint(this._p1)) && startTangent.isParallelTo(endTangent, true)))\n this._fitOptions.isChordLenKnots = 1;\n }\n private pushOffsetPoint(xyz: Point3d, tangent: Vector3d) {\n if (!Geometry.isSmallMetricDistance(tangent.x) || !Geometry.isSmallMetricDistance(tangent.y))\n this._fitOptions.fitPoints.push(xyz.plusScaled(tangent.unitPerpendicularXY(this._v0), this._offsetDistance));\n }\n public needPrimaryGeometryForStrokes() { return true; }\n public startParentCurvePrimitive(_cp: CurvePrimitive) { }\n public startCurvePrimitive(_cp: CurvePrimitive) { }\n public endCurvePrimitive(_cp: CurvePrimitive) { }\n public endParentCurvePrimitive(_cp: CurvePrimitive) { }\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\n for (let i = 0; i <= numStrokes; ++i) { // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\n const fraction = Geometry.interpolate(fraction0, i / numStrokes, fraction1);\n const ray = cp.fractionToPointAndDerivative(fraction, this._r0);\n this.pushOffsetPoint(ray.origin, ray.direction);\n }\n }\n public announceSegmentInterval(_cp: CurvePrimitive, point0: Point3d, point1: Point3d, numStrokes: number, _fraction0: number, _fraction1: number): void {\n if (numStrokes > 0) {\n const tangent = Vector3d.createStartEnd(point0, point1, this._v1);\n for (let i = 0; i <= numStrokes; ++i) { // announce both start and end; adjacent duplicates will be filtered by c2 cubic fit logic\n this.pushOffsetPoint(point0.interpolate(i / numStrokes, point1, this._p0), tangent);\n }\n }\n }\n public announcePointTangent(xyz: Point3d, _fraction: number, tangent: Vector3d): void {\n this.pushOffsetPoint(xyz, tangent);\n }\n /**\n * Construct a C2 cubic interpolating B-spline curve through the collected xy-offset points.\n * @returns the xy-offset curve\n */\n public claimResult(): BSplineCurve3d | undefined {\n return BSplineCurveOps.createThroughPointsC2Cubic(this._fitOptions);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GapSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,wDAAiE;AAEjE,sDAAqE;AAErE,qJAAqJ;AACrJ;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,iDAAgC;IAEpE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,MAAuB;QAC1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACe,sBAAsB,CAAC,KAAqB,EAAE,cAAsB;QAClF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,YAAY,4BAAU,EAAE;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACjE,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;oBAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;iBACxF;aACF;SACF;IACH,CAAC;CACF;AAvBD,4CAuBC","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 { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessorWithStack } from \"../CurveProcessor\";\r\n\r\n// import { SumLengthsContext, GapSearchContext, CountLinearPartsSearchContext, CloneCurvesContext, TransformInPlaceContext } from \"./CurveSearches\";\r\n/**\r\n * Algorithmic class: Accumulate maximum gap between adjacent primitives of CurveChain.\r\n * @internal\r\n */\r\nexport class GapSearchContext extends RecursiveCurveProcessorWithStack {\r\n public maxGap: number;\r\n constructor() {\r\n super();\r\n this.maxGap = 0.0;\r\n }\r\n public static maxGap(target: CurveCollection): number {\r\n const context = new GapSearchContext();\r\n target.announceToCurveProcessor(context);\r\n return context.maxGap;\r\n }\r\n public override announceCurvePrimitive(curve: CurvePrimitive, _indexInParent: number): void {\r\n if (this._stack.length > 0) {\r\n const parent = this._stack[this._stack.length - 1];\r\n if (parent instanceof CurveChain) {\r\n const chain = parent;\r\n const nextCurve = chain.cyclicCurvePrimitive(_indexInParent + 1);\r\n if (curve !== undefined && nextCurve !== undefined) {\r\n this.maxGap = Math.max(this.maxGap, curve.endPoint().distance(nextCurve.startPoint()));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GapSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,wDAAiE;AAEjE,sDAAqE;AAErE,qJAAqJ;AACrJ;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,iDAAgC;IAEpE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,MAAuB;QAC1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACe,sBAAsB,CAAC,KAAqB,EAAE,cAAsB;QAClF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,YAAY,4BAAU,EAAE;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACjE,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;oBAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;iBACxF;aACF;SACF;IACH,CAAC;CACF;AAvBD,4CAuBC","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 { CurveChain, CurveCollection } from \"../CurveCollection\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { RecursiveCurveProcessorWithStack } from \"../CurveProcessor\";\n\n// import { SumLengthsContext, GapSearchContext, CountLinearPartsSearchContext, CloneCurvesContext, TransformInPlaceContext } from \"./CurveSearches\";\n/**\n * Algorithmic class: Accumulate maximum gap between adjacent primitives of CurveChain.\n * @internal\n */\nexport class GapSearchContext extends RecursiveCurveProcessorWithStack {\n public maxGap: number;\n constructor() {\n super();\n this.maxGap = 0.0;\n }\n public static maxGap(target: CurveCollection): number {\n const context = new GapSearchContext();\n target.announceToCurveProcessor(context);\n return context.maxGap;\n }\n public override announceCurvePrimitive(curve: CurvePrimitive, _indexInParent: number): void {\n if (this._stack.length > 0) {\n const parent = this._stack[this._stack.length - 1];\n if (parent instanceof CurveChain) {\n const chain = parent;\n const nextCurve = chain.cyclicCurvePrimitive(_indexInParent + 1);\n if (curve !== undefined && nextCurve !== undefined) {\n this.maxGap = Math.max(this.maxGap, curve.endPoint().distance(nextCurve.startPoint()));\n }\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiChainCollector.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,6CAA0C;AAE1C,iEAA2E;AAC3E,+DAA4D;AAC5D,6DAA0D;AAC1D,6DAA0D;AAC1D,2DAAwD;AACxD,2CAAwC;AACxC,2CAAwC;AACxC,qDAA8D;AAC9D,6CAA0C;AAC1C,uDAAoD;AACpD,iEAAqE;AAIrE,gEAA6D;AAE7D;;;;;;;;;;;;;GAaG;AACH,MAAa,mBAAmB;IAY9B;;;OAGG;IACH,YAAmB,sBAAsB,GAAG,mBAAQ,CAAC,mBAAmB,EAAE,iBAAqC,mBAAQ,CAAC,mBAAmB;QACzI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,CAAC;QACtD,IAAI,CAAC,qBAAqB,GAAG,mBAAQ,CAAC,mBAAmB,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC;IAC5C,CAAC;IAGD;;;;;OAKG;IACK,qBAAqB,CAAC,GAAY,EAAE,SAAiB,EAAE,mBAA2B,CAAC,CAAC;QAE1F,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;YAC1E,IAAI,gBAAgB,KAAK,WAAW;gBAClC,SAAS;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;gBAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;gBAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SACpD;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAGD;;;;;OAKG;IACI,qBAAqB,CAAC,SAAyB;QACpD,IAAI,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC;YAAE,OAAO;QAClF,IAAI,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC;YAAE,OAAO;QACpF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,SAAwB;QAC1C,IAAI,SAAS,YAAY,+BAAc;YACrC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;aACnC,IAAI,SAAS,YAAY,iCAAe,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE;YACjF,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;gBAClC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACtB;SACF;IACH,CAAC;IAED;;;OAGG;IACK,yBAAyB,CAAC,SAAyB,EAAE,SAAiB;QAC5E,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACpE,IAAI,OAAO,EAAE;gBACX,IAAI,OAAO,CAAC,KAAK,EAAE;oBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACjD,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;oBAC7F,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC;iBACb;qBAAM;oBACL,SAAS,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC/C,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC9B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;oBAC/E,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;oBAC7D,OAAO,IAAI,CAAC;iBACb;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpD,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAChE,IAAI,OAAO,EAAE,EAAG,4BAA4B;oBAC1C,IAAI,OAAO,CAAC,KAAK,EAAE;wBACjB,SAAS,CAAC,cAAc,EAAE,CAAC;wBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;wBAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACjD,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;wBAC7F,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC7D,OAAO,IAAI,CAAC;qBACb;yBAAM;wBACL,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC/C,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;wBAC9B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;wBAC/E,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC7D,OAAO,IAAI,CAAC;qBACb;iBACF;aACF;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;OAKG;IACK,yBAAyB,CAAC,WAAmB,EAAE,WAAmB;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;QACD,yBAAyB;QACzB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,IAAI,WAAW,KAAK,cAAc,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;SACpB;IACH,CAAC;IACO,YAAY,CAAC,UAAkB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,KAAK;YACnB,CAAC,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IACD,kFAAkF;IAC1E,wBAAwB,CAAC,UAAkB,EAAE,SAAiB;QACpE,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,qCAAqC;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAChF,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,KAAK;gBAChB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,OAAO;SACR;QACD,+BAA+B;QAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5E,IAAI,OAAO,EAAE;YACX,IAAI,OAAO,CAAC,KAAK;gBACf,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAC/D,OAAO;SACR;IACH,CAAC;IACD;;;OAGG;IACK,oBAAoB,CAAC,MAAwB,EAAE,gBAAyB;QAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,IAAI,gBAAgB,EAAE;YACpB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7C,mBAAmB,CAAC,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAC7F,mBAAmB,CAAC,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAC3F,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACnG,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,EAAE;gBAC/C,yDAAyD;gBACzD,aAAa,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACnF,mBAAmB,CAAC,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBAC7F,mBAAmB,CAAC,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;aAC5F;YACD,IAAI,mBAAmB,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;gBACtF,MAAM,YAAY,GAAG,2BAAY,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;gBACxE,IAAI,YAAY,EAAE;oBAChB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC5C,IAAI,YAAY,EAAE;wBAChB,MAAM,KAAK,GAAG,qBAAS,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;wBAC9D,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE;4BACzF,OAAO,WAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;yBACjC;qBACF;iBACF;gBACD,OAAO,WAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACjC;SACF;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,WAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACO,mBAAmB,CAAC,MAAwB;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,MAAM,UAAU,GAAG,2BAAY,CAAC,MAAM,EAAG,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAC;YACzB,KAAK,CAAC,WAAW,CAAE,UAAU,CAAC,CAAC;YAC/B,UAAU,CAAC,qBAAqB,EAAG,CAAC;SACrC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,8EAA8E;IACvE,UAAU,CAAC,mBAA4B,KAAK;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,6BAAW,CAAC,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAC7D,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACpB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACH,0DAA0D;IACnD,4BAA4B,CAAC,aAAyC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAC;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,EAAE;gBACJ,aAAa,CAAC,EAAE,CAAC,CAAC;SACrB;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,EAAE;oBACJ,aAAa,CAAC,EAAE,CAAC,CAAC;aACnB;SACF;IACH,CAAC;CACF;AA7PD,kDA6PC;AAED;;;GAGG;AACH,MAAa,aAAa;IACxB,oGAAoG;IAC7F,MAAM,CAAC,UAAU,CAAC,IAAS;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,YAAY,+BAAc,EAAE;YAClC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;SAC7B;aAAM,IAAI,IAAI,YAAY,iCAAe,EAAE;YAC1C,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;SAC5B;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACnC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,oGAAoG;IAC7F,MAAM,CAAC,WAAW,CAAC,KAAc,EAAE,IAAS;QACjD,IAAI,IAAI,YAAY,6BAAa,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACzB;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAClC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uGAAuG;IACvG,iDAAiD;IACjD,uBAAuB;IAChB,MAAM,CAAC,aAAa,CAAC,IAAuC,EAAE,MAAc,EAAE,MAAkB;QACrG,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,IAAI,YAAY,+BAAc,EAAE;YAClC,MAAM,OAAO,GAAG,kDAA2B,CAAC,sBAAsB,CAAC,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9F,IAAI,OAAO,EAAE;gBACX,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;SACF;aAAM,IAAI,IAAI,YAAY,WAAI,IAAI,IAAI,YAAY,WAAI,EAAE;YACvD,MAAM,OAAO,GAAG,kDAA2B,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjF,IAAI,OAAO,EAAE;gBACX,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACtB;SACF;aAAM,IAAI,IAAI,YAAY,6BAAW,EAAE;YACtC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;gBAC3B,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC1D;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,KAAK,MAAM,CAAC,IAAI,IAAI;gBAClB,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC1D;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,8BAA8B,CAAC,SAAqB,EAAE,cAAsB,EAAE,YAAoB;QAC9G,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;YACzB,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC3B;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACxF,IAAI,aAAa,GAAG,aAAa,EAAE;YACjC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAClF;aAAM;YACL,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAClF;IACH,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,aAAa,CAAC,SAAqB,EAAE,YAAoB,EAAE,kBAA0B,mBAAQ,CAAC,mBAAmB;QAC7H,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;YACzB,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC3B;QACD,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,kBAAkB,CAAC,CAAiB,EAAE,KAAc,EAAE,EAAU;QAC5E,IAAI,CAAC,YAAY,CAAC,6BAAa,CAAC,EAAE;YAChC,IAAI,KAAK,EAAE;gBACT,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACzB;iBAAM;gBACL,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACzB;YACD,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,CAAC,YAAY,2BAAY,IAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;YACzD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qFAAqF;IAC9E,MAAM,CAAC,cAAc,CAAC,EAAkB,EAAE,EAAkB,EAAE,QAAgB;QACnF,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,mBAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,GAAG,QAAQ;YAChB,OAAO,IAAI,CAAC;QACd,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;YACrF,OAAO,IAAI,CAAC;QACd,+CAA+C;QAC/C,+CAA+C;QAC/C,MAAM,aAAa,GAAG,uBAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,SAAS,GAAG,WAAW,GAAG,QAAQ,IAAI,SAAS,GAAG,WAAW,GAAG,QAAQ,EAAE;gBAC5E,IAAI,EAAE,YAAY,aAAK,IAAI,EAAE,YAAY,aAAK,EAAE;oBAC9C,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACjE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;oBAChE,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACnE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA1ID,sCA0IC","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 { Arc3d } from \"../../curve/Arc3d\";\r\nimport { AnyCurve } from \"../../curve/CurveChain\";\r\nimport { BagOfCurves, CurveCollection } from \"../../curve/CurveCollection\";\r\nimport { CurvePrimitive } from \"../../curve/CurvePrimitive\";\r\nimport { GeometryQuery } from \"../../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../../curve/LineSegment3d\";\r\nimport { LineString3d } from \"../../curve/LineString3d\";\r\nimport { Loop } from \"../../curve/Loop\";\r\nimport { Path } from \"../../curve/Path\";\r\nimport { ChainTypes, RegionOps } from \"../../curve/RegionOps\";\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { CurveCurve } from \"../../curve/CurveCurve\";\r\nimport { CurveChainWireOffsetContext } from \"./PolygonOffsetContext\";\r\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range3d } from \"../../geometry3d/Range\";\r\nimport { XYAndZ } from \"../../geometry3d/XYZProps\";\r\nimport { FrameBuilder } from \"../../geometry3d/FrameBuilder\";\r\n\r\n/**\r\n * Manage a growing array of arrays of curve primitives that are to be joined \"head to tail\" in paths.\r\n * * The caller makes a sequence of calls to announce individual primitives.\r\n * * This collector (unlike the simpler \"ChainCollector\") expects to have inputs arriving in random order, leaving multiple open chains in play at any time.\r\n * * chainCollector.announceCurvePrimitive (curve, searchAllPaths).\r\n * * When all curves have been announced, the call to grab the paths option restructures the various active chains into Path and Loop objects.\r\n * * Usage pattern is\r\n * * initialization: `context = new ChainCollectorContext (makeClones: boolean)`\r\n * * many times\r\n * * ` context.captureCurve (anyCurve, searchAllPaths)`\r\n * * ` context.captureCurvePrimitive (primitive, searchAllPaths)`\r\n * * end: ` result = context.grabResult (formLoopsIfClosed)`\r\n * @internal\r\n */\r\nexport class MultiChainCollector {\r\n private _chains: CurvePrimitive[][];\r\n\r\n private static _staticPointA: Point3d;\r\n private static _staticPointB: Point3d;\r\n\r\n /** LOOSE tolerance for snap to end */\r\n private _endPointShiftTolerance: number;\r\n /** TIGHT tolerance for snap to end */\r\n private _endPointHitTolerance: number;\r\n /** tolerance for choosing Path or Loop. If undefined, ALWAYS PATH */\r\n private _planarityTolerance: number | undefined;\r\n /** Initialize with an empty array of chains.\r\n * @param endPointShiftTolerance tolerance for calling endpoints identical\r\n * @param planeTolerance tolerance for considering a loop to be planar. If undefined, only create Path. If defined, create Loop curves are if within tolerance of a plane.\r\n */\r\n public constructor(endPointShiftTolerance = Geometry.smallMetricDistance, planeTolerance: number | undefined = Geometry.smallMetricDistance) {\r\n this._chains = [];\r\n this._endPointShiftTolerance = endPointShiftTolerance;\r\n this._endPointHitTolerance = Geometry.smallMetricDistance;\r\n this._planarityTolerance = planeTolerance;\r\n }\r\n\r\n private _xyzWork0?: Point3d;\r\n /**\r\n * Find a chain (with index _other than_ exceptChainIndex) that starts or ends at xyz\r\n * @param xyz\r\n * @param tolerance\r\n * @param exceptChainIndex index of chain to ignore. Send -1 to consider all chains.\r\n */\r\n private findAnyChainToConnect(xyz: Point3d, tolerance: number, exceptChainIndex: number = -1): { chainIndex: number, atEnd: boolean } | undefined {\r\n\r\n for (let chainIndexA = 0; chainIndexA < this._chains.length; chainIndexA++) {\r\n if (exceptChainIndex === chainIndexA)\r\n continue;\r\n const chain = this._chains[chainIndexA];\r\n this._xyzWork1 = chain[chain.length - 1].endPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\r\n return { chainIndex: chainIndexA, atEnd: true };\r\n this._xyzWork1 = chain[0].startPoint(this._xyzWork1);\r\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\r\n return { chainIndex: chainIndexA, atEnd: false };\r\n }\r\n return undefined;\r\n }\r\n\r\n private _xyzWork1?: Point3d;\r\n /**\r\n * Insert a single curve primitive into the active chains.\r\n * * The primitive is captured (not cloned)\r\n * * The primitive may be reversed in place\r\n * @param candidate\r\n */\r\n public captureCurvePrimitive(candidate: CurvePrimitive) {\r\n if (this.attachPrimitiveToAnyChain(candidate, this._endPointHitTolerance)) return;\r\n if (this.attachPrimitiveToAnyChain(candidate, this._endPointShiftTolerance)) return;\r\n this._chains.push([candidate]);\r\n return;\r\n }\r\n\r\n /**\r\n * Insert any curve into the collection.\r\n * * This recurses into Path, Loop, BagOfCurves etc\r\n * * The all primitives are captured, and may be reversed in place.\r\n * @param candidate\r\n */\r\n public captureCurve(candidate: GeometryQuery) {\r\n if (candidate instanceof CurvePrimitive)\r\n this.captureCurvePrimitive(candidate);\r\n else if (candidate instanceof CurveCollection && candidate.children !== undefined) {\r\n for (const c of candidate.children) {\r\n this.captureCurve(c);\r\n }\r\n }\r\n }\r\n\r\n /** Announce a curve primitive\r\n * * If a \"nearby\" connection is possible, insert the candidate in the chain and force endpoint match.\r\n * * Otherwise start a new chain.\r\n */\r\n private attachPrimitiveToAnyChain(candidate: CurvePrimitive, tolerance: number): boolean {\r\n if (candidate) {\r\n this._xyzWork0 = candidate.startPoint(this._xyzWork0);\r\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\r\n if (connect) {\r\n if (connect.atEnd) {\r\n const chain = this._chains[connect.chainIndex];\r\n const index0 = chain.length - 1;\r\n this._chains[connect.chainIndex].push(candidate);\r\n OffsetHelpers.moveHeadOrTail(chain[index0], chain[index0 + 1], this._endPointShiftTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\r\n return true;\r\n } else {\r\n candidate.reverseInPlace();\r\n const chain = this._chains[connect.chainIndex];\r\n chain.splice(0, 0, candidate);\r\n OffsetHelpers.moveHeadOrTail(chain[0], chain[1], this._endPointShiftTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\r\n return true;\r\n }\r\n } else {\r\n this._xyzWork0 = candidate.endPoint(this._xyzWork0);\r\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\r\n if (connect) { // START of new primitive ..\r\n if (connect.atEnd) {\r\n candidate.reverseInPlace();\r\n const chain = this._chains[connect.chainIndex];\r\n const index0 = chain.length - 1;\r\n this._chains[connect.chainIndex].push(candidate);\r\n OffsetHelpers.moveHeadOrTail(chain[index0], chain[index0 + 1], this._endPointShiftTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\r\n return true;\r\n } else {\r\n const chain = this._chains[connect.chainIndex];\r\n chain.splice(0, 0, candidate);\r\n OffsetHelpers.moveHeadOrTail(chain[0], chain[1], this._endPointShiftTolerance);\r\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * * Move each primitive from chainB to the end of chainA.\r\n * * clear chainB.\r\n * * move the final chain to chainB index.\r\n * * reduce the _chain.length by 1.\r\n */\r\n private mergeChainsForwardForward(chainIndexA: number, chainIndexB: number) {\r\n const chainA = this._chains[chainIndexA];\r\n const chainB = this._chains[chainIndexB];\r\n for (const p of chainB) {\r\n chainA.push(p);\r\n }\r\n // chainIndexB is unused.\r\n chainB.length = 0;\r\n const lastChainIndex = this._chains.length - 1;\r\n if (chainIndexB !== lastChainIndex) {\r\n this._chains[chainIndexB] = this._chains[lastChainIndex];\r\n this._chains.pop();\r\n } else {\r\n this._chains.pop();\r\n }\r\n }\r\n private reverseChain(chainIndex: number) {\r\n const chain = this._chains[chainIndex];\r\n chain.reverse();\r\n for (const p of chain)\r\n p.reverseInPlace();\r\n }\r\n // see if the head or tail of chainIndex matches any existing chain. If so, merge\r\n private searchAndMergeChainIndex(chainIndex: number, tolerance: number): void {\r\n // ASSUME valid index of non-empty chain\r\n const chain = this._chains[chainIndex];\r\n const lastIndexInChain = chain.length - 1;\r\n this._xyzWork0 = chain[0].startPoint(this._xyzWork0);\r\n // this start with any other chain ..\r\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\r\n if (connect) {\r\n if (!connect.atEnd)\r\n this.reverseChain(connect.chainIndex);\r\n this.mergeChainsForwardForward(connect.chainIndex, chainIndex);\r\n return;\r\n }\r\n // try end with any other chain\r\n this._xyzWork0 = chain[lastIndexInChain].endPoint(this._xyzWork0);\r\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\r\n if (connect) {\r\n if (connect.atEnd)\r\n this.reverseChain(connect.chainIndex);\r\n this.mergeChainsForwardForward(chainIndex, connect.chainIndex);\r\n return;\r\n }\r\n }\r\n /** turn an array of curve primitives into the simplest possible strongly typed curve structure.\r\n * * The input array is assumed to be connected appropriately to act as the curves of a Path.\r\n * * When a path is created the curves array is CAPTURED.\r\n */\r\n private promoteArrayToCurves(curves: CurvePrimitive[], makeLoopIfClosed: boolean): CurvePrimitive | Path | Loop | undefined {\r\n if (curves.length === 0)\r\n return undefined;\r\n if (makeLoopIfClosed) {\r\n const primitive0 = curves[0];\r\n const primitiveN = curves[curves.length - 1];\r\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\r\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\r\n const distanceAToB = MultiChainCollector._staticPointA.distance(MultiChainCollector._staticPointB);\r\n if (distanceAToB < this._endPointShiftTolerance) {\r\n // adjust for closure (and get the corrected coordinates)\r\n OffsetHelpers.moveHeadOrTail(primitiveN, primitive0, this._endPointShiftTolerance);\r\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\r\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\r\n }\r\n if (MultiChainCollector._staticPointA.isAlmostEqual(MultiChainCollector._staticPointB)) {\r\n const localToWorld = FrameBuilder.createRightHandedLocalToWorld(curves);\r\n if (localToWorld) {\r\n const worldToLocal = localToWorld.inverse();\r\n if (worldToLocal) {\r\n const range = RegionOps.curveArrayRange(curves, worldToLocal);\r\n if (this._planarityTolerance !== undefined && range.zLength() <= this._planarityTolerance) {\r\n return Loop.createArray(curves);\r\n }\r\n }\r\n }\r\n return Path.createArray(curves);\r\n }\r\n }\r\n if (curves.length === 1)\r\n return curves[0];\r\n return Path.createArray(curves);\r\n }\r\n private chainToLineString3d(curves: CurvePrimitive[]): LineString3d | undefined{\r\n if (curves.length === 0)\r\n return undefined;\r\n const linestring = LineString3d.create ();\r\n for (const curve of curves){\r\n curve.emitStrokes (linestring);\r\n linestring.removeDuplicatePoints ();\r\n }\r\n return linestring;\r\n }\r\n\r\n /** Return the collected results, structured as the simplest possible type. */\r\n public grabResult(makeLoopIfClosed: boolean = false): ChainTypes {\r\n const chains = this._chains;\r\n if (chains.length === 0)\r\n return undefined;\r\n if (chains.length === 1)\r\n return this.promoteArrayToCurves(chains[0], makeLoopIfClosed);\r\n const bag = BagOfCurves.create();\r\n for (const chain of chains) {\r\n const q = this.promoteArrayToCurves(chain, makeLoopIfClosed);\r\n bag.tryAddChild(q);\r\n }\r\n return bag;\r\n }\r\n/** Return chains as individual calls to announceChain. */\r\npublic announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void): void {\r\n const chains = this._chains;\r\n if (chains.length === 1){\r\n const ls = this.chainToLineString3d(chains[0]);\r\n if (ls)\r\n announceChain(ls);\r\n } else if (chains.length > 1){\r\n for (const chain of chains) {\r\n const ls = this.chainToLineString3d(chain);\r\n if (ls)\r\n announceChain(ls);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Static methods to assist offset sequences.\r\n * @internal\r\n */\r\nexport class OffsetHelpers {\r\n // recursively sum lengths, allowing CurvePrimitive, CurveCollection, or array of such at any level.\r\n public static sumLengths(data: any): number {\r\n let mySum = 0;\r\n if (data instanceof CurvePrimitive) {\r\n mySum += data.curveLength();\r\n } else if (data instanceof CurveCollection) {\r\n mySum += data.sumLengths();\r\n } else if (Array.isArray(data)) {\r\n for (const data1 of data)\r\n mySum += this.sumLengths(data1);\r\n }\r\n return mySum;\r\n }\r\n // recursively sum lengths, allowing CurvePrimitive, CurveCollection, or array of such at any level.\r\n public static extendRange(range: Range3d, data: any): Range3d {\r\n if (data instanceof GeometryQuery) {\r\n data.extendRange(range);\r\n } else if (Array.isArray(data)) {\r\n for (const data1 of data)\r\n this.extendRange(range, data1);\r\n }\r\n return range;\r\n }\r\n\r\n // construct (separately) the offsets of each entry of data (Path, Loop, BagOfCurve, or Array of those)\r\n // push all offset geometry into the result array\r\n // return summed length\r\n public static appendOffsets(data: AnyCurve | AnyCurve[] | undefined, offset: number, result: AnyCurve[]): number {\r\n let summedLengths = 0;\r\n if (data instanceof CurvePrimitive) {\r\n const resultA = CurveChainWireOffsetContext.constructCurveXYOffset(Path.create(data), offset);\r\n if (resultA) {\r\n summedLengths += this.sumLengths(resultA);\r\n result.push(resultA);\r\n }\r\n } else if (data instanceof Loop || data instanceof Path) {\r\n const resultA = CurveChainWireOffsetContext.constructCurveXYOffset(data, offset);\r\n if (resultA) {\r\n summedLengths += this.sumLengths(resultA);\r\n result.push(resultA);\r\n }\r\n } else if (data instanceof BagOfCurves) {\r\n for (const q of data.children)\r\n summedLengths += this.appendOffsets(q, offset, result);\r\n } else if (Array.isArray(data)) {\r\n for (const q of data)\r\n summedLengths += this.appendOffsets(q, offset, result);\r\n }\r\n return summedLengths;\r\n }\r\n\r\n /**\r\n * * Restructure curve fragments as chains and offsets\r\n * * Return object with named chains, insideOffsets, outsideOffsets\r\n * * BEWARE that if the input is not a loop the classification of outputs is suspect.\r\n * @param fragments fragments to be chained\r\n * @param offsetDistance offset distance.\r\n */\r\n public static collectInsideAndOutsideOffsets(fragments: AnyCurve[], offsetDistance: number, gapTolerance: number): { insideOffsets: AnyCurve[], outsideOffsets: AnyCurve[], chains: ChainTypes } {\r\n const collector = new MultiChainCollector(gapTolerance);\r\n for (const s of fragments) {\r\n collector.captureCurve(s);\r\n }\r\n const myChains = collector.grabResult(true);\r\n const myOffsetA: CurveCollection[] = [];\r\n const myOffsetB: CurveCollection[] = [];\r\n const offsetLengthA = OffsetHelpers.appendOffsets(myChains, offsetDistance, myOffsetA);\r\n const offsetLengthB = OffsetHelpers.appendOffsets(myChains, -offsetDistance, myOffsetB);\r\n if (offsetLengthA > offsetLengthB) {\r\n return { outsideOffsets: myOffsetA, insideOffsets: myOffsetB, chains: myChains };\r\n } else {\r\n return { insideOffsets: myOffsetA, outsideOffsets: myOffsetB, chains: myChains };\r\n }\r\n }\r\n /**\r\n * * Restructure curve fragments as chains and offsets\r\n * * BEWARE that if the input is not a loop the classification of outputs is suspect.\r\n * @param fragments fragments to be chained\r\n * @param gapTolerance distance to be treated as \"effectively zero\" when joining head-to-tail.\r\n */\r\n public static collectChains(fragments: AnyCurve[], gapTolerance: number, planarTolerance: number = Geometry.smallMetricDistance): ChainTypes {\r\n const collector = new MultiChainCollector(gapTolerance, planarTolerance);\r\n for (const s of fragments) {\r\n collector.captureCurve(s);\r\n }\r\n return collector.grabResult(true);\r\n }\r\n\r\n /** If allowed by the geometry type, move an endpoint.\r\n *\r\n */\r\n public static simpleEndPointMove(g: CurvePrimitive, atEnd: boolean, to: XYAndZ): boolean {\r\n if (g instanceof (LineSegment3d)) {\r\n if (atEnd) {\r\n g.point1Ref.setFrom(to);\r\n } else {\r\n g.point0Ref.setFrom(to);\r\n }\r\n return true;\r\n } else if (g instanceof LineString3d && g.numPoints() > 0) {\r\n const i = atEnd ? g.numPoints() - 1 : 0;\r\n g.packedPoints.setAtCheckedPointIndex(i, to);\r\n return true;\r\n }\r\n return false;\r\n }\r\n // Try to move move tail (end) of g0 and/or head (beginning) of g1 to a common point.\r\n public static moveHeadOrTail(g0: CurvePrimitive, g1: CurvePrimitive, maxShift: number): boolean {\r\n const xyz0 = g0.endPoint();\r\n const xyz1 = g1.startPoint();\r\n const minShift = Geometry.smallMetricDistance * 0.001;\r\n const d01 = xyz0.distanceXY(xyz1);\r\n if (d01 < minShift)\r\n return true;\r\n if (this.simpleEndPointMove(g1, false, xyz0) || this.simpleEndPointMove(g0, true, xyz1))\r\n return true;\r\n // const detail1On0 = g0.closestPoint(xyz1);\r\n // const detail0On1 = g1.closestPoint(xyz0);\r\n const intersections = CurveCurve.intersectionXYPairs(g0, true, g1, true);\r\n const shiftFactor = 5.0;\r\n for (const pair of intersections) {\r\n const detail0 = pair.detailA;\r\n const detail1 = pair.detailB;\r\n const distance0 = detail0.point.distanceXY(xyz0);\r\n const distance1 = detail1.point.distanceXY(xyz1);\r\n if (distance0 < shiftFactor * maxShift && distance1 < shiftFactor * maxShift) {\r\n if (g0 instanceof Arc3d && g1 instanceof Arc3d) {\r\n const radians0End = g0.sweep.fractionToRadians(detail0.fraction);\r\n g0.sweep.setStartEndRadians(g0.sweep.startRadians, radians0End);\r\n const radians1Start = g1.sweep.fractionToRadians(detail1.fraction);\r\n g1.sweep.setStartEndRadians(radians1Start, g1.sweep.endRadians);\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MultiChainCollector.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/MultiChainCollector.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { Arc3d } from \"../../curve/Arc3d\";\nimport { AnyCurve } from \"../../curve/CurveChain\";\nimport { BagOfCurves, CurveCollection } from \"../../curve/CurveCollection\";\nimport { CurvePrimitive } from \"../../curve/CurvePrimitive\";\nimport { GeometryQuery } from \"../../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../../curve/LineSegment3d\";\nimport { LineString3d } from \"../../curve/LineString3d\";\nimport { Loop } from \"../../curve/Loop\";\nimport { Path } from \"../../curve/Path\";\nimport { ChainTypes, RegionOps } from \"../../curve/RegionOps\";\nimport { Geometry } from \"../../Geometry\";\nimport { CurveCurve } from \"../../curve/CurveCurve\";\nimport { CurveChainWireOffsetContext } from \"./PolygonOffsetContext\";\nimport { Point3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range3d } from \"../../geometry3d/Range\";\nimport { XYAndZ } from \"../../geometry3d/XYZProps\";\nimport { FrameBuilder } from \"../../geometry3d/FrameBuilder\";\n\n/**\n * Manage a growing array of arrays of curve primitives that are to be joined \"head to tail\" in paths.\n * * The caller makes a sequence of calls to announce individual primitives.\n * * This collector (unlike the simpler \"ChainCollector\") expects to have inputs arriving in random order, leaving multiple open chains in play at any time.\n * * chainCollector.announceCurvePrimitive (curve, searchAllPaths).\n * * When all curves have been announced, the call to grab the paths option restructures the various active chains into Path and Loop objects.\n * * Usage pattern is\n * * initialization: `context = new ChainCollectorContext (makeClones: boolean)`\n * * many times\n * * ` context.captureCurve (anyCurve, searchAllPaths)`\n * * ` context.captureCurvePrimitive (primitive, searchAllPaths)`\n * * end: ` result = context.grabResult (formLoopsIfClosed)`\n * @internal\n */\nexport class MultiChainCollector {\n private _chains: CurvePrimitive[][];\n\n private static _staticPointA: Point3d;\n private static _staticPointB: Point3d;\n\n /** LOOSE tolerance for snap to end */\n private _endPointShiftTolerance: number;\n /** TIGHT tolerance for snap to end */\n private _endPointHitTolerance: number;\n /** tolerance for choosing Path or Loop. If undefined, ALWAYS PATH */\n private _planarityTolerance: number | undefined;\n /** Initialize with an empty array of chains.\n * @param endPointShiftTolerance tolerance for calling endpoints identical\n * @param planeTolerance tolerance for considering a loop to be planar. If undefined, only create Path. If defined, create Loop curves are if within tolerance of a plane.\n */\n public constructor(endPointShiftTolerance = Geometry.smallMetricDistance, planeTolerance: number | undefined = Geometry.smallMetricDistance) {\n this._chains = [];\n this._endPointShiftTolerance = endPointShiftTolerance;\n this._endPointHitTolerance = Geometry.smallMetricDistance;\n this._planarityTolerance = planeTolerance;\n }\n\n private _xyzWork0?: Point3d;\n /**\n * Find a chain (with index _other than_ exceptChainIndex) that starts or ends at xyz\n * @param xyz\n * @param tolerance\n * @param exceptChainIndex index of chain to ignore. Send -1 to consider all chains.\n */\n private findAnyChainToConnect(xyz: Point3d, tolerance: number, exceptChainIndex: number = -1): { chainIndex: number, atEnd: boolean } | undefined {\n\n for (let chainIndexA = 0; chainIndexA < this._chains.length; chainIndexA++) {\n if (exceptChainIndex === chainIndexA)\n continue;\n const chain = this._chains[chainIndexA];\n this._xyzWork1 = chain[chain.length - 1].endPoint(this._xyzWork1);\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\n return { chainIndex: chainIndexA, atEnd: true };\n this._xyzWork1 = chain[0].startPoint(this._xyzWork1);\n if (this._xyzWork1.isAlmostEqual(xyz, tolerance))\n return { chainIndex: chainIndexA, atEnd: false };\n }\n return undefined;\n }\n\n private _xyzWork1?: Point3d;\n /**\n * Insert a single curve primitive into the active chains.\n * * The primitive is captured (not cloned)\n * * The primitive may be reversed in place\n * @param candidate\n */\n public captureCurvePrimitive(candidate: CurvePrimitive) {\n if (this.attachPrimitiveToAnyChain(candidate, this._endPointHitTolerance)) return;\n if (this.attachPrimitiveToAnyChain(candidate, this._endPointShiftTolerance)) return;\n this._chains.push([candidate]);\n return;\n }\n\n /**\n * Insert any curve into the collection.\n * * This recurses into Path, Loop, BagOfCurves etc\n * * The all primitives are captured, and may be reversed in place.\n * @param candidate\n */\n public captureCurve(candidate: GeometryQuery) {\n if (candidate instanceof CurvePrimitive)\n this.captureCurvePrimitive(candidate);\n else if (candidate instanceof CurveCollection && candidate.children !== undefined) {\n for (const c of candidate.children) {\n this.captureCurve(c);\n }\n }\n }\n\n /** Announce a curve primitive\n * * If a \"nearby\" connection is possible, insert the candidate in the chain and force endpoint match.\n * * Otherwise start a new chain.\n */\n private attachPrimitiveToAnyChain(candidate: CurvePrimitive, tolerance: number): boolean {\n if (candidate) {\n this._xyzWork0 = candidate.startPoint(this._xyzWork0);\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\n if (connect) {\n if (connect.atEnd) {\n const chain = this._chains[connect.chainIndex];\n const index0 = chain.length - 1;\n this._chains[connect.chainIndex].push(candidate);\n OffsetHelpers.moveHeadOrTail(chain[index0], chain[index0 + 1], this._endPointShiftTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n } else {\n candidate.reverseInPlace();\n const chain = this._chains[connect.chainIndex];\n chain.splice(0, 0, candidate);\n OffsetHelpers.moveHeadOrTail(chain[0], chain[1], this._endPointShiftTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n }\n } else {\n this._xyzWork0 = candidate.endPoint(this._xyzWork0);\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance);\n if (connect) { // START of new primitive ..\n if (connect.atEnd) {\n candidate.reverseInPlace();\n const chain = this._chains[connect.chainIndex];\n const index0 = chain.length - 1;\n this._chains[connect.chainIndex].push(candidate);\n OffsetHelpers.moveHeadOrTail(chain[index0], chain[index0 + 1], this._endPointShiftTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n } else {\n const chain = this._chains[connect.chainIndex];\n chain.splice(0, 0, candidate);\n OffsetHelpers.moveHeadOrTail(chain[0], chain[1], this._endPointShiftTolerance);\n this.searchAndMergeChainIndex(connect.chainIndex, tolerance);\n return true;\n }\n }\n }\n }\n return false;\n }\n /**\n * * Move each primitive from chainB to the end of chainA.\n * * clear chainB.\n * * move the final chain to chainB index.\n * * reduce the _chain.length by 1.\n */\n private mergeChainsForwardForward(chainIndexA: number, chainIndexB: number) {\n const chainA = this._chains[chainIndexA];\n const chainB = this._chains[chainIndexB];\n for (const p of chainB) {\n chainA.push(p);\n }\n // chainIndexB is unused.\n chainB.length = 0;\n const lastChainIndex = this._chains.length - 1;\n if (chainIndexB !== lastChainIndex) {\n this._chains[chainIndexB] = this._chains[lastChainIndex];\n this._chains.pop();\n } else {\n this._chains.pop();\n }\n }\n private reverseChain(chainIndex: number) {\n const chain = this._chains[chainIndex];\n chain.reverse();\n for (const p of chain)\n p.reverseInPlace();\n }\n // see if the head or tail of chainIndex matches any existing chain. If so, merge\n private searchAndMergeChainIndex(chainIndex: number, tolerance: number): void {\n // ASSUME valid index of non-empty chain\n const chain = this._chains[chainIndex];\n const lastIndexInChain = chain.length - 1;\n this._xyzWork0 = chain[0].startPoint(this._xyzWork0);\n // this start with any other chain ..\n let connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\n if (connect) {\n if (!connect.atEnd)\n this.reverseChain(connect.chainIndex);\n this.mergeChainsForwardForward(connect.chainIndex, chainIndex);\n return;\n }\n // try end with any other chain\n this._xyzWork0 = chain[lastIndexInChain].endPoint(this._xyzWork0);\n connect = this.findAnyChainToConnect(this._xyzWork0, tolerance, chainIndex);\n if (connect) {\n if (connect.atEnd)\n this.reverseChain(connect.chainIndex);\n this.mergeChainsForwardForward(chainIndex, connect.chainIndex);\n return;\n }\n }\n /** turn an array of curve primitives into the simplest possible strongly typed curve structure.\n * * The input array is assumed to be connected appropriately to act as the curves of a Path.\n * * When a path is created the curves array is CAPTURED.\n */\n private promoteArrayToCurves(curves: CurvePrimitive[], makeLoopIfClosed: boolean): CurvePrimitive | Path | Loop | undefined {\n if (curves.length === 0)\n return undefined;\n if (makeLoopIfClosed) {\n const primitive0 = curves[0];\n const primitiveN = curves[curves.length - 1];\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\n const distanceAToB = MultiChainCollector._staticPointA.distance(MultiChainCollector._staticPointB);\n if (distanceAToB < this._endPointShiftTolerance) {\n // adjust for closure (and get the corrected coordinates)\n OffsetHelpers.moveHeadOrTail(primitiveN, primitive0, this._endPointShiftTolerance);\n MultiChainCollector._staticPointA = primitive0.startPoint(MultiChainCollector._staticPointA);\n MultiChainCollector._staticPointB = primitiveN.endPoint(MultiChainCollector._staticPointB);\n }\n if (MultiChainCollector._staticPointA.isAlmostEqual(MultiChainCollector._staticPointB)) {\n const localToWorld = FrameBuilder.createRightHandedLocalToWorld(curves);\n if (localToWorld) {\n const worldToLocal = localToWorld.inverse();\n if (worldToLocal) {\n const range = RegionOps.curveArrayRange(curves, worldToLocal);\n if (this._planarityTolerance !== undefined && range.zLength() <= this._planarityTolerance) {\n return Loop.createArray(curves);\n }\n }\n }\n return Path.createArray(curves);\n }\n }\n if (curves.length === 1)\n return curves[0];\n return Path.createArray(curves);\n }\n private chainToLineString3d(curves: CurvePrimitive[]): LineString3d | undefined{\n if (curves.length === 0)\n return undefined;\n const linestring = LineString3d.create ();\n for (const curve of curves){\n curve.emitStrokes (linestring);\n linestring.removeDuplicatePoints ();\n }\n return linestring;\n }\n\n /** Return the collected results, structured as the simplest possible type. */\n public grabResult(makeLoopIfClosed: boolean = false): ChainTypes {\n const chains = this._chains;\n if (chains.length === 0)\n return undefined;\n if (chains.length === 1)\n return this.promoteArrayToCurves(chains[0], makeLoopIfClosed);\n const bag = BagOfCurves.create();\n for (const chain of chains) {\n const q = this.promoteArrayToCurves(chain, makeLoopIfClosed);\n bag.tryAddChild(q);\n }\n return bag;\n }\n/** Return chains as individual calls to announceChain. */\npublic announceChainsAsLineString3d(announceChain: (ls: LineString3d) => void): void {\n const chains = this._chains;\n if (chains.length === 1){\n const ls = this.chainToLineString3d(chains[0]);\n if (ls)\n announceChain(ls);\n } else if (chains.length > 1){\n for (const chain of chains) {\n const ls = this.chainToLineString3d(chain);\n if (ls)\n announceChain(ls);\n }\n }\n }\n}\n\n/**\n * Static methods to assist offset sequences.\n * @internal\n */\nexport class OffsetHelpers {\n // recursively sum lengths, allowing CurvePrimitive, CurveCollection, or array of such at any level.\n public static sumLengths(data: any): number {\n let mySum = 0;\n if (data instanceof CurvePrimitive) {\n mySum += data.curveLength();\n } else if (data instanceof CurveCollection) {\n mySum += data.sumLengths();\n } else if (Array.isArray(data)) {\n for (const data1 of data)\n mySum += this.sumLengths(data1);\n }\n return mySum;\n }\n // recursively sum lengths, allowing CurvePrimitive, CurveCollection, or array of such at any level.\n public static extendRange(range: Range3d, data: any): Range3d {\n if (data instanceof GeometryQuery) {\n data.extendRange(range);\n } else if (Array.isArray(data)) {\n for (const data1 of data)\n this.extendRange(range, data1);\n }\n return range;\n }\n\n // construct (separately) the offsets of each entry of data (Path, Loop, BagOfCurve, or Array of those)\n // push all offset geometry into the result array\n // return summed length\n public static appendOffsets(data: AnyCurve | AnyCurve[] | undefined, offset: number, result: AnyCurve[]): number {\n let summedLengths = 0;\n if (data instanceof CurvePrimitive) {\n const resultA = CurveChainWireOffsetContext.constructCurveXYOffset(Path.create(data), offset);\n if (resultA) {\n summedLengths += this.sumLengths(resultA);\n result.push(resultA);\n }\n } else if (data instanceof Loop || data instanceof Path) {\n const resultA = CurveChainWireOffsetContext.constructCurveXYOffset(data, offset);\n if (resultA) {\n summedLengths += this.sumLengths(resultA);\n result.push(resultA);\n }\n } else if (data instanceof BagOfCurves) {\n for (const q of data.children)\n summedLengths += this.appendOffsets(q, offset, result);\n } else if (Array.isArray(data)) {\n for (const q of data)\n summedLengths += this.appendOffsets(q, offset, result);\n }\n return summedLengths;\n }\n\n /**\n * * Restructure curve fragments as chains and offsets\n * * Return object with named chains, insideOffsets, outsideOffsets\n * * BEWARE that if the input is not a loop the classification of outputs is suspect.\n * @param fragments fragments to be chained\n * @param offsetDistance offset distance.\n */\n public static collectInsideAndOutsideOffsets(fragments: AnyCurve[], offsetDistance: number, gapTolerance: number): { insideOffsets: AnyCurve[], outsideOffsets: AnyCurve[], chains: ChainTypes } {\n const collector = new MultiChainCollector(gapTolerance);\n for (const s of fragments) {\n collector.captureCurve(s);\n }\n const myChains = collector.grabResult(true);\n const myOffsetA: CurveCollection[] = [];\n const myOffsetB: CurveCollection[] = [];\n const offsetLengthA = OffsetHelpers.appendOffsets(myChains, offsetDistance, myOffsetA);\n const offsetLengthB = OffsetHelpers.appendOffsets(myChains, -offsetDistance, myOffsetB);\n if (offsetLengthA > offsetLengthB) {\n return { outsideOffsets: myOffsetA, insideOffsets: myOffsetB, chains: myChains };\n } else {\n return { insideOffsets: myOffsetA, outsideOffsets: myOffsetB, chains: myChains };\n }\n }\n /**\n * * Restructure curve fragments as chains and offsets\n * * BEWARE that if the input is not a loop the classification of outputs is suspect.\n * @param fragments fragments to be chained\n * @param gapTolerance distance to be treated as \"effectively zero\" when joining head-to-tail.\n */\n public static collectChains(fragments: AnyCurve[], gapTolerance: number, planarTolerance: number = Geometry.smallMetricDistance): ChainTypes {\n const collector = new MultiChainCollector(gapTolerance, planarTolerance);\n for (const s of fragments) {\n collector.captureCurve(s);\n }\n return collector.grabResult(true);\n }\n\n /** If allowed by the geometry type, move an endpoint.\n *\n */\n public static simpleEndPointMove(g: CurvePrimitive, atEnd: boolean, to: XYAndZ): boolean {\n if (g instanceof (LineSegment3d)) {\n if (atEnd) {\n g.point1Ref.setFrom(to);\n } else {\n g.point0Ref.setFrom(to);\n }\n return true;\n } else if (g instanceof LineString3d && g.numPoints() > 0) {\n const i = atEnd ? g.numPoints() - 1 : 0;\n g.packedPoints.setAtCheckedPointIndex(i, to);\n return true;\n }\n return false;\n }\n // Try to move move tail (end) of g0 and/or head (beginning) of g1 to a common point.\n public static moveHeadOrTail(g0: CurvePrimitive, g1: CurvePrimitive, maxShift: number): boolean {\n const xyz0 = g0.endPoint();\n const xyz1 = g1.startPoint();\n const minShift = Geometry.smallMetricDistance * 0.001;\n const d01 = xyz0.distanceXY(xyz1);\n if (d01 < minShift)\n return true;\n if (this.simpleEndPointMove(g1, false, xyz0) || this.simpleEndPointMove(g0, true, xyz1))\n return true;\n // const detail1On0 = g0.closestPoint(xyz1);\n // const detail0On1 = g1.closestPoint(xyz0);\n const intersections = CurveCurve.intersectionXYPairs(g0, true, g1, true);\n const shiftFactor = 5.0;\n for (const pair of intersections) {\n const detail0 = pair.detailA;\n const detail1 = pair.detailB;\n const distance0 = detail0.point.distanceXY(xyz0);\n const distance1 = detail1.point.distanceXY(xyz1);\n if (distance0 < shiftFactor * maxShift && distance1 < shiftFactor * maxShift) {\n if (g0 instanceof Arc3d && g1 instanceof Arc3d) {\n const radians0End = g0.sweep.fractionToRadians(detail0.fraction);\n g0.sweep.setStartEndRadians(g0.sweep.startRadians, radians0End);\n const radians1Start = g1.sweep.fractionToRadians(detail1.fraction);\n g1.sweep.setStartEndRadians(radians1Start, g1.sweep.endRadians);\n return true;\n }\n }\n }\n return false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NewtonRtoRStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/NewtonRtoRStrokeHandler.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAA4D;AAG5D;;GAEG;AACH,MAAsB,uBAAwB,SAAQ,4BAAmB;IAGvE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,KAAiC;QAChE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IAED,sCAAsC;IAC/B,uBAAuB,CAAC,MAAkC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF;AArBD,0DAqBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { NewtonEvaluatorRtoR } from \"../../numerics/Newton\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\n\r\n/** Intermediate class for managing the parentCurve announcements from an IStrokeHandler.\r\n * @internal\r\n */\r\nexport abstract class NewtonRtoRStrokeHandler extends NewtonEvaluatorRtoR {\r\n protected _parentCurvePrimitive: CurvePrimitive | undefined;\r\n\r\n constructor() {\r\n super();\r\n this._parentCurvePrimitive = undefined;\r\n }\r\n\r\n /** retain the parentCurvePrimitive.\r\n * * Calling this method tells the handler that the parent curve is to be used for detail searches.\r\n * * Example: Transition spiral search is based on linestring first, then the exact spiral.\r\n * * Example: CurveChainWithDistanceIndex does NOT do this announcement -- the constituents act independently.\r\n */\r\n public startParentCurvePrimitive(curve: CurvePrimitive | undefined) {\r\n this._parentCurvePrimitive = curve;\r\n }\r\n\r\n /** Forget the parentCurvePrimitive */\r\n public endParentCurvePrimitive(_curve: CurvePrimitive | undefined) {\r\n this._parentCurvePrimitive = undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NewtonRtoRStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/NewtonRtoRStrokeHandler.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAA4D;AAG5D;;GAEG;AACH,MAAsB,uBAAwB,SAAQ,4BAAmB;IAGvE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,KAAiC;QAChE,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACrC,CAAC;IAED,sCAAsC;IAC/B,uBAAuB,CAAC,MAAkC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF;AArBD,0DAqBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { NewtonEvaluatorRtoR } from \"../../numerics/Newton\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\n\n/** Intermediate class for managing the parentCurve announcements from an IStrokeHandler.\n * @internal\n */\nexport abstract class NewtonRtoRStrokeHandler extends NewtonEvaluatorRtoR {\n protected _parentCurvePrimitive: CurvePrimitive | undefined;\n\n constructor() {\n super();\n this._parentCurvePrimitive = undefined;\n }\n\n /** retain the parentCurvePrimitive.\n * * Calling this method tells the handler that the parent curve is to be used for detail searches.\n * * Example: Transition spiral search is based on linestring first, then the exact spiral.\n * * Example: CurveChainWithDistanceIndex does NOT do this announcement -- the constituents act independently.\n */\n public startParentCurvePrimitive(curve: CurvePrimitive | undefined) {\n this._parentCurvePrimitive = curve;\n }\n\n /** Forget the parentCurvePrimitive */\n public endParentCurvePrimitive(_curve: CurvePrimitive | undefined) {\n this._parentCurvePrimitive = undefined;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Accumulator context for searching for extrema of geometry along a plane.\r\n * @internal\r\n */\r\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\r\n public plane: PlaneAltitudeEvaluator;\r\n public range: Range1d;\r\n public lowPoint: Point3d | undefined;\r\n public highPoint: Point3d | undefined;\r\n private constructor(plane: PlaneAltitudeEvaluator) {\r\n super();\r\n this.plane = plane;\r\n this.range = Range1d.createNull();\r\n this.resetRange();\r\n }\r\n\r\n public resetRange() {\r\n this.range.setNull();\r\n }\r\n\r\n public announcePoint(point: Point3d) {\r\n const h = this.plane.altitude(point);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = point.clone(this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = point.clone(this.highPoint);\r\n }\r\n\r\n public announcePoints(points: GrowableXYZArray) {\r\n for (let i = 0; i < points.length; i++) {\r\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\r\n }\r\n }\r\n\r\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n return context;\r\n }\r\n\r\n public override handleLineSegment3d(segment: LineSegment3d) {\r\n this.announcePoint(segment.point0Ref);\r\n this.announcePoint(segment.point1Ref);\r\n }\r\n\r\n public override handleLineString3d(lineString: LineString3d) {\r\n this.announcePoints(lineString.packedPoints);\r\n }\r\n\r\n private _strokeOptions?: StrokeOptions;\r\n\r\n private initStrokeOptions() {\r\n // TODO: compute the exact extrema; until then stroke aggressively\r\n if (undefined === this._strokeOptions) {\r\n this._strokeOptions = new StrokeOptions();\r\n this._strokeOptions.angleTol = Angle.createDegrees(1);\r\n }\r\n }\r\n\r\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n private _sineCosinePolynomial?: SineCosinePolynomial;\r\n\r\n private _workPoint?: Point3d;\r\n\r\n public override handleArc3d(g: Arc3d) {\r\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\r\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n radians += Math.PI;\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\r\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\r\n }\r\n\r\n private static findExtremesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d\r\n ): PlaneAltitudeRangeContext | undefined {\r\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\r\n const vector = direction instanceof Ray3d ? direction.direction : direction;\r\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\r\n if (plane) {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n if (geometry instanceof GeometryQuery) {\r\n geometry.dispatchToGeometryHandler(context);\r\n } else if (geometry instanceof GrowableXYZArray) {\r\n context.announcePoints(geometry);\r\n } else {\r\n for (const pt of geometry)\r\n context.announcePoint(pt);\r\n }\r\n return context;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and\r\n * return points at min and max altitude, packed into a `LineSegment3d`.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremePointsInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d\r\n ): LineSegment3d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && context.highPoint && context.lowPoint)\r\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return\r\n * the min and max altitudes, packed into a Range1d.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeAltitudesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\r\n ): Range1d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && !context.range.isNull)\r\n return Range1d.createFrom(context.range, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeFractionsAlongDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\r\n ): Range1d | undefined {\r\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\r\n if (undefined !== range) {\r\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\r\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\r\n if (undefined !== scaleToFraction) {\r\n range.low *= scaleToFraction;\r\n range.high *= scaleToFraction;\r\n return range;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\n\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\nimport { Angle } from \"../../geometry3d/Angle\";\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Range1d } from \"../../geometry3d/Range\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\nimport { Arc3d } from \"../Arc3d\";\nimport { GeometryQuery } from \"../GeometryQuery\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\nimport { StrokeOptions } from \"../StrokeOptions\";\n\n/**\n * Accumulator context for searching for extrema of geometry along a plane.\n * @internal\n */\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\n public plane: PlaneAltitudeEvaluator;\n public range: Range1d;\n public lowPoint: Point3d | undefined;\n public highPoint: Point3d | undefined;\n private constructor(plane: PlaneAltitudeEvaluator) {\n super();\n this.plane = plane;\n this.range = Range1d.createNull();\n this.resetRange();\n }\n\n public resetRange() {\n this.range.setNull();\n }\n\n public announcePoint(point: Point3d) {\n const h = this.plane.altitude(point);\n if (this.range.extendLow(h))\n this.lowPoint = point.clone(this.lowPoint);\n if (this.range.extendHigh(h))\n this.highPoint = point.clone(this.highPoint);\n }\n\n public announcePoints(points: GrowableXYZArray) {\n for (let i = 0; i < points.length; i++) {\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\n if (this.range.extendLow(h))\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\n if (this.range.extendHigh(h))\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\n }\n }\n\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\n const context = new PlaneAltitudeRangeContext(plane);\n return context;\n }\n\n public override handleLineSegment3d(segment: LineSegment3d) {\n this.announcePoint(segment.point0Ref);\n this.announcePoint(segment.point1Ref);\n }\n\n public override handleLineString3d(lineString: LineString3d) {\n this.announcePoints(lineString.packedPoints);\n }\n\n private _strokeOptions?: StrokeOptions;\n\n private initStrokeOptions() {\n // TODO: compute the exact extrema; until then stroke aggressively\n if (undefined === this._strokeOptions) {\n this._strokeOptions = new StrokeOptions();\n this._strokeOptions.angleTol = Angle.createDegrees(1);\n }\n }\n\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\n this.initStrokeOptions();\n const ls = LineString3d.create();\n bcurve.emitStrokes(ls, this._strokeOptions);\n this.handleLineString3d(ls);\n }\n\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\n this.initStrokeOptions();\n const ls = LineString3d.create();\n bcurve.emitStrokes(ls, this._strokeOptions);\n this.handleLineString3d(ls);\n }\n\n private _sineCosinePolynomial?: SineCosinePolynomial;\n\n private _workPoint?: Point3d;\n\n public override handleArc3d(g: Arc3d) {\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\n if (g.sweep.isRadiansInSweep(radians))\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\n radians += Math.PI;\n if (g.sweep.isRadiansInSweep(radians))\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\n }\n\n private static findExtremesInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d\n ): PlaneAltitudeRangeContext | undefined {\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\n const vector = direction instanceof Ray3d ? direction.direction : direction;\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\n if (plane) {\n const context = new PlaneAltitudeRangeContext(plane);\n if (geometry instanceof GeometryQuery) {\n geometry.dispatchToGeometryHandler(context);\n } else if (geometry instanceof GrowableXYZArray) {\n context.announcePoints(geometry);\n } else {\n for (const pt of geometry)\n context.announcePoint(pt);\n }\n return context;\n }\n return undefined;\n }\n /**\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and\n * return points at min and max altitude, packed into a `LineSegment3d`.\n * @param geometry geometry to project\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremePointsInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d\n ): LineSegment3d | undefined {\n const context = this.findExtremesInDirection(geometry, direction);\n if (context && context.highPoint && context.lowPoint)\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\n return undefined;\n }\n\n /**\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return\n * the min and max altitudes, packed into a Range1d.\n * @param geometry geometry to project\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremeAltitudesInDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\n ): Range1d | undefined {\n const context = this.findExtremesInDirection(geometry, direction);\n if (context && !context.range.isNull)\n return Range1d.createFrom(context.range, lowHigh);\n return undefined;\n }\n\n /**\n * Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\n * @param geometry geometry to project\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with\n * zero origin.\n * @param lowHigh optional receiver for output\n */\n public static findExtremeFractionsAlongDirection(\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\n ): Range1d | undefined {\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\n if (undefined !== range) {\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\n if (undefined !== scaleToFraction) {\n range.low *= scaleToFraction;\n range.high *= scaleToFraction;\n return range;\n }\n }\n return undefined;\n }\n}\n"]}