@itwin/rpcinterface-full-stack-tests 4.0.0-dev.100 → 4.0.0-dev.101

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.
@@ -152084,7 +152084,8 @@ class MapTile extends _internal__WEBPACK_IMPORTED_MODULE_7__.RealityTile {
152084
152084
  }
152085
152085
  /** @internal */
152086
152086
  minimumVisibleFactor() {
152087
- return 0.25;
152087
+ // if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps
152088
+ return 0.0;
152088
152089
  }
152089
152090
  /** @internal */
152090
152091
  getDrapeTextures() {
@@ -169368,17 +169369,20 @@ class Geometry {
169368
169369
  if (a2b2 > 0.0) {
169369
169370
  const a2b2r = 1.0 / a2b2; // 1/(a^2+b^2)
169370
169371
  const d2a2b2 = d2 * a2b2r; // d^2/(a^2+b^2)
169371
- const criteria = 1.0 - d2a2b2; // 1 - d^2/(a^2+b^2); the criteria to specify how many solutions we got
169372
- if (criteria < -Geometry.smallMetricDistanceSquared) // nSolution = 0
169372
+ const criterion = 1.0 - d2a2b2; // 1 - d^2/(a^2+b^2);
169373
+ if (criterion < -Geometry.smallMetricDistanceSquared) // nSolution = 0
169373
169374
  return result;
169374
169375
  const da2b2 = -constCoff * a2b2r; // -d/(a^2+b^2)
169376
+ // (c0,s0) is the closest approach of the line to the circle center (origin)
169375
169377
  const c0 = da2b2 * cosCoff; // -ad/(a^2+b^2)
169376
169378
  const s0 = da2b2 * sinCoff; // -bd/(a^2+b^2)
169377
- if (criteria <= 0.0) { // nSolution = 1 (observed criteria = -2.22e-16 in rotated system)
169379
+ if (criterion <= 0.0) { // nSolution = 1
169380
+ // We observed criterion = -2.22e-16 in a rotated tangent system, therefore for negative criteria near
169381
+ // zero, return the near-tangency; for tiny positive criteria, fall through to return both solutions.
169378
169382
  result = [_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0, s0)];
169379
169383
  }
169380
- else if (criteria > 0.0) { // nSolution = 2
169381
- const s = Math.sqrt(criteria * a2b2r); // sqrt(a^2+b^2-d^2)) / (a^2+b^2)
169384
+ else { // nSolution = 2
169385
+ const s = Math.sqrt(criterion * a2b2r); // sqrt(a^2+b^2-d^2)) / (a^2+b^2)
169382
169386
  result = [
169383
169387
  _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0 - s * sinCoff, s0 + s * cosCoff),
169384
169388
  _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0 + s * sinCoff, s0 - s * cosCoff),
@@ -184322,12 +184326,12 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
184322
184326
  extendB, reversed) {
184323
184327
  const inverseA = matrixA.inverse();
184324
184328
  if (inverseA) {
184325
- const localB = inverseA.multiplyMatrixMatrix(matrixB);
184329
+ const localB = inverseA.multiplyMatrixMatrix(matrixB); // localB->localA transform
184326
184330
  const ellipseRadians = [];
184327
184331
  const circleRadians = [];
184328
184332
  _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_6__.TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(localB.coffs[2], localB.coffs[5], localB.coffs[8], // center xyw
184329
- localB.coffs[0], localB.coffs[3], localB.coffs[6], // center xyw
184330
- localB.coffs[1], localB.coffs[4], localB.coffs[7], // center xyw
184333
+ localB.coffs[0], localB.coffs[3], localB.coffs[6], // vector0 xyw
184334
+ localB.coffs[1], localB.coffs[4], localB.coffs[7], // vector90 xyw
184331
184335
  ellipseRadians, circleRadians);
184332
184336
  for (let i = 0; i < ellipseRadians.length; i++) {
184333
184337
  const fractionA = cpA.sweep.radiansToSignedPeriodicFraction(circleRadians[i]);
@@ -186274,7 +186278,7 @@ function optionalVectorUpdate(source, result) {
186274
186278
  return undefined;
186275
186279
  }
186276
186280
  /**
186277
- * CurveLocationDetail carries point and paramter data about a point evaluated on a curve.
186281
+ * CurveLocationDetail carries point and parameter data about a point evaluated on a curve.
186278
186282
  * * These are returned by a variety of queries.
186279
186283
  * * Particular contents can vary among the queries.
186280
186284
  * @public
@@ -190518,13 +190522,16 @@ __webpack_require__.r(__webpack_exports__);
190518
190522
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
190519
190523
  /* harmony export */ "PlanarSubdivision": () => (/* binding */ PlanarSubdivision)
190520
190524
  /* harmony export */ });
190521
- /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
190522
- /* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
190523
- /* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
190524
- /* harmony import */ var _topology_Merging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../topology/Merging */ "../../core/geometry/lib/esm/topology/Merging.js");
190525
- /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
190526
- /* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
190527
- /* harmony import */ var _RegionOps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../RegionOps */ "../../core/geometry/lib/esm/curve/RegionOps.js");
190525
+ /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
190526
+ /* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
190527
+ /* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
190528
+ /* harmony import */ var _topology_Merging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../topology/Merging */ "../../core/geometry/lib/esm/topology/Merging.js");
190529
+ /* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
190530
+ /* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
190531
+ /* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
190532
+ /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
190533
+ /* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
190534
+ /* harmony import */ var _RegionOps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../RegionOps */ "../../core/geometry/lib/esm/curve/RegionOps.js");
190528
190535
  /*---------------------------------------------------------------------------------------------
190529
190536
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
190530
190537
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -190536,13 +190543,16 @@ __webpack_require__.r(__webpack_exports__);
190536
190543
 
190537
190544
 
190538
190545
 
190546
+
190547
+
190548
+
190539
190549
  /** @packageDocumentation
190540
190550
  * @module Curve
190541
190551
  */
