@itwin/rpcinterface-full-stack-tests 5.11.2 → 5.12.0-dev.10

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.
@@ -110221,9 +110221,7 @@ class AccuDraw {
110221
110221
  if (point.y < 0.0)
110222
110222
  adjustment = -adjustment;
110223
110223
  angle += adjustment; // This is the angle measured from design x...
110224
- angle = (Math.PI / 2) - angle; // Account for bearing direction convention...
110225
- if (angle < 0)
110226
- angle = (Math.PI * 2) + angle; // Negative bearings aren't valid?
110224
+ // core-quantity now applies the north-measured conversion itself (#9465); don't do it here too.
110227
110225
  }
110228
110226
  const formatterSpec = this.getAngleFormatter();
110229
110227
  let formattedValue = angle.toString();
@@ -110263,10 +110261,8 @@ class AccuDraw {
110263
110261
  case ItemField.ANGLE_Item:
110264
110262
  parseResult = this.stringToAngle(input);
110265
110263
  if (_itwin_core_quantity__WEBPACK_IMPORTED_MODULE_13__.Parser.isParsedQuantity(parseResult)) {
110266
- if (this.isBearingMode && this.flags.bearingFixToPlane2D)
110267
- this._angle = (Math.PI / 2) - parseResult.value;
110268
- else
110269
- this._angle = parseResult.value;
110264
+ // core-quantity's Parser applies the north-measured conversion itself now (#9465).
110265
+ this._angle = parseResult.value;
110270
110266
  break;
110271
110267
  }
110272
110268
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.ERROR;
@@ -131499,11 +131495,10 @@ class ViewState extends _EntityState__WEBPACK_IMPORTED_MODULE_5__.ElementState {
131499
131495
  origin.setFrom(vp.view.isSpatialView() ? vp.view.iModel.globalOrigin : _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create());
131500
131496
  switch (orientation) {
131501
131497
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.View: {
131502
- const centerWorld = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0.5, 0.5, 0.5);
131503
- vp.npcToWorld(centerWorld, centerWorld);
131498
+ const center = vp.npcToView(_itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.NpcCenter);
131504
131499
  rMatrix.setFrom(vp.rotation);
131505
- rMatrix.multiplyXYZtoXYZ(origin, origin);
131506
- origin.z = centerWorld.z;
131500
+ rMatrix.multiplyVectorInPlace(origin);
131501
+ origin.z = center.z;
131507
131502
  rMatrix.multiplyTransposeVectorInPlace(origin);
131508
131503
  break;
131509
131504
  }
@@ -135242,11 +135237,11 @@ class Viewport {
135242
135237
  origin.setFrom(this.iModel.globalOrigin);
135243
135238
  switch (this.view.getGridOrientation()) {
135244
135239
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.View: {
135245
- const center = this.view.getCenter();
135246
- this.toViewOrientation(center);
135247
- this.toViewOrientation(origin);
135240
+ const center = this.npcToView(_itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.NpcCenter);
135241
+ rMatrix.setFrom(this.rotation);
135242
+ rMatrix.multiplyVectorInPlace(origin);
135248
135243
  origin.z = center.z;
135249
- this.fromViewOrientation(origin);
135244
+ rMatrix.multiplyTransposeVectorInPlace(origin);
135250
135245
  break;
135251
135246
  }
135252
135247
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.WorldXY:
@@ -135270,24 +135265,24 @@ class Viewport {
135270
135265
  eyeVec = this._viewingSpace.rotation.getRow(2);
135271
135266
  eyeVec.normalizeInPlace();
135272
135267
  (0,_LinePlaneIntersect__WEBPACK_IMPORTED_MODULE_12__.linePlaneIntersect)(point, point, eyeVec, origin, planeNormal, false);
135273
- // // get origin and point in view coordinate system
135274
- const pointView = point.clone();
135275
- const originView = origin.clone();
135276
- this.toViewOrientation(pointView);
135277
- this.toViewOrientation(originView);
135268
+ // Get origin and point in the grid's local coordinate system.
135269
+ const pointGrid = point.clone();
135270
+ const originGrid = origin.clone();
135271
+ rMatrix.multiplyXYZtoXYZ(pointGrid, pointGrid);
135272
+ rMatrix.multiplyXYZtoXYZ(originGrid, originGrid);
135278
135273
  // subtract off the origin
135279
- pointView.y -= originView.y;
135280
- pointView.x -= originView.x;
135274
+ pointGrid.y -= originGrid.y;
135275
+ pointGrid.x -= originGrid.x;
135281
135276
  // round off the remainder to the grid distances
135282
135277
  const gridSpacing = this.view.getGridSpacing();
135283
- pointView.x = Viewport.roundGrid(pointView.x, gridSpacing.x);
135284
- pointView.y = Viewport.roundGrid(pointView.y, gridSpacing.y);
135278
+ pointGrid.x = Viewport.roundGrid(pointGrid.x, gridSpacing.x);
135279
+ pointGrid.y = Viewport.roundGrid(pointGrid.y, gridSpacing.y);
135285
135280
  // add the origin back in
135286
- pointView.x += originView.x;
135287
- pointView.y += originView.y;
135281
+ pointGrid.x += originGrid.x;
135282
+ pointGrid.y += originGrid.y;
135288
135283
  // go back to root coordinate system
135289
- this.fromViewOrientation(pointView);
135290
- point.setFrom(pointView);
135284
+ rMatrix.multiplyTransposeVectorInPlace(pointGrid);
135285
+ point.setFrom(pointGrid);
135291
135286
  }
135292
135287
  /** @internal */
135293
135288
  pointToGrid(point) {
@@ -144731,6 +144726,7 @@ __webpack_require__.r(__webpack_exports__);
144731
144726
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateCycleTool),
144732
144727
  /* harmony export */ AccuDrawRotateElementTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateElementTool),
144733
144728
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateFrontTool),
144729
+ /* harmony export */ AccuDrawRotatePointsTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotatePointsTool),
144734
144730
  /* harmony export */ AccuDrawRotateSideTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateSideTool),
