@itwin/core-geometry 5.0.0-dev.99 → 5.1.0-dev.0

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 (522) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/Constant.js.map +1 -1
  3. package/lib/cjs/Geometry.d.ts +11 -0
  4. package/lib/cjs/Geometry.d.ts.map +1 -1
  5. package/lib/cjs/Geometry.js +14 -0
  6. package/lib/cjs/Geometry.js.map +1 -1
  7. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  8. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  12. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  13. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  16. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  17. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  18. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  19. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  20. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  22. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  23. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  24. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  25. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  26. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  27. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  28. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  29. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  30. package/lib/cjs/core-geometry.js.map +1 -1
  31. package/lib/cjs/curve/Arc3d.d.ts +3 -1
  32. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  33. package/lib/cjs/curve/Arc3d.js +36 -0
  34. package/lib/cjs/curve/Arc3d.js.map +1 -1
  35. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  36. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  37. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  38. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  39. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  40. package/lib/cjs/curve/CurveExtendMode.d.ts +13 -5
  41. package/lib/cjs/curve/CurveExtendMode.d.ts.map +1 -1
  42. package/lib/cjs/curve/CurveExtendMode.js +19 -15
  43. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  44. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  45. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  46. package/lib/cjs/curve/CurveOps.js.map +1 -1
  47. package/lib/cjs/curve/CurvePrimitive.d.ts +67 -8
  48. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  49. package/lib/cjs/curve/CurvePrimitive.js +59 -6
  50. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  51. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  52. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  53. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  54. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  55. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  56. package/lib/cjs/curve/LineString3d.d.ts +8 -7
  57. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  58. package/lib/cjs/curve/LineString3d.js +25 -22
  59. package/lib/cjs/curve/LineString3d.js.map +1 -1
  60. package/lib/cjs/curve/Loop.js.map +1 -1
  61. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  62. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  63. package/lib/cjs/curve/Path.js.map +1 -1
  64. package/lib/cjs/curve/PointString3d.js.map +1 -1
  65. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  66. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  67. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  68. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  69. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  70. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  71. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  72. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  73. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  74. package/lib/cjs/curve/RegionOps.js.map +1 -1
  75. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  76. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  77. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +71 -0
  79. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -0
  80. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js +181 -0
  81. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -0
  82. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  83. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  84. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  85. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  86. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +21 -5
  87. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  88. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +42 -17
  89. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  90. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  91. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  92. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  93. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  94. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  95. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  96. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  97. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  98. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  99. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +5 -3
  100. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -1
  101. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +5 -3
  102. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  103. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  104. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  105. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  106. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  107. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  108. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  109. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  110. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  111. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  112. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  113. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  114. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  115. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  116. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  117. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  118. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  119. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  120. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  121. package/lib/cjs/geometry3d/AngleSweep.d.ts +1 -1
  122. package/lib/cjs/geometry3d/AngleSweep.js +8 -8
  123. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  124. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  125. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  126. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  127. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  128. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  129. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  130. package/lib/cjs/geometry3d/GeometryHandler.d.ts +15 -16
  131. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  132. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  133. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  134. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  135. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  136. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  137. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  138. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  139. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  140. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  141. package/lib/cjs/geometry3d/Matrix3d.d.ts +10 -11
  142. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  143. package/lib/cjs/geometry3d/Matrix3d.js +11 -12
  144. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  145. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  146. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  147. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  148. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  149. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  150. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  151. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  152. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  153. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  154. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  155. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  156. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  157. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  158. package/lib/cjs/geometry3d/Range.js.map +1 -1
  159. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  160. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  161. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  162. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  163. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  164. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  165. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  166. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  167. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  168. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  169. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  170. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  171. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  172. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  173. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  174. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  175. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  176. package/lib/cjs/numerics/Complex.js.map +1 -1
  177. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  178. package/lib/cjs/numerics/Newton.js.map +1 -1
  179. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  180. package/lib/cjs/numerics/PolarData.js.map +1 -1
  181. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  182. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  183. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  184. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  185. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  186. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  187. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  188. package/lib/cjs/polyface/AuxData.js.map +1 -1
  189. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  190. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  191. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  192. package/lib/cjs/polyface/FacetOrientation.js +1 -1
  193. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  194. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  195. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  196. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  197. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
  198. package/lib/cjs/polyface/Polyface.js.map +1 -1
  199. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  200. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  201. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  202. package/lib/cjs/polyface/PolyfaceData.js +2 -0
  203. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  204. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  205. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  206. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  207. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  208. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  209. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  210. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  211. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  212. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  213. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  214. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  215. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  216. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  217. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  218. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  219. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  220. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  221. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  222. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  223. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  224. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  225. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  226. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  227. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  228. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  229. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  230. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  231. package/lib/cjs/solid/Box.js.map +1 -1
  232. package/lib/cjs/solid/Cone.js.map +1 -1
  233. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  234. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  235. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  236. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  237. package/lib/cjs/solid/Sphere.js.map +1 -1
  238. package/lib/cjs/solid/SweepContour.js.map +1 -1
  239. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  240. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  241. package/lib/cjs/topology/Graph.js.map +1 -1
  242. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  243. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  244. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  245. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  246. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  247. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  248. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  249. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  250. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  251. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  252. package/lib/cjs/topology/MaskManager.js.map +1 -1
  253. package/lib/cjs/topology/Merging.js.map +1 -1
  254. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  255. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  256. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  257. package/lib/cjs/topology/Triangulation.d.ts +3 -3
  258. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  259. package/lib/cjs/topology/Triangulation.js +7 -7
  260. package/lib/cjs/topology/Triangulation.js.map +1 -1
  261. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  262. package/lib/esm/Constant.js.map +1 -1
  263. package/lib/esm/Geometry.d.ts +11 -0
  264. package/lib/esm/Geometry.d.ts.map +1 -1
  265. package/lib/esm/Geometry.js +14 -0
  266. package/lib/esm/Geometry.js.map +1 -1
  267. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  268. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  269. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  270. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  271. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  272. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  273. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  274. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  275. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  276. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  277. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  278. package/lib/esm/bspline/KnotVector.js.map +1 -1
  279. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  280. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  281. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  282. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  283. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  284. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  285. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  286. package/lib/esm/clipping/ClipVector.js.map +1 -1
  287. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  288. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  289. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  290. package/lib/esm/core-geometry.js.map +1 -1
  291. package/lib/esm/curve/Arc3d.d.ts +3 -1
  292. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  293. package/lib/esm/curve/Arc3d.js +36 -0
  294. package/lib/esm/curve/Arc3d.js.map +1 -1
  295. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  296. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  297. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  298. package/lib/esm/curve/CurveCollection.js.map +1 -1
  299. package/lib/esm/curve/CurveCurve.js.map +1 -1
  300. package/lib/esm/curve/CurveExtendMode.d.ts +13 -5
  301. package/lib/esm/curve/CurveExtendMode.d.ts.map +1 -1
  302. package/lib/esm/curve/CurveExtendMode.js +19 -15
  303. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  304. package/lib/esm/curve/CurveFactory.js.map +1 -1
  305. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  306. package/lib/esm/curve/CurveOps.js.map +1 -1
  307. package/lib/esm/curve/CurvePrimitive.d.ts +67 -8
  308. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  309. package/lib/esm/curve/CurvePrimitive.js +59 -6
  310. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  311. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  312. package/lib/esm/curve/CurveTypes.js.map +1 -1
  313. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  314. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  315. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  316. package/lib/esm/curve/LineString3d.d.ts +8 -7
  317. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  318. package/lib/esm/curve/LineString3d.js +25 -22
  319. package/lib/esm/curve/LineString3d.js.map +1 -1
  320. package/lib/esm/curve/Loop.js.map +1 -1
  321. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  322. package/lib/esm/curve/ParityRegion.js.map +1 -1
  323. package/lib/esm/curve/Path.js.map +1 -1
  324. package/lib/esm/curve/PointString3d.js.map +1 -1
  325. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  326. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  327. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  328. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  329. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  330. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  331. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  332. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  333. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  334. package/lib/esm/curve/RegionOps.js.map +1 -1
  335. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  336. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  337. package/lib/esm/curve/UnionRegion.js.map +1 -1
  338. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +71 -0
  339. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -0
  340. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js +177 -0
  341. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -0
  342. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  343. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  344. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  345. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  346. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +21 -5
  347. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  348. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +42 -17
  349. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  350. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  351. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  352. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  353. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  354. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  355. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  356. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  357. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  358. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  359. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +5 -3
  360. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -1
  361. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +5 -3
  362. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  363. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  364. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  365. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  366. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  367. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  368. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  369. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  370. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  371. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  372. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  373. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  374. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  375. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  376. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  377. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  378. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  379. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  380. package/lib/esm/geometry3d/Angle.js.map +1 -1
  381. package/lib/esm/geometry3d/AngleSweep.d.ts +1 -1
  382. package/lib/esm/geometry3d/AngleSweep.js +8 -8
  383. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  384. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  385. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  386. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  387. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  388. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  389. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  390. package/lib/esm/geometry3d/GeometryHandler.d.ts +15 -16
  391. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  392. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  393. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  394. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  395. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  396. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  397. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  398. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  399. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  400. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  401. package/lib/esm/geometry3d/Matrix3d.d.ts +10 -11
  402. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  403. package/lib/esm/geometry3d/Matrix3d.js +11 -12
  404. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  405. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  406. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  407. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  408. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  409. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  410. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  411. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  412. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  413. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  414. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  415. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  416. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  417. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  418. package/lib/esm/geometry3d/Range.js.map +1 -1
  419. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  420. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  421. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  422. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  423. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  424. package/lib/esm/geometry3d/Transform.js.map +1 -1
  425. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  426. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  427. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  428. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  429. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  430. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  431. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  432. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  433. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  434. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  435. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  436. package/lib/esm/numerics/Complex.js.map +1 -1
  437. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  438. package/lib/esm/numerics/Newton.js.map +1 -1
  439. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  440. package/lib/esm/numerics/PolarData.js.map +1 -1
  441. package/lib/esm/numerics/Polynomials.js.map +1 -1
  442. package/lib/esm/numerics/Quadrature.js.map +1 -1
  443. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  444. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  445. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  446. package/lib/esm/numerics/UnionFind.js.map +1 -1
  447. package/lib/esm/numerics/UsageSums.js.map +1 -1
  448. package/lib/esm/polyface/AuxData.js.map +1 -1
  449. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  450. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  451. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  452. package/lib/esm/polyface/FacetOrientation.js +1 -1
  453. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  454. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  455. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  456. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  457. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
  458. package/lib/esm/polyface/Polyface.js.map +1 -1
  459. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  460. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  461. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  462. package/lib/esm/polyface/PolyfaceData.js +2 -0
  463. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  464. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  465. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  466. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  467. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  468. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  469. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  470. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  471. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  472. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  473. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  474. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  475. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  476. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  477. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  478. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  479. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  480. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  481. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  482. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  483. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  484. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  485. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  486. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  487. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  488. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  489. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  490. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  491. package/lib/esm/solid/Box.js.map +1 -1
  492. package/lib/esm/solid/Cone.js.map +1 -1
  493. package/lib/esm/solid/LinearSweep.js.map +1 -1
  494. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  495. package/lib/esm/solid/RuledSweep.js.map +1 -1
  496. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  497. package/lib/esm/solid/Sphere.js.map +1 -1
  498. package/lib/esm/solid/SweepContour.js.map +1 -1
  499. package/lib/esm/solid/TorusPipe.js.map +1 -1
  500. package/lib/esm/topology/ChainMerge.js.map +1 -1
  501. package/lib/esm/topology/Graph.js.map +1 -1
  502. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  503. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  504. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  505. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  506. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  507. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  508. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  509. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  510. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  511. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  512. package/lib/esm/topology/MaskManager.js.map +1 -1
  513. package/lib/esm/topology/Merging.js.map +1 -1
  514. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  515. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  516. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  517. package/lib/esm/topology/Triangulation.d.ts +3 -3
  518. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  519. package/lib/esm/topology/Triangulation.js +7 -7
  520. package/lib/esm/topology/Triangulation.js.map +1 -1
  521. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  522. package/package.json +3 -3
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { IStrokeHandler } from "../../geometry3d/GeometryHandler";
5
5
  import { Point3d, Vector3d } from "../../geometry3d/Point3dVector3d";
