@itwin/core-geometry 4.9.0-dev.12 → 4.9.0-dev.14

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 (202) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/Geometry.d.ts +57 -46
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +73 -53
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/curve/Arc3d.d.ts +128 -34
  7. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  8. package/lib/cjs/curve/Arc3d.js +174 -20
  9. package/lib/cjs/curve/Arc3d.js.map +1 -1
  10. package/lib/cjs/curve/CurveCollection.d.ts +2 -1
  11. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  12. package/lib/cjs/curve/CurveCollection.js +2 -1
  13. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  14. package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
  15. package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
  16. package/lib/cjs/curve/CurveLocationDetail.js +39 -0
  17. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  18. package/lib/cjs/curve/LineString3d.js +1 -1
  19. package/lib/cjs/curve/LineString3d.js.map +1 -1
  20. package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
  21. package/lib/cjs/curve/OffsetOptions.js +1 -1
  22. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  23. package/lib/cjs/curve/RegionOps.d.ts +2 -1
  24. package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
  25. package/lib/cjs/curve/RegionOps.js +2 -1
  26. package/lib/cjs/curve/RegionOps.js.map +1 -1
  27. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
  28. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  29. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
  30. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  31. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
  32. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
  33. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
  34. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
  35. package/lib/cjs/geometry3d/Angle.d.ts +18 -5
  36. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  37. package/lib/cjs/geometry3d/Angle.js +23 -7
  38. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  39. package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
  40. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  41. package/lib/cjs/geometry3d/AngleSweep.js +47 -12
  42. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  43. package/lib/cjs/geometry3d/Matrix3d.d.ts +6 -4
  44. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  45. package/lib/cjs/geometry3d/Matrix3d.js +6 -4
  46. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  47. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +2 -3
  48. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  49. package/lib/cjs/geometry3d/Point3dVector3d.js +2 -3
  50. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  51. package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
  52. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  53. package/lib/cjs/geometry3d/PointHelpers.js +11 -10
  54. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  55. package/lib/cjs/geometry3d/Range.d.ts +6 -1
  56. package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
  57. package/lib/cjs/geometry3d/Range.js +9 -3
  58. package/lib/cjs/geometry3d/Range.js.map +1 -1
  59. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  60. package/lib/cjs/geometry3d/Transform.js +1 -1
  61. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  62. package/lib/cjs/numerics/Newton.d.ts +3 -3
  63. package/lib/cjs/numerics/Newton.d.ts.map +1 -1
  64. package/lib/cjs/numerics/Newton.js +14 -16
  65. package/lib/cjs/numerics/Newton.js.map +1 -1
  66. package/lib/cjs/numerics/Polynomials.d.ts +2 -2
  67. package/lib/cjs/numerics/Polynomials.js +2 -2
  68. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  69. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -4
  70. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  71. package/lib/cjs/polyface/PolyfaceBuilder.js +8 -4
  72. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  73. package/lib/cjs/polyface/PolyfaceQuery.d.ts +3 -3
  74. package/lib/cjs/polyface/PolyfaceQuery.js +3 -3
  75. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  76. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  77. package/lib/cjs/serialization/BGFBWriter.js +2 -2
  78. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  79. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  80. package/lib/cjs/topology/Graph.d.ts +1 -1
  81. package/lib/cjs/topology/Graph.js +2 -2
  82. package/lib/cjs/topology/Graph.js.map +1 -1
  83. package/lib/cjs/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
  84. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
  85. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  86. package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
  87. package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  88. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
  89. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  90. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
  91. package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  92. package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
  93. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  94. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
  95. package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  96. package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
  97. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  98. package/lib/cjs/topology/Triangulation.d.ts +16 -10
  99. package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
  100. package/lib/cjs/topology/Triangulation.js +23 -30
  101. package/lib/cjs/topology/Triangulation.js.map +1 -1
  102. package/lib/esm/Geometry.d.ts +57 -46
  103. package/lib/esm/Geometry.d.ts.map +1 -1
  104. package/lib/esm/Geometry.js +73 -53
  105. package/lib/esm/Geometry.js.map +1 -1
  106. package/lib/esm/curve/Arc3d.d.ts +128 -34
  107. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  108. package/lib/esm/curve/Arc3d.js +172 -19
  109. package/lib/esm/curve/Arc3d.js.map +1 -1
  110. package/lib/esm/curve/CurveCollection.d.ts +2 -1
  111. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  112. package/lib/esm/curve/CurveCollection.js +2 -1
  113. package/lib/esm/curve/CurveCollection.js.map +1 -1
  114. package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
  115. package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
  116. package/lib/esm/curve/CurveLocationDetail.js +39 -0
  117. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  118. package/lib/esm/curve/LineString3d.js +1 -1
  119. package/lib/esm/curve/LineString3d.js.map +1 -1
  120. package/lib/esm/curve/OffsetOptions.d.ts +1 -1
  121. package/lib/esm/curve/OffsetOptions.js +1 -1
  122. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  123. package/lib/esm/curve/RegionOps.d.ts +2 -1
  124. package/lib/esm/curve/RegionOps.d.ts.map +1 -1
  125. package/lib/esm/curve/RegionOps.js +2 -1
  126. package/lib/esm/curve/RegionOps.js.map +1 -1
  127. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
  128. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
  129. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
  130. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  131. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
  132. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
  133. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
  134. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
  135. package/lib/esm/geometry3d/Angle.d.ts +18 -5
  136. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  137. package/lib/esm/geometry3d/Angle.js +23 -7
  138. package/lib/esm/geometry3d/Angle.js.map +1 -1
  139. package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
  140. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  141. package/lib/esm/geometry3d/AngleSweep.js +47 -12
  142. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  143. package/lib/esm/geometry3d/Matrix3d.d.ts +6 -4
  144. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  145. package/lib/esm/geometry3d/Matrix3d.js +6 -4
  146. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  147. package/lib/esm/geometry3d/Point3dVector3d.d.ts +2 -3
  148. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  149. package/lib/esm/geometry3d/Point3dVector3d.js +2 -3
  150. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  151. package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
  152. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  153. package/lib/esm/geometry3d/PointHelpers.js +11 -10
  154. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  155. package/lib/esm/geometry3d/Range.d.ts +6 -1
  156. package/lib/esm/geometry3d/Range.d.ts.map +1 -1
  157. package/lib/esm/geometry3d/Range.js +9 -3
  158. package/lib/esm/geometry3d/Range.js.map +1 -1
  159. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  160. package/lib/esm/geometry3d/Transform.js +1 -1
  161. package/lib/esm/geometry3d/Transform.js.map +1 -1
  162. package/lib/esm/numerics/Newton.d.ts +3 -3
  163. package/lib/esm/numerics/Newton.d.ts.map +1 -1
  164. package/lib/esm/numerics/Newton.js +14 -16
  165. package/lib/esm/numerics/Newton.js.map +1 -1
  166. package/lib/esm/numerics/Polynomials.d.ts +2 -2
  167. package/lib/esm/numerics/Polynomials.js +2 -2
  168. package/lib/esm/numerics/Polynomials.js.map +1 -1
  169. package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -4
  170. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  171. package/lib/esm/polyface/PolyfaceBuilder.js +8 -4
  172. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  173. package/lib/esm/polyface/PolyfaceQuery.d.ts +3 -3
  174. package/lib/esm/polyface/PolyfaceQuery.js +3 -3
  175. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  176. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  177. package/lib/esm/serialization/BGFBWriter.js +2 -2
  178. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  179. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  180. package/lib/esm/topology/Graph.d.ts +1 -1
  181. package/lib/esm/topology/Graph.js +2 -2
  182. package/lib/esm/topology/Graph.js.map +1 -1
  183. package/lib/esm/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
  184. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
  185. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  186. package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
  187. package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
  188. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
  189. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  190. package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
  191. package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
  192. package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
  193. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  194. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
  195. package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
  196. package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
  197. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  198. package/lib/esm/topology/Triangulation.d.ts +16 -10
  199. package/lib/esm/topology/Triangulation.d.ts.map +1 -1
  200. package/lib/esm/topology/Triangulation.js +24 -31
  201. package/lib/esm/topology/Triangulation.js.map +1 -1
  202. package/package.json +3 -3
