@itwin/rpcinterface-full-stack-tests 4.0.0-dev.55 → 4.0.0-dev.56

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.
@@ -176432,7 +176432,11 @@ class Geometry {
176432
176432
  static resolveToUndefined(value, targetValue) {
176433
176433
  return value === targetValue ? undefined : value;
176434
176434
  }
176435
- /** Simple interpolation between values, but choosing (based on fraction) a or b as starting point for maximum accuracy. */
176435
+ /**
176436
+ * Simple interpolation between values, but choosing (based on fraction) a or b as starting
176437
+ * point for maximum accuracy.
176438
+ * * If `f = 0`, then `a` is returned and if `f = 1`, then `b` is returned.
176439
+ */
176436
176440
  static interpolate(a, f, b) {
176437
176441
  return f <= 0.5 ? a + f * (b - a) : b - (1.0 - f) * (b - a);
176438
176442
  }
@@ -205259,11 +205263,11 @@ class Angle {
205259
205263
  }
205260
205264
  }
205261
205265
  /**
205262
- * Create an Angle from a JSON object
205263
- * @param json object from JSON.parse. If a number, value is in *DEGREES*
205264
- * @param defaultValRadians if json is undefined, default value in radians.
205265
- * @return a new Angle
205266
- */
205266
+ * Create an Angle from a JSON object
205267
+ * @param json object from JSON.parse. If a number, value is in *DEGREES*
205268
+ * @param defaultValRadians if json is undefined, default value in radians.
205269
+ * @return a new Angle
205270
+ */
205267
205271
  static fromJSON(json, defaultValRadians) {
205268
205272
  const val = new Angle();
205269
205273
  val.setFromJSON(json, defaultValRadians);
@@ -205318,21 +205322,15 @@ class Angle {
205318
205322
  // all larger radians reference from 360 degrees (2PI)
205319
205323
  return 360.0 + 180 * ((radians - 2.0 * pi) / pi);
205320
205324
  }
205321
- /**
205322
- * Return the cosine of this Angle object's angle.
205323
- */
205325
+ /** Return the cosine of this Angle object's angle */
205324
205326
  cos() {
205325
205327
  return Math.cos(this._radians);
205326
205328
  }
205327
- /**
205328
- * Return the sine of this Angle object's angle.
205329
- */
205329
+ /** Return the sine of this Angle object's angle */
205330
205330
  sin() {
205331
205331
  return Math.sin(this._radians);
205332
205332
  }
205333
- /**
205334
- * Return the tangent of this Angle object's angle.
205335
- */
205333
+ /** Return the tangent of this Angle object's angle */
205336
205334
  tan() {
205337
205335
  return Math.tan(this._radians);
205338
205336
  }
@@ -205344,11 +205342,11 @@ class Angle {
205344
205342
  static isHalfCircleRadians(radians) {
205345
205343
  return Math.abs(Math.abs(radians) - Math.PI) <= _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallAngleRadians;
205346
205344
  }
205347
- /** test if the angle is a full circle */
205345
+ /** Test if the angle is a full circle */
205348
205346
  get isFullCircle() {
205349
205347
  return Angle.isFullCircleRadians(this._radians);
205350
205348
  }
205351
- /** test if the angle is a half circle (in either direction) */
205349
+ /** Test if the angle is a half circle (in either direction) */
205352
205350
  get isHalfCircle() {
205353
205351
  return Angle.isHalfCircleRadians(this._radians);
205354
205352
  }
@@ -205417,7 +205415,7 @@ class Angle {
205417
205415
  // fall through for NaN disaster.
205418
205416
  return 0;
205419
205417
  }
205420
- /** return a (newly allocated) Angle object with value 0 radians */
205418
+ /** Return a (newly allocated) Angle object with value 0 radians */
205421
205419
  static zero() {
205422
205420
  return new Angle(0);
205423
205421
  }
@@ -205571,19 +205569,19 @@ class Angle {
205571
205569
  return value;
205572
205570
  }
205573
205571
  /**
205574
- * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
205575
- * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
205576
- * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
205577
- * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
205578
- * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
205579
- * perpendicular to the ellipse.
205580
- * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
205581
- * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
205582
- * math details can be found at docs/learning/geometry/Angle.md
205583
- * @param dotUU dot product of vectorU with itself
205584
- * @param dotVV dot product of vectorV with itself
205585
- * @param dotUV dot product of vectorU with vectorV
205586
- */
205572
+ * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
205573
+ * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
205574
+ * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
205575
+ * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
205576
+ * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
205577
+ * perpendicular to the ellipse.
205578
+ * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
205579
+ * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
205580
+ * math details can be found at docs/learning/geometry/Angle.md
205581
+ * @param dotUU dot product of vectorU with itself
205582
+ * @param dotVV dot product of vectorV with itself
205583
+ * @param dotUV dot product of vectorU with vectorV
205584
+ */
205587
205585
  static dotProductsToHalfAngleTrigValues(dotUU, dotVV, dotUV, favorZero = true) {
205588
205586
  const cos2t0 = dotUU - dotVV;
205589
205587
  const sin2t0 = 2.0 * dotUV;
@@ -205592,9 +205590,8 @@ class Angle {
205592
205590
  return Angle.trigValuesToHalfAngleTrigValues(cos2t0, sin2t0);
205593
205591
  }
205594
205592
  /**
205595
- * * Returns the angle between two vectors, with the vectors given as xyz components
205593
+ * Returns the angle between two vectors, with the vectors given as xyz components
205596
205594
  * * The returned angle is between 0 and PI
205597
- *
205598
205595
  * @param ux x component of vector u
205599
205596
  * @param uy y component of vector u
205600
205597
  * @param uz z component of vector u
@@ -205607,7 +205604,8 @@ class Angle {
205607
205604
  return Math.atan2(_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductMagnitude(ux, uy, uz, vx, vy, vz), uDotV);
205608
205605
  }
205609
205606
  /**
205610
- * * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve angle to a full 2PI range.
205607
+ * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve
205608
+ * angle to a full 2PI range.
205611
205609
  * * The returned angle is (-PI < radians <= PI) or (0 <= radians < 2 * PI)
205612
205610
  * * The angle is in the plane of the U and V vectors.
205613
205611
  * * The upVector determines a positive side of the plane but need not be strictly perpendicular to the plane.
@@ -205621,7 +205619,8 @@ class Angle {
205621
205619
  * @param upVectorX x component of vector to positive side of plane.
205622
205620
  * @param upVectorY y component of vector to positive side of plane.
205623
205621
  * @param upVectorZ z component of vector to positive side of plane.
205624
- * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return signed (-PI < radians <= PI)
205622
+ * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return
205623
+ * signed (-PI < radians <= PI)
205625
205624
  */
205626
205625
  static orientedRadiansBetweenVectorsXYZ(ux, uy, uz, vx, vy, vz, upVectorX, upVectorY, upVectorZ, adjustToPositive = false) {
205627
205626
  const uDotV = ux * vx + uy * vy + uz * vz;
@@ -205632,8 +205631,8 @@ class Angle {
205632
205631
  const crossMagnitude = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(wx, wy, wz);
205633
205632
  if (upDotW < 0.0) {
205634
205633
  if (adjustToPositive) {
205635
- // The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as addition to PI.
205636
- // This gives the smoothest numerical transition passing PI.
205634
+ // The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as
205635
+ // addition to PI. This gives the smoothest numerical transition passing PI.
205637
205636
  return Math.PI + Math.atan2(crossMagnitude, -uDotV);
205638
205637
  }
205639
205638
  else {
@@ -205748,7 +205747,8 @@ class AngleSweep {
205748
205747
  get endAngle() {
205749
205748
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(this._radians1);
205750
205749
  }
205751
- /** Create a sweep as one of
205750
+ /**
205751
+ * Create a sweep as one of
205752
205752
  * * A clone of a given sweep
205753
205753
  * * 0 to given angle
205754
205754
  * * full circle if no arg given (sweep 0 to 360 degrees)
@@ -205760,7 +205760,8 @@ class AngleSweep {
205760
205760
  return new AngleSweep(0, data.radians);
205761
205761
  return AngleSweep.create360();
205762
205762
  }
205763
- /** (private) constructor with start and end angles in radians.
205763
+ /**
205764
+ * (private) constructor with start and end angles in radians.
205764
205765
  * * Use explicitly named static methods to clarify intent and units of inputs:
205765
205766
  *
205766
205767
  * * createStartEndRadians (startRadians:number, endRadians:number)
@@ -205775,9 +205776,9 @@ class AngleSweep {
205775
205776
  this._radians1 = endRadians;
205776
205777
  }
205777
205778
  /**
205778
- * directly set the start and end angles in radians
205779
+ * Directly set the start and end angles in radians
205779
205780
  * * If the difference between startRadians and endRadians is greater than 360, the function limits the angle sweep to 360.
205780
- * */
205781
+ */
205781
205782
  setStartEndRadians(startRadians = 0, endRadians = 2.0 * Math.PI) {
205782
205783
  const delta = endRadians - startRadians;
205783
205784
  if (_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isFullCircleRadians(delta)) {
@@ -205786,14 +205787,14 @@ class AngleSweep {
205786
205787
  this._radians0 = startRadians;
205787
205788
  this._radians1 = endRadians;
205788
205789
  }
205789
- /** directly set the start and end angles in degrees */
205790
+ /** Directly set the start and end angles in degrees */
205790
205791
  setStartEndDegrees(startDegrees = 0, endDegrees = 360.0) {
205791
205792
  this.setStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(endDegrees));
205792
205793
  }
205793
205794
  /**
205794
- * create an AngleSweep from start and end angles given in radians.
205795
+ * Create an AngleSweep from start and end angles given in radians.
205795
205796
  * * If the difference between startRadians and endRadians is greater than 360, the function limits the angle sweep to 360.
205796
- * */
205797
+ */
205797
205798
  static createStartEndRadians(startRadians = 0, endRadians = 2.0 * Math.PI, result) {
205798
205799
  result = result ? result : new AngleSweep();
205799
205800
  result.setStartEndRadians(startRadians, endRadians);
@@ -205803,23 +205804,23 @@ class AngleSweep {
205803
205804
  cloneMinusRadians(radians) {
205804
205805
  return new AngleSweep(this._radians0 - radians, this._radians1 - radians);
205805
205806
  }
205806
- /** create an AngleSweep from start and end angles given in degrees. */
205807
+ /** Create an AngleSweep from start and end angles given in degrees. */
205807
205808
  static createStartEndDegrees(startDegrees = 0, endDegrees = 360, result) {
205808
205809
  return AngleSweep.createStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(endDegrees), result);
205809
205810
  }
205810
- /** create an angle sweep from strongly typed start and end angles */
205811
+ /** Create an angle sweep from strongly typed start and end angles */
205811
205812
  static createStartEnd(startAngle, endAngle, result) {
205812
205813
  result = result ? result : new AngleSweep();
205813
205814
  result.setStartEndRadians(startAngle.radians, endAngle.radians);
205814
205815
  return result;
205815
205816
  }
205816
- /** create an AngleSweep from start and end angles given in radians. */
205817
+ /** Create an AngleSweep from start and end angles given in radians. */
205817
205818
  static createStartSweepRadians(startRadians = 0, sweepRadians = Math.PI, result) {
205818
205819
  result = result ? result : new AngleSweep();
205819
205820
  result.setStartEndRadians(startRadians, startRadians + sweepRadians);
205820
205821
  return result;
205821
205822
  }
205822
- /** create an AngleSweep from start and sweep given in degrees. */
205823
+ /** Create an AngleSweep from start and sweep given in degrees. */
205823
205824
  static createStartSweepDegrees(startDegrees = 0, sweepDegrees = 360, result) {
205824
205825
  return AngleSweep.createStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees + sweepDegrees), result);
205825
205826
  }
@@ -205831,17 +205832,17 @@ class AngleSweep {
205831
205832
  interpolate(fraction, other) {
205832
205833
  return new AngleSweep(_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.interpolate(this._radians0, fraction, other._radians0), _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.interpolate(this._radians1, fraction, other._radians1));
205833
205834
  }
205834
- /** copy from other AngleSweep. */
205835
+ /** Copy from other AngleSweep. */
205835
205836
  setFrom(other) {
205836
205837
  this._radians0 = other._radians0;
205837
205838
  this._radians1 = other._radians1;
205838
205839
  }
205839
- /** create a full circle sweep (CCW). startRadians defaults to 0 */
205840
+ /** Create a full circle sweep (CCW). startRadians defaults to 0 */
205840
205841
  static create360(startRadians) {
205841
205842
  startRadians = startRadians ? startRadians : 0.0;
205842
205843
  return new AngleSweep(startRadians, startRadians + 2.0 * Math.PI);
205843
205844
  }
205844
- /** create a sweep from the south pole to the north pole (-90 to +90). */
205845
+ /** Create a sweep from the south pole to the north pole (-90 to +90). */
205845
205846
  static createFullLatitude() {
205846
205847
  return AngleSweep.createStartEndRadians(-0.5 * Math.PI, 0.5 * Math.PI);
205847
205848
  }
@@ -205851,7 +205852,8 @@ class AngleSweep {
205851
205852
  this._radians0 = this._radians1;
205852
205853
  this._radians1 = tmp;
205853
205854
  }
205854
- /** return a sweep for the "other" part of the circle.
205855
+ /**
205856
+ * Return a sweep for the "other" part of the circle.
205855
205857
  * @param reverseDirection true to move backwards (CW) from start to end, false to more forwards (CCW) from start to end.
205856
205858
  */
205857
205859
  cloneComplement(reverseDirection = false, result) {
@@ -205861,9 +205863,7 @@ class AngleSweep {
205861
205863
  else
205862
205864
  return AngleSweep.createStartEndRadians(this.endRadians, this.startRadians + s * Math.PI, result);
205863
205865
  }
205864
- /**
205865
- * Restrict start and end angles into the range (-90,+90) in degrees.
205866
- * */
205866
+ /** Restrict start and end angles into the range (-90,+90) in degrees */
205867
205867
  capLatitudeInPlace() {
205868
205868
  const limit = 0.5 * Math.PI;
205869
205869
  this._radians0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.clampToStartEnd(this._radians0, -limit, limit);
@@ -205883,7 +205883,7 @@ class AngleSweep {
205883
205883
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians0, -a)
205884
205884
  && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians1, a);
205885
205885
  }
205886
- /** return a clone of this sweep. */
205886
+ /** Return a clone of this sweep. */
205887
205887
  clone() {
205888
205888
  return new AngleSweep(this._radians0, this._radians1);
205889
205889
  }
@@ -205897,15 +205897,16 @@ class AngleSweep {
205897
205897
  fractionToAngle(fraction) {
205898
205898
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(this.fractionToRadians(fraction));
205899
205899
  }
205900
- /** return 2PI divided by the sweep radians (i.e. 360 degrees divided by sweep angle).
205900
+ /**
205901
+ * Return 2PI divided by the sweep radians (i.e. 360 degrees divided by sweep angle).
205901
205902
  * * This is the number of fractional intervals required to cover a whole circle.
205902
205903
  */
205903
205904
  fractionPeriod() {
205904
205905
  return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(Math.PI * 2.0, Math.abs(this._radians1 - this._radians0), 1.0);
205905
205906
  }
205906
- /** return the fractionalized position of the given angle (as Angle) computed without consideration of
205907
+ /**
205908
+ * Return the fractionalized position of the given angle (as Angle) computed without consideration of
205907
205909
  * 2PI period and without consideration of angle sweep direction (CW or CCW).
205908
- *
205909
205910
  * * the start angle is at fraction 0
205910
205911
  * * the end angle is at fraction 1
205911
205912
  * * interior angles are between 0 and 1
@@ -205918,8 +205919,8 @@ class AngleSweep {
205918
205919
  angleToUnboundedFraction(theta) {
205919
205920
  return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(theta.radians - this._radians0, this._radians1 - this._radians0, 1.0);
205920
205921
  }
205921
- /** return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
205922
- *
205922
+ /**
205923
+ * Return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
205923
205924
  * * consider radians0 as `start` angle of the sweep and radians1 as `end` angle of the sweep
205924
205925
  * * fraction is always positive
205925
205926
  * * the start angle is at fraction 0
@@ -205944,8 +205945,8 @@ class AngleSweep {
205944
205945
  const fraction2 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(delta2, -sweep, zeroSweepDefault);
205945
205946
  return fraction2;
205946
205947
  }
205947
- /** return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
205948
- *
205948
+ /**
205949
+ * Return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
205949
205950
  * * fraction is always positive
205950
205951
  * * the start angle is at fraction 0
205951
205952
  * * the end angle is at fraction 1
@@ -205956,8 +205957,8 @@ class AngleSweep {
205956
205957
  radiansToPositivePeriodicFraction(radians, zeroSweepDefault = 0.0) {
205957
205958
  return AngleSweep.radiansToPositivePeriodicFractionStartEnd(radians, this._radians0, this._radians1, zeroSweepDefault);
205958
205959
  }
205959
- /** return the fractionalized position of the given angle (as Angle), computed with consideration of 2PI period.
205960
- *
205960
+ /**
205961
+ * Return the fractionalized position of the given angle (as Angle), computed with consideration of 2PI period.
205961
205962
  * * fraction is always positive
205962
205963
  * * the start angle is at fraction 0
205963
205964
  * * the end angle is at fraction 1
@@ -205968,8 +205969,8 @@ class AngleSweep {
205968
205969
  angleToPositivePeriodicFraction(theta) {
205969
205970
  return this.radiansToPositivePeriodicFraction(theta.radians);
205970
205971
  }
205971
- /** return the fractionalized position of the given array of angles (as radian), computed with consideration of 2PI period.
205972
- *
205972
+ /**
205973
+ * Return the fractionalized position of the given array of angles (as radian), computed with consideration of 2PI period.
205973
205974
  * * fraction is always positive
205974
205975
  * * the start angle is at fraction 0
205975
205976
  * * the end angle is at fraction 1
@@ -205983,9 +205984,9 @@ class AngleSweep {
205983
205984
  data.reassign(i, this.radiansToPositivePeriodicFraction(data.atUncheckedIndex(i)));
205984
205985
  }
205985
205986
  }
205986
- /** return the fractionalized position of the given angle (as radian) computed with consideration of
205987
+ /**
205988
+ * Return the fractionalized position of the given angle (as radian) computed with consideration of
205987
205989
  * 2PI period and with consideration of angle sweep direction (CW or CCW).
205988
- *
205989
205990
  * * the start angle is at fraction 0
205990
205991
  * * the end angle is at fraction 1
205991
205992
  * * interior angles are between 0 and 1
@@ -206009,9 +206010,9 @@ class AngleSweep {
206009
206010
  const fraction = 0.5 + _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(delta2, -sweep, 0.0);
206010
206011
  return fraction;
206011
206012
  }
206012
- /** return the fractionalized position of the given angle (as Angle) computed with consideration of
206013
+ /**
206014
+ * Return the fractionalized position of the given angle (as Angle) computed with consideration of
206013
206015
  * 2PI period and with consideration of angle sweep direction (CW or CCW).
206014
- *
206015
206016
  * * the start angle is at fraction 0
206016
206017
  * * the end angle is at fraction 1
206017
206018
  * * interior angles are between 0 and 1
@@ -206022,7 +206023,7 @@ class AngleSweep {
206022
206023
  angleToSignedPeriodicFraction(theta) {
206023
206024
  return this.radiansToSignedPeriodicFraction(theta.radians);
206024
206025
  }
206025
- /** test if the given angle (as radians) is within sweep (between radians0 and radians1) */
206026
+ /** Test if the given angle (as radians) is within sweep (between radians0 and radians1) */
206026
206027
  static isRadiansInStartEnd(radians, radians0, radians1, allowPeriodShift = true) {
206027
206028
  const delta0 = radians - radians0;
206028
206029
  const delta1 = radians - radians1;
@@ -206032,16 +206033,16 @@ class AngleSweep {
206032
206033
  return allowPeriodShift ? _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(radians, radians0) : _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(radians, radians0);
206033
206034
  return allowPeriodShift ? this.radiansToPositivePeriodicFractionStartEnd(radians, radians0, radians1, 1000.0) <= 1.0 : false;
206034
206035
  }
206035
- /** test if the given angle (as radians) is within sweep */
206036
+ /** Test if the given angle (as radians) is within sweep */
206036
206037
  isRadiansInSweep(radians, allowPeriodShift = true) {
206037
206038
  return AngleSweep.isRadiansInStartEnd(radians, this.startRadians, this.endRadians, allowPeriodShift);
206038
206039
  }
206039
- /** test if the given angle (as Angle) is within the sweep */
206040
+ /** Test if the given angle (as Angle) is within the sweep */
206040
206041
  isAngleInSweep(angle) {
206041
206042
  return this.isRadiansInSweep(angle.radians);
206042
206043
  }
206043
- /** set this AngleSweep from various sources:
206044
- *
206044
+ /**
206045
+ * Set this AngleSweep from various sources:
206045
206046
  * * if json is undefined, a full-circle sweep is returned.
206046
206047
  * * If json is an AngleSweep object, it is cloned
206047
206048
  * * If json is an array of 2 numbers, those numbers are start and end angles in degrees.
@@ -206063,7 +206064,7 @@ class AngleSweep {
206063
206064
  else
206064
206065
  this.setStartEndRadians(); // default full circle
206065
206066
  }
206066
- /** create an AngleSweep from a json object. */
206067
+ /** Create an AngleSweep from a json object. */
206067
206068
  static fromJSON(json) {
206068
206069
  const result = AngleSweep.create360();
206069
206070
  result.setFromJSON(json);
@@ -206076,7 +206077,8 @@ class AngleSweep {
206076
206077
  toJSON() {
206077
206078
  return [this.startDegrees, this.endDegrees];
206078
206079
  }
206079
- /** test if this angle sweep and other angle sweep match with radians tolerance.
206080
+ /**
206081
+ * Test if this angle sweep and other angle sweep match with radians tolerance.
206080
206082
  * * Period shifts are allowed.
206081
206083
  */
206082
206084
  isAlmostEqualAllowPeriodShift(other) {
@@ -206085,14 +206087,16 @@ class AngleSweep {
206085
206087
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians0, other._radians0)
206086
206088
  && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0);
206087
206089
  }
206088
- /** test if this angle sweep and other angle sweep match with radians tolerance.
206090
+ /**
206091
+ * Test if this angle sweep and other angle sweep match with radians tolerance.
206089
206092
  * * Period shifts are not allowed.
206090
206093
  */
206091
206094
  isAlmostEqualNoPeriodShift(other) {
206092
206095
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians0, other._radians0)
206093
206096
  && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0);
206094
206097
  }
206095
- /** test if start and end angles match with radians tolerance.
206098
+ /**
206099
+ * Test if start and end angles match with radians tolerance.
206096
206100
  * * Period shifts are not allowed.
206097
206101
  * * This function is equivalent to isAlmostEqualNoPeriodShift. It is present for consistency with other classes.
206098
206102
  * However, it is recommended to use isAlmostEqualNoPeriodShift which has a clearer name.
@@ -213359,7 +213363,7 @@ class Matrix3d {
213359
213363
  return undefined;
213360
213364
  }
213361
213365
  /**
213362
- * Multiply `matrixInverse * [x,y,z]` and return result as `Point4d` the with given weight as last element.
213366
+ * Multiply `matrixInverse * [x,y,z]` and return result as a `Point4d` with the given weight as the last coordinate.
213363
213367
  * * Equivalent to solving `matrix * result = [x,y,z]` for an unknown `result`.
213364
213368
  * * Result is `undefined` if the matrix is singular (e.g. has parallel columns or a zero magnitude column)
213365
213369
  * @return result as a Point4d with the same weight.
@@ -213495,20 +213499,17 @@ class Matrix3d {
213495
213499
  }
213496
213500
  /**
213497
213501
  * Multiply `this` Matrix3d (considered to be a Transform with 0 `origin`) times `other` Transform.
213498
- * **Note:** If `other = [B b]`, then we promote `this` matrix to be a Transform [A 0].
213499
- * Then `this * other` is defined as [A*B Aa]. That's because we create a 4x4 matrix for each Transform
213500
- * with the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we
213501
- * multiply those two 4x4 matrixes:
213502
+ * * **Note:** If `this = [A 0]` and `other = [B b]`, then `this * other` is defined as [A*B Ab] because:
213502
213503
  * ```
213503
213504
  * equation
213504
213505
  * \begin{matrix}
213505
- * \text{`this` matrix }\bold{A}\text{ promoted to block Transform} & \blockTransform{A}{0} \\
213506
- * \text{`other` Transform with `matrix` part }\bold{B}\text{ and `origin` part }\bold{b} & \blockTransform{B}{b}\\
213506
+ * \text{this matrix }\bold{A}\text{ promoted to block Transform} & \blockTransform{A}{0} \\
213507
+ * \text{other Transform with `matrix` part }\bold{B}\text{ and origin part }\bold{b} & \blockTransform{B}{b}\\
213507
213508
  * \text{product}& \blockTransform{A}{0}\blockTransform{B}{b}=\blockTransform{AB}{Ab}
213508
213509
  * \end{matrix}
213509
213510
  * ```
213510
213511
  * @param other the `other` Transform to be multiplied to `this` matrix.
213511
- * @param result optional preallocated result to reuse.
213512
+ * @param result optional preallocated `result` to reuse.
213512
213513
  */
213513
213514
  multiplyMatrixTransform(other, result) {
213514
213515
  if (!result)
@@ -214291,7 +214292,7 @@ __webpack_require__.r(__webpack_exports__);
214291
214292
 
214292
214293
  /* cspell:word cxcz, cxsz, cxcy, cxsy, sxcz, sxsz, sxcy, sxsy, cycz, cysz, sycz, sysz */
214293
214294
  /**
214294
- * represents a non-trivial rotation using three simple axis rotation angles and an order in which to apply them.
214295
+ * Represents a non-trivial rotation using three simple axis rotation angles and an order in which to apply them.
214295
214296
  * * This class accommodates application-specific interpretation of "multiplying 3 rotation matrices" with regard to
214296
214297
  * * Whether a "vector" is a "row" or a "column"
214297
214298
  * * The order in which the X,Y,Z rotations are applied.
@@ -214349,7 +214350,7 @@ class OrderedRotationAngles {
214349
214350
  get zRadians() {
214350
214351
  return this._z.radians;
214351
214352
  }
214352
- /** the flag controlling whether vectors are treated as rows or as columns */
214353
+ /** The flag controlling whether vectors are treated as rows or as columns */
214353
214354
  static get treatVectorsAsColumns() {
214354
214355
  return OrderedRotationAngles._sTreatVectorsAsColumns;
214355
214356
  }
@@ -214432,7 +214433,7 @@ class OrderedRotationAngles {
214432
214433
  * * In the failure case the method's return value is `undefined`.
214433
214434
  * * In the failure case, if the optional result was supplied, that result will nonetheless be filled with
214434
214435
  * a set of angles.
214435
- * */
214436
+ */
214436
214437
  static createFromMatrix3d(matrix, order, result) {
214437
214438
  // treat vector as columns
214438
214439
  let m11 = matrix.coffs[0], m12 = matrix.coffs[1], m13 = matrix.coffs[2];
@@ -215229,21 +215230,19 @@ class Point2dArrayCarrier extends _IndexedXYCollection__WEBPACK_IMPORTED_MODULE_
215229
215230
  return undefined;
215230
215231
  }
215231
215232
  /**
215232
- * Return the cross product of vectors from point at originIndex to points at indexA and indexB
215233
- * @param originIndex index of origin
215234
- * @param indexA index of first target within the array
215235
- * @param indexB index of second target within the array
215236
- * @param result caller-allocated vector.
215237
- * @returns return true if indexA, indexB both valid
215238
- */
215233
+ * Return the cross product of vectors from point at originIndex to points at indexA and indexB
215234
+ * @param originIndex index of origin
215235
+ * @param indexA index of first target within the array
215236
+ * @param indexB index of second target within the array
215237
+ * @param result caller-allocated vector.
215238
+ * @returns return true if indexA, indexB both valid
215239
+ */
215239
215240
  crossProductIndexIndexIndex(originIndex, indexA, indexB) {
215240
215241
  if (this.isValidIndex(originIndex) && this.isValidIndex(indexA) && this.isValidIndex(indexB))
215241
215242
  return _Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.XY.crossProductToPoints(this.data[originIndex], this.data[indexA], this.data[indexB]);
215242
215243
  return undefined;
215243
215244
  }
215244
- /**
215245
- * read-only property for number of XYZ in the collection.
215246
- */
215245
+ /** Read-only property for number of XYZ in the collection. */
215247
215246
  get length() {
215248
215247
  return this.data.length;
215249
215248
  }
@@ -215289,10 +215288,11 @@ __webpack_require__.r(__webpack_exports__);
215289
215288
  * @module CartesianGeometry
215290
215289
  */
215291
215290
  // cspell:word JSONXY
215292
- // cspell:word CWXY
215291
+ // cspell:word CWXY CCWXY
215293
215292
 
215294
215293
 
215295
- /** Minimal object containing x,y and operations that are meaningful without change in both point and vector.
215294
+ /**
215295
+ * Minimal object containing x,y and operations that are meaningful without change in both point and vector.
215296
215296
  * * `XY` is not instantiable.
215297
215297
  * * The derived (instantiable) classes are
215298
215298
  * * `Point2d`
@@ -215337,11 +215337,11 @@ class XY {
215337
215337
  isAlmostEqualXY(x, y, tol) {
215338
215338
  return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(this.x, x, tol) && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(this.y, y, tol);
215339
215339
  }
215340
- /** return a json array `[x,y]` */
215340
+ /** Return a json array `[x,y]` */
215341
215341
  toJSON() {
215342
215342
  return [this.x, this.y];
215343
215343
  }
215344
- /** return a json object `{x: 1, y:2}` */
215344
+ /** Return a json object `{x: 1, y:2}` */
215345
215345
  toJSONXY() {
215346
215346
  return { x: this.x, y: this.y };
215347
215347
  }
@@ -215349,7 +215349,7 @@ class XY {
215349
215349
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
215350
215350
  * * If no JSON input is provided, 0 would be used as default values for x and y.
215351
215351
  * @param json the JSON input
215352
- * */
215352
+ */
215353
215353
  setFromJSON(json) {
215354
215354
  if (Array.isArray(json)) {
215355
215355
  this.set(json[0] || 0, json[1] || 0);
@@ -215377,17 +215377,13 @@ class XY {
215377
215377
  maxDiff(other) {
215378
215378
  return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y));
215379
215379
  }
215380
- /**
215381
- * Return the x,y component corresponding to 0,1.
215382
- */
215380
+ /** Return the x,y component corresponding to 0,1 */
215383
215381
  at(index) {
215384
215382
  if (index < 0.5)
215385
215383
  return this.x;
215386
215384
  return this.y;
215387
215385
  }
215388
- /**
215389
- * Set value at index 0 or 1.
215390
- */
215386
+ /** Set value at index 0 or 1 */
215391
215387
  setAt(index, value) {
215392
215388
  if (index < 0.5)
215393
215389
  this.x = value;
@@ -215404,7 +215400,7 @@ class XY {
215404
215400
  }
215405
215401
  return index;
215406
215402
  }
215407
- /** returns true if the x,y components are both small by metric metric tolerance */
215403
+ /** Returns true if the x,y components are both small by metric metric tolerance */
215408
215404
  get isAlmostZero() {
215409
215405
  return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSmallMetricDistance(this.x) && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSmallMetricDistance(this.y);
215410
215406
  }
@@ -215420,11 +215416,11 @@ class XY {
215420
215416
  magnitudeSquared() {
215421
215417
  return this.x * this.x + this.y * this.y;
215422
215418
  }
215423
- /** returns true if the x,y components are exactly equal. */
215419
+ /** Returns true if the x,y components are exactly equal. */
215424
215420
  isExactEqual(other) {
215425
215421
  return this.x === other.x && this.y === other.y;
215426
215422
  }
215427
- /** returns true if x,y match `other` within metric tolerance */
215423
+ /** Returns true if x,y match `other` within metric tolerance */
215428
215424
  isAlmostEqualMetric(other, distanceTol = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
215429
215425
  return this.maxDiff(other) <= distanceTol;
215430
215426
  }
@@ -215436,7 +215432,7 @@ class XY {
215436
215432
  unitVectorTo(other, result) {
215437
215433
  return this.vectorTo(other, result).normalize(result);
215438
215434
  }
215439
- /** cross product of vectors from origin to targets */
215435
+ /** Cross product of vectors from origin to targets */
215440
215436
  static crossProductToPoints(origin, targetA, targetB) {
215441
215437
  return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(targetA.x - origin.x, targetA.y - origin.y, targetB.x - origin.x, targetB.y - origin.y);
215442
215438
  }
@@ -215449,7 +215445,7 @@ class Point2d extends XY {
215449
215445
  constructor(x = 0, y = 0) {
215450
215446
  super(x, y);
215451
215447
  }
215452
- /** return a new Point2d with x,y coordinates from this. */
215448
+ /** Return a new Point2d with x,y coordinates from this. */
215453
215449
  clone(result) {
215454
215450
  return Point2d.create(this.x, this.y, result);
215455
215451
  }
@@ -215471,7 +215467,7 @@ class Point2d extends XY {
215471
215467
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
215472
215468
  * * If no JSON input is provided, 0 would be used as default values for x and y.
215473
215469
  * @param json the JSON input
215474
- * */
215470
+ */
215475
215471
  static fromJSON(json) {
215476
215472
  const val = new Point2d();
215477
215473
  val.setFromJSON(json);
@@ -215487,7 +215483,8 @@ class Point2d extends XY {
215487
215483
  static createZero(result) {
215488
215484
  return Point2d.create(0, 0, result);
215489
215485
  }
215490
- /** Starting at this point, move along vector by tangentFraction of the vector length, and then
215486
+ /**
215487
+ * Starting at this point, move along vector by tangentFraction of the vector length, and then
215491
215488
  * to the left by leftFraction of the perpendicular vector length.
215492
215489
  * @param tangentFraction distance to move along the vector, as a fraction of vector
215493
215490
  * @param leftFraction distance to move perpendicular to the vector, as a fraction of the rotated vector
@@ -215498,7 +215495,8 @@ class Point2d extends XY {
215498
215495
  const dy = vector.y;
215499
215496
  return Point2d.create(this.x + tangentFraction * dx - leftFraction * dy, this.y + tangentFraction * dy + leftFraction * dx);
215500
215497
  }
215501
- /** Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
215498
+ /**
215499
+ * Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
215502
215500
  * along the xy perpendicular of the vector between the points.
215503
215501
  */
215504
215502
  forwardLeftInterpolate(tangentFraction, leftFraction, point) {
@@ -215561,7 +215559,8 @@ class Point2d extends XY {
215561
215559
  const y2 = target2.y - this.y;
215562
215560
  return x1 * y2 - y1 * x2;
215563
215561
  }
215564
- /** Return the fractional coordinate of the projection of this instance x,y onto the
215562
+ /**
215563
+ * Return the fractional coordinate of the projection of this instance x,y onto the
215565
215564
  * line from startPoint to endPoint.
215566
215565
  * @param startPoint start point of line
215567
215566
  * @param endPoint end point of line
@@ -215575,7 +215574,8 @@ class Point2d extends XY {
215575
215574
  return numerator / denominator;
215576
215575
  }
215577
215576
  }
215578
- /** 2D vector with `x`,`y` as properties
215577
+ /**
215578
+ * 2D vector with `x`,`y` as properties
215579
215579
  * @public
215580
215580
  */
215581
215581
  class Vector2d extends XY {
@@ -215613,7 +215613,7 @@ class Vector2d extends XY {
215613
215613
  static createZero(result) {
215614
215614
  return Vector2d.create(0, 0, result);
215615
215615
  }
215616
- /** copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
215616
+ /** Copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
215617
215617
  static createFrom(data, result) {
215618
215618
  if (data instanceof Float64Array) {
215619
215619
  if (data.length >= 2)
@@ -215628,7 +215628,7 @@ class Vector2d extends XY {
215628
215628
  * Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
215629
215629
  * * If no JSON input is provided, 0 would be used as default values for x and y.
215630
215630
  * @param json the JSON input
215631
- * */
215631
+ */
215632
215632
  static fromJSON(json) {
215633
215633
  const val = new Vector2d();
215634
215634
  val.setFromJSON(json);
@@ -215660,7 +215660,8 @@ class Vector2d extends XY {
215660
215660
  }
215661
215661
  return undefined;
215662
215662
  }
215663
- /** Return a (new or optionally reused) vector which is `this` divided by `denominator`
215663
+ /**
215664
+ * Return a (new or optionally reused) vector which is `this` divided by `denominator`
215664
215665
  * * return undefined if denominator is zero.
215665
215666
  */
215666
215667
  safeDivideOrNull(denominator, result) {
@@ -215681,7 +215682,7 @@ class Vector2d extends XY {
215681
215682
  * it's returning the length of the projection as a fraction of the target magnitude.
215682
215683
  * @param target the target vector
215683
215684
  * @param defaultFraction the returned value in case magnitude square of target vector is very small
215684
- * */
215685
+ */
215685
215686
  fractionOfProjectionToVector(target, defaultFraction) {
215686
215687
  /*
215687
215688
  * projection length is (this.target)/||target||
@@ -215736,7 +215737,7 @@ class Vector2d extends XY {
215736
215737
  }
215737
215738
  return result;
215738
215739
  }
215739
- /** return a new Vector2d rotated CCW by given angle */
215740
+ /** Return a new Vector2d rotated CCW by given angle */
215740
215741
  rotateXY(angle, result) {
215741
215742
  const s = angle.sin();
215742
215743
  const c = angle.cos();
@@ -215748,7 +215749,8 @@ class Vector2d extends XY {
215748
215749
  result.y = xx * s + yy * c;
215749
215750
  return result;
215750
215751
  }
215751
- /** Return a vector computed at fractional position between this vector and vectorB
215752
+ /**
215753
+ * Return a vector computed at fractional position between this vector and vectorB
215752
215754
  * @param fraction fractional position. 0 is at `this`. 1 is at `vectorB`.
215753
215755
  * True fractions are "between", negatives are "before this", beyond 1 is "beyond vectorB".
215754
215756
  * @param vectorB second vector
@@ -215771,14 +215773,14 @@ class Vector2d extends XY {
215771
215773
  }
215772
215774
  return result;
215773
215775
  }
215774
- /** return {this + vector}. */
215776
+ /** Return {this + vector}. */
215775
215777
  plus(vector, result) {
215776
215778
  result = result ? result : new Vector2d();
215777
215779
  result.x = this.x + vector.x;
215778
215780
  result.y = this.y + vector.y;
215779
215781
  return result;
215780
215782
  }
215781
- /** return {this - vector}. */
215783
+ /** Return {this - vector}. */
215782
215784
  minus(vector, result) {
215783
215785
  result = result ? result : new Vector2d();
215784
215786
  result.x = this.x - vector.x;
@@ -215813,34 +215815,34 @@ class Vector2d extends XY {
215813
215815
  result.y = this.y * scale;
215814
215816
  return result;
215815
215817
  }
215816
- /** return a vector parallel to this but with specified length */
215818
+ /** Return a vector parallel to this but with specified length */
215817
215819
  scaleToLength(length, result) {
215818
215820
  const mag = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.correctSmallMetricDistance(this.magnitude());
215819
215821
  if (mag === 0)
215820
215822
  return undefined;
215821
215823
  return this.scale(length / mag, result);
215822
215824
  }
215823
- /** return the dot product of this with vectorB */
215825
+ /** Return the dot product of this with vectorB */
215824
215826
  dotProduct(vectorB) {
215825
215827
  return this.x * vectorB.x + this.y * vectorB.y;
215826
215828
  }
215827
- /** dot product with vector from pointA to pointB */
215829
+ /** Dot product with vector from pointA to pointB */
215828
215830
  dotProductStartEnd(pointA, pointB) {
215829
215831
  return this.x * (pointB.x - pointA.x) + this.y * (pointB.y - pointA.y);
215830
215832
  }
215831
- /** vector cross product {this CROSS vectorB} */
215833
+ /** Vector cross product {this CROSS vectorB} */
215832
215834
  crossProduct(vectorB) {
215833
215835
  return this.x * vectorB.y - this.y * vectorB.x;
215834
215836
  }
215835
215837
  /**
215836
- * return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
215838
+ * Return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
215837
215839
  * This is positive if the shortest turn is counterclockwise, negative if clockwise.
215838
215840
  */
215839
215841
  radiansTo(vectorB) {
215840
215842
  return Math.atan2(this.crossProduct(vectorB), this.dotProduct(vectorB));
215841
215843
  }
215842
215844
  /**
215843
- * return the (strongly typed) signed angle from this to vectorB.
215845
+ * Return the (strongly typed) signed angle from this to vectorB.
215844
215846
  * This is positive if the shortest turn is counterclockwise, negative if clockwise.
215845
215847
  */
215846
215848
  angleTo(vectorB) {
@@ -215928,7 +215930,7 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
215928
215930
  super();
215929
215931
  this.data = data;
215930
215932
  }
215931
- /** test if `index` is a valid index into the array. */
215933
+ /** Test if `index` is a valid index into the array. */
215932
215934
  isValidIndex(index) {
215933
215935
  return index >= 0 && index < this.data.length;
215934
215936
  }
@@ -215970,23 +215972,23 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
215970
215972
  return undefined;
215971
215973
  }
215972
215974
  /**
215973
- * access x of indexed point
215975
+ * Access x of indexed point
215974
215976
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
215975
- * */
215977
+ */
215976
215978
  getXAtUncheckedPointIndex(pointIndex) {
215977
215979
  return this.data[pointIndex].x;
215978
215980
  }
215979
215981
  /**
215980
- * access y of indexed point
215982
+ * Access y of indexed point
215981
215983
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
215982
- * */
215984
+ */
215983
215985
  getYAtUncheckedPointIndex(pointIndex) {
215984
215986
  return this.data[pointIndex].y;
215985
215987
  }
215986
215988
  /**
215987
- * access z of indexed point
215989
+ * Access z of indexed point
215988
215990
  * * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
215989
- * */
215991
+ */
215990
215992
  getZAtUncheckedPointIndex(pointIndex) {
215991
215993
  return this.data[pointIndex].z;
215992
215994
  }
@@ -216053,10 +216055,7 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
216053
216055
  if (this.isValidIndex(originIndex) && this.isValidIndex(indexA) && this.isValidIndex(indexB))
216054
216056
  result.addCrossProductToTargetsInPlace(data[originIndex].x, data[originIndex].y, data[originIndex].z, data[indexA].x, data[indexA].y, data[indexA].z, data[indexB].x, data[indexB].y, data[indexB].z);
216055
216057
  }
216056
- /**
216057
- * Accumulate scale times the x,y,z values at index to the sum.
216058
- * No action if index is out of bounds.
216059
- */
216058
+ /** Accumulate scale times the x,y,z values at index to the sum. No action if index is out of bounds */
216060
216059
  accumulateScaledXYZ(index, scale, sum) {
216061
216060
  if (this.isValidIndex(index)) {
216062
216061
  const point = this.data[index];
@@ -216065,20 +216064,19 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
216065
216064
  sum.z += scale * point.z;
216066
216065
  }
216067
216066
  }
216068
- /**
216069
- * read-only property for number of XYZ in the collection.
216070
- */
216067
+ /** Read-only property for number of XYZ in the collection */
216071
216068
  get length() {
216072
216069
  return this.data.length;
216073
216070
  }
216074
- /** push a (clone of) point onto the collection
216071
+ /**
216072
+ * Push a (clone of) point onto the collection
216075
216073
  * * point itself is not pushed -- xyz data is extracted into the native form of the collection.
216076
216074
  */
216077
216075
  push(data) {
216078
216076
  this.data.push(data.clone());
216079
216077
  }
216080
216078
  /**
216081
- * push a new point (given by coordinates) onto the collection
216079
+ * Push a new point (given by coordinates) onto the collection
216082
216080
  * @param x x coordinate
216083
216081
  * @param y y coordinate
216084
216082
  * @param z z coordinate
@@ -216086,26 +216084,26 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
216086
216084
  pushXYZ(x, y, z) {
216087
216085
  this.data.push(_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x === undefined ? 0.0 : x, y === undefined ? 0.0 : y, z === undefined ? 0.0 : z));
216088
216086
  }
216089
- /** extract (copy) the final point */
216087
+ /** Extract (copy) the final point */
216090
216088
  back(result) {
216091
216089
  if (this.data.length > 0) {
216092
216090
  return this.data[this.data.length - 1].clone(result);
216093
216091
  }
216094
216092
  return undefined;
216095
216093
  }
216096
- /** extract (copy) the first point */
216094
+ /** Extract (copy) the first point */
216097
216095
  front(result) {
216098
216096
  if (this.data.length > 0) {
216099
216097
  return this.data[0].clone(result);
216100
216098
  }
216101
216099
  return undefined;
216102
216100
  }
216103
- /** remove the final point. */
216101
+ /** Remove the final point. */
216104
216102
  pop() {
216105
216103
  if (this.data.length > 0)
216106
216104
  this.data.pop();
216107
216105
  }
216108
- /** remove all points. */
216106
+ /** Remove all points. */
216109
216107
  clear() {
216110
216108
  this.data.length = 0;
216111
216109
  }
@@ -216174,7 +216172,8 @@ __webpack_require__.r(__webpack_exports__);
216174
216172
 
216175
216173
  // cspell:words CWXY CCWXY arctan Rodrigues
216176
216174
  /**
216177
- * * `XYZ` is a minimal object containing x,y,z and operations that are meaningful without change in both point and vector.
216175
+ * * `XYZ` is a minimal object containing x,y,z and operations that are meaningful without change in both
216176
+ * point and vector.
216178
216177
  * * `XYZ` is not instantiable.
216179
216178
  * * The derived (instantiable) classes are
216180
216179
  * * `Point3d`
@@ -216218,7 +216217,8 @@ class XYZ {
216218
216217
  static isXYAndZ(arg) {
216219
216218
  return this.isXAndY(arg) && this.hasZ(arg);
216220
216219
  }
216221
- /** Test if arg is any of:
216220
+ /**
216221
+ * Test if arg is any of:
216222
216222
  * * XAndY
216223
216223
  * * XYAndZ
216224
216224
  * * [number,number]
@@ -216227,7 +216227,8 @@ class XYZ {
216227
216227
  static isAnyImmediatePointType(arg) {
216228
216228
  return Point3d.isXAndY(arg) || _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isNumberArray(arg, 2);
216229
216229
  }
216230
- /** Look for (in order) an x coordinate present as:
216230
+ /**
216231
+ * Look for (in order) an x coordinate present as:
216231
216232
  * * arg.x
216232
216233
  * * arg[0]
216233
216234
  */
@@ -216238,7 +216239,8 @@ class XYZ {
216238
216239
  return arg[0];
216239
216240
  return defaultValue;
216240
216241
  }
216241
- /** Look for (in order) an x coordinate present as:
216242
+ /**
216243
+ * Look for (in order) an x coordinate present as:
216242
216244
  * * arg.y
216243
216245
  * * arg[1]
216244
216246
  */
@@ -216249,7 +216251,8 @@ class XYZ {
216249
216251
  return arg[1];
216250
216252
  return defaultValue;
216251
216253
  }
216252
- /** Look for (in order) an x coordinate present as:
216254
+ /**
216255
+ * Look for (in order) an x coordinate present as:
216253
216256
  * * arg.z
216254
216257
  * * arg[2]
216255
216258
  */
@@ -216312,7 +216315,8 @@ class XYZ {
216312
216315
  this.setZero();
216313
216316
  }
216314
216317
  }
216315
- /** Returns true if this and other have equal x,y,z parts within Geometry.smallMetricDistance.
216318
+ /**
216319
+ * Returns true if this and other have equal x,y,z parts within Geometry.smallMetricDistance.
216316
216320
  * @param other The other XYAndZ to compare
216317
216321
  * @param tol The tolerance for the comparison. If undefined, use [[Geometry.smallMetricDistance]]
216318
216322
  */
@@ -216393,9 +216397,7 @@ class XYZ {
216393
216397
  maxDiff(other) {
216394
216398
  return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y), Math.abs(this.z - other.z));
216395
216399
  }
216396
- /**
216397
- * Return the x,y, z component corresponding to 0,1,2.
216398
- */
216400
+ /** Return the x,y, z component corresponding to 0,1,2 */
216399
216401
  at(index) {
216400
216402
  if (index < 0.5)
216401
216403
  return this.x;
@@ -216403,9 +216405,7 @@ class XYZ {
216403
216405
  return this.z;
216404
216406
  return this.y;
216405
216407
  }
216406
- /**
216407
- * Set value at index 0 or 1 or 2.
216408
- */
216408
+ /** Set value at index 0 or 1 or 2 */
216409
216409
  setAt(index, value) {
216410
216410
  if (index < 0.5)
216411
216411
  this.x = value;
@@ -216459,27 +216459,27 @@ class XYZ {
216459
216459
  magnitudeSquaredXY() {
216460
216460
  return this.x * this.x + this.y * this.y;
216461
216461
  }
216462
- /** exact equality test. */
216462
+ /** Exact equality test. */
216463
216463
  isExactEqual(other) {
216464
216464
  return this.x === other.x && this.y === other.y && this.z === other.z;
216465
216465
  }
216466
- /** equality test with Geometry.smallMetricDistance tolerance */
216466
+ /** Equality test with Geometry.smallMetricDistance tolerance */
216467
216467
  isAlmostEqualMetric(other) {
216468
216468
  return this.maxDiff(other) <= _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance;
216469
216469
  }
216470
- /** add x,y,z from other in place. */
216470
+ /** Add x,y,z from other in place. */
216471
216471
  addInPlace(other) {
216472
216472
  this.x += other.x;
216473
216473
  this.y += other.y;
216474
216474
  this.z += other.z;
216475
216475
  }
216476
- /** add x,y,z from other in place. */
216476
+ /** Add x,y,z from other in place. */
216477
216477
  subtractInPlace(other) {
216478
216478
  this.x -= other.x;
216479
216479
  this.y -= other.y;
216480
216480
  this.z -= other.z;
216481
216481
  }
216482
- /** add (in place) the scaled x,y,z of other */
216482
+ /** Add (in place) the scaled x,y,z of other */
216483
216483
  addScaledInPlace(other, scale) {
216484
216484
  this.x += scale * other.x;
216485
216485
  this.y += scale * other.y;
@@ -216491,7 +216491,7 @@ class XYZ {
216491
216491
  this.y *= scale;
216492
216492
  this.z *= scale;
216493
216493
  }
216494
- /** add to x, y, z parts */
216494
+ /** Add to x, y, z parts */
216495
216495
  addXYZInPlace(dx = 0.0, dy = 0.0, dz = 0.0) {
216496
216496
  this.x += dx;
216497
216497
  this.y += dy;
@@ -216509,7 +216509,8 @@ class XYZ {
216509
216509
  scaledVectorTo(other, scale, result) {
216510
216510
  return Vector3d.create(scale * (other.x - this.x), scale * (other.y - this.y), scale * (other.z - this.z), result);
216511
216511
  }
216512
- /** Return a unit vector from this vector to other. Return a 000 vector if the input is too small to normalize.
216512
+ /**
216513
+ * Return a unit vector from this vector to other. Return a 000 vector if the input is too small to normalize.
216513
216514
  * @param other target of created vector.
216514
216515
  * @param result optional result vector.
216515
216516
  */
@@ -216520,7 +216521,7 @@ class XYZ {
216520
216521
  freeze() {
216521
216522
  return Object.freeze(this);
216522
216523
  }
216523
- /** access x part of XYZProps (which may be .x or [0]) */
216524
+ /** Access x part of XYZProps (which may be .x or [0]) */
216524
216525
  static x(xyz, defaultValue = 0) {
216525
216526
  if (xyz === undefined)
216526
216527
  return defaultValue;
@@ -216530,7 +216531,7 @@ class XYZ {
216530
216531
  return xyz.x;
216531
216532
  return defaultValue;
216532
216533
  }
216533
- /** access x part of XYZProps (which may be .x or [0]) */
216534
+ /** Access x part of XYZProps (which may be .x or [0]) */
216534
216535
  static y(xyz, defaultValue = 0) {
216535
216536
  if (xyz === undefined)
216536
216537
  return defaultValue;
@@ -216540,7 +216541,7 @@ class XYZ {
216540
216541
  return xyz.y;
216541
216542
  return defaultValue;
216542
216543
  }
216543
- /** access x part of XYZProps (which may be .x or [0]) */
216544
+ /** Access x part of XYZProps (which may be .x or [0]) */
216544
216545
  static z(xyz, defaultValue = 0) {
216545
216546
  if (xyz === undefined)
216546
216547
  return defaultValue;
@@ -216575,7 +216576,8 @@ class Point3d extends XYZ {
216575
216576
  clone(result) {
216576
216577
  return Point3d.create(this.x, this.y, this.z, result);
216577
216578
  }
216578
- /** Create a new Point3d with given coordinates
216579
+ /**
216580
+ * Create a new Point3d with given coordinates
216579
216581
  * @param x x part
216580
216582
  * @param y y part
216581
216583
  * @param z z part
@@ -216648,8 +216650,8 @@ class Point3d extends XYZ {
216648
216650
  static createZero(result) {
216649
216651
  return Point3d.create(0, 0, 0, result);
216650
216652
  }
216651
- /** Return the cross product of the vectors from this to pointA and pointB
216652
- *
216653
+ /**
216654
+ * Return the cross product of the vectors from this to pointA and pointB
216653
216655
  * * the result is a vector
216654
216656
  * * the result is perpendicular to both vectors, with right hand orientation
216655
216657
  * * the magnitude of the vector is twice the area of the triangle.
@@ -216657,21 +216659,20 @@ class Point3d extends XYZ {
216657
216659
  crossProductToPoints(pointA, pointB, result) {
216658
216660
  return Vector3d.createCrossProduct(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z, result);
216659
216661
  }
216660
- /** Return the magnitude of the cross product of the vectors from this to pointA and pointB
216661
- */
216662
+ /** Return the magnitude of the cross product of the vectors from this to pointA and pointB */
216662
216663
  crossProductToPointsMagnitude(pointA, pointB) {
216663
216664
  return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductMagnitude(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z);
216664
216665
  }
216665
- /** Return the triple product of the vectors from this to pointA, pointB, pointC
216666
- *
216666
+ /**
216667
+ * Return the triple product of the vectors from this to pointA, pointB, pointC
216667
216668
  * * This is a scalar (number)
216668
216669
  * * This is 6 times the (signed) volume of the tetrahedron on the 4 points.
216669
216670
  */
216670
216671
  tripleProductToPoints(pointA, pointB, pointC) {
216671
216672
  return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z, pointC.x - this.x, pointC.y - this.y, pointC.z - this.z);
216672
216673
  }
216673
- /** Return the cross product of the vectors from this to pointA and pointB
216674
- *
216674
+ /**
216675
+ * Return the cross product of the vectors from this to pointA and pointB
216675
216676
  * * the result is a scalar
216676
216677
  * * the magnitude of the vector is twice the signed area of the triangle.
216677
216678
  * * this is positive for counter-clockwise order of the points, negative for clockwise.
@@ -216681,8 +216682,8 @@ class Point3d extends XYZ {
216681
216682
  }
216682
216683
  /**
216683
216684
  * Return a point interpolated between `this` point and the `other` point.
216684
- * * fraction specifies where the interpolated point is located on the line passing `this` and `other`.
216685
- * */
216685
+ * * Fraction specifies where the interpolated point is located on the line passing `this` and `other`.
216686
+ */
216686
216687
  interpolate(fraction, other, result) {
216687
216688
  if (fraction <= 0.5)
216688
216689
  return Point3d.create(this.x + fraction * (other.x - this.x), this.y + fraction * (other.y - this.y), this.z + fraction * (other.z - this.z), result);
@@ -216735,7 +216736,8 @@ class Point3d extends XYZ {
216735
216736
  static createScale(source, scale, result) {
216736
216737
  return Point3d.create(source.x * scale, source.y * scale, source.z * scale, result);
216737
216738
  }
216738
- /** create a point that is a linear combination (weighted sum) of 2 input points.
216739
+ /**
216740
+ * Create a point that is a linear combination (weighted sum) of 2 input points.
216739
216741
  * @param pointA first input point
216740
216742
  * @param scaleA scale factor for pointA
216741
216743
  * @param pointB second input point
@@ -216773,7 +216775,8 @@ class Point3d extends XYZ {
216773
216775
  return startPoint.dotVectorsToTargets(endPoint, this) / denominator;
216774
216776
  }
216775
216777
  }
216776
- /** 3D vector with `x`,`y`,`z` as properties
216778
+ /**
216779
+ * 3D vector with `x`,`y`,`z` as properties
216777
216780
  * @public
216778
216781
  */
216779
216782
  class Vector3d extends XYZ {
@@ -216798,7 +216801,7 @@ class Vector3d extends XYZ {
216798
216801
  return Vector3d.create(this.x, this.y, this.z, result);
216799
216802
  }
216800
216803
  /**
216801
- * return a Vector3d (new or reused from optional result)
216804
+ * Return a Vector3d (new or reused from optional result)
216802
216805
  * @param x x component
216803
216806
  * @param y y component
216804
216807
  * @param z z component
@@ -216851,7 +216854,6 @@ class Vector3d extends XYZ {
216851
216854
  }
216852
216855
  /**
216853
216856
  * Return the cross product of the vectors from origin to pointA and pointB.
216854
- *
216855
216857
  * * the result is a vector
216856
216858
  * * the result is perpendicular to both vectors, with right hand orientation
216857
216859
  * * the magnitude of the vector is twice the area of the triangle.
@@ -217028,7 +217030,8 @@ class Vector3d extends XYZ {
217028
217030
  this.z *= a;
217029
217031
  return true;
217030
217032
  }
217031
- /** Create a normalized vector from the inputs.
217033
+ /**
217034
+ * Create a normalized vector from the inputs.
217032
217035
  * @param result optional result
217033
217036
  * @returns undefined if and only if normalization fails
217034
217037
  */
@@ -217062,7 +217065,8 @@ class Vector3d extends XYZ {
217062
217065
  return defaultFraction;
217063
217066
  return numerator / denominator;
217064
217067
  }
217065
- /** Return a new vector with components negated from the calling instance.
217068
+ /**
217069
+ * Return a new vector with components negated from the calling instance.
217066
217070
  * @param result optional result vector.
217067
217071
  */
217068
217072
  negate(result) {
@@ -217144,7 +217148,8 @@ class Vector3d extends XYZ {
217144
217148
  const normal = this.crossProduct(target).normalize();
217145
217149
  return normal ? normal.crossProduct(this, result) : undefined;
217146
217150
  }
217147
- /** Rotate this vector 90 degrees around an axis vector.
217151
+ /**
217152
+ * Rotate this vector 90 degrees around an axis vector.
217148
217153
  * * Note that simple cross is in the plane perpendicular to axis -- it loses the part
217149
217154
  * of "this" that is along the axis. The unit and scale is supposed to fix that.
217150
217155
  * This matches with Rodrigues' rotation formula because cos(theta) = 0 and sin(theta) = 1
@@ -217233,8 +217238,10 @@ class Vector3d extends XYZ {
217233
217238
  static createAdd2Scaled(vectorA, scaleA, vectorB, scaleB, result) {
217234
217239
  return Vector3d.create(vectorA.x * scaleA + vectorB.x * scaleB, vectorA.y * scaleA + vectorB.y * scaleB, vectorA.z * scaleA + vectorB.z * scaleB, result);
217235
217240
  }
217236
- /** Return the (strongly typed Vector3d) `thisVector3d + vectorA * scalarA + vectorB * scalarB`
217237
- * with all components presented as numbers */
217241
+ /**
217242
+ * Return the (strongly typed Vector3d) `thisVector3d + vectorA * scalarA + vectorB * scalarB`
217243
+ * with all components presented as numbers
217244
+ */
217238
217245
  static createAdd2ScaledXYZ(ax, ay, az, scaleA, bx, by, bz, scaleB, result) {
217239
217246
  return Vector3d.create(ax * scaleA + bx * scaleB, ay * scaleA + by * scaleB, az * scaleA + bz * scaleB, result);
217240
217247
  }
@@ -217261,7 +217268,8 @@ class Vector3d extends XYZ {
217261
217268
  return undefined;
217262
217269
  return this.scale(length / mag, result);
217263
217270
  }
217264
- /** Compute the cross product of this vector with `vectorB`. Immediately pass it to `normalize`.
217271
+ /**
217272
+ * Compute the cross product of this vector with `vectorB`. Immediately pass it to `normalize`.
217265
217273
  * @param vectorB second vector for cross product.
217266
217274
  * @returns see `Vector3d` method `normalize()` for error condition.
217267
217275
  */
@@ -217348,7 +217356,8 @@ class Vector3d extends XYZ {
217348
217356
  crossProductMagnitude(vectorB) {
217349
217357
  return Math.sqrt(this.crossProductMagnitudeSquared(vectorB));
217350
217358
  }
217351
- /** Return the dot product of this vector with vectorB.
217359
+ /**
217360
+ * Return the dot product of this vector with vectorB.
217352
217361
  * @param vectorB second vector of cross product
217353
217362
  * @returns the dot product of this instance with vectorB
217354
217363
  */
@@ -217404,7 +217413,8 @@ class Vector3d extends XYZ {
217404
217413
  return this.x * (pointB.x - pointA.x)
217405
217414
  + this.y * (pointB.y - pointA.y);
217406
217415
  }
217407
- /** Dot product with vector from pointA to pointB, with pointB given as (weighted) wx,wy,wz,w
217416
+ /**
217417
+ * Dot product with vector from pointA to pointB, with pointB given as (weighted) wx,wy,wz,w
217408
217418
  * * We need to unweight pointB (which is a homogeneous point) to be able to participate in the
217409
217419
  * vector dot product
217410
217420
  * * if the weight is near zero metric, the return is zero.
@@ -217448,7 +217458,7 @@ class Vector3d extends XYZ {
217448
217458
  return Vector3d.createCrossProduct(this.x, this.y, this.z, vectorB.x, vectorB.y, vectorB.z, result);
217449
217459
  }
217450
217460
  /**
217451
- * return cross product of `this` with the vector `(x, y, z)`
217461
+ * Return cross product of `this` with the vector `(x, y, z)`
217452
217462
  * @param x x component of second vector
217453
217463
  * @param y y component of second vector
217454
217464
  * @param z z component of second vector
@@ -217458,12 +217468,12 @@ class Vector3d extends XYZ {
217458
217468
  return Vector3d.createCrossProduct(this.x, this.y, this.z, x, y, z, result);
217459
217469
  }
217460
217470
  /**
217461
- * Return the angle in radians (not as strongly typed Angle) from this vector to vectorB.
217462
- * * The returned angle is between 0 and `Math.PI`.
217463
- * * The returned angle is measured in the plane containing the two vectors.
217464
- * * Use `planarRadiansTo` and `signedRadiansTo` to return an angle measured in a specific plane.
217465
- * @param vectorB target vector.
217466
- */
217471
+ * Return the angle in radians (not as strongly typed Angle) from this vector to vectorB.
217472
+ * * The returned angle is between 0 and `Math.PI`.
217473
+ * * The returned angle is measured in the plane containing the two vectors.
217474
+ * * Use `planarRadiansTo` and `signedRadiansTo` to return an angle measured in a specific plane.
217475
+ * @param vectorB target vector.
217476
+ */
217467
217477
  radiansTo(vectorB) {
217468
217478
  // ||axb|| = ||a|| ||b|| |sin(t)| and a.b = ||a|| ||b|| cos(t) ==>
217469
217479
  // ||axb|| / a.b = sin(t)/cos(t) = tan(t) ==> t = arctan(||axb|| / a.b).
@@ -217499,16 +217509,16 @@ class Vector3d extends XYZ {
217499
217509
  return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createAtan2(this.crossProductXY(vectorB), this.dotProductXY(vectorB));
217500
217510
  }
217501
217511
  /**
217502
- * Return the angle in radians (not as strongly-typed Angle) from this vector to vectorB, measured
217503
- * in their containing plane whose normal lies in the same half-space as vectorW.
217504
- * * The returned angle is between `-Math.PI` and `Math.PI`.
217505
- * * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
217506
- * this function returns `radiansTo(vectorB)`; otherwise, it returns `-radiansTo(vectorB)`.
217507
- * * `vectorW` does not have to be perpendicular to the plane.
217508
- * * Use `planarRadiansTo` to measure the angle between vectors that are projected to another plane.
217509
- * @param vectorB target vector.
217510
- * @param vectorW determines the side of the plane in which the returned angle is measured
217511
- */
217512
+ * Return the angle in radians (not as strongly-typed Angle) from this vector to vectorB, measured
217513
+ * in their containing plane whose normal lies in the same half-space as vectorW.
217514
+ * * The returned angle is between `-Math.PI` and `Math.PI`.
217515
+ * * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
217516
+ * this function returns `radiansTo(vectorB)`; otherwise, it returns `-radiansTo(vectorB)`.
217517
+ * * `vectorW` does not have to be perpendicular to the plane.
217518
+ * * Use `planarRadiansTo` to measure the angle between vectors that are projected to another plane.
217519
+ * @param vectorB target vector.
217520
+ * @param vectorW determines the side of the plane in which the returned angle is measured
217521
+ */
217512
217522
  signedRadiansTo(vectorB, vectorW) {
217513
217523
  const p = this.crossProduct(vectorB);
217514
217524
  const theta = Math.atan2(p.magnitude(), this.dotProduct(vectorB));
@@ -217517,7 +217527,8 @@ class Vector3d extends XYZ {
217517
217527
  else
217518
217528
  return theta;
217519
217529
  }
217520
- /** Return the (strongly-typed) angle from this vector to vectorB, measured
217530
+ /**
217531
+ * Return the (strongly-typed) angle from this vector to vectorB, measured
217521
217532
  * in their containing plane whose normal lies in the same half-space as vectorW.
217522
217533
  * * The returned angle is between -180 and 180 degrees.
217523
217534
  * * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
@@ -217560,15 +217571,19 @@ class Vector3d extends XYZ {
217560
217571
  planarAngleTo(vectorB, planeNormal) {
217561
217572
  return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createRadians(this.planarRadiansTo(vectorB, planeNormal));
217562
217573
  }
217563
- /** Return the smallest angle (in radians) from the (bidirectional) line containing `this`
217564
- * to the (bidirectional) line containing `vectorB` */
217574
+ /**
217575
+ * Return the smallest angle (in radians) from the (bidirectional) line containing `this`
217576
+ * to the (bidirectional) line containing `vectorB`
217577
+ */
217565
217578
  smallerUnorientedRadiansTo(vectorB) {
217566
217579
  const c = this.dotProduct(vectorB);
217567
217580
  const s = this.crossProductMagnitude(vectorB);
217568
217581
  return Math.atan2(Math.abs(s), Math.abs(c));
217569
217582
  }
217570
- /** Return the smallest (strongly typed) angle from the (bidirectional) line containing `this`
217571
- * to the (bidirectional) line containing `vectorB` */
217583
+ /**
217584
+ * Return the smallest (strongly typed) angle from the (bidirectional) line containing `this`
217585
+ * to the (bidirectional) line containing `vectorB`
217586
+ */
217572
217587
  smallerUnorientedAngleTo(vectorB) {
217573
217588
  return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createRadians(this.smallerUnorientedRadiansTo(vectorB));
217574
217589
  }
@@ -223469,7 +223484,7 @@ class Transform {
223469
223484
  }
223470
223485
  /**
223471
223486
  * Return a modified copy of `this` Transform so that its `matrix` part is rigid (`origin` part is untouched).
223472
- * * For details of how the matrix is modified to rigid, see documentation of `Matrix3d.axisOrderCrossProductsInPlace`
223487
+ * * @see [[Matrix3d.axisOrderCrossProductsInPlace]] documentation for details of how the matrix is modified to rigid.
223473
223488
  */
223474
223489
  cloneRigid(axisOrder = _Geometry__WEBPACK_IMPORTED_MODULE_0__.AxisOrder.XYZ) {
223475
223490
  const modifiedMatrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createRigidFromMatrix3d(this.matrix, axisOrder);
@@ -223477,7 +223492,7 @@ class Transform {
223477
223492
  return undefined;
223478
223493
  return new Transform(this.origin.cloneAsPoint3d(), modifiedMatrix);
223479
223494
  }
223480
- /** Create a Transform with the given `origin` and `matrix`. */
223495
+ /** Create a Transform with the given `origin` and `matrix`. Inputs are captured, not cloned. */
223481
223496
  static createRefs(origin, matrix, result) {
223482
223497
  if (!origin)
223483
223498
  origin = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero();
@@ -223488,7 +223503,7 @@ class Transform {
223488
223503
  }
223489
223504
  return new Transform(origin, matrix);
223490
223505
  }
223491
- /** Create a Transform with complete contents given */
223506
+ /** Create a Transform with complete contents given. `q` inputs make the matrix and `a` inputs make the origin */
223492
223507
  static createRowValues(qxx, qxy, qxz, ax, qyx, qyy, qyz, ay, qzx, qzy, qzz, az, result) {
223493
223508
  if (result) {
223494
223509
  result._origin.set(ax, ay, az);
@@ -223503,6 +223518,8 @@ class Transform {
223503
223518
  }
223504
223519
  /**
223505
223520
  * Create a Transform with translation provided by x,y,z parts.
223521
+ * * Translation Transform maps any vector `v` to `v + p` where `p = (x,y,z)`
223522
+ * * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/MoveCube
223506
223523
  * @param x x part of translation
223507
223524
  * @param y y part of translation
223508
223525
  * @param z z part of translation
@@ -223514,6 +223531,8 @@ class Transform {
223514
223531
  }
223515
223532
  /**
223516
223533
  * Create a Transform with specified `translation` part.
223534
+ * * Translation Transform maps any vector `v` to `v + translation`
223535
+ * * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/MoveCube
223517
223536
  * @param translation x,y,z parts of the translation
223518
223537
  * @param result optional pre-allocated Transform
223519
223538
  * @returns new or updated transform
@@ -223560,6 +223579,7 @@ class Transform {
223560
223579
  * local-to-world mapping.
223561
223580
  * * This function is a closely related to `createFixedPointAndMatrix` whose point input is the fixed point
223562
223581
  * of the world-to-world transformation.
223582
+ * * If origin is `undefined`, (0,0,0) is used. If matrix is `undefined` the identity matrix is used.
223563
223583
  */
223564
223584
  static createOriginAndMatrix(origin, matrix, result) {
223565
223585
  if (result) {
@@ -223585,7 +223605,7 @@ class Transform {
223585
223605
  }
223586
223606
  /**
223587
223607
  * Create a Transform such that its `matrix` part is rigid.
223588
- * * For details of how the matrix is created to be rigid, see documentation of `Matrix3d.createRigidFromColumns`
223608
+ * @see [[Matrix3d.createRigidFromColumns]] for details of how the matrix is created to be rigid.
223589
223609
  */
223590
223610
  static createRigidFromOriginAndColumns(origin, vectorX, vectorY, axisOrder, result) {
223591
223611
  const matrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder, result ? result._matrix : undefined);
@@ -223597,10 +223617,10 @@ class Transform {
223597
223617
  return result;
223598
223618
  }
223599
223619
  /**
223600
- * We don't want to pass "origin" to createRefs because createRefs does not clone "origin" and use its reference.
223601
- * That means if "origin" is changed via Transform at any point, the initial "origin" passed by the user is also
223602
- * changed. To avoid that, we pass undefined to createRefs. This would cause createRefs to create a new "origin"
223603
- * equals (0,0,0) which then we set it to the "origin" passed by user in the next line.
223620
+ * We don't want to pass "origin" to createRefs because createRefs does not clone "origin". That means if "origin"
223621
+ * is changed via Transform at any point, the initial "origin" passed by the user is also changed. To avoid that,
223622
+ * we pass "undefined" to createRefs so that it allocates a new point which then we set it to the "origin" which
223623
+ * is passed by user in the next line.
223604
223624
  */
223605
223625
  result = Transform.createRefs(undefined, matrix);
223606
223626
  result._origin.setFromPoint3d(origin);
@@ -223623,18 +223643,19 @@ class Transform {
223623
223643
  return Transform.createRefs(undefined, matrix.clone());
223624
223644
  }
223625
223645
  /**
223626
- * Create a transform with the specified `matrix` and points `a` and `b`. The returned Transform, transforms
223627
- * point `p` to `M*(p-a) + b` (i.e., `Tp = M*(p-a) + b`) so transforms point `a` to 'b'.
223646
+ * Create a transform with the specified `matrix` and points `a` and `b`. The returned Transform maps
223647
+ * point `p` to `M*(p-a) + b` (i.e., `Tp = M*(p-a) + b`), so maps `a` to 'b'.
223628
223648
  */
223629
223649
  static createMatrixPickupPutdown(matrix, a, b, result) {
223630
- // we define the origin o = b - M*a so Tp = M*p + o = M*p + (b - M*a) = M*(x-a) + b
223650
+ // we define the origin o = b - M*a so Tp = M*p + o = M*p + (b - M*a) = M*(p-a) + b
223631
223651
  const origin = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzMinusMatrixTimesXYZ(b, matrix, a);
223632
223652
  return Transform.createRefs(origin, matrix.clone(), result);
223633
223653
  }
223634
223654
  /**
223635
223655
  * Create a Transform which leaves the fixedPoint unchanged and scales everything else around it by
223636
- * a single scale factor. The returned Transform, transforms a point `p` to `M*p + (f - M*f)`
223656
+ * a single scale factor. The returned Transform maps a point `p` to `M*p + (f - M*f)`
223637
223657
  * where `f` is the fixedPoint and M is the scale matrix (i.e., `Tp = M*(p-f) + f`).
223658
+ * * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/ScaleCube
223638
223659
  */
223639
223660
  static createScaleAboutPoint(fixedPoint, scale, result) {
223640
223661
  const matrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createScale(scale, scale, scale);
@@ -223676,8 +223697,7 @@ class Transform {
223676
223697
  return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesCoordinates(this._origin, this._matrix, x, y, z, result);
223677
223698
  }
223678
223699
  /**
223679
- * Multiply a specific row (component) of the transform matrix times xyz and add it to the origin element
223680
- * at the same row. Return the result.
223700
+ * Multiply a specific row (component) of the 3x4 instance times (x,y,z,1). Return the result.
223681
223701
  */
223682
223702
  multiplyComponentXYZ(componentIndex, x, y, z = 0) {
223683
223703
  const coffs = this._matrix.coffs;
@@ -223685,8 +223705,7 @@ class Transform {
223685
223705
  return this.origin.at(componentIndex) + (coffs[idx] * x) + (coffs[idx + 1] * y) + (coffs[idx + 2] * z);
223686
223706
  }
223687
223707
  /**
223688
- * Multiply a specific row (component) of the transform matrix times xyz and add it to the origin element
223689
- * at the same row times w. Return the result.
223708
+ * Multiply a specific row (component) of the 3x4 instance times (x,y,z,w). Return the result.
223690
223709
  */
223691
223710
  multiplyComponentXYZW(componentIndex, x, y, z, w) {
223692
223711
  const coffs = this._matrix.coffs;
@@ -223694,31 +223713,38 @@ class Transform {
223694
223713
  return (this.origin.at(componentIndex) * w) + (coffs[idx] * x) + (coffs[idx + 1] * y) + (coffs[idx + 2] * z);
223695
223714
  }
223696
223715
  /**
223697
- * If `p = (x,y,z)` then transform is `Tp = M*p + o*w`. This function returns the transformed point as a new
223698
- * point4d (`Tp` as first 3 elements and `w` as last element) or in the pre-allocated result (if result is given).
223716
+ * Transform the homogeneous point. Return as a new `Point4d`, or in the pre-allocated result (if result is given).
223717
+ * * If `p = (x,y,z)` then this method computes `Tp = M*p + o*w` and returns the `Point4d` formed by `Tp` in the
223718
+ * first three coordinates, and `w` in the fourth.
223719
+ * * Logically, this is multiplication by the 4x4 matrix formed from the 3x4 instance augmented with fourth row 0001.
223699
223720
  */
223700
223721
  multiplyXYZW(x, y, z, w, result) {
223701
223722
  return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesWeightedCoordinates(this._origin, this._matrix, x, y, z, w, result);
223702
223723
  }
223703
223724
  /**
223704
- * If `p = (x,y,z)` then transform is `Tp = M*p + o*w`. This function returns the transformed point as a new
223705
- * Float64Array with size 4 (`Tp` as first 3 elements and `w` as last element) or in the pre-allocated result
223706
- * (if result is given).
223725
+ * Transform the homogeneous point. Return as new `Float64Array` with size 4, or in the pre-allocated result (if
223726
+ * result is given).
223727
+ * * If `p = (x,y,z)` then this method computes `Tp = M*p + o*w` and returns the `Float64Array` formed by `Tp`
223728
+ * in the first 3 numbers of the array and `w` as the fourth.
223729
+ * * Logically, this is multiplication by the 4x4 matrix formed from the 3x4 instance augmented with fourth row 0001.
223707
223730
  */
223708
223731
  multiplyXYZWToFloat64Array(x, y, z, w, result) {
223709
223732
  return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesWeightedCoordinatesToFloat64Array(this._origin, this._matrix, x, y, z, w, result);
223710
223733
  }
223711
223734
  /**
223712
- * If `p = (x,y,z)` then transform is `Tp = M*p + o`. This function returns the transformed point as a new
223713
- * Float64Array with size 3 (`Tp` as 3 elements) or in the pre-allocated result (if result is given).
223735
+ * * Transform the point. Return as new `Float64Array` with size 3, or in the pre-allocated result (if result is given).
223736
+ * * If `p = (x,y,z)` then this method computes `Tp = M*p + o` and returns it as the first 3 elements of the array.
223714
223737
  */
223715
223738
  multiplyXYZToFloat64Array(x, y, z, result) {
223716
223739
  return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesCoordinatesToFloat64Array(this._origin, this._matrix, x, y, z, result);
223717
223740
  }
223718
223741
  /**
223719
- * Treat the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix, with 0001 as the final row. Now multiply
223720
- * the transposed of this 4x4 matrix by Point4d given as xyzw. Return as a new point4d (`M*p` as first 3 elements
223721
- * and `o*p + w` as last element where `p = (x,y,z)`) or in the pre-allocated result (if result is given).
223742
+ * Multiply the homogeneous point by the transpose of `this` Transform. Return as a new `Point4d` or in the
223743
+ * pre-allocated result (if result is given).
223744
+ * * If `p = (x,y,z)` then this method computes `M^t*p` and returns it in the first three coordinates of the `Point4d`,
223745
+ * and `o*p + w` in the fourth.
223746
+ * * Logically, this is multiplication by the transpose of the 4x4 matrix formed from the 3x4 instance augmented with
223747
+ * fourth row 0001.
223722
223748
  */
223723
223749
  multiplyTransposeXYZW(x, y, z, w, result) {
223724
223750
  const coffs = this._matrix.coffs;
@@ -223737,9 +223763,9 @@ class Transform {
223737
223763
  this.multiplyPoint3dArrayInPlace(chain);
223738
223764
  }
223739
223765
  /**
223740
- * If for a point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223741
- * `p = MInverse * (point - o)`. This function returns the original point `p` if `point` is the
223742
- * transformed point (`Tp = point`).
223766
+ * Multiply the point by the inverse Transform.
223767
+ * * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse`
223768
+ * Transform has matrix part `MInverse` and origin part `-MInverse*o`.
223743
223769
  * * Return as a new point or in the optional `result`.
223744
223770
  * * Returns `undefined` if the `matrix` part if this Transform is singular.
223745
223771
  */
@@ -223747,9 +223773,13 @@ class Transform {
223747
223773
  return this._matrix.multiplyInverseXYZAsPoint3d(point.x - this._origin.x, point.y - this._origin.y, point.z - this._origin.z, result);
223748
223774
  }
223749
223775
  /**
223750
- * If for a point `p` we have `Tp = M*p + w*o = weightedPoint` (where `weightedPoint` is the transformed point), then
223751
- * `p = MInverse * (weightedPoint - w*o)`. This function returns a Point4d where first 3 elements are the original
223752
- * point `p` if `weightedPoint` is the transformed point (`Tp = weightedPoint`) and the last element is `w`.
223776
+ * Multiply the homogenous point by the inverse Transform.
223777
+ * * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse` Transform
223778
+ * has matrix part `MInverse` and origin part `-MInverse*o`.
223779
+ * * This method computes `TInverse p = MInverse*p - w*MInverse*o` and returns the `Point4d` formed by `TInverse*p`
223780
+ * in the first three coordinates, and `w` in the fourth.
223781
+ * * Logically, this is multiplication by the inverse of the 4x4 matrix formed from the 3x4 instance augmented with
223782
+ * fourth row 0001. This is equivalent to the 4x4 matrix formed in similar fashion from the inverse of this instance.
223753
223783
  * * Return as a new point or in the optional `result`.
223754
223784
  * * Returns `undefined` if the `matrix` part if this Transform is singular.
223755
223785
  */
@@ -223758,9 +223788,9 @@ class Transform {
223758
223788
  return this._matrix.multiplyInverseXYZW(weightedPoint.x - w * this.origin.x, weightedPoint.y - w * this.origin.y, weightedPoint.z - w * this.origin.z, w, result);
223759
223789
  }
223760
223790
  /**
223761
- * If for a point `p = (x,y,z)` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223762
- * `p = MInverse * (point - o)`. This function returns the original point `p` if `point` is the transformed
223763
- * point (`Tp = point`).
223791
+ * Multiply the point by the inverse Transform.
223792
+ * * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse` Transform
223793
+ * has matrix part `MInverse` and origin part `-MInverse*o`.
223764
223794
  * * Return as a new point or in the optional `result`.
223765
223795
  * * Returns `undefined` if the `matrix` part if this Transform is singular.
223766
223796
  */
@@ -223799,35 +223829,35 @@ class Transform {
223799
223829
  return numSource;
223800
223830
  }
223801
223831
  /**
223802
- * If for each point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223803
- * `p = MInverse * (point - o)`. This function returns the array of original points `p[]` if `points`
223804
- * is the array of transformed point (`Tp = point` for each `p` and `point`).
223805
- * * If `results` is given, resize it to match the input `points` array and update it with original points `p[]`.
223806
- * * If `results` is not given, return a new array.
223832
+ * Multiply each point in the array by the inverse of `this` Transform.
223833
+ * * For a transform `T = [M o]` the inverse transform `T' = [M' -M'o]` exists if and only if `M` has an inverse
223834
+ * `M'`. Indeed, for any point `p`, we have `T'Tp = T'(Mp + o) = M'(Mp + o) - M'o = M'Mp + M'o - M'o = p.`
223835
+ * * If `result` is given, resize it to match the input `points` array and update it with original points `p[]`.
223836
+ * * If `result` is not given, return a new array.
223807
223837
  * * Returns `undefined` if the `matrix` part if this Transform is singular.
223808
223838
  */
223809
- multiplyInversePoint3dArray(points, results) {
223839
+ multiplyInversePoint3dArray(points, result) {
223810
223840
  if (!this._matrix.computeCachedInverse(true))
223811
223841
  return undefined;
223812
223842
  const originX = this.origin.x;
223813
223843
  const originY = this.origin.y;
223814
223844
  const originZ = this.origin.z;
223815
- if (results) {
223816
- const n = Transform.matchArrayLengths(points, results, _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero);
223845
+ if (result) {
223846
+ const n = Transform.matchArrayLengths(points, result, _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero);
223817
223847
  for (let i = 0; i < n; i++)
223818
- this._matrix.multiplyInverseXYZAsPoint3d(points[i].x - originX, points[i].y - originY, points[i].z - originZ, results[i]);
223848
+ this._matrix.multiplyInverseXYZAsPoint3d(points[i].x - originX, points[i].y - originY, points[i].z - originZ, result[i]);
223849
+ return result;
223819
223850
  }
223820
- results = [];
223851
+ result = [];
223821
223852
  for (const point of points)
223822
- results.push(this._matrix.multiplyInverseXYZAsPoint3d(point.x - originX, point.y - originY, point.z - originZ));
223823
- return results;
223853
+ result.push(this._matrix.multiplyInverseXYZAsPoint3d(point.x - originX, point.y - originY, point.z - originZ));
223854
+ return result;
223824
223855
  }
223825
223856
  /**
223826
- * If for each point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223827
- * `p = MInverse * (point - o)`. This function calculates the array of original points `p[]` if `points`
223828
- * is the array of transformed point (`Tp = point` for each `p` and `point`) and replaces `points`
223829
- * with the array of original points.
223830
- * * Returns `true` if the `matrix` part if this Transform is invertible and `false if singular.
223857
+ * Multiply each point in the array by the inverse of `this` Transform in place.
223858
+ * * For a transform `T = [M o]` the inverse transform `T' = [M' -M'o]` exists if and only if `M` has an inverse
223859
+ * `M'`. Indeed, for any point `p`, we have `T'Tp = T'(Mp + o) = M'(Mp + o) - M'o = M'Mp + M'o - M'o = p.`
223860
+ * * Returns `true` if the `matrix` part if this Transform is invertible and `false` if singular.
223831
223861
  */
223832
223862
  multiplyInversePoint3dArrayInPlace(points) {
223833
223863
  if (!this._matrix.computeCachedInverse(true))
@@ -223896,7 +223926,8 @@ class Transform {
223896
223926
  /**
223897
223927
  * Calculate `transformA * transformB` and store it into the calling instance (`this`).
223898
223928
  * * **Note:** If `transformA = [A a]` and `transformB = [B b]` then `transformA * transformB` is defined as
223899
- * `[A*B Ab+a]`. See `multiplyTransformTransform` doc for math details.
223929
+ * `[A*B Ab+a]`.
223930
+ * * @see [[multiplyTransformTransform]] documentation for math details.
223900
223931
  * @param transformA first operand
223901
223932
  * @param transformB second operand
223902
223933
  */
@@ -223906,19 +223937,17 @@ class Transform {
223906
223937
  }
223907
223938
  /**
223908
223939
  * Multiply `this` Transform times `other` Transform.
223909
- * **Note:** If `this = [A a]` and `other = [B b]` then `this * other` is defined as [A*B Ab+a].
223910
- * That's because we create a 4x4 matrix for each Transform with the 3x3 `matrix` and `origin`
223911
- * as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we multiply those two 4x4 matrixes:
223940
+ * * **Note:** If `this = [A a]` and `other = [B b]` then `this * other` is defined as [A*B Ab+a] because:
223912
223941
  * ```
223913
223942
  * equation
223914
223943
  * \begin{matrix}
223915
- * \text{`this` Transform with `matrix` part }\bold{A}\text{ and `origin` part }\bold{a} & \blockTransform{A}{a}\\
223916
- * \text{`other` Transform with `matrix` part }\bold{B}\text{ and `origin` part }\bold{b} & \blockTransform{B}{b} \\
223944
+ * \text{this Transform with matrix part }\bold{A}\text{ and origin part }\bold{a} & \blockTransform{A}{a}\\
223945
+ * \text{other Transform with matrix part }\bold{B}\text{ and origin part }\bold{b} & \blockTransform{B}{b} \\
223917
223946
  * \text{product}& \blockTransform{A}{a}\blockTransform{B}{b}=\blockTransform{AB}{Ab + a}
223918
223947
  * \end{matrix}
223919
223948
  * ```
223920
223949
  * @param other the 'other` Transform to be multiplied to `this` Transform.
223921
- * @param result optional preallocated result to reuse.
223950
+ * @param result optional preallocated `result` to reuse.
223922
223951
  */
223923
223952
  multiplyTransformTransform(other, result) {
223924
223953
  if (!result)
@@ -223928,20 +223957,17 @@ class Transform {
223928
223957
  }
223929
223958
  /**
223930
223959
  * Multiply `this` Transform times `other` Matrix3d (considered to be a Transform with 0 `origin`).
223931
- * **Note:** If `this = [A a]`, then we promote `other` matrix to be a Transform [B 0].
223932
- * Then `this * other` is defined as [A*B a]. That's because we create a 4x4 matrix for each Transform
223933
- * with the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we
223934
- * multiply those two 4x4 matrixes:
223960
+ * * **Note:** If `this = [A a]` and `other = [B 0]`, then `this * other` is defined as [A*B a] because:
223935
223961
  * ```
223936
223962
  * equation
223937
223963
  * \begin{matrix}
223938
- * \text{`this` Transform with `matrix` part }\bold{A}\text{ and `origin` part }\bold{a} & \blockTransform{A}{a}\\
223939
- * \text{`other` matrix }\bold{B}\text{ promoted to block Transform} & \blockTransform{B}{0} \\
223964
+ * \text{this Transform with matrix part }\bold{A}\text{ and origin part }\bold{a} & \blockTransform{A}{a}\\
223965
+ * \text{other matrix }\bold{B}\text{ promoted to block Transform} & \blockTransform{B}{0} \\
223940
223966
  * \text{product}& \blockTransform{A}{a}\blockTransform{B}{0}=\blockTransform{AB}{a}
223941
223967
  * \end{matrix}
223942
223968
  * ```
223943
223969
  * @param other the `other` Matrix3d to be multiplied to `this` Transform.
223944
- * @param result optional preallocated result to reuse.
223970
+ * @param result optional preallocated `result` to reuse.
223945
223971
  */
223946
223972
  multiplyTransformMatrix3d(other, result) {
223947
223973
  if (!result)
@@ -223951,13 +223977,13 @@ class Transform {
223951
223977
  return result;
223952
223978
  }
223953
223979
  /**
223954
- * Return the Range of the transformed corners.
223980
+ * Return the range of the transformed corners.
223955
223981
  * * The 8 corners are transformed individually.
223956
223982
  * * **Note:** Suppose you have a geometry, a range box around that geometry, and your Transform is a rotation.
223957
223983
  * If you rotate the range box and recompute a new range box around the rotated range box, then the new range
223958
223984
  * box will have a larger volume than the original range box. However, if you rotate the geometry itself and
223959
223985
  * then recompute the range box, it will be a tighter range box around the rotated geometry. `multiplyRange`
223960
- * function creates the larger range box because it only has access to the range box and the geometry itself.
223986
+ * function creates the larger range box because it only has access to the range box and not the geometry itself.
223961
223987
  */
223962
223988
  multiplyRange(range, result) {
223963
223989
  if (range.isNull)
@@ -223981,7 +224007,7 @@ class Transform {
223981
224007
  }
223982
224008
  /**
223983
224009
  * Return a Transform which is the inverse of `this` Transform.
223984
- * * If `transform = [M o]` then `transformInverse = [MInverse MInverse*-o]`
224010
+ * * If `transform = [M o]` then `transformInverse = [MInverse -MInverse*o]`
223985
224011
  * * Return `undefined` if this Transform's matrix is singular.
223986
224012
  */
223987
224013
  inverse(result) {
@@ -223996,14 +224022,14 @@ class Transform {
223996
224022
  return Transform.createRefs(matrixInverse.multiplyXYZ(-this._origin.x, -this._origin.y, -this._origin.z), matrixInverse);
223997
224023
  }
223998
224024
  /**
223999
- * Initialize 2 Transforms: First Transform maps a box (axis aligned) specified by `min` and `max` to
224000
- * the unit box specified by 000 and 111 and inverse of it. Second Transform is the reverse of first.
224001
- * @param min the min corner of the box
224002
- * @param max the max corner of the box
224003
- * @param npcToGlobal maps global (the unit box specified by 000 and 111) to NPC (a box specified by `min`
224004
- * and `max`). Object created by caller, re-initialized here.
224005
- * @param globalToNpc maps NPC (a box specified by `min` and `max`) to global (the unit box specified by
224006
- * 000 and 111). Object created by caller, re-initialized here.
224025
+ * Initialize 2 Transforms that map between the unit box (specified by 000 and 111) and the range box specified
224026
+ * by the input points.
224027
+ * @param min the min corner of the range box
224028
+ * @param max the max corner of the range box
224029
+ * @param npcToGlobal maps NPC coordinates into range box coordinates. Specifically, maps 000 to `min` and maps
224030
+ * 111 to `max`. This Transform is the inverse of `globalToNpc`. Object created by caller, re-initialized here.
224031
+ * @param globalToNpc maps range box coordinates into NPC coordinates. Specifically, maps `min` to 000 and maps
224032
+ * `max` to 111. This Transform is the inverse of `npcToGlobal`. Object created by caller, re-initialized here.
224007
224033
  * * NPC stands for `Normalized Projection Coordinate`
224008
224034
  */
224009
224035
  static initFromRange(min, max, npcToGlobal, globalToNpc) {
@@ -224256,11 +224282,11 @@ __webpack_require__.r(__webpack_exports__);
224256
224282
  */
224257
224283
  class YawPitchRollAngles {
224258
224284
  /**
224259
- * constructor
224285
+ * Constructor
224260
224286
  * @param yaw counterclockwise rotation angle around z
224261
224287
  * @param pitch **clockwise** rotation angle around y
224262
224288
  * @param roll counterclockwise rotation angle around x
224263
- * */
224289
+ */
224264
224290
  constructor(yaw = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero(), pitch = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero(), roll = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero()) {
224265
224291
  this.yaw = yaw;
224266
224292
  this.pitch = pitch;
@@ -224274,29 +224300,29 @@ class YawPitchRollAngles {
224274
224300
  return Object.freeze(this);
224275
224301
  }
224276
224302
  /**
224277
- * constructor for YawPitchRollAngles with angles in degrees.
224303
+ * Constructor for YawPitchRollAngles with angles in degrees.
224278
224304
  * @param yawDegrees counterclockwise rotation angle (in degrees) around z
224279
224305
  * @param pitchDegrees **clockwise** rotation angle (in degrees) around y
224280
224306
  * @param rollDegrees counterclockwise rotation angle (in degrees) around x
224281
- * */
224307
+ */
224282
224308
  static createDegrees(yawDegrees, pitchDegrees, rollDegrees) {
224283
224309
  return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(yawDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(pitchDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(rollDegrees));
224284
224310
  }
224285
224311
  /**
224286
- * constructor for YawPitchRollAngles with angles in radians.
224312
+ * Constructor for YawPitchRollAngles with angles in radians.
224287
224313
  * @param yawRadians counterclockwise rotation angle (in radians) around z
224288
224314
  * @param pitchRadians **clockwise** rotation angle (in radians) around y
224289
224315
  * @param rollRadians counterclockwise rotation angle (in radians) around x
224290
- * */
224316
+ */
224291
224317
  static createRadians(yawRadians, pitchRadians, rollRadians) {
224292
224318
  return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(yawRadians), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(pitchRadians), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(rollRadians));
224293
224319
  }
224294
- /** construct a `YawPitchRoll` object from an object with 3 named angles */
224320
+ /** Construct a `YawPitchRoll` object from an object with 3 named angles */
224295
224321
  static fromJSON(json) {
224296
224322
  json = json ? json : {};
224297
224323
  return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.yaw), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.pitch), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.roll));
224298
224324
  }
224299
- /** populate yaw, pitch and roll fields using `Angle.fromJSON` */
224325
+ /** Populate yaw, pitch and roll fields using `Angle.fromJSON` */
224300
224326
  setFromJSON(json) {
224301
224327
  json = json ? json : {};
224302
224328
  this.yaw = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.yaw);
@@ -224306,7 +224332,7 @@ class YawPitchRollAngles {
224306
224332
  /**
224307
224333
  * Convert to a JSON object of form { pitch: 20 , roll: 30 , yaw: 10 }. Angles are in degrees.
224308
224334
  * Any values that are exactly zero (with tolerance `Geometry.smallAngleRadians`) are omitted.
224309
- **/
224335
+ */
224310
224336
  toJSON() {
224311
224337
  const val = {};
224312
224338
  if (!this.pitch.isAlmostZero)
@@ -224336,15 +224362,12 @@ class YawPitchRollAngles {
224336
224362
  && this.pitch.isAlmostEqualAllowPeriodShift(other.pitch)
224337
224363
  && this.roll.isAlmostEqualAllowPeriodShift(other.roll);
224338
224364
  }
224339
- /**
224340
- * Make a copy of this YawPitchRollAngles.
224341
- */
224365
+ /** Make a copy of this YawPitchRollAngles */
224342
224366
  clone() {
224343
224367
  return new YawPitchRollAngles(this.yaw.clone(), this.pitch.clone(), this.roll.clone());
224344
224368
  }
224345
224369
  /**
224346
224370
  * Expand the angles into a (rigid rotation) matrix.
224347
- *
224348
224371
  * * The returned matrix is "rigid" (i.e., it has unit length rows and columns, and its transpose is its inverse).
224349
224372
  * * The rigid matrix is always a right handed coordinate system.
224350
224373
  * @param result optional pre-allocated `Matrix3d`
@@ -224381,7 +224404,8 @@ class YawPitchRollAngles {
224381
224404
  */
224382
224405
  return _Matrix3d__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRowValues(cz * cy, -(sz * cx + cz * sy * sx), (sz * sx - cz * sy * cx), sz * cy, (cz * cx - sz * sy * sx), -(cz * sx + sz * sy * cx), sy, cy * sx, cy * cx, result);
224383
224406
  }
224384
- /** Returns true if this rotation does nothing.
224407
+ /**
224408
+ * Returns true if this rotation does nothing.
224385
224409
  * * If allowPeriodShift is false, any nonzero angle is considered a non-identity
224386
224410
  * * If allowPeriodShift is true, all angles are individually allowed to be any multiple of 360 degrees.
224387
224411
  */
@@ -224426,7 +224450,8 @@ class YawPitchRollAngles {
224426
224450
  angles: YawPitchRollAngles.createFromMatrix3d(transform.matrix),
224427
224451
  };
224428
224452
  }
224429
- /** Attempts to create a YawPitchRollAngles object from a Matrix3d
224453
+ /**
224454
+ * Attempts to create a YawPitchRollAngles object from a Matrix3d
224430
224455
  * * This conversion fails if the matrix is not rigid (unit rows and columns, and transpose is inverse)
224431
224456
  * * In the failure case the method's return value is `undefined`.
224432
224457
  * * In the failure case, if the optional result was supplied, that result will nonetheless be filled with
@@ -248738,19 +248763,22 @@ class SteppedIndexFunctionFactory {
248738
248763
  static createConstant(value = 0) {
248739
248764
  return (_i, _n) => value;
248740
248765
  }
248741
- /** Return a function that steps linearly
248766
+ /**
248767
+ * Return a function that steps linearly
248742
248768
  * * f(i,n) = y0 + (i/n) * a
248743
248769
  */
248744
248770
  static createLinear(a, f0 = 0) {
248745
248771
  return (i, n) => (f0 + a * (i / n));
248746
248772
  }
248747
- /** Return a function that steps with cosine of angles in sweep
248773
+ /**
248774
+ * Return a function that steps with cosine of angles in sweep
248748
248775
  * * f(i,n) = y0 + amplitude * cos(i/n)
248749
248776
  */
248750
248777
  static createCosine(amplitude, sweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.create360(), f0 = 0) {
248751
248778
  return (i, n) => (f0 + amplitude * Math.cos(sweep.fractionToRadians(i / n)));
248752
248779
  }
248753
- /** Return a function that steps with cosine of angles in sweep.
248780
+ /**
248781
+ * Return a function that steps with cosine of angles in sweep.
248754
248782
  * * f(i,n) = y0 + amplitude * sin(i/n)
248755
248783
  */
248756
248784
  static createSine(amplitude, sweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.create360(), f0 = 0) {
@@ -248762,7 +248790,8 @@ class SteppedIndexFunctionFactory {
248762
248790
  * @alpha
248763
248791
  */
248764
248792
  class Sample {
248765
- /** Return an array of Point3d, with x,y,z all stepping through a range of values.
248793
+ /**
248794
+ * Return an array of Point3d, with x,y,z all stepping through a range of values.
248766
248795
  * x varies fastest, then y then z
248767
248796
  */
248768
248797
  static createPoint3dLattice(low, step, high) {
@@ -248773,7 +248802,8 @@ class Sample {
248773
248802
  points.push(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x, y, z));
248774
248803
  return points;
248775
248804
  }
248776
- /** Return an array of Point2d, with x,y all stepping through a range of values.
248805
+ /**
248806
+ * Return an array of Point2d, with x,y all stepping through a range of values.
248777
248807
  * x varies fastest, then y
248778
248808
  */
248779
248809
  static createPoint2dLattice(low, step, high) {
@@ -248821,7 +248851,8 @@ class Sample {
248821
248851
  static createCenteredRectangleXY(cx, cy, ax, ay, z = 0) {
248822
248852
  return this.createRectangleXY(cx - ax, cy - ay, 2 * ax, 2 * ay, z);
248823
248853
  }
248824
- /** Access the last point in the array. push another shifted by dx,dy,dz.
248854
+ /**
248855
+ * Access the last point in the array. push another shifted by dx,dy,dz.
248825
248856
  * * No push if all are 0.
248826
248857
  * * If array is empty, push a leading 000
248827
248858
  */
@@ -248843,7 +248874,8 @@ class Sample {
248843
248874
  points.push(points[0].clone());
248844
248875
  return points;
248845
248876
  }
248846
- /** Create points for an L shaped polygon
248877
+ /**
248878
+ * Create points for an L shaped polygon
248847
248879
  * * lower left at x0,y0.
248848
248880
  * * ax,ay are larger side lengths (lower left to corners along x and y directions)
248849
248881
  * * bx,by are smaller side lengths (inner corner to points along x and y directions)
@@ -248868,7 +248900,7 @@ class Sample {
248868
248900
  return [
248869
248901
  plane0, plane1, plane2,
248870
248902
  _clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createNormalAndDistance(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(3, 4, 0), 2.0),
248871
- _clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createEdgeXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(24, 32, 0))
248903
+ _clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createEdgeXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(24, 32, 0)),
248872
248904
  ];
248873
248905
  }
248874
248906
  /**
@@ -248884,16 +248916,17 @@ class Sample {
248884
248916
  const quadrant4 = _clipping_ConvexClipPlaneSet__WEBPACK_IMPORTED_MODULE_7__.ConvexClipPlaneSet.createXYBox(0, -1, 1, 0);
248885
248917
  result.push(_clipping_UnionOfConvexClipPlaneSets__WEBPACK_IMPORTED_MODULE_8__.UnionOfConvexClipPlaneSets.createConvexSets([
248886
248918
  quadrant1.clone(),
248887
- quadrant4.clone()
248919
+ quadrant4.clone(),
248888
248920
  ]));
248889
248921
  result.push(_clipping_UnionOfConvexClipPlaneSets__WEBPACK_IMPORTED_MODULE_8__.UnionOfConvexClipPlaneSets.createConvexSets([
248890
248922
  quadrant1.clone(),
248891
248923
  quadrant2.clone(),
248892
- quadrant4.clone()
248924
+ quadrant4.clone(),
248893
248925
  ]));
248894
248926
  return result;
248895
248927
  }
248896
- /** Create (unweighted) bspline curves.
248928
+ /**
248929
+ * Create (unweighted) bspline curves.
248897
248930
  * order varies from 2 to 5
248898
248931
  */
248899
248932
  static createBsplineCurves(includeMultipleKnots = false) {
@@ -248930,7 +248963,8 @@ class Sample {
248930
248963
  }
248931
248964
  return result;
248932
248965
  }
248933
- /** Create weighted bspline curves.
248966
+ /**
248967
+ * Create weighted bspline curves.
248934
248968
  * order varies from 2 to 5
248935
248969
  */
248936
248970
  static createBspline3dHCurves() {
@@ -248968,8 +249002,7 @@ class Sample {
248968
249002
  }
248969
249003
  return result;
248970
249004
  }
248971
- /** Create weighted bsplines for circular arcs.
248972
- */
249005
+ /** Create weighted bsplines for circular arcs. */
248973
249006
  static createBspline3dHArcs() {
248974
249007
  const result = [];
248975
249008
  const halfRadians = _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.degreesToRadians(60.0);
@@ -248984,14 +249017,15 @@ class Sample {
248984
249017
  _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(-1, 0, 0, c),
248985
249018
  _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(-c, -s, 0, 1),
248986
249019
  _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(c, -s, 0, c),
248987
- _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(1, 0, 0, 1)
249020
+ _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(1, 0, 0, 1),
248988
249021
  ];
248989
249022
  const knots = [0, 0, 1, 1, 2, 2, 3, 3];
248990
249023
  const curve = _bspline_BSplineCurve3dH__WEBPACK_IMPORTED_MODULE_11__.BSplineCurve3dH.create(points, knots, 3);
248991
249024
  result.push(curve);
248992
249025
  return result;
248993
249026
  }
248994
- /** Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.
249027
+ /**
249028
+ * Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.
248995
249029
  * @param points array of [x,y,z,w]
248996
249030
  * @param center center of arc
248997
249031
  * @param axes matrix with 0 and 90 degree axes
@@ -249037,7 +249071,7 @@ class Sample {
249037
249071
  result.push(b);
249038
249072
  return result;
249039
249073
  }
249040
- /** create a plane from origin and normal coordinates -- default to 001 normal if needed. */
249074
+ /** Create a plane from origin and normal coordinates -- default to 001 normal if needed. */
249041
249075
  static createPlane(x, y, z, u, v, w) {
249042
249076
  const point = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x, y, z);
249043
249077
  const vector = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(u, v, w).normalize();
@@ -249057,22 +249091,23 @@ class Sample {
249057
249091
  return [
249058
249092
  _curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
249059
249093
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
249060
- _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0)
249094
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
249061
249095
  ]),
249062
249096
  _curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
249063
249097
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
249064
249098
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
249065
- _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0)
249099
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0),
249066
249100
  ]),
249067
249101
  _curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
249068
249102
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
249069
249103
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
249070
249104
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0),
249071
- _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(2, 2, 0)
249072
- ])
249105
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(2, 2, 0),
249106
+ ]),
249073
249107
  ];
249074
249108
  }
249075
- /** Assorted Matrix3d:
249109
+ /**
249110
+ * Assorted Matrix3d:
249076
249111
  * * identity
249077
249112
  * * rotation around x
249078
249113
  * * rotation around general vector
@@ -249097,10 +249132,11 @@ class Sample {
249097
249132
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(1, 2, 0),
249098
249133
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(1, 2, 3),
249099
249134
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createUniformScale(2.0)),
249100
- _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createRadians(10)))
249135
+ _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createRadians(10))),
249101
249136
  ];
249102
249137
  }
249103
- /** Return an array of Matrix3d with various skew and scale. This includes at least:
249138
+ /**
249139
+ * Return an array of Matrix3d with various skew and scale. This includes at least:
249104
249140
  * * identity
249105
249141
  * * 3 distinct diagonals.
249106
249142
  * * The distinct diagonal base with smaller value added to other 6 spots in succession.
@@ -249119,9 +249155,10 @@ class Sample {
249119
249155
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(5, 2, 3, 2, 6, 1, -1, 2, 7),
249120
249156
  ];
249121
249157
  }
249122
- /** Return an array of singular Matrix3d. This includes at least:
249158
+ /**
249159
+ * Return an array of singular Matrix3d. This includes at least:
249123
249160
  * * all zeros
249124
- * * one nonzero column
249161
+ * * one non-zero column
249125
249162
  * * two independent columns, third is zero
249126
249163
  * * two independent columns, third is sum of those
249127
249164
  * * two independent columns, third is copy of one
@@ -249133,26 +249170,26 @@ class Sample {
249133
249170
  const vector0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createZero();
249134
249171
  return [
249135
249172
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createZero(),
249136
- // one nonzero column
249173
+ // one non-zero column
249137
249174
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vector0, vector0),
249138
249175
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vectorU, vector0),
249139
- _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vector0, vector0),
249140
- // two independent nonzero columns with zero
249176
+ _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vector0, vectorU),
249177
+ // two independent non-zero columns with one zero column
249141
249178
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vector0),
249142
249179
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vectorU, vectorV),
249143
- _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorV, vector0, vector0),
249144
- // third column dependent
249180
+ _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vector0, vectorV),
249181
+ // two independent columns with one dependent column
249145
249182
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorUPlusV),
249146
249183
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorUPlusV, vectorV),
249147
- _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorUPlusV, vectorV, vectorU),
249148
- // two independent with duplicate
249149
- _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorU),
249184
+ _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorUPlusV, vectorU, vectorV),
249185
+ // two independent with columns with one duplicate column
249150
249186
  _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorU, vectorV),
249151
- _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorV, vectorV, vectorU)
249187
+ _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorU),
249188
+ _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorV, vectorU, vectorU),
249152
249189
  ];
249153
249190
  }
249154
249191
  /**
249155
- * * Return an array of rigid transforms. This includes (at least)
249192
+ * Return an array of rigid transforms. This includes (at least)
249156
249193
  * * Identity
249157
249194
  * * translation with identity matrix
249158
249195
  * * rotation around origin and arbitrary vector
@@ -249167,16 +249204,15 @@ class Sample {
249167
249204
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(distanceScale3 * 1, distanceScale3 * 2, distanceScale3 * 3),
249168
249205
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(10))),
249169
249206
  _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(10))),
249170
- _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-2, 1, 4), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(35)))
249207
+ _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-2, 1, 4), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(35))),
249171
249208
  ];
249172
249209
  }
249173
- /**
249174
- * Return a single rigid transform with all terms nonzero.
249175
- */
249210
+ /** Return a single rigid transform with all terms nonzero. */
249176
249211
  static createMessyRigidTransform(fixedPoint) {
249177
249212
  return _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(fixedPoint ? fixedPoint : _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(0.3, -0.2, 1.2), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15.7)));
249178
249213
  }
249179
- /** Return various rigid matrices:
249214
+ /**
249215
+ * Return various rigid matrices:
249180
249216
  * * identity
249181
249217
  * * small rotations around x, y, z
249182
249218
  * * small rotation around (1,2,3)
@@ -249206,9 +249242,7 @@ class Sample {
249206
249242
  }
249207
249243
  return result;
249208
249244
  }
249209
- /**
249210
- * Create full Map4d for each `Sample.createInvertibleTransforms ()`
249211
- */
249245
+ /** Create full Map4d for each `Sample.createInvertibleTransforms()` */
249212
249246
  static createMap4ds() {
249213
249247
  const result = [];
249214
249248
  let transform;
@@ -249226,7 +249260,12 @@ class Sample {
249226
249260
  static createSimplePaths(withGaps = false) {
249227
249261
  const point0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0);
249228
249262
  const point1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0);
249229
- const p1 = [point1, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)];
249263
+ const p1 = [
249264
+ point1, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0),
249265
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0),
249266
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0),
249267
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0),
249268
+ ];
249230
249269
  const segment1 = _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, point1);
249231
249270
  const vectorU = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitX(3);
249232
249271
  const vectorV = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(3);
@@ -249241,7 +249280,8 @@ class Sample {
249241
249280
  simplePaths.push(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0)), _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(5, 0, 0))));
249242
249281
  return simplePaths;
249243
249282
  }
249244
- /** Assorted `Path` with lines and arcs.
249283
+ /**
249284
+ * Assorted `Path` with lines and arcs.
249245
249285
  * Specifically useful for offset tests.
249246
249286
  */
249247
249287
  static createLineArcPaths() {
@@ -249270,12 +249310,16 @@ class Sample {
249270
249310
  }
249271
249311
  /** Assorted `PointString3d` objects. */
249272
249312
  static createSimplePointStrings() {
249273
- const p1 = [[_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)], [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)], [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)]]];
249313
+ const p1 = [
249314
+ [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)],
249315
+ [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)],
249316
+ [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)]],
249317
+ ];
249274
249318
  const simplePaths = [
249275
249319
  _curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0)),
249276
249320
  _curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0)),
249277
249321
  _curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 5, 0)),
249278
- _curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(p1)
249322
+ _curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(p1),
249279
249323
  ];
249280
249324
  return simplePaths;
249281
249325
  }
@@ -249304,8 +249348,7 @@ class Sample {
249304
249348
  * @param dx1 distance along x axis at y=dy
249305
249349
  * @param numPhase number of phases of the jump.
249306
249350
  * @param dyReturn y value for return to origin. If 0, the wave ends at y=0 after then final "down" with one extra horizontal dx0
249307
- * If nonzero, rise to that y value, return to x=0, and return down to origin.
249308
- *
249351
+ * If nonzero, rise to that y value, return to x=0, and return down to origin.
249309
249352
  */
249310
249353
  static createSquareWave(origin, dx0, dy, dx1, numPhase, dyReturn) {
249311
249354
  const result = [origin.clone()];
@@ -249366,7 +249409,7 @@ class Sample {
249366
249409
  }
249367
249410
  return points;
249368
249411
  }
249369
- /** append sawtooth with x distances successively scaled by xFactor */
249412
+ /** Append sawtooth with x distances successively scaled by xFactor */
249370
249413
  static appendVariableSawTooth(points, dxLow, riseX, riseY, dxHigh, numPhase, xFactor) {
249371
249414
  let factor = 1.0;
249372
249415
  for (let i = 0; i < numPhase; i++) {
@@ -249407,7 +249450,8 @@ class Sample {
249407
249450
  data.push(data[0].clone());
249408
249451
  return data;
249409
249452
  }
249410
- /** append to a linestring, taking steps along given vector directions
249453
+ /**
249454
+ * Append to a linestring, taking steps along given vector directions
249411
249455
  * If the linestring is empty, a 000 point is added.
249412
249456
  * @param linestring LineString3d to receive points.
249413
249457
  * @param numPhase number of phases of the sawtooth
@@ -249424,7 +249468,8 @@ class Sample {
249424
249468
  }
249425
249469
  }
249426
249470
  }
249427
- /** Assorted regions with arc boundaries
249471
+ /**
249472
+ * Assorted regions with arc boundaries
249428
249473
  * * full circle
249429
249474
  * * with varying sweep:
249430
249475
  * * partial arc with single chord closure
@@ -249451,7 +249496,8 @@ class Sample {
249451
249496
  }
249452
249497
  return result;
249453
249498
  }
249454
- /** Assorted loops in xy plane:
249499
+ /**
249500
+ * Assorted loops in xy plane:
249455
249501
  * * unit square
249456
249502
  * * rectangle
249457
249503
  * * L shape
@@ -249491,10 +249537,14 @@ class Sample {
249491
249537
  ];
249492
249538
  if (includeBCurves) {
249493
249539
  const ey = 1.0;
249494
- result.push(_curve_ParityRegion__WEBPACK_IMPORTED_MODULE_24__.ParityRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, pointA), _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_9__.BSplineCurve3d.createUniformKnots([pointA, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, ey),
249540
+ result.push(_curve_ParityRegion__WEBPACK_IMPORTED_MODULE_24__.ParityRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, pointA), _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_9__.BSplineCurve3d.createUniformKnots([
249541
+ pointA,
249542
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, ey),
249495
249543
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 2 * ey),
249496
249544
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 2, 3 * ey),
249497
- _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 4 * ey), pointB], 3), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0))));
249545
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 4 * ey),
249546
+ pointB,
249547
+ ], 3), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0))));
249498
249548
  }
249499
249549
  return result;
249500
249550
  }
@@ -249508,7 +249558,7 @@ class Sample {
249508
249558
  const by = 2.0;
249509
249559
  const result = [
249510
249560
  _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), ax, ay)), _curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 2 * ay, 0), bx, by))),
249511
- _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.create(Sample.createRectangleXY(parityRange.low.x, parityRange.high.y + 0.5, parityRange.xLength(), parityRange.yLength()))), parityRegions[0])
249561
+ _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.create(Sample.createRectangleXY(parityRange.low.x, parityRange.high.y + 0.5, parityRange.xLength(), parityRange.yLength()))), parityRegions[0]),
249512
249562
  ];
249513
249563
  return result;
249514
249564
  }
@@ -249527,7 +249577,8 @@ class Sample {
249527
249577
  ];
249528
249578
  return result;
249529
249579
  }
249530
- /** Assorted smooth curve primitives:
249580
+ /**
249581
+ * Assorted smooth curve primitives:
249531
249582
  * * line segments
249532
249583
  * * arcs
249533
249584
  */
@@ -249542,7 +249593,7 @@ class Sample {
249542
249593
  _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(size, alpha * size, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-alpha * beta * size, beta * size, 0), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(-40, 270)),
249543
249594
  ];
249544
249595
  }
249545
- /** assorted small polyface grids, possibly expanded by gridMultiplier */
249596
+ /** Assorted small polyface grids, possibly expanded by gridMultiplier */
249546
249597
  static createSimpleIndexedPolyfaces(gridMultiplier) {
249547
249598
  const meshes = [
249548
249599
  Sample.createTriangularUnitGridPolyface(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitX(), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(), gridMultiplier * 3, 2 * gridMultiplier, false, false, false),
@@ -249773,7 +249824,7 @@ class Sample {
249773
249824
  }
249774
249825
  return _bspline_BSplineSurface__WEBPACK_IMPORTED_MODULE_28__.BSplineSurface3dH.create(xyzPoles, weights, numU, orderU, undefined, numV, orderV, undefined);
249775
249826
  }
249776
- /** assorted linear sweeps */
249827
+ /** Assorted linear sweeps */
249777
249828
  static createSimpleLinearSweeps() {
249778
249829
  const result = [];
249779
249830
  const base = _curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(), 2, 3));
@@ -249792,7 +249843,7 @@ class Sample {
249792
249843
  const xyPoints = [
249793
249844
  _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(0, 0),
249794
249845
  _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 0),
249795
- _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 1)
249846
+ _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 1),
249796
249847
  ];
249797
249848
  result.push(_solid_LinearSweep__WEBPACK_IMPORTED_MODULE_30__.LinearSweep.createZSweep(xyPoints, 1, 3, false));
249798
249849
  // this forces artificial closure point . . .
@@ -249836,7 +249887,7 @@ class Sample {
249836
249887
  for (const axis of [
249837
249888
  _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(0, 0, 0, 0, 1, 0),
249838
249889
  _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(5, 0, 0, 0, 1, 0),
249839
- _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0)
249890
+ _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0),
249840
249891
  ]) {
249841
249892
  result.push(_solid_RotationalSweep__WEBPACK_IMPORTED_MODULE_31__.RotationalSweep.create(base, axis, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(45.0), false));
249842
249893
  result.push(_solid_RotationalSweep__WEBPACK_IMPORTED_MODULE_31__.RotationalSweep.create(base, axis, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(150.0), true));
@@ -249861,7 +249912,7 @@ class Sample {
249861
249912
  /** Create true (non-spherical) ellipsoids. */
249862
249913
  static createEllipsoids() {
249863
249914
  return [
249864
- _solid_Sphere__WEBPACK_IMPORTED_MODULE_32__.Sphere.createEllipsoid(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(4, 1, 1, 1, 4, 1, 0.5, 0.2, 5)), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createFullLatitude(), true)
249915
+ _solid_Sphere__WEBPACK_IMPORTED_MODULE_32__.Sphere.createEllipsoid(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(4, 1, 1, 1, 4, 1, 0.5, 0.2, 5)), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createFullLatitude(), true),
249865
249916
  ];
249866
249917
  }
249867
249918
  /** Create assorted cones. */
@@ -249919,8 +249970,7 @@ class Sample {
249919
249970
  result.push(_solid_Box__WEBPACK_IMPORTED_MODULE_35__.Box.createDgnBox(cornerA, frameY.columnX(), frameY.columnY(), cornerA.plusScaled(frameY.columnZ(), h), aX, aY, bX, bY, capped));
249920
249971
  return result;
249921
249972
  }
249922
- /** create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z)
249923
- */
249973
+ /** Create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z) */
249924
249974
  static createRectangle(x0, y0, x1, y1, z = 0.0, closed = false) {
249925
249975
  const points = [
249926
249976
  _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x0, y0, z),
@@ -249932,8 +249982,7 @@ class Sample {
249932
249982
  points.push(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x0, y0, z));
249933
249983
  return points;
249934
249984
  }
249935
- /** create an array of points for a rectangle with corners of a Range2d.
249936
- */
249985
+ /** Create an array of points for a rectangle with corners of a Range2d. */
249937
249986
  static createRectangleInRange2d(range, z = 0.0, closed = false) {
249938
249987
  const x0 = range.low.x;
249939
249988
  const x1 = range.high.x;
@@ -250042,8 +250091,9 @@ class Sample {
250042
250091
  }
250043
250092
  return points;
250044
250093
  }
250045
- /** Primary shape is a "triangle" with lower edge pushed in so it becomes a mild nonconvex quad.
250046
- * Fractal effects are gentle.
250094
+ /**
250095
+ * Primary shape is a "triangle" with lower edge pushed in so it becomes a mild nonconvex quad.
250096
+ * Fractal effects are gentle.
250047
250097
  */
250048
250098
  static nonConvexQuadSimpleFractal(numRecursion, perpendicularFactor) {
250049
250099
  const pattern = [
@@ -250060,7 +250110,7 @@ class Sample {
250060
250110
  ];
250061
250111
  return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);
250062
250112
  }
250063
- /** create a diamond with convex fractal */
250113
+ /** Create a diamond with convex fractal */
250064
250114
  static createFractalDiamondConvexPattern(numRecursion, perpendicularFactor) {
250065
250115
  const pattern = [
250066
250116
  _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(),
@@ -250157,7 +250207,7 @@ class Sample {
250157
250207
  ];
250158
250208
  return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);
250159
250209
  }
250160
- /** append interpolated points from the array tail to the target. */
250210
+ /** Append interpolated points from the array tail to the target. */
250161
250211
  static appendSplits(points, target, numSplit, includeTarget) {
250162
250212
  const pointA = points[points.length - 1];
250163
250213
  for (let i = 0; i < numSplit; i++)
@@ -250201,7 +250251,8 @@ class Sample {
250201
250251
  geometry.push(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.createXYZXYZ(x0, y1, z0, x0, y1, z1));
250202
250252
  return geometry;
250203
250253
  }
250204
- /** Assorted transition spirals
250254
+ /**
250255
+ * Assorted transition spirals
250205
250256
  * * (All combinations of bearing radius bearing radius length subsets.)
250206
250257
  */
250207
250258
  static createSimpleTransitionSpirals() {
@@ -250222,10 +250273,11 @@ class Sample {
250222
250273
  _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("ChineseCubic", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
250223
250274
  _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("JapaneseCubic", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
250224
250275
  _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("DirectHalfCosine", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
250225
- _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createCzechCubic(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createIdentity(), arcLength, r1)
250276
+ _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createCzechCubic(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createIdentity(), arcLength, r1),
250226
250277
  ];
250227
250278
  }
250228
- /** Create a Bezier curve with significant twist effects
250279
+ /**
250280
+ * Create a Bezier curve with significant twist effects
250229
250281
  * * r and theta are circle in xy plane at steps in thetaStepper
250230
250282
  * * z varies with sin(phi) at steps in phiStepper.
250231
250283
  */
@@ -250281,18 +250333,10 @@ class Sample {
250281
250333
  result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// arc spline with smooth joins
250282
250334
  _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(5, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 0)), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(15, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 360)), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(25, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 0)))));
250283
250335
  result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// 2-pt Interpolation Curve
250284
- _bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
250285
- fitPoints: [pointsA[0], pointsA[1]],
250286
- })))));
250336
+ _bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: [pointsA[0], pointsA[1]] })))));
250287
250337
  result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// 3-pt Interpolation Curve
250288
- _bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
250289
- fitPoints: [pointsA[0], pointsA[1], pointsA[2]],
250290
- })))));
250291
- result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
250292
- fitPoints: pointsA,
250293
- startTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, -1),
250294
- endTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-1, -1),
250295
- })))));
250338
+ _bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: [pointsA[0], pointsA[1], pointsA[2]] })))));
250339
+ result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: pointsA, startTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, -1), endTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-1, -1) })))));
250296
250340
  result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_spiral_IntegratedSpiral3d__WEBPACK_IMPORTED_MODULE_39__.IntegratedSpiral3d.createRadiusRadiusBearingBearing(_geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 100), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(10, 75), _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 1), _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero(), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundAxisIndex(2, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(30))), "bloss"))));
