@itwin/rpcinterface-full-stack-tests 5.1.0-dev.20 → 5.1.0-dev.25

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.
@@ -200457,6 +200457,7 @@ __webpack_require__.r(__webpack_exports__);
200457
200457
  /* harmony import */ var _SelectTool__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./SelectTool */ "../../core/frontend/lib/esm/tools/SelectTool.js");
200458
200458
  /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
200459
200459
  /* harmony import */ var _ToolAssistance__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ToolAssistance */ "../../core/frontend/lib/esm/tools/ToolAssistance.js");
200460
+ /* harmony import */ var _ToolSettings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ToolSettings */ "../../core/frontend/lib/esm/tools/ToolSettings.js");
200460
200461
  /*---------------------------------------------------------------------------------------------
200461
200462
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
200462
200463
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -200477,6 +200478,7 @@ __webpack_require__.r(__webpack_exports__);
200477
200478
 
200478
200479
 
200479
200480
 
200481
+
200480
200482
  /** Identifies the source of the elements in the agenda.
200481
200483
  * @public
200482
200484
  */
@@ -200874,12 +200876,105 @@ class ElementSetTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_9__.Primiti
200874
200876
  await this.onAgendaModified();
200875
200877
  return true;
200876
200878
  }
200877
- /** Get element ids to process from drag box or crossing line selection.
200878
- * Sub-classes may override to support selection scopes or apply tool specific filtering.
200879
- */
200880
- async getDragSelectCandidates(vp, origin, corner, method, overlap) {
200879
+ /** Get ids of spatial elements to process from a clip volume created by drag box selection. */
200880
+ static async getVolumeSelectionCandidates(vp, origin, corner, allowOverlaps, filter) {
200881
+ const contents = new Set();
200882
+ if (!vp.view.isSpatialView())
200883
+ return contents;
200884
+ const boxRange = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Range2d.createXYXY(origin.x, origin.y, corner.x, corner.y);
200885
+ if (boxRange.isNull || boxRange.isAlmostZeroX || boxRange.isAlmostZeroY)
200886
+ return contents;
200887
+ const getClipPlane = (viewPt, viewDir, negate) => {
200888
+ const point = vp.viewToWorld(_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Point3d.createFrom(viewPt));
200889
+ const boresite = _AccuDraw__WEBPACK_IMPORTED_MODULE_3__.AccuDrawHintBuilder.getBoresite(point, vp);
200890
+ const normal = viewDir.crossProduct(boresite.direction);
200891
+ if (negate)
200892
+ normal.negate(normal);
200893
+ return _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipPlane.createNormalAndPoint(normal, point);
200894
+ };
200895
+ const planeSet = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ConvexClipPlaneSet.createEmpty();
200896
+ planeSet.addPlaneToConvexSet(getClipPlane(boxRange.low, vp.rotation.rowX(), true));
200897
+ planeSet.addPlaneToConvexSet(getClipPlane(boxRange.low, vp.rotation.rowY(), true));
200898
+ planeSet.addPlaneToConvexSet(getClipPlane(boxRange.high, vp.rotation.rowX(), false));
200899
+ planeSet.addPlaneToConvexSet(getClipPlane(boxRange.high, vp.rotation.rowY(), false));
200900
+ if (0 === planeSet.planes.length)
200901
+ return contents;
200902
+ const clip = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipVector.createCapture([_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipPrimitive.createCapture(planeSet)]);
200903
+ const viewRange = vp.computeViewRange();
200904
+ const range = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipUtilities.rangeOfClipperIntersectionWithRange(clip, viewRange);
200905
+ if (range.isNull)
200906
+ return contents;
200907
+ // TODO: Possible to make UnionOfComplexClipPlaneSets from view clip and planes work and remove 2nd containment check?
200908
+ const viewClip = (vp.viewFlags.clipVolume ? vp.view.getViewClip()?.clone() : undefined);
200909
+ if (viewClip) {
200910
+ const viewClipRange = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipUtilities.rangeOfClipperIntersectionWithRange(viewClip, viewRange);
200911
+ if (viewClipRange.isNull || !viewClipRange.intersectsRange(range))
200912
+ return contents;
200913
+ }
200914
+ const candidates = [];
200915
+ const categories = new Set();
200916
+ try {
200917
+ const viewedModels = [...vp.view.modelSelector.models].join(",");
200918
+ const viewedCategories = [...vp.view.categorySelector.categories].join(",");
200919
+ const ecsql = `SELECT e.ECInstanceId, Category.Id as category FROM bis.SpatialElement e JOIN bis.SpatialIndex i ON e.ECInstanceId=i.ECInstanceId WHERE Model.Id IN (${viewedModels}) AND Category.Id IN (${viewedCategories}) AND i.MinX <= ${range.xHigh} AND i.MinY <= ${range.yHigh} AND i.MinZ <= ${range.zHigh} AND i.MaxX >= ${range.xLow} AND i.MaxY >= ${range.yLow} AND i.MaxZ >= ${range.zLow}`;
200920
+ const reader = vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.QueryRowFormat.UseECSqlPropertyNames });
200921
+ for await (const row of reader) {
200922
+ candidates.push(row.ECInstanceId);
200923
+ categories.add(row.category);
200924
+ }
200925
+ }
200926
+ catch { }
200927
+ if (0 === candidates.length)
200928
+ return contents;
200929
+ let offSubCategories;
200930
+ if (0 !== categories.size) {
200931
+ for (const categoryId of categories) {
200932
+ const subcategories = vp.iModel.subcategories.getSubCategories(categoryId);
200933
+ if (undefined === subcategories)
200934
+ continue;
200935
+ for (const subCategoryId of subcategories) {
200936
+ const appearance = vp.iModel.subcategories.getSubCategoryAppearance(subCategoryId);
200937
+ if (undefined === appearance || (!appearance.invisible && !appearance.dontLocate))
200938
+ continue;
200939
+ if (undefined === offSubCategories)
200940
+ offSubCategories = new Array;
200941
+ offSubCategories.push(subCategoryId);
200942
+ }
200943
+ }
200944
+ }
200945
+ const requestProps = {
200946
+ candidates,
200947
+ clip: clip.toJSON(),
200948
+ allowOverlaps,
200949
+ viewFlags: vp.viewFlags.toJSON(),
200950
+ offSubCategories,
200951
+ };
200952
+ const result = await vp.iModel.getGeometryContainment(requestProps);
200953
+ if (_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.SUCCESS !== result.status || undefined === result.candidatesContainment)
200954
+ return contents;
200955
+ result.candidatesContainment.forEach((status, index) => {
200956
+ if (_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipPlaneContainment.StronglyOutside !== status && (undefined === filter || filter(candidates[index])))
200957
+ contents.add(candidates[index]);
200958
+ });
200959
+ if (0 !== contents.size && viewClip) {
200960
+ requestProps.clip = viewClip.toJSON();
200961
+ requestProps.candidates.length = 0;
200962
+ for (const id of contents)
200963
+ requestProps.candidates.push(id);
200964
+ contents.clear();
200965
+ const resultViewClip = await vp.iModel.getGeometryContainment(requestProps);
200966
+ if (_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.BentleyStatus.SUCCESS !== resultViewClip.status || undefined === resultViewClip.candidatesContainment)
200967
+ return contents;
200968
+ resultViewClip.candidatesContainment.forEach((status, index) => {
200969
+ if (_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.ClipPlaneContainment.StronglyOutside !== status)
200970
+ contents.add(candidates[index]);
200971
+ });
200972
+ }
200973
+ return contents;
200974
+ }
200975
+ /** Get ids of visible elements to process from drag box or crossing line selection. */
200976
+ static getAreaSelectionCandidates(vp, origin, corner, method, allowOverlaps, filter) {
200881
200977
  let contents = new Set();
200882
- // TODO: Include option to use IModelConnection.getGeometryContainment instead of readPixels. No/Yes/2dOnly...
200883
200978
  const pts = [];
200884
200979
  pts[0] = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Point2d(Math.floor(origin.x + 0.5), Math.floor(origin.y + 0.5));
200885
200980
  pts[1] = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Point2d(Math.floor(corner.x + 0.5), Math.floor(corner.y + 0.5));
@@ -200902,12 +200997,12 @@ class ElementSetTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_9__.Primiti
200902
200997
  return undefined; // no geometry at this location...
200903
200998
  if (!vp.isPixelSelectable(pixel))
200904
200999
  return undefined; // reality model, terrain, etc - not selectable
200905
- if (!this.isElementIdValid(pixel.elementId, ModifyElementSource.DragSelect))
201000
+ if (undefined !== filter && !filter(pixel.elementId))
200906
201001
  return undefined;
200907
201002
  return pixel.elementId;
200908
201003
  };
200909
201004
  if (_SelectTool__WEBPACK_IMPORTED_MODULE_10__.SelectionMethod.Box === method) {
200910
- const outline = overlap ? undefined : new Set();
201005
+ const outline = allowOverlaps ? undefined : new Set();
200911
201006
  const offset = sRange.clone();
200912
201007
  offset.expandInPlace(-2);
200913
201008
  for (testPoint.x = sRange.low.x; testPoint.x <= sRange.high.x; ++testPoint.x) {
@@ -200949,6 +201044,33 @@ class ElementSetTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_9__.Primiti
200949
201044
  }, true);
200950
201045
  return contents;
200951
201046
  }
201047
+ /** Get ids of elements to process from drag box or crossing line selection using either the depth buffer or clip vector...
201048
+ * @internal
201049
+ */
201050
+ static async getAreaOrVolumeSelectionCandidates(vp, origin, corner, method, allowOverlaps, filter, includeDecorationsForVolume) {
201051
+ let contents;
201052
+ if (_ToolSettings__WEBPACK_IMPORTED_MODULE_13__.ToolSettings.enableVolumeSelection && _SelectTool__WEBPACK_IMPORTED_MODULE_10__.SelectionMethod.Box === method && vp.view.isSpatialView()) {
201053
+ contents = await ElementSetTool.getVolumeSelectionCandidates(vp, origin, corner, allowOverlaps, filter);
201054
+ // Use area select to identify pickable transients...
201055
+ if (includeDecorationsForVolume) {
201056
+ const acceptTransientsFilter = (id) => { return _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isTransient(id) && (undefined === filter || filter(id)); };
201057
+ const transients = ElementSetTool.getAreaSelectionCandidates(vp, origin, corner, method, allowOverlaps, acceptTransientsFilter);
201058
+ for (const id of transients)
201059
+ contents.add(id);
201060
+ }
201061
+ }
201062
+ else {
201063
+ contents = ElementSetTool.getAreaSelectionCandidates(vp, origin, corner, method, allowOverlaps, filter);
201064
+ }
201065
+ return contents;
201066
+ }
201067
+ /** Get element ids to process from drag box or crossing line selection.
201068
+ * Sub-classes may override to support selection scopes or apply tool specific filtering.
201069
+ */
201070
+ async getDragSelectCandidates(vp, origin, corner, method, overlap) {
201071
+ const filter = (id) => { return this.isElementIdValid(id, ModifyElementSource.DragSelect); };
201072
+ return ElementSetTool.getAreaOrVolumeSelectionCandidates(vp, origin, corner, method, overlap, filter, _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.options.allowDecorations);
201073
+ }
200952
201074
  /** Populate [[ElementSetTool.agenda]] by drag box or crossing line information.
200953
201075
  * @see [[ElementSetTool.getDragSelectCandidates]] to filter or augment the set of elements.
200954
201076
  */
@@ -203272,17 +203394,15 @@ __webpack_require__.r(__webpack_exports__);
203272
203394
  /* harmony export */ SelectionTool: () => (/* binding */ SelectionTool)
203273
203395
  /* harmony export */ });
203274
203396
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
203275
- /* harmony import */ var _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @itwin/core-geometry */ "../../core/geometry/lib/esm/core-geometry.js");
203276
- /* harmony import */ var _itwin_core_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @itwin/core-common */ "../../core/common/lib/esm/core-common.js");
203277
- /* harmony import */ var _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @itwin/appui-abstract */ "../../ui/appui-abstract/lib/esm/appui-abstract.js");
203278
- /* harmony import */ var _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ElementLocateManager */ "../../core/frontend/lib/esm/ElementLocateManager.js");
203279
- /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
203280
- /* harmony import */ var _render_Pixel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../render/Pixel */ "../../core/frontend/lib/esm/render/Pixel.js");
203281
- /* harmony import */ var _common_ViewRect__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../common/ViewRect */ "../../core/frontend/lib/esm/common/ViewRect.js");
203282
- /* harmony import */ var _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./PrimitiveTool */ "../../core/frontend/lib/esm/tools/PrimitiveTool.js");
203283
- /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
203284
- /* harmony import */ var _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ToolAdmin */ "../../core/frontend/lib/esm/tools/ToolAdmin.js");
203285
- /* harmony import */ var _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ToolAssistance */ "../../core/frontend/lib/esm/tools/ToolAssistance.js");
203397
+ /* harmony import */ var _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @itwin/core-common */ "../../core/common/lib/esm/core-common.js");
203398
+ /* harmony import */ var _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @itwin/appui-abstract */ "../../ui/appui-abstract/lib/esm/appui-abstract.js");
203399
+ /* harmony import */ var _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ElementLocateManager */ "../../core/frontend/lib/esm/ElementLocateManager.js");
203400
+ /* harmony import */ var _IModelApp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../IModelApp */ "../../core/frontend/lib/esm/IModelApp.js");
203401
+ /* harmony import */ var _PrimitiveTool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PrimitiveTool */ "../../core/frontend/lib/esm/tools/PrimitiveTool.js");
203402
+ /* harmony import */ var _Tool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Tool */ "../../core/frontend/lib/esm/tools/Tool.js");
203403
+ /* harmony import */ var _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ToolAdmin */ "../../core/frontend/lib/esm/tools/ToolAdmin.js");
203404
+ /* harmony import */ var _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ToolAssistance */ "../../core/frontend/lib/esm/tools/ToolAssistance.js");
203405
+ /* harmony import */ var _ElementSetTool__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ElementSetTool */ "../../core/frontend/lib/esm/tools/ElementSetTool.js");
203286
203406
  /*---------------------------------------------------------------------------------------------
203287
203407
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
203288
203408
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -203300,8 +203420,6 @@ __webpack_require__.r(__webpack_exports__);
203300
203420
 
203301
203421
 
203302
203422
 
203303
-
203304
-
203305
203423
  // cSpell:ignore buttongroup
203306
203424
  /** The method for choosing elements with the [[SelectionTool]]
203307
203425
  * @public
@@ -203347,7 +203465,7 @@ var SelectionProcessing;
203347
203465
  /** Tool for picking a set of elements of interest, selected by the user.
203348
203466
  * @public
203349
203467
  */
