@itwin/core-geometry 5.0.0-dev.11 → 5.0.0-dev.110

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 (1036) hide show
  1. package/CHANGELOG.md +61 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +13 -4
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +51 -39
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  11. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  13. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  15. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  17. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  19. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  20. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  21. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  22. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  23. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  24. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  25. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  26. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  28. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  30. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  32. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  33. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  34. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  35. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  36. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  37. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  39. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  40. package/lib/cjs/bspline/KnotVector.js +144 -84
  41. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  42. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  43. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  44. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  45. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  46. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  47. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  48. package/lib/cjs/clipping/ClipPlane.js +10 -1
  49. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  50. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  51. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  52. package/lib/cjs/clipping/ClipUtils.js +5 -1
  53. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  54. package/lib/cjs/clipping/ClipVector.js +11 -8
  55. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  56. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  57. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  58. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  60. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  62. package/lib/cjs/core-geometry.d.ts +1 -0
  63. package/lib/cjs/core-geometry.d.ts.map +1 -1
  64. package/lib/cjs/core-geometry.js +1 -0
  65. package/lib/cjs/core-geometry.js.map +1 -1
  66. package/lib/cjs/curve/Arc3d.d.ts +20 -4
  67. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  68. package/lib/cjs/curve/Arc3d.js +86 -21
  69. package/lib/cjs/curve/Arc3d.js.map +1 -1
  70. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  71. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  72. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  73. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  74. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  78. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  79. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  80. package/lib/cjs/curve/CurveCollection.js +35 -9
  81. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  82. package/lib/cjs/curve/CurveExtendMode.d.ts +13 -5
  83. package/lib/cjs/curve/CurveExtendMode.d.ts.map +1 -1
  84. package/lib/cjs/curve/CurveExtendMode.js +19 -15
  85. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  86. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  87. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  88. package/lib/cjs/curve/CurveFactory.js +213 -135
  89. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  90. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  91. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  92. package/lib/cjs/curve/CurvePrimitive.d.ts +74 -18
  93. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurvePrimitive.js +86 -18
  95. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  96. package/lib/cjs/curve/CurveProcessor.js +2 -0
  97. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  98. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  99. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  100. package/lib/cjs/curve/LineSegment3d.js +6 -2
  101. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  102. package/lib/cjs/curve/LineString3d.d.ts +8 -7
  103. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  104. package/lib/cjs/curve/LineString3d.js +52 -29
  105. package/lib/cjs/curve/LineString3d.js.map +1 -1
  106. package/lib/cjs/curve/Loop.js +12 -4
  107. package/lib/cjs/curve/Loop.js.map +1 -1
  108. package/lib/cjs/curve/OffsetOptions.js +25 -21
  109. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  110. package/lib/cjs/curve/ParityRegion.js +4 -2
  111. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  112. package/lib/cjs/curve/Path.js +2 -2
  113. package/lib/cjs/curve/Path.js.map +1 -1
  114. package/lib/cjs/curve/PointString3d.js +3 -2
  115. package/lib/cjs/curve/PointString3d.js.map +1 -1
  116. package/lib/cjs/curve/ProxyCurve.js +1 -0
  117. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  118. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  119. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  120. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  121. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  122. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  123. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  124. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  125. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  126. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  127. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  128. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  129. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  130. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  131. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  132. package/lib/cjs/curve/RegionOps.js +9 -10
  133. package/lib/cjs/curve/RegionOps.js.map +1 -1
  134. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  135. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  136. package/lib/cjs/curve/StrokeOptions.d.ts +10 -5
  137. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  138. package/lib/cjs/curve/StrokeOptions.js +30 -8
  139. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  140. package/lib/cjs/curve/UnionRegion.js +4 -2
  141. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  142. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +71 -0
  143. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -0
  144. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js +181 -0
  145. package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -0
  146. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  147. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  148. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  149. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  151. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +21 -5
  153. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  154. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +53 -20
  155. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  157. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  159. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  161. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  163. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  165. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  167. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  169. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  170. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  171. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  172. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  173. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  174. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +5 -3
  175. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -1
  176. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +6 -3
  177. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  178. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  179. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  180. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  181. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  182. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  183. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  184. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  185. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  186. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  187. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  188. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  189. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  190. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  191. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  192. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  193. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  194. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  195. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  196. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  197. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  198. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  199. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  200. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  201. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  202. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  203. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  204. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  205. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  206. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  207. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  208. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  209. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  210. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  211. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  212. package/lib/cjs/geometry3d/Angle.js +18 -16
  213. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  214. package/lib/cjs/geometry3d/AngleSweep.d.ts +8 -3
  215. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  216. package/lib/cjs/geometry3d/AngleSweep.js +22 -10
  217. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  218. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  219. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  220. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  221. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  222. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  223. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  224. package/lib/cjs/geometry3d/Ellipsoid.d.ts +8 -7
  225. package/lib/cjs/geometry3d/Ellipsoid.d.ts.map +1 -1
  226. package/lib/cjs/geometry3d/Ellipsoid.js +63 -14
  227. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  228. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  229. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  230. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  231. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  232. package/lib/cjs/geometry3d/GeometryHandler.d.ts +15 -16
  233. package/lib/cjs/geometry3d/GeometryHandler.d.ts.map +1 -1
  234. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  235. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  236. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  237. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  238. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  239. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  240. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  241. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  242. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  243. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  244. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  245. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  246. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  247. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  248. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  249. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  250. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  251. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  252. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  253. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  254. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  255. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  256. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  257. package/lib/cjs/geometry3d/Matrix3d.d.ts +13 -15
  258. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  259. package/lib/cjs/geometry3d/Matrix3d.js +47 -26
  260. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  261. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  262. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  263. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  264. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  265. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  266. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  267. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  268. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  269. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  270. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  271. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  272. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  273. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +7 -10
  274. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  275. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -10
  276. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  277. package/lib/cjs/geometry3d/PointHelpers.d.ts +15 -4
  278. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  279. package/lib/cjs/geometry3d/PointHelpers.js +29 -8
  280. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  281. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  282. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  283. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  284. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  285. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  286. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  287. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  288. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  289. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  290. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  291. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  292. package/lib/cjs/geometry3d/Range.js +21 -4
  293. package/lib/cjs/geometry3d/Range.js.map +1 -1
  294. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  295. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  296. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  297. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  298. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  299. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  300. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  301. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  302. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  303. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  304. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  305. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  306. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  307. package/lib/cjs/geometry3d/Transform.js +4 -1
  308. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  309. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  310. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  311. package/lib/cjs/geometry4d/Map4d.js +2 -0
  312. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  313. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  314. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  315. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  316. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  317. package/lib/cjs/geometry4d/MomentData.js +90 -66
  318. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  319. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  320. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  321. package/lib/cjs/geometry4d/Point4d.js +2 -0
  322. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  323. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  324. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  325. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  326. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  327. package/lib/cjs/numerics/Complex.js +2 -0
  328. package/lib/cjs/numerics/Complex.js.map +1 -1
  329. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  330. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  331. package/lib/cjs/numerics/Newton.js +59 -4
  332. package/lib/cjs/numerics/Newton.js.map +1 -1
  333. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  334. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  335. package/lib/cjs/numerics/PolarData.js +13 -1
  336. package/lib/cjs/numerics/PolarData.js.map +1 -1
  337. package/lib/cjs/numerics/Polynomials.js +64 -26
  338. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  339. package/lib/cjs/numerics/Quadrature.js +26 -20
  340. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  341. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  342. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  343. package/lib/cjs/numerics/UnionFind.js +1 -0
  344. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  345. package/lib/cjs/numerics/UsageSums.js +10 -0
  346. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  347. package/lib/cjs/polyface/AuxData.js +16 -0
  348. package/lib/cjs/polyface/AuxData.js.map +1 -1
  349. package/lib/cjs/polyface/BoxTopology.js +67 -67
  350. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  351. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  352. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  353. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  354. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  355. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  356. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  357. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  358. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  359. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  360. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  361. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  362. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  363. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  364. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +4 -3
  365. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  366. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +16 -5
  367. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  368. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  369. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  370. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  371. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  372. package/lib/cjs/polyface/Polyface.d.ts +43 -14
  373. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  374. package/lib/cjs/polyface/Polyface.js +90 -19
  375. package/lib/cjs/polyface/Polyface.js.map +1 -1
  376. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  377. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  378. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  379. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  380. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  381. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  382. package/lib/cjs/polyface/PolyfaceData.d.ts +36 -3
  383. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  384. package/lib/cjs/polyface/PolyfaceData.js +114 -8
  385. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  386. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  387. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  388. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  389. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  390. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  391. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  392. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  393. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  394. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  395. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  396. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  397. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  398. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  399. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  400. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  401. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  402. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  403. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  404. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  405. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  406. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  407. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  408. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  409. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  410. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  411. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  412. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  413. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  414. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  415. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  416. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  417. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  418. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  419. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  420. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  421. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  422. package/lib/cjs/serialization/BGFBAccessors.d.ts +35 -9
  423. package/lib/cjs/serialization/BGFBAccessors.d.ts.map +1 -1
  424. package/lib/cjs/serialization/BGFBAccessors.js +141 -179
  425. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  426. package/lib/cjs/serialization/BGFBReader.d.ts +2 -2
  427. package/lib/cjs/serialization/BGFBReader.d.ts.map +1 -1
  428. package/lib/cjs/serialization/BGFBReader.js +75 -62
  429. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  430. package/lib/cjs/serialization/BGFBWriter.d.ts +5 -1
  431. package/lib/cjs/serialization/BGFBWriter.d.ts.map +1 -1
  432. package/lib/cjs/serialization/BGFBWriter.js +18 -3
  433. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  434. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js +1 -0
  435. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  436. package/lib/cjs/serialization/DeepCompare.js +17 -17
  437. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  438. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  439. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  440. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  441. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  442. package/lib/cjs/serialization/IModelJsonSchema.d.ts +78 -64
  443. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  444. package/lib/cjs/serialization/IModelJsonSchema.js +107 -83
  445. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  446. package/lib/cjs/serialization/SerializationHelpers.d.ts +36 -0
  447. package/lib/cjs/serialization/SerializationHelpers.d.ts.map +1 -1
  448. package/lib/cjs/serialization/SerializationHelpers.js +117 -0
  449. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  450. package/lib/cjs/solid/Box.js +7 -2
  451. package/lib/cjs/solid/Box.js.map +1 -1
  452. package/lib/cjs/solid/Cone.d.ts +39 -14
  453. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  454. package/lib/cjs/solid/Cone.js +52 -16
  455. package/lib/cjs/solid/Cone.js.map +1 -1
  456. package/lib/cjs/solid/LinearSweep.js +4 -2
  457. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  458. package/lib/cjs/solid/RotationalSweep.d.ts +17 -17
  459. package/lib/cjs/solid/RotationalSweep.d.ts.map +1 -1
  460. package/lib/cjs/solid/RotationalSweep.js +38 -25
  461. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  462. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  463. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  464. package/lib/cjs/solid/RuledSweep.js +32 -24
  465. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  466. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  467. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  468. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  469. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  470. package/lib/cjs/solid/Sphere.d.ts +36 -17
  471. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  472. package/lib/cjs/solid/Sphere.js +53 -24
  473. package/lib/cjs/solid/Sphere.js.map +1 -1
  474. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  475. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  476. package/lib/cjs/solid/SweepContour.js +33 -15
  477. package/lib/cjs/solid/SweepContour.js.map +1 -1
  478. package/lib/cjs/solid/TorusPipe.js +7 -2
  479. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  480. package/lib/cjs/topology/ChainMerge.js +16 -4
  481. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  482. package/lib/cjs/topology/Graph.js +41 -6
  483. package/lib/cjs/topology/Graph.js.map +1 -1
  484. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  485. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  486. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  487. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  488. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  489. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  490. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  491. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  492. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  493. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  494. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  495. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  496. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  497. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  498. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  499. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  500. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  501. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  502. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  503. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  504. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  505. package/lib/cjs/topology/MaskManager.js +3 -0
  506. package/lib/cjs/topology/MaskManager.js.map +1 -1
  507. package/lib/cjs/topology/Merging.js +11 -6
  508. package/lib/cjs/topology/Merging.js.map +1 -1
  509. package/lib/cjs/topology/RegularizeFace.js +22 -0
  510. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  511. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  512. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  513. package/lib/cjs/topology/Triangulation.d.ts +3 -3
  514. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  515. package/lib/cjs/topology/Triangulation.js +28 -18
  516. package/lib/cjs/topology/Triangulation.js.map +1 -1
  517. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  518. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  519. package/lib/esm/Constant.js +17 -17
  520. package/lib/esm/Constant.js.map +1 -1
  521. package/lib/esm/Geometry.d.ts +13 -4
  522. package/lib/esm/Geometry.d.ts.map +1 -1
  523. package/lib/esm/Geometry.js +51 -39
  524. package/lib/esm/Geometry.js.map +1 -1
  525. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  526. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  527. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  528. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  529. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  530. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  531. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  532. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  533. package/lib/esm/bspline/BSplineCurve.js +249 -181
  534. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  535. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  536. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  537. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  538. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  539. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  540. package/lib/esm/bspline/BSplineSurface.js +22 -2
  541. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  542. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  543. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  544. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  545. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  546. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  547. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  548. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  549. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  550. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  551. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  552. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  553. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  554. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  555. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  556. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  557. package/lib/esm/bspline/KnotVector.js +144 -84
  558. package/lib/esm/bspline/KnotVector.js.map +1 -1
  559. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  560. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  561. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  562. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  563. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  564. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  565. package/lib/esm/clipping/ClipPlane.js +10 -1
  566. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  567. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  568. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  569. package/lib/esm/clipping/ClipUtils.js +5 -1
  570. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  571. package/lib/esm/clipping/ClipVector.js +11 -8
  572. package/lib/esm/clipping/ClipVector.js.map +1 -1
  573. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  574. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  575. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  576. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  577. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  578. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  579. package/lib/esm/core-geometry.d.ts +1 -0
  580. package/lib/esm/core-geometry.d.ts.map +1 -1
  581. package/lib/esm/core-geometry.js +1 -0
  582. package/lib/esm/core-geometry.js.map +1 -1
  583. package/lib/esm/curve/Arc3d.d.ts +20 -4
  584. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  585. package/lib/esm/curve/Arc3d.js +86 -21
  586. package/lib/esm/curve/Arc3d.js.map +1 -1
  587. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  588. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  589. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  590. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  591. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  592. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  593. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  594. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  595. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  596. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  597. package/lib/esm/curve/CurveCollection.js +35 -9
  598. package/lib/esm/curve/CurveCollection.js.map +1 -1
  599. package/lib/esm/curve/CurveExtendMode.d.ts +13 -5
  600. package/lib/esm/curve/CurveExtendMode.d.ts.map +1 -1
  601. package/lib/esm/curve/CurveExtendMode.js +19 -15
  602. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  603. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  604. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  605. package/lib/esm/curve/CurveFactory.js +213 -135
  606. package/lib/esm/curve/CurveFactory.js.map +1 -1
  607. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  608. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  609. package/lib/esm/curve/CurvePrimitive.d.ts +74 -18
  610. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  611. package/lib/esm/curve/CurvePrimitive.js +86 -18
  612. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  613. package/lib/esm/curve/CurveProcessor.js +2 -0
  614. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  615. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  616. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  617. package/lib/esm/curve/LineSegment3d.js +6 -2
  618. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  619. package/lib/esm/curve/LineString3d.d.ts +8 -7
  620. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  621. package/lib/esm/curve/LineString3d.js +52 -29
  622. package/lib/esm/curve/LineString3d.js.map +1 -1
  623. package/lib/esm/curve/Loop.js +12 -4
  624. package/lib/esm/curve/Loop.js.map +1 -1
  625. package/lib/esm/curve/OffsetOptions.js +25 -21
  626. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  627. package/lib/esm/curve/ParityRegion.js +4 -2
  628. package/lib/esm/curve/ParityRegion.js.map +1 -1
  629. package/lib/esm/curve/Path.js +2 -2
  630. package/lib/esm/curve/Path.js.map +1 -1
  631. package/lib/esm/curve/PointString3d.js +3 -2
  632. package/lib/esm/curve/PointString3d.js.map +1 -1
  633. package/lib/esm/curve/ProxyCurve.js +1 -0
  634. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  635. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  636. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  637. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  638. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  639. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  640. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  641. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  642. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  643. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  644. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  645. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  646. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  647. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  648. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  649. package/lib/esm/curve/RegionOps.js +9 -10
  650. package/lib/esm/curve/RegionOps.js.map +1 -1
  651. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  652. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  653. package/lib/esm/curve/StrokeOptions.d.ts +10 -5
  654. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  655. package/lib/esm/curve/StrokeOptions.js +30 -8
  656. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  657. package/lib/esm/curve/UnionRegion.js +4 -2
  658. package/lib/esm/curve/UnionRegion.js.map +1 -1
  659. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts +71 -0
  660. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.d.ts.map +1 -0
  661. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js +177 -0
  662. package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -0
  663. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  664. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  665. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  666. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  667. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  668. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  669. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +21 -5
  670. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  671. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +53 -20
  672. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  673. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  674. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  675. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  676. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  677. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  678. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  679. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  680. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  681. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  682. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  683. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  684. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  685. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  686. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  687. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  688. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  689. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  690. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  691. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +5 -3
  692. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -1
  693. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +6 -3
  694. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  695. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  696. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  697. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  698. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  699. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  700. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  701. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  702. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  703. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  704. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  705. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  706. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  707. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  708. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  709. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  710. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  711. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  712. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  713. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  714. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  715. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  716. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  717. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  718. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  719. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  720. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  721. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  722. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  723. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  724. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  725. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  726. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  727. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  728. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  729. package/lib/esm/geometry3d/Angle.js +18 -16
  730. package/lib/esm/geometry3d/Angle.js.map +1 -1
  731. package/lib/esm/geometry3d/AngleSweep.d.ts +8 -3
  732. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  733. package/lib/esm/geometry3d/AngleSweep.js +22 -10
  734. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  735. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  736. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  737. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  738. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  739. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  740. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  741. package/lib/esm/geometry3d/Ellipsoid.d.ts +8 -7
  742. package/lib/esm/geometry3d/Ellipsoid.d.ts.map +1 -1
  743. package/lib/esm/geometry3d/Ellipsoid.js +63 -14
  744. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  745. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  746. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  747. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  748. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  749. package/lib/esm/geometry3d/GeometryHandler.d.ts +15 -16
  750. package/lib/esm/geometry3d/GeometryHandler.d.ts.map +1 -1
  751. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  752. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  753. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  754. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  755. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  756. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  757. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  758. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  759. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  760. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  761. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  762. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  763. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  764. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  765. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  766. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  767. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  768. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  769. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  770. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  771. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  772. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  773. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  774. package/lib/esm/geometry3d/Matrix3d.d.ts +13 -15
  775. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  776. package/lib/esm/geometry3d/Matrix3d.js +47 -26
  777. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  778. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  779. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  780. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  781. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  782. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  783. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  784. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  785. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  786. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  787. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  788. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  789. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  790. package/lib/esm/geometry3d/Point3dVector3d.d.ts +7 -10
  791. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  792. package/lib/esm/geometry3d/Point3dVector3d.js +16 -10
  793. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  794. package/lib/esm/geometry3d/PointHelpers.d.ts +15 -4
  795. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  796. package/lib/esm/geometry3d/PointHelpers.js +29 -8
  797. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  798. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  799. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  800. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  801. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  802. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  803. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  804. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  805. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  806. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  807. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  808. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  809. package/lib/esm/geometry3d/Range.js +21 -4
  810. package/lib/esm/geometry3d/Range.js.map +1 -1
  811. package/lib/esm/geometry3d/Ray2d.js +2 -0
  812. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  813. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  814. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  815. package/lib/esm/geometry3d/Ray3d.js +20 -11
  816. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  817. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  818. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  819. package/lib/esm/geometry3d/Segment1d.js +4 -0
  820. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  821. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  822. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  823. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  824. package/lib/esm/geometry3d/Transform.js +4 -1
  825. package/lib/esm/geometry3d/Transform.js.map +1 -1
  826. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  827. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  828. package/lib/esm/geometry4d/Map4d.js +2 -0
  829. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  830. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  831. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  832. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  833. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  834. package/lib/esm/geometry4d/MomentData.js +90 -66
  835. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  836. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  837. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  838. package/lib/esm/geometry4d/Point4d.js +2 -0
  839. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  840. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  841. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  842. package/lib/esm/numerics/ClusterableArray.js +29 -13
  843. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  844. package/lib/esm/numerics/Complex.js +2 -0
  845. package/lib/esm/numerics/Complex.js.map +1 -1
  846. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  847. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  848. package/lib/esm/numerics/Newton.js +59 -4
  849. package/lib/esm/numerics/Newton.js.map +1 -1
  850. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  851. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  852. package/lib/esm/numerics/PolarData.js +13 -1
  853. package/lib/esm/numerics/PolarData.js.map +1 -1
  854. package/lib/esm/numerics/Polynomials.js +64 -26
  855. package/lib/esm/numerics/Polynomials.js.map +1 -1
  856. package/lib/esm/numerics/Quadrature.js +26 -20
  857. package/lib/esm/numerics/Quadrature.js.map +1 -1
  858. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  859. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  860. package/lib/esm/numerics/UnionFind.js +1 -0
  861. package/lib/esm/numerics/UnionFind.js.map +1 -1
  862. package/lib/esm/numerics/UsageSums.js +10 -0
  863. package/lib/esm/numerics/UsageSums.js.map +1 -1
  864. package/lib/esm/polyface/AuxData.js +16 -0
  865. package/lib/esm/polyface/AuxData.js.map +1 -1
  866. package/lib/esm/polyface/BoxTopology.js +67 -67
  867. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  868. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  869. package/lib/esm/polyface/FacetFaceData.js +3 -1
  870. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  871. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  872. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  873. package/lib/esm/polyface/FacetOrientation.js +12 -1
  874. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  875. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  876. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  877. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  878. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  879. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  880. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  881. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +4 -3
  882. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  883. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +16 -5
  884. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  885. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  886. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  887. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  888. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  889. package/lib/esm/polyface/Polyface.d.ts +43 -14
  890. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  891. package/lib/esm/polyface/Polyface.js +90 -19
  892. package/lib/esm/polyface/Polyface.js.map +1 -1
  893. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  894. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  895. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  896. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  897. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  898. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  899. package/lib/esm/polyface/PolyfaceData.d.ts +36 -3
  900. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  901. package/lib/esm/polyface/PolyfaceData.js +114 -8
  902. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  903. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  904. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  905. package/lib/esm/polyface/RangeLengthData.js +7 -0
  906. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  907. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  908. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  909. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  910. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  911. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  912. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  913. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  914. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  915. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  916. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  917. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  918. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  919. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  920. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  921. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  922. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  923. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  924. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  925. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  926. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  927. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  928. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  929. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  930. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  931. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  932. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  933. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  934. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  935. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  936. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  937. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  938. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  939. package/lib/esm/serialization/BGFBAccessors.d.ts +35 -9
  940. package/lib/esm/serialization/BGFBAccessors.d.ts.map +1 -1
  941. package/lib/esm/serialization/BGFBAccessors.js +141 -179
  942. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  943. package/lib/esm/serialization/BGFBReader.d.ts +2 -2
  944. package/lib/esm/serialization/BGFBReader.d.ts.map +1 -1
  945. package/lib/esm/serialization/BGFBReader.js +75 -62
  946. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  947. package/lib/esm/serialization/BGFBWriter.d.ts +5 -1
  948. package/lib/esm/serialization/BGFBWriter.d.ts.map +1 -1
  949. package/lib/esm/serialization/BGFBWriter.js +18 -3
  950. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  951. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js +1 -0
  952. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  953. package/lib/esm/serialization/DeepCompare.js +17 -17
  954. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  955. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  956. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  957. package/lib/esm/serialization/GeometrySamples.js +113 -112
  958. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  959. package/lib/esm/serialization/IModelJsonSchema.d.ts +78 -64
  960. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  961. package/lib/esm/serialization/IModelJsonSchema.js +107 -83
  962. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  963. package/lib/esm/serialization/SerializationHelpers.d.ts +36 -0
  964. package/lib/esm/serialization/SerializationHelpers.d.ts.map +1 -1
  965. package/lib/esm/serialization/SerializationHelpers.js +117 -0
  966. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  967. package/lib/esm/solid/Box.js +7 -2
  968. package/lib/esm/solid/Box.js.map +1 -1
  969. package/lib/esm/solid/Cone.d.ts +39 -14
  970. package/lib/esm/solid/Cone.d.ts.map +1 -1
  971. package/lib/esm/solid/Cone.js +53 -17
  972. package/lib/esm/solid/Cone.js.map +1 -1
  973. package/lib/esm/solid/LinearSweep.js +4 -2
  974. package/lib/esm/solid/LinearSweep.js.map +1 -1
  975. package/lib/esm/solid/RotationalSweep.d.ts +17 -17
  976. package/lib/esm/solid/RotationalSweep.d.ts.map +1 -1
  977. package/lib/esm/solid/RotationalSweep.js +38 -25
  978. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  979. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  980. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  981. package/lib/esm/solid/RuledSweep.js +32 -24
  982. package/lib/esm/solid/RuledSweep.js.map +1 -1
  983. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  984. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  985. package/lib/esm/solid/SolidPrimitive.js +11 -6
  986. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  987. package/lib/esm/solid/Sphere.d.ts +36 -17
  988. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  989. package/lib/esm/solid/Sphere.js +54 -25
  990. package/lib/esm/solid/Sphere.js.map +1 -1
  991. package/lib/esm/solid/SweepContour.d.ts +24 -15
  992. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  993. package/lib/esm/solid/SweepContour.js +33 -15
  994. package/lib/esm/solid/SweepContour.js.map +1 -1
  995. package/lib/esm/solid/TorusPipe.js +7 -2
  996. package/lib/esm/solid/TorusPipe.js.map +1 -1
  997. package/lib/esm/topology/ChainMerge.js +16 -4
  998. package/lib/esm/topology/ChainMerge.js.map +1 -1
  999. package/lib/esm/topology/Graph.js +41 -6
  1000. package/lib/esm/topology/Graph.js.map +1 -1
  1001. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  1002. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  1003. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  1004. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  1005. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  1006. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  1007. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  1008. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  1009. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  1010. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  1011. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  1012. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  1013. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  1014. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  1015. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  1016. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  1017. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  1018. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  1019. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  1020. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  1021. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  1022. package/lib/esm/topology/MaskManager.js +3 -0
  1023. package/lib/esm/topology/MaskManager.js.map +1 -1
  1024. package/lib/esm/topology/Merging.js +11 -6
  1025. package/lib/esm/topology/Merging.js.map +1 -1
  1026. package/lib/esm/topology/RegularizeFace.js +22 -0
  1027. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  1028. package/lib/esm/topology/SignedDataSummary.js +22 -0
  1029. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  1030. package/lib/esm/topology/Triangulation.d.ts +3 -3
  1031. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  1032. package/lib/esm/topology/Triangulation.js +28 -18
  1033. package/lib/esm/topology/Triangulation.js.map +1 -1
  1034. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  1035. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  1036. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"BilinearPatch.js","sourceRoot":"","sources":["../../../src/geometry3d/BilinearPatch.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 Solid\r\n */\r\n\r\nimport { CurveAndSurfaceLocationDetail, UVSurfaceLocationDetail } from \"../bspline/SurfaceLocationDetail\";\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { SmallSystem } from \"../numerics/SmallSystem\";\r\nimport { UVSurface } from \"./GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"./Point3dVector3d\";\r\nimport { Range3d } from \"./Range\";\r\nimport { Ray3d } from \"./Ray3d\";\r\nimport { Transform } from \"./Transform\";\r\n\r\n// cspell:word uparrow, rightarrow\r\n\r\n/**\r\n * A bilinear patch is a surface defined by its 4 corner points.\r\n * * The corner points do not have to be coplanar, but if they are, the quadrilateral should be convex to avoid a self-intersecting surface.\r\n * ```\r\n * equation\r\n * \\begin{matrix}\r\n * v\\text{-direction}\\\\\r\n * \\uparrow\\\\\r\n * \\text{point01} &\\cdots &\\text{A1} &\\cdots &\\text{point11}\\\\\r\n * \\vdots &&\\vdots &&\\vdots\\\\\r\n * \\text{B0} &\\cdots &\\text{X} &\\cdots &\\text{B1}\\\\\r\n * \\vdots &&\\vdots &&\\vdots\\\\\r\n * \\text{point00} &\\cdots &\\text{A0} &\\cdots &\\text{point10} &\\rightarrow~u\\text{-direction}\r\n * \\end{matrix}\r\n * ```\r\n * * To evaluate the point at (u,v), the following are equivalent:\r\n * * interpolate first with u then with v:\r\n * * A0 = interpolate between point00 and point10 at fraction u\r\n * * A1 = interpolate between point01 and point11 at fraction u\r\n * * X = interpolate between A0 and A1 at fraction v\r\n * * interpolate first with v then with u:\r\n * * B0 = interpolate between point00 and point01 at fraction v\r\n * * B1 = interpolate between point10 and point11 at fraction v\r\n * * X = interpolate between B0 and B1 at fraction u\r\n * * sum all at once:\r\n * * X = (1-u)(1-v)point00 + (1-u)(v)point01 + (u)(1-v)point10 + (u)(v)point11\r\n * @public\r\n */\r\nexport class BilinearPatch implements UVSurface {\r\n /** corner at parametric coordinate (0,0) */\r\n public point00: Point3d;\r\n /** corner at parametric coordinate (1,0) */\r\n public point10: Point3d;\r\n /** corner at parametric coordinate (0,1) */\r\n public point01: Point3d;\r\n /** corner at parametric coordinate (1,1) */\r\n public point11: Point3d;\r\n /**\r\n * Capture (not clone) corners to create a new BilinearPatch.\r\n * @param point00 Point at uv=0,0\r\n * @param point10 Point at uv=1,0\r\n * @param point10 Point at uv=0,1\r\n * @param point11 Point at uv=1,1\r\n */\r\n public constructor(point00: Point3d, point10: Point3d, point01: Point3d, point11: Point3d) {\r\n this.point00 = point00;\r\n this.point10 = point10;\r\n this.point01 = point01;\r\n this.point11 = point11;\r\n }\r\n /**\r\n * Clone (not capture) corners to create a new BilinearPatch.\r\n * @param point00 Point at uv=0,0\r\n * @param point10 Point at uv=1,0\r\n * @param point10 Point at uv=0,1\r\n * @param point11 Point at uv=1,1\r\n */\r\n public static create(point00: Point3d, point10: Point3d, point01: Point3d, point11: Point3d) {\r\n return new BilinearPatch(point00.clone(), point10.clone(), point01.clone(), point11.clone());\r\n }\r\n /** Create a patch from xyz values of the 4 corners. */\r\n public static createXYZ(\r\n x00: number, y00: number, z00: number,\r\n x10: number, y10: number, z10: number,\r\n x01: number, y01: number, z01: number,\r\n x11: number, y11: number, z11: number,\r\n ) {\r\n return new BilinearPatch(\r\n Point3d.create(x00, y00, z00),\r\n Point3d.create(x10, y10, z10),\r\n Point3d.create(x01, y01, z01),\r\n Point3d.create(x11, y11, z11),\r\n );\r\n }\r\n /** Return a cloned patch. */\r\n public clone(): BilinearPatch {\r\n return new BilinearPatch(\r\n this.point00.clone(),\r\n this.point10.clone(),\r\n this.point01.clone(),\r\n this.point11.clone(),\r\n );\r\n }\r\n /** Test equality of the 4 points. */\r\n public isAlmostEqual(other: BilinearPatch): boolean {\r\n return this.point00.isAlmostEqual(other.point00)\r\n && this.point10.isAlmostEqual(other.point10)\r\n && this.point01.isAlmostEqual(other.point01)\r\n && this.point11.isAlmostEqual(other.point11);\r\n }\r\n /** Apply the transform to each point. */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n transform.multiplyPoint3d(this.point00, this.point00);\r\n transform.multiplyPoint3d(this.point10, this.point10);\r\n transform.multiplyPoint3d(this.point01, this.point01);\r\n transform.multiplyPoint3d(this.point11, this.point11);\r\n return true;\r\n }\r\n /** Return a cloned and transformed patch. */\r\n public cloneTransformed(transform: Transform): BilinearPatch | undefined {\r\n const result = this.clone();\r\n result.tryTransformInPlace(transform);\r\n return result;\r\n }\r\n /** Extend a range by the range of the (optionally transformed) patch. */\r\n public extendRange(range: Range3d, transform?: Transform) {\r\n if (transform) {\r\n range.extendTransformedPoint(transform, this.point00);\r\n range.extendTransformedPoint(transform, this.point10);\r\n range.extendTransformedPoint(transform, this.point01);\r\n range.extendTransformedPoint(transform, this.point11);\r\n } else {\r\n range.extendPoint(this.point00);\r\n range.extendPoint(this.point10);\r\n range.extendPoint(this.point01);\r\n range.extendPoint(this.point11);\r\n }\r\n }\r\n /**\r\n * Convert fractional u and v coordinates to surface point\r\n * @param u fractional coordinate in u direction\r\n * @param v fractional coordinate in v direction\r\n * @param result optional pre-allocated point\r\n */\r\n public uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n const f00 = (1.0 - u) * (1.0 - v);\r\n const f10 = u * (1.0 - v);\r\n const f01 = (1.0 - u) * v;\r\n const f11 = u * v;\r\n return Point3d.create(\r\n f00 * this.point00.x + f10 * this.point10.x + f01 * this.point01.x + f11 * this.point11.x,\r\n f00 * this.point00.y + f10 * this.point10.y + f01 * this.point01.y + f11 * this.point11.y,\r\n f00 * this.point00.z + f10 * this.point10.z + f01 * this.point01.z + f11 * this.point11.z,\r\n result,\r\n );\r\n }\r\n /** Evaluate as a uv surface, returning point and two derivative vectors.\r\n * @param u fractional coordinate in u direction\r\n * @param v fractional coordinate in v direction\r\n * @param result optional pre-allocated carrier for point and vectors\r\n */\r\n public uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const u0 = 1.0 - u;\r\n const v0 = 1.0 - v;\r\n const f00 = u0 * v0;\r\n const f10 = u * v0;\r\n const f01 = u0 * v;\r\n const f11 = u * v;\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(\r\n f00 * this.point00.x + f10 * this.point10.x + f01 * this.point01.x + f11 * this.point11.x,\r\n f00 * this.point00.y + f10 * this.point10.y + f01 * this.point01.y + f11 * this.point11.y,\r\n f00 * this.point00.z + f10 * this.point10.z + f01 * this.point01.z + f11 * this.point11.z,\r\n // u derivative ..\r\n v0 * (this.point10.x - this.point00.x) + v * (this.point11.x - this.point01.x),\r\n v0 * (this.point10.y - this.point00.y) + v * (this.point11.y - this.point01.y),\r\n v0 * (this.point10.z - this.point00.z) + v * (this.point11.z - this.point01.z),\r\n // v derivative ..\r\n u0 * (this.point01.x - this.point00.x) + u * (this.point11.x - this.point10.x),\r\n u0 * (this.point01.y - this.point00.y) + u * (this.point11.y - this.point10.y),\r\n u0 * (this.point01.z - this.point00.z) + u * (this.point11.z - this.point10.z),\r\n result,\r\n );\r\n }\r\n /** If data[iB][pivotColumn] is larger in absolute value than data[iA][pivotColumn], then swap rows iA and iB. */\r\n private static conditionalPivot(pivotColumn: number, data: Float64Array[], iA: number, iB: number) {\r\n if (Math.abs(data[iB][pivotColumn]) > Math.abs(data[iA][pivotColumn])) {\r\n const q = data[iA];\r\n data[iA] = data[iB];\r\n data[iB] = q;\r\n }\r\n }\r\n /**\r\n * Compute the points of intersection with a ray.\r\n * @param ray ray in space\r\n * @returns 1 or 2 points if there are intersections, undefined if no intersections\r\n */\r\n public intersectRay(ray: Ray3d): CurveAndSurfaceLocationDetail[] | undefined {\r\n const vectorU = this.point10.minus(this.point00);\r\n const vectorV = this.point01.minus(this.point00);\r\n const vectorW = this.point11.minus(this.point10);\r\n vectorW.subtractInPlace(vectorV);\r\n // We seek t, u, v such that:\r\n // `ray.origin + t*ray.direction = point00 + u*vectorU + v*vectorV + u*v*vectorW`\r\n // For typical direction as x, the scalar equation with coefficient order for arrays is:\r\n // `0 = -t*ray.direction.x + (point00.x - ray.origin.x) + u*vectorU.x + v*vectorV.x + u*v*vectorW.x`\r\n // and this particular equation is invoked to compute t when u and v are known.\r\n const coffs = [\r\n new Float64Array([-ray.direction.x, this.point00.x - ray.origin.x, vectorU.x, vectorV.x, vectorW.x]),\r\n new Float64Array([-ray.direction.y, this.point00.y - ray.origin.y, vectorU.y, vectorV.y, vectorW.y]),\r\n new Float64Array([-ray.direction.z, this.point00.z - ray.origin.z, vectorU.z, vectorV.z, vectorW.z]),\r\n ];\r\n // swap rows so that the equation with largest ray.direction coefficient is first.\r\n BilinearPatch.conditionalPivot(0, coffs, 0, 1);\r\n BilinearPatch.conditionalPivot(0, coffs, 0, 2);\r\n SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[1], -1.0);\r\n SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[2], -1.0);\r\n const uvArray = SmallSystem.solveBilinearPair(\r\n coffs[1][1], coffs[1][2], coffs[1][3], coffs[1][4],\r\n coffs[2][1], coffs[2][2], coffs[2][3], coffs[2][4],\r\n );\r\n if (uvArray) {\r\n const result: CurveAndSurfaceLocationDetail[] = [];\r\n for (const uv of uvArray) {\r\n const t = -(coffs[0][1] + coffs[0][2] * uv.x + (coffs[0][3] + coffs[0][4] * uv.x) * uv.y) / coffs[0][0];\r\n const point = ray.fractionToPoint(t);\r\n result.push(new CurveAndSurfaceLocationDetail(\r\n CurveLocationDetail.createRayFractionPoint(ray, t, point),\r\n UVSurfaceLocationDetail.createSurfaceUVPoint(this, uv, point)),\r\n );\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Returns the larger of the u-direction edge lengths at v=0 and v=1. */\r\n public maxUEdgeLength(): number {\r\n return Geometry.maxXY(this.point00.distance(this.point10), this.point01.distance(this.point11));\r\n }\r\n /** Returns the larger of the v-direction edge lengths at u=0 and u=1. */\r\n public maxVEdgeLength(): number {\r\n return Geometry.maxXY(this.point00.distance(this.point01), this.point10.distance(this.point11));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BilinearPatch.js","sourceRoot":"","sources":["../../../src/geometry3d/BilinearPatch.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 Solid\r\n */\r\n\r\nimport { CurveAndSurfaceLocationDetail, UVSurfaceLocationDetail } from \"../bspline/SurfaceLocationDetail\";\r\nimport { CurveLocationDetail } from \"../curve/CurveLocationDetail\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { SmallSystem } from \"../numerics/SmallSystem\";\r\nimport { UVSurface } from \"./GeometryHandler\";\r\nimport { Plane3dByOriginAndVectors } from \"./Plane3dByOriginAndVectors\";\r\nimport { Point3d } from \"./Point3dVector3d\";\r\nimport { Range3d } from \"./Range\";\r\nimport { Ray3d } from \"./Ray3d\";\r\nimport { Transform } from \"./Transform\";\r\n\r\n// cspell:word uparrow, rightarrow\r\n\r\n/**\r\n * A bilinear patch is a surface defined by its 4 corner points.\r\n * * The corner points do not have to be coplanar, but if they are, the quadrilateral should be convex to avoid a self-intersecting surface.\r\n * ```\r\n * equation\r\n * \\begin{matrix}\r\n * v\\text{-direction}\\\\\r\n * \\uparrow\\\\\r\n * \\text{point01} &\\cdots &\\text{A1} &\\cdots &\\text{point11}\\\\\r\n * \\vdots &&\\vdots &&\\vdots\\\\\r\n * \\text{B0} &\\cdots &\\text{X} &\\cdots &\\text{B1}\\\\\r\n * \\vdots &&\\vdots &&\\vdots\\\\\r\n * \\text{point00} &\\cdots &\\text{A0} &\\cdots &\\text{point10} &\\rightarrow~u\\text{-direction}\r\n * \\end{matrix}\r\n * ```\r\n * * To evaluate the point at (u,v), the following are equivalent:\r\n * * interpolate first with u then with v:\r\n * * A0 = interpolate between point00 and point10 at fraction u\r\n * * A1 = interpolate between point01 and point11 at fraction u\r\n * * X = interpolate between A0 and A1 at fraction v\r\n * * interpolate first with v then with u:\r\n * * B0 = interpolate between point00 and point01 at fraction v\r\n * * B1 = interpolate between point10 and point11 at fraction v\r\n * * X = interpolate between B0 and B1 at fraction u\r\n * * sum all at once:\r\n * * X = (1-u)(1-v)point00 + (1-u)(v)point01 + (u)(1-v)point10 + (u)(v)point11\r\n * @public\r\n */\r\nexport class BilinearPatch implements UVSurface {\r\n /** corner at parametric coordinate (0,0) */\r\n public point00: Point3d;\r\n /** corner at parametric coordinate (1,0) */\r\n public point10: Point3d;\r\n /** corner at parametric coordinate (0,1) */\r\n public point01: Point3d;\r\n /** corner at parametric coordinate (1,1) */\r\n public point11: Point3d;\r\n /**\r\n * Capture (not clone) corners to create a new BilinearPatch.\r\n * @param point00 Point at uv=0,0\r\n * @param point10 Point at uv=1,0\r\n * @param point10 Point at uv=0,1\r\n * @param point11 Point at uv=1,1\r\n */\r\n public constructor(point00: Point3d, point10: Point3d, point01: Point3d, point11: Point3d) {\r\n this.point00 = point00;\r\n this.point10 = point10;\r\n this.point01 = point01;\r\n this.point11 = point11;\r\n }\r\n /**\r\n * Clone (not capture) corners to create a new BilinearPatch.\r\n * @param point00 Point at uv=0,0\r\n * @param point10 Point at uv=1,0\r\n * @param point10 Point at uv=0,1\r\n * @param point11 Point at uv=1,1\r\n */\r\n public static create(point00: Point3d, point10: Point3d, point01: Point3d, point11: Point3d) {\r\n return new BilinearPatch(point00.clone(), point10.clone(), point01.clone(), point11.clone());\r\n }\r\n /** Create a patch from xyz values of the 4 corners. */\r\n public static createXYZ(\r\n x00: number, y00: number, z00: number,\r\n x10: number, y10: number, z10: number,\r\n x01: number, y01: number, z01: number,\r\n x11: number, y11: number, z11: number,\r\n ) {\r\n return new BilinearPatch(\r\n Point3d.create(x00, y00, z00),\r\n Point3d.create(x10, y10, z10),\r\n Point3d.create(x01, y01, z01),\r\n Point3d.create(x11, y11, z11),\r\n );\r\n }\r\n /** Return a cloned patch. */\r\n public clone(): BilinearPatch {\r\n return new BilinearPatch(\r\n this.point00.clone(),\r\n this.point10.clone(),\r\n this.point01.clone(),\r\n this.point11.clone(),\r\n );\r\n }\r\n /** Test equality of the 4 points. */\r\n public isAlmostEqual(other: BilinearPatch): boolean {\r\n return this.point00.isAlmostEqual(other.point00)\r\n && this.point10.isAlmostEqual(other.point10)\r\n && this.point01.isAlmostEqual(other.point01)\r\n && this.point11.isAlmostEqual(other.point11);\r\n }\r\n /** Apply the transform to each point. */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n transform.multiplyPoint3d(this.point00, this.point00);\r\n transform.multiplyPoint3d(this.point10, this.point10);\r\n transform.multiplyPoint3d(this.point01, this.point01);\r\n transform.multiplyPoint3d(this.point11, this.point11);\r\n return true;\r\n }\r\n /** Return a cloned and transformed patch. */\r\n public cloneTransformed(transform: Transform): BilinearPatch | undefined {\r\n const result = this.clone();\r\n result.tryTransformInPlace(transform);\r\n return result;\r\n }\r\n /** Extend a range by the range of the (optionally transformed) patch. */\r\n public extendRange(range: Range3d, transform?: Transform) {\r\n if (transform) {\r\n range.extendTransformedPoint(transform, this.point00);\r\n range.extendTransformedPoint(transform, this.point10);\r\n range.extendTransformedPoint(transform, this.point01);\r\n range.extendTransformedPoint(transform, this.point11);\r\n } else {\r\n range.extendPoint(this.point00);\r\n range.extendPoint(this.point10);\r\n range.extendPoint(this.point01);\r\n range.extendPoint(this.point11);\r\n }\r\n }\r\n /**\r\n * Convert fractional u and v coordinates to surface point\r\n * @param u fractional coordinate in u direction\r\n * @param v fractional coordinate in v direction\r\n * @param result optional pre-allocated point\r\n */\r\n public uvFractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n const f00 = (1.0 - u) * (1.0 - v);\r\n const f10 = u * (1.0 - v);\r\n const f01 = (1.0 - u) * v;\r\n const f11 = u * v;\r\n return Point3d.create(\r\n f00 * this.point00.x + f10 * this.point10.x + f01 * this.point01.x + f11 * this.point11.x,\r\n f00 * this.point00.y + f10 * this.point10.y + f01 * this.point01.y + f11 * this.point11.y,\r\n f00 * this.point00.z + f10 * this.point10.z + f01 * this.point01.z + f11 * this.point11.z,\r\n result,\r\n );\r\n }\r\n /** Evaluate as a uv surface, returning point and two derivative vectors.\r\n * @param u fractional coordinate in u direction\r\n * @param v fractional coordinate in v direction\r\n * @param result optional pre-allocated carrier for point and vectors\r\n */\r\n public uvFractionToPointAndTangents(u: number, v: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const u0 = 1.0 - u;\r\n const v0 = 1.0 - v;\r\n const f00 = u0 * v0;\r\n const f10 = u * v0;\r\n const f01 = u0 * v;\r\n const f11 = u * v;\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(\r\n f00 * this.point00.x + f10 * this.point10.x + f01 * this.point01.x + f11 * this.point11.x,\r\n f00 * this.point00.y + f10 * this.point10.y + f01 * this.point01.y + f11 * this.point11.y,\r\n f00 * this.point00.z + f10 * this.point10.z + f01 * this.point01.z + f11 * this.point11.z,\r\n // u derivative ..\r\n v0 * (this.point10.x - this.point00.x) + v * (this.point11.x - this.point01.x),\r\n v0 * (this.point10.y - this.point00.y) + v * (this.point11.y - this.point01.y),\r\n v0 * (this.point10.z - this.point00.z) + v * (this.point11.z - this.point01.z),\r\n // v derivative ..\r\n u0 * (this.point01.x - this.point00.x) + u * (this.point11.x - this.point10.x),\r\n u0 * (this.point01.y - this.point00.y) + u * (this.point11.y - this.point10.y),\r\n u0 * (this.point01.z - this.point00.z) + u * (this.point11.z - this.point10.z),\r\n result,\r\n );\r\n }\r\n /** If data[iB][pivotColumn] is larger in absolute value than data[iA][pivotColumn], then swap rows iA and iB. */\r\n private static conditionalPivot(pivotColumn: number, data: Float64Array[], iA: number, iB: number) {\r\n if (Math.abs(data[iB][pivotColumn]) > Math.abs(data[iA][pivotColumn])) {\r\n const q = data[iA];\r\n data[iA] = data[iB];\r\n data[iB] = q;\r\n }\r\n }\r\n /**\r\n * Compute the points of intersection with a ray.\r\n * @param ray ray in space\r\n * @returns 1 or 2 points if there are intersections, undefined if no intersections\r\n */\r\n public intersectRay(ray: Ray3d): CurveAndSurfaceLocationDetail[] | undefined {\r\n const vectorU = this.point10.minus(this.point00);\r\n const vectorV = this.point01.minus(this.point00);\r\n const vectorW = this.point11.minus(this.point10);\r\n vectorW.subtractInPlace(vectorV);\r\n // We seek t, u, v such that:\r\n // `ray.origin + t*ray.direction = point00 + u*vectorU + v*vectorV + u*v*vectorW`\r\n // For typical direction as x, the scalar equation with coefficient order for arrays is:\r\n // `0 = -t*ray.direction.x + (point00.x - ray.origin.x) + u*vectorU.x + v*vectorV.x + u*v*vectorW.x`\r\n // and this particular equation is invoked to compute t when u and v are known.\r\n const coffs = [\r\n new Float64Array([-ray.direction.x, this.point00.x - ray.origin.x, vectorU.x, vectorV.x, vectorW.x]),\r\n new Float64Array([-ray.direction.y, this.point00.y - ray.origin.y, vectorU.y, vectorV.y, vectorW.y]),\r\n new Float64Array([-ray.direction.z, this.point00.z - ray.origin.z, vectorU.z, vectorV.z, vectorW.z]),\r\n ];\r\n // swap rows so that the equation with largest ray.direction coefficient is first.\r\n BilinearPatch.conditionalPivot(0, coffs, 0, 1);\r\n BilinearPatch.conditionalPivot(0, coffs, 0, 2);\r\n SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[1], -1.0);\r\n SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[2], -1.0);\r\n const uvArray = SmallSystem.solveBilinearPair(\r\n coffs[1][1], coffs[1][2], coffs[1][3], coffs[1][4],\r\n coffs[2][1], coffs[2][2], coffs[2][3], coffs[2][4],\r\n );\r\n if (uvArray) {\r\n const result: CurveAndSurfaceLocationDetail[] = [];\r\n for (const uv of uvArray) {\r\n const t = -(coffs[0][1] + coffs[0][2] * uv.x + (coffs[0][3] + coffs[0][4] * uv.x) * uv.y) / coffs[0][0];\r\n const point = ray.fractionToPoint(t);\r\n result.push(new CurveAndSurfaceLocationDetail(\r\n CurveLocationDetail.createRayFractionPoint(ray, t, point),\r\n UVSurfaceLocationDetail.createSurfaceUVPoint(this, uv, point)),\r\n );\r\n }\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Returns the larger of the u-direction edge lengths at v=0 and v=1. */\r\n public maxUEdgeLength(): number {\r\n return Geometry.maxXY(this.point00.distance(this.point10), this.point01.distance(this.point11));\r\n }\r\n /** Returns the larger of the v-direction edge lengths at u=0 and u=1. */\r\n public maxVEdgeLength(): number {\r\n return Geometry.maxXY(this.point00.distance(this.point01), this.point10.distance(this.point11));\r\n }\r\n}\r\n"]}