190542
190552
  class MapCurvePrimitiveToCurveLocationDetailPairArray {
190543
190553
  constructor() {
190544
190554
  this.primitiveToPair = new Map();
190545
- // index assigned to this primitive for this calculation.
190555
+ // index assigned to this primitive (for debugging)
190546
190556
  this.primitiveToIndex = new Map();
190547
190557
  this._numIndexedPrimitives = 0;
190548
190558
  }
@@ -190574,54 +190584,63 @@ class MapCurvePrimitiveToCurveLocationDetailPairArray {
190574
190584
  if (primitiveB)
190575
190585
  this.insertPrimitiveToPair(primitiveB, pair);
190576
190586
  }
190587
+ /** Split closed missing primitives in half and add new intersection pairs */
190588
+ splitAndAppendMissingClosedPrimitives(primitives, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
190589
+ for (const p of primitives) {
190590
+ let closedCurveSplitCandidate = false;
190591
+ if (p instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_1__.Arc3d)
190592
+ closedCurveSplitCandidate = p.sweep.isFullCircle;
190593
+ else if (!(p instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_2__.LineSegment3d) && !(p instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_3__.LineString3d))
190594
+ closedCurveSplitCandidate = p.startPoint().isAlmostEqualXY(p.endPoint(), tolerance);
190595
+ if (closedCurveSplitCandidate && !this.primitiveToPair.has(p)) {
190596
+ const p0 = p.clonePartialCurve(0.0, 0.5);
190597
+ const p1 = p.clonePartialCurve(0.5, 1.0);
190598
+ if (p0 && p1) {
190599
+ this.insertPair(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFraction(p0, 0.0), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFraction(p1, 1.0)));
190600
+ this.insertPair(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFraction(p0, 1.0), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFraction(p1, 0.0)));
190601
+ }
190602
+ }
190603
+ }
190604
+ }
190577
190605
  }
190578
- /*
190579
- function getDetailString(detail: CurveLocationDetail | undefined): string {
190580
- if (!detail)
190581
- return "{}";
190582
- else return tagString("primitive", this.primitiveToIndex.get(detail.curve!)) + tagString("f0", detail.fraction) + tagString("f1", detail.fraction1);
190583
- }
190584
- }
190585
- function tagString(name: string, value: number | undefined): string {
190586
- if (value !== undefined)
190587
- return "(" + name + " " + value + ")";
190588
- return "";
190589
- }
190590
- */
190591
190606
  /**
190592
190607
  * @internal
190593
190608
  */
190594
190609
  class PlanarSubdivision {
190595
- /** Create a graph from an array of curves, and an array of the curves' precomputed intersections. */
190596
- static assembleHalfEdgeGraph(primitives, allPairs) {
190610
+ /** Create a graph from an array of curves, and an array of the curves' precomputed intersections. Z-coordinates are ignored. */
190611
+ static assembleHalfEdgeGraph(primitives, allPairs, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
190597
190612
  const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.
190598
- for (const p of primitives)
190599
- detailByPrimitive.assignPrimitiveIndex(p);
190600
- for (const pair of allPairs) {
190613
+ for (const pair of allPairs)
190601
190614
  detailByPrimitive.insertPair(pair);
190602
- }
190603
- const graph = new _topology_Graph__WEBPACK_IMPORTED_MODULE_0__.HalfEdgeGraph();
190615
+ if (primitives.length > detailByPrimitive.primitiveToPair.size)
190616
+ detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance); // otherwise, these single-primitive loops are missing from the graph
190617
+ const graph = new _topology_Graph__WEBPACK_IMPORTED_MODULE_5__.HalfEdgeGraph();
190604
190618
  for (const entry of detailByPrimitive.primitiveToPair.entries()) {
190605
190619
  const p = entry[0];
190606
- const details = entry[1];
190620
+ // convert each interval intersection into two isolated intersections
190621
+ const details = entry[1].reduce((accumulator, detailPair) => {
190622
+ if (!detailPair.detailA.hasFraction1)
190623
+ return [...accumulator, detailPair];
190624
+ const detail = getDetailOnCurve(detailPair, p);
190625
+ const detail0 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction, detail.point);
190626
+ const detail1 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction1, detail.point1);
190627
+ return [...accumulator, _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail0, detail0), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail1, detail1)];
190628
+ }, []);
190629
+ // lexical sort on p intersection fraction
190607
190630
  details.sort((pairA, pairB) => {
190608
190631
  const fractionA = getFractionOnCurve(pairA, p);
190609
190632
  const fractionB = getFractionOnCurve(pairB, p);
190610
- if (fractionA === undefined || fractionB === undefined)
190611
- return -1000.0;
190612
190633
  return fractionA - fractionB;
190613
190634
  });
190614
- let detail0 = getDetailOnCurve(details[0], p);
190615
- this.addHalfEdge(graph, p, p.startPoint(), 0.0, detail0.point, detail0.fraction);
190616
- for (let i = 1; i < details.length; i++) {
190617
- // create (both sides of) a graph edge . . .
190618
- const detail1 = getDetailOnCurve(details[i], p);
190619
- this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);
190620
- detail0 = detail1;
190635
+ let last = { point: p.startPoint(), fraction: 0.0 };
190636
+ for (const detailPair of details) {
190637
+ const detail = getDetailOnCurve(detailPair, p);
190638
+ const detailFraction = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.restrictToInterval(detail.fraction, 0, 1); // truncate fraction, but don't snap point; clustering happens later
190639
+ last = this.addHalfEdge(graph, p, last.point, last.fraction, detail.point, detailFraction, mergeTolerance);
190621
190640
  }
190622
- this.addHalfEdge(graph, p, detail0.point, detail0.fraction, p.endPoint(), 1.0);
190641
+ this.addHalfEdge(graph, p, last.point, last.fraction, p.endPoint(), 1.0, mergeTolerance);
190623
190642
  }
190624
- _topology_Merging__WEBPACK_IMPORTED_MODULE_1__.HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he) => he.sortAngle);
190643
+ _topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he) => he.sortAngle);
190625
190644
  return graph;
190626
190645
  }