203350
- class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.PrimitiveTool {
203468
+ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_5__.PrimitiveTool {
203351
203469
  static hidden = false;
203352
203470
  static toolId = "Select";
203353
203471
  static iconSpec = "icon-cursor";
@@ -203366,7 +203484,7 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203366
203484
  set selectionMethod(method) { this._selectionMethodValue.value = method; }
203367
203485
  get selectionMode() { return this._selectionModeValue.value; }
203368
203486
  set selectionMode(mode) { this._selectionModeValue.value = mode; }
203369
- static methodsMessage(str) { return _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate(`ElementSet.SelectionMethods.${str}`); }
203487
+ static methodsMessage(str) { return _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate(`ElementSet.SelectionMethods.${str}`); }
203370
203488
  static _methodsName = "selectionMethods";
203371
203489
  /* The property descriptions used to generate ToolSettings UI. */
203372
203490
  static _getMethodsDescription() {
@@ -203377,14 +203495,14 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203377
203495
  editor: {
203378
203496
  name: "enum-buttongroup",
203379
203497
  params: [{
203380
- type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_3__.PropertyEditorParamTypes.ButtonGroupData,
203498
+ type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_2__.PropertyEditorParamTypes.ButtonGroupData,
203381
203499
  buttons: [
203382
203500
  { iconSpec: "icon-select-single" },
203383
203501
  { iconSpec: "icon-select-line" },
203384
203502
  { iconSpec: "icon-select-box" },
203385
203503
  ],
203386
203504
  }, {
203387
- type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_3__.PropertyEditorParamTypes.SuppressEditorLabel,
203505
+ type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_2__.PropertyEditorParamTypes.SuppressEditorLabel,
203388
203506
  suppressLabelPlaceholder: true,
203389
203507
  },
203390
203508
  ],
@@ -203398,7 +203516,7 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203398
203516
  },
203399
203517
  };
203400
203518
  }
203401
- static modesMessage(str) { return _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate(`ElementSet.SelectionModes.${str}`); }
203519
+ static modesMessage(str) { return _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate(`ElementSet.SelectionModes.${str}`); }
203402
203520
  static _modesName = "selectionModes";
203403
203521
  /* The property descriptions used to generate ToolSettings UI. */
203404
203522
  static _getModesDescription() {
@@ -203409,20 +203527,20 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203409
203527
  editor: {
203410
203528
  name: "enum-buttongroup",
203411
203529
  params: [{
203412
- type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_3__.PropertyEditorParamTypes.ButtonGroupData,
203530
+ type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_2__.PropertyEditorParamTypes.ButtonGroupData,
203413
203531
  buttons: [
203414
203532
  { iconSpec: "icon-replace" },
203415
203533
  { iconSpec: "icon-select-plus" },
203416
203534
  {
203417
203535
  iconSpec: "icon-select-minus",
203418
203536
  isEnabledFunction: () => {
203419
- const tool = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.activeTool;
203420
- return tool instanceof _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.PrimitiveTool ? tool.iModel.selectionSet.isActive : false;
203537
+ const tool = _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.activeTool;
203538
+ return tool instanceof _PrimitiveTool__WEBPACK_IMPORTED_MODULE_5__.PrimitiveTool ? tool.iModel.selectionSet.isActive : false;
203421
203539
  },
203422
203540
  },
203423
203541
  ],
203424
203542
  }, {
203425
- type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_3__.PropertyEditorParamTypes.SuppressEditorLabel,
203543
+ type: _itwin_appui_abstract__WEBPACK_IMPORTED_MODULE_2__.PropertyEditorParamTypes.SuppressEditorLabel,
203426
203544
  suppressLabelPlaceholder: true,
203427
203545
  },
203428
203546
  ],
@@ -203449,49 +203567,49 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203449
203567
  mainMsg += (0 === this._points.length ? "StartCorner" : "OppositeCorner");
203450
203568
  break;
203451
203569
  }
203452
- const mainInstruction = _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(this.iconSpec, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate(mainMsg));
203570
+ const mainInstruction = _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(this.iconSpec, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate(mainMsg));
203453
203571
  const sections = [];
203454
203572
  switch (method) {
203455
203573
  case SelectionMethod.Pick:
203456
203574
  const mousePickInstructions = [];
203457
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptElement"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203458
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.BoxCorners"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203459
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.RightClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.CrossingLine"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203460
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.shiftKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.OverlapSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203575
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptElement"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203576
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.BoxCorners"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203577
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.RightClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.CrossingLine"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203578
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.shiftKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClickDrag, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.OverlapSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203461
203579
  if (SelectionMode.Replace === mode) {
203462
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createKeyboardInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.ctrlKeyboardInfo, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203463
- mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.CursorClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.ClearSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203580
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createKeyboardInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.ctrlKeyboardInfo, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203581
+ mousePickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.CursorClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.ClearSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203464
203582
  }
203465
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(mousePickInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203583
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(mousePickInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203466
203584
  const touchPickInstructions = [];
203467
- if (!_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createTouchCursorInstructions(touchPickInstructions))
203468
- touchPickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.OneTouchTap, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptElement"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Touch));
203469
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(touchPickInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203585
+ if (!_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createTouchCursorInstructions(touchPickInstructions))
203586
+ touchPickInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.OneTouchTap, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptElement"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Touch));
203587
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(touchPickInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203470
203588
  break;
203471
203589
  case SelectionMethod.Line:
203472
203590
  const mouseLineInstructions = [];
203473
- mouseLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203591
+ mouseLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203474
203592
  if (SelectionMode.Replace === mode)
203475
- mouseLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.ctrlKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203476
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(mouseLineInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203593
+ mouseLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.ctrlKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203594
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(mouseLineInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203477
203595
  const touchLineInstructions = [];
203478
- touchLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.OneTouchDrag, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Touch));
203479
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(touchLineInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203596
+ touchLineInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.OneTouchDrag, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Touch));
203597
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(touchLineInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203480
203598
  break;
203481
203599
  case SelectionMethod.Box:
203482
203600
  const mouseBoxInstructions = [];
203483
- mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203484
- mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.shiftKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.OverlapSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203601
+ mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203602
+ mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.shiftKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.OverlapSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203485
203603
  if (SelectionMode.Replace === mode)
203486
- mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.ctrlKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Mouse));
203487
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(mouseBoxInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203604
+ mouseBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createModifierKeyInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.ctrlKey, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.LeftClick, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.InvertSelection"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Mouse));
203605
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(mouseBoxInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203488
203606
  const touchBoxInstructions = [];
203489
- touchBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceImage.OneTouchDrag, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistanceInputMethod.Touch));
203490
- sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createSection(touchBoxInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.inputsLabel));
203607
+ touchBoxInstructions.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstruction(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceImage.OneTouchDrag, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate("ElementSet.Inputs.AcceptPoint"), false, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistanceInputMethod.Touch));
203608
+ sections.push(_ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createSection(touchBoxInstructions, _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.inputsLabel));
203491
203609
  break;
203492
203610
  }
203493
- const instructions = _ToolAssistance__WEBPACK_IMPORTED_MODULE_11__.ToolAssistance.createInstructions(mainInstruction, sections);
203494
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.notifications.setToolAssistance(instructions);
203611
+ const instructions = _ToolAssistance__WEBPACK_IMPORTED_MODULE_8__.ToolAssistance.createInstructions(mainInstruction, sections);
203612
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.notifications.setToolAssistance(instructions);
203495
203613
  }
203496
203614
  initSelectTool() {
203497
203615
  const method = this.selectionMethod;
@@ -203499,8 +203617,8 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203499
203617
  const enableLocate = SelectionMethod.Pick === method;
203500
203618
  this._isSelectByPoints = false;
203501
203619
  this._points.length = 0;
203502
- this.initLocateElements(enableLocate, false, enableLocate ? "default" : _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.crossHairCursor, _Tool__WEBPACK_IMPORTED_MODULE_9__.CoordinateLockOverrides.All);
203503
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.options.allowDecorations = true; // Always locate to display tool tip even if we reject for adding to selection set...
203620
+ this.initLocateElements(enableLocate, false, enableLocate ? "default" : _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.viewManager.crossHairCursor, _Tool__WEBPACK_IMPORTED_MODULE_6__.CoordinateLockOverrides.All);
203621
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.locateManager.options.allowDecorations = true; // Always locate to display tool tip even if we reject for adding to selection set...
203504
203622
  this.showPrompt(mode, method);
203505
203623
  }
203506
203624
  processMiss(_ev) {
@@ -203545,13 +203663,13 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203545
203663
  selectByPointsDecorate(context) {
203546
203664
  if (!this._isSelectByPoints)
203547
203665
  return;
203548
- const ev = new _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButtonEvent();
203549
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
203666
+ const ev = new _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButtonEvent();
203667
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.fillEventFromCursorLocation(ev);
203550
203668
  if (undefined === ev.viewport)
203551
203669
  return;
203552
203670
  const vp = context.viewport;
203553
- const bestContrastIsBlack = (_itwin_core_common__WEBPACK_IMPORTED_MODULE_2__.ColorDef.black === vp.getContrastToBackgroundColor());
203554
- const crossingLine = (SelectionMethod.Line === this.selectionMethod || (SelectionMethod.Pick === this.selectionMethod && _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButton.Reset === ev.button));
203671
+ const bestContrastIsBlack = (_itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.ColorDef.black === vp.getContrastToBackgroundColor());
203672
+ const crossingLine = (SelectionMethod.Line === this.selectionMethod || (SelectionMethod.Pick === this.selectionMethod && _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButton.Reset === ev.button));
203555
203673
  const overlapSelection = (crossingLine || this.useOverlapSelection(ev));
203556
203674
  const position = vp.worldToView(this._points[0]);
203557
203675
  position.x = Math.floor(position.x) + 0.5;
@@ -203579,111 +203697,42 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203579
203697
  };
203580
203698
  context.addCanvasDecoration({ position, drawDecoration });
203581
203699
  }
203582
- selectByPointsProcess(origin, corner, ev, method, overlap) {
203700
+ async selectByPointsProcess(origin, corner, ev, method, overlap) {
203583
203701
  const vp = ev.viewport;
203584
203702
  if (!vp)
203585
- return;
203586
- const pts = [];
203587
- pts[0] = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d(Math.floor(origin.x + 0.5), Math.floor(origin.y + 0.5));
203588
- pts[1] = new _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d(Math.floor(corner.x + 0.5), Math.floor(corner.y + 0.5));
203589
- const range = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Range2d.createArray(pts);
203590
- const rect = new _common_ViewRect__WEBPACK_IMPORTED_MODULE_7__.ViewRect();
203591
- rect.initFromRange(range);
203592
- const allowTransients = this.wantPickableDecorations();
203593
- vp.readPixels(rect, _render_Pixel__WEBPACK_IMPORTED_MODULE_6__.Pixel.Selector.Feature, (pixels) => {
203594
- if (undefined === pixels)
203595
- return;
203596
- const sRange = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Range2d.createNull();
203597
- sRange.extendPoint(_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d.create(vp.cssPixelsToDevicePixels(range.low.x), vp.cssPixelsToDevicePixels(range.low.y)));
203598
- sRange.extendPoint(_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d.create(vp.cssPixelsToDevicePixels(range.high.x), vp.cssPixelsToDevicePixels(range.high.y)));
203599
- pts[0].x = vp.cssPixelsToDevicePixels(pts[0].x);
203600
- pts[0].y = vp.cssPixelsToDevicePixels(pts[0].y);
203601
- pts[1].x = vp.cssPixelsToDevicePixels(pts[1].x);
203602
- pts[1].y = vp.cssPixelsToDevicePixels(pts[1].y);
203603
- let contents = new Set();
203604
- const testPoint = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d.createZero();
203605
- const getPixelElementId = (pixel) => {
203606
- if (undefined === pixel.elementId || _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isInvalid(pixel.elementId))
203607
- return undefined; // no geometry at this location...
203608
- if (!allowTransients && _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isTransient(pixel.elementId))
203609
- return undefined; // tool didn't request pickable decorations...
203610
- if (!vp.isPixelSelectable(pixel))
203611
- return undefined; // reality model, terrain, etc - not selectable
203612
- return pixel.elementId;
203613
- };
203614
- if (SelectionMethod.Box === method) {
203615
- const outline = overlap ? undefined : new Set();
203616
- const offset = sRange.clone();
203617
- offset.expandInPlace(-2);
203618
- for (testPoint.x = sRange.low.x; testPoint.x <= sRange.high.x; ++testPoint.x) {
203619
- for (testPoint.y = sRange.low.y; testPoint.y <= sRange.high.y; ++testPoint.y) {
203620
- const pixel = pixels.getPixel(testPoint.x, testPoint.y);
203621
- const elementId = getPixelElementId(pixel);
203622
- if (undefined === elementId)
203623
- continue;
203624
- if (undefined !== outline && !offset.containsPoint(testPoint))
203625
- outline.add(elementId.toString());
203626
- else
203627
- contents.add(elementId.toString());
203628
- }
203629
- }
203630
- if (undefined !== outline && 0 !== outline.size) {
203631
- const inside = new Set();
203632
- contents.forEach((id) => {
203633
- if (!outline.has(id))
203634
- inside.add(id);
203635
- });
203636
- contents = inside;
203637
- }
203638
- }
203639
- else {
203640
- const closePoint = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Point2d.createZero();
203641
- for (testPoint.x = sRange.low.x; testPoint.x <= sRange.high.x; ++testPoint.x) {
203642
- for (testPoint.y = sRange.low.y; testPoint.y <= sRange.high.y; ++testPoint.y) {
203643
- const pixel = pixels.getPixel(testPoint.x, testPoint.y);
203644
- const elementId = getPixelElementId(pixel);
203645
- if (undefined === elementId)
203646
- continue;
203647
- const fraction = testPoint.fractionOfProjectionToLine(pts[0], pts[1], 0.0);
203648
- pts[0].interpolate(fraction, pts[1], closePoint);
203649
- if (closePoint.distance(testPoint) < 1.5)
203650
- contents.add(elementId.toString());
203651
- }
203652
- }
203653
- }
203654
- if (0 === contents.size) {
203655
- if (!ev.isControlKey && this.wantSelectionClearOnMiss(ev) && this.processMiss(ev))
203656
- this.syncSelectionMode();
203657
- return;
203658
- }
203659
- switch (this.selectionMode) {
203660
- case SelectionMode.Replace:
203661
- if (!ev.isControlKey)
203662
- this.processSelection(contents, SelectionProcessing.ReplaceSelectionWithElement); // eslint-disable-line @typescript-eslint/no-floating-promises
203663
- else
203664
- this.processSelection(contents, SelectionProcessing.InvertElementInSelection); // eslint-disable-line @typescript-eslint/no-floating-promises
203665
- break;
203666
- case SelectionMode.Add:
203667
- this.processSelection(contents, SelectionProcessing.AddElementToSelection); // eslint-disable-line @typescript-eslint/no-floating-promises
203668
- break;
203669
- case SelectionMode.Remove:
203670
- this.processSelection(contents, SelectionProcessing.RemoveElementFromSelection); // eslint-disable-line @typescript-eslint/no-floating-promises
203671
- break;
203703
+ return false;
203704
+ const filter = (id) => { return !_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Id64.isTransient(id); };
203705
+ const contents = await _ElementSetTool__WEBPACK_IMPORTED_MODULE_9__.ElementSetTool.getAreaOrVolumeSelectionCandidates(vp, origin, corner, method, overlap, this.wantPickableDecorations() ? undefined : filter, this.wantPickableDecorations());
203706
+ if (0 === contents.size) {
203707
+ if (!ev.isControlKey && this.wantSelectionClearOnMiss(ev) && this.processMiss(ev)) {
203708
+ this.syncSelectionMode();
203709
+ return true;
203672
203710
  }
203673
- }, true);
203711
+ return false;
203712
+ }
203713
+ switch (this.selectionMode) {
203714
+ case SelectionMode.Replace:
203715
+ if (!ev.isControlKey)
203716
+ return this.processSelection(contents, SelectionProcessing.ReplaceSelectionWithElement);
203717
+ return this.processSelection(contents, SelectionProcessing.InvertElementInSelection);
203718
+ case SelectionMode.Add:
203719
+ return this.processSelection(contents, SelectionProcessing.AddElementToSelection);
203720
+ case SelectionMode.Remove:
203721
+ return this.processSelection(contents, SelectionProcessing.RemoveElementFromSelection);
203722
+ }
203674
203723
  }
203675
203724
  selectByPointsStart(ev) {
203676
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.BeButton.Data !== ev.button && _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButton.Reset !== ev.button)
203725
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.BeButton.Data !== ev.button && _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButton.Reset !== ev.button)
203677
203726
  return false;
203678
203727
  this._points.length = 0;
203679
203728
  this._points.push(ev.point.clone());
203680
203729
  this._isSelectByPoints = true;
203681
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap.enableLocate(false);
203682
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.setLocateCircleOn(false);
203730
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuSnap.enableLocate(false);
203731
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.setLocateCircleOn(false);
203683
203732
  this.showPrompt(this.selectionMode, this.selectionMethod);
203684
203733
  return true;
203685
203734
  }
203686
- selectByPointsEnd(ev) {
203735
+ async selectByPointsEnd(ev) {
203687
203736
  if (!this._isSelectByPoints)
203688
203737
  return false;
203689
203738
  const vp = ev.viewport;
@@ -203693,10 +203742,10 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203693
203742
  }
203694
203743
  const origin = vp.worldToView(this._points[0]);
203695
203744
  const corner = vp.worldToView(ev.point);
203696
- if (SelectionMethod.Line === this.selectionMethod || (SelectionMethod.Pick === this.selectionMethod && _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButton.Reset === ev.button))
203697
- this.selectByPointsProcess(origin, corner, ev, SelectionMethod.Line, true);
203745
+ if (SelectionMethod.Line === this.selectionMethod || (SelectionMethod.Pick === this.selectionMethod && _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButton.Reset === ev.button))
203746
+ await this.selectByPointsProcess(origin, corner, ev, SelectionMethod.Line, true);
203698
203747
  else
203699
- this.selectByPointsProcess(origin, corner, ev, SelectionMethod.Box, this.useOverlapSelection(ev));
203748
+ await this.selectByPointsProcess(origin, corner, ev, SelectionMethod.Box, this.useOverlapSelection(ev));
203700
203749
  this.initSelectTool();
203701
203750
  vp.invalidateDecorations();
203702
203751
  return true;
@@ -203707,14 +203756,14 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203707
203756
  }
203708
203757
  async selectDecoration(ev, currHit) {
203709
203758
  if (undefined === currHit)
203710
- currHit = await _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.doLocate(new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
203759
+ currHit = await _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.locateManager.doLocate(new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
203711
203760
  if (undefined !== currHit)
203712
- return (currHit.isElementHit ? _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.overrideElementButtonEvent(currHit, ev) : _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.viewManager.onDecorationButtonEvent(currHit, ev));
203713
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203761
+ return (currHit.isElementHit ? _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.viewManager.overrideElementButtonEvent(currHit, ev) : _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.viewManager.onDecorationButtonEvent(currHit, ev));
203762
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203714
203763
  }
203715
203764
  async processHit(ev, hit) {
203716
203765
  if (hit.isModelHit || hit.isMapHit)
203717
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No; // model hit = terrain, reality models, background maps, etc - not selectable
203766
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No; // model hit = terrain, reality models, background maps, etc - not selectable
203718
203767
  switch (this.selectionMode) {
203719
203768
  case SelectionMode.Replace:
203720
203769
  await this.processSelection(hit.sourceId, ev.isControlKey ? SelectionProcessing.InvertElementInSelection : SelectionProcessing.ReplaceSelectionWithElement);
@@ -203726,59 +203775,59 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203726
203775
  await this.processSelection(hit.sourceId, SelectionProcessing.RemoveElementFromSelection);
203727
203776
  break;
203728
203777
  }
203729
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203778
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203730
203779
  }
203731
203780
  async onMouseStartDrag(ev) {
203732
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap.clear(); // Need to test hit at start drag location, not current AccuSnap...
203733
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes === await this.selectDecoration(ev))
203734
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203735
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.InputSource.Touch === ev.inputSource && SelectionMethod.Pick === this.selectionMethod)
203736
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No; // Require method change for line/box selection...allow IdleTool to handle touch move...
203737
- return this.selectByPointsStart(ev) ? _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203781
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuSnap.clear(); // Need to test hit at start drag location, not current AccuSnap...
203782
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes === await this.selectDecoration(ev))
203783
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203784
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.InputSource.Touch === ev.inputSource && SelectionMethod.Pick === this.selectionMethod)
203785
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No; // Require method change for line/box selection...allow IdleTool to handle touch move...
203786
+ return this.selectByPointsStart(ev) ? _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203738
203787
  }