6
- import { Ray3d } from "../../geometry3d/Ray3d";
7
6
  import { VariantCurveExtendParameter } from "../CurveExtendMode";
8
7
  import { CurveLocationDetail } from "../CurveLocationDetail";
9
8
  import { CurvePrimitive } from "../CurvePrimitive";
@@ -19,13 +18,14 @@ export declare class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler i
19
18
  private _extend;
20
19
  private _fractionA;
21
20
  private _functionA;
22
- private _functionB;
23
21
  private _fractionB;
22
+ private _functionB;
24
23
  private _numThisCurve;
25
24
  private _workPoint;
26
25
  private _workRay;
27
26
  private _newtonSolver;
28
- constructor(spacePoint: Point3d, extend: VariantCurveExtendParameter, result?: CurveLocationDetail);
27
+ /** Constructor */
28
+ constructor(spacePoint: Point3d, extend?: VariantCurveExtendParameter, result?: CurveLocationDetail);
29
29
  claimResult(): CurveLocationDetail | undefined;
30
30
  needPrimaryGeometryForStrokes(): boolean;
31
31
  startCurvePrimitive(curve: CurvePrimitive | undefined): void;
@@ -33,11 +33,27 @@ export declare class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler i
33
33
  announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void;
34
34
  private announceCandidate;