@@ -17,43 +17,140 @@ import { XYAndZ } from "../geometry3d/XYZProps";
17
17
  import { Matrix4d } from "../geometry4d/Matrix4d";
18
18
  import { Point4d } from "../geometry4d/Point4d";
19
19
  import { SineCosinePolynomial } from "../numerics/Polynomials";
20
+ import { CurveChain } from "./CurveCollection";
20
21
  import { VariantCurveExtendParameter } from "./CurveExtendMode";
21
22
  import { CurveLocationDetail } from "./CurveLocationDetail";
22
23
  import { AnnounceNumberNumberCurvePrimitive, CurvePrimitive } from "./CurvePrimitive";
23
24
  import { GeometryQuery } from "./GeometryQuery";
25
+ import { LineSegment3d } from "./LineSegment3d";
24
26
  import { LineString3d } from "./LineString3d";
25
27
  import { OffsetOptions } from "./OffsetOptions";
26
28
  import { StrokeOptions } from "./StrokeOptions";
27
29
  /**
28
- * Compact vector form of an elliptic arc defined by center, vectors for angle coordinates 0 and 90 degrees, and sweep.
30
+ * Compact vector form of an elliptic arc defined by center, vectors at 0 and 90 degrees, and angular sweep.
29
31
  * * @see [Curve Collections]($docs/learning/geometry/CurvePrimitive.md) learning article for further details of the
30
32
  * parameterization and meaning of the vectors.
31
33
  * @public
32
34
  */