203739
203788
  async onMouseEndDrag(ev) {
203740
- return this.selectByPointsEnd(ev) ? _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203789
+ return await this.selectByPointsEnd(ev) ? _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203741
203790
  }
203742
203791
  async onDataButtonUp(ev) {
203743
203792
  if (undefined === ev.viewport)
203744
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203745
- if (this.selectByPointsEnd(ev))
203746
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203793
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203794
+ if (await this.selectByPointsEnd(ev))
203795
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203747
203796
  if (SelectionMethod.Pick !== this.selectionMethod) {
203748
203797
  if (!ev.isControlKey && this.wantSelectionClearOnMiss(ev) && this.processMiss(ev))
203749
203798
  this.syncSelectionMode();
203750
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.InputSource.Touch !== ev.inputSource)
203799
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.InputSource.Touch !== ev.inputSource)
203751
203800
  this.selectByPointsStart(ev); // Require touch move and not tap to start crossing line/box selection...
203752
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203801
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203753
203802
  }
203754
- const hit = await _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.doLocate(new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
203803
+ const hit = await _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.locateManager.doLocate(new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
203755
203804
  if (hit !== undefined) {
203756
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes === await this.selectDecoration(ev, hit))
203757
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203758
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes === await this.processHit(ev, hit))
203759
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203805
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes === await this.selectDecoration(ev, hit))
203806
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203807
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes === await this.processHit(ev, hit))
203808
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203760
203809
  }
203761
203810
  if (!ev.isControlKey && this.wantSelectionClearOnMiss(ev) && this.processMiss(ev))
203762
203811
  this.syncSelectionMode();
203763
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203812
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203764
203813
  }
203765
203814
  async onResetButtonUp(ev) {
203766
203815
  if (this._isSelectByPoints) {
203767
203816
  if (undefined !== ev.viewport)
203768
203817
  ev.viewport.invalidateDecorations();
203769
203818
  this.initSelectTool();
203770
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203819
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203771
203820
  }
203772
203821
  // Check for overlapping hits...
203773
- const lastHit = SelectionMode.Remove === this.selectionMode ? undefined : _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.currHit;
203822
+ const lastHit = SelectionMode.Remove === this.selectionMode ? undefined : _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.locateManager.currHit;
203774
203823
  if (lastHit && this.iModel.selectionSet.elements.has(lastHit.sourceId)) {
203775
- const autoHit = _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap.currHit;
203824
+ const autoHit = _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuSnap.currHit;
203776
203825
  // Play nice w/auto-locate, only remove previous hit if not currently auto-locating or over previous hit
203777
203826
  if (undefined === autoHit || autoHit.isSameHit(lastHit)) {
203778
- const response = new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateResponse();
203827
+ const response = new _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateResponse();
203779
203828
  let nextHit;
203780
203829
  do {
203781
- nextHit = await _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.locateManager.doLocate(response, false, ev.point, ev.viewport, ev.inputSource);
203830
+ nextHit = await _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.locateManager.doLocate(response, false, ev.point, ev.viewport, ev.inputSource);
203782
203831
  } while (undefined !== nextHit && (nextHit.isModelHit || nextHit.isMapHit)); // Ignore reality models, terrain, maps, etc.
203783
203832
  // remove element(s) previously selected if in replace mode, or if we have a next element in add mode
203784
203833
  if (SelectionMode.Replace === this.selectionMode || undefined !== nextHit)
@@ -203786,69 +203835,69 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203786
203835
  // add element(s) located via reset button
203787
203836
  if (undefined !== nextHit)
203788
203837
  await this.processSelection(nextHit.sourceId, SelectionProcessing.AddElementToSelection);
203789
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203838
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203790
203839
  }
203791
203840
  }
203792
- if (_Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes === await this.selectDecoration(ev, _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap.currHit))
203793
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203794
- await _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.accuSnap.resetButton();
203795
- return _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes;
203841
+ if (_Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes === await this.selectDecoration(ev, _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuSnap.currHit))
203842
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203843
+ await _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.accuSnap.resetButton();
203844
+ return _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes;
203796
203845
  }
203797
203846
  async onSuspend() {
203798
203847
  this._isSuspended = true;
203799
203848
  if (this.wantEditManipulators())
203800
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Suspend);
203849
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Suspend);
203801
203850
  }
203802
203851
  async onUnsuspend() {
203803
203852
  this._isSuspended = false;
203804
203853
  if (this.wantEditManipulators())
203805
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Unsuspend);
203854
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Unsuspend);
203806
203855
  this.showPrompt(this.selectionMode, this.selectionMethod);
203807
203856
  }
203808
203857
  async onTouchMoveStart(ev, startEv) {
203809
203858
  if (startEv.isSingleTouch && !this._isSelectByPoints)
203810
- await _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev);
203811
- return (this._isSuspended || this._isSelectByPoints) ? _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203859
+ await _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.convertTouchMoveStartToButtonDownAndMotion(startEv, ev);
203860
+ return (this._isSuspended || this._isSelectByPoints) ? _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203812
203861
  }
203813
203862
  async onTouchMove(ev) {
203814
203863
  if (this._isSelectByPoints)
203815
- return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.convertTouchMoveToMotion(ev);
203864
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.convertTouchMoveToMotion(ev);
203816
203865
  }
203817
203866
  async onTouchComplete(ev) {
203818
203867
  if (this._isSelectByPoints)
203819
- return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev);
203868
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev);
203820
203869
  }
203821
203870
  async onTouchCancel(ev) {
203822
203871
  if (this._isSelectByPoints)
203823
- return _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, _Tool__WEBPACK_IMPORTED_MODULE_9__.BeButton.Reset);
203872
+ return _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.convertTouchEndToButtonUp(ev, _Tool__WEBPACK_IMPORTED_MODULE_6__.BeButton.Reset);
203824
203873
  }
203825
203874
  decorate(context) { this.selectByPointsDecorate(context); }