144735
144731
  /* harmony export */ AccuDrawRotateTopTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateTopTool),
144736
144732
  /* harmony export */ AccuDrawRotateViewTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateViewTool),
@@ -207110,8 +207106,10 @@ class AccuDrawShortcutInputCollector extends _Tool__WEBPACK_IMPORTED_MODULE_2__.
207110
207106
  _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.requestInputFocus(); // re-grab focus when auto-focus tool setting set...
207111
207107
  }
207112
207108
  async onDataButtonDown(ev) {
207113
- if (this._impl.doDataButtonDown(ev))
207109
+ if (this._impl.doDataButtonDown(ev)) {
207110
+ _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.processHints(); // Process pending hints pre-exit so they don't override savedState "ignoreFlags"...
207114
207111
  await this.exitTool();
207112
+ }
207115
207113
  return _Tool__WEBPACK_IMPORTED_MODULE_2__.EventHandled.No;
207116
207114
  }
207117
207115
  async onUnsuspend() {
@@ -207149,8 +207147,10 @@ class AccuDrawShortcutViewTool extends _ViewTool__WEBPACK_IMPORTED_MODULE_3__.Vi
207149
207147
  _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.requestInputFocus(); // re-grab focus when auto-focus tool setting set...
207150
207148
  }
207151
207149
  async onDataButtonDown(ev) {
207152
- if (this._impl.doDataButtonDown(ev))
207150
+ if (this._impl.doDataButtonDown(ev)) {
207151
+ _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.processHints(); // Process pending hints pre-exit so they don't override savedState "ignoreFlags"...
207153
207152
  await this.exitTool();
207153
+ }
207154
207154
  return _Tool__WEBPACK_IMPORTED_MODULE_2__.EventHandled.No;
207155
207155
  }
207156
207156
  async onUnsuspend() {
@@ -207197,6 +207197,7 @@ __webpack_require__.r(__webpack_exports__);
207197
207197
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* binding */ AccuDrawRotateCycleTool),
207198
207198
  /* harmony export */ AccuDrawRotateElementTool: () => (/* binding */ AccuDrawRotateElementTool),
207199
207199
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* binding */ AccuDrawRotateFrontTool),
207200
+ /* harmony export */ AccuDrawRotatePointsTool: () => (/* binding */ AccuDrawRotatePointsTool),
207200
207201
  /* harmony export */ AccuDrawRotateSideTool: () => (/* binding */ AccuDrawRotateSideTool),
207201
207202
  /* harmony export */ AccuDrawRotateTopTool: () => (/* binding */ AccuDrawRotateTopTool),
207202
207203
  /* harmony export */ AccuDrawRotateViewTool: () => (/* binding */ AccuDrawRotateViewTool),
@@ -207222,6 +207223,7 @@ __webpack_require__.r(__webpack_exports__);
207222
207223
  /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
207223
207224
  /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
207224
207225
  /* harmony import */ var _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AccuDrawShortcutTool */ "../../core/frontend/lib/esm/tools/AccuDrawShortcutTool.js");
207226
+ /* harmony import */ var _common_render_GraphicType__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../common/render/GraphicType */ "../../core/frontend/lib/esm/common/render/GraphicType.js");
207225
207227
  /*---------------------------------------------------------------------------------------------
207226
207228
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
207227
207229
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -207237,6 +207239,7 @@ __webpack_require__.r(__webpack_exports__);
207237
207239
 
207238
207240
 
207239
207241
 
207242
+
207240
207243
  // cSpell:ignore dont unlockedz
207241
207244
  function normalizedDifference(point1, point2, out) {
207242
207245
  return point2.vectorTo(point1).normalizeWithLength(out).mag;
@@ -207299,15 +207302,13 @@ class AccuDrawShortcuts {
207299
207302
  }
207300
207303
  static updateACSByPoints(acs, vp, points, isDynamics) {
207301
207304
  const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
207302
- if (!accudraw.isEnabled)
207303
- return false;
207304
207305
  let accept = false;
207305
207306
  const vec = [new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d(), new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d(), new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d()];
207306
207307
  acs.setOrigin(points[0]);
207307
207308
  switch (points.length) {
207308
207309
  case 1:
207309
207310
  acs.setRotation(vp.rotation);
207310
- if (!isDynamics) {
207311
+ if (!isDynamics && accudraw.isEnabled) {
207311
207312
  accudraw.published.origin.setFrom(points[0]);
207312
207313
  accudraw.published.flags = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin;
207313
207314
  accudraw.flags.fixedOrg = true;
@@ -207319,7 +207320,7 @@ class AccuDrawShortcuts {
207319
207320
  break;
207320
207321
  }
207321
207322
  if (vp.view.is3d()) {
207322
- if (normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {
207323
+ if (accudraw.isEnabled && normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {
207323
207324
  vec[2].set(0.0, 0.0, 1.0);
207324
207325
  if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {
207325
207326
  vec[2].set(0.0, 1.0, 0.0);
@@ -207328,7 +207329,7 @@ class AccuDrawShortcuts {
207328
207329
  }
207329
207330
  normalizedCrossProduct(vec[0], vec[1], vec[2]);
207330
207331
  acs.setRotation(_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRows(vec[0], vec[1], vec[2]));
207331
- if (!isDynamics) {
207332
+ if (!isDynamics && accudraw.isEnabled) {
207332
207333
  accudraw.published.origin.setFrom(points[0]);
207333
207334
  accudraw.published.flags = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetNormal;
207334
207335
  accudraw.published.vector.setFrom(vec[0]);
@@ -208049,7 +208050,11 @@ class AccuDrawShortcuts {
208049
208050
  accudraw.unlockAllFields();
208050
208051
  }
208051
208052
  }
208052
- /** @beta */
208053
+ /**
208054
+ * Immediate tool to toggle AccuDraw's availability for the current session.
208055
+ * @note AccuDraw is enabled by default
208056
+ * @beta
208057
+ */
208053
208058
  class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208054