190627
190646
  /**
@@ -190633,19 +190652,21 @@ class PlanarSubdivision {
190633
190652
  * @param point0 start point
190634
190653
  * @param fraction1 end fraction
190635
190654
  * @param point1 end point
190636
- */
190637
- static addHalfEdge(graph, p, point0, fraction0, point1, fraction1) {
190638
- if (!point0.isAlmostEqual(point1)) {
190639
- const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);
190640
- const detail01 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);
190641
- const mate = halfEdge.edgeMate;
190642
- halfEdge.edgeTag = detail01;
190643
- halfEdge.sortData = 1.0;
190644
- mate.edgeTag = detail01;
190645
- mate.sortData = -1.0;
190646
- halfEdge.sortAngle = sortAngle(detail01.curve, detail01.fraction, false);
190647
- mate.sortAngle = sortAngle(detail01.curve, detail01.fraction1, true);
190648
- }
190655
+ * @returns end point and fraction, or start point and fraction if no action
190656
+ */
190657
+ static addHalfEdge(graph, p, point0, fraction0, point1, fraction1, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
190658
+ if (point0.isAlmostEqualXY(point1, mergeTolerance))
190659
+ return { point: point0, fraction: fraction0 };
190660
+ const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);
190661
+ const detail01 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);
190662
+ const mate = halfEdge.edgeMate;
190663
+ halfEdge.edgeTag = detail01;
190664
+ halfEdge.sortData = 1.0;
190665
+ mate.edgeTag = detail01;
190666
+ mate.sortData = -1.0;
190667
+ halfEdge.sortAngle = sortAngle(p, fraction0, false);
190668
+ mate.sortAngle = sortAngle(p, fraction1, true);
190669
+ return { point: point1, fraction: fraction1 };
190649
190670
  }
190650
190671
  /**
190651
190672
  * Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.
@@ -190654,7 +190675,7 @@ class PlanarSubdivision {
190654
190675
  * @returns the area (forced to zero if within tolerance)
190655
190676
  */
190656
190677
  static collectSignedLoop(loop, outLoops, zeroAreaTolerance = 1.0e-10, isSliverFace) {
190657
- let area = isSliverFace ? 0.0 : _RegionOps__WEBPACK_IMPORTED_MODULE_3__.RegionOps.computeXYArea(loop);
190678
+ let area = isSliverFace ? 0.0 : _RegionOps__WEBPACK_IMPORTED_MODULE_7__.RegionOps.computeXYArea(loop);
190658
190679
  if (area === undefined)
190659
190680
  area = 0;
190660
190681
  if (Math.abs(area) < zeroAreaTolerance)
@@ -190670,7 +190691,7 @@ class PlanarSubdivision {
190670
190691
  }
190671
190692
  static createLoopInFace(faceSeed, announce) {
190672
190693
  let he = faceSeed;
190673
- const loop = _Loop__WEBPACK_IMPORTED_MODULE_4__.Loop.create();
190694
+ const loop = _Loop__WEBPACK_IMPORTED_MODULE_8__.Loop.create();
190674
190695
  do {
190675
190696
  const detail = he.edgeTag;
190676
190697
  if (detail) {
@@ -190694,9 +190715,9 @@ class PlanarSubdivision {
190694
190715
  const faceHasTwoEdges = (he.faceSuccessor.faceSuccessor === he);
190695
190716
  let faceIsBanana = false;
190696
190717
  if (faceHasTwoEdges) {
190697
- const c0 = _topology_Merging__WEBPACK_IMPORTED_MODULE_1__.HalfEdgeGraphMerge.curvatureSortKey(he);
190698
- const c1 = _topology_Merging__WEBPACK_IMPORTED_MODULE_1__.HalfEdgeGraphMerge.curvatureSortKey(he.faceSuccessor.edgeMate);
190699
- if (!_Geometry__WEBPACK_IMPORTED_MODULE_5__.Geometry.isSameCoordinate(c0, c1)) // default tol!
190718
+ const c0 = _topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.curvatureSortKey(he);
190719
+ const c1 = _topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.curvatureSortKey(he.faceSuccessor.edgeMate);
190720
+ if (!_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(c0, c1)) // default tol!
190700
190721
  faceIsBanana = true; // heuristic: we could also check end curvatures, and/or higher derivatives...
190701
190722
  }
190702
190723
  return faceHasTwoEdges && !faceIsBanana;
@@ -190714,7 +190735,7 @@ class PlanarSubdivision {
190714
190735
  return e1;
190715
190736
  }
190716
190737
  static collectSignedLoopSetsInHalfEdgeGraph(graph, zeroAreaTolerance = 1.0e-10) {
190717
- const q = _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);
190738
+ const q = _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_9__.HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);
190718
190739
  const result = [];
190719
190740
  const edgeMap = new Map();
190720
190741
  for (const faceSeeds of q) {
@@ -190729,10 +190750,10 @@ class PlanarSubdivision {
190729
190750
  const e = edgeMap.get(mate);
190730
190751
  if (e === undefined) {
190731
190752
  // Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge
190732
- const e1 = new _Loop__WEBPACK_IMPORTED_MODULE_4__.LoopCurveLoopCurve(loopC, curveC, undefined, undefined);
190753
+ const e1 = new _Loop__WEBPACK_IMPORTED_MODULE_8__.LoopCurveLoopCurve(loopC, curveC, undefined, undefined);
190733
190754
  edgeMap.set(he, e1);
190734
190755
  }
190735
- else if (e instanceof _Loop__WEBPACK_IMPORTED_MODULE_4__.LoopCurveLoopCurve) {
190756
+ else if (e instanceof _Loop__WEBPACK_IMPORTED_MODULE_8__.LoopCurveLoopCurve) {
190736
190757
  e.setB(loopC, curveC);
190737
190758
  edges.push(e);
190738
190759
  edgeMap.delete(mate);
@@ -191580,27 +191601,27 @@ __webpack_require__.r(__webpack_exports__);
191580
191601
  /* harmony import */ var _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry4d/MomentData */ "../../core/geometry/lib/esm/geometry4d/MomentData.js");
191581
191602
  /* harmony import */ var _polyface_PolyfaceBuilder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../polyface/PolyfaceBuilder */ "../../core/geometry/lib/esm/polyface/PolyfaceBuilder.js");
191582
191603
  /* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
191604
+ /* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
191583
191605
  /* harmony import */ var _topology_Triangulation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../topology/Triangulation */ "../../core/geometry/lib/esm/topology/Triangulation.js");
191584
191606
  /* harmony import */ var _ChainCollectorContext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ChainCollectorContext */ "../../core/geometry/lib/esm/curve/ChainCollectorContext.js");
191585
191607
  /* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
191586
191608
  /* harmony import */ var _CurveCurve__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./CurveCurve */ "../../core/geometry/lib/esm/curve/CurveCurve.js");
191587
191609
  /* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
191588
191610
  /* harmony import */ var _CurveWireMomentsXYZ__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CurveWireMomentsXYZ */ "../../core/geometry/lib/esm/curve/CurveWireMomentsXYZ.js");
191611
+ /* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
191612
+ /* harmony import */ var _internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
191589
191613
  /* harmony import */ var _internalContexts_PolygonOffsetContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./internalContexts/PolygonOffsetContext */ "../../core/geometry/lib/esm/curve/internalContexts/PolygonOffsetContext.js");
191590
191614
  /* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
191591
191615
  /* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
191616
+ /* harmony import */ var _ParityRegion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ParityRegion */ "../../core/geometry/lib/esm/curve/ParityRegion.js");
191592
191617
  /* harmony import */ var _Path__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./Path */ "../../core/geometry/lib/esm/curve/Path.js");
