@itwin/ecschema-rpcinterface-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.
@@ -80193,9 +80193,7 @@ class AccuDraw {
80193
80193
  if (point.y < 0.0)
80194
80194
  adjustment = -adjustment;
80195
80195
  angle += adjustment; // This is the angle measured from design x...
80196
- angle = (Math.PI / 2) - angle; // Account for bearing direction convention...
80197
- if (angle < 0)
80198
- angle = (Math.PI * 2) + angle; // Negative bearings aren't valid?
80196
+ // core-quantity now applies the north-measured conversion itself (#9465); don't do it here too.
80199
80197
  }
80200
80198
  const formatterSpec = this.getAngleFormatter();
80201
80199
  let formattedValue = angle.toString();
@@ -80235,10 +80233,8 @@ class AccuDraw {
80235
80233
  case ItemField.ANGLE_Item:
80236
80234
  parseResult = this.stringToAngle(input);
80237
80235
  if (_itwin_core_quantity__WEBPACK_IMPORTED_MODULE_13__.Parser.isParsedQuantity(parseResult)) {
80238
- if (this.isBearingMode && this.flags.bearingFixToPlane2D)
80239
- this._angle = (Math.PI / 2) - parseResult.value;
80240
- else
80241
- this._angle = parseResult.value;
80236
+ // core-quantity's Parser applies the north-measured conversion itself now (#9465).
80237
+ this._angle = parseResult.value;
80242
80238
  break;
80243
80239
  }
80244
80240
  return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.ERROR;
@@ -101471,11 +101467,10 @@ class ViewState extends _EntityState__WEBPACK_IMPORTED_MODULE_5__.ElementState {
101471
101467
  origin.setFrom(vp.view.isSpatialView() ? vp.view.iModel.globalOrigin : _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create());
101472
101468
  switch (orientation) {
101473
101469
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.View: {
101474
- const centerWorld = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0.5, 0.5, 0.5);
101475
- vp.npcToWorld(centerWorld, centerWorld);
101470
+ const center = vp.npcToView(_itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.NpcCenter);
101476
101471
  rMatrix.setFrom(vp.rotation);
101477
- rMatrix.multiplyXYZtoXYZ(origin, origin);
101478
- origin.z = centerWorld.z;
101472
+ rMatrix.multiplyVectorInPlace(origin);
101473
+ origin.z = center.z;
101479
101474
  rMatrix.multiplyTransposeVectorInPlace(origin);
101480
101475
  break;
101481
101476
  }
@@ -105214,11 +105209,11 @@ class Viewport {
105214
105209
  origin.setFrom(this.iModel.globalOrigin);
105215
105210
  switch (this.view.getGridOrientation()) {
105216
105211
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.View: {
105217
- const center = this.view.getCenter();
105218
- this.toViewOrientation(center);
105219
- this.toViewOrientation(origin);
105212
+ const center = this.npcToView(_itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.NpcCenter);
105213
+ rMatrix.setFrom(this.rotation);
105214
+ rMatrix.multiplyVectorInPlace(origin);
105220
105215
  origin.z = center.z;
105221
- this.fromViewOrientation(origin);
105216
+ rMatrix.multiplyTransposeVectorInPlace(origin);
105222
105217
  break;
105223
105218
  }
105224
105219
  case _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.GridOrientationType.WorldXY:
@@ -105242,24 +105237,24 @@ class Viewport {
105242
105237
  eyeVec = this._viewingSpace.rotation.getRow(2);
105243
105238
  eyeVec.normalizeInPlace();
105244
105239
  (0,_LinePlaneIntersect__WEBPACK_IMPORTED_MODULE_12__.linePlaneIntersect)(point, point, eyeVec, origin, planeNormal, false);
105245
- // // get origin and point in view coordinate system
105246
- const pointView = point.clone();
105247
- const originView = origin.clone();
105248
- this.toViewOrientation(pointView);
105249
- this.toViewOrientation(originView);
105240
+ // Get origin and point in the grid's local coordinate system.
105241
+ const pointGrid = point.clone();
105242
+ const originGrid = origin.clone();
105243
+ rMatrix.multiplyXYZtoXYZ(pointGrid, pointGrid);
105244
+ rMatrix.multiplyXYZtoXYZ(originGrid, originGrid);
105250
105245
  // subtract off the origin
105251
- pointView.y -= originView.y;
105252
- pointView.x -= originView.x;
105246
+ pointGrid.y -= originGrid.y;
105247
+ pointGrid.x -= originGrid.x;
105253
105248
  // round off the remainder to the grid distances
105254
105249
  const gridSpacing = this.view.getGridSpacing();
105255
- pointView.x = Viewport.roundGrid(pointView.x, gridSpacing.x);
105256
- pointView.y = Viewport.roundGrid(pointView.y, gridSpacing.y);
105250
+ pointGrid.x = Viewport.roundGrid(pointGrid.x, gridSpacing.x);
105251
+ pointGrid.y = Viewport.roundGrid(pointGrid.y, gridSpacing.y);
105257
105252
  // add the origin back in
105258
- pointView.x += originView.x;
105259
- pointView.y += originView.y;
105253
+ pointGrid.x += originGrid.x;
105254
+ pointGrid.y += originGrid.y;
105260
105255
  // go back to root coordinate system
105261
- this.fromViewOrientation(pointView);
105262
- point.setFrom(pointView);
105256
+ rMatrix.multiplyTransposeVectorInPlace(pointGrid);
105257
+ point.setFrom(pointGrid);
105263
105258
  }
105264
105259
  /** @internal */
105265
105260
  pointToGrid(point) {
@@ -114703,6 +114698,7 @@ __webpack_require__.r(__webpack_exports__);
114703
114698
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateCycleTool),
114704
114699
  /* harmony export */ AccuDrawRotateElementTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateElementTool),
114705
114700
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateFrontTool),
114701
+ /* harmony export */ AccuDrawRotatePointsTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotatePointsTool),
114706
114702
  /* harmony export */ AccuDrawRotateSideTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateSideTool),
