@itwin/ecschema-rpcinterface-tests 5.0.0-dev.104 → 5.0.0-dev.105

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.
@@ -74820,6 +74820,7 @@ __webpack_require__.r(__webpack_exports__);
74820
74820
  /* harmony import */ var _tools_Tool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
74821
74821
  /* harmony import */ var _tools_ToolSettings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/ToolSettings */ "../../core/frontend/lib/esm/tools/ToolSettings.js");
74822
74822
  /* harmony import */ var _common_internal_Symbols__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./common/internal/Symbols */ "../../core/frontend/lib/esm/common/internal/Symbols.js");
74823
+ /* harmony import */ var _AccuDraw__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AccuDraw */ "../../core/frontend/lib/esm/AccuDraw.js");
74823
74824
  /*---------------------------------------------------------------------------------------------
74824
74825
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
74825
74826
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -74836,6 +74837,7 @@ __webpack_require__.r(__webpack_exports__);
74836
74837
 
74837
74838
 
74838
74839
 
74840
+
74839
74841
  // cspell:ignore dont primitivetools
74840
74842
  /** Virtual cursor for using AccuSnap with touch input.
74841
74843
  * @internal
@@ -75374,6 +75376,61 @@ class AccuSnap {
75374
75376
  intersect.primitive = tpSegment; // Just save single segment that was intersected for line strings/shapes...
75375
75377
  return intersect;
75376
75378
  }
75379
+ static perpendicularPoint(snap) {
75380
+ const accuDraw = _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuDraw;
75381
+ if (!accuDraw.isEnabled || accuDraw.isDeactivated)
75382
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.Disabled; // AccuDraw is require for this snap mode...
75383
+ if (_HitDetail__WEBPACK_IMPORTED_MODULE_3__.HitGeomType.Surface === snap.geomType)
75384
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible; // Only valid for edge and curve hits...
75385
+ const curve = snap.getCurvePrimitive();
75386
+ if (undefined === curve)
75387
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75388
+ const rMatrix = _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDraw.getSnapRotation(snap, snap.viewport);
75389
+ if (undefined === rMatrix)
75390
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75391
+ // Compute perpendicular from AccuDraw origin when active or set AccuDraw rotation if accepted...
75392
+ if (!accuDraw.isActive) {
75393
+ const origin = snap.getPoint();
75394
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawFlags.SetRMatrix | _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawFlags.AlwaysSetOrigin, origin, rMatrix);
75395
+ accuDraw.adjustPoint(origin, snap.viewport, false); // Update internals for new snap location...
75396
+ snap.setSnapPoint(origin, _HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapHeat.InRange); // Force hot snap...
75397
+ snap.setSnapMode(_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.PerpendicularPoint);
75398
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.Success;
75399
+ }
75400
+ const zVec = rMatrix.rowZ(); // This is a row matrix...
75401
+ const spacePoint = _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, snap.getPoint(), zVec, snap.viewport, true);
75402
+ if (undefined === spacePoint)
75403
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75404
+ const detail = curve.closestPoint(spacePoint, true);
75405
+ if (undefined === detail?.curve)
75406
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75407
+ // Close point may not be perpendicular when curve can't be extended (CurveExtendMode.OnTangent isn't supported for all curve types)...
75408
+ if (!curve.isExtensibleFractionSpace) {
75409
+ const curvePlanePoint = _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, detail.point, zVec, snap.viewport, true);
75410
+ if (undefined === curvePlanePoint)
75411
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75412
+ const curveNormal = detail.point.vectorTo(curvePlanePoint);
75413
+ const curveTangent = curve.fractionToPointAndUnitTangent(detail.fraction);
75414
+ if (!curveTangent.getDirectionRef().isPerpendicularTo(curveNormal)) {
75415
+ const curveExtensionPoint = _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawHintBuilder.projectPointToLineInView(accuDraw.origin, curveTangent.getOriginRef(), curveTangent.getDirectionRef(), snap.viewport, true);
75416
+ if (undefined === curveExtensionPoint)
75417
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75418
+ detail.point.setFrom(curveExtensionPoint);
75419
+ }
75420
+ }
75421
+ const point = _AccuDraw__WEBPACK_IMPORTED_MODULE_9__.AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accuDraw.origin, zVec, snap.viewport, true);
75422
+ if (undefined === point)
75423
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75424
+ const xVec = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d();
75425
+ if (accuDraw.origin.vectorTo(point).normalizeWithLength(xVec).mag < _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallAngleRadians)
75426
+ xVec.setFrom(rMatrix.rowX()); // Closest point and compass origin coincide...
75427
+ const yVec = xVec.unitCrossProduct(zVec);
75428
+ if (undefined === yVec)
75429
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.NoSnapPossible;
75430
+ snap.setSnapPoint(point, _HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapHeat.InRange); // Force hot snap...
75431
+ snap.setSnapMode(_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.PerpendicularPoint);
75432
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.Success;
75433
+ }
75377
75434
  /** @internal */
75378
75435
  static async requestSnap(thisHit, snapModes, hotDistanceInches, keypointDivisor, hitList, out) {
75379
75436
  if (thisHit.isModelHit || thisHit.isMapHit || thisHit.isClassifier) {
@@ -75410,6 +75467,14 @@ class AccuSnap {
75410
75467
  return undefined;
75411
75468
  }
75412
75469
  }
75470
+ const doPerpPointSnap = snapModes.includes(_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.PerpendicularPoint);
75471
+ if (doPerpPointSnap) {
75472
+ // NOTE: This is not a valid backend snap mode. Instead make the snap request using nearest
75473
+ // snap in order to get the candidate curve to use to compute the snap point...
75474
+ snapModes = snapModes.filter(snapMode => snapMode !== _HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.PerpendicularPoint);
75475
+ if (!snapModes.includes(_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.Nearest))
75476
+ snapModes.push(_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.Nearest);
75477
+ }
75413
75478
  const requestProps = {
75414
75479
  id: thisHit.sourceId,
75415
75480
  testPoint: thisHit.testPoint,
@@ -75497,6 +75562,11 @@ class AccuSnap {
75497
75562
  displayTransform?.matrix.multiplyVector(snap.normal, snap.normal);
75498
75563
  snap.normal.normalizeInPlace();
75499
75564
  }
75565
+ if (doPerpPointSnap && _HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.Nearest === result.snapMode) {
75566
+ if (_ElementLocateManager__WEBPACK_IMPORTED_MODULE_2__.SnapStatus.Success !== this.perpendicularPoint(snap))
75567
+ return undefined;
75568
+ return snap;
75569
+ }
75500
75570
  if (_HitDetail__WEBPACK_IMPORTED_MODULE_3__.SnapMode.Intersection !== snap.snapMode)
75501
75571
  return snap;
75502
75572
  if (undefined === result.intersectId)
@@ -75697,7 +75767,9 @@ class AccuSnap {
75697
75767
  }
75698
75768
  }
75699
75769
  /** @internal */
75700
- onPreButtonEvent(ev) { return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false; }
75770
+ onPreButtonEvent(ev) {
75771
+ return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false;
75772
+ }
75701
75773
  /** @internal */
75702
75774
  onTouchStart(ev) {
75703
75775
  if (undefined !== this.touchCursor)
@@ -82144,6 +82216,7 @@ var SnapMode;
82144
82216
  SnapMode[SnapMode["Origin"] = 16] = "Origin";
82145
82217
  SnapMode[SnapMode["Bisector"] = 32] = "Bisector";
82146
82218
  SnapMode[SnapMode["Intersection"] = 64] = "Intersection";
82219
+ SnapMode[SnapMode["PerpendicularPoint"] = 128] = "PerpendicularPoint";
82147
82220
  })(SnapMode || (SnapMode = {}));
82148
82221
  /**
82149
82222
  * @public
@@ -82418,6 +82491,11 @@ class SnapDetail extends HitDetail {
82418
82491
  this.adjustedPoint.setFrom(point);
82419
82492
  this.heat = heat;
82420
82493
  }
82494
+ /** Change the snap mode. */
82495
+ setSnapMode(snapMode) {
82496
+ this.snapMode = snapMode;
82497
+ this.sprite = _Sprites__WEBPACK_IMPORTED_MODULE_4__.IconSprites.getSpriteFromUrl(SnapDetail.getSnapSpriteUrl(snapMode));
82498
+ }
82421
82499
  /** Set curve primitive and HitGeometryType for this SnapDetail. */
82422
82500
  setCurvePrimitive(primitive, localToWorld, geomType) {
82423
82501
  this.primitive = primitive;
@@ -82509,6 +82587,7 @@ class SnapDetail extends HitDetail {
82509
82587
  case SnapMode.Origin: return `${_IModelApp__WEBPACK_IMPORTED_MODULE_3__.IModelApp.publicPath}sprites/SnapOrigin.png`;
82510
82588
  case SnapMode.Bisector: return `${_IModelApp__WEBPACK_IMPORTED_MODULE_3__.IModelApp.publicPath}sprites/SnapBisector.png`;
82511
82589
  case SnapMode.Intersection: return `${_IModelApp__WEBPACK_IMPORTED_MODULE_3__.IModelApp.publicPath}sprites/SnapIntersection.png`;
82590
+ case SnapMode.PerpendicularPoint: return `${_IModelApp__WEBPACK_IMPORTED_MODULE_3__.IModelApp.publicPath}sprites/SnapPerpendicularPoint.png`;
82512
82591
  }
82513
82592
  return "";
82514
82593
  }
@@ -106043,7 +106122,6 @@ __webpack_require__.r(__webpack_exports__);
106043
106122
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateCycleTool),
106044
106123
  /* harmony export */ AccuDrawRotateElementTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateElementTool),
106045
106124
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateFrontTool),
106046
- /* harmony export */ AccuDrawRotatePerpendicularTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotatePerpendicularTool),
106047
106125
  /* harmony export */ AccuDrawRotateSideTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateSideTool),
106048
106126
  /* harmony export */ AccuDrawRotateTopTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateTopTool),
106049
106127
  /* harmony export */ AccuDrawRotateViewTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_99__.AccuDrawRotateViewTool),
@@ -165347,7 +165425,6 @@ __webpack_require__.r(__webpack_exports__);
165347
165425
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* binding */ AccuDrawRotateCycleTool),
165348
165426
  /* harmony export */ AccuDrawRotateElementTool: () => (/* binding */ AccuDrawRotateElementTool),
165349
165427
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* binding */ AccuDrawRotateFrontTool),
165350
- /* harmony export */ AccuDrawRotatePerpendicularTool: () => (/* binding */ AccuDrawRotatePerpendicularTool),
165351
165428
  /* harmony export */ AccuDrawRotateSideTool: () => (/* binding */ AccuDrawRotateSideTool),
165352
165429
  /* harmony export */ AccuDrawRotateTopTool: () => (/* binding */ AccuDrawRotateTopTool),
165353
165430
  /* harmony export */ AccuDrawRotateViewTool: () => (/* binding */ AccuDrawRotateViewTool),
@@ -165370,9 +165447,8 @@ __webpack_require__.r(__webpack_exports__);
165370
165447
  /* harmony import */ var _AccuDraw__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../AccuDraw */ "../../core/frontend/lib/esm/AccuDraw.js");
165371
165448
  /* harmony import */ var _AccuSnap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../AccuSnap */ "../../core/frontend/lib/esm/AccuSnap.js");
165372
165449
  /* harmony import */ var _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../AuxCoordSys */ "../../core/frontend/lib/esm/AuxCoordSys.js");