250297
250341
  result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createDirectHalfCosine(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero(), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundAxisIndex(2, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(110))), 50, 350, _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 1)))));
250298
250342
  return result;
@@ -250376,7 +250420,7 @@ class Sample {
250376
250420
  const sweep2 = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(160.0, 380.0);
250377
250421
  for (const arcs of [
250378
250422
  Sample.createArcs(1.0), Sample.createArcs(0.5),
250379
- Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2)
250423
+ Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2),
250380
250424
  ]) {
250381
250425
  for (const arc of arcs)
250382
250426
  result.push(arc);
@@ -250479,10 +250523,10 @@ class Sample {
250479
250523
  return points;
250480
250524
  }
250481
250525
  /**
250482
- * * let ay = 4
250483
- * * base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).
250484
- * * shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)
250485
- * * shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)
250526
+ * * Let ay = 4
250527
+ * * Base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).
250528
+ * * Shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)
250529
+ * * Shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)
250486
250530
  * * This is useful for testing non-y-monotonic face situations.
250487
250531
  * * Return as points.
250488
250532
  * @param dy1
@@ -250502,7 +250546,7 @@ class Sample {
250502
250546
  return points;
250503
250547
  }
250504
250548
  /**
250505
- * make line segments for each pair of adjacent points.
250549
+ * Make line segments for each pair of adjacent points.
250506
250550
  * @param points array of points
250507
250551
  * @param forceClosure if true, inspect coordinates to determine if a closure edge is needed.
250508
250552
  */
@@ -250618,7 +250662,8 @@ class Sample {
250618
250662
  this.appendGeometry(this.createBagOfCurves(), result);
250619
250663
  return result;
250620
250664
  }
250621
- /** Create points on a sine wave
250665
+ /**
250666
+ * Create points on a sine wave
250622
250667
  * Point i is origin + (i * xStep, a *sin(theta0 + i * dTheta), b * sin(beta0 + i * dBeta))
250623
250668
  * * Default b is zero, so it is a simple sine wave
250624
250669
  * * If the dTheta and dBeta are equal, it is a sine wave in a tilted plane.
@@ -250627,8 +250672,9 @@ class Sample {
250627
250672
  static createPointSineWave(origin, numInterval = 24, xStep = Math.PI / 12, a = 1, thetaSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 360), b = 0, betaSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 180)) {
250628
250673
  return this.createPointsByIndexFunctions(numInterval, SteppedIndexFunctionFactory.createLinear(xStep, origin ? origin.x : 0), SteppedIndexFunctionFactory.createCosine(a, thetaSweep, origin ? origin.y : 0), SteppedIndexFunctionFactory.createCosine(b, betaSweep, origin ? origin.z : 0));
250629
250674
  }
250630
- /** Create points with x,y,z independent functions of i and numInterval,
250631
- * Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));
250675
+ /**
250676
+ * Create points with x,y,z independent functions of i and numInterval,
250677
+ * Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));
250632
250678
  */
250633
250679
  static createPointsByIndexFunctions(numInterval, fx, fy, fz) {
250634
250680
  const points = [];
@@ -250699,9 +250745,7 @@ class Sample {
250699
250745
  builder.addGreedyTriangulationBetweenLineStrings(point0, point1);
250700
250746
  return builder.claimPolyface();
250701
250747
  }
250702
- /**
250703
- * create strokes on an arc at radius r0, then returning at radius r1.
250704
- */
250748
+ /** Create strokes on an arc at radius r0, then returning at radius r1. */
250705
250749
  static createAnnulusPolyline(edgesPerQuadrant, center, r0, r1, theta0, theta1, addClosure) {
250706
250750
  const point0 = [];
250707
250751
  const point1 = [];
@@ -250771,7 +250815,12 @@ class Sample {
250771
250815
  for (let yC = 0; yC + 1 <= ySweep; yC++) {
250772
250816
  const yD = yC + 1;
250773
250817
  if (acceptFunction(xA, yC))
250774
- builder.addPolygon([_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yC, zA), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yC, zB), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yD, zB), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yD, zA)]);
250818
+ builder.addPolygon([
250819
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yC, zA),
250820
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yC, zB),
250821
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yD, zB),
250822
+ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yD, zA),
250823
+ ]);
250775
250824
  }