114707
114703
  /* harmony export */ AccuDrawRotateTopTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateTopTool),
114708
114704
  /* harmony export */ AccuDrawRotateViewTool: () => (/* reexport safe */ _tools_AccuDrawTool__WEBPACK_IMPORTED_MODULE_102__.AccuDrawRotateViewTool),
@@ -177082,8 +177078,10 @@ class AccuDrawShortcutInputCollector extends _Tool__WEBPACK_IMPORTED_MODULE_2__.
177082
177078
  _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.requestInputFocus(); // re-grab focus when auto-focus tool setting set...
177083
177079
  }
177084
177080
  async onDataButtonDown(ev) {
177085
- if (this._impl.doDataButtonDown(ev))
177081
+ if (this._impl.doDataButtonDown(ev)) {
177082
+ _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.processHints(); // Process pending hints pre-exit so they don't override savedState "ignoreFlags"...
177086
177083
  await this.exitTool();
177084
+ }
177087
177085
  return _Tool__WEBPACK_IMPORTED_MODULE_2__.EventHandled.No;
177088
177086
  }
177089
177087
  async onUnsuspend() {
@@ -177121,8 +177119,10 @@ class AccuDrawShortcutViewTool extends _ViewTool__WEBPACK_IMPORTED_MODULE_3__.Vi
177121
177119
  _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.requestInputFocus(); // re-grab focus when auto-focus tool setting set...
177122
177120
  }
177123
177121
  async onDataButtonDown(ev) {
177124
- if (this._impl.doDataButtonDown(ev))
177122
+ if (this._impl.doDataButtonDown(ev)) {
177123
+ _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.accuDraw.processHints(); // Process pending hints pre-exit so they don't override savedState "ignoreFlags"...
177125
177124
  await this.exitTool();
177125
+ }
177126
177126
  return _Tool__WEBPACK_IMPORTED_MODULE_2__.EventHandled.No;
177127
177127
  }
177128
177128
  async onUnsuspend() {
@@ -177169,6 +177169,7 @@ __webpack_require__.r(__webpack_exports__);
177169
177169
  /* harmony export */ AccuDrawRotateCycleTool: () => (/* binding */ AccuDrawRotateCycleTool),
177170
177170
  /* harmony export */ AccuDrawRotateElementTool: () => (/* binding */ AccuDrawRotateElementTool),
177171
177171
  /* harmony export */ AccuDrawRotateFrontTool: () => (/* binding */ AccuDrawRotateFrontTool),
177172
+ /* harmony export */ AccuDrawRotatePointsTool: () => (/* binding */ AccuDrawRotatePointsTool),
177172
177173
  /* harmony export */ AccuDrawRotateSideTool: () => (/* binding */ AccuDrawRotateSideTool),
177173
177174
  /* harmony export */ AccuDrawRotateTopTool: () => (/* binding */ AccuDrawRotateTopTool),
177174
177175
  /* harmony export */ AccuDrawRotateViewTool: () => (/* binding */ AccuDrawRotateViewTool),
@@ -177194,6 +177195,7 @@ __webpack_require__.r(__webpack_exports__);
177194
177195
  /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
177195
177196
  /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
177196
177197
  /* harmony import */ var _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AccuDrawShortcutTool */ "../../core/frontend/lib/esm/tools/AccuDrawShortcutTool.js");
177198
+ /* harmony import */ var _common_render_GraphicType__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../common/render/GraphicType */ "../../core/frontend/lib/esm/common/render/GraphicType.js");
177197
177199
  /*---------------------------------------------------------------------------------------------
177198
177200
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
177199
177201
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -177209,6 +177211,7 @@ __webpack_require__.r(__webpack_exports__);
177209
177211
 
177210
177212
 
177211
177213
 
177214
+
177212
177215
  // cSpell:ignore dont unlockedz
177213
177216
  function normalizedDifference(point1, point2, out) {
177214
177217
  return point2.vectorTo(point1).normalizeWithLength(out).mag;
@@ -177271,15 +177274,13 @@ class AccuDrawShortcuts {
177271
177274
  }
177272
177275
  static updateACSByPoints(acs, vp, points, isDynamics) {
177273
177276
  const accudraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
177274
- if (!accudraw.isEnabled)
177275
- return false;
177276
177277
  let accept = false;
177277
177278
  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()];
177278
177279
  acs.setOrigin(points[0]);
177279
177280
  switch (points.length) {
177280
177281
  case 1:
177281
177282
  acs.setRotation(vp.rotation);
177282
- if (!isDynamics) {
177283
+ if (!isDynamics && accudraw.isEnabled) {
177283
177284
  accudraw.published.origin.setFrom(points[0]);
177284
177285
  accudraw.published.flags = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin;
177285
177286
  accudraw.flags.fixedOrg = true;
@@ -177291,7 +177292,7 @@ class AccuDrawShortcuts {
177291
177292
  break;
177292
177293
  }
177293
177294
  if (vp.view.is3d()) {
177294
- if (normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {
177295
+ if (accudraw.isEnabled && normalizedCrossProduct(accudraw.axes.y, vec[0], vec[1]) < 0.00001) {
177295
177296
  vec[2].set(0.0, 0.0, 1.0);
177296
177297
  if (normalizedCrossProduct(vec[2], vec[0], vec[1]) < 0.00001) {
177297
177298
  vec[2].set(0.0, 1.0, 0.0);
@@ -177300,7 +177301,7 @@ class AccuDrawShortcuts {
177300
177301
  }
177301
177302
  normalizedCrossProduct(vec[0], vec[1], vec[2]);
177302
177303
  acs.setRotation(_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRows(vec[0], vec[1], vec[2]));
177303
- if (!isDynamics) {
177304
+ if (!isDynamics && accudraw.isEnabled) {
177304
177305
  accudraw.published.origin.setFrom(points[0]);
177305
177306
  accudraw.published.flags = _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetNormal;
177306
177307
  accudraw.published.vector.setFrom(vec[0]);
@@ -178021,7 +178022,11 @@ class AccuDrawShortcuts {
178021
178022
  accudraw.unlockAllFields();
178022
178023
  }
178023
178024
  }
178024
- /** @beta */
178025
+ /**
178026
+ * Immediate tool to toggle AccuDraw's availability for the current session.
178027
+ * @note AccuDraw is enabled by default
178028
+ * @beta
178029
+ */
178025
178030
  class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178026