165373
- /* harmony import */ var _HitDetail__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../HitDetail */ "../../core/frontend/lib/esm/HitDetail.js");
165374
- /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
165375
- /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
165450
+ /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
165451
+ /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
165376
165452
  /*---------------------------------------------------------------------------------------------
165377
165453
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
165378
165454
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -165387,7 +165463,6 @@ __webpack_require__.r(__webpack_exports__);
165387
165463
 
165388
165464
 
165389
165465
 
165390
-
165391
165466
  // cSpell:ignore dont unlockedz
165392
165467
  function normalizedDifference(point1, point2, out) {
165393
165468
  return point2.vectorTo(point1).normalizeWithLength(out).mag;
@@ -165403,7 +165478,7 @@ function normalizedCrossProduct(vec1, vec2, out) {
165403
165478
  class AccuDrawShortcuts {
165404
165479
  /** Disable/Enable AccuDraw for the session */
165405
165480
  static sessionToggle() {
165406
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165481
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165407
165482
  if (accudraw.isEnabled)
165408
165483
  accudraw.disableForSession();
165409
165484
  else
@@ -165411,7 +165486,7 @@ class AccuDrawShortcuts {
165411
165486
  }
165412
165487
  /** Suspend/Unsuspend AccuDraw for the active tool */
165413
165488
  static suspendToggle() {
165414
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165489
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165415
165490
  if (!accudraw.isEnabled)
165416
165491
  return;
165417
165492
  if (accudraw.isActive)
@@ -165421,7 +165496,7 @@ class AccuDrawShortcuts {
165421
165496
  accudraw.refreshDecorationsAndDynamics();
165422
165497
  }
165423
165498
  static rotateAxesByPoint(isSnapped, aboutCurrentZ) {
165424
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165499
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165425
165500
  if (!accudraw.isEnabled)
165426
165501
  return false;
165427
165502
  const vp = accudraw.currentView;
@@ -165449,7 +165524,7 @@ class AccuDrawShortcuts {
165449
165524
  return true;
165450
165525
  }
165451
165526
  static updateACSByPoints(acs, vp, points, isDynamics) {
165452
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165527
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165453
165528
  if (!accudraw.isEnabled)
165454
165529
  return false;
165455
165530
  let accept = false;
@@ -165505,9 +165580,9 @@ class AccuDrawShortcuts {
165505
165580
  }
165506
165581
  return accept;
165507
165582
  }
165508
- static processPendingHints() { _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.processHints(); }
165583
+ static processPendingHints() { _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.processHints(); }
165509
165584
  static requestInputFocus() {
165510
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165585
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165511
165586
  if (!accudraw.isEnabled)
165512
165587
  return;
165513
165588
  accudraw.grabInputFocus();
@@ -165515,7 +165590,7 @@ class AccuDrawShortcuts {
165515
165590
  }
165516
165591
  // Helper method for GUI implementation...
165517
165592
  static async itemFieldNavigate(index, str, forward) {
165518
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165593
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165519
165594
  if (!accudraw.isEnabled)
165520
165595
  return;
165521
165596
  if (accudraw.getFieldLock(index))
@@ -165551,10 +165626,10 @@ class AccuDrawShortcuts {
165551
165626
  accudraw.setFocusItem(index);
165552
165627
  accudraw.dontMoveFocus = true;
165553
165628
  }
165554
- static itemFieldNewInput(index) { _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.setKeyinStatus(index, _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.KeyinStatus.Partial); }
165555
- static itemFieldCompletedInput(index) { _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.setKeyinStatus(index, _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.KeyinStatus.Dynamic); }
165629
+ static itemFieldNewInput(index) { _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setKeyinStatus(index, _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.KeyinStatus.Partial); }
165630
+ static itemFieldCompletedInput(index) { _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setKeyinStatus(index, _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.KeyinStatus.Dynamic); }
165556
165631
  static async itemFieldAcceptInput(index, str) {
165557
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165632
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165558
165633
  await accudraw.processFieldInput(index, str, true);
165559
165634
  accudraw.setKeyinStatus(index, _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.KeyinStatus.Dynamic);
165560
165635
  if (accudraw.getFieldLock(index))
@@ -165592,7 +165667,7 @@ class AccuDrawShortcuts {
165592
165667
  accudraw.setFocusItem(index);
165593
165668
  }
165594
165669
  static itemFieldLockToggle(index) {
165595
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165670
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165596
165671
  if (!accudraw.isEnabled)
165597
165672
  return;
165598
165673
  if (accudraw.getFieldLock(index)) {
@@ -165637,21 +165712,21 @@ class AccuDrawShortcuts {
165637
165712
  accudraw.clearTentative();
165638
165713
  }
165639
165714
  static choosePreviousValue(index) {
165640
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165715
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165641
165716
  accudraw.getSavedValue(index, false);
165642
165717
  accudraw.refreshDecorationsAndDynamics();
165643
165718
  }
165644
165719
  static chooseNextValue(index) {
165645
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165720
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165646
165721
  accudraw.getSavedValue(index, true);
165647
165722
  accudraw.refreshDecorationsAndDynamics();
165648
165723
  }
165649
165724
  static clearSavedValues() {
165650
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165725
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165651
165726
  accudraw.clearSavedValues();
165652
165727
  }
165653
165728
  static itemRotationModeChange(rotation) {
165654
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165729
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165655
165730
  const vp = accudraw.currentView;
165656
165731
  const is3d = vp ? vp.view.is3d() : true;
165657
165732
  if (!is3d && (_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Front === rotation || _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Side === rotation))
@@ -165661,7 +165736,7 @@ class AccuDrawShortcuts {
165661
165736
  }
165662
165737
  // Shortcut implementations for GUI entry points...
165663
165738
  static setOrigin(explicitOrigin) {
165664
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165739
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165665
165740
  if (!accudraw.isEnabled)
165666
165741
  return;
165667
165742
  if (explicitOrigin) {
@@ -165676,8 +165751,8 @@ class AccuDrawShortcuts {
165676
165751
  accudraw.flags.haveValidOrigin = true;
165677
165752
  }
165678
165753
  else {
165679
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_7__.BeButtonEvent();
165680
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromLastDataButton(ev);
165754
+ const ev = new _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButtonEvent();
165755
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.fillEventFromLastDataButton(ev);
165681
165756
  if (ev.viewport) {
165682
165757
  accudraw.published.origin.setFrom(ev.point);
165683
165758
  accudraw.flags.haveValidOrigin = true;
@@ -165706,7 +165781,7 @@ class AccuDrawShortcuts {
165706
165781
  accudraw.refreshDecorationsAndDynamics(); // NOTE: Will already grab input focus through processHints...
165707
165782
  }
165708
165783
  static changeCompassMode() {
165709
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165784
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165710
165785
  if (!accudraw.isEnabled)
165711
165786
  return;
165712
165787
  let axisLockStatus = accudraw.locked & _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.LockedStates.XY_BM;
@@ -165736,10 +165811,10 @@ class AccuDrawShortcuts {
165736
165811
  this.requestInputFocus();
165737
165812
  }
165738
165813
  static lockSmart() {
165739
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165814
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165740
165815
  if (!accudraw.isEnabled)
165741
165816
  return;
165742
- const accuSnap = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuSnap;
165817
+ const accuSnap = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap;
165743
165818
  // Don't want AccuSnap to influence axis or Z...
165744
165819
  if (accuSnap.isHot) {
165745
165820
  accuSnap.clear();
@@ -165821,7 +165896,7 @@ class AccuDrawShortcuts {
165821
165896
  }
165822
165897
  /** Disable indexing when not currently indexed; if indexed, enable respective lock. */
165823
165898
  static lockIndex() {
165824
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165899
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165825
165900
  if (!accudraw.isEnabled)
165826
165901
  return;
165827
165902
  if (accudraw.flags.indexLocked) {
@@ -165861,7 +165936,7 @@ class AccuDrawShortcuts {
165861
165936
  this.requestInputFocus();
165862
165937
  }
165863
165938
  static lockX() {
165864
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165939
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165865
165940
  if (!accudraw.isEnabled)
165866
165941
  return;
165867
165942
  accudraw.clearTentative();
@@ -165885,7 +165960,7 @@ class AccuDrawShortcuts {
165885
165960
  this.requestInputFocus();
165886
165961
  }
165887
165962
  static lockY() {
165888
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165963
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165889
165964
  if (!accudraw.isEnabled)
165890
165965
  return;
165891
165966
  accudraw.clearTentative();
@@ -165909,7 +165984,7 @@ class AccuDrawShortcuts {
165909
165984
  this.requestInputFocus();
165910
165985
  }
165911
165986
  static lockZ() {
165912
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
165987
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165913
165988
  if (!accudraw.isEnabled)
165914
165989
  return;
165915
165990
  const vp = accudraw.currentView;
@@ -165931,7 +166006,7 @@ class AccuDrawShortcuts {
165931
166006
  this.requestInputFocus();
165932
166007
  }
165933
166008
  static lockDistance() {
165934
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166009
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165935
166010
  if (!accudraw.isEnabled)
165936
166011
  return;
165937
166012
  const isSnapped = accudraw.clearTentative();
@@ -165957,14 +166032,14 @@ class AccuDrawShortcuts {
165957
166032
  this.requestInputFocus();
165958
166033
  }
165959
166034
  static lockAngle() {
165960
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166035
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165961
166036
  if (!accudraw.isEnabled)
165962
166037
  return;
165963
166038
  accudraw.doLockAngle(accudraw.clearTentative());
165964
166039
  this.requestInputFocus();
165965
166040
  }
165966
166041
  static setStandardRotation(rotation) {
165967
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166042
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165968
166043
  if (!accudraw.isEnabled)
165969
166044
  return;
165970
166045
  if (_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Context === rotation) {
@@ -165982,7 +166057,7 @@ class AccuDrawShortcuts {
165982
166057
  this.requestInputFocus();
165983
166058
  }
165984
166059
  static alignView() {
165985
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166060
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
165986
166061
  if (!accudraw.isEnabled)
165987
166062
  return;
165988
166063
  const vp = accudraw.currentView;
@@ -166000,9 +166075,9 @@ class AccuDrawShortcuts {
166000
166075
  vp.animateFrustumChange();
166001
166076
  this.requestInputFocus();
166002
166077
  }
166003
- static rotateToBase() { this.setStandardRotation(_IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.flags.baseRotation); }
166078
+ static rotateToBase() { this.setStandardRotation(_IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.flags.baseRotation); }
166004
166079
  static rotateToACS() {
166005
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166080
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166006
166081
  if (!accudraw.isEnabled)
166007
166082
  return;
166008
166083
  // NOTE: Match current ACS orientation..reset auxRotationPlane to top!
@@ -166010,7 +166085,7 @@ class AccuDrawShortcuts {
166010
166085
  this.setStandardRotation(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.ACS);
166011
166086
  }
166012
166087
  static rotateCycle() {
166013
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166088
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166014
166089
  if (!accudraw.isEnabled)
166015
166090
  return;
166016
166091
  const vp = accudraw.currentView;
@@ -166073,7 +166148,7 @@ class AccuDrawShortcuts {
166073
166148
  this.setStandardRotation(rotation);
166074
166149
  }
166075
166150
  static rotate90(axis) {
166076
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166151
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166077
166152
  if (!accudraw.isEnabled)
166078
166153
  return;
166079
166154
  const newRotation = new _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.ThreeAxes();
@@ -166100,22 +166175,19 @@ class AccuDrawShortcuts {
166100
166175
  this.requestInputFocus();
166101
166176
  }
166102
166177
  static async rotateAxes(aboutCurrentZ) {
166103
- return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tools.run("AccuDraw.RotateAxes", aboutCurrentZ);
166178
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tools.run("AccuDraw.RotateAxes", aboutCurrentZ);
166104
166179
  }
166105
166180
  static async rotateToElement() {
166106
- return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tools.run("AccuDraw.RotateElement");
166107
- }
166108
- static async rotatePerpendicular() {
166109
- return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tools.run("AccuDraw.RotatePerpendicular");
166181
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tools.run("AccuDraw.RotateElement");
166110
166182
  }
166111
166183
  static async defineACSByElement() {
166112
- return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tools.run("AccuDraw.DefineACSByElement");
166184
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tools.run("AccuDraw.DefineACSByElement");
166113
166185
  }
166114
166186
  static async defineACSByPoints() {
166115
- return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tools.run("AccuDraw.DefineACSByPoints");
166187
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tools.run("AccuDraw.DefineACSByPoints");
166116
166188
  }
166117
166189
  static getACS(acsName, useOrigin, useRotation) {
166118
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166190
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166119
166191
  if (!accudraw.isEnabled)
166120
166192
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.ERROR;
166121
166193
  const vp = accudraw.currentView;
@@ -166174,7 +166246,7 @@ class AccuDrawShortcuts {
166174
166246
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.SUCCESS;
166175
166247
  }
166176
166248
  static writeACS(_acsName) {
166177
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166249
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166178
166250
  if (!accudraw.isEnabled)
166179
166251
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.ERROR;
166180
166252
  const vp = accudraw.currentView;
@@ -166200,13 +166272,13 @@ class AccuDrawShortcuts {
166200
166272
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.SUCCESS;
166201
166273
  }
166202
166274
  static itemFieldUnlockAll() {
166203
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166275
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166204
166276
  if (accudraw.isEnabled)
166205
166277
  accudraw.unlockAllFields();
166206
166278
  }
166207
166279
  }
166208
166280
  /** @beta */
166209
- class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166281
+ class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166210
166282
  static toolId = "AccuDraw.SessionToggle";
166211
166283
  async run() {
166212
166284
  AccuDrawShortcuts.sessionToggle();
@@ -166214,7 +166286,7 @@ class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool
166214
166286
  }
166215
166287
  }
166216
166288
  /** @beta */
166217
- class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166289
+ class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166218
166290
  static toolId = "AccuDraw.SuspendToggle";
166219
166291
  async run() {
166220
166292
  AccuDrawShortcuts.suspendToggle();
@@ -166222,7 +166294,7 @@ class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool
166222
166294
  }
166223
166295
  }
166224
166296
  /** @beta */
166225
- class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166297
+ class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166226
166298
  static toolId = "AccuDraw.SetOrigin";
166227
166299
  async run() {
166228
166300
  AccuDrawShortcuts.setOrigin();
@@ -166230,7 +166302,7 @@ class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166230
166302
  }
166231
166303
  }
166232
166304
  /** @beta */
166233
- class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166305
+ class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166234
166306
  static toolId = "AccuDraw.LockSmart";
166235
166307
  async run() {
166236
166308
  AccuDrawShortcuts.lockSmart();
@@ -166238,7 +166310,7 @@ class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166238
166310
  }
166239
166311
  }
166240
166312
  /** @beta */
166241
- class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166313
+ class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166242
166314
  static toolId = "AccuDraw.LockIndex";
166243
166315
  async run() {
166244
166316
  AccuDrawShortcuts.lockIndex();
@@ -166246,7 +166318,7 @@ class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166246
166318
  }
166247
166319
  }
166248
166320
  /** @beta */
166249
- class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166321
+ class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166250
166322
  static toolId = "AccuDraw.LockX";
166251
166323
  async run() {
166252
166324
  AccuDrawShortcuts.lockX();
@@ -166254,7 +166326,7 @@ class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166254
166326
  }
166255
166327
  }
166256
166328
  /** @beta */
166257
- class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166329
+ class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166258
166330
  static toolId = "AccuDraw.LockY";
166259
166331
  async run() {
166260
166332
  AccuDrawShortcuts.lockY();
@@ -166262,7 +166334,7 @@ class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166262
166334
  }
166263
166335
  }
166264
166336
  /** @beta */
166265
- class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166337
+ class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166266
166338
  static toolId = "AccuDraw.LockZ";
166267
166339
  async run() {
166268
166340
  AccuDrawShortcuts.lockZ();
@@ -166270,7 +166342,7 @@ class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166270
166342
  }
166271
166343
  }
166272
166344
  /** @beta */
166273
- class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166345
+ class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166274
166346
  static toolId = "AccuDraw.LockDistance";
166275
166347
  async run() {
166276
166348
  AccuDrawShortcuts.lockDistance();
@@ -166278,7 +166350,7 @@ class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Too
166278
166350
  }
166279
166351
  }
166280
166352
  /** @beta */
166281
- class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166353
+ class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166282
166354
  static toolId = "AccuDraw.LockAngle";
166283
166355
  async run() {
166284
166356
  AccuDrawShortcuts.lockAngle();
@@ -166286,7 +166358,7 @@ class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166286
166358
  }
166287
166359
  }
166288
166360
  /** @beta */
166289
- class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166361
+ class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166290
166362
  static toolId = "AccuDraw.ChangeMode";
166291
166363
  async run() {
166292
166364
  AccuDrawShortcuts.changeCompassMode();
@@ -166294,7 +166366,7 @@ class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166294
166366
  }
166295
166367
  }
166296
166368
  /** @beta */
166297
- class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166369
+ class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166298
166370
  static toolId = "AccuDraw.RotateCycle";
166299
166371
  async run() {
166300
166372
  AccuDrawShortcuts.rotateCycle();
@@ -166302,7 +166374,7 @@ class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166302
166374
  }
166303
166375
  }
166304
166376
  /** @beta */
166305
- class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166377
+ class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166306
166378
  static toolId = "AccuDraw.RotateTop";
166307
166379
  async run() {
166308
166380
  AccuDrawShortcuts.setStandardRotation(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Top);
@@ -166310,7 +166382,7 @@ class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166310
166382
  }
166311
166383
  }
166312
166384
  /** @beta */
166313
- class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166385
+ class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166314
166386
  static toolId = "AccuDraw.RotateFront";
166315
166387
  async run() {
166316
166388
  AccuDrawShortcuts.setStandardRotation(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Front);
@@ -166318,7 +166390,7 @@ class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166318
166390
  }
166319
166391
  }
166320
166392
  /** @beta */
166321
- class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166393
+ class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166322
166394
  static toolId = "AccuDraw.RotateSide";
166323
166395
  async run() {
166324
166396
  AccuDrawShortcuts.setStandardRotation(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Side);
@@ -166326,7 +166398,7 @@ class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166326
166398
  }
166327
166399
  }
166328
166400
  /** @beta */
166329
- class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166401
+ class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166330
166402
  static toolId = "AccuDraw.RotateView";
166331
166403
  async run() {
166332
166404
  AccuDrawShortcuts.setStandardRotation(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.View);
@@ -166334,7 +166406,7 @@ class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166334
166406
  }
166335
166407
  }
166336
166408
  /** @beta */
166337
- class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166409
+ class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166338
166410
  static toolId = "AccuDraw.Rotate90AboutX";
166339
166411
  async run() {
166340
166412
  AccuDrawShortcuts.rotate90(0);
@@ -166342,7 +166414,7 @@ class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool
166342
166414
  }
166343
166415
  }
166344
166416
  /** @beta */
166345
- class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166417
+ class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166346
166418
  static toolId = "AccuDraw.Rotate90AboutY";
166347
166419
  async run() {
166348
166420
  AccuDrawShortcuts.rotate90(1);
@@ -166350,7 +166422,7 @@ class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool
166350
166422
  }
166351
166423
  }
166352
166424
  /** @beta */
166353
- class AccuDrawRotate90AboutZTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool {
166425
+ class AccuDrawRotate90AboutZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
166354
166426
  static toolId = "AccuDraw.Rotate90AboutZ";
166355
166427
  async run() {
166356
166428
  AccuDrawShortcuts.rotate90(2);
@@ -166358,13 +166430,13 @@ class AccuDrawRotate90AboutZTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.Tool
166358
166430
  }
166359
166431
  }
166360
166432
  /** @internal */
166361
- class AccuDrawShortcutsTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.InputCollector {
166433
+ class AccuDrawShortcutsTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.InputCollector {
166362
166434
  _complete = false;
166363
- get allowShortcut() { return this.wantActivateOnStart ? _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.isEnabled : true; }
166435
+ get allowShortcut() { return this.wantActivateOnStart ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.isEnabled : true; }
166364
166436
  get wantActivateOnStart() { return false; } // Whether to automatically enable AccuDraw before the 1st data button...
166365
166437
  get wantClearSnapOnStart() { return false; } // Whether to preserve active Tentative/AccuSnap on install...
166366
166438
  get wantManipulationImmediate() { return false; } // Whether additional input is required to process on install...
166367
- get wantExitOnDataButtonUp() { return false; } // Whether to exit on button up instead of down (see rotate perpendicular)...
166439
+ get wantExitOnDataButtonUp() { return false; } // Whether to exit on button up instead of down...
166368
166440
  async onInstall() {
166369
166441
  if (!this.allowShortcut)
166370
166442
  return false;
@@ -166373,7 +166445,7 @@ class AccuDrawShortcutsTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.InputColl
166373
166445
  async onPostInstall() {
166374
166446
  await super.onPostInstall();
166375
166447
  if (this.wantActivateOnStart)
166376
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.activate();
166448
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
166377
166449
  this.onManipulationStart();
166378
166450
  if (this.wantManipulationImmediate && this.doManipulation(undefined, false)) {
166379
166451
  this._complete = true;
@@ -166381,18 +166453,18 @@ class AccuDrawShortcutsTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.InputColl
166381
166453
  }
166382
166454
  // NOTE: InputCollector inherits suspended primitive's state, set everything...
166383
166455
  if (this.wantClearSnapOnStart) {
166384
- this.initLocateElements(false, true, undefined, _Tool__WEBPACK_IMPORTED_MODULE_7__.CoordinateLockOverrides.None); // This clears the active Tentative/AccuSnap, some shortcuts have special behavior when invoked with an active snap...
166456
+ this.initLocateElements(false, true, undefined, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoordinateLockOverrides.None); // This clears the active Tentative/AccuSnap, some shortcuts have special behavior when invoked with an active snap...
166385
166457
  }
166386
166458
  else {
166387
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.locateManager.initLocateOptions();
166388
- this.changeLocateState(false, true, undefined, _Tool__WEBPACK_IMPORTED_MODULE_7__.CoordinateLockOverrides.None);
166459
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.initLocateOptions();
166460
+ this.changeLocateState(false, true, undefined, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoordinateLockOverrides.None);
166389
166461
  }
166390
166462
  this.doManipulation(undefined, true);
166391
166463
  ;
166392
166464
  }
166393
166465
  async onCleanup() {
166394
166466
  if (this._complete)
166395
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();
166467
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();
166396
166468
  }
166397
166469
  async exitTool() {
166398
166470
  await super.exitTool();
@@ -166404,12 +166476,12 @@ class AccuDrawShortcutsTool extends _Tool__WEBPACK_IMPORTED_MODULE_7__.InputColl
166404
166476
  if (!this.wantExitOnDataButtonUp)
166405
166477
  await this.exitTool();
166406
166478
  }
166407
- return _Tool__WEBPACK_IMPORTED_MODULE_7__.EventHandled.No;
166479
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
166408
166480
  }
166409
166481
  async onDataButtonUp(_ev) {
166410
166482
  if (this._complete && this.wantExitOnDataButtonUp)
166411
166483
  await this.exitTool();
166412
- return _Tool__WEBPACK_IMPORTED_MODULE_7__.EventHandled.No;
166484
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
166413
166485
  }
166414
166486
  async onMouseMotion(ev) {
166415
166487
  this.doManipulation(ev, true);
@@ -166427,14 +166499,14 @@ class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
166427
166499
  this.aboutCurrentZ = aboutCurrentZ;
166428
166500
  }
166429
166501
  /** @internal */
166430
- get allowShortcut() { return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.isActive; } // Require compass to already be active for this shortcut...
166502
+ get allowShortcut() { return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.isActive; } // Require compass to already be active for this shortcut...
166431
166503
  /** @internal */
166432
166504
  get wantActivateOnStart() { return true; } // State is demoted to inactive when a tool install, still need this...
166433
166505
  /** @internal */
166434
166506
  get wantManipulationImmediate() {
166435
166507
  if (_AccuSnap__WEBPACK_IMPORTED_MODULE_3__.TentativeOrAccuSnap.isHot)
166436
166508
  return true;
166437
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166509
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166438
166510
  if (_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.CompassMode.Polar === accudraw.compassMode)
166439
166511
  return accudraw.getFieldLock(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.ItemField.ANGLE_Item);
166440
166512
  return accudraw.getFieldLock(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.ItemField.X_Item) && accudraw.getFieldLock(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.ItemField.Y_Item);
@@ -166442,12 +166514,12 @@ class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
166442
166514
  /** @internal */
166443
166515
  onManipulationStart() {
166444
166516
  if (this.aboutCurrentZ)
166445
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.changeBaseRotationMode(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Context); // Establish current orientation as base for when defining compass rotation by x axis...
166446
- _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey("AccuDraw.RotateAxes.Prompts.FirstPoint");
166517
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.changeBaseRotationMode(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Context); // Establish current orientation as base for when defining compass rotation by x axis...
166518
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotateAxes.Prompts.FirstPoint");
166447
166519
  }
166448
166520
  /** @internal */
166449
166521
  doManipulation(ev, isMotion) {
166450
- const vp = ev ? ev.viewport : _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.currentView;
166522
+ const vp = ev ? ev.viewport : _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.currentView;
166451
166523
  if (!vp)
166452
166524
  return false;
166453
166525
  if (!AccuDrawShortcuts.rotateAxesByPoint(_AccuSnap__WEBPACK_IMPORTED_MODULE_3__.TentativeOrAccuSnap.isHot, this.aboutCurrentZ))
@@ -166455,7 +166527,7 @@ class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
166455
166527
  vp.invalidateDecorations();
166456
166528
  if (!isMotion) {
166457
166529
  AccuDrawShortcuts.itemFieldUnlockAll();
166458
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.clear(true);
166530
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true);
166459
166531
  }
166460
166532
  return true;
166461
166533
  }
@@ -166470,15 +166542,15 @@ class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
166470
166542
  /** @beta */
166471
166543
  class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
166472
166544
  static toolId = "AccuDraw.RotateElement";
166473
- _moveOrigin = !_IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.isActive || _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...
166545
+ _moveOrigin = !_IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.isActive || _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...
166474
166546
  /** @internal */
166475
166547
  get wantActivateOnStart() { return true; }
166476
166548
  /** @internal */
166477
- get wantManipulationImmediate() { return _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.isSnapped; }
166549
+ get wantManipulationImmediate() { return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isSnapped; }
166478
166550
  /** @internal */
166479
166551
  onManipulationStart() {
166480
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin); // Don't move compass when updateOrientation returns false...
166481
- _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey("AccuDraw.RotateElement.Prompts.FirstPoint");
166552
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin); // Don't move compass when updateOrientation returns false...
166553
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotateElement.Prompts.FirstPoint");
166482
166554
  }
166483
166555
  /** @internal */
166484
166556
  onManipulationComplete() {
@@ -166489,7 +166561,7 @@ class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
166489
166561
  }
166490
166562
  /** @internal */
166491
166563
  updateOrientation(snap, viewport, _isMotion) {
166492
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166564
+ const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
166493
166565
  const rMatrix = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDraw.getSnapRotation(snap, viewport);
166494
166566
  if (undefined === rMatrix)
166495
166567
  return false;
@@ -166499,7 +166571,7 @@ class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
166499
166571
  }
166500
166572
  /** @internal */
166501
166573
  doManipulation(ev, isMotion) {
166502
- const viewport = ev ? ev.viewport : _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.currentView;
166574
+ const viewport = ev ? ev.viewport : _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.currentView;
166503
166575
  if (!viewport)
166504
166576
  return false;
166505
166577
  const snap = _AccuSnap__WEBPACK_IMPORTED_MODULE_3__.TentativeOrAccuSnap.getCurrentSnap(false);
@@ -166508,60 +166580,7 @@ class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
166508
166580
  if (undefined === ev)
166509
166581
  AccuDrawShortcuts.processPendingHints(); // Would normally be processed after button down, necessary when called from post install...
166510
166582
  if (!isMotion)
166511
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.changeBaseRotationMode(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Context); // Hold temporary rotation for tool duration...
166512
- return true;
166513
- }
166514
- }
166515
- /** @beta */
166516
- class AccuDrawRotatePerpendicularTool extends AccuDrawRotateElementTool {
166517
- static toolId = "AccuDraw.RotatePerpendicular";
166518
- _location;
166519
- /** @internal */
166520
- get wantExitOnDataButtonUp() { return true; } // Complete on button up since button down clears tentative...
166521
- /** @internal */
166522
- onManipulationComplete() {
166523
- if (undefined !== this._location) {
166524
- // Use tentative to hold adjusted snap location for suspended tool...
166525
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.setPoint(this._location.point);
166526
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.viewport = this._location.viewport;
166527
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.showTentative();
166528
- }
166529
- return _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetRMatrix | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.Disable;
166530
- }
166531
- /** @internal */
166532
- updateOrientation(snap, viewport, isMotion) {
166533
- const curve = snap.getCurvePrimitive();
166534
- if (undefined === curve)
166535
- return false;
166536
- const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw;
166537
- const rMatrix = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDraw.getSnapRotation(snap, viewport);
166538
- if (undefined === rMatrix)
166539
- return false;
166540
- const zVec = rMatrix.getRow(2); // This is a row matrix...
166541
- const spacePoint = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawHintBuilder.projectPointToPlaneInView(accudraw.origin, snap.getPoint(), zVec, viewport, true);
166542
- if (undefined === spacePoint)
166543
- return false;
166544
- const detail = curve.closestPoint(spacePoint, true);
166545
- if (undefined === detail?.curve)
166546
- return false;
166547
- const point = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accudraw.origin, zVec, viewport, true);
166548
- if (undefined === point)
166549
- return false;
166550
- const xVec = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d();
166551
- if (normalizedDifference(point, accudraw.origin, xVec) < _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallAngleRadians)
166552
- return false;
166553
- ; // Closest point and compass origin coincide...
166554
- const yVec = xVec.unitCrossProduct(zVec);
166555
- if (undefined === yVec)
166556
- return false;
166557
- rMatrix.setColumns(xVec, yVec, zVec);
166558
- _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRigidFromMatrix3d(rMatrix, _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.AxisOrder.XZY, rMatrix);
166559
- rMatrix.transposeInPlace();
166560
- snap.setSnapPoint(point, _HitDetail__WEBPACK_IMPORTED_MODULE_5__.SnapHeat.InRange); // Force hot snap so that adjust point uses it for alignments...
166561
- accudraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetRMatrix | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.AlwaysSetOrigin, accudraw.origin, rMatrix);
166562
- accudraw.adjustPoint(point, viewport, false); // Update internals for new snap location...
166563
- if (!isMotion)
166564
- this._location = { point, viewport };
166583
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.changeBaseRotationMode(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.RotationMode.Context); // Hold temporary rotation for tool duration...
166565
166584
  return true;
166566
166585
  }
166567
166586
  }
@@ -166572,7 +166591,7 @@ class DefineACSByElementTool extends AccuDrawShortcutsTool {
166572
166591
  _rMatrix = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createIdentity();
166573
166592
  _acs;
166574
166593
  /** @internal */
166575
- onManipulationStart() { _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByElement.Prompts.FirstPoint"); }
166594
+ onManipulationStart() { _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByElement.Prompts.FirstPoint"); }
166576
166595
  /** @internal */
166577
166596
  updateOrientation(snap, vp) {
166578
166597
  const rMatrix = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDraw.getSnapRotation(snap, vp);
@@ -166590,7 +166609,7 @@ class DefineACSByElementTool extends AccuDrawShortcutsTool {
166590
166609
  const snapDetail = _AccuSnap__WEBPACK_IMPORTED_MODULE_3__.TentativeOrAccuSnap.getCurrentSnap(false);
166591
166610
  if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))
166592
166611
  return false;
166593
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.viewManager.invalidateDecorationsAllViews();
166612
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
166594
166613
  if (isMotion)
166595
166614
  return true;
166596
166615
  if (!this._acs)
@@ -166618,24 +166637,24 @@ class DefineACSByPointsTool extends AccuDrawShortcutsTool {
166618
166637
  _acs;
166619
166638
  /** @internal */
166620
166639
  onManipulationStart() {
166621
- if (!_IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.isActive) {
166622
- _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.FirstPoint");
166640
+ if (!_IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive) {
166641
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.FirstPoint");
166623
166642
  return;
166624
166643
  }
166625
- const origin = _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.getPoint().clone();
166626
- _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.SecondPoint");
166627
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, origin);
166644
+ const origin = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.getPoint().clone();
166645
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.SecondPoint");
166646
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, origin);
166628
166647
  this._points.push(origin);
166629
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.tentativePoint.clear(true);
166648
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true);
166630
166649
  }
166631
166650
  /** @internal */
166632
166651
  doManipulation(ev, isMotion) {
166633
166652
  if (!ev || !ev.viewport)
166634
166653
  return false;
166635
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.viewManager.invalidateDecorationsAllViews();
166654
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
166636
166655
  if (isMotion)
166637
166656
  return false;
166638
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.accuDraw.activate();
166657
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
166639
166658
  this._points.push(ev.point.clone());
166640
166659
  const vp = ev.viewport;
166641
166660
  if (!this._acs)
@@ -166645,15 +166664,15 @@ class DefineACSByPointsTool extends AccuDrawShortcutsTool {
166645
166664
  AccuDrawShortcuts.rotateToACS();
166646
166665
  return true;
166647
166666
  }
166648
- _Tool__WEBPACK_IMPORTED_MODULE_7__.CoreTools.outputPromptByKey(`AccuDraw.DefineACSByPoints.Prompts${1 === this._points.length ? ".SecondPoint" : ".NextPoint"}`);
166667
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey(`AccuDraw.DefineACSByPoints.Prompts${1 === this._points.length ? ".SecondPoint" : ".NextPoint"}`);
166649
166668
  return false;
166650
166669
  }
166651
166670
  /** @internal */
166652
166671
  decorate(context) {
166653
166672
  const tmpPoints = [];
166654
166673
  this._points.forEach((pt) => tmpPoints.push(pt));
166655
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_7__.BeButtonEvent();
166656
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
166674
+ const ev = new _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButtonEvent();
166675
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
166657
166676
  tmpPoints.push(ev.point);
166658
166677
  const vp = context.viewport;
166659
166678
  if (!this._acs)
@@ -180449,6 +180468,20 @@ class Geometry {
180449
180468
  static isAlmostEqualEitherNumber(a, b, c, tolerance = Geometry.smallAngleRadians) {
180450
180469
  return this.isAlmostEqualNumber(a, b, tolerance) || this.isAlmostEqualNumber(a, c, tolerance);
180451
180470
  }
180471
+ /**
180472
+ * Toleranced test for equality to any of `count` numbers supplied by `iterator`.
180473
+ * @param a value to test
180474
+ * @param values array of values to test against, or an object that provides the i_th value, where 0 <= i < length.
180475
+ * @param tolerance relative tolerance. Default value is [[smallAngleRadians]].
180476
+ * @returns true if and only if `a` is almost equal to at least one value supplied by `iterator`.
180477
+ */
180478
+ static isAlmostEqualAnyNumber(a, values, tolerance = Geometry.smallAngleRadians) {
180479
+ const value = Array.isArray(values) ? (i) => values[i] : values.iter;
180480
+ for (let i = 0; i < values.length; i++)
180481
+ if (this.isAlmostEqualNumber(a, value(i), tolerance))
180482
+ return true;
180483
+ return false;
180484
+ }
180452
180485
  /**
180453
180486
  * Toleranced equality test using tolerance `tolerance * ( 1 + abs(a.x) + abs(a.y) + abs(b.x) + abs(b.y) )`.
180454
180487
  * * [[smallAngleRadians]] is used if tolerance is `undefined`.
@@ -193759,6 +193792,42 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
193759
193792
  }
193760
193793
  return result;
193761
193794
  }
193795
+ /** Override of [[CurvePrimitive.emitTangents]] for Arc3d. */
193796
+ emitTangents(spacePoint, announceTangent, options) {
193797
+ const centerToPoint = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(this.centerRef, spacePoint);
193798
+ let centerToLocalPoint;
193799
+ if (options?.vectorToEye) {
193800
+ const arcToView = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_4__.Matrix3d.createColumns(this.matrixRef.getColumn(0), this.matrixRef.getColumn(1), options.vectorToEye);
193801
+ centerToLocalPoint = arcToView.multiplyInverse(centerToPoint);
193802
+ }
193803
+ else {
193804
+ centerToLocalPoint = this.matrixRef.multiplyInverse(centerToPoint);
193805
+ }
193806
+ if (centerToLocalPoint === undefined)
193807
+ return;
193808
+ // centerToLocalPoint is a vector in the local coordinate system of the as-viewed arc.
193809
+ // In other words, the local arc is the unit circle.
193810
+ // alpha is the angle from the local x-axis to centerToLocalPoint.
193811
+ // beta is the nonnegative angle from centerToLocalPoint to a tangency radial.
193812
+ // Tangency angles are preserved by local <-> world transformation.
193813
+ if (centerToLocalPoint !== undefined) {
193814
+ const hypotenuseSquared = centerToLocalPoint.magnitudeSquaredXY();
193815
+ if (hypotenuseSquared >= 1.0) { // localPoint lies outside or on the unit circle...
193816
+ // ...and forms a right triangle with unit radial leg to tangent point
193817
+ const distanceToTangency = Math.sqrt(hypotenuseSquared - 1.0);
193818
+ const alpha = Math.atan2(centerToLocalPoint.y, centerToLocalPoint.x);
193819
+ const beta = Math.atan2(distanceToTangency, 1);
193820
+ const angles = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isSmallAngleRadians(beta) ? [alpha] : [alpha + beta, alpha - beta];
193821
+ for (const theta of angles) {
193822
+ const f = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendOptions.resolveRadiansToValidSweepFraction(options?.extend ?? false, theta, this.sweep);
193823
+ if (f.isValid) {
193824
+ const tangent = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_12__.CurveLocationDetail.createCurveFractionPoint(this, f.fraction, this.fractionToPoint(f.fraction));
193825
+ announceTangent(tangent);
193826
+ }
193827
+ }
193828
+ }
193829
+ }
193830
+ }
193762
193831
  /** Reverse the sweep of the arc. */
193763
193832
  reverseInPlace() {
193764
193833
  this._sweep.reverseInPlace();
@@ -196073,38 +196142,42 @@ class CurveExtendOptions {
196073
196142
  return fraction;
196074
196143
  }
196075
196144
  /**
196076
- * Adjust a radians value to an angle sweep, allowing the extendParam to affect choice among periodic fractions.
196077
- * * If radians is within the sweep, convert it to a fraction of the sweep.
196078
- * * If radians is outside, use the extendParam to choose among:
196079
- * * fraction below 0.
196080
- * * fraction above 1.
196145
+ * Adjust a radians value to an angle sweep, extending beyond or clamping to [0,1] according to `extendParam`:
196146
+ * * If `radians` is within the sweep, convert it to a fraction of the sweep.
196147
+ * * If `radians` is outside the sweep and `extendParam` does not allow extension at both ends, adjust the fraction:
196148
+ * * fraction below 0 if `extendParam` allows extension only at start
196149
+ * * fraction above 1 if `extendParam` allows extension only at end
196150
+ * * fraction clamped to [0,1] if `extendParam` disallows extension at both ends
196151
+ * @returns adjusted fraction of sweep, and a boolean indicating whether it is valid, i.e. whether `radians` lies in
196152
+ * the sweep extended per `extendParam`.
196081
196153
  */
196082
- static resolveRadiansToSweepFraction(extendParam, radians, sweep) {
196154
+ static resolveRadiansToValidSweepFraction(extendParam, radians, sweep) {
196083
196155
  let fraction = sweep.radiansToSignedPeriodicFraction(radians);
196156
+ let isValid = true;
196084
196157
  if (!sweep.isRadiansInSweep(radians)) {
196085
196158
  const fractionPeriod = sweep.fractionPeriod();
196086
196159
  const mode0 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 0);
196087
196160
  const mode1 = CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extendParam, 1);
196088
196161
  if (mode0 !== CurveExtendMode.None) {
196089
- if (mode1 !== CurveExtendMode.None) {
196090
- // both extensions possible; let the sweep resolve to the "closer" end
196091
- fraction = sweep.radiansToSignedPeriodicFraction(radians);
196092
- }
196093
- else {
196094
- // only extend to negative
196162
+ if (mode1 === CurveExtendMode.None) { // only extend to negative
196095
196163
  if (fraction > 1.0)
196096
196164
  fraction -= fractionPeriod;
196097
196165
  }
196098
196166
  }
196099
- else if (mode1 !== CurveExtendMode.None) {
196167
+ else if (mode1 !== CurveExtendMode.None) { // only extend to positive
196100
196168
  if (fraction < 0.0)
196101
196169
  fraction += fractionPeriod;
196102
196170
  }
196103
- else { // both clamped
196171
+ else { // no extension allowed
196104
196172
  fraction = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.clamp(fraction, 0, 1);
196173
+ isValid = false;
196105
196174
  }
196106
196175
  }
196107
- return fraction;
196176
+ return { fraction, isValid };
196177
+ }
196178
+ /** Call [[resolveRadiansToValidSweepFraction]] and return only the fraction. */
196179
+ static resolveRadiansToSweepFraction(extendParam, radians, sweep) {
196180
+ return this.resolveRadiansToValidSweepFraction(extendParam, radians, sweep).fraction;
196108
196181
  }
196109
196182
  }
196110
196183
 
@@ -197524,7 +197597,7 @@ __webpack_require__.r(__webpack_exports__);
197524
197597
  /* harmony export */ CurvePrimitive: () => (/* binding */ CurvePrimitive)
197525
197598
  /* harmony export */ });
197526
197599
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
197527
- /* harmony import */ var _curve_Query_StrokeCountMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../curve/Query/StrokeCountMap */ "../../core/geometry/lib/esm/curve/Query/StrokeCountMap.js");
197600
+ /* harmony import */ var _curve_Query_StrokeCountMap__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../curve/Query/StrokeCountMap */ "../../core/geometry/lib/esm/curve/Query/StrokeCountMap.js");
197528
197601
  /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
197529
197602
  /* harmony import */ var _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometry3d/Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
197530
197603
  /* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
@@ -197533,8 +197606,9 @@ __webpack_require__.r(__webpack_exports__);
197533
197606
  /* harmony import */ var _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../geometry3d/Transform */ "../../core/geometry/lib/esm/geometry3d/Transform.js");
197534
197607
  /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
197535
197608
  /* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
197536
- /* harmony import */ var _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internalContexts/AppendPlaneIntersectionStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js");
197609
+ /* harmony import */ var _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./internalContexts/AppendPlaneIntersectionStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js");
197537
197610
  /* harmony import */ var _internalContexts_ClosestPointStrokeHandler__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./internalContexts/ClosestPointStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js");
197611
+ /* harmony import */ var _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internalContexts/AnnounceTangentStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js");
197538
197612
  /* harmony import */ var _internalContexts_CurveLengthContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internalContexts/CurveLengthContext */ "../../core/geometry/lib/esm/curve/internalContexts/CurveLengthContext.js");
197539
197613
  /*---------------------------------------------------------------------------------------------
197540
197614
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -197556,6 +197630,7 @@ __webpack_require__.r(__webpack_exports__);
197556
197630
 
197557
197631
 
197558
197632
 
197633
+
197559
197634
  /**
197560
197635
  * A curve primitive is bounded.
197561
197636
  * A curve primitive maps fractions in 0..1 to points in space.
@@ -197944,12 +198019,8 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_1__.Geometr
197944
198019
  * * Since CurvePrimitive should always have start and end available as candidate points, this method should always
197945
198020
  * succeed.
197946
198021
  * @param spacePoint point in space.
197947
- * @param extend if applicable, compute the closest point to the curve extended according to variant type:
197948
- * * false: do not extend the curve
197949
- * * true: extend the curve at both start and end
197950
- * * CurveExtendOptions: extend the curve in the specified manner at both start and end
197951
- * * CurveExtendOptions[]: first entry applies to curve start; second, to curve end; any other entries ignored
197952
- * @param result optional pre-allocated detail to populate and return.
198022
+ * @param extend (optional) compute the closest point to the curve extended according to variant type (default false)
198023
+ * @param result (optional) pre-allocated detail to populate and return.
197953
198024
  * @returns details of the closest point.
197954
198025
  */
197955
198026
  closestPoint(spacePoint, extend, result) {
@@ -197957,6 +198028,62 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_1__.Geometr
197957
198028
  this.emitStrokableParts(strokeHandler);
197958
198029
  return strokeHandler.claimResult();
197959
198030
  }
198031
+ /**
198032
+ * Announce all points `P` on the curve such that the line containing `spacePoint` and `P` is tangent to the curve in
198033
+ * the view defined by `options.vectorToEye`.
198034
+ * * Strictly speaking, each tangent line lies in the plane through `P` whose normal is the cross product of the curve
198035
+ * tangent at `P` and `options.vectorToEye`. This is equivalent to tangency as seen in a view plane perpendicular to
198036
+ * `options.vectorToEye`.
198037
+ * @param spacePoint point in space.
198038
+ * @param announceTangent callback to announce each computed tangent. The received [[CurveLocationDetail]] is reused
198039
+ * internally, so it should be cloned in the callback if it needs to be saved.
198040
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
198041
+ */
198042
+ emitTangents(spacePoint, announceTangent, options) {
198043
+ const strokeHandler = new _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_11__.AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);
198044
+ this.emitStrokableParts(strokeHandler, options?.strokeOptions);
198045
+ }
198046
+ /**
198047
+ * Return all points `P` on the curve such that the line containing `spacePoint` and `P` is tangent to the curve in
198048
+ * the view defined by `options.vectorToEye`.
198049
+ * * See [[emitTangents]] for the definition of tangency employed.
198050
+ * @param spacePoint point in space.
198051
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
198052
+ * @returns an array of details of all tangent points or undefined if no tangent was found.
198053
+ */
198054
+ allTangents(spacePoint, options) {
198055
+ const tangents = [];
198056
+ this.emitTangents(spacePoint, (t) => tangents.push(t.clone()), options);
198057
+ return (tangents.length === 0) ? undefined : tangents;
198058
+ }
198059
+ /**
198060
+ * Return the point `P` on the curve such that the line containing `spacePoint` and `P` is tangent to the curve in
198061
+ * the view defined by `options.vectorToEye`, and `P` is closest to `options.hintPoint` in this view.
198062
+ * * See [[emitTangents]] for the definition of tangency employed.
198063
+ * @param spacePoint point in space.
198064
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
198065
+ * @returns the detail of the closest tangent point or undefined if no tangent was found.
198066
+ */
198067
+ closestTangent(spacePoint, options) {
198068
+ const hint = options?.hintPoint ?? spacePoint;
198069
+ let toLocal;
198070
+ if (options?.vectorToEye && !options.vectorToEye.isExactEqual({ x: 0, y: 0, z: 1 }))
198071
+ toLocal = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_3__.Matrix3d.createRigidViewAxesZTowardsEye(options.vectorToEye.x, options.vectorToEye.y, options.vectorToEye.z);
198072
+ const measureHintDist2 = (pt) => {
198073
+ return toLocal?.multiplyTransposeXYZ(hint.x - pt.x, hint.y - pt.y, hint.z - pt.z).magnitudeSquaredXY() ?? pt.distanceSquaredXY(hint);
198074
+ };
198075
+ let closestTangent;
198076
+ let closestDist2 = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.largeCoordinateResult;
198077
+ const collectClosestTangent = (tangent) => {
198078
+ const dist2 = measureHintDist2(tangent.point);
198079
+ if (!closestTangent || dist2 < closestDist2) {
198080
+ closestTangent = tangent.clone(closestTangent);
198081
+ closestDist2 = dist2;
198082
+ }
198083
+ };
198084
+ this.emitTangents(spacePoint, collectClosestTangent, options);
198085
+ return closestTangent;
198086
+ }
197960
198087
  /**
197961
198088
  * Find intervals of this curvePrimitive that are interior to a clipper
197962
198089
  * @param clipper clip structure (e.g. clip planes)
@@ -198004,7 +198131,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_1__.Geometr
198004
198131
  * @returns Return the number of CurveLocationDetail's added to the result array.
198005
198132
  */
198006
198133
  appendPlaneIntersectionPoints(plane, result) {
198007
- const strokeHandler = new _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_11__.AppendPlaneIntersectionStrokeHandler(plane, result);
198134
+ const strokeHandler = new _internalContexts_AppendPlaneIntersectionStrokeHandler__WEBPACK_IMPORTED_MODULE_12__.AppendPlaneIntersectionStrokeHandler(plane, result);
198008
198135
  const n0 = result.length;
198009
198136
  this.emitStrokableParts(strokeHandler);
198010
198137
  return result.length - n0;
@@ -198101,7 +198228,7 @@ class CurvePrimitive extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_1__.Geometr
198101
198228
  computeAndAttachRecursiveStrokeCounts(options, parentMap) {
198102
198229
  const n = this.computeStrokeCountForOptions(options);
198103
198230
  const a = this.curveLength();
198104
- CurvePrimitive.installStrokeCountMap(this, _curve_Query_StrokeCountMap__WEBPACK_IMPORTED_MODULE_12__.StrokeCountMap.createWithCurvePrimitive(this, n, a, 0, a), parentMap);
198231
+ CurvePrimitive.installStrokeCountMap(this, _curve_Query_StrokeCountMap__WEBPACK_IMPORTED_MODULE_13__.StrokeCountMap.createWithCurvePrimitive(this, n, a, 0, a), parentMap);
198105
198232
  }
198106
198233
  /**
198107
198234
  * Evaluate strokes at fractions indicated in a StrokeCountMap.
@@ -200198,9 +200325,8 @@ class LineString3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePri
200198
200325
  handler.startCurvePrimitive(this);
200199
200326
  if (n > 1) {
200200
200327
  const df = 1.0 / (n - 1);
200201
- // This is a linestring.
200202
- // There is no need for chordTol and angleTol within a segment.
200203
- // Do NOT apply min strokes per primitive.
200328
+ // this is a line string; there is no need for chordTol and angleTol within a segment
200329
+ // DO NOT apply min strokes per primitive
200204
200330
  if (options && options.hasMaxEdgeLength) {
200205
200331
  for (let i = 1; i < n; i++) {
200206
200332
  const numStroke = options.applyMaxEdgeLength(1, this._points.getPoint3dAtUncheckedPointIndex(i - 1).distance(this._points.getPoint3dAtUncheckedPointIndex(i)));
@@ -205129,6 +205255,204 @@ class UnionRegion extends _CurveCollection__WEBPACK_IMPORTED_MODULE_0__.CurveCol
205129
205255
  }
205130
205256
 
205131
205257
 
205258
+ /***/ }),
205259
+
205260
+ /***/ "../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js":
205261
+ /*!******************************************************************************************!*\
205262
+ !*** ../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js ***!
205263
+ \******************************************************************************************/
205264
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
205265
+
205266
+ "use strict";
205267
+ __webpack_require__.r(__webpack_exports__);
205268
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
205269
+ /* harmony export */ AnnounceTangentStrokeHandler: () => (/* binding */ AnnounceTangentStrokeHandler)
205270
+ /* harmony export */ });
205271
+ /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
205272
+ /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
205273
+ /* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
205274
+ /* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
205275
+ /* harmony import */ var _numerics_Newton__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../numerics/Newton */ "../../core/geometry/lib/esm/numerics/Newton.js");
205276
+ /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
205277
+ /* harmony import */ var _NewtonRtoRStrokeHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NewtonRtoRStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js");
205278
+ /*---------------------------------------------------------------------------------------------
205279
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
205280
+ * See LICENSE.md in the project root for license terms and full copyright notice.
205281
+ *--------------------------------------------------------------------------------------------*/
205282
+ /** @packageDocumentation
205283
+ * @module Curve
205284
+ */
205285
+
205286
+
205287
+
205288
+
205289
+
205290
+
205291
+
205292
+ /**
205293
+ * Context for searching for the tangent(s) to a CurvePrimitive.
205294
+ * @internal
205295
+ */
205296
+ class AnnounceTangentStrokeHandler extends _NewtonRtoRStrokeHandler__WEBPACK_IMPORTED_MODULE_1__.NewtonRtoRStrokeHandler {
205297
+ _curve;
205298
+ _announceTangent;
205299
+ _spacePoint;
205300
+ _vectorToEye;
205301
+ _distanceTol;
205302
+ _distanceTolSquared;
205303
+ // fraction and function value on one side of an interval that may bracket a root
205304
+ _fractionA = 0;
205305
+ _functionA = 0;
205306
+ // fraction and function value on the other side of an interval that may bracket a root
205307
+ _fractionB = 0;
205308
+ _functionB = 0;
205309
+ _numThisCurve = 0;
205310
+ // scratch vars to use within methods
205311
+ _fractionMRU;
205312
+ _curveMRU;
205313
+ _workRay;
205314
+ _workDetail;
205315
+ _newtonSolver;
205316
+ /** Constructor */
205317
+ constructor(spacePoint, announceTangent, options) {
205318
+ super();
205319
+ this._announceTangent = announceTangent;
205320
+ this._spacePoint = spacePoint;
205321
+ this._vectorToEye = options?.vectorToEye ?? _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.unitZ();
205322
+ this._distanceTol = options?.distanceTol ?? _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.smallMetricDistance;
205323
+ this._distanceTolSquared = this._distanceTol * this._distanceTol;
205324
+ this._workRay = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_4__.Ray3d.createZero();
205325
+ this.startCurvePrimitive(undefined);
205326
+ this._newtonSolver = new _numerics_Newton__WEBPACK_IMPORTED_MODULE_5__.Newton1dUnboundedApproximateDerivative(this);
205327
+ }
205328
+ /** Specified by IStrokeHandler. */
205329
+ needPrimaryGeometryForStrokes() {
205330
+ return true;
205331
+ }
205332
+ /** Specified by IStrokeHandler. */
205333
+ startCurvePrimitive(curve) {
205334
+ this._curve = curve;
205335
+ this._fractionA = 0.0;
205336
+ this._numThisCurve = 0;
205337
+ this._functionA = 0.0;
205338
+ }
205339
+ /** Specified by IStrokeHandler. */
205340
+ endCurvePrimitive() {
205341
+ }
205342
+ /** Specified by IStrokeHandler. */
205343
+ announceIntervalForUniformStepStrokes(cp, numStrokes, fraction0, fraction1) {
205344
+ this.startCurvePrimitive(cp);
205345
+ if (numStrokes < 1)
205346
+ numStrokes = 1;
205347
+ const df = 1.0 / numStrokes;
205348
+ for (let i = 0; i <= numStrokes; i++) {
205349
+ const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.interpolate(fraction0, i * df, fraction1);
205350
+ cp.fractionToPointAndDerivative(fraction, this._workRay);
205351
+ this.announceRay(fraction, this._workRay);
205352
+ }
205353
+ }
205354
+ announceCandidate(cp, fraction, point) {
205355
+ if (this._parentCurvePrimitive)
205356
+ cp = this._parentCurvePrimitive;
205357
+ if (this._curveMRU === cp && _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isAlmostEqualOptional(this._fractionMRU, fraction, _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.smallFloatingPoint))
205358
+ return; // avoid announcing duplicate tangents in succession (e.g., at interior stroke point)
205359
+ this._workDetail = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetail.createCurveFractionPoint(cp, fraction, point, this._workDetail);
205360
+ this._announceTangent(this._workDetail);
205361
+ this._fractionMRU = fraction;
205362
+ this._curveMRU = cp;
205363
+ }
205364
+ /** Specified by IStrokeHandler. */
205365
+ announceSegmentInterval(cp, point0, point1, _numStrokes, fraction0, fraction1) {
205366
+ let fraction;
205367
+ let point;
205368
+ const distance0 = this._spacePoint.distanceSquared(point0);
205369
+ const distance1 = this._spacePoint.distanceSquared(point1);
205370
+ if (distance0 < distance1) {
205371
+ fraction = fraction0;
205372
+ point = point0;
205373
+ }
205374
+ else {
205375
+ fraction = fraction1;
205376
+ point = point1;
205377
+ }
205378
+ // evaluate at midpoint; the endpoints may be at corners, which have ambiguous tangent
205379
+ const value = this.evaluateFunction(undefined, (fraction0 + fraction1) / 2, cp);
205380
+ if (value !== undefined && _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isDistanceWithinTol(value, this._distanceTol))
205381
+ this.announceCandidate(cp, fraction, point);
205382
+ }
205383
+ /**
205384
+ * Given a function `f` and (unordered) fractions `a` and `b`, search for and announce a root of `f` in this
205385
+ * fractional interval.
205386
+ * * This method searches for a root of `f` if and only if the stroke segment defined by `(a, f(a))` and
205387
+ * `(b, f(b))` has a root. This is a HEURISTIC: given continuous `f` between `a` and `b`, a root of the stroke
205388
+ * segment implies a root of `f`, but not vice-versa. Therefore, if the strokes are not sufficiently dense,
205389
+ * this method can miss a root of `f`.
205390
+ */
205391
+ searchInterval() {
205392
+ // directly announce at endpoint if we are extra certain it's a root; Newton can miss it if it has multiplicity > 1
205393
+ if (_Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isDistanceWithinTol(this._functionA, this._distanceTolSquared))
205394
+ this.announceSolutionFraction(this._fractionA);
205395
+ if (_Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isDistanceWithinTol(this._functionB, this._distanceTolSquared))
205396
+ this.announceSolutionFraction(this._fractionB);
205397
+ if (this._functionA * this._functionB < 0) {
205398
+ // by the Intermediate Value Theorem, a root lies between fractionA and fractionB; use Newton to find it.
205399
+ const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.inverseInterpolate(this._fractionA, this._functionA, this._fractionB, this._functionB);
205400
+ if (fraction) {
205401
+ this._newtonSolver.setX(fraction);
205402
+ if (this._newtonSolver.runIterations())
205403
+ this.announceSolutionFraction(this._newtonSolver.getX());
205404
+ }
205405
+ }
205406
+ }
205407
+ announceSolutionFraction(fraction) {
205408
+ if (this._curve)
205409
+ this.announceCandidate(this._curve, fraction, this._curve.fractionToPoint(fraction));
205410
+ }
205411
+ /**
205412
+ * Evaluate the univariate real-valued function for which we are finding roots.
205413
+ * * For finding the tangents to curve `X` from point `Q` as seen in a view plane with normal `N`, this
205414
+ * function is `f(t) := (Q - X(t)) dot (X'(t) cross N)`. The second vector in the dot product defines a
205415
+ * _tangent plane_ at `X(t)`.
205416
+ * * Either `pointAndDerivative` must be defined, or both `fraction` and `curve`.
205417
+ * @param pointAndDerivative pre-evaluated curve
205418
+ * @param fraction fraction at which to evaluate `curve`
205419
+ * @param curve curve to evaluate at `fraction`
205420
+ * @returns distance of `Q` from the tangent plane at `X(t)`.
205421
+ */
205422
+ evaluateFunction(pointAndDerivative, fraction, curve) {
205423
+ if (pointAndDerivative)
205424
+ this._workRay.setFrom(pointAndDerivative);
205425
+ else if (fraction !== undefined && curve)
205426
+ this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);
205427
+ else
205428
+ return undefined;
205429
+ const cross = this._vectorToEye.unitCrossProduct(this._workRay.direction); // normalized so we return true distance
205430
+ return cross ? cross.dotProductStartEnd(this._workRay.origin, this._spacePoint) : undefined;
205431
+ }
205432
+ /** Specified by NewtonRtoRStrokeHandler. */
205433
+ evaluate(fraction) {
205434
+ const curve = this._parentCurvePrimitive ?? this._curve;
205435
+ const value = this.evaluateFunction(undefined, fraction, curve);
205436
+ if (value === undefined)
205437
+ return false;
205438
+ this.currentF = value;
205439
+ return true;
205440
+ }
205441
+ announceRay(fraction, data) {
205442
+ this._functionB = this.evaluateFunction(data);
205443
+ this._fractionB = fraction;
205444
+ if (this._numThisCurve++ > 0) // after the first stroke point, a stroke segment is defined, so we have an interval
205445
+ this.searchInterval();
205446
+ this._functionA = this._functionB;
205447
+ this._fractionA = this._fractionB;
205448
+ }
205449
+ /** Specified by IStrokeHandler. */
205450
+ announcePointTangent(_point, _fraction, _tangent) {
205451
+ (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "No callers expected. IStrokeHandler probably didn't need to specify this method.");
205452
+ }
205453
+ }
205454
+
205455
+
205132
205456
  /***/ }),