191593
191618
  /* harmony import */ var _Query_ConsolidateAdjacentPrimitivesContext__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./Query/ConsolidateAdjacentPrimitivesContext */ "../../core/geometry/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js");
191594
191619
  /* harmony import */ var _Query_CurveSplitContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Query/CurveSplitContext */ "../../core/geometry/lib/esm/curve/Query/CurveSplitContext.js");
191595
191620
  /* harmony import */ var _Query_InOutTests__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./Query/InOutTests */ "../../core/geometry/lib/esm/curve/Query/InOutTests.js");
191596
191621
  /* harmony import */ var _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Query/PlanarSubdivision */ "../../core/geometry/lib/esm/curve/Query/PlanarSubdivision.js");
191597
191622
  /* harmony import */ var _RegionMomentsXY__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RegionMomentsXY */ "../../core/geometry/lib/esm/curve/RegionMomentsXY.js");
191598
- /* harmony import */ var _internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
191599
- /* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
191600
191623
  /* harmony import */ var _RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./RegionOpsClassificationSweeps */ "../../core/geometry/lib/esm/curve/RegionOpsClassificationSweeps.js");
191601
191624
  /* harmony import */ var _UnionRegion__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./UnionRegion */ "../../core/geometry/lib/esm/curve/UnionRegion.js");
191602
- /* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
191603
- /* harmony import */ var _ParityRegion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ParityRegion */ "../../core/geometry/lib/esm/curve/ParityRegion.js");
191604
191625
  /*---------------------------------------------------------------------------------------------
191605
191626
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
191606
191627
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -191839,7 +191860,7 @@ class RegionOps {
191839
191860
  * @param loopsB second set of loops
191840
191861
  * @param operation indicates Union, Intersection, Parity, AMinusB, or BMinusA
191841
191862
  * @param mergeTolerance absolute distance tolerance for merging loops
191842
- * @returns a region resulting from merging input loops and the boolean operation. May contain bridge edges connecting interior loops to exterior loops.
191863
+ * @returns a region resulting from merging input loops and the boolean operation. May contain bridge edges added to connect interior loops to exterior loops.
191843
191864
  */
