@itwin/core-geometry 5.7.2 → 5.8.0-dev.10

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 (242) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/lib/cjs/Geometry.d.ts +24 -14
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +34 -14
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/BSplineCurve.d.ts +1 -1
  7. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js +1 -1
  9. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  10. package/lib/cjs/clipping/ClipPrimitive.d.ts +2 -1
  11. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  12. package/lib/cjs/clipping/ClipPrimitive.js +2 -1
  13. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  14. package/lib/cjs/core-geometry.d.ts +1 -0
  15. package/lib/cjs/core-geometry.d.ts.map +1 -1
  16. package/lib/cjs/core-geometry.js +1 -0
  17. package/lib/cjs/core-geometry.js.map +1 -1
  18. package/lib/cjs/curve/Arc3d.d.ts +19 -3
  19. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  20. package/lib/cjs/curve/Arc3d.js +50 -23
  21. package/lib/cjs/curve/Arc3d.js.map +1 -1
  22. package/lib/cjs/curve/ConstrainedCurve2d.d.ts +149 -0
  23. package/lib/cjs/curve/ConstrainedCurve2d.d.ts.map +1 -0
  24. package/lib/cjs/curve/ConstrainedCurve2d.js +317 -0
  25. package/lib/cjs/curve/ConstrainedCurve2d.js.map +1 -0
  26. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +18 -5
  27. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  28. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +34 -14
  29. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  30. package/lib/cjs/curve/CurveCollection.d.ts +12 -11
  31. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  32. package/lib/cjs/curve/CurveCollection.js +36 -36
  33. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  34. package/lib/cjs/curve/CurveExtendMode.d.ts +5 -5
  35. package/lib/cjs/curve/CurveExtendMode.d.ts.map +1 -1
  36. package/lib/cjs/curve/CurveExtendMode.js +4 -1
  37. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  38. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  39. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  40. package/lib/cjs/curve/CurvePrimitive.d.ts +14 -2
  41. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  42. package/lib/cjs/curve/CurvePrimitive.js +19 -3
  43. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  44. package/lib/cjs/curve/LineSegment3d.d.ts +2 -2
  45. package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
  46. package/lib/cjs/curve/LineSegment3d.js +2 -2
  47. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  48. package/lib/cjs/curve/LineString3d.d.ts +1 -1
  49. package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
  50. package/lib/cjs/curve/LineString3d.js +1 -1
  51. package/lib/cjs/curve/LineString3d.js.map +1 -1
  52. package/lib/cjs/curve/Path.d.ts +4 -15
  53. package/lib/cjs/curve/Path.d.ts.map +1 -1
  54. package/lib/cjs/curve/Path.js +1 -35
  55. package/lib/cjs/curve/Path.js.map +1 -1
  56. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +2 -1
  57. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  58. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +18 -13
  59. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  60. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.d.ts +26 -0
  61. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.d.ts.map +1 -0
  62. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js +78 -0
  63. package/lib/cjs/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -0
  64. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts +152 -0
  65. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts.map +1 -0
  66. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js +843 -0
  67. package/lib/cjs/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -0
  68. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.d.ts +97 -0
  69. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.d.ts.map +1 -0
  70. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js +300 -0
  71. package/lib/cjs/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -0
  72. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts +105 -0
  73. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts.map +1 -0
  74. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js +141 -0
  75. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -0
  76. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts +27 -0
  77. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts.map +1 -0
  78. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js +152 -0
  79. package/lib/cjs/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -0
  80. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts +81 -0
  81. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts.map +1 -0
  82. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js +170 -0
  83. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -0
  84. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts +96 -0
  85. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts.map +1 -0
  86. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js +187 -0
  87. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -0
  88. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts +91 -0
  89. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts.map +1 -0
  90. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js +197 -0
  91. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -0
  92. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts +129 -0
  93. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts.map +1 -0
  94. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js +208 -0
  95. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -0
  96. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts +87 -0
  97. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts.map +1 -0
  98. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js +193 -0
  99. package/lib/cjs/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -0
  100. package/lib/cjs/geometry3d/Ellipsoid.d.ts +2 -1
  101. package/lib/cjs/geometry3d/Ellipsoid.d.ts.map +1 -1
  102. package/lib/cjs/geometry3d/Ellipsoid.js +2 -1
  103. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  104. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +7 -0
  105. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  106. package/lib/cjs/geometry3d/Point2dVector2d.js +9 -0
  107. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  108. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  109. package/lib/cjs/geometry3d/Ray3d.d.ts +5 -0
  110. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  111. package/lib/cjs/geometry3d/Ray3d.js +7 -0
  112. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  113. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  114. package/lib/cjs/numerics/Newton.js +2 -1
  115. package/lib/cjs/numerics/Newton.js.map +1 -1
  116. package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
  117. package/lib/cjs/numerics/Polynomials.js +8 -6
  118. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  119. package/lib/cjs/topology/HalfEdgeGraphSpineContext.d.ts.map +1 -1
  120. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +3 -1
  121. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  122. package/lib/esm/Geometry.d.ts +24 -14
  123. package/lib/esm/Geometry.d.ts.map +1 -1
  124. package/lib/esm/Geometry.js +34 -14
  125. package/lib/esm/Geometry.js.map +1 -1
  126. package/lib/esm/bspline/BSplineCurve.d.ts +1 -1
  127. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  128. package/lib/esm/bspline/BSplineCurve.js +1 -1
  129. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  130. package/lib/esm/clipping/ClipPrimitive.d.ts +2 -1
  131. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  132. package/lib/esm/clipping/ClipPrimitive.js +2 -1
  133. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  134. package/lib/esm/core-geometry.d.ts +1 -0
  135. package/lib/esm/core-geometry.d.ts.map +1 -1
  136. package/lib/esm/core-geometry.js +1 -0
  137. package/lib/esm/core-geometry.js.map +1 -1
  138. package/lib/esm/curve/Arc3d.d.ts +19 -3
  139. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  140. package/lib/esm/curve/Arc3d.js +50 -23
  141. package/lib/esm/curve/Arc3d.js.map +1 -1
  142. package/lib/esm/curve/ConstrainedCurve2d.d.ts +149 -0
  143. package/lib/esm/curve/ConstrainedCurve2d.d.ts.map +1 -0
  144. package/lib/esm/curve/ConstrainedCurve2d.js +313 -0
  145. package/lib/esm/curve/ConstrainedCurve2d.js.map +1 -0
  146. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +18 -5
  147. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  148. package/lib/esm/curve/CurveChainWithDistanceIndex.js +34 -14
  149. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  150. package/lib/esm/curve/CurveCollection.d.ts +12 -11
  151. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  152. package/lib/esm/curve/CurveCollection.js +36 -36
  153. package/lib/esm/curve/CurveCollection.js.map +1 -1
  154. package/lib/esm/curve/CurveExtendMode.d.ts +5 -5
  155. package/lib/esm/curve/CurveExtendMode.d.ts.map +1 -1
  156. package/lib/esm/curve/CurveExtendMode.js +4 -1
  157. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  158. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  159. package/lib/esm/curve/CurveFactory.js.map +1 -1
  160. package/lib/esm/curve/CurvePrimitive.d.ts +14 -2
  161. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  162. package/lib/esm/curve/CurvePrimitive.js +19 -3
  163. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  164. package/lib/esm/curve/LineSegment3d.d.ts +2 -2
  165. package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
  166. package/lib/esm/curve/LineSegment3d.js +2 -2
  167. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  168. package/lib/esm/curve/LineString3d.d.ts +1 -1
  169. package/lib/esm/curve/LineString3d.d.ts.map +1 -1
  170. package/lib/esm/curve/LineString3d.js +1 -1
  171. package/lib/esm/curve/LineString3d.js.map +1 -1
  172. package/lib/esm/curve/Path.d.ts +4 -15
  173. package/lib/esm/curve/Path.d.ts.map +1 -1
  174. package/lib/esm/curve/Path.js +1 -35
  175. package/lib/esm/curve/Path.js.map +1 -1
  176. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +2 -1
  177. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -1
  178. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +19 -14
  179. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  180. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.d.ts +26 -0
  181. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.d.ts.map +1 -0
  182. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js +74 -0
  183. package/lib/esm/curve/internalContexts/PointToCurveTangentHandler.js.map +1 -0
  184. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts +152 -0
  185. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.d.ts.map +1 -0
  186. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js +839 -0
  187. package/lib/esm/curve/internalContexts/geometry2d/ConstrainedImplicitCurve2d.js.map +1 -0
  188. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.d.ts +97 -0
  189. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.d.ts.map +1 -0
  190. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js +295 -0
  191. package/lib/esm/curve/internalContexts/geometry2d/ConstraintSet.js.map +1 -0
  192. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts +105 -0
  193. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.d.ts.map +1 -0
  194. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js +135 -0
  195. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2d.js.map +1 -0
  196. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts +27 -0
  197. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.d.ts.map +1 -0
  198. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js +148 -0
  199. package/lib/esm/curve/internalContexts/geometry2d/ImplicitCurve2dConverter.js.map +1 -0
  200. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts +81 -0
  201. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.d.ts.map +1 -0
  202. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js +166 -0
  203. package/lib/esm/curve/internalContexts/geometry2d/UnboundedCircle2d.js.map +1 -0
  204. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts +96 -0
  205. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.d.ts.map +1 -0
  206. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js +183 -0
  207. package/lib/esm/curve/internalContexts/geometry2d/UnboundedEllipse2d.js.map +1 -0
  208. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts +91 -0
  209. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.d.ts.map +1 -0
  210. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js +193 -0
  211. package/lib/esm/curve/internalContexts/geometry2d/UnboundedHyperbola2d.js.map +1 -0
  212. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts +129 -0
  213. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.d.ts.map +1 -0
  214. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js +204 -0
  215. package/lib/esm/curve/internalContexts/geometry2d/UnboundedLine2d.js.map +1 -0
  216. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts +87 -0
  217. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.d.ts.map +1 -0
  218. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js +189 -0
  219. package/lib/esm/curve/internalContexts/geometry2d/UnboundedParabola2d.js.map +1 -0
  220. package/lib/esm/geometry3d/Ellipsoid.d.ts +2 -1
  221. package/lib/esm/geometry3d/Ellipsoid.d.ts.map +1 -1
  222. package/lib/esm/geometry3d/Ellipsoid.js +2 -1
  223. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  224. package/lib/esm/geometry3d/Point2dVector2d.d.ts +7 -0
  225. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  226. package/lib/esm/geometry3d/Point2dVector2d.js +9 -0
  227. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  228. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  229. package/lib/esm/geometry3d/Ray3d.d.ts +5 -0
  230. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  231. package/lib/esm/geometry3d/Ray3d.js +7 -0
  232. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  233. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  234. package/lib/esm/numerics/Newton.js +2 -1
  235. package/lib/esm/numerics/Newton.js.map +1 -1
  236. package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
  237. package/lib/esm/numerics/Polynomials.js +8 -6
  238. package/lib/esm/numerics/Polynomials.js.map +1 -1
  239. package/lib/esm/topology/HalfEdgeGraphSpineContext.d.ts.map +1 -1
  240. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +3 -1
  241. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  242. package/package.json +3 -3