33
35
  export interface ArcVectors {
34
- /** Center point of arc */
36
+ /** Center point of arc. */
35
37
  center: Point3d;
36
- /** Vector to point at angle 0 in parameter space */
38
+ /** Vector from the arc center to the arc point at parameter 0 degrees. */
37
39
  vector0: Vector3d;
38
- /** Vector to point at angle 90 degrees in parameter space */
40
+ /** Vector from the arc center to the arc point at parameter 90 degrees. */
39
41
  vector90: Vector3d;
40
- /** Angle swept by the subset of the complete arc */
42
+ /** Angular range swept by the arc, of length less than 2*pi if not a full ellipse. */
41
43
  sweep: AngleSweep;
42
44
  }
45
+ /**
46
+ * Carrier structure for an arc with fractional data on incoming, outgoing curves.
47
+ * @public
48
+ */
49
+ export interface ArcBlendData {
50
+ /** Constructed arc */
51
+ arc?: Arc3d;
52
+ /** Fraction "moving backward" on the inbound curve */
53
+ fraction10: number;
54
+ /** Fraction "moving forward" on the outbound curve */
55
+ fraction12: number;
56
+ /** Optional reference point */
57
+ point?: Point3d;
58
+ }
59
+ /**
60
+ * Enumeration of methods used to sample an elliptical arc in [[Arc3d.constructCircularArcChainApproximation]].
61
+ * * Because ellipses have two axes of symmetry, samples are computed for one quadrant and reflected across each
62
+ * axis to the other quadrants. Any samples that fall outside the arc sweep are filtered out.
63
+ * @public
64
+ */
65
+ export declare enum EllipticalArcSampleMethod {
66
+ /** Generate n samples uniformly interpolated between the min and max parameters of a full ellipse quadrant. */
67
+ UniformParameter = 0,
68
+ /** Generate n samples uniformly interpolated between the min and max curvatures of a full ellipse quadrant. */
69
+ UniformCurvature = 1,
70
+ /**
71
+ * Generate n samples interpolated between the min and max curvatures of a full ellipse quadrant, using a
72
+ * [[FractionMapper]] callback to generate the interpolation weights.
73
+ */
74
+ NonUniformCurvature = 2,
75
+ /**
76
+ * Generate samples by subdividing parameter space until the approximation has less than a given max
77
+ * distance to the elliptical arc.
78
+ */
79
+ AdaptiveSubdivision = 3
80
+ }
81
+ /**
82
+ * A function that maps [0,1]->[0,1].
83
+ * @public
84
+ */
85
+ export type FractionMapper = (f: number) => number;
86
+ /**
87
+ * Options for generating samples for the construction of an approximation to an elliptical arc.
88
+ * * Used by [[Arc3d.constructCircularArcChainApproximation]].
89
+ * @public
90
+ */
91
+ export declare class EllipticalArcApproximationOptions {
92
+ private _sampleMethod;
93
+ private _numSamplesInQuadrant;
94
+ private _maxError;
95
+ private _remapFunction;
96
+ private _forcePath;
97
+ /** Default error tolerance. */
98
+ static defaultMaxError: number;
99
+ private constructor();
100
+ /**
101
+ * Construct options with optional defaults.
102
+ * @param method sample method, default [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
103
+ * @param numSamplesInQuadrant samples in each full quadrant for interpolation methods, default 4.
104
+ * @param maxError positive maximum distance to ellipse for the subdivision method, default 1cm.
105
+ * @param remapFunction optional callback to remap fraction space for [[EllipticalArcSampleMethod.NonUniformCurvature]],
106
+ * default quadratic. For best results, this function should be a bijection.
107
+ * @param forcePath whether to return a [[Path]] instead of a [[Loop]] when approximating a full elliptical arc,
108
+ * default false.
109
+ */
110
+ static create(method?: EllipticalArcSampleMethod, numSamplesInQuadrant?: number, maxError?: number, remapFunction?: FractionMapper, forcePath?: boolean): EllipticalArcApproximationOptions;
111
+ /** Clone the options. */
112
+ clone(): EllipticalArcApproximationOptions;
113
+ /** Method used to sample the elliptical arc. */
114
+ get sampleMethod(): EllipticalArcSampleMethod;
115
+ set sampleMethod(method: EllipticalArcSampleMethod);
116
+ /**
117
+ * Number of samples to return in each full quadrant, including endpoint(s).
118
+ * * Used by interpolation sample methods.
119
+ * * In general, for n samples, the approximating [[Path]] consists of n-1 primitives,
120
+ * and the approximating [[Loop]] consists of n primitives.
121
+ * * Minimum value is 2.
122
+ */
123
+ get numSamplesInQuadrant(): number;
124
+ set numSamplesInQuadrant(numSamples: number);
125
+ /**
126
+ * Maximum distance (in meters) of the computed approximation to the elliptical arc.
127
+ * * Used by [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
128
+ */
129
+ get maxError(): number;
130
+ set maxError(error: number);
131
+ /**
132
+ * Callback function to remap fraction space to fraction space.
133
+ * * Used by [[EllipticalArcSampleMethod.NonUniformCurvature]].
134
+ */
135
+ get remapFunction(): FractionMapper;
136
+ set remapFunction(f: FractionMapper);
137
+ /** Whether to return a [[Path]] instead of a [[Loop]] when approximating a full (closed) ellipse. */
138
+ get forcePath(): boolean;
139
+ set forcePath(value: boolean);
140
+ }
43
141
  /**
44
142
  * Circular or elliptic arc.
45
143
  * * The angle to point equation is:
46
- * * `X = center + cos(theta) * vector0 + sin(theta) * vector90`
144
+ * * `X = center + cos(theta) * vector0 + sin(theta) * vector90`
47
145
  * * When the two vectors are perpendicular and have equal length, it is a true circle.
48
146
  * * Non-perpendicular vectors are always elliptic.
49
147
  * * Vectors of unequal length are always elliptic.
50
148
  * * To create an ellipse in the common "major and minor axis" form of an ellipse:
51
- * ** vector0 is the vector from the center to the major axis extreme.
52
- * ** vector90 is the vector from the center to the minor axis extreme.
53
- * ** note that constructing the vectors to the extreme points makes them perpendicular.
54
- * * The method toScaledMatrix3d() can be called to convert the unrestricted vector0,vector90 to perpendicular form.
55
- * * The unrestricted form is much easier to work with for common calculations -- stroking, projection to 2d,
56
- * intersection with plane.
149
+ * * vector0 is the vector from the center to the major axis extreme.
150
+ * * vector90 is the vector from the center to the minor axis extreme.
151
+ * * Note that constructing these vectors to the extreme points makes them perpendicular.
152
+ * * The method toScaledMatrix3d() can be called to convert the unrestricted vector0, vector90 to perpendicular form.
153
+ * * The unrestricted form is much easier to work with for common calculations: stroking, projection to 2d, intersection with plane.
57
154
  * @public
58
155
  */