203826
203875
  async onModifierKeyTransition(_wentDown, modifier, _event) {
203827
- return (modifier === _Tool__WEBPACK_IMPORTED_MODULE_9__.BeModifierKeys.Shift && this._isSelectByPoints) ? _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_9__.EventHandled.No;
203876
+ return (modifier === _Tool__WEBPACK_IMPORTED_MODULE_6__.BeModifierKeys.Shift && this._isSelectByPoints) ? _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.Yes : _Tool__WEBPACK_IMPORTED_MODULE_6__.EventHandled.No;
203828
203877
  }
203829
203878
  async filterHit(hit, out) {
203830
203879
  if (!this.wantPickableDecorations() && !hit.isElementHit)
203831
- return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateFilterStatus.Reject;
203880
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateFilterStatus.Reject;
203832
203881
  const mode = this.selectionMode;
203833
203882
  if (SelectionMode.Replace === mode)
203834
- return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateFilterStatus.Accept;
203883
+ return _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateFilterStatus.Accept;
203835
203884
  const isSelected = this.iModel.selectionSet.elements.has(hit.sourceId);
203836
- const status = ((SelectionMode.Add === mode ? !isSelected : isSelected) ? _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateFilterStatus.Accept : _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateFilterStatus.Reject);
203837
- if (out && _ElementLocateManager__WEBPACK_IMPORTED_MODULE_4__.LocateFilterStatus.Reject === status)
203838
- out.explanation = _Tool__WEBPACK_IMPORTED_MODULE_9__.CoreTools.translate(`ElementSet.Error.${isSelected ? "AlreadySelected" : "NotSelected"}`);
203885
+ const status = ((SelectionMode.Add === mode ? !isSelected : isSelected) ? _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateFilterStatus.Accept : _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateFilterStatus.Reject);
203886
+ if (out && _ElementLocateManager__WEBPACK_IMPORTED_MODULE_3__.LocateFilterStatus.Reject === status)
203887
+ out.explanation = _Tool__WEBPACK_IMPORTED_MODULE_6__.CoreTools.translate(`ElementSet.Error.${isSelected ? "AlreadySelected" : "NotSelected"}`);
203839
203888
  return status;
203840
203889
  }
203841
203890
  async onRestartTool() { return this.exitTool(); }
203842
203891
  async onCleanup() {
203843
203892
  if (this.wantEditManipulators())
203844
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Stop);
203893
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Stop);
203845
203894
  }
203846
203895
  async onPostInstall() {
203847
203896
  await super.onPostInstall();
203848
203897
  if (!this.targetView)
203849
203898
  return;
203850
203899
  if (this.wantEditManipulators())
203851
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Start);
203900
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Start);
203852
203901
  this.initSelectTool();
203853
203902
  }
203854
203903
  static async startTool() { return new SelectionTool().run(); }
@@ -203860,7 +203909,7 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203860
203909
  }
203861
203910
  if (this.wantToolSettings()) {
203862
203911
  const syncMode = { value: this._selectionModeValue, propertyName: SelectionTool._modesName };
203863
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, syncMode);
203912
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, syncMode);
203864
203913
  this.syncToolSettingsProperties([syncMode]);
203865
203914
  }
203866
203915
  }
@@ -203871,14 +203920,14 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203871
203920
  if (!this.wantToolSettings())
203872
203921
  return undefined;
203873
203922
  // load latest values from session
203874
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValues(this.toolId, [SelectionTool._modesName])?.forEach((value) => {
203923
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValues(this.toolId, [SelectionTool._modesName])?.forEach((value) => {
203875
203924
  if (value.propertyName === SelectionTool._modesName)
203876
203925
  this._selectionModeValue = value.value;
203877
203926
  });
203878
203927
  // Make sure a mode of SelectionMode.Remove is valid
203879
203928
  if (SelectionMode.Remove === this.selectionMode && !this.iModel.selectionSet.isActive) {
203880
203929
  this.selectionMode = SelectionMode.Replace;
203881
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: SelectionTool._modesName, value: this._selectionModeValue });
203930
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: SelectionTool._modesName, value: this._selectionModeValue });
203882
203931
  }
203883
203932
  const toolSettings = new Array();
203884
203933
  // generate 3 columns - label will be placed in column 0 and button group editors in columns 1 and 2.
@@ -203897,7 +203946,7 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203897
203946
  if (this._selectionMethodValue) {
203898
203947
  const currWantManipulators = this.wantEditManipulators();
203899
203948
  if (saveWantManipulators !== currWantManipulators)
203900
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, currWantManipulators ? _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Start : _ToolAdmin__WEBPACK_IMPORTED_MODULE_10__.ManipulatorToolEvent.Stop);
203949
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.manipulatorToolEvent.raiseEvent(this, currWantManipulators ? _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Start : _ToolAdmin__WEBPACK_IMPORTED_MODULE_7__.ManipulatorToolEvent.Stop);
203901
203950
  changed = true;
203902
203951
  }
203903
203952
  }
@@ -203905,7 +203954,7 @@ class SelectionTool extends _PrimitiveTool__WEBPACK_IMPORTED_MODULE_8__.Primitiv
203905
203954
  this._selectionModeValue = updatedValue.value;
203906
203955
  if (this._selectionModeValue) {
203907
203956
  if (this.wantToolSettings())
203908
- _IModelApp__WEBPACK_IMPORTED_MODULE_5__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: SelectionTool._modesName, value: this._selectionModeValue });
203957
+ _IModelApp__WEBPACK_IMPORTED_MODULE_4__.IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: SelectionTool._modesName, value: this._selectionModeValue });
203909
203958
  changed = true;
203910
203959
  }
203911
203960
  }
@@ -207048,6 +207097,11 @@ class ToolSettings {
207048
207097
  };
207049
207098
  /** Maximum number of times in a second the accuSnap tool's onMotion function is called. */
207050
207099
  static maxOnMotionSnapCallPerSecond = 15;
207100
+ /** If true, drag box selection will accept spatial elements that are inside or overlap a clip volume instead of only what is visible in the view.
207101
+ * @note Enabling is not recommended for web applications.
207102
+ * @beta
207103
+ */
207104
+ static enableVolumeSelection = false;
207051
207105
  }
207052
207106
 
207053
207107
 
@@ -212963,7 +213017,13 @@ class BSplineCurve3dBase extends _curve_CurvePrimitive__WEBPACK_IMPORTED_MODULE_
212963
213017
  * @param fractionB end fraction.
212964
213018
  */
212965
213019
  clonePartialCurve(fractionA, fractionB) {
212966
- const clone = this.clone();
213020
+ let clone;
213021
+ if (fractionA > fractionB) {
213022
+ clone = this.clonePartialCurve(fractionB, fractionA);
213023
+ clone.reverseInPlace();
213024
+ return clone;
213025
+ }
213026
+ clone = this.clone();
212967
213027
  const origNumKnots = clone._bcurve.knots.knots.length;
212968
213028
  let knotA = clone._bcurve.knots.fractionToKnot(fractionA);
212969
213029
  let knotB = clone._bcurve.knots.fractionToKnot(fractionB);
@@ -220690,11 +220750,13 @@ class ClipUtilities {
220690
220750
  clippedLocalRegion.tryTransformInPlace(localToWorld);
220691
220751
  if (!result)
220692
220752
  result = (clippedLocalRegion instanceof _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_8__.UnionRegion) ? clippedLocalRegion : _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_8__.UnionRegion.create(clippedLocalRegion);
220693
- else if (!result.tryAddChild(clippedLocalRegion))
220694
- result.children.push(...clippedLocalRegion.children);
220753
+ if (clippedLocalRegion instanceof _curve_UnionRegion__WEBPACK_IMPORTED_MODULE_8__.UnionRegion)
220754
+ result.children.push(...clippedLocalRegion.children); // avoid nested UnionRegions
220755
+ else
220756
+ result.tryAddChild(clippedLocalRegion);
220695
220757
  }
220696
220758
  }
220697
- return result;
220759
+ return result ? _curve_RegionOps__WEBPACK_IMPORTED_MODULE_7__.RegionOps.simplifyRegionType(result) : undefined;
220698
220760
  }
220699
220761
  /**
220700
220762
  * Compute and return portions of the input curve or region that are within the clipper.
@@ -225243,7 +225305,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
225243
225305
  scaleAboutCenterInPlace(scaleFactor) {
225244
225306
  this._matrix.scaleColumnsInPlace(scaleFactor, scaleFactor, 1.0);
225245
225307
  }
225246
- /** Return the (signed!) area between (a fractional portion of) the arc and the chord between those points. */
225308
+ /** Return the (signed) area between (a fractional portion of) the arc and the chord between those points. */
225247
225309
  areaToChordXY(fraction0, fraction1) {
225248
225310
  let detJ = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.crossProductXYXY(this._matrix.coffs[0], this._matrix.coffs[3], this._matrix.coffs[1], this._matrix.coffs[4]);
225249
225311
  // areas in arc of unit circle with radians limits
@@ -226406,19 +226468,21 @@ __webpack_require__.r(__webpack_exports__);
226406
226468
  /* harmony export */ CurveChain: () => (/* binding */ CurveChain),
226407
226469
  /* harmony export */ CurveCollection: () => (/* binding */ CurveCollection)
226408
226470
  /* harmony export */ });
226409
- /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
226471
+ /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
226410
226472
  /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
226411
- /* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
226473
+ /* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
226412
226474
  /* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
226413
- /* harmony import */ var _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./internalContexts/CloneCurvesContext */ "../../core/geometry/lib/esm/curve/internalContexts/CloneCurvesContext.js");
226414
- /* harmony import */ var _internalContexts_CloneWithExpandedLineStrings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./internalContexts/CloneWithExpandedLineStrings */ "../../core/geometry/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js");
226415
- /* harmony import */ var _internalContexts_CountLinearPartsSearchContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internalContexts/CountLinearPartsSearchContext */ "../../core/geometry/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js");
226416
- /* harmony import */ var _internalContexts_GapSearchContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internalContexts/GapSearchContext */ "../../core/geometry/lib/esm/curve/internalContexts/GapSearchContext.js");
226417
- /* harmony import */ var _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./internalContexts/PlaneAltitudeRangeContext */ "../../core/geometry/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js");
226475
+ /* harmony import */ var _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./internalContexts/CloneCurvesContext */ "../../core/geometry/lib/esm/curve/internalContexts/CloneCurvesContext.js");
226476
+ /* harmony import */ var _internalContexts_CloneWithExpandedLineStrings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internalContexts/CloneWithExpandedLineStrings */ "../../core/geometry/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js");
226477
+ /* harmony import */ var _internalContexts_CountLinearPartsSearchContext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internalContexts/CountLinearPartsSearchContext */ "../../core/geometry/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js");
226478
+ /* harmony import */ var _internalContexts_GapSearchContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./internalContexts/GapSearchContext */ "../../core/geometry/lib/esm/curve/internalContexts/GapSearchContext.js");
226479
+ /* harmony import */ var _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./internalContexts/PlaneAltitudeRangeContext */ "../../core/geometry/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js");
226418
226480
  /* harmony import */ var _internalContexts_SumLengthsContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internalContexts/SumLengthsContext */ "../../core/geometry/lib/esm/curve/internalContexts/SumLengthsContext.js");
226419
- /* harmony import */ var _internalContexts_TransformInPlaceContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internalContexts/TransformInPlaceContext */ "../../core/geometry/lib/esm/curve/internalContexts/TransformInPlaceContext.js");
226420
- /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
226421
- /* harmony import */ var _ProxyCurve__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ProxyCurve */ "../../core/geometry/lib/esm/curve/ProxyCurve.js");
226481
+ /* harmony import */ var _internalContexts_TransformInPlaceContext__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./internalContexts/TransformInPlaceContext */ "../../core/geometry/lib/esm/curve/internalContexts/TransformInPlaceContext.js");
226482
+ /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
226483
+ /* harmony import */ var _ProxyCurve__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ProxyCurve */ "../../core/geometry/lib/esm/curve/ProxyCurve.js");
226484
+ /* harmony import */ var _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internalContexts/AnnounceTangentStrokeHandler */ "../../core/geometry/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js");
226485
+ /* harmony import */ var _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../geometry3d/Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
226422
226486
  /*---------------------------------------------------------------------------------------------
226423
226487
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
226424
226488
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -226439,6 +226503,8 @@ __webpack_require__.r(__webpack_exports__);
226439
226503
 
226440
226504
 
226441
226505
 
226506
+
226507
+
226442
226508
  /**
226443
226509
  * A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:
226444
226510
  * - [[CurveChain]] - a non-instantiable intermediate class for a sequence of [[CurvePrimitive]] joining head-to-tail.
@@ -226479,6 +226545,69 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
226479
226545
  }
226480
226546
  return detailA;
226481
226547
  }
226548
+ /**
226549
+ * Announce all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to
226550
+ * the contained curves in the view defined by `options.vectorToEye`.
226551
+ * * Strictly speaking, each tangent line lies in the plane through `P` whose normal is the cross product of the curve
226552
+ * tangent at `P` and `options.vectorToEye`. This is equivalent to tangency as seen in a view plane perpendicular to
226553
+ * `options.vectorToEye`.
226554
+ * @param spacePoint point in space.
226555
+ * @param announceTangent callback to announce each computed tangent. The received [[CurveLocationDetail]] is reused
226556
+ * internally, so it should be cloned in the callback if it needs to be saved.
226557
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
226558
+ */
226559
+ emitTangents(spacePoint, announceTangent, options) {
226560
+ const strokeHandler = new _internalContexts_AnnounceTangentStrokeHandler__WEBPACK_IMPORTED_MODULE_3__.AnnounceTangentStrokeHandler(spacePoint, announceTangent, options);
226561
+ if (this.children !== undefined) {
226562
+ for (const child of this.children) {
226563
+ if (child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__.CurvePrimitive)
226564
+ child.emitStrokableParts(strokeHandler, options?.strokeOptions);
226565
+ else if (child instanceof CurveCollection)
226566
+ child.emitTangents(spacePoint, announceTangent, options);
226567
+ }
226568
+ }
226569
+ }
226570
+ /**
226571
+ * Return all points `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the
226572
+ * contained curves in the view defined by `options.vectorToEye`.
226573
+ * * See [[emitTangents]] for the definition of tangency employed.
226574
+ * @param spacePoint point in space.
226575
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
226576
+ * @returns an array of details of all tangent points or undefined if no tangent was found.
226577
+ */
226578
+ allTangents(spacePoint, options) {
226579
+ const tangents = [];
226580
+ this.emitTangents(spacePoint, (t) => tangents.push(t.clone()), options);
226581
+ return (tangents.length === 0) ? undefined : tangents;
226582
+ }
226583
+ /**
226584
+ * Return the point `P` on the contained curves such that the line containing `spacePoint` and `P` is tangent to the
226585
+ * contained curves in the view defined by `options.vectorToEye`, and `P` is closest to `options.hintPoint` in this view.
226586
+ * * See [[emitTangents]] for the definition of tangency employed.
226587
+ * @param spacePoint point in space.
226588
+ * @param options (optional) options for computing tangents. See [[TangentOptions]] for defaults.
226589
+ * @returns the detail of the closest tangent point or undefined if no tangent was found.
226590
+ */
226591
+ closestTangent(spacePoint, options) {
226592
+ const hint = options?.hintPoint ?? spacePoint;
226593
+ let toLocal;
226594
+ if (options?.vectorToEye && !options.vectorToEye.isExactEqual({ x: 0, y: 0, z: 1 }))
226595
+ toLocal = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_5__.Matrix3d.createRigidViewAxesZTowardsEye(options.vectorToEye.x, options.vectorToEye.y, options.vectorToEye.z);
226596
+ const measureHintDist2 = (pt) => {
226597
+ return toLocal?.multiplyTransposeXYZ(hint.x - pt.x, hint.y - pt.y, hint.z - pt.z).magnitudeSquaredXY() ?? pt.distanceSquaredXY(hint);
226598
+ };
226599
+ let closestTangent;
226600
+ let closestDist2 = _Geometry__WEBPACK_IMPORTED_MODULE_6__.Geometry.largeCoordinateResult;
226601
+ const collectClosestTangent = (tangent) => {
226602
+ const dist2 = measureHintDist2(tangent.point);
226603
+ if (!closestTangent || dist2 < closestDist2) {
226604
+ closestTangent = tangent.clone(closestTangent);
226605
+ closestDist2 = dist2;
226606
+ }
226607
+ };
226608
+ this.emitTangents(spacePoint, collectClosestTangent, options);
226609
+ return closestTangent;
226610
+ }
226482
226611
  /** Reverse the collection's data so that each child curve's fractional stroking moves in the opposite direction. */