178031
  static toolId = "AccuDraw.SessionToggle";
178027
178032
  async run() {
@@ -178029,7 +178034,11 @@ class AccuDrawSessionToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
178029
178034
  return true;
178030
178035
  }
178031
178036
  }
178032
- /** @beta */
178037
+ /**
178038
+ * Immediate tool to toggle AccuDraw on/off temporarily for the current interactive tool.
178039
+ * @note Typically used to disable AccuDraw for a single data button.
178040
+ * @beta
178041
+ */
178033
178042
  class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178034
178043
  static toolId = "AccuDraw.SuspendToggle";
178035
178044
  async run() {
@@ -178037,7 +178046,11 @@ class AccuDrawSuspendToggleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
178037
178046
  return true;
178038
178047
  }
178039
178048
  }
178040
- /** @beta */
178049
+ /**
178050
+ * Immediate tool to enable AccuDraw and position it at the current AccuSnap or Tentative snap location.
178051
+ * @note When not snapped, AccuDraw is activated at the last data button location when inactive, or moved to the current cursor location when active.
178052
+ * @beta
178053
+ */
178041
178054
  class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178042
178055
  static toolId = "AccuDraw.SetOrigin";
178043
178056
  async run() {
@@ -178045,7 +178058,11 @@ class AccuDrawSetOriginTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178045
178058
  return true;
178046
178059
  }
178047
178060
  }
178048
- /** @beta */
178061
+ /**
178062
+ * Immediate tool to lock the closer of the x or y axis based on the current cursor location.
178063
+ * @note When an axis is locked, points are projected onto the axis line.
178064
+ * @beta
178065
+ */
178049
178066
  class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178050
178067
  static toolId = "AccuDraw.LockSmart";
178051
178068
  async run() {
@@ -178053,7 +178070,10 @@ class AccuDrawSetLockSmartTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178053
178070
  return true;
178054
178071
  }
178055
178072
  }
178056
- /** @beta */
178073
+ /**
178074
+ * Immediate tool to toggle the locked state of an indexed axis of the AccuDraw compass.
178075
+ * @beta
178076
+ */
178057
178077
  class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178058
178078
  static toolId = "AccuDraw.LockIndex";
178059
178079
  async run() {
@@ -178061,7 +178081,10 @@ class AccuDrawSetLockIndexTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178061
178081
  return true;
178062
178082
  }
178063
178083
  }
178064
- /** @beta */
178084
+ /**
178085
+ * Immediate tool to toggle the locked state of the X text field.
178086
+ * @beta
178087
+ */
178065
178088
  class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178066
178089
  static toolId = "AccuDraw.LockX";
178067
178090
  async run() {
@@ -178069,7 +178092,10 @@ class AccuDrawSetLockXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178069
178092
  return true;
178070
178093
  }
178071
178094
  }
178072
- /** @beta */
178095
+ /**
178096
+ * Immediate tool to toggle the locked state of the Y text field.
178097
+ * @beta
178098
+ */
178073
178099
  class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178074
178100
  static toolId = "AccuDraw.LockY";
178075
178101
  async run() {
@@ -178077,7 +178103,10 @@ class AccuDrawSetLockYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178077
178103
  return true;
178078
178104
  }
178079
178105
  }
178080
- /** @beta */
178106
+ /**
178107
+ * Immediate tool to toggle the locked state of the Z text field.
178108
+ * @beta
178109
+ */
178081
178110
  class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178082
178111
  static toolId = "AccuDraw.LockZ";
178083
178112
  async run() {
@@ -178085,7 +178114,10 @@ class AccuDrawSetLockZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178085
178114
  return true;
178086
178115
  }
178087
178116
  }
178088
- /** @beta */
178117
+ /**
178118
+ * Immediate tool to toggle the locked state of the Distance text field.
178119
+ * @beta
178120
+ */
178089
178121
  class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178090
178122
  static toolId = "AccuDraw.LockDistance";
178091
178123
  async run() {
@@ -178093,7 +178125,10 @@ class AccuDrawSetLockDistanceTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Too
178093
178125
  return true;
178094
178126
  }
178095
178127
  }
178096
- /** @beta */
178128
+ /**
178129
+ * Immediate tool to toggle the locked state of the Angle text field.
178130
+ * @beta
178131
+ */
178097
178132
  class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178098
178133
  static toolId = "AccuDraw.LockAngle";
178099
178134
  async run() {
@@ -178101,7 +178136,10 @@ class AccuDrawSetLockAngleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178101
178136
  return true;
178102
178137
  }