@@ -0,0 +1,149 @@
1
+ /** @packageDocumentation
2
+ * @module CartesianGeometry
3
+ */
4
+ import { Arc3d } from "./Arc3d";
5
+ import { CurveLocationDetailPair } from "./CurveLocationDetail";
6
+ import { LineSegment3d } from "./LineSegment3d";
7
+ /**
8
+ * The class has static methods to compute circles and lines with specified constrained (tangent to other lines/circles,
9
+ * perpendicular to other lines/circles, or a specified circle radius).
10
+ * * z components of the input curves are completely ignored.
11
+ * * In this API, a `LineSegment3d` input identifies the underlying unbounded line by its endpoints. The segment
12
+ * itself is bounded, but the geometric line constraint is applied as unbounded.
13
+ * * Each API not only returns the circles or lines that satisfy the constraints but also captures the input curve
14
+ * location details where the tangency/perpendicularity happens. Each returned element contains:
15
+ * * the curve (circle or line) that satisfies the constraints.
16
+ * * an array of {@link CurveLocationDetailPair} objects, where each pair holds:
17
+ * * `detailA`: the result curve with the contact point and fraction on the curve.
18
+ * * `detailB`: the input constraint curve with the same contact point and fraction on the constraint curve.
19
+ * @alpha
20
+ */
21
+ export declare class ConstrainedCurve2d {
22
+ /**
23
+ * Return all (i.e., up to 4) circles that are tangent to 3 given lines plus data about tangent points/fractions.
24
+ * @param lineA first line
25
+ * @param lineB second line
26
+ * @param lineC third line
27
+ */
28
+ static circlesTangentLineLineLine(lineA: LineSegment3d, lineB: LineSegment3d, lineC: LineSegment3d): {
29
+ curve: Arc3d;
30
+ details: CurveLocationDetailPair[];
31
+ }[] | undefined;
32
+ /**
33
+ * Return all (i.e., up to 2) unbounded lines perpendicular to a line and tangent to a circle plus data about
34
+ * perp/tangent points/fractions.
35
+ * @param line the line
36
+ * @param circle the circle
37
+ */
38
+ static linesPerpLineTangentCircle(line: LineSegment3d, circle: Arc3d): {
39
+ curve: LineSegment3d;
40
+ details: CurveLocationDetailPair[];
41
+ }[] | undefined;
42
+ /**
43
+ * Return all (i.e., 4) variants of the line perpendicular to 2 circles (line between centers, with ends at
44
+ * crossing points on respective circles) plus data about perp points/fractions.
45
+ * @param circleA first circle
46
+ * @param circleB second circle
47
+ */
48
+ static linesPerpCirclePerpCircle(circleA: Arc3d, circleB: Arc3d): {
49
+ curve: LineSegment3d;
50
+ details: CurveLocationDetailPair[];
51
+ }[] | undefined;
52
+ /**
53
+ * Return all (i.e., up to 2) unbounded lines perpendicular to a line and a circle plus data about perp points/fractions.
54
+ * @param line the line
55
+ * @param circle the circle
56
+ */
57
+ static linesPerpLinePerpCircle(line: LineSegment3d, circle: Arc3d): {
58
+ curve: LineSegment3d;
59
+ details: CurveLocationDetailPair[];
60
+ }[] | undefined;
61
+ /**
62
+ * Return all (i.e., up to 4) unbounded lines perpendicular to a circle and tangent to a circle plus data about
63
+ * perp/tangent points/fractions.
64
+ * Note that multiple colinear lines are returned tagged with diametrically opposing points of circleA.
65
+ * @param circleA first circle (for perpendicular constraint)
66
+ * @param circleB second circle (for tangent constraint)
67
+ */
68
+ static linesPerpCircleTangentCircle(circleA: Arc3d, circleB: Arc3d): {
69
+ curve: LineSegment3d;
70
+ details: CurveLocationDetailPair[];
71
+ }[] | undefined;
72
+ /**
73
+ * Return all (i.e., up to 4) unbounded lines tangent to 2 circles plus data about tangent points/fractions.
74
+ * * There are 4 lines if there is neither intersection nor containment between the circles
75
+ * * There are 2 lines if the circles intersect
76
+ * * There are no lines if one circle is entirely inside the other.
77
+ * @param circleA first circle
78
+ * @param circleB second circle
79
+ */
80
+ static linesTangentCircleCircle(circleA: Arc3d, circleB: Arc3d): {
81
+ curve: LineSegment3d;
82
+ details: CurveLocationDetailPair[];
83
+ }[] | undefined;
84
+ /**
85
+ * Return all (i.e., up to 8) circles tangent to two lines and a circle plus data about tangent points/fractions.
86
+ * @param lineA first line
87
+ * @param lineB second line
88
+ * @param circle the circle
89
+ */
90
+ static circlesTangentLineLineCircle(lineA: LineSegment3d, lineB: LineSegment3d, circle: Arc3d): {
91
+ curve: Arc3d;
92
+ details: CurveLocationDetailPair[];
93
+ }[] | undefined;
94
+ /**
95
+ * Return all (i.e., up to 4) circles tangent to 2 circles and a line plus data about tangent points/fractions.
96
+ * @param circleA first circle
97
+ * @param circleB second circle
98
+ * @param line the line
99
+ */
100
+ static circlesTangentCircleCircleLine(circleA: Arc3d, circleB: Arc3d, line: LineSegment3d): {
101
+ curve: Arc3d;
102
+ details: CurveLocationDetailPair[];
103
+ }[] | undefined;
104
+ /**
105
+ * Return all (i.e., up to 8) circles tangent to 3 circles plus data about tangent points/fractions.
106
+ * @param circleA first circle
107
+ * @param circleB second circle
108
+ * @param circleC third circle
109
+ */
110
+ static circlesTangentCircleCircleCircle(circleA: Arc3d, circleB: Arc3d, circleC: Arc3d): {
111
+ curve: Arc3d;
112
+ details: CurveLocationDetailPair[];
113
+ }[] | undefined;
114
+ /**
115
+ * Compute circles of specified radius tangent to each of the lines plus data about tangent points/fractions.
116
+ * * There are normally 4 circles.
117
+ * * Returns undefined when the lines are parallel.
118
+ * @param lineA first line
119
+ * @param lineB second line
120
+ * @param radius radius of tangent circles.
121
+ */
122
+ static circlesTangentLineLineRadius(lineA: LineSegment3d, lineB: LineSegment3d, radius: number): {
123
+ curve: Arc3d;
124
+ details: CurveLocationDetailPair[];
125
+ }[] | undefined;
126
+ /**
127
+ * Compute circles of specified radius tangent to both a circle and a line plus data about tangent points/fractions.
128
+ * * There can be 0 to 8 circles.
129
+ * @param circle the circle
130
+ * @param line the line
131
+ * @param radius radius of tangent circles
132
+ */
133
+ static circlesTangentCircleLineRadius(circle: Arc3d, line: LineSegment3d, radius: number): {
134
+ curve: Arc3d;
135
+ details: CurveLocationDetailPair[];
136
+ }[] | undefined;
137
+ /**
138
+ * Compute circles of specified radius tangent to both circles plus data about tangent points/fractions.
139
+ * * There can be 0 to 8 circles.
140
+ * @param circleA the first circle
141
+ * @param circleB the second circle
142
+ * @param radius radius of tangent circles
143
+ */
144
+ static circlesTangentCircleCircleRadius(circleA: Arc3d, circleB: Arc3d, radius: number): {
145
+ curve: Arc3d;
146
+ details: CurveLocationDetailPair[];
147
+ }[] | undefined;
148
+ }
149
+ //# sourceMappingURL=ConstrainedCurve2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstrainedCurve2d.d.ts","sourceRoot":"","sources":["../../../src/curve/ConstrainedCurve2d.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,313 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module CartesianGeometry
7
+ */
8
+ import { Geometry } from "../Geometry";
9
+ import { Point3d } from "../geometry3d/Point3dVector3d";
10
+ import { Arc3d } from "./Arc3d";
11
+ import { CurveLocationDetailPair } from "./CurveLocationDetail";
12
+ import { ConstrainedImplicitCurve2d } from "./internalContexts/geometry2d/ConstrainedImplicitCurve2d";
13
+ import { ImplicitCurve2dConverter } from "./internalContexts/geometry2d/ImplicitCurve2dConverter";
14
+ import { UnboundedCircle2dByCenterAndRadius } from "./internalContexts/geometry2d/UnboundedCircle2d";
15
+ import { UnboundedLine2dByPointAndNormal } from "./internalContexts/geometry2d/UnboundedLine2d";
16
+ import { LineSegment3d } from "./LineSegment3d";
17
+ /**
18
+ * The class has static methods to compute circles and lines with specified constrained (tangent to other lines/circles,
19
+ * perpendicular to other lines/circles, or a specified circle radius).
20
+ * * z components of the input curves are completely ignored.
21
+ * * In this API, a `LineSegment3d` input identifies the underlying unbounded line by its endpoints. The segment
22
+ * itself is bounded, but the geometric line constraint is applied as unbounded.
23
+ * * Each API not only returns the circles or lines that satisfy the constraints but also captures the input curve
24
+ * location details where the tangency/perpendicularity happens. Each returned element contains:
25
+ * * the curve (circle or line) that satisfies the constraints.
26
+ * * an array of {@link CurveLocationDetailPair} objects, where each pair holds:
27
+ * * `detailA`: the result curve with the contact point and fraction on the curve.
28
+ * * `detailB`: the input constraint curve with the same contact point and fraction on the constraint curve.
29
+ * @alpha
30
+ */
31
+ export class ConstrainedCurve2d {
32
+ /**
33
+ * Return all (i.e., up to 4) circles that are tangent to 3 given lines plus data about tangent points/fractions.
34
+ * @param lineA first line
35
+ * @param lineB second line
36
+ * @param lineC third line
37
+ */
38
+ static circlesTangentLineLineLine(lineA, lineB, lineC) {
39
+ const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);
40
+ const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);
41
+ const implicitLineC = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineC);
42
+ if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)
43
+ || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal)
44
+ || !(implicitLineC instanceof UnboundedLine2dByPointAndNormal))
45
+ return undefined;
46
+ const markups = ConstrainedImplicitCurve2d.circlesTangentLLL(implicitLineA, implicitLineB, implicitLineC);
47
+ if (markups === undefined)
48
+ return undefined;
49
+ return getCircleOrLineMarkups(markups, true, [lineA, lineB, lineC]);
50
+ }
51
+ /**
52
+ * Return all (i.e., up to 2) unbounded lines perpendicular to a line and tangent to a circle plus data about
53
+ * perp/tangent points/fractions.
54
+ * @param line the line
55
+ * @param circle the circle
56
+ */
57
+ static linesPerpLineTangentCircle(line, circle) {
58
+ if (isNotCircularOrPoint(circle))
59
+ return undefined;
60
+ const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);
61
+ const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);
62
+ if (!(implicitLine instanceof UnboundedLine2dByPointAndNormal)
63
+ || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))
64
+ return undefined;
65
+ const markups = ConstrainedImplicitCurve2d.linesPerpLTangentC(implicitLine, implicitCircle);
66
+ if (markups === undefined)
67
+ return undefined;
68
+ return getCircleOrLineMarkups(markups, false, [line, circle]);
69
+ }
70
+ /**
71
+ * Return all (i.e., 4) variants of the line perpendicular to 2 circles (line between centers, with ends at
72
+ * crossing points on respective circles) plus data about perp points/fractions.
73
+ * @param circleA first circle
74
+ * @param circleB second circle
75
+ */
76
+ static linesPerpCirclePerpCircle(circleA, circleB) {
77
+ if (!circleA.isCircular || !circleB.isCircular)
78
+ return undefined;
79
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
80
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
81
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
82
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))
83
+ return undefined;
84
+ const markups = ConstrainedImplicitCurve2d.linesPerpCPerpC(implicitCircleA, implicitCircleB);
85
+ if (markups === undefined)
86
+ return undefined;
87
+ return getCircleOrLineMarkups(markups, false, [circleA, circleB]);
88
+ }
89
+ /**
90
+ * Return all (i.e., up to 2) unbounded lines perpendicular to a line and a circle plus data about perp points/fractions.
91
+ * @param line the line
92
+ * @param circle the circle
93
+ */
94
+ static linesPerpLinePerpCircle(line, circle) {
95
+ if (isNotCircularOrPoint(circle))
96
+ return undefined;
97
+ const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);
98
+ const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);
99
+ if (!(implicitLine instanceof UnboundedLine2dByPointAndNormal)
100
+ || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))
101
+ return undefined;
102
+ const markups = ConstrainedImplicitCurve2d.linesPerpLPerpC(implicitLine, implicitCircle);
103
+ if (markups === undefined)
104
+ return undefined;
105
+ return getCircleOrLineMarkups(markups, false, [line, circle]);
106
+ }
107
+ /**
108
+ * Return all (i.e., up to 4) unbounded lines perpendicular to a circle and tangent to a circle plus data about
109
+ * perp/tangent points/fractions.
110
+ * Note that multiple colinear lines are returned tagged with diametrically opposing points of circleA.
111
+ * @param circleA first circle (for perpendicular constraint)
112
+ * @param circleB second circle (for tangent constraint)
113
+ */
114
+ static linesPerpCircleTangentCircle(circleA, circleB) {
115
+ if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))
116
+ return undefined;
117
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
118
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
119
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
120
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))
121
+ return undefined;
122
+ const markups = ConstrainedImplicitCurve2d.linesPerpCTangentC(implicitCircleA, implicitCircleB);
123
+ if (markups === undefined)
124
+ return undefined;
125
+ return getCircleOrLineMarkups(markups, false, [circleA, circleB]);
126
+ }
127
+ /**
128
+ * Return all (i.e., up to 4) unbounded lines tangent to 2 circles plus data about tangent points/fractions.
129
+ * * There are 4 lines if there is neither intersection nor containment between the circles
130
+ * * There are 2 lines if the circles intersect
131
+ * * There are no lines if one circle is entirely inside the other.
132
+ * @param circleA first circle
133
+ * @param circleB second circle
134
+ */
135
+ static linesTangentCircleCircle(circleA, circleB) {
136
+ if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))
137
+ return undefined;
138
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
139
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
140
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
141
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))
142
+ return undefined;
143
+ const markups = ConstrainedImplicitCurve2d.linesTangentCC(implicitCircleA, implicitCircleB);
144
+ if (markups === undefined)
145
+ return undefined;
146
+ return getCircleOrLineMarkups(markups, false, [circleA, circleB]);
147
+ }
148
+ /**
149
+ * Return all (i.e., up to 8) circles tangent to two lines and a circle plus data about tangent points/fractions.
150
+ * @param lineA first line
151
+ * @param lineB second line
152
+ * @param circle the circle
153
+ */
154
+ static circlesTangentLineLineCircle(lineA, lineB, circle) {
155
+ if (isNotCircularOrPoint(circle))
156
+ return undefined;
157
+ const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);
158
+ const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);
159
+ const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);
160
+ if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)
161
+ || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal)
162
+ || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))
163
+ return undefined;
164
+ const markups = ConstrainedImplicitCurve2d.circlesTangentLLC(implicitLineA, implicitLineB, implicitCircle);
165
+ if (markups === undefined)
166
+ return undefined;
167
+ return getCircleOrLineMarkups(markups, true, [lineA, lineB, circle]);
168
+ }
169
+ /**
170
+ * Return all (i.e., up to 4) circles tangent to 2 circles and a line plus data about tangent points/fractions.
171
+ * @param circleA first circle
172
+ * @param circleB second circle
173
+ * @param line the line
174
+ */
175
+ static circlesTangentCircleCircleLine(circleA, circleB, line) {
176
+ if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))
177
+ return undefined;
178
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
179
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
180
+ const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);
181
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
182
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius)
183
+ || !(implicitLine instanceof UnboundedLine2dByPointAndNormal))
184
+ return undefined;
185
+ const markups = ConstrainedImplicitCurve2d.circlesTangentCCL(implicitCircleA, implicitCircleB, implicitLine);
186
+ if (markups === undefined)
187
+ return undefined;
188
+ return getCircleOrLineMarkups(markups, true, [circleA, circleB, line]);
189
+ }
190
+ /**
191
+ * Return all (i.e., up to 8) circles tangent to 3 circles plus data about tangent points/fractions.
192
+ * @param circleA first circle
193
+ * @param circleB second circle
194
+ * @param circleC third circle
195
+ */
196
+ static circlesTangentCircleCircleCircle(circleA, circleB, circleC) {
197
+ if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB) || isNotCircularOrPoint(circleC))
198
+ return undefined;
199
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
200
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
201
+ const implicitCircleC = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleC);
202
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
203
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius)
204
+ || !(implicitCircleC instanceof UnboundedCircle2dByCenterAndRadius))
205
+ return undefined;
206
+ const markups = ConstrainedImplicitCurve2d.circlesTangentCCC(implicitCircleA, implicitCircleB, implicitCircleC);
207
+ if (markups === undefined)
208
+ return undefined;
209
+ return getCircleOrLineMarkups(markups, true, [circleA, circleB, circleC]);
210
+ }
211
+ /**
212
+ * Compute circles of specified radius tangent to each of the lines plus data about tangent points/fractions.
213
+ * * There are normally 4 circles.
214
+ * * Returns undefined when the lines are parallel.
215
+ * @param lineA first line
216
+ * @param lineB second line
217
+ * @param radius radius of tangent circles.
218
+ */
219
+ static circlesTangentLineLineRadius(lineA, lineB, radius) {
220
+ const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);
221
+ const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);
222
+ if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)
223
+ || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal))
224
+ return undefined;
225
+ const markups = ConstrainedImplicitCurve2d.circlesTangentLLR(implicitLineA, implicitLineB, radius);
226
+ if (markups === undefined)
227
+ return undefined;
228
+ return getCircleOrLineMarkups(markups, true, [lineA, lineB]);
229
+ }
230
+ /**
231
+ * Compute circles of specified radius tangent to both a circle and a line plus data about tangent points/fractions.
232
+ * * There can be 0 to 8 circles.
233
+ * @param circle the circle
234
+ * @param line the line
235
+ * @param radius radius of tangent circles
236
+ */
237
+ static circlesTangentCircleLineRadius(circle, line, radius) {
238
+ if (isNotCircularOrPoint(circle))
239
+ return undefined;
240
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);
241
+ const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);
242
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
243
+ || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal))
244
+ return undefined;
245
+ const markups = ConstrainedImplicitCurve2d.circlesTangentCLR(implicitCircleA, implicitLineB, radius);
246
+ if (markups === undefined)
247
+ return undefined;
248
+ return getCircleOrLineMarkups(markups, true, [circle, line]);
249
+ }
250
+ /**
251
+ * Compute circles of specified radius tangent to both circles plus data about tangent points/fractions.
252
+ * * There can be 0 to 8 circles.
253
+ * @param circleA the first circle
254
+ * @param circleB the second circle
255
+ * @param radius radius of tangent circles
256
+ */
257
+ static circlesTangentCircleCircleRadius(circleA, circleB, radius) {
258
+ if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))
259
+ return undefined;
260
+ const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);
261
+ const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);
262
+ if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)
263
+ || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))
264
+ return undefined;
265
+ const markups = ConstrainedImplicitCurve2d.circlesTangentCCR(implicitCircleA, implicitCircleB, radius);
266
+ if (markups === undefined)
267
+ return undefined;
268
+ return getCircleOrLineMarkups(markups, true, [circleA, circleB]);
269
+ }
270
+ }
271
+ // return true if the input is not a circular arc
272
+ function isNotCircularArc(cp) {
273
+ return !(cp instanceof Arc3d) || !cp.isCircular;
274
+ }
275
+ // return true if the curve primitive is not a circle or a point
276
+ function isNotCircularOrPoint(arc) {
277
+ return arc.circularRadius() === undefined && !arc.isDegenerateCircle;
278
+ }
279
+ // create a CurveLocationDetail for a point on a curve if point is on the curve
280
+ function makeLocationDetail(curve, contact) {
281
+ const contact3d = Point3d.create(contact.x, contact.y, 0);
282
+ const detail = curve.closestPointXY(contact3d, true);
283
+ if (detail === undefined || detail.a > Geometry.smallMetricDistance)
284
+ return undefined;
285
+ return detail;
286
+ }
287
+ function getCircleOrLineMarkups(markups, expectCircle, originalConstraint) {
288
+ const result = [];
289
+ for (const markup of markups) {
290
+ const cp = ImplicitCurve2dConverter.createCurvePrimitiveFromImplicitCurve(markup.curve);
291
+ if (cp === undefined)
292
+ return undefined;
293
+ if ((expectCircle && isNotCircularArc(cp)) || (!expectCircle && !(cp instanceof LineSegment3d)))
294
+ return undefined;
295
+ const curve = expectCircle ? cp : cp;
296
+ const details = [];
297
+ for (const original of originalConstraint) {
298
+ for (const implicitData of markup.data) {
299
+ const returnedDetail = makeLocationDetail(original, implicitData.point);
300
+ if (returnedDetail !== undefined) {
301
+ const detailA = returnedDetail;
302
+ const detailB = makeLocationDetail(curve, implicitData.point);
303
+ details.push(new CurveLocationDetailPair(detailA, detailB));
304
+ markup.data = markup.data.filter(d => d !== implicitData);
305
+ break;
306
+ }
307
+ }
308
+ }
309
+ result.push({ curve, details });
310
+ }
311
+ return result.length > 0 ? result : undefined;
312
+ }
313
+ //# sourceMappingURL=ConstrainedCurve2d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConstrainedCurve2d.js","sourceRoot":"","sources":["../../../src/curve/ConstrainedCurve2d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Arc3d } from \"./Arc3d\";\r\nimport { CurveLocationDetail, CurveLocationDetailPair } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { ConstrainedImplicitCurve2d } from \"./internalContexts/geometry2d/ConstrainedImplicitCurve2d\";\r\nimport { ImplicitCurve2d, ImplicitGeometryMarkup } from \"./internalContexts/geometry2d/ImplicitCurve2d\";\r\nimport { ImplicitCurve2dConverter } from \"./internalContexts/geometry2d/ImplicitCurve2dConverter\";\r\nimport { UnboundedCircle2dByCenterAndRadius } from \"./internalContexts/geometry2d/UnboundedCircle2d\";\r\nimport { UnboundedLine2dByPointAndNormal } from \"./internalContexts/geometry2d/UnboundedLine2d\";\r\nimport { LineSegment3d } from \"./LineSegment3d\";\r\n\r\n/**\r\n * The class has static methods to compute circles and lines with specified constrained (tangent to other lines/circles,\r\n * perpendicular to other lines/circles, or a specified circle radius).\r\n * * z components of the input curves are completely ignored.\r\n * * In this API, a `LineSegment3d` input identifies the underlying unbounded line by its endpoints. The segment\r\n * itself is bounded, but the geometric line constraint is applied as unbounded.\r\n * * Each API not only returns the circles or lines that satisfy the constraints but also captures the input curve\r\n * location details where the tangency/perpendicularity happens. Each returned element contains:\r\n * * the curve (circle or line) that satisfies the constraints.\r\n * * an array of {@link CurveLocationDetailPair} objects, where each pair holds:\r\n * * `detailA`: the result curve with the contact point and fraction on the curve.\r\n * * `detailB`: the input constraint curve with the same contact point and fraction on the constraint curve.\r\n * @alpha\r\n */\r\nexport class ConstrainedCurve2d {\r\n /**\r\n * Return all (i.e., up to 4) circles that are tangent to 3 given lines plus data about tangent points/fractions.\r\n * @param lineA first line\r\n * @param lineB second line\r\n * @param lineC third line\r\n */\r\n public static circlesTangentLineLineLine(\r\n lineA: LineSegment3d,\r\n lineB: LineSegment3d,\r\n lineC: LineSegment3d,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);\r\n const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);\r\n const implicitLineC = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineC);\r\n if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitLineC instanceof UnboundedLine2dByPointAndNormal))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentLLL(implicitLineA, implicitLineB, implicitLineC);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [lineA, lineB, lineC]);\r\n }\r\n /**\r\n * Return all (i.e., up to 2) unbounded lines perpendicular to a line and tangent to a circle plus data about\r\n * perp/tangent points/fractions.\r\n * @param line the line\r\n * @param circle the circle\r\n */\r\n public static linesPerpLineTangentCircle(\r\n line: LineSegment3d,\r\n circle: Arc3d,\r\n ): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circle))\r\n return undefined;\r\n const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);\r\n const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);\r\n if (!(implicitLine instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.linesPerpLTangentC(implicitLine, implicitCircle);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, false, [line, circle]);\r\n }\r\n /**\r\n * Return all (i.e., 4) variants of the line perpendicular to 2 circles (line between centers, with ends at\r\n * crossing points on respective circles) plus data about perp points/fractions.\r\n * @param circleA first circle\r\n * @param circleB second circle\r\n */\r\n public static linesPerpCirclePerpCircle(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n ): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (!circleA.isCircular || !circleB.isCircular)\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.linesPerpCPerpC(implicitCircleA, implicitCircleB);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, false, [circleA, circleB]);\r\n }\r\n /**\r\n * Return all (i.e., up to 2) unbounded lines perpendicular to a line and a circle plus data about perp points/fractions.\r\n * @param line the line\r\n * @param circle the circle\r\n */\r\n public static linesPerpLinePerpCircle(\r\n line: LineSegment3d,\r\n circle: Arc3d,\r\n ): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circle))\r\n return undefined;\r\n const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);\r\n const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);\r\n if (!(implicitLine instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.linesPerpLPerpC(implicitLine, implicitCircle);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, false, [line, circle]);\r\n }\r\n /**\r\n * Return all (i.e., up to 4) unbounded lines perpendicular to a circle and tangent to a circle plus data about\r\n * perp/tangent points/fractions.\r\n * Note that multiple colinear lines are returned tagged with diametrically opposing points of circleA.\r\n * @param circleA first circle (for perpendicular constraint)\r\n * @param circleB second circle (for tangent constraint)\r\n */\r\n public static linesPerpCircleTangentCircle(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n ): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.linesPerpCTangentC(implicitCircleA, implicitCircleB);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, false, [circleA, circleB]);\r\n }\r\n /**\r\n * Return all (i.e., up to 4) unbounded lines tangent to 2 circles plus data about tangent points/fractions.\r\n * * There are 4 lines if there is neither intersection nor containment between the circles\r\n * * There are 2 lines if the circles intersect\r\n * * There are no lines if one circle is entirely inside the other.\r\n * @param circleA first circle\r\n * @param circleB second circle\r\n */\r\n public static linesTangentCircleCircle(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n ): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.linesTangentCC(implicitCircleA, implicitCircleB);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, false, [circleA, circleB]);\r\n }\r\n /**\r\n * Return all (i.e., up to 8) circles tangent to two lines and a circle plus data about tangent points/fractions.\r\n * @param lineA first line\r\n * @param lineB second line\r\n * @param circle the circle\r\n */\r\n public static circlesTangentLineLineCircle(\r\n lineA: LineSegment3d,\r\n lineB: LineSegment3d,\r\n circle: Arc3d,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circle))\r\n return undefined;\r\n const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);\r\n const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);\r\n const implicitCircle = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);\r\n if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitCircle instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentLLC(implicitLineA, implicitLineB, implicitCircle);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [lineA, lineB, circle]);\r\n }\r\n /**\r\n * Return all (i.e., up to 4) circles tangent to 2 circles and a line plus data about tangent points/fractions.\r\n * @param circleA first circle\r\n * @param circleB second circle\r\n * @param line the line\r\n */\r\n public static circlesTangentCircleCircleLine(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n line: LineSegment3d,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n const implicitLine = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitLine instanceof UnboundedLine2dByPointAndNormal))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentCCL(implicitCircleA, implicitCircleB, implicitLine);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [circleA, circleB, line]);\r\n }\r\n /**\r\n * Return all (i.e., up to 8) circles tangent to 3 circles plus data about tangent points/fractions.\r\n * @param circleA first circle\r\n * @param circleB second circle\r\n * @param circleC third circle\r\n */\r\n public static circlesTangentCircleCircleCircle(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n circleC: Arc3d,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB) || isNotCircularOrPoint(circleC))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n const implicitCircleC = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleC);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleC instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentCCC(implicitCircleA, implicitCircleB, implicitCircleC);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [circleA, circleB, circleC]);\r\n }\r\n /**\r\n * Compute circles of specified radius tangent to each of the lines plus data about tangent points/fractions.\r\n * * There are normally 4 circles.\r\n * * Returns undefined when the lines are parallel.\r\n * @param lineA first line\r\n * @param lineB second line\r\n * @param radius radius of tangent circles.\r\n */\r\n public static circlesTangentLineLineRadius(\r\n lineA: LineSegment3d,\r\n lineB: LineSegment3d,\r\n radius: number,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n const implicitLineA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineA);\r\n const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(lineB);\r\n if (!(implicitLineA instanceof UnboundedLine2dByPointAndNormal)\r\n || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentLLR(implicitLineA, implicitLineB, radius);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [lineA, lineB]);\r\n }\r\n /**\r\n * Compute circles of specified radius tangent to both a circle and a line plus data about tangent points/fractions.\r\n * * There can be 0 to 8 circles.\r\n * @param circle the circle\r\n * @param line the line\r\n * @param radius radius of tangent circles\r\n */\r\n public static circlesTangentCircleLineRadius(\r\n circle: Arc3d,\r\n line: LineSegment3d,\r\n radius: number,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circle))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circle);\r\n const implicitLineB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(line);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitLineB instanceof UnboundedLine2dByPointAndNormal))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentCLR(implicitCircleA, implicitLineB, radius);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [circle, line]);\r\n }\r\n /**\r\n * Compute circles of specified radius tangent to both circles plus data about tangent points/fractions.\r\n * * There can be 0 to 8 circles.\r\n * @param circleA the first circle\r\n * @param circleB the second circle\r\n * @param radius radius of tangent circles\r\n */\r\n public static circlesTangentCircleCircleRadius(\r\n circleA: Arc3d,\r\n circleB: Arc3d,\r\n radius: number,\r\n ): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n if (isNotCircularOrPoint(circleA) || isNotCircularOrPoint(circleB))\r\n return undefined;\r\n const implicitCircleA = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleA);\r\n const implicitCircleB = ImplicitCurve2dConverter.createImplicitCurve2dFromCurvePrimitiveXY(circleB);\r\n if (!(implicitCircleA instanceof UnboundedCircle2dByCenterAndRadius)\r\n || !(implicitCircleB instanceof UnboundedCircle2dByCenterAndRadius))\r\n return undefined;\r\n const markups = ConstrainedImplicitCurve2d.circlesTangentCCR(implicitCircleA, implicitCircleB, radius);\r\n if (markups === undefined)\r\n return undefined;\r\n return getCircleOrLineMarkups(markups, true, [circleA, circleB]);\r\n }\r\n}\r\n\r\n// return true if the input is not a circular arc\r\nfunction isNotCircularArc(cp: CurvePrimitive): boolean {\r\n return !(cp instanceof Arc3d) || !cp.isCircular;\r\n}\r\n// return true if the curve primitive is not a circle or a point\r\nfunction isNotCircularOrPoint(arc: Arc3d): boolean {\r\n return arc.circularRadius() === undefined && !arc.isDegenerateCircle;\r\n}\r\n// create a CurveLocationDetail for a point on a curve if point is on the curve\r\nfunction makeLocationDetail(curve: CurvePrimitive, contact: Point2d): CurveLocationDetail | undefined {\r\n const contact3d = Point3d.create(contact.x, contact.y, 0);\r\n const detail = curve.closestPointXY(contact3d, true);\r\n if (detail === undefined || detail.a > Geometry.smallMetricDistance)\r\n return undefined;\r\n return detail;\r\n}\r\n// return markups with captured circles or lines and their data\r\nfunction getCircleOrLineMarkups(\r\n markups: ImplicitGeometryMarkup<ImplicitCurve2d>[], expectCircle: true, originalConstraint: (Arc3d | LineSegment3d)[],\r\n): { curve: Arc3d, details: CurveLocationDetailPair[] }[] | undefined;\r\nfunction getCircleOrLineMarkups(\r\n markups: ImplicitGeometryMarkup<ImplicitCurve2d>[], expectCircle: false, originalConstraint: (Arc3d | LineSegment3d)[],\r\n): { curve: LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined;\r\nfunction getCircleOrLineMarkups(\r\n markups: ImplicitGeometryMarkup<ImplicitCurve2d>[], expectCircle: boolean, originalConstraint: (Arc3d | LineSegment3d)[],\r\n): { curve: Arc3d | LineSegment3d, details: CurveLocationDetailPair[] }[] | undefined {\r\n const result: { curve: Arc3d | LineSegment3d, details: CurveLocationDetailPair[] }[] = [];\r\n for (const markup of markups) {\r\n const cp = ImplicitCurve2dConverter.createCurvePrimitiveFromImplicitCurve(markup.curve) as CurvePrimitive | undefined;\r\n if (cp === undefined)\r\n return undefined;\r\n if ((expectCircle && isNotCircularArc(cp)) || (!expectCircle && !(cp instanceof LineSegment3d)))\r\n return undefined;\r\n const curve = expectCircle ? cp as Arc3d : cp as LineSegment3d;\r\n const details: CurveLocationDetailPair[] = [];\r\n for (const original of originalConstraint) {\r\n for (const implicitData of markup.data) {\r\n const returnedDetail = makeLocationDetail(original, implicitData.point);\r\n if (returnedDetail !== undefined) {\r\n const detailA = returnedDetail;\r\n const detailB = makeLocationDetail(curve, implicitData.point);\r\n details.push(new CurveLocationDetailPair(detailA, detailB));\r\n markup.data = markup.data.filter(d => d !== implicitData);\r\n break;\r\n }\r\n }\r\n }\r\n result.push({ curve, details });\r\n }\r\n return result.length > 0 ? result : undefined;\r\n}\r\n"]}
@@ -304,18 +304,31 @@ export declare class CurveChainWithDistanceIndex extends CurvePrimitive {
304
304
  numAssigned: number;
305
305
  numCandidate: number;
306
306
  };