205133
205457
 
205134
205458
  /***/ "../../core/geometry/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js":
@@ -205669,22 +205993,25 @@ class ClosestPointStrokeHandler extends _NewtonRtoRStrokeHandler__WEBPACK_IMPORT
205669
205993
  _closestPoint;
205670
205994
  _spacePoint;
205671
205995
  _extend;
205996
+ // fraction and function value on one side of an interval that may bracket a root
205672
205997
  _fractionA = 0;
205673
205998
  _functionA = 0;
205674
- _functionB = 0;
205999
+ // fraction and function value on the other side of an interval that may bracket a root
205675
206000
  _fractionB = 0;
206001
+ _functionB = 0;
205676
206002
  _numThisCurve = 0;
205677
- // scratch vars for use within methods.
206003
+ // scratch vars to use within methods
205678
206004
  _workPoint;
205679
206005
  _workRay;
205680
206006
  _newtonSolver;
206007
+ /** Constructor */
205681
206008
  constructor(spacePoint, extend, result) {
205682
206009
  super();
205683
206010
  this._spacePoint = spacePoint;
205684
206011
  this._workPoint = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create();
205685
206012
  this._workRay = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_2__.Ray3d.createZero();
205686
206013
  this._closestPoint = result;
205687
- this._extend = extend;
206014
+ this._extend = extend ?? false;
205688
206015
  this.startCurvePrimitive(undefined);
205689
206016
  this._newtonSolver = new _numerics_Newton__WEBPACK_IMPORTED_MODULE_3__.Newton1dUnboundedApproximateDerivative(this);
205690
206017
  }