178103
178138
  }
178104
- /** @beta */
178139
+ /**
178140
+ * Immediate tool to toggle between polar and rectangular compass modes.
178141
+ * @beta
178142
+ */
178105
178143
  class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178106
178144
  static toolId = "AccuDraw.ChangeMode";
178107
178145
  async run() {
@@ -178109,7 +178147,10 @@ class AccuDrawChangeModeTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178109
178147
  return true;
178110
178148
  }
178111
178149
  }
178112
- /** @beta */
178150
+ /**
178151
+ * Immediate tool to cycle between XY, XZ, and YZ planes for the current AccuDraw rotation.
178152
+ * @beta
178153
+ */
178113
178154
  class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178114
178155
  static toolId = "AccuDraw.RotateCycle";
178115
178156
  async run() {
@@ -178117,7 +178158,11 @@ class AccuDrawRotateCycleTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178117
178158
  return true;
178118
178159
  }
178119
178160
  }
178120
- /** @beta */
178161
+ /**
178162
+ * Immediate tool to set the AccuDraw rotation to a standard Top view.
178163
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
178164
+ * @beta
178165
+ */
178121
178166
  class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178122
178167
  static toolId = "AccuDraw.RotateTop";
178123
178168
  async run() {
@@ -178125,7 +178170,11 @@ class AccuDrawRotateTopTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178125
178170
  return true;
178126
178171
  }
178127
178172
  }
178128
- /** @beta */
178173
+ /**
178174
+ * Immediate tool to set the AccuDraw rotation to a standard Front view.
178175
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
178176
+ * @beta
178177
+ */
178129
178178
  class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178130
178179
  static toolId = "AccuDraw.RotateFront";
178131
178180
  async run() {
@@ -178133,7 +178182,11 @@ class AccuDrawRotateFrontTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178133
178182
  return true;
178134
178183
  }
178135
178184
  }
178136
- /** @beta */
178185
+ /**
178186
+ * Immediate tool to set the AccuDraw rotation to a standard Side view.
178187
+ * @note When IModelApp.toolAdmin.acsContextLock is true, rotation is set relative to the view's ACS.
178188
+ * @beta
178189
+ */
178137
178190
  class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178138
178191
  static toolId = "AccuDraw.RotateSide";
178139
178192
  async run() {
@@ -178141,7 +178194,10 @@ class AccuDrawRotateSideTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178141
178194
  return true;
178142
178195
  }
178143
178196
  }
178144
- /** @beta */
178197
+ /**
178198
+ * Immediate tool to set the AccuDraw rotation to match the rotation of the current view.
178199
+ * @beta
178200
+ */
178145
178201
  class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178146
178202
  static toolId = "AccuDraw.RotateView";
178147
178203
  async run() {
@@ -178149,7 +178205,10 @@ class AccuDrawRotateViewTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178149
178205
  return true;
178150
178206
  }
178151
178207
  }
178152
- /** @beta */
178208
+ /**
178209
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current x axis.
178210
+ * @beta
178211
+ */
178153
178212
  class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178154
178213
  static toolId = "AccuDraw.Rotate90AboutX";
178155
178214
  async run() {
@@ -178157,7 +178216,10 @@ class AccuDrawRotate90AboutXTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
178157
178216
  return true;
178158
178217
  }
178159
178218
  }
178160
- /** @beta */
178219
+ /**
178220
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current y axis.
178221
+ * @beta
178222
+ */
178161
178223
  class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178162
178224
  static toolId = "AccuDraw.Rotate90AboutY";
178163
178225
  async run() {
@@ -178165,7 +178227,10 @@ class AccuDrawRotate90AboutYTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool
178165
178227
  return true;
178166
178228
  }
178167
178229
  }
178168
- /** @beta */
178230
+ /**
178231
+ * Immediate tool to set the AccuDraw rotation to be a 90 degree rotation about the current z axis.
178232
+ * @beta
178233
+ */
178169
178234
  class AccuDrawRotate90AboutZTool extends _Tool__WEBPACK_IMPORTED_MODULE_6__.Tool {
178170
178235
  static toolId = "AccuDraw.Rotate90AboutZ";
178171
178236
  async run() {
@@ -178211,7 +178276,11 @@ class RotateAxesImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_M
178211
178276
  return true;
178212
178277
  }
178213
178278
  }
178214
- /** @beta */
178279
+ /**
178280
+ * Interactive tool to set the AccuDraw rotation by rotating about the current z axis to a point on the x axis.
178281
+ * @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.
178282
+ * @beta
178283
+ */
178215
178284
  class AccuDrawRotateAxesTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
178216
178285
  aboutCurrentZ;
178217
178286
  static toolId = "AccuDraw.RotateAxes";
@@ -178276,7 +178345,10 @@ class RotateElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTE
178276
178345
  return true;
178277
178346
  }
178278
178347
  }
178279
- /** @beta */
178348
+ /**
178349
+ * Interactive tool to set the AccuDraw rotation using the snapped to geometry under the cursor.
178350
+ * @beta
178351
+ */
178280
178352
  class AccuDrawRotateElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
178281
178353
  static toolId = "AccuDraw.RotateElement";
178282
178354
  /** @internal */
@@ -178285,6 +178357,124 @@ class AccuDrawRotateElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_
178285
178357
  }
178286
178358
  }
178287
178359
  /** @internal */