208059
  static toolId = "AccuDraw.SessionToggle";
208055
208060
  async run() {
@@ -208057,7 +208062,11 @@ class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
208057
208062
  return true;
208058
208063
  }
208059
208064
  }
208060
- /** @beta */
208065
+ /**
208066
+ * Immediate tool to toggle AccuDraw on/off temporarily for the current interactive tool.
208067
+ * @note Typically used to disable AccuDraw for a single data button.
208068
+ * @beta
208069
+ */
208061
208070
  class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208062
208071
  static toolId = "AccuDraw.SuspendToggle";
208063
208072
  async run() {
@@ -208065,7 +208074,11 @@ class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
208065
208074
  return true;
208066
208075
  }
208067
208076
  }
208068
- /** @beta */
208077
+ /**
208078
+ * Immediate tool to enable AccuDraw and position it at the current AccuSnap or Tentative snap location.
208079
+ * @note When not snapped, AccuDraw is activated at the last data button location when inactive, or moved to the current cursor location when active.
208080
+ * @beta
208081
+ */
208069
208082
  class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208070
208083
  static toolId = "AccuDraw.SetOrigin";
208071
208084
  async run() {
@@ -208073,7 +208086,11 @@ class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208073
208086
  return true;
208074
208087
  }
208075
208088
  }
208076
- /** @beta */
208089
+ /**
208090
+ * Immediate tool to lock the closer of the x or y axis based on the current cursor location.
208091
+ * @note When an axis is locked, points are projected onto the axis line.
208092
+ * @beta
208093
+ */
208077
208094
  class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208078
208095
  static toolId = "AccuDraw.LockSmart";
208079
208096
  async run() {
@@ -208081,7 +208098,10 @@ class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208081
208098
  return true;
208082
208099
  }
208083
208100
  }
208084
- /** @beta */
208101
+ /**
208102
+ * Immediate tool to toggle the locked state of an indexed axis of the AccuDraw compass.
208103
+ * @beta
208104
+ */
208085
208105
  class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208086
208106
  static toolId = "AccuDraw.LockIndex";
208087
208107
  async run() {
@@ -208089,7 +208109,10 @@ class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208089
208109
  return true;
208090
208110
  }
208091
208111
  }
208092
- /** @beta */
208112
+ /**
208113
+ * Immediate tool to toggle the locked state of the X text field.
208114
+ * @beta
208115
+ */
208093
208116
  class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208094
208117
  static toolId = "AccuDraw.LockX";
208095
208118
  async run() {
@@ -208097,7 +208120,10 @@ class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208097
208120
  return true;
208098
208121
  }
208099
208122
  }
208100
- /** @beta */
208123
+ /**
208124
+ * Immediate tool to toggle the locked state of the Y text field.
208125
+ * @beta
208126
+ */
208101
208127
  class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208102
208128
  static toolId = "AccuDraw.LockY";
208103
208129
  async run() {
@@ -208105,7 +208131,10 @@ class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208105
208131
  return true;
208106
208132
  }
208107
208133
  }
208108
- /** @beta */
208134
+ /**
208135
+ * Immediate tool to toggle the locked state of the Z text field.
208136
+ * @beta
208137
+ */
208109
208138
  class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208110
208139
  static toolId = "AccuDraw.LockZ";
208111
208140
  async run() {
@@ -208113,7 +208142,10 @@ class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208113
208142
  return true;
208114
208143
  }
208115
208144
  }
208116
- /** @beta */
208145
+ /**
208146
+ * Immediate tool to toggle the locked state of the Distance text field.
208147
+ * @beta
208148
+ */
208117
208149
  class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208118
208150
  static toolId = "AccuDraw.LockDistance";
208119
208151
  async run() {
@@ -208121,7 +208153,10 @@ class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Too
208121
208153
  return true;
208122
208154
  }
208123
208155
  }
208124
- /** @beta */
208156
+ /**
208157
+ * Immediate tool to toggle the locked state of the Angle text field.
208158
+ * @beta
208159
+ */
208125
208160
  class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208126
208161
  static toolId = "AccuDraw.LockAngle";
208127
208162
  async run() {
@@ -208129,7 +208164,10 @@ class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208129
208164
  return true;
208130
208165
  }
208131
208166
  }
208132
- /** @beta */
208167
+ /**
208168
+ * Immediate tool to toggle between polar and rectangular compass modes.
208169
+ * @beta
208170
+ */
208133
208171
  class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208134
208172
  static toolId = "AccuDraw.ChangeMode";
208135
208173
  async run() {
@@ -208137,7 +208175,10 @@ class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208137
208175
  return true;
208138
208176
  }
208139
208177
  }
