@itwin/core-geometry 4.1.0-dev.3 → 4.1.0-dev.5
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/lib/cjs/curve/Arc3d.d.ts +70 -86
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +109 -96
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +47 -30
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +63 -34
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.d.ts +40 -41
- package/lib/cjs/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js +31 -35
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +137 -92
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +114 -75
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.d.ts +26 -20
- package/lib/cjs/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js +11 -9
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +34 -25
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +76 -38
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +70 -51
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +120 -71
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.d.ts +14 -13
- package/lib/cjs/curve/Query/StrokeCountMap.d.ts.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js +9 -8
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.d.ts +29 -21
- package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js +44 -22
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +2 -2
- package/lib/cjs/geometry3d/Matrix3d.js +2 -2
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +70 -86
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +109 -96
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +47 -30
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +63 -34
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.d.ts +40 -41
- package/lib/esm/curve/CurveLocationDetail.d.ts.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js +31 -35
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +137 -92
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +114 -75
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.d.ts +26 -20
- package/lib/esm/curve/GeometryQuery.d.ts.map +1 -1
- package/lib/esm/curve/GeometryQuery.js +11 -9
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +34 -25
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +76 -38
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +70 -51
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +120 -71
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.d.ts +14 -13
- package/lib/esm/curve/Query/StrokeCountMap.d.ts.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js +9 -8
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.d.ts +29 -21
- package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
- package/lib/esm/curve/StrokeOptions.js +44 -22
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +2 -2
- package/lib/esm/geometry3d/Matrix3d.js +2 -2
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/package.json +3 -3
|
@@ -23,7 +23,8 @@ const LineString3d_1 = require("./LineString3d");
|
|
|
23
23
|
const ProxyCurve_1 = require("./ProxyCurve");
|
|
24
24
|
/**
|
|
25
25
|
* A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:
|
|
26
|
-
* - `CurveChain` is a (non-instantiable) intermediate class for a sequence of `CurvePrimitive
|
|
26
|
+
* - `CurveChain` is a (non-instantiable) intermediate class for a sequence of `CurvePrimitive` joining head-to-tail.
|
|
27
|
+
* The two instantiable forms of `CurveChain` are
|
|
27
28
|
* - `Path` - A chain not required to close, and not enclosing a planar area
|
|
28
29
|
* - `Loop` - A chain required to close from last to first so that a planar area is enclosed.
|
|
29
30
|
* - `ParityRegion` -- a collection of coplanar `Loop`s, with "in/out" classification by parity rules
|
|
@@ -39,11 +40,13 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
|
|
|
39
40
|
/** String name for schema properties */
|
|
40
41
|
this.geometryCategory = "curveCollection";
|
|
41
42
|
/* eslint-disable @typescript-eslint/naming-convention, no-empty */
|
|
42
|
-
/**
|
|
43
|
+
/** Flag for inner loop status. Only used by `Loop`. */
|
|
43
44
|
this.isInner = false;
|
|
44
45
|
}
|
|
45
46
|
/** Return the sum of the lengths of all contained curves. */
|
|
46
|
-
sumLengths() {
|
|
47
|
+
sumLengths() {
|
|
48
|
+
return SumLengthsContext_1.SumLengthsContext.sumLengths(this);
|
|
49
|
+
}
|
|
47
50
|
/** Return the closest point on the contained curves */
|
|
48
51
|
closestPoint(spacePoint) {
|
|
49
52
|
let detailA;
|
|
@@ -61,17 +64,24 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
|
|
|
61
64
|
}
|
|
62
65
|
return detailA;
|
|
63
66
|
}
|
|
64
|
-
/**
|
|
65
|
-
*
|
|
67
|
+
/**
|
|
68
|
+
* Return the max gap between adjacent primitives in Path and Loop collections.
|
|
66
69
|
* * In a Path, gaps are computed between consecutive primitives.
|
|
67
70
|
* * In a Loop, gaps are computed between consecutive primitives and between last and first.
|
|
68
|
-
* * gaps are NOT computed between consecutive CurvePrimitives in "unstructured" collections. The type is
|
|
71
|
+
* * gaps are NOT computed between consecutive CurvePrimitives in "unstructured" collections. The type is
|
|
72
|
+
* "unstructured" so gaps should not be semantically meaningful.
|
|
69
73
|
*/
|
|
70
|
-
maxGap() {
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
maxGap() {
|
|
75
|
+
return GapSearchContext_1.GapSearchContext.maxGap(this);
|
|
76
|
+
}
|
|
77
|
+
/** Return true if the curve collection has any primitives other than LineSegment3d and LineString3d */
|
|
78
|
+
checkForNonLinearPrimitives() {
|
|
79
|
+
return CountLinearPartsSearchContext_1.CountLinearPartsSearchContext.hasNonLinearPrimitives(this);
|
|
80
|
+
}
|
|
73
81
|
/** Apply transform recursively to children */
|
|
74
|
-
tryTransformInPlace(transform) {
|
|
82
|
+
tryTransformInPlace(transform) {
|
|
83
|
+
return TransformInPlaceContext_1.TransformInPlaceContext.tryTransformInPlace(this, transform);
|
|
84
|
+
}
|
|
75
85
|
/** Return a deep copy. */
|
|
76
86
|
clone() {
|
|
77
87
|
return CloneCurvesContext_1.CloneCurvesContext.clone(this);
|
|
@@ -97,15 +107,18 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
|
|
|
97
107
|
}
|
|
98
108
|
/**
|
|
99
109
|
* Return an array containing only the curve primitives.
|
|
100
|
-
* @param collectorArray optional array to receive primitives.
|
|
101
|
-
*
|
|
110
|
+
* @param collectorArray optional array to receive primitives. If present, new primitives are ADDED (without
|
|
111
|
+
* clearing the array.)
|
|
112
|
+
* @param smallestPossiblePrimitives if false, CurvePrimitiveWithDistanceIndex returns only itself. If true,
|
|
113
|
+
* it recurses to its (otherwise hidden) children.
|
|
102
114
|
*/
|
|
103
115
|
collectCurvePrimitives(collectorArray, smallestPossiblePrimitives = false, explodeLineStrings = false) {
|
|
104
116
|
const results = collectorArray === undefined ? [] : collectorArray;
|
|
105
117
|
this.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLineStrings);
|
|
106
118
|
return results;
|
|
107
119
|
}
|
|
108
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Return true for planar region types:
|
|
109
122
|
* * `Loop`
|
|
110
123
|
* * `ParityRegion`
|
|
111
124
|
* * `UnionRegion`
|
|
@@ -113,12 +126,12 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
|
|
|
113
126
|
get isAnyRegionType() {
|
|
114
127
|
return this.dgnBoundaryType() === 2 || this.dgnBoundaryType() === 5 || this.dgnBoundaryType() === 4;
|
|
115
128
|
}
|
|
116
|
-
/** Return true for a `Path`, i.e. a chain of curves joined head-to-tail
|
|
117
|
-
*/
|
|
129
|
+
/** Return true for a `Path`, i.e. a chain of curves joined head-to-tail */
|
|
118
130
|
get isOpenPath() {
|
|
119
131
|
return this.dgnBoundaryType() === 1;
|
|
120
132
|
}
|
|
121
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* Return true for a single-loop planar region type, i.e. `Loop`.
|
|
122
135
|
* * This is _not- a test for physical closure of a `Path`
|
|
123
136
|
*/
|
|
124
137
|
get isClosedPath() {
|
|
@@ -153,20 +166,26 @@ class CurveCollection extends GeometryQuery_1.GeometryQuery {
|
|
|
153
166
|
}
|
|
154
167
|
return undefined;
|
|
155
168
|
}
|
|
156
|
-
/**
|
|
169
|
+
/**
|
|
170
|
+
* Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters
|
|
171
|
+
* of projection.
|
|
157
172
|
* @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.
|
|
158
173
|
* @param lowHigh optional receiver for output
|
|
159
|
-
* @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the
|
|
174
|
+
* @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the
|
|
175
|
+
* end of the ray.
|
|
160
176
|
*/
|
|
161
177
|
projectedParameterRange(ray, lowHigh) {
|
|
162
178
|
return PlaneAltitudeRangeContext_1.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
|
|
163
179
|
}
|
|
164
180
|
}
|
|
165
181
|
exports.CurveCollection = CurveCollection;
|
|
166
|
-
/**
|
|
182
|
+
/**
|
|
183
|
+
* Shared base class for use by both open and closed paths.
|
|
167
184
|
* - A `CurveChain` contains only curvePrimitives. No other paths, loops, or regions allowed.
|
|
168
|
-
* - A single entry in the chain can in fact contain multiple curve primitives if the entry itself is (for instance)
|
|
169
|
-
*
|
|
185
|
+
* - A single entry in the chain can in fact contain multiple curve primitives if the entry itself is (for instance)
|
|
186
|
+
* `CurveChainWithDistanceIndex`
|
|
187
|
+
* which presents itself (through method interface) as a CurvePrimitive with well defined mappings from fraction
|
|
188
|
+
* to xyz, but in fact does all the
|
|
170
189
|
* calculations over multiple primitives.
|
|
171
190
|
* - The specific derived classes are `Path` and `Loop`
|
|
172
191
|
* - `CurveChain` is an intermediate class. It is not instantiable on its own.
|
|
@@ -199,7 +218,8 @@ class CurveChain extends CurveCollection {
|
|
|
199
218
|
}
|
|
200
219
|
return undefined;
|
|
201
220
|
}
|
|
202
|
-
/**
|
|
221
|
+
/**
|
|
222
|
+
* Stroke the chain into a simple xyz array.
|
|
203
223
|
* @param options tolerance parameters controlling the stroking.
|
|
204
224
|
*/
|
|
205
225
|
getPackedStrokes(options) {
|
|
@@ -224,7 +244,8 @@ class CurveChain extends CurveCollection {
|
|
|
224
244
|
return strokes;
|
|
225
245
|
}
|
|
226
246
|
*/
|
|
227
|
-
/**
|
|
247
|
+
/**
|
|
248
|
+
* Add a child curve.
|
|
228
249
|
* * Returns false if the given child is not a CurvePrimitive.
|
|
229
250
|
*/
|
|
230
251
|
tryAddChild(child) {
|
|
@@ -240,7 +261,7 @@ class CurveChain extends CurveCollection {
|
|
|
240
261
|
return this._curves[i];
|
|
241
262
|
return undefined;
|
|
242
263
|
}
|
|
243
|
-
/**
|
|
264
|
+
/** Invoke `curve.extendRange(range, transform)` for each child */
|
|
244
265
|
extendRange(range, transform) {
|
|
245
266
|
for (const curve of this._curves)
|
|
246
267
|
curve.extendRange(range, transform);
|
|
@@ -254,7 +275,8 @@ class CurveChain extends CurveCollection {
|
|
|
254
275
|
curve.reverseInPlace();
|
|
255
276
|
this._curves.reverse();
|
|
256
277
|
}
|
|
257
|
-
/**
|
|
278
|
+
/**
|
|
279
|
+
* Return the index where target is found in the array of children
|
|
258
280
|
* @param alsoSearchProxies whether to also check proxy curves of the children
|
|
259
281
|
*/
|
|
260
282
|
childIndex(target, alsoSearchProxies) {
|
|
@@ -273,8 +295,7 @@ class CurveChain extends CurveCollection {
|
|
|
273
295
|
}
|
|
274
296
|
return undefined;
|
|
275
297
|
}
|
|
276
|
-
/** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive.
|
|
277
|
-
*/
|
|
298
|
+
/** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive. */
|
|
278
299
|
primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(index, fraction, cyclic = false, result) {
|
|
279
300
|
const primitive = this.cyclicCurvePrimitive(index, cyclic);
|
|
280
301
|
if (primitive) {
|
|
@@ -290,8 +311,10 @@ exports.CurveChain = CurveChain;
|
|
|
290
311
|
* @public
|
|
291
312
|
*/
|
|
292
313
|
class BagOfCurves extends CurveCollection {
|
|
293
|
-
/**
|
|
294
|
-
isSameGeometryClass(other) {
|
|
314
|
+
/** Test if `other` is an instance of `BagOfCurves` */
|
|
315
|
+
isSameGeometryClass(other) {
|
|
316
|
+
return other instanceof BagOfCurves;
|
|
317
|
+
}
|
|
295
318
|
/** Construct an empty `BagOfCurves` */
|
|
296
319
|
constructor() {
|
|
297
320
|
super();
|
|
@@ -300,8 +323,10 @@ class BagOfCurves extends CurveCollection {
|
|
|
300
323
|
this._children = [];
|
|
301
324
|
}
|
|
302
325
|
/** Return the (reference to) array of children */
|
|
303
|
-
get children() {
|
|
304
|
-
|
|
326
|
+
get children() {
|
|
327
|
+
return this._children;
|
|
328
|
+
}
|
|
329
|
+
/** Create with given curves. */
|
|
305
330
|
static create(...data) {
|
|
306
331
|
const result = new BagOfCurves();
|
|
307
332
|
for (const child of data) {
|
|
@@ -310,8 +335,10 @@ class BagOfCurves extends CurveCollection {
|
|
|
310
335
|
return result;
|
|
311
336
|
}
|
|
312
337
|
/** Return the boundary type (0) of a corresponding MicroStation CurveVector */
|
|
313
|
-
dgnBoundaryType() {
|
|
314
|
-
|
|
338
|
+
dgnBoundaryType() {
|
|
339
|
+
return 0;
|
|
340
|
+
}
|
|
341
|
+
/** Invoke `processor.announceBagOfCurves(this, indexInParent);` */
|
|
315
342
|
announceToCurveProcessor(processor, indexInParent = -1) {
|
|
316
343
|
return processor.announceBagOfCurves(this, indexInParent);
|
|
317
344
|
}
|
|
@@ -335,7 +362,9 @@ class BagOfCurves extends CurveCollection {
|
|
|
335
362
|
return clone;
|
|
336
363
|
}
|
|
337
364
|
/** Return an empty `BagOfCurves` */
|
|
338
|
-
cloneEmptyPeer() {
|
|
365
|
+
cloneEmptyPeer() {
|
|
366
|
+
return new BagOfCurves();
|
|
367
|
+
}
|
|
339
368
|
/** Add a child */
|
|
340
369
|
tryAddChild(child) {
|
|
341
370
|
if (child)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurveCollection.js","sourceRoot":"","sources":["../../../src/curve/CurveCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { AnyCurve } from \"./CurveChain\";\r\nimport { CurveLocationDetail } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"./CurveProcessor\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { CloneCurvesContext } from \"./internalContexts/CloneCurvesContext\";\r\nimport { CloneWithExpandedLineStrings } from \"./internalContexts/CloneWithExpandedLineStrings\";\r\nimport { CountLinearPartsSearchContext } from \"./internalContexts/CountLinearPartsSearchContext\";\r\nimport { GapSearchContext } from \"./internalContexts/GapSearchContext\";\r\nimport { PlaneAltitudeRangeContext } from \"./internalContexts/PlaneAltitudeRangeContext\";\r\nimport { SumLengthsContext } from \"./internalContexts/SumLengthsContext\";\r\nimport { TransformInPlaceContext } from \"./internalContexts/TransformInPlaceContext\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { ProxyCurve } from \"./ProxyCurve\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/** Describes the concrete type of a [[CurveCollection]]. Each type name maps to a specific subclass and can be used in conditional statements for type-switching.\r\n * - \"loop\" => [[Loop]]\r\n * - \"path\" => [[Path]]\r\n * - \"unionRegion\" => [[UnionRegion]]\r\n * - \"parityRegion\" => [[ParityRegion]]\r\n * - \"bagOfCurves\" => [[BagOfCurves]]\r\n * @public\r\n */\r\nexport type CurveCollectionType = \"loop\" | \"path\" | \"unionRegion\" | \"parityRegion\" | \"bagOfCurves\";\r\n\r\n/**\r\n * A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:\r\n * - `CurveChain` is a (non-instantiable) intermediate class for a sequence of `CurvePrimitive ` joining head-to-tail. The two instantiable forms of `CurveChain` are\r\n * - `Path` - A chain not required to close, and not enclosing a planar area\r\n * - `Loop` - A chain required to close from last to first so that a planar area is enclosed.\r\n * - `ParityRegion` -- a collection of coplanar `Loop`s, with \"in/out\" classification by parity rules\r\n * - `UnionRegion` -- a collection of coplanar `Loop`s, with \"in/out\" classification by union rules\r\n * - `BagOfCurves` -- a collection of `AnyCurve` with no implied structure.\r\n *\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveCollection extends GeometryQuery {\r\n /** String name for schema properties */\r\n public readonly geometryCategory = \"curveCollection\";\r\n /** Type discriminator. */\r\n public abstract readonly curveCollectionType: CurveCollectionType;\r\n\r\n /* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n /** Flag for inner loop status. Only used by `Loop`. */\r\n public isInner: boolean = false;\r\n /** Return the sum of the lengths of all contained curves. */\r\n public sumLengths(): number { return SumLengthsContext.sumLengths(this); }\r\n /** Return the closest point on the contained curves */\r\n public closestPoint(spacePoint: Point3d): CurveLocationDetail | undefined {\r\n let detailA: CurveLocationDetail | undefined;\r\n if (this.children !== undefined) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive) {\r\n const detailB = child.closestPoint(spacePoint, false);\r\n detailA = CurveLocationDetail.chooseSmallerA(detailA, detailB);\r\n } else if (child instanceof CurveCollection) {\r\n const detailB = child.closestPoint(spacePoint);\r\n detailA = CurveLocationDetail.chooseSmallerA(detailA, detailB);\r\n }\r\n }\r\n }\r\n return detailA;\r\n }\r\n\r\n /** return the max gap between adjacent primitives in Path and Loop collections.\r\n *\r\n * * In a Path, gaps are computed between consecutive primitives.\r\n * * In a Loop, gaps are computed between consecutive primitives and between last and first.\r\n * * gaps are NOT computed between consecutive CurvePrimitives in \"unstructured\" collections. The type is \"unstructured\" so gaps should not be semantically meaningful.\r\n */\r\n public maxGap(): number { return GapSearchContext.maxGap(this); }\r\n /** return true if the curve collection has any primitives other than LineSegment3d and LineString3d */\r\n public checkForNonLinearPrimitives(): boolean { return CountLinearPartsSearchContext.hasNonLinearPrimitives(this); }\r\n /** Apply transform recursively to children */\r\n public tryTransformInPlace(transform: Transform): boolean { return TransformInPlaceContext.tryTransformInPlace(this, transform); }\r\n /** Return a deep copy. */\r\n public override clone(): CurveCollection {\r\n return CloneCurvesContext.clone(this) as CurveCollection;\r\n }\r\n /** Create a deep copy of transformed curves. */\r\n public override cloneTransformed(transform: Transform): CurveCollection | undefined {\r\n return CloneCurvesContext.clone(this, transform);\r\n }\r\n /** Create a deep copy with all linestrings expanded to multiple LineSegment3d. */\r\n public cloneWithExpandedLineStrings(): CurveCollection {\r\n return CloneWithExpandedLineStrings.clone(this);\r\n }\r\n /** Recurse through children to collect CurvePrimitive's in flat array. */\r\n private collectCurvePrimitivesGo(results: CurvePrimitive[], smallestPossiblePrimitives: boolean, explodeLinestrings: boolean = false) {\r\n if (this.children) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n else if (child instanceof CurveCollection)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Return an array containing only the curve primitives.\r\n * @param collectorArray optional array to receive primitives. If present, new primitives are ADDED (without clearing the array.)\r\n * @param smallestPossiblePrimitives if false, CurvePrimitiveWithDistanceIndex returns only itself. If true, it recurses to its (otherwise hidden) children.\r\n */\r\n public collectCurvePrimitives(collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLineStrings: boolean = false): CurvePrimitive[] {\r\n const results: CurvePrimitive[] = collectorArray === undefined ? [] : collectorArray;\r\n this.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLineStrings);\r\n return results;\r\n }\r\n\r\n /** Return true for planar region types:\r\n * * `Loop`\r\n * * `ParityRegion`\r\n * * `UnionRegion`\r\n */\r\n public get isAnyRegionType(): boolean {\r\n return this.dgnBoundaryType() === 2 || this.dgnBoundaryType() === 5 || this.dgnBoundaryType() === 4;\r\n }\r\n /** Return true for a `Path`, i.e. a chain of curves joined head-to-tail\r\n */\r\n public get isOpenPath(): boolean {\r\n return this.dgnBoundaryType() === 1;\r\n }\r\n /** Return true for a single-loop planar region type, i.e. `Loop`.\r\n * * This is _not- a test for physical closure of a `Path`\r\n */\r\n public get isClosedPath(): boolean {\r\n return this.dgnBoundaryType() === 2;\r\n }\r\n /** Return a CurveCollection with the same structure but all curves replaced by strokes. */\r\n public abstract cloneStroked(options?: StrokeOptions): AnyCurve;\r\n\r\n /** Support method for ICurvePrimitive ... one line call to specific announce method . . */\r\n public abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void;\r\n /** clone an empty collection. */\r\n public abstract cloneEmptyPeer(): CurveCollection;\r\n /** Return the boundary type of a corresponding MicroStation CurveVector.\r\n * * Derived class must implement.\r\n */\r\n public abstract dgnBoundaryType(): number;\r\n /**\r\n * Try to add a child.\r\n * @param child child to add.\r\n * @return true if child is an acceptable type for this collection.\r\n */\r\n public abstract tryAddChild(child: AnyCurve | undefined): boolean;\r\n /** Return a child identified by by index */\r\n public abstract getChild(i: number): AnyCurve | undefined;\r\n /** Extend (increase) `rangeToExtend` as needed to include these curves (optionally transformed) */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const children = this.children;\r\n if (children) {\r\n for (const c of children) {\r\n c.extendRange(rangeToExtend, transform);\r\n }\r\n }\r\n }\r\n /**\r\n * * Find any curve primitive in the source.\r\n * * Evaluate it at a fraction (which by default is an interior fraction)\r\n * @param source containing `CurvePrimitive` or `CurveCollection`\r\n * @param fraction fraction to use in `curve.fractionToPoint(fraction)`\r\n */\r\n public static createCurveLocationDetailOnAnyCurvePrimitive(source: GeometryQuery | undefined, fraction: number = 0.5): CurveLocationDetail | undefined {\r\n if (!source)\r\n return undefined;\r\n if (source instanceof CurvePrimitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFraction(source, fraction);\r\n } else if (source instanceof CurveCollection && source.children !== undefined)\r\n for (const child of source.children) {\r\n const detail = this.createCurveLocationDetailOnAnyCurvePrimitive(child, fraction);\r\n if (detail)\r\n return detail;\r\n }\r\n return undefined;\r\n }\r\n /** Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n * @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.\r\n */\r\n public projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\r\n }\r\n}\r\n\r\n/** Shared base class for use by both open and closed paths.\r\n * - A `CurveChain` contains only curvePrimitives. No other paths, loops, or regions allowed.\r\n * - A single entry in the chain can in fact contain multiple curve primitives if the entry itself is (for instance) `CurveChainWithDistanceIndex`\r\n * which presents itself (through method interface) as a CurvePrimitive with well defined mappings from fraction to xyz, but in fact does all the\r\n * calculations over multiple primitives.\r\n * - The specific derived classes are `Path` and `Loop`\r\n * - `CurveChain` is an intermediate class. It is not instantiable on its own.\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveChain extends CurveCollection {\r\n /** The curve primitives in the chain. */\r\n protected _curves: CurvePrimitive[];\r\n protected constructor() { super(); this._curves = []; }\r\n /** Return the array of `CurvePrimitive` */\r\n public override get children(): CurvePrimitive[] {\r\n if (this._curves === undefined)\r\n this._curves = [];\r\n return this._curves;\r\n }\r\n /**\r\n * Return the `[index]` curve primitive, optionally using `modulo` to map`index` to the cyclic indexing.\r\n * * In particular, `-1` is the final curve.\r\n * @param index cyclic index\r\n */\r\n public cyclicCurvePrimitive(index: number, cyclic: boolean = true): CurvePrimitive | undefined {\r\n const n = this.children.length;\r\n if (n === 0)\r\n return undefined;\r\n /** Try simplest non-cyclic access first . . */\r\n if (index >= 0 && index < n)\r\n return this.children[index];\r\n if (cyclic) {\r\n const index2 = Geometry.modulo(index, n);\r\n return this.children[index2];\r\n }\r\n return undefined;\r\n }\r\n /** Stroke the chain into a simple xyz array.\r\n * @param options tolerance parameters controlling the stroking.\r\n */\r\n public getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined {\r\n const tree = this.cloneStroked(options);\r\n if (tree instanceof CurveChain) {\r\n const children = tree.children;\r\n if (children.length === 1) {\r\n const ls = children[0];\r\n if (ls instanceof LineString3d)\r\n return ls.packedPoints;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Return a structural clone, with CurvePrimitive objects stroked. */\r\n public abstract override cloneStroked(options?: StrokeOptions): AnyCurve;\r\n /* EDL 01/20 Path, Loop, CurveChainWithDistanceIndex all implement this.\r\n Reducing it to abstract.\r\n Hypothetically, a derived class in the wild might be depending on this.\r\n {\r\n const strokes = LineString3d.create();\r\n for (const curve of this.children)\r\n curve.emitStrokes(strokes, options);\r\n return strokes;\r\n }\r\n */\r\n /** add a child curve.\r\n * * Returns false if the given child is not a CurvePrimitive.\r\n */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child && child instanceof CurvePrimitive) {\r\n this._curves.push(child);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return a child by index */\r\n public getChild(i: number): CurvePrimitive | undefined {\r\n if (i < this._curves.length) return this._curves[i];\r\n return undefined;\r\n }\r\n /** invoke `curve.extendRange(range, transform)` for each child */\r\n public override extendRange(range: Range3d, transform?: Transform): void {\r\n for (const curve of this._curves)\r\n curve.extendRange(range, transform);\r\n }\r\n /**\r\n * Reverse each child curve (in place)\r\n * Reverse the order of the children in the CurveChain array.\r\n */\r\n public reverseChildrenInPlace() {\r\n for (const curve of this._curves)\r\n curve.reverseInPlace();\r\n this._curves.reverse();\r\n }\r\n /** Return the index where target is found in the array of children\r\n * @param alsoSearchProxies whether to also check proxy curves of the children\r\n */\r\n public childIndex(target: CurvePrimitive | undefined, alsoSearchProxies?: boolean): number | undefined {\r\n for (let i = 0; i < this._curves.length; i++){\r\n if (this._curves[i] === target)\r\n return i;\r\n }\r\n if (alsoSearchProxies ?? false) {\r\n for (let i = 0; i < this._curves.length; i++) {\r\n const childCurve = this._curves[i];\r\n if (childCurve instanceof ProxyCurve) {\r\n if (childCurve.proxyCurve === target)\r\n return i;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive.\r\n */\r\n public primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(index: number, fraction: number, cyclic: boolean = false, result?: CurveLocationDetail): CurveLocationDetail | undefined {\r\n const primitive = this.cyclicCurvePrimitive(index, cyclic);\r\n if (primitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFractionPointAndDerivative(primitive, fraction, result);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * * A `BagOfCurves` object is a collection of `AnyCurve` objects.\r\n * * A `BagOfCurves` has no implied properties such as being planar.\r\n * @public\r\n */\r\nexport class BagOfCurves extends CurveCollection {\r\n /** String name for schema properties */\r\n public readonly curveCollectionType = \"bagOfCurves\";\r\n\r\n /** test if `other` is an instance of `BagOfCurves` */\r\n public isSameGeometryClass(other: GeometryQuery): boolean { return other instanceof BagOfCurves; }\r\n /** Array of children.\r\n * * No restrictions on type.\r\n */\r\n protected _children: AnyCurve[];\r\n /** Construct an empty `BagOfCurves` */\r\n public constructor() { super(); this._children = []; }\r\n /** Return the (reference to) array of children */\r\n public override get children(): AnyCurve[] { return this._children; }\r\n /** create with given curves. */\r\n public static create(...data: AnyCurve[]): BagOfCurves {\r\n const result = new BagOfCurves();\r\n for (const child of data) {\r\n result.tryAddChild(child);\r\n }\r\n return result;\r\n }\r\n /** Return the boundary type (0) of a corresponding MicroStation CurveVector */\r\n public dgnBoundaryType(): number { return 0; }\r\n /** invoke `processor.announceBagOfCurves(this, indexInParent);` */\r\n public announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent: number = -1): void {\r\n return processor.announceBagOfCurves(this, indexInParent);\r\n }\r\n /** Clone all children in stroked form. */\r\n public cloneStroked(options?: StrokeOptions): BagOfCurves {\r\n const clone = new BagOfCurves();\r\n let child;\r\n for (child of this.children) {\r\n if (child instanceof CurvePrimitive) {\r\n const ls = LineString3d.create();\r\n child.emitStrokes(ls, options);\r\n if (ls)\r\n clone.children.push(ls);\r\n } else if (child instanceof CurveCollection) {\r\n const childStrokes = child.cloneStroked(options);\r\n if (childStrokes)\r\n clone.children.push(childStrokes);\r\n }\r\n }\r\n return clone;\r\n }\r\n /** Return an empty `BagOfCurves` */\r\n public cloneEmptyPeer(): BagOfCurves { return new BagOfCurves(); }\r\n /** Add a child */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child)\r\n this._children.push(child);\r\n return true;\r\n }\r\n /** Get a child by index */\r\n public getChild(i: number): AnyCurve | undefined {\r\n if (i < this._children.length)\r\n return this._children[i];\r\n return undefined;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBagOfCurves(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBagOfCurves(this);\r\n }\r\n}\r\n/**\r\n * * Options to control method `RegionOps.consolidateAdjacentPrimitives`\r\n * @public\r\n */\r\nexport class ConsolidateAdjacentCurvePrimitivesOptions {\r\n /** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */\r\n public consolidateLinearGeometry: boolean = true;\r\n /** True to consolidate contiguous arcs */\r\n public consolidateCompatibleArcs: boolean = true;\r\n /** Tolerance for collapsing identical points */\r\n public duplicatePointTolerance = Geometry.smallMetricDistance;\r\n /** Tolerance for removing interior colinear points. */\r\n public colinearPointTolerance = Geometry.smallMetricDistance;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CurveCollection.js","sourceRoot":"","sources":["../../../src/curve/CurveCollection.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../geometry3d/GrowableXYZArray\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { Transform } from \"../geometry3d/Transform\";\r\nimport { AnyCurve } from \"./CurveChain\";\r\nimport { CurveLocationDetail } from \"./CurveLocationDetail\";\r\nimport { CurvePrimitive } from \"./CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"./CurveProcessor\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { CloneCurvesContext } from \"./internalContexts/CloneCurvesContext\";\r\nimport { CloneWithExpandedLineStrings } from \"./internalContexts/CloneWithExpandedLineStrings\";\r\nimport { CountLinearPartsSearchContext } from \"./internalContexts/CountLinearPartsSearchContext\";\r\nimport { GapSearchContext } from \"./internalContexts/GapSearchContext\";\r\nimport { PlaneAltitudeRangeContext } from \"./internalContexts/PlaneAltitudeRangeContext\";\r\nimport { SumLengthsContext } from \"./internalContexts/SumLengthsContext\";\r\nimport { TransformInPlaceContext } from \"./internalContexts/TransformInPlaceContext\";\r\nimport { LineString3d } from \"./LineString3d\";\r\nimport { ProxyCurve } from \"./ProxyCurve\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * Describes the concrete type of a [[CurveCollection]]. Each type name maps to a specific subclass and can be\r\n * used in conditional statements for type-switching.\r\n * - \"loop\" => [[Loop]]\r\n * - \"path\" => [[Path]]\r\n * - \"unionRegion\" => [[UnionRegion]]\r\n * - \"parityRegion\" => [[ParityRegion]]\r\n * - \"bagOfCurves\" => [[BagOfCurves]]\r\n * @public\r\n */\r\nexport type CurveCollectionType = \"loop\" | \"path\" | \"unionRegion\" | \"parityRegion\" | \"bagOfCurves\";\r\n\r\n/**\r\n * A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:\r\n * - `CurveChain` is a (non-instantiable) intermediate class for a sequence of `CurvePrimitive` joining head-to-tail.\r\n * The two instantiable forms of `CurveChain` are\r\n * - `Path` - A chain not required to close, and not enclosing a planar area\r\n * - `Loop` - A chain required to close from last to first so that a planar area is enclosed.\r\n * - `ParityRegion` -- a collection of coplanar `Loop`s, with \"in/out\" classification by parity rules\r\n * - `UnionRegion` -- a collection of coplanar `Loop`s, with \"in/out\" classification by union rules\r\n * - `BagOfCurves` -- a collection of `AnyCurve` with no implied structure.\r\n *\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveCollection extends GeometryQuery {\r\n /** String name for schema properties */\r\n public readonly geometryCategory = \"curveCollection\";\r\n /** Type discriminator. */\r\n public abstract readonly curveCollectionType: CurveCollectionType;\r\n /* eslint-disable @typescript-eslint/naming-convention, no-empty */\r\n /** Flag for inner loop status. Only used by `Loop`. */\r\n public isInner: boolean = false;\r\n /** Return the sum of the lengths of all contained curves. */\r\n public sumLengths(): number {\r\n return SumLengthsContext.sumLengths(this);\r\n }\r\n /** Return the closest point on the contained curves */\r\n public closestPoint(spacePoint: Point3d): CurveLocationDetail | undefined {\r\n let detailA: CurveLocationDetail | undefined;\r\n if (this.children !== undefined) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive) {\r\n const detailB = child.closestPoint(spacePoint, false);\r\n detailA = CurveLocationDetail.chooseSmallerA(detailA, detailB);\r\n } else if (child instanceof CurveCollection) {\r\n const detailB = child.closestPoint(spacePoint);\r\n detailA = CurveLocationDetail.chooseSmallerA(detailA, detailB);\r\n }\r\n }\r\n }\r\n return detailA;\r\n }\r\n /**\r\n * Return the max gap between adjacent primitives in Path and Loop collections.\r\n * * In a Path, gaps are computed between consecutive primitives.\r\n * * In a Loop, gaps are computed between consecutive primitives and between last and first.\r\n * * gaps are NOT computed between consecutive CurvePrimitives in \"unstructured\" collections. The type is\r\n * \"unstructured\" so gaps should not be semantically meaningful.\r\n */\r\n public maxGap(): number {\r\n return GapSearchContext.maxGap(this);\r\n }\r\n /** Return true if the curve collection has any primitives other than LineSegment3d and LineString3d */\r\n public checkForNonLinearPrimitives(): boolean {\r\n return CountLinearPartsSearchContext.hasNonLinearPrimitives(this);\r\n }\r\n /** Apply transform recursively to children */\r\n public tryTransformInPlace(transform: Transform): boolean {\r\n return TransformInPlaceContext.tryTransformInPlace(this, transform);\r\n }\r\n /** Return a deep copy. */\r\n public override clone(): CurveCollection {\r\n return CloneCurvesContext.clone(this) as CurveCollection;\r\n }\r\n /** Create a deep copy of transformed curves. */\r\n public override cloneTransformed(transform: Transform): CurveCollection | undefined {\r\n return CloneCurvesContext.clone(this, transform);\r\n }\r\n /** Create a deep copy with all linestrings expanded to multiple LineSegment3d. */\r\n public cloneWithExpandedLineStrings(): CurveCollection {\r\n return CloneWithExpandedLineStrings.clone(this);\r\n }\r\n /** Recurse through children to collect CurvePrimitive's in flat array. */\r\n private collectCurvePrimitivesGo(\r\n results: CurvePrimitive[], smallestPossiblePrimitives: boolean, explodeLinestrings: boolean = false\r\n ): void {\r\n if (this.children) {\r\n for (const child of this.children) {\r\n if (child instanceof CurvePrimitive)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n else if (child instanceof CurveCollection)\r\n child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);\r\n }\r\n }\r\n }\r\n /**\r\n * Return an array containing only the curve primitives.\r\n * @param collectorArray optional array to receive primitives. If present, new primitives are ADDED (without\r\n * clearing the array.)\r\n * @param smallestPossiblePrimitives if false, CurvePrimitiveWithDistanceIndex returns only itself. If true,\r\n * it recurses to its (otherwise hidden) children.\r\n */\r\n public collectCurvePrimitives(\r\n collectorArray?: CurvePrimitive[], smallestPossiblePrimitives: boolean = false, explodeLineStrings: boolean = false\r\n ): CurvePrimitive[] {\r\n const results: CurvePrimitive[] = collectorArray === undefined ? [] : collectorArray;\r\n this.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLineStrings);\r\n return results;\r\n }\r\n /**\r\n * Return true for planar region types:\r\n * * `Loop`\r\n * * `ParityRegion`\r\n * * `UnionRegion`\r\n */\r\n public get isAnyRegionType(): boolean {\r\n return this.dgnBoundaryType() === 2 || this.dgnBoundaryType() === 5 || this.dgnBoundaryType() === 4;\r\n }\r\n /** Return true for a `Path`, i.e. a chain of curves joined head-to-tail */\r\n public get isOpenPath(): boolean {\r\n return this.dgnBoundaryType() === 1;\r\n }\r\n /**\r\n * Return true for a single-loop planar region type, i.e. `Loop`.\r\n * * This is _not- a test for physical closure of a `Path`\r\n */\r\n public get isClosedPath(): boolean {\r\n return this.dgnBoundaryType() === 2;\r\n }\r\n /** Return a CurveCollection with the same structure but all curves replaced by strokes. */\r\n public abstract cloneStroked(options?: StrokeOptions): AnyCurve;\r\n /** Support method for ICurvePrimitive ... one line call to specific announce method . . */\r\n public abstract announceToCurveProcessor(processor: RecursiveCurveProcessor): void;\r\n /** Clone an empty collection. */\r\n public abstract cloneEmptyPeer(): CurveCollection;\r\n /**\r\n * Return the boundary type of a corresponding MicroStation CurveVector.\r\n * * Derived class must implement.\r\n */\r\n public abstract dgnBoundaryType(): number;\r\n /**\r\n * Try to add a child.\r\n * @param child child to add.\r\n * @return true if child is an acceptable type for this collection.\r\n */\r\n public abstract tryAddChild(child: AnyCurve | undefined): boolean;\r\n /** Return a child identified by by index */\r\n public abstract getChild(i: number): AnyCurve | undefined;\r\n /** Extend (increase) `rangeToExtend` as needed to include these curves (optionally transformed) */\r\n public extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const children = this.children;\r\n if (children) {\r\n for (const c of children) {\r\n c.extendRange(rangeToExtend, transform);\r\n }\r\n }\r\n }\r\n /**\r\n * * Find any curve primitive in the source.\r\n * * Evaluate it at a fraction (which by default is an interior fraction)\r\n * @param source containing `CurvePrimitive` or `CurveCollection`\r\n * @param fraction fraction to use in `curve.fractionToPoint(fraction)`\r\n */\r\n public static createCurveLocationDetailOnAnyCurvePrimitive(\r\n source: GeometryQuery | undefined, fraction: number = 0.5\r\n ): CurveLocationDetail | undefined {\r\n if (!source)\r\n return undefined;\r\n if (source instanceof CurvePrimitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFraction(source, fraction);\r\n } else if (source instanceof CurveCollection && source.children !== undefined)\r\n for (const child of source.children) {\r\n const detail = this.createCurveLocationDetailOnAnyCurvePrimitive(child, fraction);\r\n if (detail)\r\n return detail;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters\r\n * of projection.\r\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the\r\n * end of the ray.\r\n */\r\n public projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\r\n }\r\n}\r\n\r\n/**\r\n * Shared base class for use by both open and closed paths.\r\n * - A `CurveChain` contains only curvePrimitives. No other paths, loops, or regions allowed.\r\n * - A single entry in the chain can in fact contain multiple curve primitives if the entry itself is (for instance)\r\n * `CurveChainWithDistanceIndex`\r\n * which presents itself (through method interface) as a CurvePrimitive with well defined mappings from fraction\r\n * to xyz, but in fact does all the\r\n * calculations over multiple primitives.\r\n * - The specific derived classes are `Path` and `Loop`\r\n * - `CurveChain` is an intermediate class. It is not instantiable on its own.\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport abstract class CurveChain extends CurveCollection {\r\n /** The curve primitives in the chain. */\r\n protected _curves: CurvePrimitive[];\r\n protected constructor() { super(); this._curves = []; }\r\n /** Return the array of `CurvePrimitive` */\r\n public override get children(): CurvePrimitive[] {\r\n if (this._curves === undefined)\r\n this._curves = [];\r\n return this._curves;\r\n }\r\n /**\r\n * Return the `[index]` curve primitive, optionally using `modulo` to map`index` to the cyclic indexing.\r\n * * In particular, `-1` is the final curve.\r\n * @param index cyclic index\r\n */\r\n public cyclicCurvePrimitive(index: number, cyclic: boolean = true): CurvePrimitive | undefined {\r\n const n = this.children.length;\r\n if (n === 0)\r\n return undefined;\r\n /** Try simplest non-cyclic access first . . */\r\n if (index >= 0 && index < n)\r\n return this.children[index];\r\n if (cyclic) {\r\n const index2 = Geometry.modulo(index, n);\r\n return this.children[index2];\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Stroke the chain into a simple xyz array.\r\n * @param options tolerance parameters controlling the stroking.\r\n */\r\n public getPackedStrokes(options?: StrokeOptions): GrowableXYZArray | undefined {\r\n const tree = this.cloneStroked(options);\r\n if (tree instanceof CurveChain) {\r\n const children = tree.children;\r\n if (children.length === 1) {\r\n const ls = children[0];\r\n if (ls instanceof LineString3d)\r\n return ls.packedPoints;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Return a structural clone, with CurvePrimitive objects stroked. */\r\n public abstract override cloneStroked(options?: StrokeOptions): AnyCurve;\r\n /* EDL 01/20 Path, Loop, CurveChainWithDistanceIndex all implement this.\r\n Reducing it to abstract.\r\n Hypothetically, a derived class in the wild might be depending on this.\r\n {\r\n const strokes = LineString3d.create();\r\n for (const curve of this.children)\r\n curve.emitStrokes(strokes, options);\r\n return strokes;\r\n }\r\n */\r\n /**\r\n * Add a child curve.\r\n * * Returns false if the given child is not a CurvePrimitive.\r\n */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child && child instanceof CurvePrimitive) {\r\n this._curves.push(child);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return a child by index */\r\n public getChild(i: number): CurvePrimitive | undefined {\r\n if (i < this._curves.length) return this._curves[i];\r\n return undefined;\r\n }\r\n /** Invoke `curve.extendRange(range, transform)` for each child */\r\n public override extendRange(range: Range3d, transform?: Transform): void {\r\n for (const curve of this._curves)\r\n curve.extendRange(range, transform);\r\n }\r\n /**\r\n * Reverse each child curve (in place)\r\n * Reverse the order of the children in the CurveChain array.\r\n */\r\n public reverseChildrenInPlace() {\r\n for (const curve of this._curves)\r\n curve.reverseInPlace();\r\n this._curves.reverse();\r\n }\r\n /**\r\n * Return the index where target is found in the array of children\r\n * @param alsoSearchProxies whether to also check proxy curves of the children\r\n */\r\n public childIndex(target: CurvePrimitive | undefined, alsoSearchProxies?: boolean): number | undefined {\r\n for (let i = 0; i < this._curves.length; i++) {\r\n if (this._curves[i] === target)\r\n return i;\r\n }\r\n if (alsoSearchProxies ?? false) {\r\n for (let i = 0; i < this._curves.length; i++) {\r\n const childCurve = this._curves[i];\r\n if (childCurve instanceof ProxyCurve) {\r\n if (childCurve.proxyCurve === target)\r\n return i;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n /** Evaluate an indexed curve at a fraction. Return as a CurveLocationDetail that indicates the primitive. */\r\n public primitiveIndexAndFractionToCurveLocationDetailPointAndDerivative(\r\n index: number, fraction: number, cyclic: boolean = false, result?: CurveLocationDetail\r\n ): CurveLocationDetail | undefined {\r\n const primitive = this.cyclicCurvePrimitive(index, cyclic);\r\n if (primitive) {\r\n return CurveLocationDetail.createCurveEvaluatedFractionPointAndDerivative(primitive, fraction, result);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * * A `BagOfCurves` object is a collection of `AnyCurve` objects.\r\n * * A `BagOfCurves` has no implied properties such as being planar.\r\n * @public\r\n */\r\nexport class BagOfCurves extends CurveCollection {\r\n /** String name for schema properties */\r\n public readonly curveCollectionType = \"bagOfCurves\";\r\n /** Test if `other` is an instance of `BagOfCurves` */\r\n public isSameGeometryClass(other: GeometryQuery): boolean {\r\n return other instanceof BagOfCurves;\r\n }\r\n /**\r\n * Array of children.\r\n * * No restrictions on type.\r\n */\r\n protected _children: AnyCurve[];\r\n /** Construct an empty `BagOfCurves` */\r\n public constructor() { super(); this._children = []; }\r\n /** Return the (reference to) array of children */\r\n public override get children(): AnyCurve[] {\r\n return this._children;\r\n }\r\n /** Create with given curves. */\r\n public static create(...data: AnyCurve[]): BagOfCurves {\r\n const result = new BagOfCurves();\r\n for (const child of data) {\r\n result.tryAddChild(child);\r\n }\r\n return result;\r\n }\r\n /** Return the boundary type (0) of a corresponding MicroStation CurveVector */\r\n public dgnBoundaryType(): number {\r\n return 0;\r\n }\r\n /** Invoke `processor.announceBagOfCurves(this, indexInParent);` */\r\n public announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent: number = -1): void {\r\n return processor.announceBagOfCurves(this, indexInParent);\r\n }\r\n /** Clone all children in stroked form. */\r\n public cloneStroked(options?: StrokeOptions): BagOfCurves {\r\n const clone = new BagOfCurves();\r\n let child;\r\n for (child of this.children) {\r\n if (child instanceof CurvePrimitive) {\r\n const ls = LineString3d.create();\r\n child.emitStrokes(ls, options);\r\n if (ls)\r\n clone.children.push(ls);\r\n } else if (child instanceof CurveCollection) {\r\n const childStrokes = child.cloneStroked(options);\r\n if (childStrokes)\r\n clone.children.push(childStrokes);\r\n }\r\n }\r\n return clone;\r\n }\r\n /** Return an empty `BagOfCurves` */\r\n public cloneEmptyPeer(): BagOfCurves {\r\n return new BagOfCurves();\r\n }\r\n /** Add a child */\r\n public tryAddChild(child: AnyCurve | undefined): boolean {\r\n if (child)\r\n this._children.push(child);\r\n return true;\r\n }\r\n /** Get a child by index */\r\n public getChild(i: number): AnyCurve | undefined {\r\n if (i < this._children.length)\r\n return this._children[i];\r\n return undefined;\r\n }\r\n /** Second step of double dispatch: call `handler.handleBagOfCurves(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleBagOfCurves(this);\r\n }\r\n}\r\n\r\n/**\r\n * * Options to control method `RegionOps.consolidateAdjacentPrimitives`\r\n * @public\r\n */\r\nexport class ConsolidateAdjacentCurvePrimitivesOptions {\r\n /** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */\r\n public consolidateLinearGeometry: boolean = true;\r\n /** True to consolidate contiguous arcs */\r\n public consolidateCompatibleArcs: boolean = true;\r\n /** Tolerance for collapsing identical points */\r\n public duplicatePointTolerance = Geometry.smallMetricDistance;\r\n /** Tolerance for removing interior colinear points. */\r\n public colinearPointTolerance = Geometry.smallMetricDistance;\r\n}\r\n"]}
|
|
@@ -38,7 +38,7 @@ export declare enum CurveSearchStatus {
|
|
|
38
38
|
export declare class CurveLocationDetail {
|
|
39
39
|
/** The curve being evaluated */
|
|
40
40
|
curve?: CurvePrimitive;
|
|
41
|
-
/**
|
|
41
|
+
/** Optional ray */
|
|
42
42
|
ray?: Ray3d;
|
|
43
43
|
/** The fractional position along the curve */
|
|
44
44
|
fraction: number;
|
|
@@ -48,43 +48,49 @@ export declare class CurveLocationDetail {
|
|
|
48
48
|
point: Point3d;
|
|
49
49
|
/** A vector (e.g. tangent vector) in context */
|
|
50
50
|
vectorInCurveLocationDetail?: Vector3d;
|
|
51
|
-
/** A context-specific numeric value.
|
|
51
|
+
/** A context-specific numeric value. (e.g. a distance) */
|
|
52
52
|
a: number;
|
|
53
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Optional CurveLocationDetail with more detail of location. For instance, a detail for fractional position within
|
|
54
55
|
* a CurveChainWithDistanceIndex returns fraction and distance along the chain as its primary data and
|
|
55
56
|
* further detail of the particular curve within the chain in the childDetail.
|
|
56
57
|
*/
|
|
57
58
|
childDetail?: CurveLocationDetail;
|
|
58
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* A status indicator for certain searches.
|
|
59
61
|
* * e.g. CurvePrimitive.moveSignedDistanceFromFraction
|
|
60
62
|
*/
|
|
61
63
|
curveSearchStatus?: CurveSearchStatus;
|
|
62
|
-
/** (
|
|
64
|
+
/** (Optional) second fraction, e.g. end of interval of coincident curves */
|
|
63
65
|
fraction1?: number;
|
|
64
|
-
/** (
|
|
66
|
+
/** (Optional) second point, e.g. end of interval of coincident curves */
|
|
65
67
|
point1?: Point3d;
|
|
66
68
|
/** A context-specific additional point */
|
|
67
69
|
pointQ: Point3d;
|
|
70
|
+
/** constructor */
|
|
68
71
|
constructor();
|
|
69
72
|
/** Set the (optional) intervalRole field */
|
|
70
73
|
setIntervalRole(value: CurveIntervalRole): void;
|
|
71
74
|
/** Set the (optional) fraction1 and point1, using direct assignment (capture!) to point1 */
|
|
72
75
|
captureFraction1Point1(fraction1: number, point1: Point3d): void;
|
|
73
|
-
/**
|
|
76
|
+
/** Test if this pair has fraction1 defined */
|
|
74
77
|
get hasFraction1(): boolean;
|
|
75
|
-
/**
|
|
78
|
+
/** Test if this is an isolated point. This is true if intervalRole is any of (undefined, isolated, isolatedAtVertex) */
|
|
76
79
|
get isIsolated(): boolean;
|
|
77
|
-
/**
|
|
80
|
+
/** Return the fraction delta. (0 if no fraction1) */
|
|
78
81
|
get fractionDelta(): number;
|
|
79
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* If (fraction1, point1) are defined, make them the primary (and only) data.
|
|
80
84
|
* * No action if undefined.
|
|
81
85
|
*/
|
|
82
86
|
collapseToEnd(): void;
|
|
83
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Make (fraction, point) the primary (and only) data.
|
|
84
89
|
* * No action if undefined.
|
|
85
90
|
*/
|
|
86
91
|
collapseToStart(): void;
|
|
87
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* Return a complete copy, WITH CAVEATS . . .
|
|
88
94
|
* * curve member is copied as a reference.
|
|
89
95
|
* * point and vector members are cloned.
|
|
90
96
|
*/
|
|
@@ -108,41 +114,30 @@ export declare class CurveLocationDetail {
|
|
|
108
114
|
* @param a (optional) numeric value to install.
|
|
109
115
|
*/
|
|
110
116
|
setFR(fraction: number, ray: Ray3d, a?: number): void;
|
|
111
|
-
/** Set the CurvePrimitive pointer, leaving all other properties untouched.
|
|
112
|
-
*/
|
|
117
|
+
/** Set the CurvePrimitive pointer, leaving all other properties untouched. */
|
|
113
118
|
setCurve(curve: CurvePrimitive): void;
|
|
114
119
|
/** record the distance from the CurveLocationDetail's point to the parameter point. */
|
|
115
120
|
setDistanceTo(point: Point3d): void;
|
|
116
|
-
/**
|
|
117
|
-
*/
|
|
121
|
+
/** Create with a CurvePrimitive pointer but no coordinate data. */
|
|
118
122
|
static create(curve?: CurvePrimitive, result?: CurveLocationDetail): CurveLocationDetail;
|
|
119
|
-
/**
|
|
120
|
-
*/
|
|
123
|
+
/** Create with CurvePrimitive pointer, fraction, and point coordinates. */
|
|
121
124
|
static createCurveFractionPoint(curve: CurvePrimitive | undefined, fraction: number, point: Point3d, result?: CurveLocationDetail): CurveLocationDetail;
|
|
122
|
-
/**
|
|
123
|
-
* Create a new detail with only ray, fraction, and point.
|
|
124
|
-
*/
|
|
125
|
+
/** Create a new detail with only ray, fraction, and point. */
|
|
125
126
|
static createRayFractionPoint(ray: Ray3d, fraction: number, point: Point3d, result?: CurveLocationDetail): CurveLocationDetail;
|
|
126
|
-
/**
|
|
127
|
-
*/
|
|
127
|
+
/** Create with CurvePrimitive pointer, fraction, and point coordinates */
|
|
128
128
|
static createCurveFractionPointDistanceCurveSearchStatus(curve: CurvePrimitive | undefined, fraction: number, point: Point3d, distance: number, status: CurveSearchStatus, result?: CurveLocationDetail): CurveLocationDetail;
|
|
129
|
-
/**
|
|
130
|
-
* *
|
|
131
|
-
*/
|
|
129
|
+
/** Create with curveSearchStatus affected by allowExtension. */
|
|
132
130
|
static createConditionalMoveSignedDistance(allowExtension: boolean, curve: CurvePrimitive, startFraction: number, endFraction: number, requestedSignedDistance: number, result?: CurveLocationDetail): CurveLocationDetail;
|
|
133
|
-
/**
|
|
134
|
-
*/
|
|
131
|
+
/** Create with CurvePrimitive pointer and fraction for evaluation. */
|
|
135
132
|
static createCurveEvaluatedFraction(curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail): CurveLocationDetail;
|
|
136
|
-
/**
|
|
137
|
-
*/
|
|
133
|
+
/** Create with CurvePrimitive pointer and fraction for evaluation. */
|
|
138
134
|
static createCurveEvaluatedFractionPointAndDerivative(curve: CurvePrimitive, fraction: number, result?: CurveLocationDetail): CurveLocationDetail;
|
|
139
|
-
/**
|
|
140
|
-
*/
|
|
135
|
+
/** Create with CurvePrimitive pointer and 2 fractions for evaluation. */
|
|
141
136
|
static createCurveEvaluatedFractionFraction(curve: CurvePrimitive, fraction0: number, fraction1: number, result?: CurveLocationDetail): CurveLocationDetail;
|
|
142
|
-
/**
|
|
143
|
-
*/
|
|
137
|
+
/** Create with CurvePrimitive pointer, fraction, and point coordinates. */
|
|
144
138
|
static createCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number, result?: CurveLocationDetail): CurveLocationDetail;
|
|
145
|
-
/**
|
|
139
|
+
/**
|
|
140
|
+
* Update or create if closer than current contents.
|
|
146
141
|
* @param curve candidate curve
|
|
147
142
|
* @param fraction candidate fraction
|
|
148
143
|
* @param point candidate point
|
|
@@ -151,12 +146,12 @@ export declare class CurveLocationDetail {
|
|
|
151
146
|
*/
|
|
152
147
|
updateIfCloserCurveFractionPointDistance(curve: CurvePrimitive, fraction: number, point: Point3d, a: number): boolean;
|
|
153
148
|
/**
|
|
154
|
-
*
|
|
149
|
+
* Exchange the (fraction,fraction1) and (point, point1) pairs.
|
|
155
150
|
* * (Skip each swap if its "1" value is undefined)
|
|
156
151
|
*/
|
|
157
152
|
swapFractionsAndPoints(): void;
|
|
158
153
|
/**
|
|
159
|
-
*
|
|
154
|
+
* Return the fraction where f falls between fraction and fraction1.
|
|
160
155
|
* * ASSUME fraction1 defined
|
|
161
156
|
*/
|
|
162
157
|
inverseInterpolateFraction(f: number, defaultFraction?: number): number;
|
|
@@ -167,7 +162,8 @@ export declare class CurveLocationDetail {
|
|
|
167
162
|
*/
|
|
168
163
|
static chooseSmallerA(detailA: CurveLocationDetail | undefined, detailB: CurveLocationDetail | undefined): CurveLocationDetail | undefined;
|
|
169
164
|
}
|
|
170
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Enumeration of configurations for intersections and min/max distance-between-curve
|
|
171
167
|
* @public
|
|
172
168
|
*/
|
|
173
169
|
export declare enum CurveCurveApproachType {
|
|
@@ -180,7 +176,8 @@ export declare enum CurveCurveApproachType {
|
|
|
180
176
|
/** Completely parallel geometry. */
|
|
181
177
|
ParallelGeometry = 3
|
|
182
178
|
}
|
|
183
|
-
/**
|
|
179
|
+
/**
|
|
180
|
+
* A pair of CurveLocationDetail.
|
|
184
181
|
* @public
|
|
185
182
|
*/
|
|
186
183
|
export declare class CurveLocationDetailPair {
|
|
@@ -188,14 +185,16 @@ export declare class CurveLocationDetailPair {
|
|
|
188
185
|
detailA: CurveLocationDetail;
|
|
189
186
|
/** The second of the two details ... */
|
|
190
187
|
detailB: CurveLocationDetail;
|
|
191
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* Enumeration of how the detail pairs relate.
|
|
192
190
|
* * This is set only by certain closeApproach calculations.
|
|
193
191
|
*/
|
|
194
192
|
approachType?: CurveCurveApproachType;
|
|
195
193
|
constructor(detailA?: CurveLocationDetail, detailB?: CurveLocationDetail);
|
|
196
194
|
/** Create a curve detail pair using references to two CurveLocationDetails */
|
|
197
195
|
static createCapture(detailA: CurveLocationDetail, detailB: CurveLocationDetail, result?: CurveLocationDetailPair): CurveLocationDetailPair;
|
|
198
|
-
/**
|
|
196
|
+
/**
|
|
197
|
+
* Create a curve detail pair using references to two CurveLocationDetails.
|
|
199
198
|
* * optionally install in reversed positions
|
|
200
199
|
*/
|
|
201
200
|
static createCaptureOptionalReverse(detailA: CurveLocationDetail, detailB: CurveLocationDetail, reversed: boolean, result?: CurveLocationDetailPair): CurveLocationDetailPair;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurveLocationDetail.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveLocationDetail.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B,+DAA+D;IAC/D,QAAQ,IAAI;IACZ,4CAA4C;IAC5C,gBAAgB,IAAI;IACpB,2CAA2C;IAC3C,aAAa,KAAK;IAClB,gDAAgD;IAChD,gBAAgB,KAAK;IACrB,qCAAqC;IACrC,WAAW,KAAK;CACjB;AACD;;;GAGG;AACH,oBAAY,iBAAiB;IAC3B,0CAA0C;IAC1C,KAAK,IAAA;IACL,iCAAiC;IACjC,OAAO,IAAI;IACX,4FAA4F;IAC5F,iBAAiB,IAAI;CACtB;
|
|
1
|
+
{"version":3,"file":"CurveLocationDetail.d.ts","sourceRoot":"","sources":["../../../src/curve/CurveLocationDetail.ts"],"names":[],"mappings":"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"}
|