178360
+ class RotatePointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutImplementation {
178361
+ _points = [];
178362
+ _origin = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.getPoint().clone() : undefined;
178363
+ _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...
178364
+ _lastPoint;
178365
+ onProvideToolAssistance() {
178366
+ switch (this._points.length) {
178367
+ case 0:
178368
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.FirstPoint");
178369
+ break;
178370
+ case 1:
178371
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.SecondPoint");
178372
+ break;
178373
+ default:
178374
+ _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.outputPromptByKey("AccuDraw.RotatePoints.Prompts.NextPoint");
178375
+ break;
178376
+ }
178377
+ }
178378
+ onInitialize() {
178379
+ if (undefined === this._origin)
178380
+ return;
178381
+ this._points.push(this._origin);
178382
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...
178383
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
178384
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
178385
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.refreshDecorationsAndDynamics();
178386
+ }
178387
+ onComplete() {
178388
+ 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...
178389
+ if (this._moveOrigin)
178390
+ ignoreFlags |= _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin;
178391
+ return ignoreFlags;
178392
+ }
178393
+ doManipulation(ev, isMotion) {
178394
+ if (!ev || !ev.viewport)
178395
+ return false;
178396
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
178397
+ if (isMotion) {
178398
+ this._lastPoint = ev.point.clone();
178399
+ return false;
178400
+ }
178401
+ const accuDraw = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw;
178402
+ accuDraw.activate();
178403
+ switch (this._points.length) {
178404
+ case 0: {
178405
+ this._points.push(ev.point.clone());
178406
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._points[0]);
178407
+ break;
178408
+ }
178409
+ case 1: {
178410
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], ev.point);
178411
+ if (undefined === xVec)
178412
+ return false;
178413
+ if (!ev.viewport.view.is3d() || !ev.viewport.view.allow3dManipulations()) {
178414
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetXAxis, this._points[0], xVec);
178415
+ return true; // Complete
178416
+ }
178417
+ this._points.push(ev.point.clone());
178418
+ 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);
178419
+ break;
178420
+ }
178421
+ case 2: {
178422
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);
178423
+ if (undefined === xVec)
178424
+ return false;
178425
+ const yVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], ev.point);
178426
+ if (undefined === yVec)
178427
+ return false;
178428
+ const matrix = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRigidFromColumns(xVec, yVec, _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.AxisOrder.XYZ);
178429
+ if (undefined === matrix)
178430
+ return false;
178431
+ const invMatrix = matrix.inverse();
178432
+ if (undefined === invMatrix)
178433
+ return false;
178434
+ accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetRMatrix, this._points[0], invMatrix);
178435
+ return true; // Complete
178436
+ }
178437
+ }
178438
+ this.onProvideToolAssistance();
178439
+ return false;
178440
+ }
178441
+ doDecorate(context) {
178442
+ if (0 === this._points.length)
178443
+ return;
178444
+ const currentPoint = this._lastPoint;
178445
+ if (undefined === currentPoint)
178446
+ return;
178447
+ if (2 === this._points.length) {
178448
+ const xVec = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createNormalizedStartEnd(this._points[0], this._points[1]);
178449
+ if (undefined === xVec)
178450
+ return;
178451
+ const plane = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Plane3dByOriginAndUnitNormal.create(this._points[0], xVec);
178452
+ if (undefined === plane)
178453
+ return;
178454
+ plane.projectPointToPlane(currentPoint, currentPoint);
178455
+ }
178456
+ const tmpPoints = this._points.slice(0, 1);
178457
+ tmpPoints.push(currentPoint);
178458
+ const vp = context.viewport;
178459
+ const color = vp.getContrastToBackgroundColor();
178460
+ const builder = context.createGraphicBuilder(_common_render_GraphicType__WEBPACK_IMPORTED_MODULE_8__.GraphicType.WorldOverlay);
178461
+ builder.setSymbology(color, color, 2);
178462
+ builder.addLineString(tmpPoints);
178463
+ context.addDecorationFromBuilder(builder);
178464
+ }
178465
+ }
178466
+ /**
178467
+ * Interactive tool to set the AccuDraw rotation by 3 points: x axis origin, x axis direction, and y axis direction.
178468
+ * @beta
178469
+ */
178470
+ class AccuDrawRotatePointsTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
178471
+ static toolId = "AccuDraw.RotatePoints";
178472
+ /** @internal */
178473
+ createImplementation() {
178474
+ return new RotatePointsImplementation();
178475
+ }
178476
+ }
178477
+ /** @internal */
178288
178478
  class DefineACSByElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutImplementation {
178289
178479
  _origin = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point3d.create();
178290
178480
  _rMatrix = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createIdentity();
@@ -178327,7 +178517,10 @@ class DefineACSByElementImplementation extends _AccuDrawShortcutTool__WEBPACK_IM
178327
178517
  this._acs.display(context, _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Active | _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Dynamics);
178328
178518
  }
178329
178519
  }
178330
- /** @beta */
178520
+ /**
178521
+ * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction/
178522
+ * @beta
178523
+ */
178331
178524
  class DefineACSByElementTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
178332
178525
  static toolId = "AccuDraw.DefineACSByElement";
178333
178526
  /** @internal */
@@ -178340,6 +178533,7 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
178340
178533
  _points = [];
178341
178534
  _acs;
178342
178535
  _origin = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.isActive ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.getPoint().clone() : undefined;