@@ -205735,7 +206062,7 @@ class ClosestPointStrokeHandler extends _NewtonRtoRStrokeHandler__WEBPACK_IMPORT
205735
206062
  }
205736
206063
  announceSegmentInterval(cp, point0, point1, _numStrokes, fraction0, fraction1) {
205737
206064
  let localFraction = this._spacePoint.fractionOfProjectionToLine(point0, point1, 0.0);
205738
- // only consider extending the segment if the immediate caller says we are at endpoints ...
206065
+ // only consider extending the segment if the immediate caller says we are at endpoints
205739
206066
  if (!this._extend)
205740
206067
  localFraction = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.clampToStartEnd(localFraction, 0.0, 1.0);
205741
206068
  else {
@@ -205748,13 +206075,22 @@ class ClosestPointStrokeHandler extends _NewtonRtoRStrokeHandler__WEBPACK_IMPORT
205748
206075
  const globalFraction = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.interpolate(fraction0, localFraction, fraction1);
205749
206076
  this.announceCandidate(cp, globalFraction, this._workPoint);
205750
206077
  }
206078
+ /**
206079
+ * Given a function `f` and (unordered) fractions `a` and `b`, search for and announce a root of `f` in this
206080
+ * fractional interval.
206081
+ * * This method searches for a root of `f` if and only if the stroke segment defined by `(a, f(a))` and
206082
+ * `(b, f(b))` has a root. This is a HEURISTIC: given continuous `f` between `a` and `b`, a root of the stroke
206083
+ * segment implies a root of `f`, but not vice-versa. Therefore, if the strokes are not sufficiently dense,
206084
+ * this method can miss a root of `f`.
206085
+ */
205751
206086
  searchInterval() {
205752
206087
  if (this._functionA * this._functionB > 0)
205753
- return;
206088
+ return; // stroke segment has no root; ASSUME the function has no root either
205754
206089
  if (this._functionA === 0)
205755
206090
  this.announceSolutionFraction(this._fractionA);
205756
206091
  if (this._functionB === 0)
205757
206092
  this.announceSolutionFraction(this._fractionB);
206093
+ // by the Intermediate Value Theorem, a root lies between fractionA and fractionB; use Newton to find it.
205758
206094
  if (this._functionA * this._functionB < 0) {
205759
206095
  const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.inverseInterpolate(this._fractionA, this._functionA, this._fractionB, this._functionB);
205760
206096
  if (fraction) {
@@ -205764,28 +206100,41 @@ class ClosestPointStrokeHandler extends _NewtonRtoRStrokeHandler__WEBPACK_IMPORT
205764
206100
  }
205765
206101
  }
205766
206102
  }
205767
- evaluateB(fractionB, dataB) {
205768
- this._functionB = dataB.dotProductToPoint(this._spacePoint);
205769
- this._fractionB = fractionB;
205770
- }
205771
206103
  announceSolutionFraction(fraction) {
205772
206104
  if (this._curve)
205773
206105
  this.announceCandidate(this._curve, fraction, this._curve.fractionToPoint(fraction));
205774
206106
  }
206107
+ /**
206108
+ * Evaluate the univariate real-valued function for which we are finding roots.
206109
+ * * For finding the closest point to curve X from point Q, this function is `f(t) := Q-X(t) dot X'(t)`.
206110
+ * * Either `pointAndDerivative` must be defined, or both `fraction` and `curve`.
206111
+ * @param pointAndDerivative pre-evaluated curve
206112
+ * @param fraction fraction at which to evaluate `curve`
206113
+ * @param curve curve to evaluate at `fraction`
206114
+ */
206115
+ evaluateFunction(pointAndDerivative, fraction, curve) {
206116
+ if (pointAndDerivative)
206117
+ this._workRay.setFrom(pointAndDerivative);
206118
+ else if (fraction !== undefined && curve)
206119
+ this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);
206120
+ else
206121
+ return undefined;
206122
+ return this._workRay.dotProductToPoint(this._spacePoint);
206123
+ }
205775
206124
  evaluate(fraction) {
205776
206125
  let curve = this._curve;
205777
206126
  if (this._parentCurvePrimitive)
205778
206127
  curve = this._parentCurvePrimitive;
205779
- if (curve) {
205780
- this._workRay = curve.fractionToPointAndDerivative(fraction, this._workRay);
205781
- this.currentF = this._workRay.dotProductToPoint(this._spacePoint);
205782
- return true;
205783
- }
205784
- return false;
206128
+ const value = this.evaluateFunction(undefined, fraction, curve);
206129
+ if (value === undefined)
206130
+ return false;
206131
+ this.currentF = value;
206132
+ return true;
205785
206133
  }