250776
250825
  }
250777
250826
  }
@@ -250829,7 +250878,7 @@ Sample.plane3dByOriginAndUnitNormal = [
250829
250878
  _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_13__.Plane3dByOriginAndUnitNormal.createYZPlane(),
250830
250879
  _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_13__.Plane3dByOriginAndUnitNormal.createZXPlane(),
250831
250880
  Sample.createPlane(0, 0, 0, 3, 0, 1),
250832
- Sample.createPlane(1, 2, 3, 2, 4, -1)
250881
+ Sample.createPlane(1, 2, 3, 2, 4, -1),
250833
250882
  ];
250834
250883
  /** Assorted Ray3d, not all unit direction vectors. */
250835
250884
  Sample.ray3d = [
@@ -250837,7 +250886,7 @@ Sample.ray3d = [
250837
250886
  Sample.createRay(0, 0, 0, 0, 1, 0),
250838
250887
  Sample.createRay(0, 0, 0, 0, 0, 1),
250839
250888
  Sample.createRay(0, 0, 0, 1, 2, 0),
250840
- Sample.createRay(1, 2, 3, 4, 2, -1)
250889
+ Sample.createRay(1, 2, 3, 4, 2, -1),
250841
250890
  ];
250842
250891
  /** Assorted angles. All principal directions, some others included. */
250843
250892
  Sample.angle = [
@@ -250846,7 +250895,7 @@ Sample.angle = [
250846
250895
  _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(180),
250847
250896
  _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-90),
250848
250897
  _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(30),
250849
- _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-105)
250898
+ _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-105),
250850
250899
  ];