35
35
  announceSegmentInterval(cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number): void;
36
+ /**
37
+ * Given a function `f` and (unordered) fractions `a` and `b`, search for and announce a root of `f` in this
38
+ * fractional interval.
39
+ * * This method searches for a root of `f` if and only if the stroke segment defined by `(a, f(a))` and
40
+ * `(b, f(b))` has a root. This is a HEURISTIC: given continuous `f` between `a` and `b`, a root of the stroke
41
+ * segment implies a root of `f`, but not vice-versa. Therefore, if the strokes are not sufficiently dense,
42
+ * this method can miss a root of `f`.
43
+ */
36
44
  private searchInterval;
37
- private evaluateB;
38
45
  private announceSolutionFraction;
46
+ /**
47
+ * Evaluate the univariate real-valued function for which we are finding roots.
48
+ * * For finding the closest point to curve X from point Q, this function is `f(t) := Q-X(t) dot X'(t)`.
49
+ * * Either `pointAndDerivative` must be defined, or both `fraction` and `curve`.
50
+ * @param pointAndDerivative pre-evaluated curve
51
+ * @param fraction fraction at which to evaluate `curve`
52
+ * @param curve curve to evaluate at `fraction`
53
+ */
54
+ private evaluateFunction;
39
55
  evaluate(fraction: number): boolean;
40
- announceRay(fraction: number, data: Ray3d): void;
56
+ private announceRay;
41
57
  announcePointTangent(point: Point3d, fraction: number, tangent: Vector3d): void;
42
58
  }
43
59
  //# sourceMappingURL=ClosestPointStrokeHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClosestPointStrokeHandler.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ClosestPointStrokeHandler.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAsB,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,uBAAwB,YAAW,cAAc;IAC9F,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAa;IAElC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAyC;gBAE3C,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,CAAC,EAAE,mBAAmB;IAWlG,WAAW,IAAI,mBAAmB,GAAG,SAAS;IAa9C,6BAA6B;IAI7B,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IAOrD,iBAAiB;IAGjB,qCAAqC,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAahI,OAAO,CAAC,iBAAiB;IAUlB,uBAAuB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBrJ,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,wBAAwB;IAKzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYnC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI;IAOhD,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;CAIhF"}