178536
+ _lastPoint;
178343
178537
  onProvideToolAssistance() {
178344
178538
  switch (this._points.length) {
178345
178539
  case 0:
@@ -178356,16 +178550,20 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
178356
178550
  onInitialize() {
178357
178551
  if (undefined === this._origin)
178358
178552
  return;
178359
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
178360
178553
  this._points.push(this._origin);
178361
178554
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.tentativePoint.clear(true); // Necessary when installed as an InputCollector...
178555
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
178556
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.setContext(_AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.SetOrigin | _AccuDraw__WEBPACK_IMPORTED_MODULE_2__.AccuDrawFlags.FixedOrigin, this._origin);
178557
+ _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.refreshDecorationsAndDynamics();
178362
178558
  }
178363
178559
  doManipulation(ev, isMotion) {
178364
178560
  if (!ev || !ev.viewport)
178365
178561
  return false;
178366
178562
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.invalidateDecorationsAllViews();
178367
- if (isMotion)
178563
+ if (isMotion) {
178564
+ this._lastPoint = ev.point.clone();
178368
178565
  return false;
178566
+ }
178369
178567
  _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuDraw.activate();
178370
178568
  this._points.push(ev.point.clone());
178371
178569
  const vp = ev.viewport;
@@ -178380,11 +178578,11 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
178380
178578
  return false;
178381
178579
  }
178382
178580
  doDecorate(context) {
178581
+ if (undefined === this._lastPoint)
178582
+ return;
178383
178583
  const tmpPoints = [];
178384
178584
  this._points.forEach((pt) => tmpPoints.push(pt));
178385
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButtonEvent();
178386
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
178387
- tmpPoints.push(ev.point);
178585
+ tmpPoints.push(this._lastPoint);
178388
178586
  const vp = context.viewport;
178389
178587
  if (!this._acs)
178390
178588
  this._acs = vp.view.auxiliaryCoordinateSystem.clone();
@@ -178392,7 +178590,10 @@ class DefineACSByPointsImplementation extends _AccuDrawShortcutTool__WEBPACK_IMP
178392
178590
  this._acs.display(context, _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Active | _AuxCoordSys__WEBPACK_IMPORTED_MODULE_4__.ACSDisplayOptions.Dynamics);
178393
178591
  }
178394
178592
  }
178395
- /** @beta */
178593
+ /**
178594
+ * Interactive tool to set the view's ACS rotation by 3 points: x axis origin, x axis direction, and y axis direction.
178595
+ * @beta
178596
+ */
178396
178597
  class DefineACSByPointsTool extends _AccuDrawShortcutTool__WEBPACK_IMPORTED_MODULE_7__.AccuDrawShortcutTool {
178397
178598
  static toolId = "AccuDraw.DefineACSByPoints";
178398
178599
  /** @internal */
@@ -179743,8 +179944,8 @@ class ViewClipByPlaneTool extends ViewClipTool {
179743
179944
  class ViewClipByShapeTool extends ViewClipTool {
179744
179945
  static toolId = "ViewClip.ByShape";
179745
179946
  static iconSpec = "icon-section-shape";
179746
- /** @internal */
179747
179947
  _orientationValue = { value: _AccuDraw__WEBPACK_IMPORTED_MODULE_3__.ContextRotationId.Top };
179948
+ _lastMotion;
179748
179949
  /** @internal */
179749
179950
  _points = [];
179750
179951
  /** @internal */
@@ -179878,9 +180079,8 @@ class ViewClipByShapeTool extends ViewClipTool {
179878
180079
  decorate(context) {
179879
180080
  if (context.viewport !== this.targetView)
179880
180081
  return;
179881
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButtonEvent();
179882
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
179883
- if (undefined === ev.viewport)
180082
+ const ev = this._lastMotion;
180083
+ if (undefined === ev?.viewport)
179884
180084
  return;
179885
180085
  const points = this.getClipPoints(ev);
179886
180086
  if (points.length < 2)
@@ -179901,6 +180101,7 @@ class ViewClipByShapeTool extends ViewClipTool {
179901
180101
  }
179902
180102
  /** @internal */
179903
180103
  async onMouseMotion(ev) {
180104
+ this._lastMotion = ev;
179904
180105
  if (this._points.length > 0 && undefined !== ev.viewport)
179905
180106
  ev.viewport.invalidateDecorations();
179906
180107
  }
@@ -179950,6 +180151,7 @@ class ViewClipByShapeTool extends ViewClipTool {
179950
180151
  class ViewClipByRangeTool extends ViewClipTool {
179951
180152
  static toolId = "ViewClip.ByRange";
179952
180153
  static iconSpec = "icon-section-range";
180154
+ _lastMotion;
179953
180155
  /** @internal */
179954
180156
  _corner;
179955
180157
  /** @internal */
@@ -179992,9 +180194,8 @@ class ViewClipByRangeTool extends ViewClipTool {
179992
180194
  decorate(context) {
179993
180195
  if (context.viewport !== this.targetView || undefined === this._corner)
179994
180196
  return;
179995
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButtonEvent();
179996
- _IModelApp__WEBPACK_IMPORTED_MODULE_6__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
179997
- if (undefined === ev.viewport)
180197
+ const ev = this._lastMotion;
180198
+ if (undefined === ev?.viewport)
179998
180199
  return;
179999
180200
  const range = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Range3d.create();
180000
180201
  const transform = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createIdentity();
@@ -180013,6 +180214,7 @@ class ViewClipByRangeTool extends ViewClipTool {
180013
180214
  }
180014
180215
  /** @internal */
180015
180216
  async onMouseMotion(ev) {
180217
+ this._lastMotion = ev;
180016
180218
  if (undefined !== this._corner && undefined !== ev.viewport)
180017
180219
  ev.viewport.invalidateDecorations();
180018
180220
  }
@@ -312281,11 +312483,19 @@ class BaseFormat {
312281
312483
  // default "north" is applied by the formatter (quarter rotation counter clockwise from east, the value depends on the units used)
312282
312484
  get azimuthBase() { return this._azimuthBase; }
312283
312485
  set azimuthBase(azimuthBase) { this._azimuthBase = azimuthBase; }
312486
+ /**
312487
+ * Must share the same phenomenon as the eventual persistence unit.
312488
+ * @see FormatProps.azimuthBaseUnit
312489
+ */
312284
312490
  get azimuthBaseUnit() { return this._azimuthBaseUnit; }
312285
312491
  set azimuthBaseUnit(azimuthBaseUnit) { this._azimuthBaseUnit = azimuthBaseUnit; }
312286
312492
  get azimuthCounterClockwise() { return this._azimuthCounterClockwise; }
312287
312493
  set azimuthCounterClockwise(azimuthCounterClockwise) { this._azimuthCounterClockwise = azimuthCounterClockwise; }
312288
312494
  get azimuthClockwiseOrDefault() { return !this._azimuthCounterClockwise; }
312495
+ /**
312496
+ * Must share the same phenomenon as the eventual persistence unit.
312497
+ * @see FormatProps.revolutionUnit
312498
+ */
312289
312499
  get revolutionUnit() { return this._revolutionUnit; }
312290
312500
  set revolutionUnit(revolutionUnit) { this._revolutionUnit = revolutionUnit; }
312291
312501
  /** 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. */
@@ -313125,6 +313335,7 @@ __webpack_require__.r(__webpack_exports__);
313125
313335
  /* harmony import */ var _FormatterSpec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FormatterSpec */ "../../core/quantity/lib/esm/Formatter/FormatterSpec.js");
313126
313336
  /* harmony import */ var _FormatEnums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FormatEnums */ "../../core/quantity/lib/esm/Formatter/FormatEnums.js");
313127
313337
  /* harmony import */ var _Quantity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Quantity */ "../../core/quantity/lib/esm/Quantity.js");
313338
+ /* harmony import */ var _generated_Units_generated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../generated/Units.generated */ "../../core/quantity/lib/esm/generated/Units.generated.js");
313128
313339
  /*---------------------------------------------------------------------------------------------
313129
313340
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
313130
313341
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -313137,6 +313348,7 @@ __webpack_require__.r(__webpack_exports__);
313137
313348
 
313138
313349
 
313139
313350
 
313351
+
313140
313352
  /** rounding additive
313141
313353
  * @internal
313142
313354
  */
@@ -313577,8 +313789,8 @@ class Formatter {
313577
313789
  if (type !== _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Bearing && type !== _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Azimuth)
313578
313790
  return { magnitude };
313579
313791
  const revolution = this.getRevolution(spec);
313580
- magnitude = this.normalizeAngle(magnitude, revolution);
313581
313792
  const quarterRevolution = revolution / 4;
313793
+ magnitude = this.normalizeToAzimuth(magnitude, spec.persistenceUnit.phenomenon, revolution);
313582
313794
  if (type === _FormatEnums__WEBPACK_IMPORTED_MODULE_3__.FormatType.Bearing) {
313583
313795
  let quadrant = 0;
313584
313796
  while (magnitude > quarterRevolution) {
@@ -313647,6 +313859,17 @@ class Formatter {
313647
313859
  magnitude += revolution;
313648
313860
  return magnitude;
313649
313861
  }
313862
+ /**
313863
+ * Converts a raw magnitude to a normalized azimuth (0 to revolution, measured clockwise from north), based on
313864
+ * the phenomenon it was persisted under. Raw math angles (`ANGLE` phenomenon) need the north-measured conversion;
313865
+ * true azimuths (`HORIZONTAL_DIRECTION`) don't. Not a unit conversion, so it's applied here, not via `convertTo`.
313866
+ * @internal
313867
+ */
313868
+ static normalizeToAzimuth(magnitude, phenomenon, revolution) {
313869
+ if (phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_5__.Phenomena.ANGLE)
313870
+ magnitude = revolution / 4 - magnitude;
313871
+ return this.normalizeAngle(magnitude, revolution);
313872
+ }
313650
313873
  static getRevolution(spec) {
313651
313874
  if (spec.revolutionConversion === undefined) {
313652
313875
  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.`);
@@ -313910,6 +314133,9 @@ class FormatterSpec {
313910
314133
  * @param name The name of a format specification.
313911
314134
  * @param unitsProvider The units provider is used to look up unit definitions and provide conversion information for converting between units.
313912
314135
  * @param inputUnit The unit the value to be formatted. This unit is often referred to as persistence unit.
314136
+ * @note For Bearing/Azimuth formats, `inputUnit`'s phenomenon must match `format.azimuthBaseUnit`/`format.revolutionUnit`.
314137
+ * @see BaseFormat.azimuthBaseUnit
314138
+ * @see BaseFormat.revolutionUnit
313913
314139
  */
313914
314140
  static async create(name, format, unitsProvider, inputUnit) {
313915
314141
  const conversions = await FormatterSpec.getUnitConversions(format, unitsProvider, inputUnit);
@@ -314082,6 +314308,7 @@ __webpack_require__.r(__webpack_exports__);
314082
314308
  /* harmony import */ var _Formatter_FormatEnums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Formatter/FormatEnums */ "../../core/quantity/lib/esm/Formatter/FormatEnums.js");
314083
314309
  /* harmony import */ var _QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./QuantityLoggerCategory */ "../../core/quantity/lib/esm/QuantityLoggerCategory.js");
314084
314310
  /* harmony import */ var _Quantity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Quantity */ "../../core/quantity/lib/esm/Quantity.js");
314311
+ /* harmony import */ var _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./generated/Units.generated */ "../../core/quantity/lib/esm/generated/Units.generated.js");
314085
314312
  /*---------------------------------------------------------------------------------------------
314086
314313
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
314087
314314
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -314095,6 +314322,7 @@ __webpack_require__.r(__webpack_exports__);
314095
314322
 
314096
314323
 
314097
314324
 
314325
+
314098
314326
  /** Possible parser errors
314099
314327
  * @beta
314100
314328
  */
@@ -314758,16 +314986,19 @@ class Parser {
314758
314986
  }
314759
314987
  return this.parseAndProcessTokens(inString, format, unitsConversions);
314760
314988
  }
314761
- /** The value of special direction is always in degrees, try to find the unit conversion for that. */
314989
+ /** The value of special direction is always in degrees; resolve "degrees" relative to
314990
+ * `spec.outUnit`'s phenomenon, since `Units.ARC_DEG` only exists in the `Units.ANGLE` family. */
314762
314991
  static processSpecialBearingDirection(mag, spec) {
314763
- const specialDirUnit = spec.unitConversions.find((unitConversion) => unitConversion.name === "Units.ARC_DEG");
314992
+ const degreeUnitName = spec.outUnit.phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.HORIZONTAL_DIRECTION ? "Units.HORIZONTAL_DIR_ARC_DEG" : "Units.ARC_DEG";
314993
+ const specialDirUnit = spec.unitConversions.find((unitConversion) => unitConversion.name === degreeUnitName);
314764
314994
  if (!specialDirUnit)
314765
314995
  return { ok: false, error: ParseError.UnknownUnit };
314766
314996
  const preferredUnit = spec.outUnit;
314767
314997
  const conversion = this.tryFindUnitConversion(specialDirUnit.label, spec.unitConversions, preferredUnit);
314768
314998
  if (!conversion)
314769
314999
  return { ok: true, value: mag };
314770
- return { ok: true, value: (0,_Quantity__WEBPACK_IMPORTED_MODULE_5__.applyConversion)(mag, conversion) };
315000
+ const revolution = this.getRevolution(spec);
315001
+ return { ok: true, value: this.convertAzimuthToPersistenceConvention((0,_Quantity__WEBPACK_IMPORTED_MODULE_5__.applyConversion)(mag, conversion), spec, revolution) };
314771
315002
  }
314772
315003
  static parseBearingFormat(inString, spec) {
314773
315004
  const specialDirections = {
@@ -314844,6 +315075,7 @@ class Parser {
314844
315075
  }
314845
315076
  }
314846
315077
  magnitude = this.normalizeAngle(magnitude, revolution);
315078
+ magnitude = this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution);
314847
315079
  return { ok: true, value: magnitude };
314848
315080
  }
314849
315081
  static parseAzimuthFormat(inString, spec) {
@@ -314869,6 +315101,8 @@ class Parser {
314869
315101
  const inputIsClockwise = spec.format.azimuthClockwiseOrDefault;
314870
315102
  if (inputIsClockwise && azimuthBase === 0) {
314871
315103
  // parsed result already has the same base and orientation as our desired output
315104
+ if (spec.outUnit.phenomenon === _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.ANGLE)
315105
+ return { ok: true, value: this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution) };
314872
315106
  return parsedResult;
314873
315107
  }
314874
315108
  if (inputIsClockwise)
@@ -314876,6 +315110,7 @@ class Parser {
314876
315110
  else
314877
315111
  magnitude = azimuthBase - magnitude;
314878
315112
  magnitude = this.normalizeAngle(magnitude, revolution);
315113
+ magnitude = this.convertAzimuthToPersistenceConvention(magnitude, spec, revolution);
314879
315114
  return { ok: true, value: magnitude };
314880
315115
  }
314881
315116
  /**
@@ -315017,6 +315252,15 @@ class Parser {
315017
315252
  }
315018
315253
  return converted.magnitude;
315019
315254
  }
315255
+ /** Converts an azimuth-convention magnitude back to a raw math angle when `spec.outUnit` is
315256
+ * `ANGLE`-phenomenon (mirrors the transform in `Formatter.processBearingAndAzimuth`). No-op for
315257
+ * `HORIZONTAL_DIRECTION`, which is already a true azimuth. */
315258
+ static convertAzimuthToPersistenceConvention(magnitude, spec, revolution) {
315259
+ if (spec.outUnit.phenomenon !== _generated_Units_generated__WEBPACK_IMPORTED_MODULE_6__.Phenomena.ANGLE)
315260
+ return magnitude;
315261
+ const quarterRevolution = revolution / 4;
315262
+ return this.normalizeAngle(quarterRevolution - magnitude, revolution);
315263
+ }
315020
315264
  static parseAndProcessTokens(inString, format, unitsConversions) {
315021
315265
  const tokens = Parser.parseQuantitySpecification(inString, format);
315022
315266
  if (Parser._log) {
@@ -315217,6 +315461,9 @@ class ParserSpec {
315217
315461
  * @param format The format specification.
315218
315462
  * @param unitsProvider The units provider is used to look up unit definitions and provide conversion information for converting between units.
315219
315463
  * @param outUnit The unit a value will be formatted to. This unit is often referred to as persistence unit.
315464
+ * @note For Bearing/Azimuth formats, `outUnit`'s phenomenon must match `format.azimuthBaseUnit`/`format.revolutionUnit`.
315465
+ * @see BaseFormat.azimuthBaseUnit
315466
+ * @see BaseFormat.revolutionUnit
315220
315467
  */
315221
315468
  static async create(format, unitsProvider, outUnit, altUnitLabelsProvider) {
315222
315469
  let conversions;
@@ -332798,7 +333045,7 @@ var loadLanguages = instance.loadLanguages;
332798
333045
  /***/ ((module) => {
332799
333046
 
332800
333047
  "use strict";
332801
- 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"}}');
333048
+ 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"}}');
332802
333049
 
332803
333050
  /***/ })
332804
333051