191844
191865
  static regionBooleanXY(loopsA, loopsB, operation, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance) {
191845
191866
  const result = _UnionRegion__WEBPACK_IMPORTED_MODULE_11__.UnionRegion.create();
@@ -191847,7 +191868,7 @@ class RegionOps {
191847
191868
  context.addMembers(loopsA, loopsB);
191848
191869
  context.annotateAndMergeCurvesInGraph(mergeTolerance);
191849
191870
  const range = context.groupA.range().union(context.groupB.range());
191850
- const areaTol = this.computeXYAreaTolerance(range);
191871
+ const areaTol = this.computeXYAreaTolerance(range, mergeTolerance);
191851
191872
  context.runClassificationSweep(operation, (_graph, face, faceType, area) => {
191852
191873
  // ignore danglers and null faces, but not 2-edge "banana" faces with nonzero area
191853
191874
  if (face.countEdgesAroundFace() < 2)
@@ -192165,23 +192186,24 @@ class RegionOps {
192165
192186
  }
192166
192187
  /**
192167
192188
  * Find all areas bounded by the unstructured, possibly intersecting curves.
192168
- * * This method performs no merging of nearly coincident edges and vertices, which can lead to unexpected results
192169
- * given sufficiently imprecise input. Input geometry consisting of regions can be merged for better results by pre-processing with
192170
- * [[regionBooleanXY]].
192189
+ * * A common use case of this method is to assemble the bounding "exterior" loop (or loops) containing the input curves.
192190
+ * * This method does not add bridge edges to connect outer loops to inner loops. Each disconnected loop, regardless
192191
+ * of its containment, is returned as its own SignedLoops object. Pre-process with [[regionBooleanXY]] to add bridge edges so that
192192
+ * [[constructAllXYRegionLoops]] will return outer and inner loops in the same SignedLoops object.
192171
192193
  * @param curvesAndRegions Any collection of curves. Each Loop/ParityRegion/UnionRegion contributes its curve primitives.
192194
+ * @param tolerance optional distance tolerance for coincidence
192172
192195
  * @returns array of [[SignedLoops]], each entry of which describes the faces in a single connected component:
192173
192196
  * * `positiveAreaLoops` contains "interior" loops, _including holes in ParityRegion input_. These loops have positive area and counterclockwise orientation.
192174
192197
  * * `negativeAreaLoops` contains (probably just one) "exterior" loop which is ordered clockwise.
192175
192198
  * * `slivers` contains sliver loops that have zero area, such as appear between coincident curves.
192176
192199
  * * `edges` contains a [[LoopCurveLoopCurve]] object for each component edge, collecting both loops adjacent to the edge and a constituent curve in each.
192177
192200
  */
192178
- static constructAllXYRegionLoops(curvesAndRegions) {
192179
- const primitivesA = RegionOps.collectCurvePrimitives(curvesAndRegions, undefined, true);
192180
- const primitivesB = this.expandLineStrings(primitivesA);
192181
- const range = this.curveArrayRange(primitivesB);
192182
- const areaTol = this.computeXYAreaTolerance(range);
192183
- const intersections = _CurveCurve__WEBPACK_IMPORTED_MODULE_30__.CurveCurve.allIntersectionsAmongPrimitivesXY(primitivesB);
192184
- const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.assembleHalfEdgeGraph(primitivesB, intersections);
192201
+ static constructAllXYRegionLoops(curvesAndRegions, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance) {
192202
+ const primitives = RegionOps.collectCurvePrimitives(curvesAndRegions, undefined, true, true);
192203
+ const range = this.curveArrayRange(primitives);
192204
+ const areaTol = this.computeXYAreaTolerance(range, tolerance);
192205
+ const intersections = _CurveCurve__WEBPACK_IMPORTED_MODULE_30__.CurveCurve.allIntersectionsAmongPrimitivesXY(primitives, tolerance);
192206
+ const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.assembleHalfEdgeGraph(primitives, intersections, tolerance);
192185
192207
  return _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.collectSignedLoopSetsInHalfEdgeGraph(graph, areaTol);
192186
192208
  }
192187
192209
  /**
@@ -192797,7 +192819,7 @@ class RegionBooleanContext {
192797
192819
  }
192798
192820
  // const range = RegionOps.curveArrayRange(allPrimitives);
192799
192821
  const intersections = _CurveCurve__WEBPACK_IMPORTED_MODULE_15__.CurveCurve.allIntersectionsAmongPrimitivesXY(allPrimitives, mergeTolerance);
192800
- const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_16__.PlanarSubdivision.assembleHalfEdgeGraph(allPrimitives, intersections);
192822
+ const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_16__.PlanarSubdivision.assembleHalfEdgeGraph(allPrimitives, intersections, mergeTolerance);
192801
192823
  this.graph = graph;
192802
192824
  this.faceAreaFunction = faceAreaFromCurvedEdgeData;
192803
192825
  }
@@ -199896,15 +199918,20 @@ __webpack_require__.r(__webpack_exports__);
199896
199918
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
199897
199919
  /* harmony export */ "CoincidentGeometryQuery": () => (/* binding */ CoincidentGeometryQuery)
199898
199920
  /* harmony export */ });
199899
- /* harmony import */ var _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../curve/CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
199900
- /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
199901
- /* harmony import */ var _AngleSweep__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AngleSweep */ "../../core/geometry/lib/esm/geometry3d/AngleSweep.js");
199902
- /* harmony import */ var _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
199903
- /* harmony import */ var _Segment1d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Segment1d */ "../../core/geometry/lib/esm/geometry3d/Segment1d.js");
199921
+ /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
199922
+ /* harmony import */ var _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../curve/CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
199923
+ /* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
199924
+ /* harmony import */ var _AngleSweep__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AngleSweep */ "../../core/geometry/lib/esm/geometry3d/AngleSweep.js");
199925
+ /* harmony import */ var _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
199926
+ /* harmony import */ var _Segment1d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Segment1d */ "../../core/geometry/lib/esm/geometry3d/Segment1d.js");
199904
199927
  /*---------------------------------------------------------------------------------------------
199905
199928
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
199906
199929
  * See LICENSE.md in the project root for license terms and full copyright notice.
199907
199930
  *--------------------------------------------------------------------------------------------*/
199931
+ /** @packageDocumentation
199932
+ * @module CartesianGeometry
199933
+ */
199934
+
199908
199935
 
199909
199936
 
199910
199937
 