59
156
  export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
@@ -157,6 +254,11 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
157
254
  * @returns elliptical arc, or undefined if construction impossible.
158
255
  */
159
256
  static createStartMiddleEnd(point0: XYAndZ, point1: XYAndZ, point2: XYAndZ, sweep?: AngleSweep, result?: Arc3d): Arc3d | undefined;
257
+ /**
258
+ * Create a circular arc defined by start point, tangent at start point, and end point.
259
+ * If tangent is parallel to line segment from start to end, return the line segment.
260
+ */
261
+ static createCircularStartTangentEnd(start: Point3d, tangentAtStart: Vector3d, end: Point3d, result?: Arc3d): Arc3d | LineSegment3d;
160
262
  /**
161
263
  * Return a clone of this arc, projected to given z value.
162
264
  * * If `z` is omitted, the clone is at the z of the center.
@@ -181,7 +283,7 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
181
283
  * Create a circular arc defined by start point, any intermediate point, and end point.
182
284
  * If the points are colinear, assemble them into a linestring.
183
285
  */
184
- static createCircularStartMiddleEnd(pointA: XYAndZ, pointB: XYAndZ, pointC: XYAndZ, result?: Arc3d): Arc3d | LineString3d | undefined;
286
+ static createCircularStartMiddleEnd(pointA: XYAndZ, pointB: XYAndZ, pointC: XYAndZ, result?: Arc3d): Arc3d | LineString3d;
185
287
  /** The arc has simple proportional arc length if and only if it is a circular arc. */
186
288
  getFractionToDistanceScale(): number | undefined;
187
289
  /**
@@ -217,7 +319,7 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
217
319
  */
218
320
  radiansToPointAndDerivative(radians: number, result?: Ray3d): Ray3d;
219
321
  /**
220
- * Evaluate the point and derivative with respect to the angle (in radians)
322
+ * Evaluate the point with respect to the angle (in radians)
221
323
  * @param radians angular position
222
324
  * @param result optional preallocated ray.
223
325
  */
@@ -238,12 +340,12 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
238
340
  */
239
341
  angleToPointAndDerivative(theta: Angle, result?: Ray3d): Ray3d;
240
342
  /**
241
- * Return the start point tof the arc.
343
+ * Return the start point of the arc.
242
344
  * @param result optional preallocated result
243
345
  */
244
346
  startPoint(result?: Point3d): Point3d;
245
347
  /**
246
- * Return the end point tof the arc.
348
+ * Return the end point of the arc.
247
349
  * @param result optional preallocated result
248
350
  */
249
351
  endPoint(result?: Point3d): Point3d;
@@ -278,12 +380,12 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
278
380
  */
279
381
  moveSignedDistanceFromFraction(startFraction: number, signedDistance: number, allowExtension: false, result?: CurveLocationDetail): CurveLocationDetail;