208140
- /** @beta */
208178
+ /**
208179
+ * Immediate tool to cycle between XY, XZ, and YZ planes for the current AccuDraw rotation.
208180
+ * @beta
208181
+ */
208141
208182
  class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208142
208183
  static toolId = "AccuDraw.RotateCycle";
208143
208184
  async run() {
@@ -208145,7 +208186,11 @@ class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208145
208186
  return true;
208146
208187
  }
208147
208188
  }
208148
- /** @beta */
208189
+ /**
208190
+ * Immediate tool to set the AccuDraw rotation to a standard Top view.
208191
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
208192
+ * @beta
208193
+ */
208149
208194
  class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208150
208195
  static toolId = "AccuDraw.RotateTop";
208151
208196
  async run() {
@@ -208153,7 +208198,11 @@ class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208153
208198
  return true;
208154
208199
  }
208155
208200
  }
208156
- /** @beta */
208201
+ /**
208202
+ * Immediate tool to set the AccuDraw rotation to a standard Front view.
208203
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
208204
+ * @beta
208205
+ */
208157
208206
  class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208158
208207
  static toolId = "AccuDraw.RotateFront";
208159
208208
  async run() {
@@ -208161,7 +208210,11 @@ class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208161
208210
  return true;
208162
208211
  }
208163
208212
  }
208164
- /** @beta */
208213
+ /**
208214
+ * Immediate tool to set the AccuDraw rotation to a standard Side view.
208215
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
208216
+ * @beta
208217
+ */
208165
208218
  class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208166
208219
  static toolId = "AccuDraw.RotateSide";
208167
208220
  async run() {
@@ -208169,7 +208222,10 @@ class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208169
208222
  return true;
208170
208223
  }
208171
208224
  }
208172
- /** @beta */
208225
+ /**
208226
+ * Immediate tool to set the AccuDraw rotation to match the rotation of the current view.
208227
+ * @beta
208228
+ */
208173
208229
  class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208174
208230
  static toolId = "AccuDraw.RotateView";
208175
208231
  async run() {
@@ -208177,7 +208233,10 @@ class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208177
208233
  return true;
208178
208234
  }
208179
208235
  }
208180
- /** @beta */
208236
+ /**
208237
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current x axis.
208238
+ * @beta
208239
+ */
208181
208240
  class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208182
208241
  static toolId = "AccuDraw.Rotate90AboutX";
208183
208242
  async run() {
@@ -208185,7 +208244,10 @@ class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
208185
208244
  return true;
208186
208245
  }
208187
208246
  }
208188
- /** @beta */
208247
+ /**
208248
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current y axis.
208249
+ * @beta
208250
+ */
208189
208251
  class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208190
208252
  static toolId = "AccuDraw.Rotate90AboutY";
208191
208253
  async run() {
@@ -208193,7 +208255,10 @@ class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
208193
208255
  return true;
208194
208256
  }
208195
208257
  }
208196
- /** @beta */
208258
+ /**
208259
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current z axis.
208260
+ * @beta
208261
+ */
208197
208262
  class AccuDrawRotate90AboutZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
208198
208263
  static toolId = "AccuDraw.Rotate90AboutZ";
208199
208264
  async run() {
@@ -208239,7 +208304,11 @@ class RotateAxesImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_M
208239
208304
  return true;
208240
208305
  }
208241
208306
  }
208242
- /** @beta */
208307
+ /**
208308
+ * Interactive tool to set the AccuDraw rotation by rotating about the current z axis to a point on the x axis.
208309
+ * @note When AccuSnap or Tentative snap is active, the snap point is immediately used to define the x axis and not further input is required.
208310
+ * @beta
208311
+ */
208243
208312
  class AccuDrawRotateAxesTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
208244
208313
  aboutCurrentZ;
208245
208314
  static toolId = "AccuDraw.RotateAxes";
@@ -208304,7 +208373,10 @@ class RotateElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTE
208304
208373
  return true;
208305
208374
  }
208306
208375
  }
208307
- /** @beta */
208376
+ /**
208377
+ * Interactive tool to set the AccuDraw rotation using the snapped to geometry under the cursor.
208378
+ * @beta
208379
+ */
208308
208380
  class AccuDrawRotateElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
208309
208381
  static toolId = "AccuDraw.RotateElement";
208310
208382
  /** @internal */
@@ -208313,6 +208385,124 @@ class AccuDrawRotateElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_
208313
208385
  }
208314
208386
  }
208315
208387
  /** @internal */