@@ -199920,10 +199947,10 @@ class CoincidentGeometryQuery {
199920
199947
  get tolerance() {
199921
199948
  return this._tolerance;
199922
199949
  }
199923
- constructor(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
199950
+ constructor(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallMetricDistance) {
199924
199951
  this._tolerance = tolerance;
199925
199952
  }
199926
- static create(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
199953
+ static create(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallMetricDistance) {
199927
199954
  return new CoincidentGeometryQuery(tolerance);
199928
199955
  }
199929
199956
  /**
@@ -199946,12 +199973,12 @@ class CoincidentGeometryQuery {
199946
199973
  *
199947
199974
  */
199948
199975
  projectPointToSegmentXY(spacePoint, pointA, pointB) {
199949
- this._vectorU = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createStartEnd(pointA, pointB, this._vectorU);
199950
- this._vectorV = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createStartEnd(pointA, spacePoint, this._vectorV);
199976
+ this._vectorU = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(pointA, pointB, this._vectorU);
199977
+ this._vectorV = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(pointA, spacePoint, this._vectorV);
199951
199978
  const uDotU = this._vectorU.dotProductXY(this._vectorU);
199952
199979
  const uDotV = this._vectorU.dotProductXY(this._vectorV);
199953
- const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.safeDivideFraction(uDotV, uDotU, 0.0);
199954
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetail.createCurveFractionPoint(undefined, fraction, pointA.interpolate(fraction, pointB));
199980
+ const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(uDotV, uDotU, 0.0);
199981
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(undefined, fraction, pointA.interpolate(fraction, pointB));
199955
199982
  }
199956
199983
  /**
199957
199984
  * * project `pointA0` and `pointA1` onto the segment with `pointB0` and `pointB1`
@@ -199962,84 +199989,82 @@ class CoincidentGeometryQuery {
199962
199989
  * @param pointB1 end point of segment B
199963
199990
  */
199964
199991
  coincidentSegmentRangeXY(pointA0, pointA1, pointB0, pointB1, restrictToBounds = true) {
199965
- const detailAOnB = this.projectPointToSegmentXY(pointA0, pointB0, pointB1);
199966
- if (pointA0.distanceXY(detailAOnB.point) > this._tolerance)
199992
+ const detailA0OnB = this.projectPointToSegmentXY(pointA0, pointB0, pointB1);
199993
+ if (pointA0.distanceXY(detailA0OnB.point) > this._tolerance)
199967
199994
  return undefined;
199968
199995
  const detailA1OnB = this.projectPointToSegmentXY(pointA1, pointB0, pointB1);
199969
199996
  if (pointA1.distanceXY(detailA1OnB.point) > this._tolerance)
199970
199997
  return undefined;
199971
- const detailBOnA = this.projectPointToSegmentXY(pointB0, pointA0, pointA1);
199972
- if (pointB0.distanceXY(detailBOnA.point) > this._tolerance)
199998
+ const detailB0OnA = this.projectPointToSegmentXY(pointB0, pointA0, pointA1);
199999
+ if (pointB0.distanceXY(detailB0OnA.point) > this._tolerance)
199973
200000
  return undefined;
199974
200001
  const detailB1OnA = this.projectPointToSegmentXY(pointB1, pointA0, pointA1);
199975
200002
  if (pointB1.distanceXY(detailB1OnA.point) > this._tolerance)
199976
200003
  return undefined;
199977
- detailAOnB.fraction1 = detailA1OnB.fraction;
199978
- detailAOnB.point1 = detailA1OnB.point; // capture -- detailB0OnA is not reused.
199979
- detailBOnA.fraction1 = detailB1OnA.fraction;
199980
- detailBOnA.point1 = detailB1OnA.point;
200004
+ detailA0OnB.fraction1 = detailA1OnB.fraction;
200005
+ detailA0OnB.point1 = detailA1OnB.point; // capture -- detailA1OnB is not reused.
200006
+ detailB0OnA.fraction1 = detailB1OnA.fraction;
200007
+ detailB0OnA.point1 = detailB1OnA.point;
199981
200008
  if (!restrictToBounds)
199982
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
199983
- const segment = _Segment1d__WEBPACK_IMPORTED_MODULE_3__.Segment1d.create(detailBOnA.fraction, detailBOnA.fraction1);
200009
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
200010
+ const segment = _Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(detailB0OnA.fraction, detailB0OnA.fraction1);
199984
200011
  if (segment.clampDirectedTo01()) {
199985
- segment.reverseIfNeededForDeltaSign(1.0);
199986
200012
  const f0 = segment.x0;
199987
200013
  const f1 = segment.x1;
199988
- const h0 = detailBOnA.inverseInterpolateFraction(f0);
199989
- const h1 = detailBOnA.inverseInterpolateFraction(f1);
200014
+ const h0 = detailB0OnA.inverseInterpolateFraction(f0);
200015
+ const h1 = detailB0OnA.inverseInterpolateFraction(f1);
199990
200016
  // recompute fractions and points..
199991
- CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailBOnA, f0, f1, pointA0, pointA1);
199992
- CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailAOnB, h0, h1, pointB0, pointB1);
199993
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
200017
+ CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailB0OnA, f0, f1, pointA0, pointA1, f0 > f1);
200018
+ CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailA0OnB, h0, h1, pointB0, pointB1, h0 > h1);
200019
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
199994
200020
  }
199995
200021
  else {
199996
200022
  if (segment.signedDelta() < 0.0) {
199997
- if (detailBOnA.point.isAlmostEqual(pointA0)) {
199998
- detailBOnA.collapseToStart();
199999
- detailAOnB.collapseToStart();
200000
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
200023
+ if (detailB0OnA.point.isAlmostEqual(pointA0, this.tolerance)) {
200024
+ detailB0OnA.collapseToStart();
200025
+ detailA0OnB.collapseToStart();
200026
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
200001
200027
  }
200002
- if (detailBOnA.point1.isAlmostEqual(pointA1)) {
200003
- detailBOnA.collapseToEnd();
200004
- detailAOnB.collapseToEnd();
200005
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
200028
+ if (detailB0OnA.point1.isAlmostEqual(pointA1, this.tolerance)) {
200029
+ detailB0OnA.collapseToEnd();
200030
+ detailA0OnB.collapseToEnd();
200031
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
200006
200032
  }
200007
200033
  }
200008
200034
  else {
200009
- if (detailBOnA.point.isAlmostEqual(pointA1)) {
200010
- detailBOnA.collapseToStart();
200011
- detailAOnB.collapseToEnd();
200012
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
200035
+ if (detailB0OnA.point.isAlmostEqual(pointA1, this.tolerance)) {
200036
+ detailB0OnA.collapseToStart();
200037
+ detailA0OnB.collapseToEnd();
200038
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
200013
200039
  }
200014
- if (detailBOnA.point1.isAlmostEqual(pointA0)) {
200015
- detailBOnA.collapseToEnd();
200016
- detailAOnB.collapseToStart();
200017
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailBOnA, detailAOnB);
200040
+ if (detailB0OnA.point1.isAlmostEqual(pointA0, this.tolerance)) {
200041
+ detailB0OnA.collapseToEnd();
200042
+ detailA0OnB.collapseToStart();
200043
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
200018
200044
  }
200019
200045
  }
200020
200046
  }
200021
200047
  return undefined;
200022
200048
  }
200023
200049
  /**
200024
- * Create a CurveLocationDetailPair from . . .
200050
+ * Create a CurveLocationDetailPair for a coincident interval of two overlapping curves
200025
200051
  * @param cpA curveA
200026
- * @param cpB curve B
200027
- * @param fractionsOnA fractions of an active section of curveA
200028
- * @param fractionB0 fraction of an original containing B interval
200029
- * @param fractionB1 end fraction of an original containing B interval
200052
+ * @param cpB curveB
200053
+ * @param fractionsOnA coincident interval of curveB in fraction space of curveA
200054
+ * @param fractionB0 curveB start in fraction space of curveA
200055
+ * @param fractionB1 curveB end in fraction space of curveA
200056
+ * @param reverse whether curveB and curveA have opposite direction
200030
200057
  */
200031
200058
  createDetailPair(cpA, cpB, fractionsOnA, fractionB0, fractionB1, reverse) {
200032
200059
  const deltaB = fractionB1 - fractionB0;
200033
- const g0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(fractionsOnA.x0 - fractionB0, deltaB);
200034
- const g1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(fractionsOnA.x1 - fractionB0, deltaB);
200060
+ const g0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(fractionsOnA.x0 - fractionB0, deltaB);
200061
+ const g1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(fractionsOnA.x1 - fractionB0, deltaB);
200035
200062
  if (g0 !== undefined && g1 !== undefined) {
200036
- const detailA = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpA, fractionsOnA.x0, fractionsOnA.x1);
200037
- const detailB = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpB, g0, g1);
200038
- if (reverse) {
200063
+ const detailA = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpA, fractionsOnA.x0, fractionsOnA.x1);
200064
+ const detailB = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpB, g0, g1);
200065
+ if (reverse)
200039
200066
  detailA.swapFractionsAndPoints();
200040
- detailB.swapFractionsAndPoints();
200041
- }
200042
- return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailA, detailB);
200067
+ return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailA, detailB);
200043
200068
  }