280
382
  /**
281
- * Return all angles (in radians) where the ellipse tangent is perpendicular to the vector to a spacePoint.
383
+ * Return all radian angles where the ellipse tangent is perpendicular to the vector to a spacePoint.
282
384
  * @param spacePoint point of origin of vectors to the ellipse
283
- * @param _extend (NOT SUPPORTED -- ALWAYS ACTS AS "true")
284
- * @param _endpoints if true, force the end radians into the result.
385
+ * @param _extend always true. Sweep is ignored: perpendiculars for the full ellipse are returned.
386
+ * @param endpoints if true, force the end radians into the result.
285
387
  */
286
- allPerpendicularAngles(spacePoint: Point3d, _extend?: boolean, _endpoints?: boolean): number[];
388
+ allPerpendicularAngles(spacePoint: Point3d, _extend?: boolean, endpoints?: boolean): number[];
287
389
  /**
288
390
  * Return details of the closest point on the arc, optionally extending to full ellipse.
289
391
  * @param spacePoint search for point closest to this point.
@@ -479,19 +581,11 @@ export declare class Arc3d extends CurvePrimitive implements BeJSONFunctions {
479
581
  * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the end of the ray.
480
582
  */
481
583
  projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined;
482
- }
483
- /**
484
- * Carrier structure for an arc with fractional data on incoming, outgoing curves.
485
- * @public
486
- */
487
- export interface ArcBlendData {
488
- /** Constructed arc */
489
- arc?: Arc3d;
490
- /** Fraction "moving backward" on the inbound curve */
491
- fraction10: number;
492
- /** Fraction "moving forward" on the outbound curve */
493
- fraction12: number;
494
- /** Optional reference point */
495
- point?: Point3d;
584
+ /**
585
+ * Construct a circular arc chain approximation to the instance elliptical arc.
586
+ * @param options bundle of options for sampling an elliptical arc (use default options if undefined)
587
+ * @returns the approximating curve chain, the circular instance, or undefined if construction fails.
588
+ */
589
+ constructCircularArcChainApproximation(options?: EllipticalArcApproximationOptions): CurveChain | Arc3d | undefined;
496
590
  }
497
591
  //# sourceMappingURL=Arc3d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Arc3d.d.ts","sourceRoot":"","sources":["../../../src/curve/Arc3d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Arc3d.d.ts","sourceRoot":"","sources":["../../../src/curve/Arc3d.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.Arc3d = void 0;
7
+ exports.Arc3d = exports.EllipticalArcApproximationOptions = exports.EllipticalArcSampleMethod = void 0;
8
+ const Constant_1 = require("../Constant");
8
9
  const Geometry_1 = require("../Geometry");
9
10
  const Angle_1 = require("../geometry3d/Angle");
10
11
  const AngleSweep_1 = require("../geometry3d/AngleSweep");
@@ -18,24 +19,134 @@ const CurveExtendMode_1 = require("./CurveExtendMode");
18
19
  const CurveLocationDetail_1 = require("./CurveLocationDetail");
19
20
  const CurvePrimitive_1 = require("./CurvePrimitive");
20
21
  const CurveOffsetXYHandler_1 = require("./internalContexts/CurveOffsetXYHandler");
22
+ const EllipticalArcApproximationContext_1 = require("./internalContexts/EllipticalArcApproximationContext");
21
23
  const PlaneAltitudeRangeContext_1 = require("./internalContexts/PlaneAltitudeRangeContext");
24
+ const LineSegment3d_1 = require("./LineSegment3d");
22
25
  const LineString3d_1 = require("./LineString3d");
23
26
  const OffsetOptions_1 = require("./OffsetOptions");
27
+ const Path_1 = require("./Path");
24
28
  const StrokeOptions_1 = require("./StrokeOptions");