205786
206134
  announceRay(fraction, data) {
205787
- this.evaluateB(fraction, data);
205788
- if (this._numThisCurve++ > 0)
206135
+ this._functionB = this.evaluateFunction(data);
206136
+ this._fractionB = fraction;
206137
+ if (this._numThisCurve++ > 0) // after the first stroke point, a stroke segment is defined, so we have an interval
205789
206138
  this.searchInterval();
205790
206139
  this._functionA = this._functionB;
205791
206140
  this._fractionA = this._fractionB;
@@ -210245,7 +210594,8 @@ __webpack_require__.r(__webpack_exports__);
210245
210594
  * @module Curve
210246
210595
  */
210247
210596
 
210248
- /** Intermediate class for managing the parentCurve announcements from an IStrokeHandler.
210597
+ /**
210598
+ * Intermediate class for managing the parentCurve announcements from an IStrokeHandler.
210249
210599
  * @internal
210250
210600
  */
210251
210601
  class NewtonRtoRStrokeHandler extends _numerics_Newton__WEBPACK_IMPORTED_MODULE_0__.NewtonEvaluatorRtoR {
@@ -210254,10 +210604,11 @@ class NewtonRtoRStrokeHandler extends _numerics_Newton__WEBPACK_IMPORTED_MODULE_
210254
210604
  super();
210255
210605
  this._parentCurvePrimitive = undefined;
210256
210606
  }
210257
- /** retain the parentCurvePrimitive.
210607
+ /**
210608
+ * Retain the parentCurvePrimitive.
210258
210609
  * * Calling this method tells the handler that the parent curve is to be used for detail searches.
210259
210610
  * * Example: Transition spiral search is based on linestring first, then the exact spiral.
210260
- * * Example: CurveChainWithDistanceIndex does NOT do this announcement -- the constituents act independently.
210611
+ * * Example: CurveChainWithDistanceIndex does NOT do this announcement; the constituents act independently.
210261
210612
  */
210262
210613
  startParentCurvePrimitive(curve) {
210263
210614
  this._parentCurvePrimitive = curve;
@@ -214428,7 +214779,7 @@ class AngleSweep {
214428
214779
  }
214429
214780
  /** Read-property for signed start-to-end sweep in degrees. */
214430
214781
  get sweepDegrees() {
214431
- return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.radiansToDegrees(this._radians1 - this._radians0);
214782
+ return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.radiansToDegrees(this.sweepRadians);
214432
214783
  }
214433
214784
  /** Read-property for degrees at the start of this AngleSweep. */
214434
214785
  get startRadians() {
@@ -214607,20 +214958,20 @@ class AngleSweep {
214607
214958
  /** Convert fractional position in the sweep to radians. */
214608
214959
  fractionToRadians(fraction) {
214609
214960
  return fraction < 0.5 ?
214610
- this._radians0 + fraction * (this._radians1 - this._radians0) :
214611
- this._radians1 + (fraction - 1.0) * (this._radians1 - this._radians0);
214961
+ this._radians0 + fraction * this.sweepRadians :
214962
+ this._radians1 + (fraction - 1.0) * this.sweepRadians;
214612
214963
  }
214613
214964
  /** Convert fractional position in the sweep to strongly typed Angle object. */
214614
214965
  fractionToAngle(fraction) {
214615
214966
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(this.fractionToRadians(fraction));
214616
214967
  }
214617
214968
  /**
214618
- * Return 2PI divided by the sweep radians (i.e. 360 degrees divided by sweep angle).
214969
+ * Return 2PI divided by the sweep radians.
214619
214970
  * * This is the number of fractional intervals required to cover a whole circle.
214620
214971
  * @returns period of the sweep, or 1 if sweep is empty.
214621
214972
  */
214622
214973
  fractionPeriod() {
214623
- return this.isEmpty ? 1.0 : _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.pi2Radians / Math.abs(this._radians1 - this._radians0);
214974
+ return this.isEmpty ? 1.0 : _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.pi2Radians / Math.abs(this.sweepRadians);
214624
214975
  }
214625
214976
  /**
214626
214977
  * Return the fractionalized position of the given angle (as Angle) computed without consideration of
@@ -214636,7 +214987,7 @@ class AngleSweep {
214636
214987
  * @returns unbounded fraction, or 1 if sweep is empty.
214637
214988
  */
214638
214989
  angleToUnboundedFraction(theta) {
214639
- return this.isEmpty ? 1.0 : (theta.radians - this._radians0) / (this._radians1 - this._radians0);
214990
+ return this.isEmpty ? 1.0 : (theta.radians - this._radians0) / this.sweepRadians;
214640
214991
  }
214641
214992
  /**
214642
214993
  * Convert a sweep fraction to the equivalent period-shifted fraction inside the sweep, or within one period of zero
@@ -214930,7 +215281,7 @@ class AngleSweep {
214930
215281
  isAlmostEqualAllowPeriodShift(other, radianTol = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallAngleRadians) {
214931
215282
  return this.isCCW === other.isCCW // this rules out equating opposite sweeps like [0,-100] and [0,260]
214932
215283
  && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians0, other._radians0, radianTol)
214933
- && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0, radianTol);
215284
+ && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this.sweepRadians, other.sweepRadians, radianTol);
214934
215285
  }
214935
215286
  /**
214936
215287
  * Test if two angle sweeps match within the given tolerance.
@@ -214940,7 +215291,7 @@ class AngleSweep {
214940
215291
  */
214941
215292
  isAlmostEqualNoPeriodShift(other, radianTol = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallAngleRadians) {
214942
215293
  return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians0, other._radians0, radianTol)
214943
- && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0, radianTol);
215294
+ && _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this.sweepRadians, other.sweepRadians, radianTol);
214944
215295
  }
214945
215296
  /**
214946
215297
  * Test if start and end angles match with radians tolerance.
@@ -223625,28 +223976,27 @@ class Matrix3d {
223625
223976
  return count === 3;
223626
223977
  }
223627
223978
  /**
223628
- * Adjust the matrix in place to make is a `rigid` matrix so that:
223629
- * * columns are perpendicular and have unit length.
223630
- * * transpose equals inverse.
223631
- * * mirroring is removed.
223632
- * * This function internally uses `axisOrderCrossProductsInPlace` to make the matrix rigid.
223633
- * @param axisOrder how to reorder the matrix columns
223634
- * @return whether the adjusted matrix is `rigid` on return
223979
+ * Adjust the matrix in place to make it rigid:
223980
+ * * Columns are perpendicular and have unit length.
223981
+ * * Transpose equals inverse.
223982
+ * @param axisOrder how to reorder the matrix columns. A left-handed ordering will return a mirror.
223983
+ * @return whether the adjusted matrix is rigid on return
223635
223984
  */
223636
223985
  makeRigid(axisOrder = _Geometry__WEBPACK_IMPORTED_MODULE_0__.AxisOrder.XYZ) {
223637
223986
  const maxAbs = this.maxAbs();
223638
223987
  if (_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSmallMetricDistance(maxAbs))
223639
223988
  return false;
223640
223989
  const scale = 1.0 / maxAbs;
223641
- this.scaleColumnsInPlace(scale, scale, scale);
223990
+ this.scaleColumnsInPlace(scale, scale, scale); // improve numerical stability
223642
223991
  this.axisOrderCrossProductsInPlace(axisOrder);
223643
223992
  return this.normalizeColumnsInPlace();
223644
223993
  }
223645
223994
  /**
223646
- * Create a new orthogonal matrix (perpendicular columns, unit length, transpose is inverse).
223647
- * * Columns are taken from the source Matrix3d in order indicated by the axis order.
223648
- * * Mirroring in the matrix is removed.
223649
- * * This function internally uses `axisOrderCrossProductsInPlace` to make the matrix rigid.
223995
+ * Create a new orthogonal matrix by calling [[makeRigid]] on a clone of `source`.
223996
+ * @param source input matrix
223997
+ * @param axisOrder how to reorder the matrix columns. A left-handed ordering will return a mirror.
223998
+ * @param result optional preallocated result to populate and return
223999
+ * @returns rigid matrix, or `undefined` if the operation failed.
223650
224000
  */
223651
224001
  static createRigidFromMatrix3d(source, axisOrder = _Geometry__WEBPACK_IMPORTED_MODULE_0__.AxisOrder.XYZ, result) {
223652
224002
  result = source.clone(result);
@@ -244696,7 +245046,7 @@ class FacetOrientationFixup {
244696
245046
  _facetOrientation;
244697
245047
  _components;
244698
245048
  _visitor;
244699
- _mesh;
245049
+ _mesh; // we could get by with just a Polyface/Visitor but for the call to reverseSingleFacet
244700
245050
  constructor(mesh) {
244701
245051
  this._visitor = mesh.createVisitor(1);
244702
245052
  this._edges = _PolyfaceQuery__WEBPACK_IMPORTED_MODULE_0__.PolyfaceQuery.createIndexedEdges(this._visitor);
@@ -250188,6 +250538,7 @@ class PolyfaceData {
250188
250538
  if (this.colorIndex !== this.pointIndex)
250189
250539
  PolyfaceData.reverseIndices(facetStartIndex, this.colorIndex, true);
250190
250540
  PolyfaceData.reverseIndices(facetStartIndex, this.edgeVisible, false);
250541
+ // TODO: reverse auxData.indices, edgeMateIndex
250191
250542
  }
250192
250543
  }
250193
250544
  /**
@@ -250207,6 +250558,7 @@ class PolyfaceData {
250207
250558
  if (this.colorIndex !== this.pointIndex)
250208
250559
  PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.colorIndex, true);
250209
250560
  PolyfaceData.reverseIndicesSingleFacet(facetIndex, facetStartIndex, this.edgeVisible, false);
250561
+ // TODO: reverse auxData.indices, edgeMateIndex
250210
250562
  }
250211
250563
  /** Scale all the normals by -1. */
250212
250564
  reverseNormals() {
@@ -275587,12 +275939,12 @@ class Triangulator {
275587
275939
  * * Return false if clearly negative or almost zero.
275588
275940
  * @param nodeA node on the diagonal edge of candidate for edge flip.
275589
275941
  */
275590
- static computeInCircleDeterminantIsStrongPositive(nodeA) {
275942
+ static computeCircumcircleDeterminantIsStrongPositive(nodeA) {
275591
275943
  // Assume triangle A1,A2,B2 is ccw.
275592
275944
  // Shift the triangle to the origin (by negated A coords).
275593
275945
  // The Delaunay condition is computed by projecting the origin and the shifted triangle
275594
275946
  // points up to the paraboloid z = x*x + y*y. Due to the radially symmetric convexity of
275595
- // this surface and the ccw orientation of this triangle, "A is inside triangle A1,A2,B2"
275947
+ // this surface and the ccw orientation of this triangle, "A is inside the circumcircle of triangle A1,A2,B2"
275596
275948
  // is equivalent to "the volume of the parallelepiped formed by the projected points is
275597
275949
  // negative, as computed by the triple product."
275598
275950
  const nodeA1 = nodeA.faceSuccessor;
@@ -275625,7 +275977,7 @@ class Triangulator {
275625
275977
  }
275626
275978
  /**
275627
275979
  * * Visit each node of the graph array
275628
- * * If a flip would be possible, test the results of flipping using incircle condition
275980
+ * * If a flip would be possible, test the results of flipping using circumcircle condition
275629
275981
  * * If revealed to be an improvement, conduct the flip, mark involved nodes as unvisited, and repeat until all nodes are visited
275630
275982
  */
275631
275983
  static flipTriangles(graph) {
@@ -275638,7 +275990,7 @@ class Triangulator {
275638
275990
  }
275639
275991
  /**
275640
275992
  * * Visit each node of the graph array
275641
- * * If a flip would be possible, test the results of flipping using incircle condition
275993
+ * * If a flip would be possible, test the results of flipping using circumcircle condition
275642
275994
  * * If revealed to be an improvement, conduct the flip, mark involved nodes as unvisited, and repeat until all nodes are visited
275643
275995
  */
275644
275996
  static flipTrianglesInEdgeSet(graph, edgeSet) {
@@ -275651,7 +276003,7 @@ class Triangulator {
275651
276003
  while (undefined !== (node = edgeSet.chooseAndRemoveAny())) {
275652
276004
  if (node.isMaskSet(barrierMasks)) // Flip not allowed
275653
276005
  continue;
275654
- if (Triangulator.computeInCircleDeterminantIsStrongPositive(node)) {
276006
+ if (Triangulator.computeCircumcircleDeterminantIsStrongPositive(node)) {
275655
276007
  // Flip the triangles
275656
276008
  Triangulator.flipEdgeBetweenTriangles(node.edgeMate.faceSuccessor, node.edgeMate.facePredecessor, node.edgeMate, node.faceSuccessor, node, node.facePredecessor);
275657
276009
  // keep looking at the 2 faces
@@ -276002,7 +276354,7 @@ class Triangulator {
276002
276354
  // triangle B1 A1 D is on the other side of AB
276003
276355
  // The condition for flipping is:
276004
276356
  // ! both triangles must be TRIANGULATED_NODE_MASK
276005
- // ! incircle condition flags D as in the circle of ABC
276357
+ // ! circumcircle condition flags D as in the circle of ABC
276006
276358
  // after flip, node A moves to the vertex of D, and is the effective "ear", with the cap edge C A1
276007
276359
  // after flip, consider the A1 D (whose nodes are A1 and flipped A!!!)
276008
276360
  //
@@ -276022,7 +276374,7 @@ class Triangulator {
276022
276374
  let a0 = b0.facePredecessor;
276023
276375
  let b1 = a0.edgeMate;
276024
276376
  while (Triangulator.isInteriorTriangle(a0) && Triangulator.isInteriorTriangle(b1)) {
276025
- const detA = Triangulator.computeInCircleDeterminantIsStrongPositive(a0);
276377
+ const detA = Triangulator.computeCircumcircleDeterminantIsStrongPositive(a0);
276026
276378
  if (!detA)
276027
276379
  break;
276028
276380
  // Flip the triangles
@@ -311078,7 +311430,7 @@ var loadLanguages = instance.loadLanguages;
311078
311430
  /***/ ((module) => {
311079
311431
 
311080
311432
  "use strict";
311081
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.0.0-dev.104","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 && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","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 ES2022 --outDir lib/esm","clean":"rimraf -g 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","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/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-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run webpackTestWorker && vitest --run","cover":"npm run webpackTestWorker && vitest --run","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*"},"//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/eslint-plugin":"5.0.0-dev.1","@types/chai-as-promised":"^7","@vitest/browser":"^3.0.6","@vitest/coverage-v8":"^3.0.6","cpx2":"^8.0.0","eslint":"^9.13.0","glob":"^10.3.12","playwright":"~1.47.1","rimraf":"^6.0.1","source-map-loader":"^5.0.0","typescript":"~5.6.2","typemoq":"^2.1.0","vitest":"^3.0.6","vite-multiple-assets":"^1.3.1","vite-plugin-static-copy":"2.2.0","webpack":"^5.97.1"},"//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/cloud-agnostic-core":"^2.2.4","@itwin/object-storage-core":"^2.3.0","@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
311433
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.0.0-dev.105","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 && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","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 ES2022 --outDir lib/esm","clean":"rimraf -g 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","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/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-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run webpackTestWorker && vitest --run","cover":"npm run webpackTestWorker && vitest --run","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*"},"//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/eslint-plugin":"5.0.0-dev.1","@types/chai-as-promised":"^7","@vitest/browser":"^3.0.6","@vitest/coverage-v8":"^3.0.6","cpx2":"^8.0.0","eslint":"^9.13.0","glob":"^10.3.12","playwright":"~1.47.1","rimraf":"^6.0.1","source-map-loader":"^5.0.0","typescript":"~5.6.2","typemoq":"^2.1.0","vitest":"^3.0.6","vite-multiple-assets":"^1.3.1","vite-plugin-static-copy":"2.2.0","webpack":"^5.97.1"},"//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/cloud-agnostic-core":"^2.2.4","@itwin/object-storage-core":"^2.3.0","@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
311082
311434
 
311083
311435
  /***/ })
311084
311436