@itwin/core-geometry 4.1.0-dev.4 → 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
|
@@ -21,11 +21,12 @@ const PolygonOffsetContext_1 = require("./internalContexts/PolygonOffsetContext"
|
|
|
21
21
|
const LineSegment3d_1 = require("./LineSegment3d");
|
|
22
22
|
const StrokeCountMap_1 = require("./Query/StrokeCountMap");
|
|
23
23
|
/* eslint-disable @typescript-eslint/naming-convention, no-empty */
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Starting with baseIndex and moving index by stepDirection:
|
|
26
|
+
* If the vector from baseIndex to baseIndex +1 crossed with vectorA can be normalized, accumulate it (scaled) to normal.
|
|
27
|
+
* Return when successful.
|
|
28
|
+
* (Do nothing if everything is parallel through limits of the array)
|
|
29
|
+
*/
|
|
29
30
|
function accumulateGoodUnitPerpendicular(points, vectorA, baseIndex, stepDirection, weight, normal, workVector) {
|
|
30
31
|
const n = points.length;
|
|
31
32
|
if (stepDirection > 0) {
|
|
@@ -53,43 +54,67 @@ function accumulateGoodUnitPerpendicular(points, vectorA, baseIndex, stepDirecti
|
|
|
53
54
|
return false;
|
|
54
55
|
}
|
|
55
56
|
/**
|
|
56
|
-
* * A LineString3d (sometimes called a PolyLine) is a sequence of xyz coordinates that are to be joined by line
|
|
57
|
-
*
|
|
57
|
+
* * A LineString3d (sometimes called a PolyLine) is a sequence of xyz coordinates that are to be joined by line
|
|
58
|
+
* segments.
|
|
59
|
+
* * The point coordinates are stored in a GrowableXYZArray, not as full point objects.
|
|
58
60
|
* * The parameterization of "fraction along" is
|
|
59
|
-
* * In a linestring with `N` segments (i.e. `N+1` points), each segment (regardless of physical length) occupies
|
|
61
|
+
* * In a linestring with `N` segments (i.e. `N+1` points), each segment (regardless of physical length) occupies
|
|
62
|
+
* the same fraction (1/N) of the 0-to-1 fraction space.
|
|
60
63
|
* * Within segment `i`, the fraction interval `i/N` to `(i+1)/N` is mapped proportionally to the segment
|
|
61
64
|
* * Note that this `fraction` is therefore NOT fraction of true distance along.
|
|
62
|
-
*
|
|
65
|
+
* * Use `moveSignedDistanceFromFraction` to do true-length evaluations.
|
|
63
66
|
* @public
|
|
64
67
|
*/
|
|
65
68
|
class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
66
69
|
/** test if `other` is an instance of `LineString3d` */
|
|
67
|
-
isSameGeometryClass(other) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
get isExtensibleFractionSpace() {
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
isSameGeometryClass(other) {
|
|
71
|
+
return other instanceof LineString3d;
|
|
72
|
+
}
|
|
73
|
+
/** A LineString3d extends along its first and final segments. */
|
|
74
|
+
get isExtensibleFractionSpace() {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
/** Return the points array (cloned). */
|
|
78
|
+
get points() {
|
|
79
|
+
return this._points.getPoint3dArray();
|
|
80
|
+
}
|
|
74
81
|
/** Return (reference to) point data in packed GrowableXYZArray. */
|
|
75
|
-
get packedPoints() {
|
|
76
|
-
|
|
82
|
+
get packedPoints() {
|
|
83
|
+
return this._points;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Return array of fraction parameters.
|
|
77
87
|
* * These Are only present during certain constructions such as faceting.
|
|
78
|
-
* * When present, these fractions are fractions of some other curve being stroked, and are NOT related to the
|
|
88
|
+
* * When present, these fractions are fractions of some other curve being stroked, and are NOT related to the
|
|
89
|
+
* linestring fraction parameters.
|
|
79
90
|
*/
|
|
80
|
-
get fractions() {
|
|
91
|
+
get fractions() {
|
|
92
|
+
return this._fractions;
|
|
93
|
+
}
|
|
81
94
|
/** Return the (optional) array of derivatives. These Are only present during certain constructions such as faceting. */
|
|
82
|
-
get packedDerivatives() {
|
|
95
|
+
get packedDerivatives() {
|
|
96
|
+
return this._derivatives;
|
|
97
|
+
}
|
|
83
98
|
/** Return the (optional) array of uv params. These Are only present during certain constructions such as faceting. */
|
|
84
|
-
get packedUVParams() {
|
|
99
|
+
get packedUVParams() {
|
|
100
|
+
return this._uvParams;
|
|
101
|
+
}
|
|
85
102
|
/** Return the (optional) array of surface normals. These Are only present during certain constructions such as faceting. */
|
|
86
|
-
get packedSurfaceNormals() {
|
|
103
|
+
get packedSurfaceNormals() {
|
|
104
|
+
return this._surfaceNormals;
|
|
105
|
+
}
|
|
87
106
|
/** Return the (optional) array of normal indices. These Are only present during certain constructions such as faceting. */
|
|
88
|
-
get normalIndices() {
|
|
107
|
+
get normalIndices() {
|
|
108
|
+
return this._normalIndices;
|
|
109
|
+
}
|
|
89
110
|
/** Return the (optional) array of param indices. These Are only present during certain constructions such as faceting. */
|
|
90
|
-
get paramIndices() {
|
|
111
|
+
get paramIndices() {
|
|
112
|
+
return this._uvIndices;
|
|
113
|
+
}
|
|
91
114
|
/** Return the (optional) array of point indices. These Are only present during certain constructions such as faceting. */
|
|
92
|
-
get pointIndices() {
|
|
115
|
+
get pointIndices() {
|
|
116
|
+
return this._pointIndices;
|
|
117
|
+
}
|
|
93
118
|
constructor(points) {
|
|
94
119
|
super();
|
|
95
120
|
/** String name for schema properties */
|
|
@@ -105,7 +130,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
105
130
|
c.tryTransformInPlace(transform);
|
|
106
131
|
return c;
|
|
107
132
|
}
|
|
108
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* Create a linestring, using flex length arg list and any typical combination of points such as
|
|
109
135
|
* Point3d, Point2d, `[1,2,3]', array of any of those, or GrowableXYZArray
|
|
110
136
|
*/
|
|
111
137
|
static create(...points) {
|
|
@@ -113,7 +139,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
113
139
|
result.addPoints(points);
|
|
114
140
|
return result;
|
|
115
141
|
}
|
|
116
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Create a linestring, capturing the given GrowableXYZArray as the points.
|
|
117
144
|
* Point3d, Point2d, `[1,2,3]', array of any of those, or GrowableXYZArray
|
|
118
145
|
*/
|
|
119
146
|
static createCapture(points) {
|
|
@@ -138,7 +165,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
138
165
|
}
|
|
139
166
|
return result;
|
|
140
167
|
}
|
|
141
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Add points to the linestring.
|
|
142
170
|
* Valid inputs are:
|
|
143
171
|
* * a Point2d
|
|
144
172
|
* * a point3d
|
|
@@ -290,9 +318,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
290
318
|
this._surfaceNormals = new GrowableXYZArray_1.GrowableXYZArray();
|
|
291
319
|
this._surfaceNormals.push(vector);
|
|
292
320
|
}
|
|
293
|
-
/**
|
|
294
|
-
* If the linestring is not already closed, add a closure point.
|
|
295
|
-
*/
|
|
321
|
+
/** If the linestring is not already closed, add a closure point. */
|
|
296
322
|
addClosurePoint() {
|
|
297
323
|
const distance = this._points.distanceIndexIndex(0, this._points.length - 1);
|
|
298
324
|
if (distance !== undefined && !Geometry_1.Geometry.isSameCoordinate(distance, 0))
|
|
@@ -306,7 +332,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
306
332
|
computeUVFromXYZTransform(transform) {
|
|
307
333
|
this._uvParams = GrowableXYArray_1.GrowableXYArray.createFromGrowableXYZArray(this._points, transform);
|
|
308
334
|
}
|
|
309
|
-
/**
|
|
335
|
+
/**
|
|
336
|
+
* Create the linestring for a rectangle parallel to the xy plane.
|
|
310
337
|
* * The z coordinate from `point0` is used for all points.
|
|
311
338
|
* * `ax` and `ay` are signed.
|
|
312
339
|
* * The point sequence is:
|
|
@@ -337,7 +364,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
337
364
|
* @param center center of the polygon.
|
|
338
365
|
* @param edgeCount number of edges.
|
|
339
366
|
* @param radius distance to vertex or edge (see `radiusToVertices`)
|
|
340
|
-
* @param radiusToVertices true if polygon is inscribed in circle (radius measured to vertices); false if polygon
|
|
367
|
+
* @param radiusToVertices true if polygon is inscribed in circle (radius measured to vertices); false if polygon
|
|
368
|
+
* is outside circle (radius to edges)
|
|
341
369
|
*/
|
|
342
370
|
static createRegularPolygonXY(center, edgeCount, radius, radiusToVertices = true) {
|
|
343
371
|
if (edgeCount < 3)
|
|
@@ -419,7 +447,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
419
447
|
retVal.setFrom(this);
|
|
420
448
|
return retVal;
|
|
421
449
|
}
|
|
422
|
-
/**
|
|
450
|
+
/**
|
|
451
|
+
* Set point coordinates from a json array, e.g. `[[1,2,3],[4,5,6] . . .]`
|
|
423
452
|
* * The `json` parameter must be an array.
|
|
424
453
|
* * Each member `i` of the array is converted to a point with `Point3d.fromJSON(json[i]`)
|
|
425
454
|
*/
|
|
@@ -444,7 +473,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
444
473
|
}
|
|
445
474
|
return value;
|
|
446
475
|
}
|
|
447
|
-
/**
|
|
476
|
+
/**
|
|
477
|
+
* Construct a new linestring.
|
|
448
478
|
* * See `LineString3d.setFromJSON ()` for remarks on `json` structure.
|
|
449
479
|
*/
|
|
450
480
|
static fromJSON(json) {
|
|
@@ -534,7 +564,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
534
564
|
}
|
|
535
565
|
/**
|
|
536
566
|
* Convert a global fraction to a segment index and local fraction.
|
|
537
|
-
* @param globalFraction a fraction f in [0,1] in the linestring parameterization, where the i_th segment
|
|
567
|
+
* @param globalFraction a fraction f in [0,1] in the linestring parameterization, where the i_th segment
|
|
568
|
+
* (0 <= i < N) is parameterized by i/N <= f <= (i+1)/N.
|
|
538
569
|
*/
|
|
539
570
|
globalFractionToSegmentIndexAndLocalFraction(globalFraction) {
|
|
540
571
|
const numSegment = this._points.length - 1;
|
|
@@ -598,7 +629,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
598
629
|
return Transform_1.Transform.createOriginAndMatrix(origin, matrix, result);
|
|
599
630
|
return Transform_1.Transform.createTranslation(origin, result);
|
|
600
631
|
}
|
|
601
|
-
/**
|
|
632
|
+
/** Evaluate the start point of the linestring. */
|
|
602
633
|
startPoint() {
|
|
603
634
|
if (this._points.length === 0)
|
|
604
635
|
return Point3dVector3d_1.Point3d.createZero();
|
|
@@ -610,8 +641,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
610
641
|
return this._points.getPoint3dAtUncheckedPointIndex(i, result);
|
|
611
642
|
return undefined;
|
|
612
643
|
}
|
|
613
|
-
/** If i and j are both valid indices, return the vector from point i to point j
|
|
614
|
-
*/
|
|
644
|
+
/** If i and j are both valid indices, return the vector from point i to point j */
|
|
615
645
|
vectorBetween(i, j, result) {
|
|
616
646
|
return this._points.vectorIndexIndex(i, j, result);
|
|
617
647
|
}
|
|
@@ -628,8 +658,10 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
628
658
|
return undefined;
|
|
629
659
|
}
|
|
630
660
|
/** Return the number of points in this linestring. */
|
|
631
|
-
numPoints() {
|
|
632
|
-
|
|
661
|
+
numPoints() {
|
|
662
|
+
return this._points.length;
|
|
663
|
+
}
|
|
664
|
+
/** Evaluate the end point of the linestring. */
|
|
633
665
|
endPoint() {
|
|
634
666
|
if (this._points.length === 0)
|
|
635
667
|
return Point3dVector3d_1.Point3d.createZero();
|
|
@@ -653,7 +685,9 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
653
685
|
return true;
|
|
654
686
|
}
|
|
655
687
|
/** Sum the lengths of segments within the linestring */
|
|
656
|
-
curveLength() {
|
|
688
|
+
curveLength() {
|
|
689
|
+
return this._points.sumLengths();
|
|
690
|
+
}
|
|
657
691
|
/** Sum the lengths of segments between fractional positions on a linestring. */
|
|
658
692
|
curveLengthBetweenFractions(fraction0, fraction1) {
|
|
659
693
|
const numSegments = this._points.length - 1;
|
|
@@ -752,10 +786,10 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
752
786
|
return CurveLocationDetail_1.CurveLocationDetail.createCurveFractionPointDistanceCurveSearchStatus(this, context.fraction0, context.point0, -context.distance0, context.distanceStatus(), result);
|
|
753
787
|
}
|
|
754
788
|
}
|
|
755
|
-
/**
|
|
789
|
+
/** Sum lengths of segments in the linestring. (This is a true length.) */
|
|
756
790
|
quickLength() { return this.curveLength(); }
|
|
757
791
|
/**
|
|
758
|
-
*
|
|
792
|
+
* Compute and normalize cross product among 3 points on the linestring.
|
|
759
793
|
* * "any" 3 points are acceptable -- no test for positive overall sense.
|
|
760
794
|
* * This is appropriate for polygon known to be convex.
|
|
761
795
|
* * use points spread at index step n/3, hopefully avoiding colinear points.
|
|
@@ -794,7 +828,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
794
828
|
if (!extend1 || i < lastIndex)
|
|
795
829
|
segmentFraction = 1.0;
|
|
796
830
|
}
|
|
797
|
-
this._points.getPoint3dAtUncheckedPointIndex(i - 1)
|
|
831
|
+
this._points.getPoint3dAtUncheckedPointIndex(i - 1)
|
|
832
|
+
.interpolate(segmentFraction, this._points.getPoint3dAtUncheckedPointIndex(i), result.pointQ);
|
|
798
833
|
d = result.pointQ.distance(spacePoint);
|
|
799
834
|
if (d < result.a) {
|
|
800
835
|
result.setFP(this.segmentIndexAndLocalFractionToGlobalFraction(i - 1, segmentFraction), result.pointQ, undefined, d);
|
|
@@ -808,8 +843,9 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
808
843
|
isInPlane(plane) {
|
|
809
844
|
return this._points.isCloseToPlane(plane, Geometry_1.Geometry.smallMetricDistance);
|
|
810
845
|
}
|
|
811
|
-
/**
|
|
812
|
-
*
|
|
846
|
+
/**
|
|
847
|
+
* Push a hit, fixing up the prior entry if needed.
|
|
848
|
+
* Return the incremented counter.
|
|
813
849
|
*/
|
|
814
850
|
static pushVertexHit(result, counter, cp, fraction, point) {
|
|
815
851
|
const detail = CurveLocationDetail_1.CurveLocationDetail.createCurveFractionPoint(cp, fraction, point);
|
|
@@ -826,7 +862,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
826
862
|
detail.setIntervalRole(CurveLocationDetail_1.CurveIntervalRole.intervalEnd);
|
|
827
863
|
}
|
|
828
864
|
}
|
|
829
|
-
/**
|
|
865
|
+
/**
|
|
866
|
+
* Find intersections with a plane.
|
|
830
867
|
* Intersections within segments are recorded as CurveIntervalRole.isolated
|
|
831
868
|
* Intersections at isolated "on" vertex are recoded as CurveIntervalRole.isolatedAtVertex.
|
|
832
869
|
*/
|
|
@@ -863,7 +900,9 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
863
900
|
return result.length - initialLength;
|
|
864
901
|
}
|
|
865
902
|
/** Extend `rangeToExtend` to include all points of this linestring. */
|
|
866
|
-
extendRange(rangeToExtend, transform) {
|
|
903
|
+
extendRange(rangeToExtend, transform) {
|
|
904
|
+
this._points.extendRange(rangeToExtend, transform);
|
|
905
|
+
}
|
|
867
906
|
/** Test if each point of this linestring isAlmostEqual with corresponding point in `other`. */
|
|
868
907
|
isAlmostEqual(other) {
|
|
869
908
|
if (!(other instanceof LineString3d))
|
|
@@ -872,7 +911,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
872
911
|
return false;
|
|
873
912
|
return true;
|
|
874
913
|
}
|
|
875
|
-
/**
|
|
914
|
+
/**
|
|
915
|
+
* Append (clone of) one point.
|
|
876
916
|
* * BUT ... skip if duplicates the tail of prior points.
|
|
877
917
|
* * if fraction is given, "duplicate" considers both point and fraction.
|
|
878
918
|
*/
|
|
@@ -892,8 +932,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
892
932
|
this.addFraction(fraction);
|
|
893
933
|
}
|
|
894
934
|
}
|
|
895
|
-
/** Compress out duplicate points (according to point.isAlmostEqual)
|
|
896
|
-
*/
|
|
935
|
+
/** Compress out duplicate points (according to point.isAlmostEqual) */
|
|
897
936
|
removeDuplicatePoints(tolerance = Geometry_1.Geometry.smallMetricDistance) {
|
|
898
937
|
const n = this._points.length;
|
|
899
938
|
if (n < 2)
|
|
@@ -916,7 +955,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
916
955
|
if (this._derivatives)
|
|
917
956
|
this._derivatives.resize(n1);
|
|
918
957
|
}
|
|
919
|
-
/**
|
|
958
|
+
/**
|
|
959
|
+
* Append a suitable evaluation of a curve ..
|
|
920
960
|
* * always append the curve point
|
|
921
961
|
* * if fraction array is present, append the fraction
|
|
922
962
|
* * if derivative array is present, append the derivative
|
|
@@ -939,7 +979,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
939
979
|
}
|
|
940
980
|
}
|
|
941
981
|
/**
|
|
942
|
-
*
|
|
982
|
+
* Clear all array data:
|
|
943
983
|
* * points
|
|
944
984
|
* * optional fractions.
|
|
945
985
|
* * optional derivatives.
|
|
@@ -973,7 +1013,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
973
1013
|
}
|
|
974
1014
|
return ls;
|
|
975
1015
|
}
|
|
976
|
-
/**
|
|
1016
|
+
/**
|
|
1017
|
+
* Evaluate a curve at uniform fractions. Append the evaluations to this linestring.
|
|
977
1018
|
* @param curve primitive to evaluate.
|
|
978
1019
|
* @param numStrokes number of strokes (edges).
|
|
979
1020
|
* @param fraction0 starting fraction coordinate
|
|
@@ -993,7 +1034,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
993
1034
|
this.appendFractionToPoint(curve, fraction0 + i * df);
|
|
994
1035
|
}
|
|
995
1036
|
}
|
|
996
|
-
/**
|
|
1037
|
+
/**
|
|
1038
|
+
* Append points constructed as interpolation between two points.
|
|
997
1039
|
* @param numStrokes number of strokes.
|
|
998
1040
|
* @param point0 first point
|
|
999
1041
|
* @param point1 last point
|
|
@@ -1039,7 +1081,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1039
1081
|
}
|
|
1040
1082
|
}
|
|
1041
1083
|
}
|
|
1042
|
-
/**
|
|
1084
|
+
/**
|
|
1085
|
+
* Emit strokable parts of the curve to a caller-supplied handler.
|
|
1043
1086
|
* If the stroke options does not have a maxEdgeLength, one stroke is emitted for each segment of the linestring.
|
|
1044
1087
|
* If the stroke options has a maxEdgeLength, smaller segments are emitted as needed.
|
|
1045
1088
|
*/
|
|
@@ -1066,7 +1109,7 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1066
1109
|
handler.endCurvePrimitive(this);
|
|
1067
1110
|
}
|
|
1068
1111
|
/**
|
|
1069
|
-
*
|
|
1112
|
+
* Return the stroke count required for given options.
|
|
1070
1113
|
* @param options StrokeOptions that determine count
|
|
1071
1114
|
*/
|
|
1072
1115
|
computeStrokeCountForOptions(options) {
|
|
@@ -1105,7 +1148,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1105
1148
|
/**
|
|
1106
1149
|
* Find intervals of this CurvePrimitive that are interior to a clipper
|
|
1107
1150
|
* @param clipper clip structure (e.g. clip planes)
|
|
1108
|
-
* @param announce (optional) function to be called announcing fractional intervals"
|
|
1151
|
+
* @param announce (optional) function to be called announcing fractional intervals"
|
|
1152
|
+
* ` announce(fraction0, fraction1, curvePrimitive)`
|
|
1109
1153
|
* @returns true if any "in" segments are announced.
|
|
1110
1154
|
*/
|
|
1111
1155
|
announceClipIntervals(clipper, announce) {
|
|
@@ -1149,7 +1193,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1149
1193
|
this._points.interpolate(index, fraction, index + 1, LineString3d._indexPoint);
|
|
1150
1194
|
dest.push(LineString3d._indexPoint);
|
|
1151
1195
|
}
|
|
1152
|
-
/**
|
|
1196
|
+
/**
|
|
1197
|
+
* Return a LineString which is a portion of this curve.
|
|
1153
1198
|
* * Fractions outside [0,1] extend the relevant end segment.
|
|
1154
1199
|
* @param fractionA [in] start fraction
|
|
1155
1200
|
* @param fractionB [in] end fraction
|
|
@@ -1209,14 +1254,12 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1209
1254
|
return LineSegment3d_1.LineSegment3d.create(this._points.getPoint3dAtCheckedPointIndex(index), this._points.getPoint3dAtCheckedPointIndex(index + 1));
|
|
1210
1255
|
return undefined;
|
|
1211
1256
|
}
|
|
1212
|
-
/**
|
|
1213
|
-
* Returns true if first and last points are within metric tolerance.
|
|
1214
|
-
*/
|
|
1257
|
+
/** Returns true if first and last points are within metric tolerance. */
|
|
1215
1258
|
get isPhysicallyClosed() {
|
|
1216
1259
|
return this._points.length > 0 && Geometry_1.Geometry.isSmallMetricDistance(this._points.distanceIndexIndex(0, this._points.length - 1));
|
|
1217
1260
|
}
|
|
1218
1261
|
/**
|
|
1219
|
-
*
|
|
1262
|
+
* Evaluate strokes at fractions indicated in a StrokeCountMap.
|
|
1220
1263
|
* * The map must have an array of component counts corresponding to the segment of this linestring.
|
|
1221
1264
|
* * "fractions" in the output are mapped within a0,a1 of the map.componentData
|
|
1222
1265
|
* @param map = stroke count data.
|
|
@@ -1253,7 +1296,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1253
1296
|
}
|
|
1254
1297
|
return destLinestring.numPoints() - numPoint0;
|
|
1255
1298
|
}
|
|
1256
|
-
/**
|
|
1299
|
+
/**
|
|
1300
|
+
* Convert variant point data to a single level array of linestrings.
|
|
1257
1301
|
* * The result is always an array of LineString3d.
|
|
1258
1302
|
* * Single linestring is NOT bubbled out as a special case.
|
|
1259
1303
|
* * data with no point is an empty array.
|
|
@@ -1288,7 +1332,8 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1288
1332
|
}
|
|
1289
1333
|
/**
|
|
1290
1334
|
* Construct an offset of each segment as viewed in the xy-plane (ignoring z).
|
|
1291
|
-
* * No attempt is made to join the offset segments. Use RegionOps.constructCurveXYOffset() to return a fully
|
|
1335
|
+
* * No attempt is made to join the offset segments. Use RegionOps.constructCurveXYOffset() to return a fully
|
|
1336
|
+
* joined offset.
|
|
1292
1337
|
* @param offsetDistanceOrOptions offset distance (positive to left of the instance curve), or options object
|
|
1293
1338
|
*/
|
|
1294
1339
|
constructOffsetXY(offsetDistanceOrOptions) {
|
|
@@ -1305,10 +1350,13 @@ class LineString3d extends CurvePrimitive_1.CurvePrimitive {
|
|
|
1305
1350
|
}
|
|
1306
1351
|
return offsets;
|
|
1307
1352
|
}
|
|
1308
|
-
/**
|
|
1353
|
+
/**
|
|
1354
|
+
* Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters
|
|
1355
|
+
* of projection.
|
|
1309
1356
|
* @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.
|
|
1310
1357
|
* @param lowHigh optional receiver for output
|
|
1311
|
-
* @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is
|
|
1358
|
+
* @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is
|
|
1359
|
+
* the end of the ray.
|
|
1312
1360
|
*/
|
|
1313
1361
|
projectedParameterRange(ray, lowHigh) {
|
|
1314
1362
|
return PlaneAltitudeRangeContext_1.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
|
|
@@ -1320,7 +1368,8 @@ LineString3d._workPointC = Point3dVector3d_1.Point3d.create();
|
|
|
1320
1368
|
LineString3d._workRay = Ray3d_1.Ray3d.createXAxis();
|
|
1321
1369
|
LineString3d._indexPoint = Point3dVector3d_1.Point3d.create(); // private point for addResolvedPoint
|
|
1322
1370
|
exports.LineString3d = LineString3d;
|
|
1323
|
-
/**
|
|
1371
|
+
/**
|
|
1372
|
+
* An AnnotatedLineString3d is a linestring with additional surface-related data attached to each point
|
|
1324
1373
|
* * This is useful in facet construction.
|
|
1325
1374
|
* @internal
|
|
1326
1375
|
*/
|
|
@@ -1328,7 +1377,7 @@ class AnnotatedLineString3d {
|
|
|
1328
1377
|
}
|
|
1329
1378
|
exports.AnnotatedLineString3d = AnnotatedLineString3d;
|
|
1330
1379
|
/**
|
|
1331
|
-
*
|
|
1380
|
+
* Context to be called to incrementally accumulate distance along line segments.
|
|
1332
1381
|
*/
|
|
1333
1382
|
class MoveByDistanceContext {
|
|
1334
1383
|
/** CAPTURE point0, fraction0, targetDistance */
|