250851
250900
  /** Assorted angle sweeps */
250852
250901
  Sample.angleSweep = [
@@ -250855,35 +250904,35 @@ Sample.angleSweep = [
250855
250904
  _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(-90, 0),
250856
250905
  _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, -90),
250857
250906
  _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 30),
250858
- _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(45, 110)
250907
+ _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(45, 110),
250859
250908
  ];
250860
- /** assorted line segments */
250909
+ /** Assorted line segments */
250861
250910
  Sample.lineSegment3d = [
250862
250911
  _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0)),
250863
250912
  _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 1, 0)),
250864
250913
  _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 1)),
250865
- _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-2, -3, 0.5))
250914
+ _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-2, -3, 0.5)),
250866
250915
  ];
250867
- /** Assorted Range1d: single point, null, simple forward, simple reverse */
250916
+ /** Assorted Range1d: single point, null, simple forward, simple reverse */
250868
250917
  Sample.range1d = [
250869
250918
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createX(1),
250870
250919
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createNull(),
250871
250920
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(1, 2),
250872
- _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(2, 1)
250921
+ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(2, 1),
250873
250922
  ];
250874
250923
  /** Assorted range2d: single point, null, 2 point with various creation orders. */
250875
250924
  Sample.range2d = [
250876
250925
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXY(1, 2),
250877
250926
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createNull(),
250878
250927
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 0, 3),
250879
- _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 3, 4)
250928
+ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 3, 4),
250880
250929
  ];