29
+ /**
30
+ * Enumeration of methods used to sample an elliptical arc in [[Arc3d.constructCircularArcChainApproximation]].
31
+ * * Because ellipses have two axes of symmetry, samples are computed for one quadrant and reflected across each
32
+ * axis to the other quadrants. Any samples that fall outside the arc sweep are filtered out.
33
+ * @public
34
+ */
35
+ var EllipticalArcSampleMethod;
36
+ (function (EllipticalArcSampleMethod) {
37
+ /** Generate n samples uniformly interpolated between the min and max parameters of a full ellipse quadrant. */
38
+ EllipticalArcSampleMethod[EllipticalArcSampleMethod["UniformParameter"] = 0] = "UniformParameter";
39
+ /** Generate n samples uniformly interpolated between the min and max curvatures of a full ellipse quadrant. */
40
+ EllipticalArcSampleMethod[EllipticalArcSampleMethod["UniformCurvature"] = 1] = "UniformCurvature";
41
+ /**
42
+ * Generate n samples interpolated between the min and max curvatures of a full ellipse quadrant, using a
43
+ * [[FractionMapper]] callback to generate the interpolation weights.
44
+ */
45
+ EllipticalArcSampleMethod[EllipticalArcSampleMethod["NonUniformCurvature"] = 2] = "NonUniformCurvature";
46
+ /**
47
+ * Generate samples by subdividing parameter space until the approximation has less than a given max
48
+ * distance to the elliptical arc.
49
+ */
50
+ EllipticalArcSampleMethod[EllipticalArcSampleMethod["AdaptiveSubdivision"] = 3] = "AdaptiveSubdivision";
51
+ })(EllipticalArcSampleMethod || (exports.EllipticalArcSampleMethod = EllipticalArcSampleMethod = {}));
52
+ /**
53
+ * Options for generating samples for the construction of an approximation to an elliptical arc.
54
+ * * Used by [[Arc3d.constructCircularArcChainApproximation]].
55
+ * @public
56
+ */
57
+ class EllipticalArcApproximationOptions {
58
+ constructor(method, numSamplesInQuadrant, maxError, remapFunction, forcePath) {
59
+ this._sampleMethod = method;
60
+ this._numSamplesInQuadrant = numSamplesInQuadrant;
61
+ this._maxError = maxError;
62
+ this._remapFunction = remapFunction;
63
+ this._forcePath = forcePath;
64
+ }
65
+ /**
66
+ * Construct options with optional defaults.
67
+ * @param method sample method, default [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
68
+ * @param numSamplesInQuadrant samples in each full quadrant for interpolation methods, default 4.
69
+ * @param maxError positive maximum distance to ellipse for the subdivision method, default 1cm.
70
+ * @param remapFunction optional callback to remap fraction space for [[EllipticalArcSampleMethod.NonUniformCurvature]],
71
+ * default quadratic. For best results, this function should be a bijection.
72
+ * @param forcePath whether to return a [[Path]] instead of a [[Loop]] when approximating a full elliptical arc,
73
+ * default false.
74
+ */
75
+ static create(method = EllipticalArcSampleMethod.AdaptiveSubdivision, numSamplesInQuadrant = 4, maxError = this.defaultMaxError, remapFunction = (x) => x * x, forcePath = false) {
76
+ if (numSamplesInQuadrant < 2)
77
+ numSamplesInQuadrant = 2;
78
+ if (maxError <= 0)
79
+ maxError = this.defaultMaxError;
80
+ return new EllipticalArcApproximationOptions(method, numSamplesInQuadrant, maxError, remapFunction, forcePath);
81
+ }
82
+ /** Clone the options. */
83
+ clone() {
84
+ return new EllipticalArcApproximationOptions(this.sampleMethod, this.numSamplesInQuadrant, this.maxError, this.remapFunction, this.forcePath);
85
+ }
86
+ /** Method used to sample the elliptical arc. */
87
+ get sampleMethod() {
88
+ return this._sampleMethod;
89
+ }
90
+ set sampleMethod(method) {
91
+ this._sampleMethod = method;
92
+ }
93
+ /**
94
+ * Number of samples to return in each full quadrant, including endpoint(s).
95
+ * * Used by interpolation sample methods.
96
+ * * In general, for n samples, the approximating [[Path]] consists of n-1 primitives,
97
+ * and the approximating [[Loop]] consists of n primitives.
98
+ * * Minimum value is 2.
99
+ */
100
+ get numSamplesInQuadrant() {
101
+ return this._numSamplesInQuadrant;
102
+ }
103
+ set numSamplesInQuadrant(numSamples) {
104
+ this._numSamplesInQuadrant = numSamples;
105
+ }
106
+ /**
107
+ * Maximum distance (in meters) of the computed approximation to the elliptical arc.
108
+ * * Used by [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
109
+ */
110
+ get maxError() {
111
+ return this._maxError;
112
+ }
113
+ set maxError(error) {
114
+ this._maxError = error;
115
+ }
116
+ /**
117
+ * Callback function to remap fraction space to fraction space.
118
+ * * Used by [[EllipticalArcSampleMethod.NonUniformCurvature]].
119
+ */
120
+ get remapFunction() {
121
+ return this._remapFunction;
122
+ }
123
+ set remapFunction(f) {
124
+ this._remapFunction = f;
125
+ }
126
+ /** Whether to return a [[Path]] instead of a [[Loop]] when approximating a full (closed) ellipse. */
127
+ get forcePath() {
128
+ return this._forcePath;
129
+ }
130
+ set forcePath(value) {
131
+ this._forcePath = value;
132
+ }
133
+ }
134
+ exports.EllipticalArcApproximationOptions = EllipticalArcApproximationOptions;
135
+ /** Default error tolerance. */
136
+ EllipticalArcApproximationOptions.defaultMaxError = Constant_1.Constant.oneCentimeter;
25
137
  /**
26
138
  * Circular or elliptic arc.
27
139
  * * The angle to point equation is:
28
- * * `X = center + cos(theta) * vector0 + sin(theta) * vector90`
140
+ * * `X = center + cos(theta) * vector0 + sin(theta) * vector90`
29
141
  * * When the two vectors are perpendicular and have equal length, it is a true circle.
30
142
  * * Non-perpendicular vectors are always elliptic.
31
143
  * * Vectors of unequal length are always elliptic.
32
144
  * * To create an ellipse in the common "major and minor axis" form of an ellipse:
33
- * ** vector0 is the vector from the center to the major axis extreme.
34
- * ** vector90 is the vector from the center to the minor axis extreme.
35
- * ** note that constructing the vectors to the extreme points makes them perpendicular.
36
- * * The method toScaledMatrix3d() can be called to convert the unrestricted vector0,vector90 to perpendicular form.
37
- * * The unrestricted form is much easier to work with for common calculations -- stroking, projection to 2d,
38
- * intersection with plane.
145
+ * * vector0 is the vector from the center to the major axis extreme.
146
+ * * vector90 is the vector from the center to the minor axis extreme.
147
+ * * Note that constructing these vectors to the extreme points makes them perpendicular.
148
+ * * The method toScaledMatrix3d() can be called to convert the unrestricted vector0, vector90 to perpendicular form.
149
+ * * The unrestricted form is much easier to work with for common calculations: stroking, projection to 2d, intersection with plane.
39
150
  * @public
40
151
  */
