@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.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/Geometry.d.ts +57 -46
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +73 -53
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +128 -34
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +174 -20
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +2 -1
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +2 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +39 -0
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.d.ts +1 -1
- package/lib/cjs/curve/OffsetOptions.js +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +2 -1
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +2 -1
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +1000 -0
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/cjs/geometry3d/Angle.d.ts +18 -5
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +23 -7
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +47 -12
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +6 -4
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +2 -3
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js +11 -10
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +6 -1
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +9 -3
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts +1 -1
- package/lib/cjs/geometry3d/Transform.js +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/numerics/Newton.d.ts +3 -3
- package/lib/cjs/numerics/Newton.d.ts.map +1 -1
- package/lib/cjs/numerics/Newton.js +14 -16
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts +2 -2
- package/lib/cjs/numerics/Polynomials.js +2 -2
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js +8 -4
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +3 -3
- package/lib/cjs/polyface/PolyfaceQuery.js +3 -3
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js +2 -2
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +1 -1
- package/lib/cjs/topology/Graph.js +2 -2
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/cjs/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/cjs/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js +174 -75
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +16 -10
- package/lib/cjs/topology/Triangulation.d.ts.map +1 -1
- package/lib/cjs/topology/Triangulation.js +23 -30
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.d.ts +57 -46
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +73 -53
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +128 -34
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +172 -19
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +2 -1
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +2 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +19 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +39 -0
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/LineString3d.js +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.d.ts +1 -1
- package/lib/esm/curve/OffsetOptions.js +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +2 -1
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +2 -1
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts +23 -7
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +43 -35
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts +211 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +995 -0
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -0
- package/lib/esm/geometry3d/Angle.d.ts +18 -5
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +23 -7
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +14 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +47 -12
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +6 -4
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +6 -4
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +2 -3
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.d.ts +6 -5
- package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js +11 -10
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +6 -1
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +9 -3
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts +1 -1
- package/lib/esm/geometry3d/Transform.js +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/numerics/Newton.d.ts +3 -3
- package/lib/esm/numerics/Newton.d.ts.map +1 -1
- package/lib/esm/numerics/Newton.js +14 -16
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts +2 -2
- package/lib/esm/numerics/Polynomials.js +2 -2
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -4
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js +8 -4
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +3 -3
- package/lib/esm/polyface/PolyfaceQuery.js +3 -3
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js +2 -2
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +1 -1
- package/lib/esm/topology/Graph.js +2 -2
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.d.ts +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts +57 -15
- package/lib/esm/topology/HalfEdgePointInGraphSearch.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js +168 -127
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts +35 -35
- package/lib/esm/topology/HalfEdgePositionDetail.d.ts.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js +63 -41
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts +64 -12
- package/lib/esm/topology/InsertAndRetriangulateContext.d.ts.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js +173 -74
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +16 -10
- package/lib/esm/topology/Triangulation.d.ts.map +1 -1
- package/lib/esm/topology/Triangulation.js +24 -31
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +3 -3
package/lib/esm/curve/Arc3d.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
38
|
+
/** Vector from the arc center to the arc point at parameter 0 degrees. */
|
|
37
39
|
vector0: Vector3d;
|
|
38
|
-
/** Vector to point at
|
|
40
|
+
/** Vector from the arc center to the arc point at parameter 90 degrees. */
|
|
39
41
|
vector90: Vector3d;
|
|
40
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
284
|
-
* @param
|
|
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,
|
|
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
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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":"AAKA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Arc3d.d.ts","sourceRoot":"","sources":["../../../src/curve/Arc3d.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/curve/Arc3d.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { Constant } from "../Constant";
|
|
5
6
|
import { AxisOrder, Geometry } from "../Geometry";
|
|
6
7
|
import { Angle } from "../geometry3d/Angle";
|
|
7
8
|
import { AngleSweep } from "../geometry3d/AngleSweep";
|
|
@@ -15,24 +16,133 @@ import { CurveExtendMode, CurveExtendOptions } from "./CurveExtendMode";
|
|
|
15
16
|
import { CurveIntervalRole, CurveLocationDetail, CurveSearchStatus } from "./CurveLocationDetail";
|
|
16
17
|
import { CurvePrimitive } from "./CurvePrimitive";
|
|
17
18
|
import { CurveOffsetXYHandler } from "./internalContexts/CurveOffsetXYHandler";
|
|
19
|
+
import { EllipticalArcApproximationContext } from "./internalContexts/EllipticalArcApproximationContext";
|
|
18
20
|
import { PlaneAltitudeRangeContext } from "./internalContexts/PlaneAltitudeRangeContext";
|
|
21
|
+
import { LineSegment3d } from "./LineSegment3d";
|
|
19
22
|
import { LineString3d } from "./LineString3d";
|
|
20
23
|
import { OffsetOptions } from "./OffsetOptions";
|
|
24
|
+
import { Path } from "./Path";
|
|
21
25
|
import { StrokeOptions } from "./StrokeOptions";
|
|
26
|
+
/**
|
|
27
|
+
* Enumeration of methods used to sample an elliptical arc in [[Arc3d.constructCircularArcChainApproximation]].
|
|
28
|
+
* * Because ellipses have two axes of symmetry, samples are computed for one quadrant and reflected across each
|
|
29
|
+
* axis to the other quadrants. Any samples that fall outside the arc sweep are filtered out.
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
export var EllipticalArcSampleMethod;
|
|
33
|
+
(function (EllipticalArcSampleMethod) {
|
|
34
|
+
/** Generate n samples uniformly interpolated between the min and max parameters of a full ellipse quadrant. */
|
|
35
|
+
EllipticalArcSampleMethod[EllipticalArcSampleMethod["UniformParameter"] = 0] = "UniformParameter";
|
|
36
|
+
/** Generate n samples uniformly interpolated between the min and max curvatures of a full ellipse quadrant. */
|
|
37
|
+
EllipticalArcSampleMethod[EllipticalArcSampleMethod["UniformCurvature"] = 1] = "UniformCurvature";
|
|
38
|
+
/**
|
|
39
|
+
* Generate n samples interpolated between the min and max curvatures of a full ellipse quadrant, using a
|
|
40
|
+
* [[FractionMapper]] callback to generate the interpolation weights.
|
|
41
|
+
*/
|
|
42
|
+
EllipticalArcSampleMethod[EllipticalArcSampleMethod["NonUniformCurvature"] = 2] = "NonUniformCurvature";
|
|
43
|
+
/**
|
|
44
|
+
* Generate samples by subdividing parameter space until the approximation has less than a given max
|
|
45
|
+
* distance to the elliptical arc.
|
|
46
|
+
*/
|
|
47
|
+
EllipticalArcSampleMethod[EllipticalArcSampleMethod["AdaptiveSubdivision"] = 3] = "AdaptiveSubdivision";
|
|
48
|
+
})(EllipticalArcSampleMethod || (EllipticalArcSampleMethod = {}));
|
|
49
|
+
/**
|
|
50
|
+
* Options for generating samples for the construction of an approximation to an elliptical arc.
|
|
51
|
+
* * Used by [[Arc3d.constructCircularArcChainApproximation]].
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export class EllipticalArcApproximationOptions {
|
|
55
|
+
constructor(method, numSamplesInQuadrant, maxError, remapFunction, forcePath) {
|
|
56
|
+
this._sampleMethod = method;
|
|
57
|
+
this._numSamplesInQuadrant = numSamplesInQuadrant;
|
|
58
|
+
this._maxError = maxError;
|
|
59
|
+
this._remapFunction = remapFunction;
|
|
60
|
+
this._forcePath = forcePath;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Construct options with optional defaults.
|
|
64
|
+
* @param method sample method, default [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
|
|
65
|
+
* @param numSamplesInQuadrant samples in each full quadrant for interpolation methods, default 4.
|
|
66
|
+
* @param maxError positive maximum distance to ellipse for the subdivision method, default 1cm.
|
|
67
|
+
* @param remapFunction optional callback to remap fraction space for [[EllipticalArcSampleMethod.NonUniformCurvature]],
|
|
68
|
+
* default quadratic. For best results, this function should be a bijection.
|
|
69
|
+
* @param forcePath whether to return a [[Path]] instead of a [[Loop]] when approximating a full elliptical arc,
|
|
70
|
+
* default false.
|
|
71
|
+
*/
|
|
72
|
+
static create(method = EllipticalArcSampleMethod.AdaptiveSubdivision, numSamplesInQuadrant = 4, maxError = this.defaultMaxError, remapFunction = (x) => x * x, forcePath = false) {
|
|
73
|
+
if (numSamplesInQuadrant < 2)
|
|
74
|
+
numSamplesInQuadrant = 2;
|
|
75
|
+
if (maxError <= 0)
|
|
76
|
+
maxError = this.defaultMaxError;
|
|
77
|
+
return new EllipticalArcApproximationOptions(method, numSamplesInQuadrant, maxError, remapFunction, forcePath);
|
|
78
|
+
}
|
|
79
|
+
/** Clone the options. */
|
|
80
|
+
clone() {
|
|
81
|
+
return new EllipticalArcApproximationOptions(this.sampleMethod, this.numSamplesInQuadrant, this.maxError, this.remapFunction, this.forcePath);
|
|
82
|
+
}
|
|
83
|
+
/** Method used to sample the elliptical arc. */
|
|
84
|
+
get sampleMethod() {
|
|
85
|
+
return this._sampleMethod;
|
|
86
|
+
}
|
|
87
|
+
set sampleMethod(method) {
|
|
88
|
+
this._sampleMethod = method;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Number of samples to return in each full quadrant, including endpoint(s).
|
|
92
|
+
* * Used by interpolation sample methods.
|
|
93
|
+
* * In general, for n samples, the approximating [[Path]] consists of n-1 primitives,
|
|
94
|
+
* and the approximating [[Loop]] consists of n primitives.
|
|
95
|
+
* * Minimum value is 2.
|
|
96
|
+
*/
|
|
97
|
+
get numSamplesInQuadrant() {
|
|
98
|
+
return this._numSamplesInQuadrant;
|
|
99
|
+
}
|
|
100
|
+
set numSamplesInQuadrant(numSamples) {
|
|
101
|
+
this._numSamplesInQuadrant = numSamples;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Maximum distance (in meters) of the computed approximation to the elliptical arc.
|
|
105
|
+
* * Used by [[EllipticalArcSampleMethod.AdaptiveSubdivision]].
|
|
106
|
+
*/
|
|
107
|
+
get maxError() {
|
|
108
|
+
return this._maxError;
|
|
109
|
+
}
|
|
110
|
+
set maxError(error) {
|
|
111
|
+
this._maxError = error;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Callback function to remap fraction space to fraction space.
|
|
115
|
+
* * Used by [[EllipticalArcSampleMethod.NonUniformCurvature]].
|
|
116
|
+
*/
|
|
117
|
+
get remapFunction() {
|
|
118
|
+
return this._remapFunction;
|
|
119
|
+
}
|
|
120
|
+
set remapFunction(f) {
|
|
121
|
+
this._remapFunction = f;
|
|
122
|
+
}
|
|
123
|
+
/** Whether to return a [[Path]] instead of a [[Loop]] when approximating a full (closed) ellipse. */
|
|
124
|
+
get forcePath() {
|
|
125
|
+
return this._forcePath;
|
|
126
|
+
}
|
|
127
|
+
set forcePath(value) {
|
|
128
|
+
this._forcePath = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Default error tolerance. */
|
|
132
|
+
EllipticalArcApproximationOptions.defaultMaxError = Constant.oneCentimeter;
|
|
22
133
|
/**
|
|
23
134
|
* Circular or elliptic arc.
|
|
24
135
|
* * The angle to point equation is:
|
|
25
|
-
*
|
|
136
|
+
* * `X = center + cos(theta) * vector0 + sin(theta) * vector90`
|
|
26
137
|
* * When the two vectors are perpendicular and have equal length, it is a true circle.
|
|
27
138
|
* * Non-perpendicular vectors are always elliptic.
|
|
28
139
|
* * Vectors of unequal length are always elliptic.
|
|
29
140
|
* * To create an ellipse in the common "major and minor axis" form of an ellipse:
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* * The method toScaledMatrix3d() can be called to convert the unrestricted vector0,vector90 to perpendicular form.
|
|
34
|
-
* * The unrestricted form is much easier to work with for common calculations
|
|
35
|
-
* intersection with plane.
|
|
141
|
+
* * vector0 is the vector from the center to the major axis extreme.
|
|
142
|
+
* * vector90 is the vector from the center to the minor axis extreme.
|
|
143
|
+
* * Note that constructing these vectors to the extreme points makes them perpendicular.
|
|
144
|
+
* * The method toScaledMatrix3d() can be called to convert the unrestricted vector0, vector90 to perpendicular form.
|
|
145
|
+
* * The unrestricted form is much easier to work with for common calculations: stroking, projection to 2d, intersection with plane.
|
|
36
146
|
* @public
|
|
37
147
|
*/
|
|
38
148
|
export class Arc3d extends CurvePrimitive {
|
|
@@ -204,6 +314,35 @@ export class Arc3d extends CurvePrimitive {
|
|
|
204
314
|
vector90.scaleInPlace(v90Len);
|
|
205
315
|
return Arc3d.create(center, vector0, vector90, sweep, result);
|
|
206
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* Create a circular arc defined by start point, tangent at start point, and end point.
|
|
319
|
+
* If tangent is parallel to line segment from start to end, return the line segment.
|
|
320
|
+
*/
|
|
321
|
+
static createCircularStartTangentEnd(start, tangentAtStart, end, result) {
|
|
322
|
+
// To find the circle passing through start and end with tangentAtStart at start:
|
|
323
|
+
// - find line 1: the perpendicular bisector of the line from start to end.
|
|
324
|
+
// - find line 2: the perpendicular to the tangentAtStart.
|
|
325
|
+
// - intersection of the two lines would be the circle center.
|
|
326
|
+
const vector = Vector3d.createStartEnd(start, end);
|
|
327
|
+
const normal = tangentAtStart.crossProduct(vector).normalize();
|
|
328
|
+
if (normal) {
|
|
329
|
+
const vectorPerp = normal.crossProduct(vector);
|
|
330
|
+
const tangentPerp = normal.crossProduct(tangentAtStart);
|
|
331
|
+
const midPoint = start.plusScaled(vector, 0.5);
|
|
332
|
+
const lineSeg1 = LineSegment3d.create(start, start.plusScaled(tangentPerp, 1));
|
|
333
|
+
const lineSeg2 = LineSegment3d.create(midPoint, midPoint.plusScaled(vectorPerp, 1));
|
|
334
|
+
const intersection = LineSegment3d.closestApproach(lineSeg1, true, lineSeg2, true);
|
|
335
|
+
if (intersection) {
|
|
336
|
+
const center = intersection.detailA.point;
|
|
337
|
+
const vector0 = Vector3d.createStartEnd(center, start);
|
|
338
|
+
const vector90 = normal.crossProduct(vector0);
|
|
339
|
+
const endVector = Vector3d.createStartEnd(center, end);
|
|
340
|
+
const sweep = AngleSweep.create(vector0.signedAngleTo(endVector, normal));
|
|
341
|
+
return Arc3d.create(center, vector0, vector90, sweep, result);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return LineSegment3d.create(start, end);
|
|
345
|
+
}
|
|
207
346
|
/**
|
|
208
347
|
* Return a clone of this arc, projected to given z value.
|
|
209
348
|
* * If `z` is omitted, the clone is at the z of the center.
|
|
@@ -247,10 +386,10 @@ export class Arc3d extends CurvePrimitive {
|
|
|
247
386
|
const ac2 = vectorAC.magnitudeSquared();
|
|
248
387
|
const normal = vectorAB.sizedCrossProduct(vectorAC, Math.sqrt(Math.sqrt(ab2 * ac2)));
|
|
249
388
|
if (normal) {
|
|
250
|
-
const vectorToCenter = 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
|
|
251
|
-
0.5 * ab2, // vectorToCenter DOT vectorAB =
|
|
389
|
+
const vectorToCenter = 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)
|
|
390
|
+
0.5 * ab2, // vectorToCenter DOT vectorAB = ab2 / 2 (ensure the projection of vectorToCenter on AB bisects AB)
|
|
252
391
|
0.5 * ac2);
|
|
253
|
-
if (vectorToCenter) {
|
|
392
|
+
if (vectorToCenter) { // i.e., the negative of vectorX
|
|
254
393
|
const center = Point3d.create(pointA.x, pointA.y, pointA.z).plus(vectorToCenter);
|
|
255
394
|
const vectorX = Vector3d.createStartEnd(center, pointA);
|
|
256
395
|
const vectorY = Vector3d.createRotateVectorAroundVector(vectorX, normal, Angle.createDegrees(90));
|
|
@@ -334,7 +473,7 @@ export class Arc3d extends CurvePrimitive {
|
|
|
334
473
|
return result;
|
|
335
474
|
}
|
|
336
475
|
/**
|
|
337
|
-
* Evaluate the point
|
|
476
|
+
* Evaluate the point with respect to the angle (in radians)
|
|
338
477
|
* @param radians angular position
|
|
339
478
|
* @param result optional preallocated ray.
|
|
340
479
|
*/
|
|
@@ -376,14 +515,14 @@ export class Arc3d extends CurvePrimitive {
|
|
|
376
515
|
return result;
|
|
377
516
|
}
|
|
378
517
|
/**
|
|
379
|
-
* Return the start point
|
|
518
|
+
* Return the start point of the arc.
|
|
380
519
|
* @param result optional preallocated result
|
|
381
520
|
*/
|
|
382
521
|
startPoint(result) {
|
|
383
522
|
return this.fractionToPoint(0.0, result);
|
|
384
523
|
}
|
|
385
524
|
/**
|
|
386
|
-
* Return the end point
|
|
525
|
+
* Return the end point of the arc.
|
|
387
526
|
* @param result optional preallocated result
|
|
388
527
|
*/
|
|
389
528
|
endPoint(result) {
|
|
@@ -471,19 +610,19 @@ export class Arc3d extends CurvePrimitive {
|
|
|
471
610
|
return CurveLocationDetail.createConditionalMoveSignedDistance(allowExtension, this, startFraction, startFraction + signedFractionMove, signedDistance, result);
|
|
472
611
|
}
|
|
473
612
|
/**
|
|
474
|
-
* Return all angles
|
|
613
|
+
* Return all radian angles where the ellipse tangent is perpendicular to the vector to a spacePoint.
|
|
475
614
|
* @param spacePoint point of origin of vectors to the ellipse
|
|
476
|
-
* @param _extend
|
|
477
|
-
* @param
|
|
615
|
+
* @param _extend always true. Sweep is ignored: perpendiculars for the full ellipse are returned.
|
|
616
|
+
* @param endpoints if true, force the end radians into the result.
|
|
478
617
|
*/
|
|
479
|
-
allPerpendicularAngles(spacePoint, _extend = true,
|
|
618
|
+
allPerpendicularAngles(spacePoint, _extend = true, endpoints = false) {
|
|
480
619
|
const radians = [];
|
|
481
620
|
const vectorQ = spacePoint.vectorTo(this.center);
|
|
482
621
|
const uu = this._matrix.columnXMagnitudeSquared();
|
|
483
622
|
const uv = this._matrix.columnXDotColumnY();
|
|
484
623
|
const vv = this._matrix.columnYMagnitudeSquared();
|
|
485
624
|
TrigPolynomial.solveUnitCircleImplicitQuadricIntersection(uv, vv - uu, -uv, this._matrix.dotColumnY(vectorQ), -this._matrix.dotColumnX(vectorQ), 0.0, radians);
|
|
486
|
-
if (
|
|
625
|
+
if (endpoints) {
|
|
487
626
|
radians.push(this.sweep.startRadians);
|
|
488
627
|
radians.push(this.sweep.endRadians);
|
|
489
628
|
}
|
|
@@ -717,8 +856,8 @@ export class Arc3d extends CurvePrimitive {
|
|
|
717
856
|
const vector90A = this._matrix.multiplyXY(-angleData.s, angleData.c);
|
|
718
857
|
const axes = Matrix3d.createRigidFromColumns(vector0A, vector90A, AxisOrder.XYZ);
|
|
719
858
|
return {
|
|
720
|
-
axes: (axes ? axes : Matrix3d.createIdentity()),
|
|
721
859
|
center: this._center,
|
|
860
|
+
axes: (axes ? axes : Matrix3d.createIdentity()),
|
|
722
861
|
r0: vector0A.magnitude(),
|
|
723
862
|
r90: vector90A.magnitude(),
|
|
724
863
|
sweep: this.sweep.cloneMinusRadians(angleData.radians),
|
|
@@ -994,6 +1133,20 @@ export class Arc3d extends CurvePrimitive {
|
|
|
994
1133
|
projectedParameterRange(ray, lowHigh) {
|
|
995
1134
|
return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
|
|
996
1135
|
}
|
|
1136
|
+
/**
|
|
1137
|
+
* Construct a circular arc chain approximation to the instance elliptical arc.
|
|
1138
|
+
* @param options bundle of options for sampling an elliptical arc (use default options if undefined)
|
|
1139
|
+
* @returns the approximating curve chain, the circular instance, or undefined if construction fails.
|
|
1140
|
+
*/
|
|
1141
|
+
constructCircularArcChainApproximation(options) {
|
|
1142
|
+
if (!options)
|
|
1143
|
+
options = EllipticalArcApproximationOptions.create();
|
|
1144
|
+
const context = EllipticalArcApproximationContext.create(this);
|
|
1145
|
+
const result = context.constructCircularArcChainApproximation(options);
|
|
1146
|
+
if (!result && this.isCircular)
|
|
1147
|
+
return (this.sweep.isFullCircle && options.forcePath) ? Path.create(this) : this;
|
|
1148
|
+
return result;
|
|
1149
|
+
}
|
|
997
1150
|
}
|
|
998
1151
|
Arc3d._workPointA = Point3d.create();
|
|
999
1152
|
Arc3d._workPointB = Point3d.create();
|