208388
+ class RotatePointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutImplementation {
208389
+ _points = [];
208390
+ _origin = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.getPoint().clone() : undefined;
208391
+ _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...
208392
+ _lastPoint;
208393
+ onProvideToolAssistance() {
208394
+ switch (this._points.length) {
208395
+ case 0:
208396
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.FirstPoint");
208397
+ break;
208398
+ case 1:
208399
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.SecondPoint");
208400
+ break;
208401
+ default:
208402
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.NextPoint");
208403
+ break;
208404
+ }
208405
+ }
208406
+ onInitialize() {
208407
+ if (undefined === this._origin)
208408
+ return;
208409
+ this._points.push(this._origin);
208410
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...
208411
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
208412
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
208413
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.refreshDecorationsAndDynamics();
208414
+ }
208415
+ onComplete() {
208416
+ let ignoreFlags = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetRMatrix | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...
208417
+ if (this._moveOrigin)
208418
+ ignoreFlags |= _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin;
208419
+ return ignoreFlags;
208420
+ }
208421
+ doManipulation(ev, isMotion) {
208422
+ if (!ev || !ev.viewport)
208423
+ return false;
208424
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
208425
+ if (isMotion) {
208426
+ this._lastPoint = ev.point.clone();
208427
+ return false;
208428
+ }
208429
+ const accuDraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
208430
+ accuDraw.activate();
208431
+ switch (this._points.length) {
208432
+ case 0: {
208433
+ this._points.push(ev.point.clone());
208434
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._points[0]);
208435
+ break;
208436
+ }
208437
+ case 1: {
208438
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], ev.point);
208439
+ if (undefined === xVec)
208440
+ return false;
208441
+ if (!ev.viewport.view.is3d() || !ev.viewport.view.allow3dManipulations()) {
208442
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetXAxis, this._points[0], xVec);
208443
+ return true; // Complete
208444
+ }
208445
+ this._points.push(ev.point.clone());
208446
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetNormal, this._points[0], xVec);
208447
+ break;
208448
+ }
208449
+ case 2: {
208450
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);
208451
+ if (undefined === xVec)
208452
+ return false;
208453
+ const yVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], ev.point);
208454
+ if (undefined === yVec)
208455
+ return false;
208456
+ const matrix = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRigidFromColumns(xVec, yVec, _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.AxisOrder.XYZ);
208457
+ if (undefined === matrix)
208458
+ return false;
208459
+ const invMatrix = matrix.inverse();
208460
+ if (undefined === invMatrix)
208461
+ return false;
208462
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetRMatrix, this._points[0], invMatrix);
208463
+ return true; // Complete
208464
+ }
208465
+ }
208466
+ this.onProvideToolAssistance();
208467
+ return false;
208468
+ }
208469
+ doDecorate(context) {
208470
+ if (0 === this._points.length)
208471
+ return;
208472
+ const currentPoint = this._lastPoint;
208473
+ if (undefined === currentPoint)
208474
+ return;
208475
+ if (2 === this._points.length) {
208476
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);
208477
+ if (undefined === xVec)
208478
+ return;
208479
+ const plane = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Plane3dByOriginAndUnitNormal.create(this._points[0], xVec);
208480
+ if (undefined === plane)
208481
+ return;
208482
+ plane.projectPointToPlane(currentPoint, currentPoint);
208483
+ }
208484
+ const tmpPoints = this._points.slice(0, 1);
208485
+ tmpPoints.push(currentPoint);
208486
+ const vp = context.viewport;
208487
+ const color = vp.getContrastToBackgroundColor();
208488
+ const builder = context.createGraphicBuilder(_common_render_GraphicType__WEBPACK_IMPORTED_MODULE_8__.GraphicType.WorldOverlay);
208489
+ builder.setSymbology(color, color, 2);
208490
+ builder.addLineString(tmpPoints);
208491
+ context.addDecorationFromBuilder(builder);
208492
+ }
208493
+ }
208494
+ /**
208495
+ * Interactive tool to set the AccuDraw rotation by 3 points: x axis origin, x axis direction, and y axis direction.
208496
+ * @beta
208497
+ */
208498
+ class AccuDrawRotatePointsTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
208499
+ static toolId = "AccuDraw.RotatePoints";
208500
+ /** @internal */
208501
+ createImplementation() {
208502
+ return new RotatePointsImplementation();
208503
+ }
208504
+ }
208505
+ /** @internal */
208316
208506
  class DefineACSByElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutImplementation {
208317
208507
  _origin = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create();
208318
208508
  _rMatrix = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createIdentity();
@@ -208355,7 +208545,10 @@ class DefineACSByElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IM
208355
208545
  this._acs.display(context, _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Active | _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Dynamics);
208356
208546
  }
208357
208547
  }
208358
- /** @beta */
208548
+ /**
208549
+ * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction/
208550
+ * @beta
208551
+ */
208359
208552
  class DefineACSByElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
208360
208553
  static toolId = "AccuDraw.DefineACSByElement";
208361
208554
  /** @internal */
@@ -208368,6 +208561,7 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
208368
208561
  _points = [];
208369
208562
  _acs;
208370
208563
  _origin = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.getPoint().clone() : undefined;