307
+ private computeClosestPoint;
307
308
  /**
308
309
  * Search for the curve point that is closest to the spacePoint.
309
310
  * * The CurveChainWithDistanceIndex invokes the base class CurvePrimitive method, which (via a handler)
310
311
  * determines a CurveLocation detail among the children.
311
312
  * * The returned detail directly identifies fractional position along the CurveChainWithDistanceIndex and
312
313
  * has pointer to an additional detail for the child curve.
313
- * @param spacePoint point in space
314
- * @param extend true to extend the curve
315
- * @param result optional pre-allocated detail to populate and return.
316
- * @returns details of the closest point
314
+ * @param spacePoint point in space.
315
+ * @param extend (optional) compute the closest point to the curve extended according to variant type (default false).
316
+ * @param result (optional) pre-allocated detail to populate and return.
317
+ * @returns details of the closest point.
318
+ */
319
+ closestPoint(spacePoint: Point3d, extend?: VariantCurveExtendParameter, result?: CurveLocationDetail): CurveLocationDetail | undefined;
320
+ /**
321
+ * Search for the curve point that is closest to the spacePoint as viewed in the xy-plane (ignoring z).
322
+ * * The CurveChainWithDistanceIndex invokes the base class CurvePrimitive method, which (via a handler)
323
+ * determines a CurveLocation detail among the children.
324
+ * * The returned detail directly identifies fractional position along the CurveChainWithDistanceIndex and
325
+ * has pointer to an additional detail for the child curve.
326
+ * @param spacePoint point in space.
327
+ * @param extend (optional) compute the closest point to the curve extended according to variant type (default false).
328
+ * @param result (optional) pre-allocated detail to populate and return.
329
+ * @returns details of the closest point.
317
330
  */