41
152
  class Arc3d extends CurvePrimitive_1.CurvePrimitive {
@@ -207,6 +318,35 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
207
318
  vector90.scaleInPlace(v90Len);
208
319
  return Arc3d.create(center, vector0, vector90, sweep, result);
209
320
  }
321
+ /**
322
+ * Create a circular arc defined by start point, tangent at start point, and end point.
323
+ * If tangent is parallel to line segment from start to end, return the line segment.
324
+ */
325
+ static createCircularStartTangentEnd(start, tangentAtStart, end, result) {
326
+ // To find the circle passing through start and end with tangentAtStart at start:
327
+ // - find line 1: the perpendicular bisector of the line from start to end.
328
+ // - find line 2: the perpendicular to the tangentAtStart.
329
+ // - intersection of the two lines would be the circle center.
330
+ const vector = Point3dVector3d_1.Vector3d.createStartEnd(start, end);
331
+ const normal = tangentAtStart.crossProduct(vector).normalize();
332
+ if (normal) {
333
+ const vectorPerp = normal.crossProduct(vector);
334
+ const tangentPerp = normal.crossProduct(tangentAtStart);
335
+ const midPoint = start.plusScaled(vector, 0.5);
336
+ const lineSeg1 = LineSegment3d_1.LineSegment3d.create(start, start.plusScaled(tangentPerp, 1));
337
+ const lineSeg2 = LineSegment3d_1.LineSegment3d.create(midPoint, midPoint.plusScaled(vectorPerp, 1));
338
+ const intersection = LineSegment3d_1.LineSegment3d.closestApproach(lineSeg1, true, lineSeg2, true);
339
+ if (intersection) {
340
+ const center = intersection.detailA.point;
341
+ const vector0 = Point3dVector3d_1.Vector3d.createStartEnd(center, start);
342
+ const vector90 = normal.crossProduct(vector0);
343
+ const endVector = Point3dVector3d_1.Vector3d.createStartEnd(center, end);
344
+ const sweep = AngleSweep_1.AngleSweep.create(vector0.signedAngleTo(endVector, normal));
345
+ return Arc3d.create(center, vector0, vector90, sweep, result);
346
+ }
347
+ }
348
+ return LineSegment3d_1.LineSegment3d.create(start, end);
349
+ }
210
350
  /**
211
351
  * Return a clone of this arc, projected to given z value.
212
352
  * * If `z` is omitted, the clone is at the z of the center.
@@ -250,10 +390,10 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
250
390
  const ac2 = vectorAC.magnitudeSquared();
251
391
  const normal = vectorAB.sizedCrossProduct(vectorAC, Math.sqrt(Math.sqrt(ab2 * ac2)));
252
392
  if (normal) {
253
- const vectorToCenter = Polynomials_1.SmallSystem.linearSystem3d(normal.x, normal.y, normal.z, vectorAB.x, vectorAB.y, vectorAB.z, vectorAC.x, vectorAC.y, vectorAC.z, 0, // vectorToCenter DOT normal = 0
254
- 0.5 * ab2, // vectorToCenter DOT vectorAB = 0.5 * vectorAB DOT vectorAB (Rayleigh quotient)
393
+ const vectorToCenter = Polynomials_1.SmallSystem.linearSystem3d(normal.x, normal.y, normal.z, vectorAB.x, vectorAB.y, vectorAB.z, vectorAC.x, vectorAC.y, vectorAC.z, 0, // vectorToCenter DOT normal = 0 (ensure normal is perp to the plane of the 3 points)
394
+ 0.5 * ab2, // vectorToCenter DOT vectorAB = ab2 / 2 (ensure the projection of vectorToCenter on AB bisects AB)
255
395
  0.5 * ac2);
256
- if (vectorToCenter) {
396
+ if (vectorToCenter) { // i.e., the negative of vectorX
257
397
  const center = Point3dVector3d_1.Point3d.create(pointA.x, pointA.y, pointA.z).plus(vectorToCenter);
258
398
  const vectorX = Point3dVector3d_1.Vector3d.createStartEnd(center, pointA);
259
399
  const vectorY = Point3dVector3d_1.Vector3d.createRotateVectorAroundVector(vectorX, normal, Angle_1.Angle.createDegrees(90));
@@ -337,7 +477,7 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
337
477
  return result;
338
478
  }
339
479
  /**
340
- * Evaluate the point and derivative with respect to the angle (in radians)
480
+ * Evaluate the point with respect to the angle (in radians)
341
481
  * @param radians angular position
342
482
  * @param result optional preallocated ray.
343
483
  */