226483
226612
  reverseInPlace() {
226484
226613
  for (const curve of this.children)
@@ -226492,27 +226621,27 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
226492
226621
  * "unstructured" so gaps should not be semantically meaningful.
226493
226622
  */
226494
226623
  maxGap() {
226495
- return _internalContexts_GapSearchContext__WEBPACK_IMPORTED_MODULE_3__.GapSearchContext.maxGap(this);
226624
+ return _internalContexts_GapSearchContext__WEBPACK_IMPORTED_MODULE_7__.GapSearchContext.maxGap(this);
226496
226625
  }
226497
226626
  /** Return true if the curve collection has any primitives other than LineSegment3d and LineString3d */
226498
226627
  checkForNonLinearPrimitives() {
226499
- return _internalContexts_CountLinearPartsSearchContext__WEBPACK_IMPORTED_MODULE_4__.CountLinearPartsSearchContext.hasNonLinearPrimitives(this);
226628
+ return _internalContexts_CountLinearPartsSearchContext__WEBPACK_IMPORTED_MODULE_8__.CountLinearPartsSearchContext.hasNonLinearPrimitives(this);
226500
226629
  }
226501
226630
  /** Apply transform recursively to children */
226502
226631
  tryTransformInPlace(transform) {
226503
- return _internalContexts_TransformInPlaceContext__WEBPACK_IMPORTED_MODULE_5__.TransformInPlaceContext.tryTransformInPlace(this, transform);
226632
+ return _internalContexts_TransformInPlaceContext__WEBPACK_IMPORTED_MODULE_9__.TransformInPlaceContext.tryTransformInPlace(this, transform);
226504
226633
  }
226505
226634
  /** Return a deep copy. */
226506
226635
  clone() {
226507
- return _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_6__.CloneCurvesContext.clone(this);
226636
+ return _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_10__.CloneCurvesContext.clone(this);
226508
226637
  }
226509
226638
  /** Create a deep copy of transformed curves. */
226510
226639
  cloneTransformed(transform) {
226511
- return _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_6__.CloneCurvesContext.clone(this, transform);
226640
+ return _internalContexts_CloneCurvesContext__WEBPACK_IMPORTED_MODULE_10__.CloneCurvesContext.clone(this, transform);
226512
226641
  }
226513
226642
  /** Create a deep copy with all linestrings broken down into multiple LineSegment3d. */
226514
226643
  cloneWithExpandedLineStrings() {
226515
- return _internalContexts_CloneWithExpandedLineStrings__WEBPACK_IMPORTED_MODULE_7__.CloneWithExpandedLineStrings.clone(this);
226644
+ return _internalContexts_CloneWithExpandedLineStrings__WEBPACK_IMPORTED_MODULE_11__.CloneWithExpandedLineStrings.clone(this);
226516
226645
  }
226517
226646
  /**
226518
226647
  * Push all CurvePrimitives contained in the instance onto the `results` array.
@@ -226522,7 +226651,7 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
226522
226651
  collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings = false) {
226523
226652
  if (this.children) {
226524
226653
  for (const child of this.children) {
226525
- if (child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_8__.CurvePrimitive)
226654
+ if (child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__.CurvePrimitive)
226526
226655
  child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);
226527
226656
  else if (child instanceof CurveCollection)
226528
226657
  child.collectCurvePrimitivesGo(results, smallestPossiblePrimitives, explodeLinestrings);
@@ -226602,7 +226731,7 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
226602
226731
  static createCurveLocationDetailOnAnyCurvePrimitive(source, fraction = 0.5) {
226603
226732
  if (!source)
226604
226733
  return undefined;
226605
- if (source instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_8__.CurvePrimitive) {
226734
+ if (source instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__.CurvePrimitive) {
226606
226735
  return _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetail.createCurveEvaluatedFraction(source, fraction);
226607
226736
  }
226608
226737
  else if (source instanceof CurveCollection && source.children !== undefined)
@@ -226622,7 +226751,7 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
226622
226751
  * end of the ray.
226623
226752
  */
226624
226753
  projectedParameterRange(ray, lowHigh) {
226625
- return _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_9__.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
226754
+ return _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_12__.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
226626
226755
  }
226627
226756
  /** Return the immediate parent of the input curve in the instance, or undefined if it is not a descendant. */
226628
226757
  findParentOfDescendant(descendant) {
@@ -226711,7 +226840,7 @@ class CurveChain extends CurveCollection {
226711
226840
  if (index >= 0 && index < n) // try simplest non-cyclic access first
226712
226841
  return this.children[index];
226713
226842
  if (cyclic) {
226714
- const index2 = _Geometry__WEBPACK_IMPORTED_MODULE_10__.Geometry.modulo(index, n);
226843
+ const index2 = _Geometry__WEBPACK_IMPORTED_MODULE_6__.Geometry.modulo(index, n);
226715
226844
  return this.children[index2];
226716
226845
  }
226717
226846
  return undefined;
@@ -226731,7 +226860,7 @@ class CurveChain extends CurveCollection {
226731
226860
  const children = tree.children;
226732
226861
  if (children.length === 1) {
226733
226862
  const ls = children[0];
226734
- if (ls instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_11__.LineString3d)
226863
+ if (ls instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d)
226735
226864
  return ls.packedPoints;
226736
226865
  }
226737
226866
  }
@@ -226743,7 +226872,7 @@ class CurveChain extends CurveCollection {
226743
226872
  * @return whether the child was added
226744
226873
  */
226745
226874
  tryAddChild(child) {
226746
- if (child && child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_8__.CurvePrimitive) {
226875
+ if (child && child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__.CurvePrimitive) {
226747
226876
  this._curves.push(child);
226748
226877
  return true;
226749
226878
  }
@@ -226785,7 +226914,7 @@ class CurveChain extends CurveCollection {
226785
226914
  if (alsoSearchProxies ?? false) {
226786
226915
  for (let i = 0; i < this._curves.length; i++) {
226787
226916
  const childCurve = this._curves[i];
226788
- if (childCurve instanceof _ProxyCurve__WEBPACK_IMPORTED_MODULE_12__.ProxyCurve) {
226917
+ if (childCurve instanceof _ProxyCurve__WEBPACK_IMPORTED_MODULE_14__.ProxyCurve) {
226789
226918
  if (childCurve.proxyCurve === target)
226790
226919
  return i;
226791
226920
  }
@@ -226849,8 +226978,8 @@ class BagOfCurves extends CurveCollection {
226849
226978
  const clone = new BagOfCurves();
226850
226979
  let child;
226851
226980
  for (child of this.children) {
226852
- if (child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_8__.CurvePrimitive) {
226853
- const ls = _LineString3d__WEBPACK_IMPORTED_MODULE_11__.LineString3d.create();
226981
+ if (child instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_4__.CurvePrimitive) {
226982
+ const ls = _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d.create();
226854
226983
  child.emitStrokes(ls, options);
226855
226984
  if (ls)
226856
226985
  clone.children.push(ls);
@@ -227932,19 +228061,19 @@ function optionalUpdate(source, result) {
227932
228061
  * @public
227933
228062
  */
227934
228063
  class CurveLocationDetail {
227935
- /** The curve being evaluated */
228064
+ /** The curve being evaluated. */
227936
228065
  curve;
227937
- /** Optional ray */
228066
+ /** Optional ray. */
227938
228067
  ray;
227939
- /** The fractional position along the curve */
228068
+ /** The fractional position along the curve. */
227940
228069
  fraction;
227941
- /** Detail condition of the role this point has in some context */
228070
+ /** Detail condition of the role this point has in some context. */
227942
228071
  intervalRole;
227943
- /** The point on the curve */
228072
+ /** The point on the curve. */
227944
228073
  point;
227945
- /** A vector (e.g. tangent vector) in context */
228074
+ /** A vector (e.g. tangent vector) in context. */
227946
228075
  vectorInCurveLocationDetail;
227947
- /** A context-specific numeric value. (e.g. a distance) */
228076
+ /** A context-specific numeric value (e.g., a distance). */
227948
228077
  a;
227949
228078
  /**
227950
228079
  * Optional CurveLocationDetail with more detail of location. For instance, a detail for fractional position
@@ -227954,12 +228083,12 @@ class CurveLocationDetail {
227954
228083
  childDetail;
227955
228084
  /**
227956
228085
  * A status indicator for certain searches.
227957
- * * e.g. CurvePrimitive.moveSignedDistanceFromFraction
228086
+ * * e.g., CurvePrimitive.moveSignedDistanceFromFraction.
227958
228087
  */
227959
228088
  curveSearchStatus;
227960
- /** (Optional) second fraction, e.g. end of interval of coincident curves */
228089
+ /** (Optional) second fraction, e.g. end of interval of coincident curves. */
227961
228090
  fraction1;
227962
- /** (Optional) second point, e.g. end of interval of coincident curves */
228091
+ /** (Optional) second point, e.g. end of interval of coincident curves. */
227963
228092
  point1;
227964
228093
  /** A context-specific temporary point, e.g. for intermediate calculations. */
227965
228094
  pointQ;
@@ -227970,26 +228099,26 @@ class CurveLocationDetail {
227970
228099
  this.point = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__.Point3d.createZero();
227971
228100
  this.a = 0.0;
227972
228101
  }
227973
- /** Set the (optional) intervalRole field */
228102
+ /** Set the (optional) intervalRole field. */
227974
228103
  setIntervalRole(value) {
227975
228104
  this.intervalRole = value;
227976
228105
  }
227977
- /** Set the (optional) fraction1 and point1, using direct assignment (capture!) to point1 */
228106
+ /** Set the (optional) fraction1 and point1, using direct assignment (capture!) to point1. */
227978
228107
  captureFraction1Point1(fraction1, point1) {
227979
228108
  this.fraction1 = fraction1;
227980
228109
  this.point1 = point1;
227981
228110
  }
227982
- /** Test if this pair has fraction1 defined */
228111
+ /** Test if this pair has fraction1 defined. */
227983
228112
  get hasFraction1() {
227984
228113
  return this.fraction1 !== undefined;
227985
228114
  }
227986
- /** Test if this is an isolated point. This is true if intervalRole is any of (undefined, isolated, isolatedAtVertex) */
228115
+ /** Test if this is an isolated point. This is true if intervalRole is any of (undefined, isolated, isolatedAtVertex). */
227987
228116
  get isIsolated() {
227988
228117
  return this.intervalRole === undefined
227989
228118
  || this.intervalRole === CurveIntervalRole.isolated
227990
228119
  || this.intervalRole === CurveIntervalRole.isolatedAtVertex;
227991
228120
  }
227992
- /** Return the fraction delta. (0 if no fraction1) */
228121
+ /** Return the fraction delta. (0 if no fraction1). */
227993
228122
  get fractionDelta() {
227994
228123
  return this.fraction1 !== undefined ? this.fraction1 - this.fraction : 0.0;
227995
228124
  }
@@ -228010,7 +228139,7 @@ class CurveLocationDetail {
228010
228139
  this.point1 = undefined;
228011
228140
  }
228012
228141
  /**
228013
- * Return a complete copy, WITH CAVEATS . . .
228142
+ * Return a complete copy, WITH CAVEATS.
228014
228143
  * * curve member is copied as a reference.
228015
228144
  * * point and vector members are cloned.
228016
228145
  */
@@ -228032,9 +228161,9 @@ class CurveLocationDetail {
228032
228161
  /**
228033
228162
  * Updated in this instance.
228034
228163
  * * Note that if caller omits `vector` and `a`, those fields are updated to the call-list defaults (NOT left as-is)
228035
- * * point and vector updates are by data copy (not capture of pointers)
228036
- * @param fraction (required) fraction to install
228037
- * @param point (required) point to install
228164
+ * * point and vector updates are by data copy (not capture of pointers).
228165
+ * @param fraction (required) fraction to install.
228166
+ * @param point (required) point to install.
228038
228167
  * @param vector (optional) vector to install.
228039
228168
  * @param a (optional) numeric value to install.
228040
228169
  */
@@ -228047,9 +228176,9 @@ class CurveLocationDetail {
228047
228176
  /**
228048
228177
  * Updated in this instance.
228049
228178
  * * Note that if caller omits a`, that field is updated to the call-list default (NOT left as-is)
228050
- * * point and vector updates are by data copy (not capture of the ray members)
228051
- * @param fraction (required) fraction to install
228052
- * @param ray (required) point and vector to install
228179
+ * * point and vector updates are by data copy (not capture of the ray members).
228180
+ * @param fraction (required) fraction to install.
228181
+ * @param ray (required) point and vector to install.
228053
228182
  * @param a (optional) numeric value to install.
228054
228183
  */
228055
228184
  setFR(fraction, ray, a = 0) {
@@ -228089,7 +228218,7 @@ class CurveLocationDetail {
228089
228218
  result.point.setFromPoint3d(point);
228090
228219
  return result;
228091
228220
  }
228092
- /** Create with CurvePrimitive pointer, fraction, and point coordinates */
228221
+ /** Create with CurvePrimitive pointer, fraction, and point coordinates. */
228093
228222
  static createCurveFractionPointDistanceCurveSearchStatus(curve, fraction, point, distance, status, result) {
228094
228223
  result = result ? result : new CurveLocationDetail();
228095
228224
  result.curve = curve;
@@ -228185,7 +228314,7 @@ class CurveLocationDetail {
228185
228314
  * @param fraction candidate fraction
228186
228315
  * @param point candidate point
228187
228316
  * @param a candidate distance
228188
- * @returns true if the given distance is smaller (and hence this detail was updated.)
228317
+ * @returns true if the given distance is smaller (and hence this detail was updated)
228189
228318
  */
228190
228319
  updateIfCloserCurveFractionPointDistance(curve, fraction, point, a) {
228191
228320
  if (this.a < a)
@@ -233247,13 +233376,19 @@ class MapCurvePrimitiveToCurveLocationDetailPairArray {
233247
233376
  * @internal
233248
233377
  */
233249
233378
  class PlanarSubdivision {
233250
- /** Create a graph from an array of curves, and an array of the curves' precomputed intersections. Z-coordinates are ignored. */
233379
+ /**
233380
+ * Create a graph from an array of curves, and an array of the curves' precomputed intersections.
233381
+ * Z-coordinates are ignored.
233382
+ */
233251
233383
  static assembleHalfEdgeGraph(primitives, allPairs, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
233252
- const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.
233384
+ // map from key CurvePrimitive to CurveLocationDetailPair
233385
+ const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray();
233253
233386
  for (const pair of allPairs)
233254
233387
  detailByPrimitive.insertPair(pair);
233255
- if (primitives.length > detailByPrimitive.primitiveToPair.size)
233256
- detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance); // otherwise, these single-primitive loops are missing from the graph
233388
+ if (primitives.length > detailByPrimitive.primitiveToPair.size) {
233389
+ // otherwise, these single-primitive loops are missing from the graph
233390
+ detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance);
233391
+ }
233257
233392
  const graph = new _topology_Graph__WEBPACK_IMPORTED_MODULE_5__.HalfEdgeGraph();
233258
233393
  for (const entry of detailByPrimitive.primitiveToPair.entries()) {
233259
233394
  const p = entry[0];
@@ -233264,7 +233399,11 @@ class PlanarSubdivision {
233264
233399
  const detail = getDetailOnCurve(detailPair, p);
233265
233400
  const detail0 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction, detail.point);
233266
233401
  const detail1 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction1, detail.point1);
233267
- return [...accumulator, _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail0, detail0), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail1, detail1)];
233402
+ return [
233403
+ ...accumulator,
233404
+ _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail0, detail0),
233405
+ _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail1, detail1),
233406
+ ];
233268
233407
  }, []);
233269
233408
  // lexical sort on p intersection fraction
233270
233409
  details.sort((pairA, pairB) => {
@@ -233284,9 +233423,9 @@ class PlanarSubdivision {
233284
233423
  return graph;
233285
233424
  }
233286
233425
  /**
233287
- * Create a pair of mated half edges referencing an interval of a primitive
233288
- * * no action if start and end points are identical.
233289
- * @param graph containing graph.
233426
+ * Create a pair of mated half edges referencing an interval of a primitive.
233427
+ * * no action if start and end points are identical.
233428
+ * @param graph containing graph
233290
233429
  * @param p the curve
233291
233430
  * @param point0 start point
233292
233431
  * @param fraction0 starting fraction
@@ -233309,7 +233448,8 @@ class PlanarSubdivision {
233309
233448
  return { point: point1, fraction: fraction1 };
233310
233449
  }
233311
233450
  /**
233312
- * Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.
233451
+ * Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative,
233452
+ * or sliver loops.
233313
233453
  * @param zeroAreaTolerance absolute area tolerance for sliver face detection
233314
233454
  * @param isSliverFace whether the loop is known a priori (e.g., via topology) to have zero area
233315
233455
  * @returns the area (forced to zero if within tolerance)
@@ -234082,9 +234222,10 @@ __webpack_require__.r(__webpack_exports__);
234082
234222
  /* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
234083
234223
  /* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
234084
234224
  /* harmony import */ var _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometry4d/MomentData */ "../../core/geometry/lib/esm/geometry4d/MomentData.js");
234085
- /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
234225
+ /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
234226
+ /* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
234086
234227
  /* harmony import */ var _RegionOps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RegionOps */ "../../core/geometry/lib/esm/curve/RegionOps.js");
234087
- /* harmony import */ var _StrokeOptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./StrokeOptions */ "../../core/geometry/lib/esm/curve/StrokeOptions.js");
234228
+ /* harmony import */ var _StrokeOptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./StrokeOptions */ "../../core/geometry/lib/esm/curve/StrokeOptions.js");
234088
234229
  /*---------------------------------------------------------------------------------------------
234089
234230
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
234090
234231
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -234096,6 +234237,7 @@ __webpack_require__.r(__webpack_exports__);
234096
234237
 
234097
234238
 
234098
234239
 
234240
+
234099
234241
  /**
234100
234242
  * Implementation class for computing XY area moments.
234101
234243
  * @internal
@@ -234161,20 +234303,19 @@ class RegionMomentsXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
234161
234303
  return momentData;
234162
234304
  }
234163
234305
  handleAnyRegion(region) {
234164
- const summedMoments = _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_3__.MomentData.create();
234165
234306
  // guarantee there is no overlapping children
234166
234307
  const merged = _RegionOps__WEBPACK_IMPORTED_MODULE_4__.RegionOps.regionBooleanXY(region, undefined, _RegionOps__WEBPACK_IMPORTED_MODULE_4__.RegionBinaryOpType.Union);
234167
- if (merged) {
234168
- for (const child of merged.children) {
234169
- const childMoments = child.dispatchToGeometryHandler(this);
234170
- if (childMoments) {
234171
- const sign0 = childMoments.signFactor(1.0);
234172
- summedMoments.accumulateProducts(childMoments, sign0);
234173
- }
234174
- }
234175
- }
234176
- else {
234308
+ if (!merged)
234177
234309
  return undefined;
234310
+ if (merged instanceof _Loop__WEBPACK_IMPORTED_MODULE_5__.Loop)
234311
+ return this.handleLoop(merged);
234312
+ const summedMoments = _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_3__.MomentData.create();
234313
+ for (const child of merged.children) {
234314
+ const childMoments = child.dispatchToGeometryHandler(this);
234315
+ if (childMoments) {
234316
+ const sign0 = childMoments.signFactor(1.0);
234317
+ summedMoments.accumulateProducts(childMoments, sign0);
234318
+ }
234178
234319
  }
234179
234320
  return summedMoments;
234180
234321
  }
@@ -234190,7 +234331,7 @@ class RegionMomentsXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
234190
234331
  getStrokeOptions() {
234191
234332
  if (this._strokeOptions)
234192
234333
  return this._strokeOptions;
234193
- const options = _StrokeOptions__WEBPACK_IMPORTED_MODULE_5__.StrokeOptions.createForCurves();
234334
+ const options = _StrokeOptions__WEBPACK_IMPORTED_MODULE_6__.StrokeOptions.createForCurves();
234194
234335
  // this is unusually fine for stroking, but appropriate for sum.
234195
234336
  options.angleTol = _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createDegrees(5.0);
234196
234337
  this._strokeOptions = options;
@@ -234201,22 +234342,22 @@ class RegionMomentsXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
234201
234342
  * * Stroke the curve and accumulate stroke array.
234202
234343
  */
234203
234344
  handleCurvePrimitive(cp) {
234204
- const strokes = _LineString3d__WEBPACK_IMPORTED_MODULE_6__.LineString3d.create();
234345
+ const strokes = _LineString3d__WEBPACK_IMPORTED_MODULE_7__.LineString3d.create();
234205
234346
  const options = this.getStrokeOptions();
234206
234347
  cp.emitStrokes(strokes, options);
234207
234348
  this.handleLineString3d(strokes);
234208
234349
  }
234209
234350
  /** Handle strongly typed BSplineCurve3d as generic curve primitive. */
234210
234351
  handleBSplineCurve3d(g) {
234211
- return this.handleCurvePrimitive(g);
234352
+ this.handleCurvePrimitive(g);
234212
234353
  }
234213
234354
  /** Handle strongly typed BSplineCurve3dH as generic curve primitive. */
234214
234355
  handleBSplineCurve3dH(g) {
234215
- return this.handleCurvePrimitive(g);
234356
+ this.handleCurvePrimitive(g);
234216
234357
  }
234217
234358
  /** Handle strongly typed TransitionSpiral as generic curve primitive. */
234218
234359
  handleTransitionSpiral(g) {
234219
- return this.handleCurvePrimitive(g);
234360
+ this.handleCurvePrimitive(g);
234220
234361
  }
234221
234362
  }
234222
234363
 
@@ -234558,6 +234699,28 @@ class RegionOps {
234558
234699
  const graph = _RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_12__.RegionOpsFaceToFaceSearch.doPolygonBoolean(loopsA, loopsB, (inA, inB) => (inA && !inB), this._graphCheckPointFunction);
234559
234700
  return this.finishGraphToPolyface(graph, triangulate);
234560
234701
  }
234702
+ /**
234703
+ * Simplify the type of the region by stripping redundant parent(s).
234704
+ * * No Boolean operations are performed.
234705
+ * * Invalid inputs (such as childless regions) are not corrected.
234706
+ * @param region region to simplify
234707
+ * @returns
234708
+ * * For a [[UnionRegion]] with exactly one child, return it if it is a [[Loop]],
234709
+ * or if it is a [[ParityRegion]] with multiple children, otherwise return the `ParityRegion`'s `Loop`.
234710
+ * * For a `ParityRegion` with exactly one `Loop`, return it.
234711
+ * * All other inputs returned unchanged.
234712
+ */
234713
+ static simplifyRegionType(region) {
234714
+ if (region instanceof _UnionRegion__WEBPACK_IMPORTED_MODULE_13__.UnionRegion) {
234715
+ if (region.children.length === 1)
234716
+ return this.simplifyRegionType(region.children[0]);
234717
+ }
234718
+ else if (region instanceof _ParityRegion__WEBPACK_IMPORTED_MODULE_8__.ParityRegion) {
234719
+ if (region.children.length === 1)
234720
+ return region.children[0];
234721
+ }
234722
+ return region;
234723
+ }
234561
234724
  /**
234562
234725
  * Return areas defined by a boolean operation.
234563
234726
  * @note For best results, input regions should have correctly oriented loops. See [[sortOuterAndHoleLoopsXY]].
@@ -234571,8 +234734,6 @@ class RegionOps {
234571
234734
  * to connect interior loops to exterior loops.
234572
234735
  */
234573
234736
  static regionBooleanXY(loopsA, loopsB, operation, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance) {
234574
- // Always return UnionRegion for now, but keep return type as AnyRegion.
234575
- // In the future, we might return the *simplest* region type.
234576
234737
  const result = _UnionRegion__WEBPACK_IMPORTED_MODULE_13__.UnionRegion.create();
234577
234738
  const context = _RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_12__.RegionBooleanContext.create(_RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_12__.RegionGroupOpType.Union, _RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_12__.RegionGroupOpType.Union);
234578
234739
  context.addMembers(loopsA, loopsB);
@@ -234591,7 +234752,7 @@ class RegionOps {
234591
234752
  result.tryAddChild(loop);
234592
234753
  }
234593
234754
  });
234594
- return result;
234755
+ return result ? this.simplifyRegionType(result) : undefined;
234595
234756
  }
234596
234757
  /**
234597
234758
  * Return a polyface whose facets are a boolean operation between the input regions.
@@ -235245,14 +235406,22 @@ __webpack_require__.r(__webpack_exports__);
235245
235406
  * @internal
235246
235407
  */
235247
235408
  class RegionOpsFaceToFaceSearchCallbacks {
235248
- /** Announce a representative node on the outer face of a component */
235249
- startComponent(_node) { return true; }
235250
- /** Announce return to outer face */
235251
- finishComponent(_node) { return true; }
235252
- /** Announce face entry */
235253
- enterFace(_facePathStack, _newFaceNode) { return true; }
235254
- /** Announce face exit */
235255
- leaveFace(_facePathStack, _newFaceNode) { return true; }
235409
+ /** Announce a representative node on the outer face of a component. */
235410
+ startComponent(_node) {
235411
+ return true;
235412
+ }
235413
+ /** Announce return to outer face. */
235414
+ finishComponent(_node) {
235415
+ return true;
235416
+ }
235417
+ /** Announce face entry. */
235418
+ enterFace(_facePathStack, _newFaceNode) {
235419
+ return true;
235420
+ }
235421
+ /** Announce face exit. */
235422
+ leaveFace(_facePathStack, _newFaceNode) {
235423
+ return true;
235424
+ }
235256
235425
  }
235257
235426
  /**
235258
235427
  * Implementation of `RegionOpsFaceToFaceSearchCallbacks` for binary boolean sweep with polygonal regions.
@@ -235315,14 +235484,14 @@ class RegionOpsBinaryBooleanSweepCallbacks extends RegionOpsFaceToFaceSearchCall
235315
235484
  */
235316
235485
  class RegionOpsFaceToFaceSearch {
235317
235486
  /**
235318
- * run a DFS with face-to-face step announcements.
235487
+ * Run a DFS with face-to-face step announcements.
235319
235488
  * * false return from any function terminates search immediately.
235320
235489
  * * all reachable nodes assumed to have both visit masks clear.
235321
235490
  * @param graph containing graph.
235322
235491
  * @param seed first node to visit.
235323
235492
  * @param faceHasBeenVisited mask marking faces that have been seen.
235324
235493
  * @param nodeHasBeenVisited mask marking node-to-node step around face.
235325
- *
235494
+ * @param callbacks callbacks.
235326
235495
  */
235327
235496
  static faceToFaceSearchFromOuterLoop(_graph, seed, faceHasBeenVisited, nodeHasBeenVisited, callbacks) {
235328
235497
  if (seed.isMaskSet(faceHasBeenVisited))
@@ -235336,10 +235505,10 @@ class RegionOpsFaceToFaceSearch {
235336
235505
  let entryNode = faceWalker;
235337
235506
  let mate = faceWalker.edgeMate;
235338
235507
  if (!mate.isMaskSet(faceHasBeenVisited)) {
235339
- // the faceWalker seed is always on the base of the stack.
235340
- // the stack then contains even-odd pairs of (entryNode, currentNode)
235341
- // * entryNode is the node where a face was entered.
235342
- // * faceNode is another node around that face.
235508
+ // The faceWalker seed is always on the base of the stack.
235509
+ // The stack then contains even-odd pairs of (entryNode, faceNode).
235510
+ // entryNode is the node where a face was entered.
235511
+ // faceNode is another node around that face.
235343
235512
  facePathStack.push(faceWalker);
235344
235513
  facePathStack.push(mate);
235345
235514
  let faceNode = mate.faceSuccessor;
@@ -235370,13 +235539,13 @@ class RegionOpsFaceToFaceSearch {
235370
235539
  entryNode = facePathStack[facePathStack.length - 1];
235371
235540
  }
235372
235541
  if (faceNode.isMaskSet(nodeHasBeenVisited)) {
235373
- // this is disaster !!!
235542
+ // this is disaster
235374
235543
  return;
235375
235544
  }
235376
235545
  }
235377
235546
  }
235378
235547
  }
235379
- // continue at outermost level .....
235548
+ // continue at outermost level
235380
235549
  faceWalker = faceWalker.faceSuccessor;
235381
235550
  } while (faceWalker !== seed);
235382
235551
  callbacks.finishComponent(seed);
@@ -235506,7 +235675,9 @@ class RegionGroupMember {
235506
235675
  this.parentGroup = parentGroup;
235507
235676
  this.sweepState = 0;
235508
235677
  }
235509
- clearState() { this.sweepState = 0; }
235678
+ clearState() {
235679
+ this.sweepState = 0;
235680
+ }
235510
235681
  }
235511
235682
  /**
235512
235683
  * A `RegionGroup` is
@@ -235733,9 +235904,8 @@ class RegionBooleanContext {
235733
235904
  this._announceFaceFunction = announceFaceFunction;
235734
235905
  this.binaryOp = binaryOp;
235735
235906
  this.graph.clearMask(_topology_Graph__WEBPACK_IMPORTED_MODULE_0__.HalfEdgeMask.EXTERIOR);
235736
- for (const group of [this.groupA, this.groupB]) {
235907
+ for (const group of [this.groupA, this.groupB])
235737
235908
  group.clearState();
235738
- }
235739
235909
  const faceHasBeenVisitedMask = this.graph.grabMask();
235740
235910
  const nodeHasBeenVisitedMask = this.graph.grabMask();
235741
235911
  const componentArray = GraphComponentArray.create(this.graph);
@@ -235816,18 +235986,19 @@ class RegionBooleanContext {
235816
235986
  return undefined;
235817
235987
  }
235818
235988
  // obligations to act as sweep callback ...
235819
- /** Announce a representative node on the outer face of a component */
235989
+ /** Announce a representative node on the outer face of a component. */
235820
235990
  startComponent(outerFaceNode) {
235821
235991
  outerFaceNode.setMaskAroundFace(_topology_Graph__WEBPACK_IMPORTED_MODULE_0__.HalfEdgeMask.EXTERIOR);
235822
235992
  if (this._announceFaceFunction)
235823
235993
  this._announceFaceFunction(this.graph, outerFaceNode, -1, faceAreaFromCurvedEdgeData(outerFaceNode));
235824
235994
  return true;
235825
235995
  }
235826
- /** Announce return to outer face */
235996
+ /** Announce return to outer face. */
235827
235997
  finishComponent(_node) {
235828
235998
  return true;
235829
235999
  }
235830
- /** Announce entry to a graph face.
236000
+ /**
236001
+ * Announce entry to a graph face.
235831
236002
  * * Both both sides of a graph edge are from the same RegionGroupMember.
235832
236003
  * * Hence "crossing that edge" changes the parity count for the RegionGroupMember that owns that edge by 1.
235833
236004
  * * The parity count for other RegionGroupMembers are never affected by this crossing.
@@ -235848,8 +236019,9 @@ class RegionBooleanContext {
235848
236019
  return true;
235849
236020
  }
235850
236021
  }
235851
- /** return xy area between a (part of a) curve and the x axis through a reference point.
235852
- * If detail is undefined or does not have both start and end fractions, just do trapezoid area
236022
+ /**
236023
+ * Return xy area between (part of) a curve and the x axis through a reference point.
236024
+ * If detail is undefined or does not have both start and end fractions, just do trapezoid area.
235853
236025
  */
235854
236026
  function areaUnderPartialCurveXY(detail, xyStart, xyEnd, referencePoint) {
235855
236027
  // area between trapezoid and axis
@@ -235863,15 +236035,21 @@ function areaUnderPartialCurveXY(detail, xyStart, xyEnd, referencePoint) {
235863
236035
  let areaToChord = 0.0;
235864
236036
  if (detail && detail.curve && detail.hasFraction1) {
235865
236037
  if (detail.curve instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d) {
235866
- // ah .. nothing to do for a line segment
236038
+ // nothing to do for a line segment
235867
236039
  }
235868
236040
  else if (detail.curve instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_19__.Arc3d) {
235869
236041
  areaToChord = detail.curve.areaToChordXY(detail.fraction, detail.fraction1);
235870
236042
  }
236043
+ else {
236044
+ const partial = detail.curve.clonePartialCurve(detail.fraction, detail.fraction1);
236045
+ areaToChord = partial ?
236046
+ _RegionOps__WEBPACK_IMPORTED_MODULE_1__.RegionOps.computeXYArea(_Loop__WEBPACK_IMPORTED_MODULE_8__.Loop.create(partial, _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d.create(detail.point1, detail.point))) ?? 0
236047
+ : 0;
236048
+ }
235871
236049
  }
235872
236050
  return trapezoidArea + areaToChord;
235873
236051
  }
235874
- /** Compute face area for a face whose edges are decorated with CurveLocationDetail for their (partial) curves */
236052
+ /** Compute face area for a face whose edges are decorated with CurveLocationDetail for their (partial) curves. */
235875
236053
  function faceAreaFromCurvedEdgeData(faceSeed) {
235876
236054
  let area = 0.0;
235877
236055
  let edge = faceSeed;
@@ -235894,8 +236072,7 @@ class GraphComponent {
235894
236072
  this.faceAreas = [];
235895
236073
  }
235896
236074
  /**
235897
- * visit all vertices and edges in the component to build face area array and composite range.
235898
- *
236075
+ * Visit all vertices and edges in the component to build face area array and composite range.
235899
236076
  * @param extendRangeForEdge optional function to compute edge range. If undefined, linear edge is assumed.
235900
236077
  * @param faceAreaFunction optional function to compute face area. If undefined, linear edges are assumed.
235901
236078
  */
@@ -235919,7 +236096,8 @@ class GraphComponent {
235919
236096
  }
235920
236097
  }
235921
236098
  }
235922
- /** build and hold an array of component data for a HalfEdgeGraph.
236099
+ /**
236100
+ * Build and hold an array of component data for a HalfEdgeGraph.
235923
236101
  * @internal
235924
236102
  */
235925
236103
  class GraphComponentArray {
@@ -238407,6 +238585,8 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238407
238585
  // The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.
238408
238586
  // The fraction and extend parameters allow all combinations to be passed in.
238409
238587
  dispatchSegmentArc(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, arc, extendB0, extendB1, reversed) {
238588
+ const tol2 = this._coincidentGeometryContext.tolerance * this._coincidentGeometryContext.tolerance;
238589
+ let dist2;
238410
238590
  // Arc: X = C + cU + sV
238411
238591
  // Line: contains points A0,A1
238412
238592
  // Arc point colinear with line if det (A0, A1, X) = 0
@@ -238417,6 +238597,10 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238417
238597
  // project back to line.
238418
238598
  if (this._worldToLocalPerspective) {
238419
238599
  const data = arc.toTransformedPoint4d(this._worldToLocalPerspective);
238600
+ const radians0 = data.sweep.fractionToRadians(0);
238601
+ const pointB0H = data.center.plus2Scaled(data.vector0, Math.cos(radians0), data.vector90, Math.sin(radians0));
238602
+ const radians1 = data.sweep.fractionToRadians(1);
238603
+ const pointB1H = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));
238420
238604
  const pointA0H = this._worldToLocalPerspective.multiplyPoint3d(pointA0, 1);
238421
238605
  const pointA1H = this._worldToLocalPerspective.multiplyPoint3d(pointA1, 1);
238422
238606
  const alpha = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.tripleProductPoint4dXYW(pointA0H, pointA1H, data.center);
@@ -238426,19 +238610,31 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238426
238610
  const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
238427
238611
  const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
238428
238612
  const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_10__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
238613
+ if (numRoots <= 0)
238614
+ return;
238429
238615
  for (let i = 0; i < numRoots; i++) {
238430
238616
  const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
238431
- const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
238617
+ let arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
238432
238618
  const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, arcPoint);
238433
- if (lineFraction !== undefined &&
238434
- this.acceptFraction(extendA0, lineFraction, extendA1) &&
238435
- this.acceptFraction(extendB0, arcFraction, extendB1)) {
238436
- this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
238619
+ if (lineFraction !== undefined) {
238620
+ if (this.acceptFraction(extendA0, lineFraction, extendA1) && this.acceptFraction(extendB0, arcFraction, extendB1)) {
238621
+ this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
238622
+ }
238623
+ else { // check for endpoint intersections beyond parametric tolerance but within point tolerance
238624
+ const pointAH = lineFraction < 0.5 ? pointA0H : pointA1H;
238625
+ const pointBH = (arcFraction = data.sweep.fractionToSignedPeriodicFraction(arcFraction)) < 0.5 ? pointB0H : pointB1H;
238626
+ if ((dist2 = pointAH.realDistanceSquaredXY(pointBH)) !== undefined && _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isDistanceWithinTol(dist2, tol2))
238627
+ this.recordPointWithLocalFractions(lineFraction < 0.5 ? 0 : 1, cpA, fractionA0, fractionA1, arcFraction < 0.5 ? 0 : 1, arc, 0, 1, reversed);
238628
+ }
238437
238629
  }
238438
238630
  }
238439
238631
  }
238440
238632
  else {
238441
238633
  const data = arc.toTransformedVectors(this._worldToLocalAffine);
238634
+ const radians0 = data.sweep.fractionToRadians(0);
238635
+ const pointB0Local = data.center.plus2Scaled(data.vector0, Math.cos(radians0), data.vector90, Math.sin(radians0));
238636
+ const radians1 = data.sweep.fractionToRadians(1);
238637
+ const pointB1Local = data.center.plus2Scaled(data.vector0, Math.cos(radians1), data.vector90, Math.sin(radians1));
238442
238638
  let pointA0Local = pointA0;
238443
238639
  let pointA1Local = pointA1;
238444
238640
  if (this._worldToLocalAffine) {
@@ -238452,16 +238648,22 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238452
238648
  const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
238453
238649
  const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
238454
238650
  const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_10__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
238455
- const lineFractionTol = 1.0e-10; // TODO: why are we loosening tolerances here?
238456
- const arcFractionTol = 1.0e-7;
238651
+ if (numRoots <= 0)
238652
+ return;
238457
238653
  for (let i = 0; i < numRoots; i++) {
238458
238654
  const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
238459
- const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
238655
+ let arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
238460
238656
  const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);
238461
- if (lineFraction !== undefined &&
238462
- this.acceptFraction(extendA0, lineFraction, extendA1, lineFractionTol) &&
238463
- this.acceptFraction(extendB0, arcFraction, extendB1, arcFractionTol)) {
238464
- this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
238657
+ if (lineFraction !== undefined) {
238658
+ if (this.acceptFraction(extendA0, lineFraction, extendA1) && this.acceptFraction(extendB0, arcFraction, extendB1)) {
238659
+ this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
238660
+ }
238661
+ else { // check for endpoint intersections beyond parametric tolerance but within point tolerance
238662
+ const pointALocal = lineFraction < 0.5 ? pointA0Local : pointA1Local;
238663
+ const pointBLocal = (arcFraction = data.sweep.fractionToSignedPeriodicFraction(arcFraction)) < 0.5 ? pointB0Local : pointB1Local;
238664
+ if ((dist2 = pointALocal.distanceSquaredXY(pointBLocal)) !== undefined && _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isDistanceWithinTol(dist2, tol2))
238665
+ this.recordPointWithLocalFractions(lineFraction < 0.5 ? 0 : 1, cpA, fractionA0, fractionA1, arcFraction < 0.5 ? 0 : 1, arc, 0, 1, reversed);
238666
+ }
238465
238667
  }
238466
238668
  }
238467
238669
  }
@@ -238629,7 +238831,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238629
238831
  }
238630
238832
  return ranges;
238631
238833
  }
238632
- dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients.
238834
+ dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients
238633
238835
  reversed) {
238634
238836
  if (!this._xyzwA0)
238635
238837
  this._xyzwA0 = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_3__.Point4d.create();
@@ -238673,7 +238875,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238673
238875
  let bezierBFraction = r;
238674
238876
  bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);
238675
238877
  const segmentAFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);
238676
- if (segmentAFraction && _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
238878
+ if (segmentAFraction !== undefined && _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
238677
238879
  let bezierAFraction = _Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.interpolate(f0, segmentAFraction, f1);
238678
238880
  // We have a near intersection at fractions on the two beziers
238679
238881
  // Iterate on the curves for a true intersection
@@ -238695,7 +238897,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238695
238897
  }
238696
238898
  }
238697
238899
  }
238698
- dispatchBSplineCurve3dBSplineCurve3d(bcurveA, bcurveB, _reversed) {
238900
+ dispatchBSplineCurve3dBSplineCurve3d(bcurveA, bcurveB, reversed) {
238699
238901
  const bezierSpanA = bcurveA.collectBezierSpans(true);
238700
238902
  const bezierSpanB = bcurveB.collectBezierSpans(true);
238701
238903
  const numA = bezierSpanA.length;
@@ -238714,9 +238916,9 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
238714
238916
  const strokeCountA = bezierSpanA[a].computeStrokeCountForOptions();
238715
238917
  const strokeCountB = bezierSpanB[b].computeStrokeCountForOptions();
238716
238918
  if (strokeCountA < strokeCountB)
238717
- this.dispatchBezierBezierStrokeFirst(bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, _reversed);
238919
+ this.dispatchBezierBezierStrokeFirst(bezierSpanA[a], bcurveA, strokeCountA, bezierSpanB[b], bcurveB, strokeCountB, univariateCoffsB, reversed);
238718
238920
  else
238719
- this.dispatchBezierBezierStrokeFirst(bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !_reversed);
238921
+ this.dispatchBezierBezierStrokeFirst(bezierSpanB[b], bcurveB, strokeCountB, bezierSpanA[a], bcurveA, strokeCountA, univariateCoffsA, !reversed);
238720
238922
  }
238721
238923
  }
238722
238924
  }
@@ -246077,8 +246279,10 @@ class AngleSweep {
246077
246279
  * @param fraction fraction of the sweep.
246078
246280
  * @param radians0 start angle of sweep (in radians).
246079
246281
  * @param radians1 end angle of sweep (in radians).
246080
- * @param toNegativeFraction return an exterior fraction period-shifted to within one period of the start (true) or
246081
- * end (false) of the sweep.
246282
+ * @param toNegativeFraction exterior fraction handling:
246283
+ * * if true, return `fraction` period-shifted to within one period of the start
246284
+ * * if false, return `fraction` period-shifted to within one period of the end
246285
+ * * if undefined, return the period-shift of `fraction` closest to [0,1].
246082
246286
  * @returns period-shifted fraction. If `fraction` is already in [0,1], or the sweep is empty, then `fraction` is
246083
246287
  * returned unchanged.
246084
246288
  */
@@ -246092,16 +246296,25 @@ class AngleSweep {
246092
246296
  fraction = fraction % period; // period-shifted equivalent fraction closest to 0 with same sign as fraction
246093
246297
  if (fraction + period < 1)
246094
246298
  fraction += period; // it's really an interior fraction
246095
- if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isIn01(fraction) || (toNegativeFraction && fraction < 0) || (!toNegativeFraction && fraction > 1))
246299
+ if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isIn01(fraction))
246096
246300
  return fraction;
246097
- return toNegativeFraction ? fraction - period : fraction + period; // shift to other side of sweep
246301
+ if (toNegativeFraction === true)
246302
+ return fraction < 0 ? fraction : fraction - period;
246303
+ if (toNegativeFraction === false)
246304
+ return fraction > 1 ? fraction : fraction + period;
246305
+ const fractionDistFrom01 = fraction < 0 ? -fraction : fraction - 1;
246306
+ const fraction2 = fraction < 0 ? fraction + period : fraction - period; // period-shift with opposite sign
246307
+ const fraction2DistFrom01 = fraction2 < 0 ? -fraction2 : fraction2 - 1;
246308
+ return fractionDistFrom01 < fraction2DistFrom01 ? fraction : fraction2; // choose the period-shift closer to [0,1]
246098
246309
  }
246099
246310
  /**
246100
246311
  * Convert a sweep fraction to the equivalent period-shifted fraction inside this sweep, or within one period of
246101
246312
  * zero on the desired side.
246102
246313
  * @param fraction fraction of the sweep.
246103
- * @param toNegativeFraction return an exterior fraction period-shifted to within one period of the start (true) or
246104
- * end (false) of the sweep.
246314
+ * @param toNegativeFraction exterior fraction handling:
246315
+ * * if true, return `fraction` period-shifted to within one period of the start
246316
+ * * if false, return `fraction` period-shifted to within one period of the end
246317
+ * * if undefined, return the period-shift of `fraction` closest to [0,1].
246105
246318
  * @returns period-shifted fraction. If `fraction` is already in [0,1], or the sweep is empty, then `fraction` is
246106
246319
  * returned unchanged.
246107
246320
  */
@@ -268808,8 +269021,7 @@ class Point4d extends _geometry3d_Plane3d__WEBPACK_IMPORTED_MODULE_0__.Plane3d {
268808
269021
  distanceSquaredXYZW(other) {
268809
269022
  return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseSquaredXYZW(other.xyzw[0] - this.xyzw[0], other.xyzw[1] - this.xyzw[1], other.xyzw[2] - this.xyzw[2], other.xyzw[3] - this.xyzw[3]);
268810
269023
  }
268811
- /** Return the distance between the instance and other after normalizing by weights
268812
- */
269024
+ /** Return the xy distance between the instance and `other` after normalizing by weights */
268813
269025
  realDistanceXY(other) {
268814
269026
  const wA = this.w;
268815
269027
  const wB = other.w;
@@ -268817,6 +269029,14 @@ class Point4d extends _geometry3d_Plane3d__WEBPACK_IMPORTED_MODULE_0__.Plane3d {
268817
269029
  return undefined;
268818
269030
  return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(other.xyzw[0] / wB - this.xyzw[0] / wA, other.xyzw[1] / wB - this.xyzw[1] / wA);
268819
269031
  }
269032
+ /** Return the xy squared distance between the instance and `other` after normalizing by weights */
269033
+ realDistanceSquaredXY(other) {
269034
+ const wA = this.w;
269035
+ const wB = other.w;
269036
+ if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isSmallMetricDistance(wA) || _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isSmallMetricDistance(wB))
269037
+ return undefined;
269038
+ return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseSquaredXY(other.xyzw[0] / wB - this.xyzw[0] / wA, other.xyzw[1] / wB - this.xyzw[1] / wA);
269039
+ }
268820
269040
  /** Return the largest absolute distance between corresponding components
268821
269041
  * * x,y,z,w all participate without normalization.
268822
269042
  */
@@ -269553,6 +269773,7 @@ class BezierCoffs {
269553
269773
  roots(targetValue, _restrictTo01) {
269554
269774
  const bezier = UnivariateBezier.create(this);
269555
269775
  bezier.addInPlace(-targetValue);
269776
+ bezier.clampZero();
269556
269777
  const roots = UnivariateBezier.deflateRoots(bezier);
269557
269778
  return this.filter01(roots, true);
269558
269779
  }
@@ -269616,6 +269837,16 @@ class BezierCoffs {
269616
269837
  }
269617
269838
  return d;
269618
269839
  }
269840
+ /** Assist Newton with slow-to-converge roots at e.g., Bezier endpoints. */
269841
+ clampZero(maxAbs = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallFloatingPoint) {
269842
+ if (maxAbs > 0) {
269843
+ for (let i = 0; i < this.coffs.length; ++i) {
269844
+ const coff = this.coffs[i];
269845
+ if (coff && Math.abs(coff) < maxAbs)
269846
+ this.coffs[i] = 0.0;
269847
+ }
269848
+ }
269849
+ }
269619
269850
  }
269620
269851
  /**
269621
269852
  * Static methods to operate on univariate bezier polynomials, with coefficients in simple Float64Array or as components of blocked arrays.
@@ -274426,10 +274657,10 @@ class SmallSystem {
274426
274657
  * @param spacePoint homogeneous point in space
274427
274658
  */
274428
274659
  static lineSegment3dHXYClosestPointUnbounded(hA0, hA1, spacePoint) {
274429
- // Considering only x,y,w parts....
274660
+ // Considering only x,y,w parts.
274430
274661
  // weighted difference of (A1 w0 - A0 w1) is (cartesian) tangent vector along the line as viewed.
274431
- // The perpendicular (pure vector) W = (-y,x) flip is the direction of projection
274432
- // Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`
274662
+ // The perpendicular (pure vector) W = (-y,x) flip is the direction of projection.
274663
+ // Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`.
274433
274664
  // PointQ is colinear with spacePoint and and W when the xyw homogeneous determinant | Q W spacePoint | is zero.
274434
274665
  const tx = hA1.x * hA0.w - hA0.x * hA1.w;
274435
274666
  const ty = hA1.y * hA0.w - hA0.y * hA1.w;
@@ -277182,7 +277413,7 @@ class IndexedPolyfaceVisitor extends _PolyfaceData__WEBPACK_IMPORTED_MODULE_0__.
277182
277413
  */
277183
277414
  class IndexedPolyfaceSubsetVisitor extends IndexedPolyfaceVisitor {
277184
277415
  _facetIndices;
277185
- _currentSubsetIndex; // index within _facetIndices, or -1 after construction
277416
+ _currentSubsetIndex; // index within _facetIndices
277186
277417
  _nextSubsetIndex; // index within _facetIndices
277187
277418
  constructor(polyface, facetIndices, numWrap) {
277188
277419
  super(polyface, numWrap);
@@ -303938,6 +304169,7 @@ class HalfEdgeGraphSearch {
303938
304169
  }
303939
304170
  /**
303940
304171
  * Search the graph for the face with the most negative area.
304172
+ * * If the graph has exactly one connected component, this is its outer face.
303941
304173
  * @param oneCandidateNodePerFace graph or an array containing one node from each face to be considered.
303942
304174
  * @returns node on the negative area face with largest absolute area, or `undefined` if no negative area face.
303943
304175
  */
@@ -330231,7 +330463,7 @@ class TestContext {
330231
330463
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
330232
330464
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
330233
330465
  await core_frontend_1.NoRenderApp.startup({
330234
- applicationVersion: "5.1.0-dev.20",
330466
+ applicationVersion: "5.1.0-dev.25",
330235
330467
  applicationId: this.settings.gprid,
330236
330468
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.serviceAuthToken),
330237
330469
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -355279,7 +355511,7 @@ var loadLanguages = instance.loadLanguages;
355279
355511
  /***/ ((module) => {
355280
355512
 
355281
355513
  "use strict";
355282
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.1.0-dev.20","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2022 --outDir lib/esm","clean":"rimraf -g lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run webpackTestWorker && vitest --run","cover":"npm run webpackTestWorker && vitest --run","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@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":{"@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/eslint-plugin":"5.0.0-dev.1","@types/chai-as-promised":"^7","@vitest/browser":"^3.0.6","@vitest/coverage-v8":"^3.0.6","cpx2":"^8.0.0","eslint":"^9.13.0","glob":"^10.3.12","playwright":"~1.47.1","rimraf":"^6.0.1","source-map-loader":"^5.0.0","typescript":"~5.6.2","typemoq":"^2.1.0","vitest":"^3.0.6","vite-multiple-assets":"^1.3.1","vite-plugin-static-copy":"2.2.0","webpack":"^5.97.1"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.2.4","@itwin/object-storage-core":"^2.3.0","@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
355514
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.1.0-dev.25","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2022 --outDir lib/esm","clean":"rimraf -g lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run webpackTestWorker && vitest --run","cover":"npm run webpackTestWorker && vitest --run","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@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":{"@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/eslint-plugin":"5.0.0-dev.1","@types/chai-as-promised":"^7","@vitest/browser":"^3.0.6","@vitest/coverage-v8":"^3.0.6","cpx2":"^8.0.0","eslint":"^9.13.0","glob":"^10.3.12","playwright":"~1.47.1","rimraf":"^6.0.1","source-map-loader":"^5.0.0","typescript":"~5.6.2","typemoq":"^2.1.0","vitest":"^3.0.6","vite-multiple-assets":"^1.3.1","vite-plugin-static-copy":"2.2.0","webpack":"^5.97.1"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/cloud-agnostic-core":"^2.2.4","@itwin/object-storage-core":"^2.3.0","@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0"}}');
355283
355515
 
355284
355516
  /***/ }),
355285
355517