250881
250930
  /** Assorted range2d: single point, null, 2 point with various creation orders. */
250882
250931
  Sample.range3d = [
250883
250932
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZ(1, 2, 3),
250884
250933
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createNull(),
250885
250934
  _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 0, 3, 4, 7),
250886
- _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1)
250935
+ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1),
250887
250936
  ];
250888
250937
 
250889
250938
 
@@ -281034,7 +281083,7 @@ class TestContext {
281034
281083
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
281035
281084
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
281036
281085
  await core_frontend_1.NoRenderApp.startup({
281037
- applicationVersion: "4.0.0-dev.55",
281086
+ applicationVersion: "4.0.0-dev.56",
281038
281087
  applicationId: this.settings.gprid,
281039
281088
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
281040
281089
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -300607,7 +300656,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
300607
300656
  /***/ ((module) => {
300608
300657
 
300609
300658
  "use strict";
300610
- module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.55","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs","build:ci":"npm run -s build && npm run -s build:esm","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-eslintrc -c \\"./node_modules/@itwin/eslint-plugin/dist/configs/extension-exports-config.js\\" \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core/tree/master/core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.0.0-dev.55","@itwin/core-bentley":"workspace:^4.0.0-dev.55","@itwin/core-common":"workspace:^4.0.0-dev.55","@itwin/core-geometry":"workspace:^4.0.0-dev.55","@itwin/core-orbitgt":"workspace:^4.0.0-dev.55","@itwin/core-quantity":"workspace:^4.0.0-dev.55"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"^4.0.0-dev.32","@itwin/webgl-compatibility":"workspace:*","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/deep-assign":"^0.1.0","@types/mocha":"^8.2.2","@types/node":"^18.11.5","@types/qs":"^6.5.0","@types/semver":"7.3.10","@types/superagent":"^4.1.14","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^7.11.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~5.0.2","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/object-storage-azure":"^1.5.0","@itwin/cloud-agnostic-core":"^1.5.0","@itwin/object-storage-core":"^1.5.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","deep-assign":"^2.0.0","fuse.js":"^3.3.0","qs":"^6.5.3","semver":"^7.3.5","superagent":"^7.1.5","wms-capabilities":"0.4.0","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
300659
+ module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.56","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs","build:ci":"npm run -s build && npm run -s build:esm","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-eslintrc -c \\"./node_modules/@itwin/eslint-plugin/dist/configs/extension-exports-config.js\\" \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core/tree/master/core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.0.0-dev.56","@itwin/core-bentley":"workspace:^4.0.0-dev.56","@itwin/core-common":"workspace:^4.0.0-dev.56","@itwin/core-geometry":"workspace:^4.0.0-dev.56","@itwin/core-orbitgt":"workspace:^4.0.0-dev.56","@itwin/core-quantity":"workspace:^4.0.0-dev.56"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"^4.0.0-dev.32","@itwin/webgl-compatibility":"workspace:*","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/deep-assign":"^0.1.0","@types/mocha":"^8.2.2","@types/node":"^18.11.5","@types/qs":"^6.5.0","@types/semver":"7.3.10","@types/superagent":"^4.1.14","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^7.11.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~5.0.2","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/object-storage-azure":"^1.5.0","@itwin/cloud-agnostic-core":"^1.5.0","@itwin/object-storage-core":"^1.5.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","deep-assign":"^2.0.0","fuse.js":"^3.3.0","qs":"^6.5.3","semver":"^7.3.5","superagent":"^7.1.5","wms-capabilities":"0.4.0","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
300611
300660
 
300612
300661
  /***/ }),
300613
300662