@@ -21,6 +21,11 @@ const Segment1d_1 = require("./Segment1d");
21
21
  * @internal
22
22
  */
23
23
  class CoincidentGeometryQuery {
24
+ _vectorU;
25
+ _vectorV;
26
+ _point0;
27
+ _point1;
28
+ _tolerance;
24
29
  get tolerance() {
25
30
  return this._tolerance;
26
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CoincidentGeometryOps.js","sourceRoot":"","sources":["../../../src/geometry3d/CoincidentGeometryOps.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../curve/CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { AngleSweep } from \"./AngleSweep\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Segment1d } from \"./Segment1d\";\r\n\r\n/**\r\n * `CoincidentGeometryQuery` has methods useful in testing for overlapping geometry.\r\n * * Each instance carries tolerance information that can be reused over extended call sequences.\r\n * * These methods are expected to be called internally by CurveCurve intersection methods.\r\n * @internal\r\n */\r\nexport class CoincidentGeometryQuery {\r\n private _vectorU?: Vector3d;\r\n private _vectorV?: Vector3d;\r\n private _point0?: Point3d;\r\n private _point1?: Point3d;\r\n private _tolerance: number;\r\n public get tolerance(): number {\r\n return this._tolerance;\r\n }\r\n private constructor(tolerance: number = Geometry.smallMetricDistance) {\r\n this._tolerance = tolerance;\r\n }\r\n public static create(tolerance: number = Geometry.smallMetricDistance): CoincidentGeometryQuery {\r\n return new CoincidentGeometryQuery(tolerance);\r\n }\r\n /**\r\n * * Assign both the fraction and fraction1 values in the detail, possibly swapped.\r\n * * reevaluate the points as simple interpolation between given points.\r\n */\r\n public static assignDetailInterpolatedFractionsAndPoints(detail: CurveLocationDetail, f0: number, f1: number,\r\n pointA: Point3d, pointB: Point3d, swap: boolean = false) {\r\n if (swap) {\r\n detail.fraction = f1;\r\n detail.fraction1 = f0;\r\n } else {\r\n detail.fraction = f0;\r\n detail.fraction1 = f1;\r\n }\r\n detail.point = pointA.interpolate(detail.fraction, pointB, detail.point);\r\n detail.point1 = pointA.interpolate(detail.fraction1, pointB, detail.point1);\r\n\r\n }\r\n\r\n /** Return a curve location detail with projection of a `spacePoint` to the line segment with `pointA` and `pointB` */\r\n public projectPointToSegmentXY(spacePoint: Point3d, pointA: Point3d, pointB: Point3d): CurveLocationDetail {\r\n this._vectorU = Vector3d.createStartEnd(pointA, pointB, this._vectorU);\r\n this._vectorV = Vector3d.createStartEnd(pointA, spacePoint, this._vectorV);\r\n const uDotU = this._vectorU.dotProductXY(this._vectorU);\r\n const uDotV = this._vectorU.dotProductXY(this._vectorV);\r\n const fraction = Geometry.safeDivideFraction(uDotV, uDotU, 0.0);\r\n return CurveLocationDetail.createCurveFractionPoint(undefined, fraction,\r\n pointA.interpolate(fraction, pointB));\r\n }\r\n /**\r\n * Given a detail pair representing the projection of each of two colinear line segments onto the other,\r\n * clamp the details (in place) to the line segments' endpoints according to the given flags.\r\n * @param overlap segment overlap as returned by [[coincidentSegmentRangeXY]], modified on return\r\n * @param pointA0 start point of segment A\r\n * @param pointA1 end point of segment A\r\n * @param pointB0 start point of segment B\r\n * @param pointB1 end point of segment B\r\n * @param extendA0 whether to extend segment A beyond its start\r\n * @param extendA1 whether to extend segment A beyond its end\r\n * @param extendB0 whether to extend segment B beyond its start\r\n * @param extendB1 whether to extend segment B beyond its end\r\n * @return reference to the input clamped in place, or undefined (leaving interval untouched) if clamping would result in empty interval.\r\n */\r\n public clampCoincidentOverlapToSegmentBounds(overlap: CurveLocationDetailPair,\r\n pointA0: Point3d, pointA1: Point3d, pointB0: Point3d, pointB1: Point3d,\r\n extendA0: boolean = false, extendA1: boolean = false, extendB0: boolean = false, extendB1: boolean = false,\r\n ): CurveLocationDetailPair | undefined {\r\n const rangeA = Segment1d.create(overlap.detailA.fraction, overlap.detailA.hasFraction1 ? overlap.detailA.fraction1 : overlap.detailA.fraction);\r\n const rangeB = Segment1d.create(overlap.detailB.fraction, overlap.detailB.hasFraction1 ? overlap.detailB.fraction1 : overlap.detailB.fraction);\r\n const reversed = rangeA.signedDelta() < 0.0;\r\n\r\n const updateIntervalFromRangesAndInterpolatedPoints = (): CurveLocationDetailPair => {\r\n const a0 = rangeA.x0;\r\n const a1 = rangeA.x1;\r\n const b0 = rangeB.x0;\r\n const b1 = rangeB.x1;\r\n CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(overlap.detailA, a0, a1, pointA0, pointA1, a0 > a1);\r\n CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(overlap.detailB, b0, b1, pointB0, pointB1, b0 > b1);\r\n return overlap;\r\n };\r\n\r\n const haveIntervalA = rangeA.clampDirectedTo01(!extendA0, !extendA1, false);\r\n const haveIntervalB = rangeB.clampDirectedTo01(!extendB0, !extendB1, false);\r\n if (haveIntervalA && haveIntervalB) {\r\n if (Geometry.isAlmostEqualNumber(rangeA.absoluteDelta(), rangeB.absoluteDelta(), Geometry.smallFraction))\r\n return updateIntervalFromRangesAndInterpolatedPoints(); // intersection of partially clamped ranges\r\n else if (rangeA.clampDirectedTo01(true, true, false) && rangeB.clampDirectedTo01(true, true, false))\r\n return updateIntervalFromRangesAndInterpolatedPoints(); // intersection of fully clamped ranges\r\n }\r\n\r\n const collapseToSingleton = (pointA: Point3d, pointB: Point3d, atStartA: boolean, atStartB: boolean): CurveLocationDetailPair => {\r\n pointA.clone(overlap.detailA.point);\r\n pointB.clone(overlap.detailB.point);\r\n overlap.detailA.fraction = atStartA ? 0.0 : 1.0;\r\n overlap.detailB.fraction = atStartB ? 0.0 : 1.0;\r\n overlap.detailA.collapseToStart();\r\n overlap.detailB.collapseToStart();\r\n return overlap;\r\n };\r\n\r\n const haveSingletonA = rangeA.clampDirectedTo01(true, true, true);\r\n const haveSingletonB = rangeB.clampDirectedTo01(true, true, true);\r\n if (haveSingletonA && haveSingletonB) { // intersection is a single point\r\n const point1 = overlap.detailA.point1 ?? overlap.detailA.point;\r\n if (reversed) {\r\n if (overlap.detailA.point.isAlmostEqual(pointA0, this.tolerance))\r\n return collapseToSingleton(pointA0, pointB0, true, true);\r\n else if (point1.isAlmostEqual(pointA1, this.tolerance))\r\n return collapseToSingleton(pointA1, pointB1, false, false);\r\n } else {\r\n if (point1.isAlmostEqual(pointA0, this.tolerance))\r\n return collapseToSingleton(pointA0, pointB1, true, false);\r\n else if (overlap.detailA.point.isAlmostEqual(pointA1, this.tolerance))\r\n return collapseToSingleton(pointA1, pointB0, false, true);\r\n }\r\n }\r\n return undefined; // no intersection\r\n }\r\n /**\r\n * Compute whether two line segments have a coincident overlap in xy.\r\n * * Project `pointA0` and `pointA1` onto the line formed by `pointB0` and `pointB1` and vice versa\r\n * * If all projection distances are sufficiently small, return a detail pair recording the coincident interval, optionally clipped to segment bounds.\r\n * @param pointA0 start point of segment A\r\n * @param pointA1 end point of segment A\r\n * @param pointB0 start point of segment B\r\n * @param pointB1 end point of segment B\r\n * @param restrictToBounds whether to clip the coincident segment details to the segment bounds\r\n * @return detail pair for the coincident interval (`detailA` has fractions along segment A, and `detailB` has fractions along segment B), or undefined if no coincidence\r\n */\r\n public coincidentSegmentRangeXY(pointA0: Point3d, pointA1: Point3d, pointB0: Point3d, pointB1: Point3d, restrictToBounds: boolean = true): CurveLocationDetailPair | undefined {\r\n const detailA0OnB = this.projectPointToSegmentXY(pointA0, pointB0, pointB1);\r\n if (pointA0.distanceXY(detailA0OnB.point) > this._tolerance)\r\n return undefined;\r\n const detailA1OnB = this.projectPointToSegmentXY(pointA1, pointB0, pointB1);\r\n if (pointA1.distanceXY(detailA1OnB.point) > this._tolerance)\r\n return undefined;\r\n\r\n const detailB0OnA = this.projectPointToSegmentXY(pointB0, pointA0, pointA1);\r\n if (pointB0.distanceXY(detailB0OnA.point) > this._tolerance)\r\n return undefined;\r\n const detailB1OnA = this.projectPointToSegmentXY(pointB1, pointA0, pointA1);\r\n if (pointB1.distanceXY(detailB1OnA.point) > this._tolerance)\r\n return undefined;\r\n\r\n detailA0OnB.fraction1 = detailA1OnB.fraction;\r\n detailA0OnB.point1 = detailA1OnB.point; // capture -- detailA1OnB is not reused.\r\n detailB0OnA.fraction1 = detailB1OnA.fraction;\r\n detailB0OnA.point1 = detailB1OnA.point;\r\n const interval = CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);\r\n\r\n return restrictToBounds ? this.clampCoincidentOverlapToSegmentBounds(interval, pointA0, pointA1, pointB0, pointB1) : interval;\r\n }\r\n /**\r\n * Create a CurveLocationDetailPair for a coincident interval of two overlapping curves\r\n * @param cpA curveA\r\n * @param cpB curveB\r\n * @param fractionsOnA coincident interval of curveB in fraction space of curveA\r\n * @param fractionB0 curveB start in fraction space of curveA\r\n * @param fractionB1 curveB end in fraction space of curveA\r\n * @param reverse whether curveB and curveA have opposite direction\r\n */\r\n private createDetailPair(cpA: CurvePrimitive, cpB: CurvePrimitive, fractionsOnA: Segment1d, fractionB0: number, fractionB1: number, reverse: boolean): CurveLocationDetailPair | undefined {\r\n const deltaB = fractionB1 - fractionB0;\r\n const g0 = Geometry.conditionalDivideFraction(fractionsOnA.x0 - fractionB0, deltaB);\r\n const g1 = Geometry.conditionalDivideFraction(fractionsOnA.x1 - fractionB0, deltaB);\r\n if (g0 !== undefined && g1 !== undefined) {\r\n const detailA = CurveLocationDetail.createCurveEvaluatedFractionFraction(cpA, fractionsOnA.x0, fractionsOnA.x1);\r\n const detailB = CurveLocationDetail.createCurveEvaluatedFractionFraction(cpB, g0, g1);\r\n if (reverse)\r\n detailA.swapFractionsAndPoints();\r\n return CurveLocationDetailPair.createCapture(detailA, detailB);\r\n }\r\n return undefined;\r\n }\r\n private appendDetailPair(result: CurveLocationDetailPair[] | undefined, pair: CurveLocationDetailPair | undefined): CurveLocationDetailPair[] | undefined {\r\n if (pair === undefined)\r\n return result;\r\n if (result === undefined)\r\n return [pair];\r\n result.push(pair);\r\n return result;\r\n }\r\n /**\r\n * Test if 2 arcs have coinciding portions.\r\n * @param arcA\r\n * @param arcB\r\n * @param _restrictToBounds\r\n * @return 0, 1, or 2 overlap points/intervals\r\n */\r\n public coincidentArcIntersectionXY(arcA: Arc3d, arcB: Arc3d, _restrictToBounds: boolean = true): CurveLocationDetailPair[] | undefined {\r\n let result: CurveLocationDetailPair[] | undefined;\r\n if (arcA.center.isAlmostEqual(arcB.center, this.tolerance)) {\r\n const matrixBToA = arcA.matrixRef.multiplyMatrixInverseMatrix(arcB.matrixRef);\r\n if (matrixBToA) {\r\n const ux = matrixBToA.at(0, 0); const uy = matrixBToA.at(1, 0);\r\n const vx = matrixBToA.at(0, 1); const vy = matrixBToA.at(1, 1);\r\n const ru = Geometry.hypotenuseXY(ux, uy);\r\n const rv = Geometry.hypotenuseXY(vx, vy);\r\n const dot = Geometry.dotProductXYXY(ux, uy, vx, vy);\r\n const cross = Geometry.crossProductXYXY(ux, uy, vx, vy);\r\n if (Geometry.isAlmostEqualNumber(ru, 1.0)\r\n && Geometry.isAlmostEqualNumber(rv, 1.0)\r\n && Geometry.isAlmostEqualNumber(0, dot)) {\r\n const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in arcA sweep\r\n const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB parameter space sweeps in same direction as arcA, -1 if opposite\r\n const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians; // arcB start in arcA parameter space\r\n const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians; // arcB end in arcA parameter space\r\n const fractionSpacesReversed = (sweepDirection * arcA.sweep.sweepRadians * arcB.sweep.sweepRadians) < 0;\r\n const sweepB = AngleSweep.createStartEndRadians(betaStartRadians, betaEndRadians);\r\n const sweepA = arcA.sweep;\r\n const fractionPeriodA = sweepA.fractionPeriod();\r\n const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians); // arcB start in arcA fraction space\r\n assert(fractionB0 >= 0.0);\r\n const fractionSweep = sweepB.sweepRadians / sweepA.sweepRadians; // arcB sweep in arcA fraction space\r\n const fractionB1 = fractionB0 + fractionSweep; // arcB end in arcA fraction space\r\n const fractionSweepB = Segment1d.create(fractionB0, fractionB1);\r\n\r\n /** lambda to add a coincident interval or isolated intersection, given inputs in arcA fraction space\r\n * @param arcBInArcAFractionSpace span of arcB in arcA fraction space. On return, clamped to [0,1] if nontrivial.\r\n * @param testStartOfArcA if no nontrivial coincident interval was found, look for an isolated intersection at the start (true) or end (false) of arcA\r\n * @returns whether a detail pair was appended to result\r\n */\r\n const appendCoincidentIntersection = (arcBInArcAFractionSpace: Segment1d, testStartOfArcA: boolean): boolean => {\r\n const size = result ? result.length : 0;\r\n const arcBStart = arcBInArcAFractionSpace.x0;\r\n const arcBEnd = arcBInArcAFractionSpace.x1;\r\n if (arcBInArcAFractionSpace.clampDirectedTo01() && !Geometry.isSmallRelative(arcBInArcAFractionSpace.absoluteDelta())) {\r\n result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, arcBInArcAFractionSpace, arcBStart, arcBEnd, fractionSpacesReversed));\r\n } else { // test isolated intersection\r\n const testStartOfArcB = fractionSpacesReversed ? testStartOfArcA : !testStartOfArcA;\r\n const arcAPt = this._point0 = testStartOfArcA ? arcA.startPoint(this._point0) : arcA.endPoint(this._point0);\r\n const arcBPt = this._point1 = testStartOfArcB ? arcB.startPoint(this._point1) : arcB.endPoint(this._point1);\r\n if (arcAPt.isAlmostEqual(arcBPt, this.tolerance)) {\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(arcA, testStartOfArcA ? 0 : 1, arcAPt);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(arcB, testStartOfArcB ? 0 : 1, arcBPt);\r\n result = this.appendDetailPair(result, CurveLocationDetailPair.createCapture(detailA, detailB));\r\n }\r\n }\r\n return result !== undefined && result.length > size;\r\n };\r\n\r\n appendCoincidentIntersection(fractionSweepB, false); // compute overlap in strict interior, or at end of arcA\r\n\r\n // check overlap at start of arcA with a periodic shift of fractionSweepB\r\n if (fractionB1 >= fractionPeriodA)\r\n appendCoincidentIntersection(Segment1d.create(fractionB0 - fractionPeriodA, fractionB1 - fractionPeriodA), true);\r\n else if (fractionB0 === 0.0)\r\n appendCoincidentIntersection(Segment1d.create(fractionB0 + fractionPeriodA, fractionB1 + fractionPeriodA), true);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CoincidentGeometryOps.js","sourceRoot":"","sources":["../../../src/geometry3d/CoincidentGeometryOps.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"../curve/CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { AngleSweep } from \"./AngleSweep\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Segment1d } from \"./Segment1d\";\r\n\r\n/**\r\n * `CoincidentGeometryQuery` has methods useful in testing for overlapping geometry.\r\n * * Each instance carries tolerance information that can be reused over extended call sequences.\r\n * * These methods are expected to be called internally by CurveCurve intersection methods.\r\n * @internal\r\n */\r\nexport class CoincidentGeometryQuery {\r\n private _vectorU?: Vector3d;\r\n private _vectorV?: Vector3d;\r\n private _point0?: Point3d;\r\n private _point1?: Point3d;\r\n private _tolerance: number;\r\n public get tolerance(): number {\r\n return this._tolerance;\r\n }\r\n private constructor(tolerance: number = Geometry.smallMetricDistance) {\r\n this._tolerance = tolerance;\r\n }\r\n public static create(tolerance: number = Geometry.smallMetricDistance): CoincidentGeometryQuery {\r\n return new CoincidentGeometryQuery(tolerance);\r\n }\r\n /**\r\n * * Assign both the fraction and fraction1 values in the detail, possibly swapped.\r\n * * reevaluate the points as simple interpolation between given points.\r\n */\r\n public static assignDetailInterpolatedFractionsAndPoints(detail: CurveLocationDetail, f0: number, f1: number,\r\n pointA: Point3d, pointB: Point3d, swap: boolean = false) {\r\n if (swap) {\r\n detail.fraction = f1;\r\n detail.fraction1 = f0;\r\n } else {\r\n detail.fraction = f0;\r\n detail.fraction1 = f1;\r\n }\r\n detail.point = pointA.interpolate(detail.fraction, pointB, detail.point);\r\n detail.point1 = pointA.interpolate(detail.fraction1, pointB, detail.point1);\r\n\r\n }\r\n\r\n /** Return a curve location detail with projection of a `spacePoint` to the line segment with `pointA` and `pointB` */\r\n public projectPointToSegmentXY(spacePoint: Point3d, pointA: Point3d, pointB: Point3d): CurveLocationDetail {\r\n this._vectorU = Vector3d.createStartEnd(pointA, pointB, this._vectorU);\r\n this._vectorV = Vector3d.createStartEnd(pointA, spacePoint, this._vectorV);\r\n const uDotU = this._vectorU.dotProductXY(this._vectorU);\r\n const uDotV = this._vectorU.dotProductXY(this._vectorV);\r\n const fraction = Geometry.safeDivideFraction(uDotV, uDotU, 0.0);\r\n return CurveLocationDetail.createCurveFractionPoint(undefined, fraction,\r\n pointA.interpolate(fraction, pointB));\r\n }\r\n /**\r\n * Given a detail pair representing the projection of each of two colinear line segments onto the other,\r\n * clamp the details (in place) to the line segments' endpoints according to the given flags.\r\n * @param overlap segment overlap as returned by [[coincidentSegmentRangeXY]], modified on return\r\n * @param pointA0 start point of segment A\r\n * @param pointA1 end point of segment A\r\n * @param pointB0 start point of segment B\r\n * @param pointB1 end point of segment B\r\n * @param extendA0 whether to extend segment A beyond its start\r\n * @param extendA1 whether to extend segment A beyond its end\r\n * @param extendB0 whether to extend segment B beyond its start\r\n * @param extendB1 whether to extend segment B beyond its end\r\n * @return reference to the input clamped in place, or undefined (leaving interval untouched) if clamping would result in empty interval.\r\n */\r\n public clampCoincidentOverlapToSegmentBounds(overlap: CurveLocationDetailPair,\r\n pointA0: Point3d, pointA1: Point3d, pointB0: Point3d, pointB1: Point3d,\r\n extendA0: boolean = false, extendA1: boolean = false, extendB0: boolean = false, extendB1: boolean = false,\r\n ): CurveLocationDetailPair | undefined {\r\n const rangeA = Segment1d.create(overlap.detailA.fraction, overlap.detailA.hasFraction1 ? overlap.detailA.fraction1 : overlap.detailA.fraction);\r\n const rangeB = Segment1d.create(overlap.detailB.fraction, overlap.detailB.hasFraction1 ? overlap.detailB.fraction1 : overlap.detailB.fraction);\r\n const reversed = rangeA.signedDelta() < 0.0;\r\n\r\n const updateIntervalFromRangesAndInterpolatedPoints = (): CurveLocationDetailPair => {\r\n const a0 = rangeA.x0;\r\n const a1 = rangeA.x1;\r\n const b0 = rangeB.x0;\r\n const b1 = rangeB.x1;\r\n CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(overlap.detailA, a0, a1, pointA0, pointA1, a0 > a1);\r\n CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(overlap.detailB, b0, b1, pointB0, pointB1, b0 > b1);\r\n return overlap;\r\n };\r\n\r\n const haveIntervalA = rangeA.clampDirectedTo01(!extendA0, !extendA1, false);\r\n const haveIntervalB = rangeB.clampDirectedTo01(!extendB0, !extendB1, false);\r\n if (haveIntervalA && haveIntervalB) {\r\n if (Geometry.isAlmostEqualNumber(rangeA.absoluteDelta(), rangeB.absoluteDelta(), Geometry.smallFraction))\r\n return updateIntervalFromRangesAndInterpolatedPoints(); // intersection of partially clamped ranges\r\n else if (rangeA.clampDirectedTo01(true, true, false) && rangeB.clampDirectedTo01(true, true, false))\r\n return updateIntervalFromRangesAndInterpolatedPoints(); // intersection of fully clamped ranges\r\n }\r\n\r\n const collapseToSingleton = (pointA: Point3d, pointB: Point3d, atStartA: boolean, atStartB: boolean): CurveLocationDetailPair => {\r\n pointA.clone(overlap.detailA.point);\r\n pointB.clone(overlap.detailB.point);\r\n overlap.detailA.fraction = atStartA ? 0.0 : 1.0;\r\n overlap.detailB.fraction = atStartB ? 0.0 : 1.0;\r\n overlap.detailA.collapseToStart();\r\n overlap.detailB.collapseToStart();\r\n return overlap;\r\n };\r\n\r\n const haveSingletonA = rangeA.clampDirectedTo01(true, true, true);\r\n const haveSingletonB = rangeB.clampDirectedTo01(true, true, true);\r\n if (haveSingletonA && haveSingletonB) { // intersection is a single point\r\n const point1 = overlap.detailA.point1 ?? overlap.detailA.point;\r\n if (reversed) {\r\n if (overlap.detailA.point.isAlmostEqual(pointA0, this.tolerance))\r\n return collapseToSingleton(pointA0, pointB0, true, true);\r\n else if (point1.isAlmostEqual(pointA1, this.tolerance))\r\n return collapseToSingleton(pointA1, pointB1, false, false);\r\n } else {\r\n if (point1.isAlmostEqual(pointA0, this.tolerance))\r\n return collapseToSingleton(pointA0, pointB1, true, false);\r\n else if (overlap.detailA.point.isAlmostEqual(pointA1, this.tolerance))\r\n return collapseToSingleton(pointA1, pointB0, false, true);\r\n }\r\n }\r\n return undefined; // no intersection\r\n }\r\n /**\r\n * Compute whether two line segments have a coincident overlap in xy.\r\n * * Project `pointA0` and `pointA1` onto the line formed by `pointB0` and `pointB1` and vice versa\r\n * * If all projection distances are sufficiently small, return a detail pair recording the coincident interval, optionally clipped to segment bounds.\r\n * @param pointA0 start point of segment A\r\n * @param pointA1 end point of segment A\r\n * @param pointB0 start point of segment B\r\n * @param pointB1 end point of segment B\r\n * @param restrictToBounds whether to clip the coincident segment details to the segment bounds\r\n * @return detail pair for the coincident interval (`detailA` has fractions along segment A, and `detailB` has fractions along segment B), or undefined if no coincidence\r\n */\r\n public coincidentSegmentRangeXY(pointA0: Point3d, pointA1: Point3d, pointB0: Point3d, pointB1: Point3d, restrictToBounds: boolean = true): CurveLocationDetailPair | undefined {\r\n const detailA0OnB = this.projectPointToSegmentXY(pointA0, pointB0, pointB1);\r\n if (pointA0.distanceXY(detailA0OnB.point) > this._tolerance)\r\n return undefined;\r\n const detailA1OnB = this.projectPointToSegmentXY(pointA1, pointB0, pointB1);\r\n if (pointA1.distanceXY(detailA1OnB.point) > this._tolerance)\r\n return undefined;\r\n\r\n const detailB0OnA = this.projectPointToSegmentXY(pointB0, pointA0, pointA1);\r\n if (pointB0.distanceXY(detailB0OnA.point) > this._tolerance)\r\n return undefined;\r\n const detailB1OnA = this.projectPointToSegmentXY(pointB1, pointA0, pointA1);\r\n if (pointB1.distanceXY(detailB1OnA.point) > this._tolerance)\r\n return undefined;\r\n\r\n detailA0OnB.fraction1 = detailA1OnB.fraction;\r\n detailA0OnB.point1 = detailA1OnB.point; // capture -- detailA1OnB is not reused.\r\n detailB0OnA.fraction1 = detailB1OnA.fraction;\r\n detailB0OnA.point1 = detailB1OnA.point;\r\n const interval = CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);\r\n\r\n return restrictToBounds ? this.clampCoincidentOverlapToSegmentBounds(interval, pointA0, pointA1, pointB0, pointB1) : interval;\r\n }\r\n /**\r\n * Create a CurveLocationDetailPair for a coincident interval of two overlapping curves\r\n * @param cpA curveA\r\n * @param cpB curveB\r\n * @param fractionsOnA coincident interval of curveB in fraction space of curveA\r\n * @param fractionB0 curveB start in fraction space of curveA\r\n * @param fractionB1 curveB end in fraction space of curveA\r\n * @param reverse whether curveB and curveA have opposite direction\r\n */\r\n private createDetailPair(cpA: CurvePrimitive, cpB: CurvePrimitive, fractionsOnA: Segment1d, fractionB0: number, fractionB1: number, reverse: boolean): CurveLocationDetailPair | undefined {\r\n const deltaB = fractionB1 - fractionB0;\r\n const g0 = Geometry.conditionalDivideFraction(fractionsOnA.x0 - fractionB0, deltaB);\r\n const g1 = Geometry.conditionalDivideFraction(fractionsOnA.x1 - fractionB0, deltaB);\r\n if (g0 !== undefined && g1 !== undefined) {\r\n const detailA = CurveLocationDetail.createCurveEvaluatedFractionFraction(cpA, fractionsOnA.x0, fractionsOnA.x1);\r\n const detailB = CurveLocationDetail.createCurveEvaluatedFractionFraction(cpB, g0, g1);\r\n if (reverse)\r\n detailA.swapFractionsAndPoints();\r\n return CurveLocationDetailPair.createCapture(detailA, detailB);\r\n }\r\n return undefined;\r\n }\r\n private appendDetailPair(result: CurveLocationDetailPair[] | undefined, pair: CurveLocationDetailPair | undefined): CurveLocationDetailPair[] | undefined {\r\n if (pair === undefined)\r\n return result;\r\n if (result === undefined)\r\n return [pair];\r\n result.push(pair);\r\n return result;\r\n }\r\n /**\r\n * Test if 2 arcs have coinciding portions.\r\n * @param arcA\r\n * @param arcB\r\n * @param _restrictToBounds\r\n * @return 0, 1, or 2 overlap points/intervals\r\n */\r\n public coincidentArcIntersectionXY(arcA: Arc3d, arcB: Arc3d, _restrictToBounds: boolean = true): CurveLocationDetailPair[] | undefined {\r\n let result: CurveLocationDetailPair[] | undefined;\r\n if (arcA.center.isAlmostEqual(arcB.center, this.tolerance)) {\r\n const matrixBToA = arcA.matrixRef.multiplyMatrixInverseMatrix(arcB.matrixRef);\r\n if (matrixBToA) {\r\n const ux = matrixBToA.at(0, 0); const uy = matrixBToA.at(1, 0);\r\n const vx = matrixBToA.at(0, 1); const vy = matrixBToA.at(1, 1);\r\n const ru = Geometry.hypotenuseXY(ux, uy);\r\n const rv = Geometry.hypotenuseXY(vx, vy);\r\n const dot = Geometry.dotProductXYXY(ux, uy, vx, vy);\r\n const cross = Geometry.crossProductXYXY(ux, uy, vx, vy);\r\n if (Geometry.isAlmostEqualNumber(ru, 1.0)\r\n && Geometry.isAlmostEqualNumber(rv, 1.0)\r\n && Geometry.isAlmostEqualNumber(0, dot)) {\r\n const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in arcA sweep\r\n const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB parameter space sweeps in same direction as arcA, -1 if opposite\r\n const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians; // arcB start in arcA parameter space\r\n const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians; // arcB end in arcA parameter space\r\n const fractionSpacesReversed = (sweepDirection * arcA.sweep.sweepRadians * arcB.sweep.sweepRadians) < 0;\r\n const sweepB = AngleSweep.createStartEndRadians(betaStartRadians, betaEndRadians);\r\n const sweepA = arcA.sweep;\r\n const fractionPeriodA = sweepA.fractionPeriod();\r\n const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians); // arcB start in arcA fraction space\r\n assert(fractionB0 >= 0.0);\r\n const fractionSweep = sweepB.sweepRadians / sweepA.sweepRadians; // arcB sweep in arcA fraction space\r\n const fractionB1 = fractionB0 + fractionSweep; // arcB end in arcA fraction space\r\n const fractionSweepB = Segment1d.create(fractionB0, fractionB1);\r\n\r\n /** lambda to add a coincident interval or isolated intersection, given inputs in arcA fraction space\r\n * @param arcBInArcAFractionSpace span of arcB in arcA fraction space. On return, clamped to [0,1] if nontrivial.\r\n * @param testStartOfArcA if no nontrivial coincident interval was found, look for an isolated intersection at the start (true) or end (false) of arcA\r\n * @returns whether a detail pair was appended to result\r\n */\r\n const appendCoincidentIntersection = (arcBInArcAFractionSpace: Segment1d, testStartOfArcA: boolean): boolean => {\r\n const size = result ? result.length : 0;\r\n const arcBStart = arcBInArcAFractionSpace.x0;\r\n const arcBEnd = arcBInArcAFractionSpace.x1;\r\n if (arcBInArcAFractionSpace.clampDirectedTo01() && !Geometry.isSmallRelative(arcBInArcAFractionSpace.absoluteDelta())) {\r\n result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, arcBInArcAFractionSpace, arcBStart, arcBEnd, fractionSpacesReversed));\r\n } else { // test isolated intersection\r\n const testStartOfArcB = fractionSpacesReversed ? testStartOfArcA : !testStartOfArcA;\r\n const arcAPt = this._point0 = testStartOfArcA ? arcA.startPoint(this._point0) : arcA.endPoint(this._point0);\r\n const arcBPt = this._point1 = testStartOfArcB ? arcB.startPoint(this._point1) : arcB.endPoint(this._point1);\r\n if (arcAPt.isAlmostEqual(arcBPt, this.tolerance)) {\r\n const detailA = CurveLocationDetail.createCurveFractionPoint(arcA, testStartOfArcA ? 0 : 1, arcAPt);\r\n const detailB = CurveLocationDetail.createCurveFractionPoint(arcB, testStartOfArcB ? 0 : 1, arcBPt);\r\n result = this.appendDetailPair(result, CurveLocationDetailPair.createCapture(detailA, detailB));\r\n }\r\n }\r\n return result !== undefined && result.length > size;\r\n };\r\n\r\n appendCoincidentIntersection(fractionSweepB, false); // compute overlap in strict interior, or at end of arcA\r\n\r\n // check overlap at start of arcA with a periodic shift of fractionSweepB\r\n if (fractionB1 >= fractionPeriodA)\r\n appendCoincidentIntersection(Segment1d.create(fractionB0 - fractionPeriodA, fractionB1 - fractionPeriodA), true);\r\n else if (fractionB0 === 0.0)\r\n appendCoincidentIntersection(Segment1d.create(fractionB0 + fractionPeriodA, fractionB1 + fractionPeriodA), true);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
@@ -19,18 +19,19 @@ import { Ray3d } from "./Ray3d";
19
19
  import { Transform } from "./Transform";
20
20
  import { XYAndZ } from "./XYZProps";
21
21
  /**
22
- * * An Ellipsoid is a (complete) unit sphere with an arbitrary (possibly skewed) `Transform` to 3d.
22
+ * A complete unit sphere mapped by an arbitrary [[Transform]].
23
23
  * * The (unit) sphere parameterization with respect to longitude `theta` and latitude `phi` is
24
24
  * * `u = cos(theta) * cos (phi)`
25
25
  * * `v = sin(theta) * cos(phi)`
26
26
  * * `w = sin(phi)`
27
- * * The sphere (u,v,w) multiply the x,y,z columns of the Ellipsoid transform.
27
+ * * The sphere (u,v,w) multiply the x,y,z columns of the Ellipsoid transform.
28
+ * * Compare to [[Sphere]], which has the same parameterization, but is a [[SolidPrimitive]] with latitude sweep.
28
29
  * @public
29
30
  */
30
31
  export declare class Ellipsoid implements Clipper {
31
32
  private _transform;
32
- private _unitVectorA;
33
- private _unitVectorB;
33
+ private _workUnitVectorA;
34
+ private _workUnitVectorB;
34
35
  private _workPointA;
35
36
  private _workPointB;
36
37
  private constructor();
@@ -231,11 +232,11 @@ export declare class Ellipsoid implements Clipper {
231
232
  * * if not given, return surface point and unit normal for unit sphere.
232
233
  */
233
234
  static radiansToUnitNormalRay(ellipsoid: Ellipsoid | undefined, thetaRadians: number, phiRadians: number, result?: Ray3d): Ray3d | undefined;
234
- /** Implement the `isPointInOnOrOutside` test fom the `interface` */
235
+ /** Implementation of [[Clipper.isPointOnOrInside]]. */
235
236
  isPointOnOrInside(point: Point3d): boolean;
236
- /** Announce "in" portions of a line segment. See `Clipper.announceClippedSegmentIntervals` */
237
+ /** Announce "in" portions of a line segment. Implementation of [[Clipper.announceClippedSegmentIntervals]]. */
237
238
  announceClippedSegmentIntervals(f0: number, f1: number, pointA: Point3d, pointB: Point3d, announce?: AnnounceNumberNumber): boolean;
238
- /** Announce "in" portions of a line segment. See `Clipper.announceClippedSegmentIntervals` */
239
+ /** Announce "in" portions of a line segment. Implementation of [[Clipper.announceClippedArcIntervals]] */
239
240
  announceClippedArcIntervals(arc: Arc3d, announce?: AnnounceNumberNumberCurvePrimitive): boolean;
240
241
  }
241
242
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Ellipsoid.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Ellipsoid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Ellipsoid.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Ellipsoid.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,20 @@ const Transform_1 = require("./Transform");
44
44
  * @internal
45
45
  */
46
46
  class EllipsoidComponentExtrema {
47
+ c;
48
+ u;
49
+ v;
50
+ w;
51
+ axisIndex;
52
+ theta0Radians;
53
+ phi0Radians;
54
+ cosTheta0;
55
+ sinTheta0;
56
+ cosPhi0;
57
+ sinPhi0;
58
+ // temp vars used in arc range evaluation:
59
+ _axisRange;
60
+ _trigForm;
47
61
  constructor(c, u, v, w, axisIndex) {
48
62
  this.c = c;
49
63
  this.u = u;
@@ -117,19 +131,25 @@ class EllipsoidComponentExtrema {
117
131
  }
118
132
  }
119
133
  /**
120
- * * An Ellipsoid is a (complete) unit sphere with an arbitrary (possibly skewed) `Transform` to 3d.
134
+ * A complete unit sphere mapped by an arbitrary [[Transform]].
121
135
  * * The (unit) sphere parameterization with respect to longitude `theta` and latitude `phi` is
122
136
  * * `u = cos(theta) * cos (phi)`
123
137
  * * `v = sin(theta) * cos(phi)`
124
138
  * * `w = sin(phi)`
125
- * * The sphere (u,v,w) multiply the x,y,z columns of the Ellipsoid transform.
139
+ * * The sphere (u,v,w) multiply the x,y,z columns of the Ellipsoid transform.
140
+ * * Compare to [[Sphere]], which has the same parameterization, but is a [[SolidPrimitive]] with latitude sweep.
126
141
  * @public
127
142
  */
128
143
  class Ellipsoid {
144
+ _transform;
145
+ _workUnitVectorA;
146
+ _workUnitVectorB;
147
+ _workPointA;
148
+ _workPointB;
129
149
  constructor(transform) {
130
150
  this._transform = transform;
131
- this._unitVectorA = Point3dVector3d_1.Vector3d.create();
132
- this._unitVectorB = Point3dVector3d_1.Vector3d.create();
151
+ this._workUnitVectorA = Point3dVector3d_1.Vector3d.create();
152
+ this._workUnitVectorB = Point3dVector3d_1.Vector3d.create();
133
153
  this._workPointA = Point3dVector3d_1.Point3d.create();
134
154
  this._workPointB = Point3dVector3d_1.Point3d.create();
135
155
  }
@@ -341,11 +361,11 @@ class Ellipsoid {
341
361
  * @param result optional preallocated result
342
362
  */
343
363
  radiansPairToGreatArc(thetaARadians, phiARadians, thetaBRadians, phiBRadians, result) {
344
- Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaARadians, phiARadians, this._unitVectorA);
345
- Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaBRadians, phiBRadians, this._unitVectorB);
346
- const sweepAngle = this._unitVectorA.angleTo(this._unitVectorB);
364
+ Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaARadians, phiARadians, this._workUnitVectorA);
365
+ Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaBRadians, phiBRadians, this._workUnitVectorB);
366
+ const sweepAngle = this._workUnitVectorA.angleTo(this._workUnitVectorB);
347
367
  // the unit vectors (on unit sphere) are never 0, so this cannot fail.
348
- const matrix = Matrix3d_1.Matrix3d.createRigidFromColumns(this._unitVectorA, this._unitVectorB, Geometry_1.AxisOrder.XYZ);
368
+ const matrix = Matrix3d_1.Matrix3d.createRigidFromColumns(this._workUnitVectorA, this._workUnitVectorB, Geometry_1.AxisOrder.XYZ);
349
369
  if (matrix !== undefined) {
350
370
  const matrix1 = this._transform.matrix.multiplyMatrixMatrix(matrix);
351
371
  return Arc3d_1.Arc3d.create(this._transform.getOrigin(), matrix1.columnX(), matrix1.columnY(), AngleSweep_1.AngleSweep.createStartEndRadians(0.0, sweepAngle.radians), result);
@@ -430,9 +450,9 @@ class Ellipsoid {
430
450
  * @param result optional preallocated result
431
451
  */
432
452
  radiansPairToEquatorialEllipsoid(thetaARadians, phiARadians, thetaBRadians, phiBRadians, result) {
433
- Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaARadians, phiARadians, this._unitVectorA);
434
- Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaBRadians, phiBRadians, this._unitVectorB);
435
- const matrix = Matrix3d_1.Matrix3d.createRigidFromColumns(this._unitVectorA, this._unitVectorB, Geometry_1.AxisOrder.XYZ);
453
+ Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaARadians, phiARadians, this._workUnitVectorA);
454
+ Polynomials_1.SphereImplicit.radiansToUnitSphereXYZ(thetaBRadians, phiBRadians, this._workUnitVectorB);
455
+ const matrix = Matrix3d_1.Matrix3d.createRigidFromColumns(this._workUnitVectorA, this._workUnitVectorB, Geometry_1.AxisOrder.XYZ);
436
456
  if (matrix) {
437
457
  if (result) {
438
458
  this._transform.multiplyTransformMatrix3d(matrix, result._transform);
@@ -609,14 +629,14 @@ class Ellipsoid {
609
629
  result.direction.setFromPoint3d(result.origin);
610
630
  return result;
611
631
  }
612
- /** Implement the `isPointInOnOrOutside` test fom the `interface` */
632
+ /** Implementation of [[Clipper.isPointOnOrInside]]. */
613
633
  isPointOnOrInside(point) {
614
634
  const localPoint = this._transform.multiplyInversePoint3d(point, this._workPointA);
615
635
  if (localPoint !== undefined)
616
636
  return localPoint.magnitude() <= 1.0;
617
637
  return false;
618
638
  }
619
- /** Announce "in" portions of a line segment. See `Clipper.announceClippedSegmentIntervals` */
639
+ /** Announce "in" portions of a line segment. Implementation of [[Clipper.announceClippedSegmentIntervals]]. */
620
640
  announceClippedSegmentIntervals(f0, f1, pointA, pointB, announce) {
621
641
  const localA = this._transform.multiplyInversePoint3d(pointA, this._workPointA);
622
642
  const localB = this._transform.multiplyInversePoint3d(pointB, this._workPointB);
@@ -655,7 +675,7 @@ class Ellipsoid {
655
675
  }
656
676
  return false;
657
677
  }
658
- /** Announce "in" portions of a line segment. See `Clipper.announceClippedSegmentIntervals` */
678
+ /** Announce "in" portions of a line segment. Implementation of [[Clipper.announceClippedArcIntervals]] */
659
679
  announceClippedArcIntervals(arc, announce) {
660
680
  const arcData = arc.toVectors();
661
681
  let numAnnounce = 0;
@@ -708,6 +728,9 @@ exports.Ellipsoid = Ellipsoid;
708
728
  * @public
709
729
  */
710
730
  class EllipsoidPatch {
731
+ ellipsoid;
732
+ longitudeSweep;
733
+ latitudeSweep;
711
734
  /**
712
735
  * CAPTURE ellipsoid and sweeps as an EllipsoidPatch.
713
736
  * @param ellipsoid
@@ -818,6 +841,15 @@ exports.EllipsoidPatch = EllipsoidPatch;
818
841
  * Internal class for searching for the closest point (projection of spacePoint) on an ellipsoid.
819
842
  */
820
843
  class EllipsoidClosestPoint extends Newton_1.NewtonEvaluatorRRtoRRD {
844
+ _ellipsoid;
845
+ _spacePoint;
846
+ _surfacePoint;
847
+ _d1Theta;
848
+ _d2Theta;
849
+ _d1Phi;
850
+ _d2Phi;
851
+ _d2ThetaPhi;
852
+ _delta;
821
853
  constructor(ellipsoid) {
822
854
  super();
823
855
  this._ellipsoid = ellipsoid;
@@ -863,6 +895,17 @@ class EllipsoidClosestPoint extends Newton_1.NewtonEvaluatorRRtoRRD {
863
895
  * @public
864
896
  */
865
897
  class GeodesicPathPoint {
898
+ /** First angle, in radians */
899
+ thetaRadians;
900
+ /** Second angle, in radians */
901
+ phiRadians;
902
+ point;
903
+ dTheta;
904
+ dPhi;
905
+ d2Theta;
906
+ d2Phi;
907
+ d2ThetaPhi;
908
+ d1Cross;
866
909
  constructor() {
867
910
  this.thetaRadians = 0;
868
911
  this.phiRadians = 0;
@@ -879,6 +922,9 @@ class GeodesicPathPoint {
879
922
  ellipsoid.radiansToPointAnd2Derivatives(this.thetaRadians, this.phiRadians, this.point, this.dTheta, this.dPhi, this.d2Theta, this.d2Phi, this.d2ThetaPhi);
880
923
  this.dTheta.crossProduct(this.dPhi, this.d1Cross);
881
924
  }
925
+ static _vectorAB;
926
+ static _vectorCB;
927
+ static _vectorCross;
882
928
  /** Evaluate the newton function and derivatives:
883
929
  * `(UAB cross UCB) dot d1cross`
884
930
  * with as the central data, UAB = vector from pointA to pointB, UCB = vector from pointC to pointB.
@@ -920,6 +966,9 @@ exports.GeodesicPathPoint = GeodesicPathPoint;
920
966
  * @public
921
967
  */
922
968
  class GeodesicPathSolver {
969
+ _defaultArc;
970
+ _pathPoints;
971
+ _tridiagonalSolver;
923
972
  constructor(defaultArc) {
924
973
  this._pathPoints = [];
925
974
  this._defaultArc = defaultArc;