@@ -379,14 +519,14 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
379
519
  return result;
380
520
  }
381
521
  /**
382
- * Return the start point tof the arc.
522
+ * Return the start point of the arc.
383
523
  * @param result optional preallocated result
384
524
  */
385
525
  startPoint(result) {
386
526
  return this.fractionToPoint(0.0, result);
387
527
  }
388
528
  /**
389
- * Return the end point tof the arc.
529
+ * Return the end point of the arc.
390
530
  * @param result optional preallocated result
391
531
  */
392
532
  endPoint(result) {
@@ -474,19 +614,19 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
474
614
  return CurveLocationDetail_1.CurveLocationDetail.createConditionalMoveSignedDistance(allowExtension, this, startFraction, startFraction + signedFractionMove, signedDistance, result);
475
615
  }
476
616
  /**
477
- * Return all angles (in radians) where the ellipse tangent is perpendicular to the vector to a spacePoint.
617
+ * Return all radian angles where the ellipse tangent is perpendicular to the vector to a spacePoint.
478
618
  * @param spacePoint point of origin of vectors to the ellipse
479
- * @param _extend (NOT SUPPORTED -- ALWAYS ACTS AS "true")
480
- * @param _endpoints if true, force the end radians into the result.
619
+ * @param _extend always true. Sweep is ignored: perpendiculars for the full ellipse are returned.
620
+ * @param endpoints if true, force the end radians into the result.
481
621
  */
482
- allPerpendicularAngles(spacePoint, _extend = true, _endpoints = false) {
622
+ allPerpendicularAngles(spacePoint, _extend = true, endpoints = false) {
483
623
  const radians = [];
484
624
  const vectorQ = spacePoint.vectorTo(this.center);
485
625
  const uu = this._matrix.columnXMagnitudeSquared();
486
626
  const uv = this._matrix.columnXDotColumnY();
487
627
  const vv = this._matrix.columnYMagnitudeSquared();
488
628
  Polynomials_1.TrigPolynomial.solveUnitCircleImplicitQuadricIntersection(uv, vv - uu, -uv, this._matrix.dotColumnY(vectorQ), -this._matrix.dotColumnX(vectorQ), 0.0, radians);
489
- if (_endpoints) {
629
+ if (endpoints) {
490
630
  radians.push(this.sweep.startRadians);
491
631
  radians.push(this.sweep.endRadians);
492
632
  }
@@ -720,8 +860,8 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
720
860
  const vector90A = this._matrix.multiplyXY(-angleData.s, angleData.c);
721
861
  const axes = Matrix3d_1.Matrix3d.createRigidFromColumns(vector0A, vector90A, Geometry_1.AxisOrder.XYZ);
722
862
  return {
723
- axes: (axes ? axes : Matrix3d_1.Matrix3d.createIdentity()),
724
863
  center: this._center,
864
+ axes: (axes ? axes : Matrix3d_1.Matrix3d.createIdentity()),
725
865
  r0: vector0A.magnitude(),
726
866
  r90: vector90A.magnitude(),
727
867
  sweep: this.sweep.cloneMinusRadians(angleData.radians),
@@ -997,6 +1137,20 @@ class Arc3d extends CurvePrimitive_1.CurvePrimitive {
997
1137
  projectedParameterRange(ray, lowHigh) {
998
1138
  return PlaneAltitudeRangeContext_1.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
999
1139
  }
1140
+ /**
1141
+ * Construct a circular arc chain approximation to the instance elliptical arc.
1142
+ * @param options bundle of options for sampling an elliptical arc (use default options if undefined)
1143
+ * @returns the approximating curve chain, the circular instance, or undefined if construction fails.
1144
+ */
1145
+ constructCircularArcChainApproximation(options) {
1146
+ if (!options)
1147
+ options = EllipticalArcApproximationOptions.create();
1148
+ const context = EllipticalArcApproximationContext_1.EllipticalArcApproximationContext.create(this);
1149
+ const result = context.constructCircularArcChainApproximation(options);
1150
+ if (!result && this.isCircular)
1151
+ return (this.sweep.isFullCircle && options.forcePath) ? Path_1.Path.create(this) : this;
1152
+ return result;
1153
+ }
1000
1154
  }
1001
1155
  exports.Arc3d = Arc3d;
1002
1156
  Arc3d._workPointA = Point3dVector3d_1.Point3d.create();