318
- closestPoint(spacePoint: Point3d, extend: VariantCurveExtendParameter, result?: CurveLocationDetail): CurveLocationDetail | undefined;
331
+ closestPointXY(spacePoint: Point3d, extend?: VariantCurveExtendParameter, result?: CurveLocationDetail): CurveLocationDetail | undefined;
319
332
  /**
320
333
  * Construct an offset of each child as viewed in the xy-plane (ignoring z).
321
334
  * * No attempt is made to join the offset children. Use RegionOps.constructCurveXYOffset to return a fully
@@ -1 +1 @@
1
- {"version":3,"file":"CurveChainWithDistanceIndex.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveChainWithDistanceIndex.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAuC,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAqB,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,oDAAoD;IAC7C,cAAc,EAAE,MAAM,CAAC;IAC9B,kDAAkD;IAC3C,cAAc,EAAE,MAAM,CAAC;IAC9B,8FAA8F;IACvF,cAAc,EAAE,MAAM,CAAC;IAC9B,4FAA4F;IACrF,cAAc,EAAE,MAAM,CAAC;IAC9B,2GAA2G;IACpG,UAAU,EAAE,cAAc,CAAC;IAClC,qBAAqB;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IACvB,uCAAuC;IAChC,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;gBAExE,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,cAAc,EAC1B,KAAK,CAAC,EAAE,OAAO;IAUjB,kFAAkF;IAC3E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAGvD;;;;OAIG;IACI,4BAA4B,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM;IAQhE;;;OAGG;WACW,8BAA8B,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,OAAO,GAAG,YAAY,EAAE;IAS5G,gFAAgF;IACzE,kCAAkC,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAG3F;;;OAGG;IACI,wCAAwC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAYzE;;;;;;;OAOG;IACI,oCAAoC,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM;IAMxG;;;OAGG;IACI,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAG1D;;;;;OAKG;IACI,4BAA4B,CAAC,aAAa,EAAE,MAAM;IAUzD;;;;OAIG;IACI,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAM9D;AAiED;;;;;;;;;;GAUG;AACH,qBAAa,2BAA4B,SAAQ,cAAc;IAC7D,wCAAwC;IACxC,SAAgB,kBAAkB,iCAAiC;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAK;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAK;IAChC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAK;IACjC,yDAAyD;IAClD,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAIzD,OAAO;IAMP;;;;OAIG;IACI,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,2BAA2B,GAAG,SAAS;IAM/G;;;OAGG;IACH,IAAW,IAAI,IAAI,IAAI,CAEtB;IACD;;;OAGG;IACH,IAAW,SAAS,IAAI,YAAY,EAAE,CAErC;IACD;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,2BAA2B;IAIlE;;;;;;;OAOG;IACa,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,2BAA2B,GAAG,SAAS;IAkErL;;;OAGG;IACI,SAAS,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO;IAO9D;;;OAGG;IACa,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAKrD;;;OAGG;IACa,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IAKnD,gDAAgD;IACzC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKrE;;;OAGG;IACI,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAK9E;;;OAGG;IACI,4BAA4B,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAOpE;;;;;;OAMG;IACa,wBAAwB,CACtC,cAAc,EAAE,cAAc,EAAE,EAAE,0BAA0B,GAAE,OAAe,EAAE,kBAAkB,GAAE,OAAe,GACjH,IAAI;IASP;;;;OAIG;IACa,qCAAqC,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,cAAc;IAO/G;;;OAGG;IACI,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG;IAG/D,wFAAwF;IACjF,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI;IAGvE,6FAA6F;IAC7E,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAGzF;;MAEE;IACF,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAclC;;;;OAIG;WACW,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,2BAA2B;IAKnG;;;;;OAKG;IACI,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,GAAE,OAAe,GAAG,YAAY,GAAG,SAAS;IAM/G;;;;;OAKG;IACH,SAAS,CAAC,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,GAAE,OAAe,GAAG,MAAM,GAAG,SAAS;IAiBjH;;;OAGG;IACI,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAG7D,4GAA4G;IACrG,+BAA+B,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAgBzG,gDAAgD;IAChC,WAAW,IAAI,MAAM;IAGrC;;;OAGG;IACI,WAAW,IAAI,MAAM;IAG5B;;;;OAIG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO;IASnE;;;;;;;;;OASG;IACI,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAiB5E;;;;;;;;;OASG;IACa,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;IAWtF;;;;;;;OAOG;IACa,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,yBAAyB,GACnD,yBAAyB,GAAG,SAAS;IA0BxC;;;;;OAKG;IACI,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAQzD,gGAAgG;IACzF,cAAc,IAAI,IAAI;IAO7B;;;;OAIG;IACa,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAM5D;;;;;;OAMG;IACa,8BAA8B,CAC5C,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,mBAAmB,GACnG,mBAAmB;IAmBtB;;;;;;;;OAQG;WACW,yBAAyB,CACrC,KAAK,GAAE,OAAc,GACpB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAYrF;;;;;;;;;;OAUG;IACa,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,2BAA2B,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,SAAS;IA0CrJ;;;;;OAKG;IACa,iBAAiB,CAC/B,uBAAuB,EAAE,MAAM,GAAG,aAAa,GAC9C,cAAc,GAAG,cAAc,EAAE,GAAG,SAAS;IAchD;;;;;;;OAOG;IACa,uBAAuB,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAGtG;;;;;;OAMG;IACI,kBAAkB,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,SAAS;IAc1H;;;;;;;;;;;OAWG;WACW,+BAA+B,CAC3C,KAAK,EAAE,uBAAuB,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,2BAA2B,EACpC,MAAM,CAAC,EAAE,2BAA2B,EACpC,gBAAgB,CAAC,EAAE,OAAO,GACzB,uBAAuB,EAAE;CAkB7B"}
1
+ {"version":3,"file":"CurveChainWithDistanceIndex.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveChainWithDistanceIndex.ts"],"names":[],"mappings":"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"}