1
+ {"version":3,"file":"ClosestPointStrokeHandler.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ClosestPointStrokeHandler.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAsB,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,uBAAwB,YAAW,cAAc;IAC9F,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAA8B;IAE7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAa;IAElC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAyC;IAC9D,kBAAkB;gBACC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,2BAA2B,EAAE,MAAM,CAAC,EAAE,mBAAmB;IAUnG,WAAW,IAAI,mBAAmB,GAAG,SAAS;IAY9C,6BAA6B;IAG7B,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IAMrD,iBAAiB;IAEjB,qCAAqC,CAC1C,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAC3E,IAAI;IAaP,OAAO,CAAC,iBAAiB;IASlB,uBAAuB,CAC5B,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAC9G,IAAI;IAeP;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,wBAAwB;IAIhC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IASjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAU1C,OAAO,CAAC,WAAW;IAQZ,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;CAIhF"}
@@ -21,22 +21,25 @@ export class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler {
21
21
  _closestPoint;
22
22
  _spacePoint;
23
23
  _extend;
24
+ // fraction and function value on one side of an interval that may bracket a root
24
25
  _fractionA = 0;
25
26
  _functionA = 0;
26
- _functionB = 0;
27
+ // fraction and function value on the other side of an interval that may bracket a root
27
28
  _fractionB = 0;
29
+ _functionB = 0;
28
30
  _numThisCurve = 0;
29
- // scratch vars for use within methods.
31
+ // scratch vars to use within methods
30
32
  _workPoint;
31
33
  _workRay;
32
34
  _newtonSolver;
35
+ /** Constructor */
33
36
  constructor(spacePoint, extend, result) {
34
37
  super();
35
38
  this._spacePoint = spacePoint;
36
39
  this._workPoint = Point3d.create();
37
40
  this._workRay = Ray3d.createZero();
38
41
  this._closestPoint = result;
39
- this._extend = extend;
42
+ this._extend = extend ?? false;
40
43
  this.startCurvePrimitive(undefined);
41
44
  this._newtonSolver = new Newton1dUnboundedApproximateDerivative(this);
42
45
  }
@@ -87,7 +90,7 @@ export class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler {
87
90
  }
88
91
  announceSegmentInterval(cp, point0, point1, _numStrokes, fraction0, fraction1) {
89
92
  let localFraction = this._spacePoint.fractionOfProjectionToLine(point0, point1, 0.0);
90
- // only consider extending the segment if the immediate caller says we are at endpoints ...
93
+ // only consider extending the segment if the immediate caller says we are at endpoints
91
94
  if (!this._extend)
92
95
  localFraction = Geometry.clampToStartEnd(localFraction, 0.0, 1.0);
93
96
  else {
@@ -100,13 +103,22 @@ export class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler {
100
103
  const globalFraction = Geometry.interpolate(fraction0, localFraction, fraction1);
101
104
  this.announceCandidate(cp, globalFraction, this._workPoint);
102
105
  }
106
+ /**
107
+ * Given a function `f` and (unordered) fractions `a` and `b`, search for and announce a root of `f` in this
108
+ * fractional interval.
109
+ * * This method searches for a root of `f` if and only if the stroke segment defined by `(a, f(a))` and
110
+ * `(b, f(b))` has a root. This is a HEURISTIC: given continuous `f` between `a` and `b`, a root of the stroke
111
+ * segment implies a root of `f`, but not vice-versa. Therefore, if the strokes are not sufficiently dense,
112
+ * this method can miss a root of `f`.
113
+ */
103
114
  searchInterval() {
104
115
  if (this._functionA * this._functionB > 0)
105
- return;
116
+ return; // stroke segment has no root; ASSUME the function has no root either
106
117
  if (this._functionA === 0)
107
118
  this.announceSolutionFraction(this._fractionA);
108
119
  if (this._functionB === 0)
109
120
  this.announceSolutionFraction(this._fractionB);
121
+ // by the Intermediate Value Theorem, a root lies between fractionA and fractionB; use Newton to find it.
110
122
  if (this._functionA * this._functionB < 0) {
111
123
  const fraction = Geometry.inverseInterpolate(this._fractionA, this._functionA, this._fractionB, this._functionB);
112
124
  if (fraction) {
@@ -116,28 +128,41 @@ export class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler {
116
128
  }
117
129
  }
118
130
  }
119
- evaluateB(fractionB, dataB) {
120
- this._functionB = dataB.dotProductToPoint(this._spacePoint);
121
- this._fractionB = fractionB;
122
- }
123
131
  announceSolutionFraction(fraction) {
124
132
  if (this._curve)
125
133
  this.announceCandidate(this._curve, fraction, this._curve.fractionToPoint(fraction));
126
134
  }
135
+ /**
136
+ * Evaluate the univariate real-valued function for which we are finding roots.
137
+ * * For finding the closest point to curve X from point Q, this function is `f(t) := Q-X(t) dot X'(t)`.
138
+ * * Either `pointAndDerivative` must be defined, or both `fraction` and `curve`.
139
+ * @param pointAndDerivative pre-evaluated curve
140
+ * @param fraction fraction at which to evaluate `curve`
141
+ * @param curve curve to evaluate at `fraction`
142
+ */
143
+ evaluateFunction(pointAndDerivative, fraction, curve) {
144
+ if (pointAndDerivative)
145
+ this._workRay.setFrom(pointAndDerivative);
146
+ else if (fraction !== undefined && curve)
147
+ this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);
148
+ else
149
+ return undefined;
150
+ return this._workRay.dotProductToPoint(this._spacePoint);
151
+ }
127
152
  evaluate(fraction) {
128
153
  let curve = this._curve;
129
154
  if (this._parentCurvePrimitive)
130
155
  curve = this._parentCurvePrimitive;
131
- if (curve) {
132
- this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);
133
- this.currentF = this._workRay.dotProductToPoint(this._spacePoint);
134
- return true;
135
- }
136
- return false;
156
+ const value = this.evaluateFunction(undefined, fraction, curve);
157
+ if (value === undefined)
158
+ return false;
159
+ this.currentF = value;
160
+ return true;
137
161
  }
138
162
  announceRay(fraction, data) {
139
- this.evaluateB(fraction, data);
140
- if (this._numThisCurve++ > 0)
163
+ this._functionB = this.evaluateFunction(data);
164
+ this._fractionB = fraction;
165
+ if (this._numThisCurve++ > 0) // after the first stroke point, a stroke segment is defined, so we have an interval
141
166
  this.searchInterval();
142
167
  this._functionA = this._functionB;
143
168
  this._fractionA = this._fractionB;
@@ -1 +1 @@
1
- {"version":3,"file":"ClosestPointStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ClosestPointStrokeHandler.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 { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { Newton1dUnboundedApproximateDerivative } from \"../../numerics/Newton\";\nimport { CurveExtendOptions, VariantCurveExtendParameter } from \"../CurveExtendMode\";\nimport { CurveLocationDetail } from \"../CurveLocationDetail\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { NewtonRtoRStrokeHandler } from \"./NewtonRtoRStrokeHandler\";\n\n/**\n * Context for searching for the closest point to a CurvePrimitive.\n * @internal\n */\nexport class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler implements IStrokeHandler {\n private _curve: CurvePrimitive | undefined;\n private _closestPoint: CurveLocationDetail | undefined;\n private _spacePoint: Point3d;\n private _extend: VariantCurveExtendParameter;\n private _fractionA: number = 0;\n private _functionA: number = 0;\n private _functionB: number = 0;\n private _fractionB: number = 0;\n private _numThisCurve: number = 0;\n // scratch vars for use within methods.\n private _workPoint: Point3d;\n private _workRay: Ray3d;\n private _newtonSolver: Newton1dUnboundedApproximateDerivative;\n\n public constructor(spacePoint: Point3d, extend: VariantCurveExtendParameter, result?: CurveLocationDetail) {\n super();\n this._spacePoint = spacePoint;\n this._workPoint = Point3d.create();\n this._workRay = Ray3d.createZero();\n this._closestPoint = result;\n this._extend = extend;\n this.startCurvePrimitive(undefined);\n this._newtonSolver = new Newton1dUnboundedApproximateDerivative(this);\n }\n\n public claimResult(): CurveLocationDetail | undefined {\n if (this._closestPoint) {\n this._newtonSolver.setX(this._closestPoint.fraction);\n this._curve = this._closestPoint.curve;\n if (this._newtonSolver.runIterations()) {\n let fraction = this._newtonSolver.getX();\n fraction = CurveExtendOptions.correctFraction(this._extend, fraction);\n this.announceSolutionFraction(fraction);\n }\n }\n return this._closestPoint;\n }\n\n public needPrimaryGeometryForStrokes() {\n return true;\n }\n\n public startCurvePrimitive(curve: CurvePrimitive | undefined) {\n this._curve = curve;\n this._fractionA = 0.0;\n this._numThisCurve = 0;\n this._functionA = 0.0;\n }\n\n public endCurvePrimitive() {\n }\n\n public announceIntervalForUniformStepStrokes(cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number): void {\n this.startCurvePrimitive(cp);\n this.announceSolutionFraction(0.0); // test start point as closest\n this.announceSolutionFraction(1.0); // test end point as closest\n if (numStrokes < 1) numStrokes = 1;\n const df = 1.0 / numStrokes;\n for (let i = 0; i <= numStrokes; i++) {\n const fraction = Geometry.interpolate(fraction0, i * df, fraction1);\n cp.fractionToPointAndDerivative(fraction, this._workRay);\n this.announceRay(fraction, this._workRay);\n }\n }\n\n private announceCandidate(cp: CurvePrimitive, fraction: number, point: Point3d) {\n const distance = this._spacePoint.distance(point);\n if (this._closestPoint && distance > this._closestPoint.a)\n return;\n this._closestPoint = CurveLocationDetail.createCurveFractionPoint(cp, fraction, point, this._closestPoint);\n this._closestPoint.a = distance;\n if (this._parentCurvePrimitive !== undefined)\n this._closestPoint.curve = this._parentCurvePrimitive;\n }\n\n public announceSegmentInterval(cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number): void {\n let localFraction = this._spacePoint.fractionOfProjectionToLine(point0, point1, 0.0);\n // only consider extending the segment if the immediate caller says we are at endpoints ...\n if (!this._extend)\n localFraction = Geometry.clampToStartEnd(localFraction, 0.0, 1.0);\n else {\n if (fraction0 !== 0.0)\n localFraction = Math.max(localFraction, 0.0);\n if (fraction1 !== 1.0)\n localFraction = Math.min(localFraction, 1.0);\n }\n this._workPoint = point0.interpolate(localFraction, point1);\n const globalFraction = Geometry.interpolate(fraction0, localFraction, fraction1);\n this.announceCandidate(cp, globalFraction, this._workPoint);\n }\n\n private searchInterval() {\n if (this._functionA * this._functionB > 0) return;\n if (this._functionA === 0) this.announceSolutionFraction(this._fractionA);\n if (this._functionB === 0) this.announceSolutionFraction(this._fractionB);\n if (this._functionA * this._functionB < 0) {\n const fraction = Geometry.inverseInterpolate(this._fractionA, this._functionA, this._fractionB, this._functionB);\n if (fraction) {\n this._newtonSolver.setX(fraction);\n if (this._newtonSolver.runIterations())\n this.announceSolutionFraction(this._newtonSolver.getX());\n }\n }\n }\n\n private evaluateB(fractionB: number, dataB: Ray3d) {\n this._functionB = dataB.dotProductToPoint(this._spacePoint);\n this._fractionB = fractionB;\n }\n\n private announceSolutionFraction(fraction: number) {\n if (this._curve)\n this.announceCandidate(this._curve, fraction, this._curve.fractionToPoint(fraction));\n }\n\n public evaluate(fraction: number): boolean {\n let curve = this._curve;\n if (this._parentCurvePrimitive)\n curve = this._parentCurvePrimitive;\n if (curve) {\n this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);\n this.currentF = this._workRay.dotProductToPoint(this._spacePoint);\n return true;\n }\n return false;\n }\n\n public announceRay(fraction: number, data: Ray3d): void {\n this.evaluateB(fraction, data);\n if (this._numThisCurve++ > 0) this.searchInterval();\n this._functionA = this._functionB;\n this._fractionA = this._fractionB;\n }\n\n public announcePointTangent(point: Point3d, fraction: number, tangent: Vector3d) {\n this._workRay.set(point, tangent);\n this.announceRay(fraction, this._workRay);\n }\n}\n"]}
1
+ {"version":3,"file":"ClosestPointStrokeHandler.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/ClosestPointStrokeHandler.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAY,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,sCAAsC,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAA+B,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,uBAAuB;IAC5D,MAAM,CAA6B;IACnC,aAAa,CAAkC;IAC/C,WAAW,CAAU;IACrB,OAAO,CAA8B;IAC7C,iFAAiF;IACzE,UAAU,GAAW,CAAC,CAAC;IACvB,UAAU,GAAW,CAAC,CAAC;IAC/B,uFAAuF;IAC/E,UAAU,GAAW,CAAC,CAAC;IACvB,UAAU,GAAW,CAAC,CAAC;IACvB,aAAa,GAAW,CAAC,CAAC;IAClC,qCAAqC;IAC7B,UAAU,CAAU;IACpB,QAAQ,CAAQ;IAChB,aAAa,CAAyC;IAC9D,kBAAkB;IAClB,YAAmB,UAAmB,EAAE,MAAoC,EAAE,MAA4B;QACxG,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC;QAC/B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,sCAAsC,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IACM,WAAW;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACvC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;gBACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBACzC,QAAQ,GAAG,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACtE,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACM,6BAA6B;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACM,mBAAmB,CAAC,KAAiC;QAC1D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACxB,CAAC;IACM,iBAAiB;IACxB,CAAC;IACM,qCAAqC,CAC1C,EAAkB,EAAE,UAAkB,EAAE,SAAiB,EAAE,SAAiB;QAE5E,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B;QAClE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,4BAA4B;QAChE,IAAI,UAAU,GAAG,CAAC;YAChB,UAAU,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,GAAG,GAAG,UAAU,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;YACpE,EAAE,CAAC,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACO,iBAAiB,CAAC,EAAkB,EAAE,QAAgB,EAAE,KAAc;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,aAAa,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,OAAO;QACT,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3G,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,CAAC;QAChC,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS;YAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC;IAC1D,CAAC;IACM,uBAAuB,CAC5B,EAAkB,EAAE,MAAe,EAAE,MAAe,EAAE,WAAmB,EAAE,SAAiB,EAAE,SAAiB;QAE/G,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QACrF,uFAAuF;QACvF,IAAI,CAAC,IAAI,CAAC,OAAO;YACf,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aAC/D,CAAC;YACJ,IAAI,SAAS,KAAK,GAAG;gBACnB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,SAAS,KAAK,GAAG;gBACnB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IACD;;;;;;;OAOG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;YACvC,OAAO,CAAC,qEAAqE;QAC/E,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACvB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YACvB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,yGAAyG;QACzG,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjH,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;oBACpC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACO,wBAAwB,CAAC,QAAgB;QAC/C,IAAI,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzF,CAAC;IACD;;;;;;;OAOG;IACK,gBAAgB,CAAC,kBAA0B,EAAE,QAAiB,EAAE,KAAsB;QAC5F,IAAI,kBAAkB;YACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;aACvC,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK;YACtC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;YAE5E,OAAO,SAAS,CAAC;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;IACM,QAAQ,CAAC,QAAgB;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,IAAI,CAAC,qBAAqB;YAC5B,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChE,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,KAAK,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACO,WAAW,CAAC,QAAgB,EAAE,IAAW;QAC/C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,oFAAoF;YAChH,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IACM,oBAAoB,CAAC,KAAc,EAAE,QAAgB,EAAE,OAAiB;QAC7E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { IStrokeHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { Newton1dUnboundedApproximateDerivative } from \"../../numerics/Newton\";\r\nimport { CurveExtendOptions, VariantCurveExtendParameter } from \"../CurveExtendMode\";\r\nimport { CurveLocationDetail } from \"../CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { NewtonRtoRStrokeHandler } from \"./NewtonRtoRStrokeHandler\";\r\n\r\n/**\r\n * Context for searching for the closest point to a CurvePrimitive.\r\n * @internal\r\n */\r\nexport class ClosestPointStrokeHandler extends NewtonRtoRStrokeHandler implements IStrokeHandler {\r\n private _curve: CurvePrimitive | undefined;\r\n private _closestPoint: CurveLocationDetail | undefined;\r\n private _spacePoint: Point3d;\r\n private _extend: VariantCurveExtendParameter;\r\n // fraction and function value on one side of an interval that may bracket a root\r\n private _fractionA: number = 0;\r\n private _functionA: number = 0;\r\n // fraction and function value on the other side of an interval that may bracket a root\r\n private _fractionB: number = 0;\r\n private _functionB: number = 0;\r\n private _numThisCurve: number = 0;\r\n // scratch vars to use within methods\r\n private _workPoint: Point3d;\r\n private _workRay: Ray3d;\r\n private _newtonSolver: Newton1dUnboundedApproximateDerivative;\r\n /** Constructor */\r\n public constructor(spacePoint: Point3d, extend?: VariantCurveExtendParameter, result?: CurveLocationDetail) {\r\n super();\r\n this._spacePoint = spacePoint;\r\n this._workPoint = Point3d.create();\r\n this._workRay = Ray3d.createZero();\r\n this._closestPoint = result;\r\n this._extend = extend ?? false;\r\n this.startCurvePrimitive(undefined);\r\n this._newtonSolver = new Newton1dUnboundedApproximateDerivative(this);\r\n }\r\n public claimResult(): CurveLocationDetail | undefined {\r\n if (this._closestPoint) {\r\n this._newtonSolver.setX(this._closestPoint.fraction);\r\n this._curve = this._closestPoint.curve;\r\n if (this._newtonSolver.runIterations()) {\r\n let fraction = this._newtonSolver.getX();\r\n fraction = CurveExtendOptions.correctFraction(this._extend, fraction);\r\n this.announceSolutionFraction(fraction);\r\n }\r\n }\r\n return this._closestPoint;\r\n }\r\n public needPrimaryGeometryForStrokes() {\r\n return true;\r\n }\r\n public startCurvePrimitive(curve: CurvePrimitive | undefined) {\r\n this._curve = curve;\r\n this._fractionA = 0.0;\r\n this._numThisCurve = 0;\r\n this._functionA = 0.0;\r\n }\r\n public endCurvePrimitive() {\r\n }\r\n public announceIntervalForUniformStepStrokes(\r\n cp: CurvePrimitive, numStrokes: number, fraction0: number, fraction1: number,\r\n ): void {\r\n this.startCurvePrimitive(cp);\r\n this.announceSolutionFraction(0.0); // test start point as closest\r\n this.announceSolutionFraction(1.0); // test end point as closest\r\n if (numStrokes < 1)\r\n numStrokes = 1;\r\n const df = 1.0 / numStrokes;\r\n for (let i = 0; i <= numStrokes; i++) {\r\n const fraction = Geometry.interpolate(fraction0, i * df, fraction1);\r\n cp.fractionToPointAndDerivative(fraction, this._workRay);\r\n this.announceRay(fraction, this._workRay);\r\n }\r\n }\r\n private announceCandidate(cp: CurvePrimitive, fraction: number, point: Point3d) {\r\n const distance = this._spacePoint.distance(point);\r\n if (this._closestPoint && distance > this._closestPoint.a)\r\n return;\r\n this._closestPoint = CurveLocationDetail.createCurveFractionPoint(cp, fraction, point, this._closestPoint);\r\n this._closestPoint.a = distance;\r\n if (this._parentCurvePrimitive !== undefined)\r\n this._closestPoint.curve = this._parentCurvePrimitive;\r\n }\r\n public announceSegmentInterval(\r\n cp: CurvePrimitive, point0: Point3d, point1: Point3d, _numStrokes: number, fraction0: number, fraction1: number,\r\n ): void {\r\n let localFraction = this._spacePoint.fractionOfProjectionToLine(point0, point1, 0.0);\r\n // only consider extending the segment if the immediate caller says we are at endpoints\r\n if (!this._extend)\r\n localFraction = Geometry.clampToStartEnd(localFraction, 0.0, 1.0);\r\n else {\r\n if (fraction0 !== 0.0)\r\n localFraction = Math.max(localFraction, 0.0);\r\n if (fraction1 !== 1.0)\r\n localFraction = Math.min(localFraction, 1.0);\r\n }\r\n this._workPoint = point0.interpolate(localFraction, point1);\r\n const globalFraction = Geometry.interpolate(fraction0, localFraction, fraction1);\r\n this.announceCandidate(cp, globalFraction, this._workPoint);\r\n }\r\n /**\r\n * Given a function `f` and (unordered) fractions `a` and `b`, search for and announce a root of `f` in this\r\n * fractional interval.\r\n * * This method searches for a root of `f` if and only if the stroke segment defined by `(a, f(a))` and\r\n * `(b, f(b))` has a root. This is a HEURISTIC: given continuous `f` between `a` and `b`, a root of the stroke\r\n * segment implies a root of `f`, but not vice-versa. Therefore, if the strokes are not sufficiently dense,\r\n * this method can miss a root of `f`.\r\n */\r\n private searchInterval() {\r\n if (this._functionA * this._functionB > 0)\r\n return; // stroke segment has no root; ASSUME the function has no root either\r\n if (this._functionA === 0)\r\n this.announceSolutionFraction(this._fractionA);\r\n if (this._functionB === 0)\r\n this.announceSolutionFraction(this._fractionB);\r\n // by the Intermediate Value Theorem, a root lies between fractionA and fractionB; use Newton to find it.\r\n if (this._functionA * this._functionB < 0) {\r\n const fraction = Geometry.inverseInterpolate(this._fractionA, this._functionA, this._fractionB, this._functionB);\r\n if (fraction) {\r\n this._newtonSolver.setX(fraction);\r\n if (this._newtonSolver.runIterations())\r\n this.announceSolutionFraction(this._newtonSolver.getX());\r\n }\r\n }\r\n }\r\n private announceSolutionFraction(fraction: number) {\r\n if (this._curve)\r\n this.announceCandidate(this._curve, fraction, this._curve.fractionToPoint(fraction));\r\n }\r\n /**\r\n * Evaluate the univariate real-valued function for which we are finding roots.\r\n * * For finding the closest point to curve X from point Q, this function is `f(t) := Q-X(t) dot X'(t)`.\r\n * * Either `pointAndDerivative` must be defined, or both `fraction` and `curve`.\r\n * @param pointAndDerivative pre-evaluated curve\r\n * @param fraction fraction at which to evaluate `curve`\r\n * @param curve curve to evaluate at `fraction`\r\n */\r\n private evaluateFunction(pointAndDerivative?: Ray3d, fraction?: number, curve?: CurvePrimitive): number | undefined {\r\n if (pointAndDerivative)\r\n this._workRay.setFrom(pointAndDerivative);\r\n else if (fraction !== undefined && curve)\r\n this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);\r\n else\r\n return undefined;\r\n return this._workRay.dotProductToPoint(this._spacePoint);\r\n }\r\n public evaluate(fraction: number): boolean {\r\n let curve = this._curve;\r\n if (this._parentCurvePrimitive)\r\n curve = this._parentCurvePrimitive;\r\n const value = this.evaluateFunction(undefined, fraction, curve);\r\n if (value === undefined)\r\n return false;\r\n this.currentF = value;\r\n return true;\r\n }\r\n private announceRay(fraction: number, data: Ray3d): void {\r\n this._functionB = this.evaluateFunction(data)!;\r\n this._fractionB = fraction;\r\n if (this._numThisCurve++ > 0) // after the first stroke point, a stroke segment is defined, so we have an interval\r\n this.searchInterval();\r\n this._functionA = this._functionB;\r\n this._fractionA = this._fractionB;\r\n }\r\n public announcePointTangent(point: Point3d, fraction: number, tangent: Vector3d) {\r\n this._workRay.set(point, tangent);\r\n this.announceRay(fraction, this._workRay);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CountLinearPartsSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CountLinearPartsSearchContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,gCAAgC;IAC1E,cAAc,CAAS;IACvB,aAAa,CAAS;IACtB,QAAQ,CAAS;IACxB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IACM,MAAM,CAAC,sBAAsB,CAAC,MAAuB;QAC1D,MAAM,OAAO,GAAG,IAAI,6BAA6B,EAAE,CAAC;QACpD,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9B,CAAC;IACe,sBAAsB,CAAC,KAAqB,EAAE,cAAsB;QAClF,IAAI,KAAK,YAAY,aAAa;YAChC,IAAI,CAAC,cAAc,EAAE,CAAC;aACnB,IAAI,KAAK,YAAY,YAAY;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;;YAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Curve\n */\nimport { CurveCollection } from \"../CurveCollection\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { RecursiveCurveProcessorWithStack } from \"../CurveProcessor\";\nimport { LineSegment3d } from \"../LineSegment3d\";\nimport { LineString3d } from \"../LineString3d\";\n\n/** Algorithmic class: Count LineSegment3d and LineString3d primitives.\n * @internal\n */\nexport class CountLinearPartsSearchContext extends RecursiveCurveProcessorWithStack {\n public numLineSegment: number;\n public numLineString: number;\n public numOther: number;\n constructor() {\n super();\n this.numLineSegment = 0;\n this.numLineString = 0;\n this.numOther = 0;\n }\n public static hasNonLinearPrimitives(target: CurveCollection): boolean {\n const context = new CountLinearPartsSearchContext();\n target.announceToCurveProcessor(context);\n return context.numOther > 0;\n }\n public override announceCurvePrimitive(curve: CurvePrimitive, _indexInParent: number): void {\n if (curve instanceof LineSegment3d)\n this.numLineSegment++;\n else if (curve instanceof LineString3d)\n this.numLineString++;\n else\n this.numOther++;\n }\n}\n"]}
1
+ {"version":3,"file":"CountLinearPartsSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/CountLinearPartsSearchContext.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,gCAAgC;IAC1E,cAAc,CAAS;IACvB,aAAa,CAAS;IACtB,QAAQ,CAAS;IACxB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IACM,MAAM,CAAC,sBAAsB,CAAC,MAAuB;QAC1D,MAAM,OAAO,GAAG,IAAI,6BAA6B,EAAE,CAAC;QACpD,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9B,CAAC;IACe,sBAAsB,CAAC,KAAqB,EAAE,cAAsB;QAClF,IAAI,KAAK,YAAY,aAAa;YAChC,IAAI,CAAC,cAAc,EAAE,CAAC;aACnB,IAAI,KAAK,YAAY,YAAY;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;;YAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessorWithStack } from \"../CurveProcessor\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\n\r\n/** Algorithmic class: Count LineSegment3d and LineString3d primitives.\r\n * @internal\r\n */\r\nexport class CountLinearPartsSearchContext extends RecursiveCurveProcessorWithStack {\r\n public numLineSegment: number;\r\n public numLineString: number;\r\n public numOther: number;\r\n constructor() {\r\n super();\r\n this.numLineSegment = 0;\r\n this.numLineString = 0;\r\n this.numOther = 0;\r\n }\r\n public static hasNonLinearPrimitives(target: CurveCollection): boolean {\r\n const context = new CountLinearPartsSearchContext();\r\n target.announceToCurveProcessor(context);\r\n return context.numOther > 0;\r\n }\r\n public override announceCurvePrimitive(curve: CurvePrimitive, _indexInParent: number): void {\r\n if (curve instanceof LineSegment3d)\r\n this.numLineSegment++;\r\n else if (curve instanceof LineString3d)\r\n this.numLineString++;\r\n else\r\n this.numOther++;\r\n }\r\n}\r\n"]}