208564
+ _lastPoint;
208371
208565
  onProvideToolAssistance() {
208372
208566
  switch (this._points.length) {
208373
208567
  case 0:
@@ -208384,16 +208578,20 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
208384
208578
  onInitialize() {
208385
208579
  if (undefined === this._origin)
208386
208580
  return;
208387
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
208388
208581
  this._points.push(this._origin);
208389
208582
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...
208583
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
208584
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
208585
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.refreshDecorationsAndDynamics();
208390
208586
  }
208391
208587
  doManipulation(ev, isMotion) {
208392
208588
  if (!ev || !ev.viewport)
208393
208589
  return false;
208394
208590
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
208395
- if (isMotion)
208591
+ if (isMotion) {
208592
+ this._lastPoint = ev.point.clone();
208396
208593
  return false;
208594
+ }
208397
208595
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
208398
208596
  this._points.push(ev.point.clone());
208399
208597
  const vp = ev.viewport;
@@ -208408,11 +208606,11 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
208408
208606
  return false;
208409
208607
  }
208410
208608
  doDecorate(context) {
208609
+ if (undefined === this._lastPoint)
208610
+ return;
208411
208611
  const tmpPoints = [];
208412
208612
  this._points.forEach((pt) => tmpPoints.push(pt));
208413
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButtonEvent();
208414
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
208415
- tmpPoints.push(ev.point);
208613
+ tmpPoints.push(this._lastPoint);
208416
208614
  const vp = context.viewport;
208417
208615
  if (!this._acs)
208418
208616
  this._acs = vp.view.auxiliaryCoordinateSystem.clone();
@@ -208420,7 +208618,10 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
208420
208618
  this._acs.display(context, _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Active | _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Dynamics);
208421
208619
  }
208422
208620
  }
208423
- /** @beta */
208621
+ /**
208622
+ * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction.
208623
+ * @beta
208624
+ */
208424
208625
  class DefineACSByPointsTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
208425
208626
  static toolId = "AccuDraw.DefineACSByPoints";
208426
208627
  /** @internal */
@@ -209771,8 +209972,8 @@ class ViewClipByPlaneTool extends ViewClipTool {
209771
209972
  class ViewClipByShapeTool extends ViewClipTool {
209772
209973
  static toolId = "ViewClip.ByShape";
209773
209974
  static iconSpec = "icon-section-shape";
209774
- /** @internal */
209775
209975
  _orientationValue = { value: _AccuDraw__WEBPACK_IMPORTED_MODULE_3__.ContextRotationId.Top };
209976
+ _lastMotion;
209776
209977
  /** @internal */
209777
209978
  _points = [];
209778
209979
  /** @internal */
@@ -209906,9 +210107,8 @@ class ViewClipByShapeTool extends ViewClipTool {
209906
210107
  decorate(context) {
209907
210108
  if (context.viewport !== this.targetView)
209908
210109
  return;
209909
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButtonEvent();
209910
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
209911
- if (undefined === ev.viewport)
210110
+ const ev = this._lastMotion;
210111
+ if (undefined === ev?.viewport)
209912
210112
  return;
209913
210113
  const points = this.getClipPoints(ev);
209914
210114
  if (points.length < 2)
@@ -209929,6 +210129,7 @@ class ViewClipByShapeTool extends ViewClipTool {
209929
210129
  }
209930
210130
  /** @internal */
209931
210131
  async onMouseMotion(ev) {
210132
+ this._lastMotion = ev;
209932
210133
  if (this._points.length > 0 && undefined !== ev.viewport)
209933
210134
  ev.viewport.invalidateDecorations();
209934
210135
  }
@@ -209978,6 +210179,7 @@ class ViewClipByShapeTool extends ViewClipTool {
209978
210179
  class ViewClipByRangeTool extends ViewClipTool {
209979
210180
  static toolId = "ViewClip.ByRange";
209980
210181
  static iconSpec = "icon-section-range";
210182
+ _lastMotion;
209981
210183
  /** @internal */
209982
210184
  _corner;
209983
210185
  /** @internal */
@@ -210020,9 +210222,8 @@ class ViewClipByRangeTool extends ViewClipTool {
210020
210222
  decorate(context) {
210021
210223
  if (context.viewport !== this.targetView || undefined === this._corner)
210022
210224
  return;
210023
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButtonEvent();
210024
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
210025
- if (undefined === ev.viewport)
210225
+ const ev = this._lastMotion;
210226
+ if (undefined === ev?.viewport)
210026
210227
  return;
210027
210228
  const range = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Range3d.create();
210028
210229
  const transform = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createIdentity();
@@ -210041,6 +210242,7 @@ class ViewClipByRangeTool extends ViewClipTool {
210041
210242
  }
210042
210243
  /** @internal */
210043
210244
  async onMouseMotion(ev) {
210245
+ this._lastMotion = ev;
210044
210246
  if (undefined !== this._corner && undefined !== ev.viewport)
210045
210247
  ev.viewport.invalidateDecorations();
210046
210248
  }
@@ -342309,11 +342511,19 @@ class BaseFormat {
342309
342511
  // default "north" is applied by the formatter (quarter rotation counter clockwise from east, the value depends on the units used)
342310
342512
  get azimuthBase() { return this._azimuthBase; }
342311
342513
  set azimuthBase(azimuthBase) { this._azimuthBase = azimuthBase; }
342514
+ /**
342515
+ * Must share the same phenomenon as the eventual persistence unit.
342516
+ * @see FormatProps.azimuthBaseUnit
342517
+ */
342312
342518
  get azimuthBaseUnit() { return this._azimuthBaseUnit; }
342313
342519
  set azimuthBaseUnit(azimuthBaseUnit) { this._azimuthBaseUnit = azimuthBaseUnit; }
342314
342520
  get azimuthCounterClockwise() { return this._azimuthCounterClockwise; }
342315
342521
  set azimuthCounterClockwise(azimuthCounterClockwise) { this._azimuthCounterClockwise = azimuthCounterClockwise; }
342316
342522
  get azimuthClockwiseOrDefault() { return !this._azimuthCounterClockwise; }
342523
+ /**
342524
+ * Must share the same phenomenon as the eventual persistence unit.
342525
+ * @see FormatProps.revolutionUnit
342526
+ */
342317
342527
  get revolutionUnit() { return this._revolutionUnit; }
342318
342528
  set revolutionUnit(revolutionUnit) { this._revolutionUnit = revolutionUnit; }
342319
342529
  /** This method parses input string that is typically extracted for persisted JSON data and validates that the string is a valid FormatType. Throws exception if not valid. */
@@ -343153,6 +343363,7 @@ __webpack_require__.r(__webpack_exports__);
343153
343363
  /* harmony import */ var _FormatterSpec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormatterSpec */ "../../core/quantity/lib/esm/Formatter/FormatterSpec.js");
343154
343364
  /* harmony import */ var _FormatEnums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FormatEnums */ "../../core/quantity/lib/esm/Formatter/FormatEnums.js");
343155
343365
  /* harmony import */ var _Quantity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Quantity */ "../../core/quantity/lib/esm/Quantity.js");
343366
+ /* harmony import */ var _generated_Units_generated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../generated/Units.generated */ "../../core/quantity/lib/esm/generated/Units.generated.js");
343156
343367
  /*---------------------------------------------------------------------------------------------
343157
343368
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
343158
343369
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -343165,6 +343376,7 @@ __webpack_require__.r(__webpack_exports__);
343165
343376
 
343166
343377
 
343167
343378
 
343379
+
343168
343380
  /** rounding additive
343169
343381
  * @internal
343170
343382
  */
@@ -343605,8 +343817,8 @@ class Formatter {
343605
343817
  if (type !== _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Bearing && type !== _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Azimuth)
343606
343818
  return { magnitude };
343607
343819
  const revolution = this.getRevolution(spec);
343608
- magnitude = this.normalizeAngle(magnitude, revolution);
343609
343820
  const quarterRevolution = revolution / 4;
343821
+ magnitude = this.normalizeToAzimuth(magnitude, spec.persistenceUnit.phenomenon, revolution);
343610
343822
  if (type === _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Bearing) {
343611
343823
  let quadrant = 0;
343612
343824
  while (magnitude > quarterRevolution) {
@@ -343675,6 +343887,17 @@ class Formatter {
343675
343887
  magnitude += revolution;
343676
343888
  return magnitude;
343677
343889
  }
343890
+ /**
343891
+ * Converts a raw magnitude to a normalized azimuth (0 to revolution, measured clockwise from north), based on
343892
+ * the phenomenon it was persisted under. Raw math angles (`ANGLE` phenomenon) need the north-measured conversion;
343893
+ * true azimuths (`HORIZONTAL_DIRECTION`) don't. Not a unit conversion, so it's applied here, not via `convertTo`.
343894
+ * @internal
343895
+ */
343896
+ static normalizeToAzimuth(magnitude, phenomenon, revolution) {
343897
+ if (phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_5__.Phenomena.ANGLE)
343898
+ magnitude = revolution / 4 - magnitude;
343899
+ return this.normalizeAngle(magnitude, revolution);
343900
+ }
343678
343901
  static getRevolution(spec) {
343679
343902
  if (spec.revolutionConversion === undefined) {
343680
343903
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.MissingRequiredProperty, `Missing revolution unit conversion for calculating ${spec.name}'s revolution.`);
@@ -343938,6 +344161,9 @@ class FormatterSpec {
343938
344161
  * @param name The name of a format specification.
343939
344162
  * @param unitsProvider The units provider is used to look up unit definitions and provide conversion information for converting between units.
343940
344163
  * @param inputUnit The unit the value to be formatted. This unit is often referred to as persistence unit.
344164
+ * @note For Bearing/Azimuth formats, `inputUnit`'s phenomenon must match `format.azimuthBaseUnit`/`format.revolutionUnit`.
344165
+ * @see BaseFormat.azimuthBaseUnit
344166
+ * @see BaseFormat.revolutionUnit
343941
344167
  */
343942
344168
  static async create(name, format, unitsProvider, inputUnit) {
343943
344169
  const conversions = await FormatterSpec.getUnitConversions(format, unitsProvider, inputUnit);
@@ -344110,6 +344336,7 @@ __webpack_require__.r(__webpack_exports__);
344110
344336
  /* harmony import */ var _Formatter_FormatEnums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Formatter/FormatEnums */ "../../core/quantity/lib/esm/Formatter/FormatEnums.js");
344111
344337
  /* harmony import */ var _QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./QuantityLoggerCategory */ "../../core/quantity/lib/esm/QuantityLoggerCategory.js");
344112
344338
  /* harmony import */ var _Quantity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Quantity */ "../../core/quantity/lib/esm/Quantity.js");
344339
+ /* harmony import */ var _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./generated/Units.generated */ "../../core/quantity/lib/esm/generated/Units.generated.js");
344113
344340
  /*---------------------------------------------------------------------------------------------
344114
344341
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
344115
344342
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -344123,6 +344350,7 @@ __webpack_require__.r(__webpack_exports__);
344123
344350
 
344124
344351
 
344125
344352
 
344353
+
344126
344354
  /** Possible parser errors
344127
344355
  * @beta
344128
344356
  */
@@ -344786,16 +345014,19 @@ class Parser {
344786
345014
  }
344787
345015
  return this.parseAndProcessTokens(inString, format, unitsConversions);
344788
345016
  }
344789
- /** The value of special direction is always in degrees, try to find the unit conversion for that. */
345017
+ /** The value of special direction is always in degrees; resolve "degrees" relative to
345018
+ * `spec.outUnit`'s phenomenon, since `Units.ARC_DEG` only exists in the `Units.ANGLE` family. */
344790
345019
  static processSpecialBearingDirection(mag, spec) {
344791
- const specialDirUnit = spec.unitConversions.find((unitConversion) => unitConversion.name === "Units.ARC_DEG");
345020
+ const degreeUnitName = spec.outUnit.phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.HORIZONTAL_DIRECTION ? "Units.HORIZONTAL_DIR_ARC_DEG" : "Units.ARC_DEG";
345021
+ const specialDirUnit = spec.unitConversions.find((unitConversion) => unitConversion.name === degreeUnitName);
344792
345022
  if (!specialDirUnit)
344793
345023
  return { ok: false, error: ParseError.UnknownUnit };
344794
345024
  const preferredUnit = spec.outUnit;
344795
345025
  const conversion = this.tryFindUnitConversion(specialDirUnit.label, spec.unitConversions, preferredUnit);
344796
345026
  if (!conversion)
344797
345027
  return { ok: true, value: mag };
344798
- return { ok: true, value: (0,_Quantity__WEBPACK_IMPORTED_MODULE_5__.applyConversion)(mag, conversion) };
345028
+ const revolution = this.getRevolution(spec);
345029
+ return { ok: true, value: this.convertAzimuthToPersistenceConvention((0,_Quantity__WEBPACK_IMPORTED_MODULE_5__.applyConversion)(mag, conversion), spec, revolution) };
344799
345030
  }
344800
345031
  static parseBearingFormat(inString, spec) {
344801
345032
  const specialDirections = {
@@ -344872,6 +345103,7 @@ class Parser {
344872
345103
  }
344873
345104
  }
344874
345105
  magnitude = this.normalizeAngle(magnitude, revolution);
345106
+ magnitude = this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution);
344875
345107
  return { ok: true, value: magnitude };
344876
345108
  }
344877
345109
  static parseAzimuthFormat(inString, spec) {
@@ -344897,6 +345129,8 @@ class Parser {
344897
345129
  const inputIsClockwise = spec.format.azimuthClockwiseOrDefault;
344898
345130
  if (inputIsClockwise && azimuthBase === 0) {
344899
345131
  // parsed result already has the same base and orientation as our desired output
345132
+ if (spec.outUnit.phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.ANGLE)
345133
+ return { ok: true, value: this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution) };
344900
345134
  return parsedResult;
344901
345135
  }
344902
345136
  if (inputIsClockwise)
@@ -344904,6 +345138,7 @@ class Parser {
344904
345138
  else
344905
345139
  magnitude = azimuthBase - magnitude;
344906
345140
  magnitude = this.normalizeAngle(magnitude, revolution);
345141
+ magnitude = this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution);
344907
345142
  return { ok: true, value: magnitude };
344908
345143
  }
344909
345144
  /**
@@ -345045,6 +345280,15 @@ class Parser {
345045
345280
  }
345046
345281
  return converted.magnitude;
345047
345282
  }
345283
+ /** Converts an azimuth-convention magnitude back to a raw math angle when `spec.outUnit` is
345284
+ * `ANGLE`-phenomenon (mirrors the transform in `Formatter.processBearingAndAzimuth`). No-op for
345285
+ * `HORIZONTAL_DIRECTION`, which is already a true azimuth. */
345286
+ static convertAzimuthToPersistenceConvention(magnitude, spec, revolution) {
345287
+ if (spec.outUnit.phenomenon !== _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.ANGLE)
345288
+ return magnitude;
345289
+ const quarterRevolution = revolution / 4;
345290
+ return this.normalizeAngle(quarterRevolution - magnitude, revolution);
345291
+ }
345048
345292
  static parseAndProcessTokens(inString, format, unitsConversions) {
345049
345293
  const tokens = Parser.parseQuantitySpecification(inString, format);
345050
345294
  if (Parser._log) {
@@ -345245,6 +345489,9 @@ class ParserSpec {
345245
345489
  * @param format The format specification.
345246
345490
  * @param unitsProvider The units provider is used to look up unit definitions and provide conversion information for converting between units.
345247
345491
  * @param outUnit The unit a value will be formatted to. This unit is often referred to as persistence unit.
345492
+ * @note For Bearing/Azimuth formats, `outUnit`'s phenomenon must match `format.azimuthBaseUnit`/`format.revolutionUnit`.
345493
+ * @see BaseFormat.azimuthBaseUnit
345494
+ * @see BaseFormat.revolutionUnit
345248
345495
  */
345249
345496
  static async create(format, unitsProvider, outUnit, altUnitLabelsProvider) {
345250
345497
  let conversions;
@@ -348808,7 +349055,7 @@ class TestContext {
348808
349055
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
348809
349056
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
348810
349057
  await core_frontend_1.NoRenderApp.startup({
348811
- applicationVersion: "5.11.2",
349058
+ applicationVersion: "5.12.0-dev.10",
348812
349059
  applicationId: this.settings.gprid,
348813
349060
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.serviceAuthToken),
348814
349061
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -375765,7 +376012,7 @@ var loadLanguages = instance.loadLanguages;
375765
376012
  /***/ ((module) => {
375766
376013
 
375767
376014
  "use strict";
375768
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.11.2","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 && npm run -s copy:draco","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","copy:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./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 && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","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","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","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:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"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":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.10","@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/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/chai-as-promised":"^7","@types/draco3d":"^1.4.10","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.8","@vitest/coverage-v8":"^4.1.8","cpx2":"^8.0.0","eslint":"^9.31.0","glob":"^10.5.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","source-map-loader":"^5.0.0","typescript":"~5.6.2","vitest":"^4.1.8","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/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"~4.3.4","@loaders.gl/draco":"~4.3.4","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
376015
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.12.0-dev.10","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 && npm run -s copy:draco","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","copy:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./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 && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","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","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","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:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"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":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.10","@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/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/chai-as-promised":"^7","@types/draco3d":"^1.4.10","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.8","@vitest/coverage-v8":"^4.1.8","cpx2":"^8.0.0","eslint":"^9.31.0","glob":"^10.5.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","source-map-loader":"^5.0.0","typescript":"~5.6.2","vitest":"^4.1.8","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/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"~4.3.4","@loaders.gl/draco":"~4.3.4","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
375769
376016
 
375770
376017
  /***/ }),
375771
376018