200044
200069
  return undefined;
200045
200070
  }
@@ -200056,43 +200081,67 @@ class CoincidentGeometryQuery {
200056
200081
  * @param arcA
200057
200082
  * @param arcB
200058
200083
  * @param _restrictToBounds
200059
- * @return 0, 1, or 2 overlap intervals.
200084
+ * @return 0, 1, or 2 overlap points/intervals
200060
200085
  */
200061
200086
  coincidentArcIntersectionXY(arcA, arcB, _restrictToBounds = true) {
200062
200087
  let result;
200063
- if (arcA.center.isAlmostEqual(arcB.center)) {
200088
+ if (arcA.center.isAlmostEqual(arcB.center, this.tolerance)) {
200064
200089
  const matrixBToA = arcA.matrixRef.multiplyMatrixInverseMatrix(arcB.matrixRef);
200065
200090
  if (matrixBToA) {
200066
200091
  const ux = matrixBToA.at(0, 0);
200067
200092
  const uy = matrixBToA.at(1, 0);
200068
200093
  const vx = matrixBToA.at(0, 1);
200069
200094
  const vy = matrixBToA.at(1, 1);
200070
- const ru = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXY(ux, uy);
200071
- const rv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXY(vx, vy);
200072
- const dot = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYXY(ux, uy, vx, vy);
200073
- const cross = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
200074
- if (_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isAlmostEqualNumber(ru, 1.0)
200075
- && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isAlmostEqualNumber(rv, 1.0)
200076
- && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isAlmostEqualNumber(0, dot)) {
200077
- const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in A sweep
200078
- const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB's parameter space sweeps forward, -1 if reverse
200079
- const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians;
200080
- const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians;
200095
+ const ru = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(ux, uy);
200096
+ const rv = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(vx, vy);
200097
+ const dot = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.dotProductXYXY(ux, uy, vx, vy);
200098
+ const cross = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(ux, uy, vx, vy);
200099
+ if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(ru, 1.0)
200100
+ && _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(rv, 1.0)
200101
+ && _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(0, dot)) {
200102
+ const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in arcA sweep
200103
+ const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB parameter space sweeps in same direction as arcA, -1 if opposite
200104
+ const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians; // arcB start in arcA parameter space
200105
+ const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians; // arcB end in arcA parameter space
200081
200106
  const fractionSpacesReversed = (sweepDirection * arcA.sweep.sweepRadians * arcB.sweep.sweepRadians) < 0;
200082
- const sweepB = _AngleSweep__WEBPACK_IMPORTED_MODULE_4__.AngleSweep.createStartEndRadians(betaStartRadians, betaEndRadians);
200107
+ const sweepB = _AngleSweep__WEBPACK_IMPORTED_MODULE_5__.AngleSweep.createStartEndRadians(betaStartRadians, betaEndRadians);
200083
200108
  const sweepA = arcA.sweep;
200084
200109
  const fractionPeriodA = sweepA.fractionPeriod();
200085
- const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians);
200086
- const fractionSweep = sweepB.sweepRadians / sweepA.sweepRadians;
200087
- const fractionB1 = fractionB0 + fractionSweep;
200088
- const fractionSweepB = _Segment1d__WEBPACK_IMPORTED_MODULE_3__.Segment1d.create(fractionB0, fractionB1);
200089
- if (fractionSweepB.clampDirectedTo01())
200090
- result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, fractionSweepB, fractionB0, fractionB1, fractionSpacesReversed));
200091
- if (fractionB1 > fractionPeriodA) {
200092
- const fractionSweepBWrap = _Segment1d__WEBPACK_IMPORTED_MODULE_3__.Segment1d.create(fractionB0 - fractionPeriodA, fractionB1 - fractionPeriodA);
200093
- if (fractionSweepBWrap.clampDirectedTo01())
200094
- result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, fractionSweepBWrap, fractionB0, fractionB1, fractionSpacesReversed));
200095
- }
200110
+ const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians); // arcB start in arcA fraction space
200111
+ (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(fractionB0 >= 0.0);
200112
+ const fractionSweep = sweepB.sweepRadians / sweepA.sweepRadians; // arcB sweep in arcA fraction space
200113
+ const fractionB1 = fractionB0 + fractionSweep; // arcB end in arcA fraction space
200114
+ const fractionSweepB = _Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0, fractionB1);
200115
+ /** lambda to add a coincident interval or isolated intersection, given inputs in arcA fraction space
200116
+ * @param arcBInArcAFractionSpace span of arcB in arcA fraction space. On return, clamped to [0,1] if nontrivial.
200117
+ * @param testStartOfArcA if no nontrivial coincident interval was found, look for an isolated intersection at the start (true) or end (false) of arcA
200118
+ * @returns whether a detail pair was appended to result
200119
+ */
200120
+ const appendCoincidentIntersection = (arcBInArcAFractionSpace, testStartOfArcA) => {
200121
+ const size = result ? result.length : 0;
200122
+ const arcBStart = arcBInArcAFractionSpace.x0;
200123
+ const arcBEnd = arcBInArcAFractionSpace.x1;
200124
+ if (arcBInArcAFractionSpace.clampDirectedTo01() && !_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isSmallRelative(arcBInArcAFractionSpace.absoluteDelta())) {
200125
+ result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, arcBInArcAFractionSpace, arcBStart, arcBEnd, fractionSpacesReversed));
200126
+ }
200127
+ else { // test isolated intersection
200128
+ const testStartOfArcB = fractionSpacesReversed ? testStartOfArcA : !testStartOfArcA;
200129
+ const arcAPt = this._point0 = testStartOfArcA ? arcA.startPoint(this._point0) : arcA.endPoint(this._point0);
200130
+ const arcBPt = this._point1 = testStartOfArcB ? arcB.startPoint(this._point1) : arcB.endPoint(this._point1);
200131
+ if (arcAPt.isAlmostEqual(arcBPt, this.tolerance)) {
200132
+ const detailA = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(arcA, testStartOfArcA ? 0 : 1, arcAPt);
200133
+ const detailB = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(arcB, testStartOfArcB ? 0 : 1, arcBPt);
200134
+ result = this.appendDetailPair(result, _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailA, detailB));
200135
+ }
200136
+ }
200137
+ return result !== undefined && result.length > size;
200138
+ };
200139
+ appendCoincidentIntersection(fractionSweepB, false); // compute overlap in strict interior, or at end of arcA
200140
+ // check overlap at start of arcA with a periodic shift of fractionSweepB
200141
+ if (fractionB1 >= fractionPeriodA)
200142
+ appendCoincidentIntersection(_Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0 - fractionPeriodA, fractionB1 - fractionPeriodA), true);
200143
+ else if (fractionB0 === 0.0)
200144
+ appendCoincidentIntersection(_Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0 + fractionPeriodA, fractionB1 + fractionPeriodA), true);
200096
200145
  }
200097
200146
  }
200098
200147
  }
@@ -206978,7 +207027,7 @@ class Matrix3d {
206978
207027
  * almost independent and matrix is invertible).
206979
207028
  */
206980
207029
  conditionNumber() {
206981
- const determinant = this.determinant();
207030
+ const determinant = Math.abs(this.determinant());
206982
207031
  const columnMagnitudeSum = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[0], this.coffs[3], this.coffs[6])
206983
207032
  + _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[1], this.coffs[4], this.coffs[7])
206984
207033
  + _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[2], this.coffs[5], this.coffs[8]);
@@ -251940,6 +251989,7 @@ class HalfEdgeGraphOps {
251940
251989
  }
251941
251990
  }
251942
251991
  /**
251992
+ * Note: this class uses hardcoded micrometer coordinate/cluster tolerance throughout.
251943
251993
  * @internal
251944
251994
  */
251945
251995
  class HalfEdgeGraphMerge {
@@ -274591,7 +274641,7 @@ class TestContext {
274591
274641
  this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
274592
274642
  const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
274593
274643
  await core_frontend_1.NoRenderApp.startup({
274594
- applicationVersion: "4.0.0-dev.100",
274644
+ applicationVersion: "4.0.0-dev.101",
274595
274645
  applicationId: this.settings.gprid,
274596
274646
  authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
274597
274647
  hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
@@ -282002,13 +282052,13 @@ class FavoritePropertiesManager {
282002
282052
  });
282003
282053
  if (missingClasses.size === 0)
282004
282054
  return baseClasses;
282005
- const query = `
282006
- SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
282007
- FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
282008
- INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
282009
- INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
282010
- INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
282011
- INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
282055
+ const query = `
282056
+ SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
282057
+ FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
282058
+ INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
282059
+ INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
282060
+ INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
282061
+ INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
282012
282062
  WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(",")})`;
282013
282063
  const reader = imodel.createQueryReader(query, undefined, { rowFormat: _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.QueryRowFormat.UseJsPropertyNames });
282014
282064
  while (await reader.step()) {
@@ -293966,7 +294016,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
293966
294016
  /***/ ((module) => {
293967
294017
 
293968
294018
  "use strict";
293969
- module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.100","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","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-eslintrc -c \\"./node_modules/@itwin/eslint-plugin/dist/configs/extension-exports-config.js\\" \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.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:^4.0.0-dev.100","@itwin/core-bentley":"workspace:^4.0.0-dev.100","@itwin/core-common":"workspace:^4.0.0-dev.100","@itwin/core-geometry":"workspace:^4.0.0-dev.100","@itwin/core-orbitgt":"workspace:^4.0.0-dev.100","@itwin/core-quantity":"workspace:^4.0.0-dev.100"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"^4.0.0-dev.33","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/node":"^18.11.5","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.36.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~5.0.2","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/object-storage-azure":"^1.5.0","@itwin/cloud-agnostic-core":"^1.5.0","@itwin/object-storage-core":"^1.5.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
294019
+ module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.101","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","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-eslintrc -c \\"./node_modules/@itwin/eslint-plugin/dist/configs/extension-exports-config.js\\" \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.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:^4.0.0-dev.101","@itwin/core-bentley":"workspace:^4.0.0-dev.101","@itwin/core-common":"workspace:^4.0.0-dev.101","@itwin/core-geometry":"workspace:^4.0.0-dev.101","@itwin/core-orbitgt":"workspace:^4.0.0-dev.101","@itwin/core-quantity":"workspace:^4.0.0-dev.101"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"^4.0.0-dev.33","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/node":"^18.11.5","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^8.36.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~5.0.2","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/object-storage-azure":"^1.5.0","@itwin/cloud-agnostic-core":"^1.5.0","@itwin/object-storage-core":"^1.5.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","fuse.js":"^3.3.0","wms-capabilities":"0.4.0","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
293970
294020
 
293971
294021
  /***/ }),
293972
294022