@itwin/ecschema-rpcinterface-tests 4.0.0-dev.100 → 4.0.0-dev.102
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.
- package/lib/dist/_a8a9.bundled-tests.js.map +1 -1
- package/lib/dist/bundled-tests.js +221 -171
- package/lib/dist/bundled-tests.js.map +1 -1
- package/lib/dist/core_frontend_lib_esm_ApproximateTerrainHeightsProps_js.bundled-tests.js.map +1 -1
- package/lib/dist/object-storage.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_itwin_object-storage-azure_1_6_0_node_modules_itwin_obj-0f69b1.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_loaders_gl_draco_3_3_3_node_modules_loaders_gl_draco_di-28f62e.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_reflect-metadata_0_1_13_node_modules_reflect-metadata_R-610cb3.bundled-tests.js.map +1 -1
- package/package.json +15 -15
|
@@ -149497,7 +149497,8 @@ class MapTile extends _internal__WEBPACK_IMPORTED_MODULE_7__.RealityTile {
|
|
|
149497
149497
|
}
|
|
149498
149498
|
/** @internal */
|
|
149499
149499
|
minimumVisibleFactor() {
|
|
149500
|
-
|
|
149500
|
+
// if minimumVisibleFactor is more than 0, it stops parents from loading when children are not ready, to fill in gaps
|
|
149501
|
+
return 0.0;
|
|
149501
149502
|
}
|
|
149502
149503
|
/** @internal */
|
|
149503
149504
|
getDrapeTextures() {
|
|
@@ -166781,17 +166782,20 @@ class Geometry {
|
|
|
166781
166782
|
if (a2b2 > 0.0) {
|
|
166782
166783
|
const a2b2r = 1.0 / a2b2; // 1/(a^2+b^2)
|
|
166783
166784
|
const d2a2b2 = d2 * a2b2r; // d^2/(a^2+b^2)
|
|
166784
|
-
const
|
|
166785
|
-
if (
|
|
166785
|
+
const criterion = 1.0 - d2a2b2; // 1 - d^2/(a^2+b^2);
|
|
166786
|
+
if (criterion < -Geometry.smallMetricDistanceSquared) // nSolution = 0
|
|
166786
166787
|
return result;
|
|
166787
166788
|
const da2b2 = -constCoff * a2b2r; // -d/(a^2+b^2)
|
|
166789
|
+
// (c0,s0) is the closest approach of the line to the circle center (origin)
|
|
166788
166790
|
const c0 = da2b2 * cosCoff; // -ad/(a^2+b^2)
|
|
166789
166791
|
const s0 = da2b2 * sinCoff; // -bd/(a^2+b^2)
|
|
166790
|
-
if (
|
|
166792
|
+
if (criterion <= 0.0) { // nSolution = 1
|
|
166793
|
+
// We observed criterion = -2.22e-16 in a rotated tangent system, therefore for negative criteria near
|
|
166794
|
+
// zero, return the near-tangency; for tiny positive criteria, fall through to return both solutions.
|
|
166791
166795
|
result = [_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0, s0)];
|
|
166792
166796
|
}
|
|
166793
|
-
else
|
|
166794
|
-
const s = Math.sqrt(
|
|
166797
|
+
else { // nSolution = 2
|
|
166798
|
+
const s = Math.sqrt(criterion * a2b2r); // sqrt(a^2+b^2-d^2)) / (a^2+b^2)
|
|
166795
166799
|
result = [
|
|
166796
166800
|
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0 - s * sinCoff, s0 + s * cosCoff),
|
|
166797
166801
|
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(c0 + s * sinCoff, s0 - s * cosCoff),
|
|
@@ -181735,12 +181739,12 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
181735
181739
|
extendB, reversed) {
|
|
181736
181740
|
const inverseA = matrixA.inverse();
|
|
181737
181741
|
if (inverseA) {
|
|
181738
|
-
const localB = inverseA.multiplyMatrixMatrix(matrixB);
|
|
181742
|
+
const localB = inverseA.multiplyMatrixMatrix(matrixB); // localB->localA transform
|
|
181739
181743
|
const ellipseRadians = [];
|
|
181740
181744
|
const circleRadians = [];
|
|
181741
181745
|
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_6__.TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(localB.coffs[2], localB.coffs[5], localB.coffs[8], // center xyw
|
|
181742
|
-
localB.coffs[0], localB.coffs[3], localB.coffs[6], //
|
|
181743
|
-
localB.coffs[1], localB.coffs[4], localB.coffs[7], //
|
|
181746
|
+
localB.coffs[0], localB.coffs[3], localB.coffs[6], // vector0 xyw
|
|
181747
|
+
localB.coffs[1], localB.coffs[4], localB.coffs[7], // vector90 xyw
|
|
181744
181748
|
ellipseRadians, circleRadians);
|
|
181745
181749
|
for (let i = 0; i < ellipseRadians.length; i++) {
|
|
181746
181750
|
const fractionA = cpA.sweep.radiansToSignedPeriodicFraction(circleRadians[i]);
|
|
@@ -183687,7 +183691,7 @@ function optionalVectorUpdate(source, result) {
|
|
|
183687
183691
|
return undefined;
|
|
183688
183692
|
}
|
|
183689
183693
|
/**
|
|
183690
|
-
* CurveLocationDetail carries point and
|
|
183694
|
+
* CurveLocationDetail carries point and parameter data about a point evaluated on a curve.
|
|
183691
183695
|
* * These are returned by a variety of queries.
|
|
183692
183696
|
* * Particular contents can vary among the queries.
|
|
183693
183697
|
* @public
|
|
@@ -187931,13 +187935,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187931
187935
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
187932
187936
|
/* harmony export */ "PlanarSubdivision": () => (/* binding */ PlanarSubdivision)
|
|
187933
187937
|
/* harmony export */ });
|
|
187934
|
-
/* harmony import */ var
|
|
187935
|
-
/* harmony import */ var
|
|
187936
|
-
/* harmony import */ var
|
|
187937
|
-
/* harmony import */ var
|
|
187938
|
-
/* harmony import */ var
|
|
187939
|
-
/* harmony import */ var
|
|
187940
|
-
/* harmony import */ var
|
|
187938
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
187939
|
+
/* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
|
|
187940
|
+
/* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
|
|
187941
|
+
/* harmony import */ var _topology_Merging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../topology/Merging */ "../../core/geometry/lib/esm/topology/Merging.js");
|
|
187942
|
+
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
187943
|
+
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
187944
|
+
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
187945
|
+
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
187946
|
+
/* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
|
|
187947
|
+
/* harmony import */ var _RegionOps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../RegionOps */ "../../core/geometry/lib/esm/curve/RegionOps.js");
|
|
187941
187948
|
/*---------------------------------------------------------------------------------------------
|
|
187942
187949
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
187943
187950
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -187949,13 +187956,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187949
187956
|
|
|
187950
187957
|
|
|
187951
187958
|
|
|
187959
|
+
|
|
187960
|
+
|
|
187961
|
+
|
|
187952
187962
|
/** @packageDocumentation
|
|
187953
187963
|
* @module Curve
|
|
187954
187964
|
*/
|
|
187955
187965
|
class MapCurvePrimitiveToCurveLocationDetailPairArray {
|
|
187956
187966
|
constructor() {
|
|
187957
187967
|
this.primitiveToPair = new Map();
|
|
187958
|
-
// index assigned to this primitive for
|
|
187968
|
+
// index assigned to this primitive (for debugging)
|
|
187959
187969
|
this.primitiveToIndex = new Map();
|
|
187960
187970
|
this._numIndexedPrimitives = 0;
|
|
187961
187971
|
}
|
|
@@ -187987,54 +187997,63 @@ class MapCurvePrimitiveToCurveLocationDetailPairArray {
|
|
|
187987
187997
|
if (primitiveB)
|
|
187988
187998
|
this.insertPrimitiveToPair(primitiveB, pair);
|
|
187989
187999
|
}
|
|
188000
|
+
/** Split closed missing primitives in half and add new intersection pairs */
|
|
188001
|
+
splitAndAppendMissingClosedPrimitives(primitives, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
|
|
188002
|
+
for (const p of primitives) {
|
|
188003
|
+
let closedCurveSplitCandidate = false;
|
|
188004
|
+
if (p instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_1__.Arc3d)
|
|
188005
|
+
closedCurveSplitCandidate = p.sweep.isFullCircle;
|
|
188006
|
+
else if (!(p instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_2__.LineSegment3d) && !(p instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_3__.LineString3d))
|
|
188007
|
+
closedCurveSplitCandidate = p.startPoint().isAlmostEqualXY(p.endPoint(), tolerance);
|
|
188008
|
+
if (closedCurveSplitCandidate && !this.primitiveToPair.has(p)) {
|
|
188009
|
+
const p0 = p.clonePartialCurve(0.0, 0.5);
|
|
188010
|
+
const p1 = p.clonePartialCurve(0.5, 1.0);
|
|
188011
|
+
if (p0 && p1) {
|
|
188012
|
+
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)));
|
|
188013
|
+
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)));
|
|
188014
|
+
}
|
|
188015
|
+
}
|
|
188016
|
+
}
|
|
188017
|
+
}
|
|
187990
188018
|
}
|
|
187991
|
-
/*
|
|
187992
|
-
function getDetailString(detail: CurveLocationDetail | undefined): string {
|
|
187993
|
-
if (!detail)
|
|
187994
|
-
return "{}";
|
|
187995
|
-
else return tagString("primitive", this.primitiveToIndex.get(detail.curve!)) + tagString("f0", detail.fraction) + tagString("f1", detail.fraction1);
|
|
187996
|
-
}
|
|
187997
|
-
}
|
|
187998
|
-
function tagString(name: string, value: number | undefined): string {
|
|
187999
|
-
if (value !== undefined)
|
|
188000
|
-
return "(" + name + " " + value + ")";
|
|
188001
|
-
return "";
|
|
188002
|
-
}
|
|
188003
|
-
*/
|
|
188004
188019
|
/**
|
|
188005
188020
|
* @internal
|
|
188006
188021
|
*/
|
|
188007
188022
|
class PlanarSubdivision {
|
|
188008
|
-
/** Create a graph from an array of curves, and an array of the curves' precomputed intersections. */
|
|
188009
|
-
static assembleHalfEdgeGraph(primitives, allPairs) {
|
|
188023
|
+
/** Create a graph from an array of curves, and an array of the curves' precomputed intersections. Z-coordinates are ignored. */
|
|
188024
|
+
static assembleHalfEdgeGraph(primitives, allPairs, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
|
|
188010
188025
|
const detailByPrimitive = new MapCurvePrimitiveToCurveLocationDetailPairArray(); // map from key CurvePrimitive to CurveLocationDetailPair.
|
|
188011
|
-
for (const
|
|
188012
|
-
detailByPrimitive.assignPrimitiveIndex(p);
|
|
188013
|
-
for (const pair of allPairs) {
|
|
188026
|
+
for (const pair of allPairs)
|
|
188014
188027
|
detailByPrimitive.insertPair(pair);
|
|
188015
|
-
|
|
188016
|
-
|
|
188028
|
+
if (primitives.length > detailByPrimitive.primitiveToPair.size)
|
|
188029
|
+
detailByPrimitive.splitAndAppendMissingClosedPrimitives(primitives, mergeTolerance); // otherwise, these single-primitive loops are missing from the graph
|
|
188030
|
+
const graph = new _topology_Graph__WEBPACK_IMPORTED_MODULE_5__.HalfEdgeGraph();
|
|
188017
188031
|
for (const entry of detailByPrimitive.primitiveToPair.entries()) {
|
|
188018
188032
|
const p = entry[0];
|
|
188019
|
-
|
|
188033
|
+
// convert each interval intersection into two isolated intersections
|
|
188034
|
+
const details = entry[1].reduce((accumulator, detailPair) => {
|
|
188035
|
+
if (!detailPair.detailA.hasFraction1)
|
|
188036
|
+
return [...accumulator, detailPair];
|
|
188037
|
+
const detail = getDetailOnCurve(detailPair, p);
|
|
188038
|
+
const detail0 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction, detail.point);
|
|
188039
|
+
const detail1 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveFractionPoint(p, detail.fraction1, detail.point1);
|
|
188040
|
+
return [...accumulator, _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail0, detail0), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetailPair.createCapture(detail1, detail1)];
|
|
188041
|
+
}, []);
|
|
188042
|
+
// lexical sort on p intersection fraction
|
|
188020
188043
|
details.sort((pairA, pairB) => {
|
|
188021
188044
|
const fractionA = getFractionOnCurve(pairA, p);
|
|
188022
188045
|
const fractionB = getFractionOnCurve(pairB, p);
|
|
188023
|
-
if (fractionA === undefined || fractionB === undefined)
|
|
188024
|
-
return -1000.0;
|
|
188025
188046
|
return fractionA - fractionB;
|
|
188026
188047
|
});
|
|
188027
|
-
let
|
|
188028
|
-
|
|
188029
|
-
|
|
188030
|
-
|
|
188031
|
-
|
|
188032
|
-
this.addHalfEdge(graph, p, detail0.point, detail0.fraction, detail1.point, detail1.fraction);
|
|
188033
|
-
detail0 = detail1;
|
|
188048
|
+
let last = { point: p.startPoint(), fraction: 0.0 };
|
|
188049
|
+
for (const detailPair of details) {
|
|
188050
|
+
const detail = getDetailOnCurve(detailPair, p);
|
|
188051
|
+
const detailFraction = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.restrictToInterval(detail.fraction, 0, 1); // truncate fraction, but don't snap point; clustering happens later
|
|
188052
|
+
last = this.addHalfEdge(graph, p, last.point, last.fraction, detail.point, detailFraction, mergeTolerance);
|
|
188034
188053
|
}
|
|
188035
|
-
this.addHalfEdge(graph, p,
|
|
188054
|
+
this.addHalfEdge(graph, p, last.point, last.fraction, p.endPoint(), 1.0, mergeTolerance);
|
|
188036
188055
|
}
|
|
188037
|
-
|
|
188056
|
+
_topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.clusterAndMergeXYTheta(graph, (he) => he.sortAngle);
|
|
188038
188057
|
return graph;
|
|
188039
188058
|
}
|
|
188040
188059
|
/**
|
|
@@ -188046,19 +188065,21 @@ class PlanarSubdivision {
|
|
|
188046
188065
|
* @param point0 start point
|
|
188047
188066
|
* @param fraction1 end fraction
|
|
188048
188067
|
* @param point1 end point
|
|
188049
|
-
|
|
188050
|
-
|
|
188051
|
-
|
|
188052
|
-
|
|
188053
|
-
|
|
188054
|
-
|
|
188055
|
-
|
|
188056
|
-
|
|
188057
|
-
|
|
188058
|
-
|
|
188059
|
-
|
|
188060
|
-
|
|
188061
|
-
|
|
188068
|
+
* @returns end point and fraction, or start point and fraction if no action
|
|
188069
|
+
*/
|
|
188070
|
+
static addHalfEdge(graph, p, point0, fraction0, point1, fraction1, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
|
|
188071
|
+
if (point0.isAlmostEqualXY(point1, mergeTolerance))
|
|
188072
|
+
return { point: point0, fraction: fraction0 };
|
|
188073
|
+
const halfEdge = graph.createEdgeXYAndZ(point0, 0, point1, 0);
|
|
188074
|
+
const detail01 = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__.CurveLocationDetail.createCurveEvaluatedFractionFraction(p, fraction0, fraction1);
|
|
188075
|
+
const mate = halfEdge.edgeMate;
|
|
188076
|
+
halfEdge.edgeTag = detail01;
|
|
188077
|
+
halfEdge.sortData = 1.0;
|
|
188078
|
+
mate.edgeTag = detail01;
|
|
188079
|
+
mate.sortData = -1.0;
|
|
188080
|
+
halfEdge.sortAngle = sortAngle(p, fraction0, false);
|
|
188081
|
+
mate.sortAngle = sortAngle(p, fraction1, true);
|
|
188082
|
+
return { point: point1, fraction: fraction1 };
|
|
188062
188083
|
}
|
|
188063
188084
|
/**
|
|
188064
188085
|
* Based on computed (and toleranced) area, push the loop (pointer) onto the appropriate array of positive, negative, or sliver loops.
|
|
@@ -188067,7 +188088,7 @@ class PlanarSubdivision {
|
|
|
188067
188088
|
* @returns the area (forced to zero if within tolerance)
|
|
188068
188089
|
*/
|
|
188069
188090
|
static collectSignedLoop(loop, outLoops, zeroAreaTolerance = 1.0e-10, isSliverFace) {
|
|
188070
|
-
let area = isSliverFace ? 0.0 :
|
|
188091
|
+
let area = isSliverFace ? 0.0 : _RegionOps__WEBPACK_IMPORTED_MODULE_7__.RegionOps.computeXYArea(loop);
|
|
188071
188092
|
if (area === undefined)
|
|
188072
188093
|
area = 0;
|
|
188073
188094
|
if (Math.abs(area) < zeroAreaTolerance)
|
|
@@ -188083,7 +188104,7 @@ class PlanarSubdivision {
|
|
|
188083
188104
|
}
|
|
188084
188105
|
static createLoopInFace(faceSeed, announce) {
|
|
188085
188106
|
let he = faceSeed;
|
|
188086
|
-
const loop =
|
|
188107
|
+
const loop = _Loop__WEBPACK_IMPORTED_MODULE_8__.Loop.create();
|
|
188087
188108
|
do {
|
|
188088
188109
|
const detail = he.edgeTag;
|
|
188089
188110
|
if (detail) {
|
|
@@ -188107,9 +188128,9 @@ class PlanarSubdivision {
|
|
|
188107
188128
|
const faceHasTwoEdges = (he.faceSuccessor.faceSuccessor === he);
|
|
188108
188129
|
let faceIsBanana = false;
|
|
188109
188130
|
if (faceHasTwoEdges) {
|
|
188110
|
-
const c0 =
|
|
188111
|
-
const c1 =
|
|
188112
|
-
if (!
|
|
188131
|
+
const c0 = _topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.curvatureSortKey(he);
|
|
188132
|
+
const c1 = _topology_Merging__WEBPACK_IMPORTED_MODULE_6__.HalfEdgeGraphMerge.curvatureSortKey(he.faceSuccessor.edgeMate);
|
|
188133
|
+
if (!_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(c0, c1)) // default tol!
|
|
188113
188134
|
faceIsBanana = true; // heuristic: we could also check end curvatures, and/or higher derivatives...
|
|
188114
188135
|
}
|
|
188115
188136
|
return faceHasTwoEdges && !faceIsBanana;
|
|
@@ -188127,7 +188148,7 @@ class PlanarSubdivision {
|
|
|
188127
188148
|
return e1;
|
|
188128
188149
|
}
|
|
188129
188150
|
static collectSignedLoopSetsInHalfEdgeGraph(graph, zeroAreaTolerance = 1.0e-10) {
|
|
188130
|
-
const q =
|
|
188151
|
+
const q = _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_9__.HalfEdgeGraphSearch.collectConnectedComponentsWithExteriorParityMasks(graph, undefined);
|
|
188131
188152
|
const result = [];
|
|
188132
188153
|
const edgeMap = new Map();
|
|
188133
188154
|
for (const faceSeeds of q) {
|
|
@@ -188142,10 +188163,10 @@ class PlanarSubdivision {
|
|
|
188142
188163
|
const e = edgeMap.get(mate);
|
|
188143
188164
|
if (e === undefined) {
|
|
188144
188165
|
// Record this as loopA,edgeA of a shared edge to be completed later from the other side of the edge
|
|
188145
|
-
const e1 = new
|
|
188166
|
+
const e1 = new _Loop__WEBPACK_IMPORTED_MODULE_8__.LoopCurveLoopCurve(loopC, curveC, undefined, undefined);
|
|
188146
188167
|
edgeMap.set(he, e1);
|
|
188147
188168
|
}
|
|
188148
|
-
else if (e instanceof
|
|
188169
|
+
else if (e instanceof _Loop__WEBPACK_IMPORTED_MODULE_8__.LoopCurveLoopCurve) {
|
|
188149
188170
|
e.setB(loopC, curveC);
|
|
188150
188171
|
edges.push(e);
|
|
188151
188172
|
edgeMap.delete(mate);
|
|
@@ -188993,27 +189014,27 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
188993
189014
|
/* harmony import */ var _geometry4d_MomentData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry4d/MomentData */ "../../core/geometry/lib/esm/geometry4d/MomentData.js");
|
|
188994
189015
|
/* harmony import */ var _polyface_PolyfaceBuilder__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../polyface/PolyfaceBuilder */ "../../core/geometry/lib/esm/polyface/PolyfaceBuilder.js");
|
|
188995
189016
|
/* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
|
|
189017
|
+
/* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
|
|
188996
189018
|
/* harmony import */ var _topology_Triangulation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../topology/Triangulation */ "../../core/geometry/lib/esm/topology/Triangulation.js");
|
|
188997
189019
|
/* harmony import */ var _ChainCollectorContext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ChainCollectorContext */ "../../core/geometry/lib/esm/curve/ChainCollectorContext.js");
|
|
188998
189020
|
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
188999
189021
|
/* harmony import */ var _CurveCurve__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./CurveCurve */ "../../core/geometry/lib/esm/curve/CurveCurve.js");
|
|
189000
189022
|
/* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
|
|
189001
189023
|
/* harmony import */ var _CurveWireMomentsXYZ__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CurveWireMomentsXYZ */ "../../core/geometry/lib/esm/curve/CurveWireMomentsXYZ.js");
|
|
189024
|
+
/* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
|
|
189025
|
+
/* harmony import */ var _internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
|
|
189002
189026
|
/* harmony import */ var _internalContexts_PolygonOffsetContext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./internalContexts/PolygonOffsetContext */ "../../core/geometry/lib/esm/curve/internalContexts/PolygonOffsetContext.js");
|
|
189003
189027
|
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
189004
189028
|
/* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
|
|
189029
|
+
/* harmony import */ var _ParityRegion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ParityRegion */ "../../core/geometry/lib/esm/curve/ParityRegion.js");
|
|
189005
189030
|
/* harmony import */ var _Path__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./Path */ "../../core/geometry/lib/esm/curve/Path.js");
|
|
189006
189031
|
/* harmony import */ var _Query_ConsolidateAdjacentPrimitivesContext__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./Query/ConsolidateAdjacentPrimitivesContext */ "../../core/geometry/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js");
|
|
189007
189032
|
/* harmony import */ var _Query_CurveSplitContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Query/CurveSplitContext */ "../../core/geometry/lib/esm/curve/Query/CurveSplitContext.js");
|
|
189008
189033
|
/* harmony import */ var _Query_InOutTests__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./Query/InOutTests */ "../../core/geometry/lib/esm/curve/Query/InOutTests.js");
|
|
189009
189034
|
/* harmony import */ var _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Query/PlanarSubdivision */ "../../core/geometry/lib/esm/curve/Query/PlanarSubdivision.js");
|
|
189010
189035
|
/* harmony import */ var _RegionMomentsXY__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RegionMomentsXY */ "../../core/geometry/lib/esm/curve/RegionMomentsXY.js");
|
|
189011
|
-
/* harmony import */ var _internalContexts_MultiChainCollector__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./internalContexts/MultiChainCollector */ "../../core/geometry/lib/esm/curve/internalContexts/MultiChainCollector.js");
|
|
189012
|
-
/* harmony import */ var _GeometryQuery__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./GeometryQuery */ "../../core/geometry/lib/esm/curve/GeometryQuery.js");
|
|
189013
189036
|
/* harmony import */ var _RegionOpsClassificationSweeps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./RegionOpsClassificationSweeps */ "../../core/geometry/lib/esm/curve/RegionOpsClassificationSweeps.js");
|
|
189014
189037
|
/* harmony import */ var _UnionRegion__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./UnionRegion */ "../../core/geometry/lib/esm/curve/UnionRegion.js");
|
|
189015
|
-
/* harmony import */ var _topology_HalfEdgeGraphSearch__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../topology/HalfEdgeGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphSearch.js");
|
|
189016
|
-
/* harmony import */ var _ParityRegion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ParityRegion */ "../../core/geometry/lib/esm/curve/ParityRegion.js");
|
|
189017
189038
|
/*---------------------------------------------------------------------------------------------
|
|
189018
189039
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
189019
189040
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -189252,7 +189273,7 @@ class RegionOps {
|
|
|
189252
189273
|
* @param loopsB second set of loops
|
|
189253
189274
|
* @param operation indicates Union, Intersection, Parity, AMinusB, or BMinusA
|
|
189254
189275
|
* @param mergeTolerance absolute distance tolerance for merging loops
|
|
189255
|
-
* @returns a region resulting from merging input loops and the boolean operation. May contain bridge edges
|
|
189276
|
+
* @returns a region resulting from merging input loops and the boolean operation. May contain bridge edges added to connect interior loops to exterior loops.
|
|
189256
189277
|
*/
|
|
189257
189278
|
static regionBooleanXY(loopsA, loopsB, operation, mergeTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance) {
|
|
189258
189279
|
const result = _UnionRegion__WEBPACK_IMPORTED_MODULE_11__.UnionRegion.create();
|
|
@@ -189260,7 +189281,7 @@ class RegionOps {
|
|
|
189260
189281
|
context.addMembers(loopsA, loopsB);
|
|
189261
189282
|
context.annotateAndMergeCurvesInGraph(mergeTolerance);
|
|
189262
189283
|
const range = context.groupA.range().union(context.groupB.range());
|
|
189263
|
-
const areaTol = this.computeXYAreaTolerance(range);
|
|
189284
|
+
const areaTol = this.computeXYAreaTolerance(range, mergeTolerance);
|
|
189264
189285
|
context.runClassificationSweep(operation, (_graph, face, faceType, area) => {
|
|
189265
189286
|
// ignore danglers and null faces, but not 2-edge "banana" faces with nonzero area
|
|
189266
189287
|
if (face.countEdgesAroundFace() < 2)
|
|
@@ -189578,23 +189599,24 @@ class RegionOps {
|
|
|
189578
189599
|
}
|
|
189579
189600
|
/**
|
|
189580
189601
|
* Find all areas bounded by the unstructured, possibly intersecting curves.
|
|
189581
|
-
* *
|
|
189582
|
-
*
|
|
189583
|
-
* [[regionBooleanXY]]
|
|
189602
|
+
* * A common use case of this method is to assemble the bounding "exterior" loop (or loops) containing the input curves.
|
|
189603
|
+
* * This method does not add bridge edges to connect outer loops to inner loops. Each disconnected loop, regardless
|
|
189604
|
+
* of its containment, is returned as its own SignedLoops object. Pre-process with [[regionBooleanXY]] to add bridge edges so that
|
|
189605
|
+
* [[constructAllXYRegionLoops]] will return outer and inner loops in the same SignedLoops object.
|
|
189584
189606
|
* @param curvesAndRegions Any collection of curves. Each Loop/ParityRegion/UnionRegion contributes its curve primitives.
|
|
189607
|
+
* @param tolerance optional distance tolerance for coincidence
|
|
189585
189608
|
* @returns array of [[SignedLoops]], each entry of which describes the faces in a single connected component:
|
|
189586
189609
|
* * `positiveAreaLoops` contains "interior" loops, _including holes in ParityRegion input_. These loops have positive area and counterclockwise orientation.
|
|
189587
189610
|
* * `negativeAreaLoops` contains (probably just one) "exterior" loop which is ordered clockwise.
|
|
189588
189611
|
* * `slivers` contains sliver loops that have zero area, such as appear between coincident curves.
|
|
189589
189612
|
* * `edges` contains a [[LoopCurveLoopCurve]] object for each component edge, collecting both loops adjacent to the edge and a constituent curve in each.
|
|
189590
189613
|
*/
|
|
189591
|
-
static constructAllXYRegionLoops(curvesAndRegions) {
|
|
189592
|
-
const
|
|
189593
|
-
const
|
|
189594
|
-
const
|
|
189595
|
-
const
|
|
189596
|
-
const
|
|
189597
|
-
const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.assembleHalfEdgeGraph(primitivesB, intersections);
|
|
189614
|
+
static constructAllXYRegionLoops(curvesAndRegions, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance) {
|
|
189615
|
+
const primitives = RegionOps.collectCurvePrimitives(curvesAndRegions, undefined, true, true);
|
|
189616
|
+
const range = this.curveArrayRange(primitives);
|
|
189617
|
+
const areaTol = this.computeXYAreaTolerance(range, tolerance);
|
|
189618
|
+
const intersections = _CurveCurve__WEBPACK_IMPORTED_MODULE_30__.CurveCurve.allIntersectionsAmongPrimitivesXY(primitives, tolerance);
|
|
189619
|
+
const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.assembleHalfEdgeGraph(primitives, intersections, tolerance);
|
|
189598
189620
|
return _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_12__.PlanarSubdivision.collectSignedLoopSetsInHalfEdgeGraph(graph, areaTol);
|
|
189599
189621
|
}
|
|
189600
189622
|
/**
|
|
@@ -190210,7 +190232,7 @@ class RegionBooleanContext {
|
|
|
190210
190232
|
}
|
|
190211
190233
|
// const range = RegionOps.curveArrayRange(allPrimitives);
|
|
190212
190234
|
const intersections = _CurveCurve__WEBPACK_IMPORTED_MODULE_15__.CurveCurve.allIntersectionsAmongPrimitivesXY(allPrimitives, mergeTolerance);
|
|
190213
|
-
const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_16__.PlanarSubdivision.assembleHalfEdgeGraph(allPrimitives, intersections);
|
|
190235
|
+
const graph = _Query_PlanarSubdivision__WEBPACK_IMPORTED_MODULE_16__.PlanarSubdivision.assembleHalfEdgeGraph(allPrimitives, intersections, mergeTolerance);
|
|
190214
190236
|
this.graph = graph;
|
|
190215
190237
|
this.faceAreaFunction = faceAreaFromCurvedEdgeData;
|
|
190216
190238
|
}
|
|
@@ -197309,15 +197331,20 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
197309
197331
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
197310
197332
|
/* harmony export */ "CoincidentGeometryQuery": () => (/* binding */ CoincidentGeometryQuery)
|
|
197311
197333
|
/* harmony export */ });
|
|
197312
|
-
/* harmony import */ var
|
|
197313
|
-
/* harmony import */ var
|
|
197314
|
-
/* harmony import */ var
|
|
197315
|
-
/* harmony import */ var
|
|
197316
|
-
/* harmony import */ var
|
|
197334
|
+
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
197335
|
+
/* harmony import */ var _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../curve/CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
197336
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
197337
|
+
/* harmony import */ var _AngleSweep__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AngleSweep */ "../../core/geometry/lib/esm/geometry3d/AngleSweep.js");
|
|
197338
|
+
/* harmony import */ var _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
197339
|
+
/* harmony import */ var _Segment1d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Segment1d */ "../../core/geometry/lib/esm/geometry3d/Segment1d.js");
|
|
197317
197340
|
/*---------------------------------------------------------------------------------------------
|
|
197318
197341
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
197319
197342
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
197320
197343
|
*--------------------------------------------------------------------------------------------*/
|
|
197344
|
+
/** @packageDocumentation
|
|
197345
|
+
* @module CartesianGeometry
|
|
197346
|
+
*/
|
|
197347
|
+
|
|
197321
197348
|
|
|
197322
197349
|
|
|
197323
197350
|
|
|
@@ -197333,10 +197360,10 @@ class CoincidentGeometryQuery {
|
|
|
197333
197360
|
get tolerance() {
|
|
197334
197361
|
return this._tolerance;
|
|
197335
197362
|
}
|
|
197336
|
-
constructor(tolerance =
|
|
197363
|
+
constructor(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallMetricDistance) {
|
|
197337
197364
|
this._tolerance = tolerance;
|
|
197338
197365
|
}
|
|
197339
|
-
static create(tolerance =
|
|
197366
|
+
static create(tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.smallMetricDistance) {
|
|
197340
197367
|
return new CoincidentGeometryQuery(tolerance);
|
|
197341
197368
|
}
|
|
197342
197369
|
/**
|
|
@@ -197359,12 +197386,12 @@ class CoincidentGeometryQuery {
|
|
|
197359
197386
|
*
|
|
197360
197387
|
*/
|
|
197361
197388
|
projectPointToSegmentXY(spacePoint, pointA, pointB) {
|
|
197362
|
-
this._vectorU =
|
|
197363
|
-
this._vectorV =
|
|
197389
|
+
this._vectorU = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(pointA, pointB, this._vectorU);
|
|
197390
|
+
this._vectorV = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(pointA, spacePoint, this._vectorV);
|
|
197364
197391
|
const uDotU = this._vectorU.dotProductXY(this._vectorU);
|
|
197365
197392
|
const uDotV = this._vectorU.dotProductXY(this._vectorV);
|
|
197366
|
-
const fraction =
|
|
197367
|
-
return
|
|
197393
|
+
const fraction = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(uDotV, uDotU, 0.0);
|
|
197394
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(undefined, fraction, pointA.interpolate(fraction, pointB));
|
|
197368
197395
|
}
|
|
197369
197396
|
/**
|
|
197370
197397
|
* * project `pointA0` and `pointA1` onto the segment with `pointB0` and `pointB1`
|
|
@@ -197375,84 +197402,82 @@ class CoincidentGeometryQuery {
|
|
|
197375
197402
|
* @param pointB1 end point of segment B
|
|
197376
197403
|
*/
|
|
197377
197404
|
coincidentSegmentRangeXY(pointA0, pointA1, pointB0, pointB1, restrictToBounds = true) {
|
|
197378
|
-
const
|
|
197379
|
-
if (pointA0.distanceXY(
|
|
197405
|
+
const detailA0OnB = this.projectPointToSegmentXY(pointA0, pointB0, pointB1);
|
|
197406
|
+
if (pointA0.distanceXY(detailA0OnB.point) > this._tolerance)
|
|
197380
197407
|
return undefined;
|
|
197381
197408
|
const detailA1OnB = this.projectPointToSegmentXY(pointA1, pointB0, pointB1);
|
|
197382
197409
|
if (pointA1.distanceXY(detailA1OnB.point) > this._tolerance)
|
|
197383
197410
|
return undefined;
|
|
197384
|
-
const
|
|
197385
|
-
if (pointB0.distanceXY(
|
|
197411
|
+
const detailB0OnA = this.projectPointToSegmentXY(pointB0, pointA0, pointA1);
|
|
197412
|
+
if (pointB0.distanceXY(detailB0OnA.point) > this._tolerance)
|
|
197386
197413
|
return undefined;
|
|
197387
197414
|
const detailB1OnA = this.projectPointToSegmentXY(pointB1, pointA0, pointA1);
|
|
197388
197415
|
if (pointB1.distanceXY(detailB1OnA.point) > this._tolerance)
|
|
197389
197416
|
return undefined;
|
|
197390
|
-
|
|
197391
|
-
|
|
197392
|
-
|
|
197393
|
-
|
|
197417
|
+
detailA0OnB.fraction1 = detailA1OnB.fraction;
|
|
197418
|
+
detailA0OnB.point1 = detailA1OnB.point; // capture -- detailA1OnB is not reused.
|
|
197419
|
+
detailB0OnA.fraction1 = detailB1OnA.fraction;
|
|
197420
|
+
detailB0OnA.point1 = detailB1OnA.point;
|
|
197394
197421
|
if (!restrictToBounds)
|
|
197395
|
-
return
|
|
197396
|
-
const segment =
|
|
197422
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197423
|
+
const segment = _Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(detailB0OnA.fraction, detailB0OnA.fraction1);
|
|
197397
197424
|
if (segment.clampDirectedTo01()) {
|
|
197398
|
-
segment.reverseIfNeededForDeltaSign(1.0);
|
|
197399
197425
|
const f0 = segment.x0;
|
|
197400
197426
|
const f1 = segment.x1;
|
|
197401
|
-
const h0 =
|
|
197402
|
-
const h1 =
|
|
197427
|
+
const h0 = detailB0OnA.inverseInterpolateFraction(f0);
|
|
197428
|
+
const h1 = detailB0OnA.inverseInterpolateFraction(f1);
|
|
197403
197429
|
// recompute fractions and points..
|
|
197404
|
-
CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(
|
|
197405
|
-
CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(
|
|
197406
|
-
return
|
|
197430
|
+
CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailB0OnA, f0, f1, pointA0, pointA1, f0 > f1);
|
|
197431
|
+
CoincidentGeometryQuery.assignDetailInterpolatedFractionsAndPoints(detailA0OnB, h0, h1, pointB0, pointB1, h0 > h1);
|
|
197432
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197407
197433
|
}
|
|
197408
197434
|
else {
|
|
197409
197435
|
if (segment.signedDelta() < 0.0) {
|
|
197410
|
-
if (
|
|
197411
|
-
|
|
197412
|
-
|
|
197413
|
-
return
|
|
197436
|
+
if (detailB0OnA.point.isAlmostEqual(pointA0, this.tolerance)) {
|
|
197437
|
+
detailB0OnA.collapseToStart();
|
|
197438
|
+
detailA0OnB.collapseToStart();
|
|
197439
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197414
197440
|
}
|
|
197415
|
-
if (
|
|
197416
|
-
|
|
197417
|
-
|
|
197418
|
-
return
|
|
197441
|
+
if (detailB0OnA.point1.isAlmostEqual(pointA1, this.tolerance)) {
|
|
197442
|
+
detailB0OnA.collapseToEnd();
|
|
197443
|
+
detailA0OnB.collapseToEnd();
|
|
197444
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197419
197445
|
}
|
|
197420
197446
|
}
|
|
197421
197447
|
else {
|
|
197422
|
-
if (
|
|
197423
|
-
|
|
197424
|
-
|
|
197425
|
-
return
|
|
197448
|
+
if (detailB0OnA.point.isAlmostEqual(pointA1, this.tolerance)) {
|
|
197449
|
+
detailB0OnA.collapseToStart();
|
|
197450
|
+
detailA0OnB.collapseToEnd();
|
|
197451
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197426
197452
|
}
|
|
197427
|
-
if (
|
|
197428
|
-
|
|
197429
|
-
|
|
197430
|
-
return
|
|
197453
|
+
if (detailB0OnA.point1.isAlmostEqual(pointA0, this.tolerance)) {
|
|
197454
|
+
detailB0OnA.collapseToEnd();
|
|
197455
|
+
detailA0OnB.collapseToStart();
|
|
197456
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailB0OnA, detailA0OnB);
|
|
197431
197457
|
}
|
|
197432
197458
|
}
|
|
197433
197459
|
}
|
|
197434
197460
|
return undefined;
|
|
197435
197461
|
}
|
|
197436
197462
|
/**
|
|
197437
|
-
* Create a CurveLocationDetailPair
|
|
197463
|
+
* Create a CurveLocationDetailPair for a coincident interval of two overlapping curves
|
|
197438
197464
|
* @param cpA curveA
|
|
197439
|
-
* @param cpB
|
|
197440
|
-
* @param fractionsOnA
|
|
197441
|
-
* @param fractionB0
|
|
197442
|
-
* @param fractionB1 end fraction of
|
|
197465
|
+
* @param cpB curveB
|
|
197466
|
+
* @param fractionsOnA coincident interval of curveB in fraction space of curveA
|
|
197467
|
+
* @param fractionB0 curveB start in fraction space of curveA
|
|
197468
|
+
* @param fractionB1 curveB end in fraction space of curveA
|
|
197469
|
+
* @param reverse whether curveB and curveA have opposite direction
|
|
197443
197470
|
*/
|
|
197444
197471
|
createDetailPair(cpA, cpB, fractionsOnA, fractionB0, fractionB1, reverse) {
|
|
197445
197472
|
const deltaB = fractionB1 - fractionB0;
|
|
197446
|
-
const g0 =
|
|
197447
|
-
const g1 =
|
|
197473
|
+
const g0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(fractionsOnA.x0 - fractionB0, deltaB);
|
|
197474
|
+
const g1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(fractionsOnA.x1 - fractionB0, deltaB);
|
|
197448
197475
|
if (g0 !== undefined && g1 !== undefined) {
|
|
197449
|
-
const detailA =
|
|
197450
|
-
const detailB =
|
|
197451
|
-
if (reverse)
|
|
197476
|
+
const detailA = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpA, fractionsOnA.x0, fractionsOnA.x1);
|
|
197477
|
+
const detailB = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveEvaluatedFractionFraction(cpB, g0, g1);
|
|
197478
|
+
if (reverse)
|
|
197452
197479
|
detailA.swapFractionsAndPoints();
|
|
197453
|
-
|
|
197454
|
-
}
|
|
197455
|
-
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_2__.CurveLocationDetailPair.createCapture(detailA, detailB);
|
|
197480
|
+
return _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailA, detailB);
|
|
197456
197481
|
}
|
|
197457
197482
|
return undefined;
|
|
197458
197483
|
}
|
|
@@ -197469,43 +197494,67 @@ class CoincidentGeometryQuery {
|
|
|
197469
197494
|
* @param arcA
|
|
197470
197495
|
* @param arcB
|
|
197471
197496
|
* @param _restrictToBounds
|
|
197472
|
-
* @return 0, 1, or 2 overlap intervals
|
|
197497
|
+
* @return 0, 1, or 2 overlap points/intervals
|
|
197473
197498
|
*/
|
|
197474
197499
|
coincidentArcIntersectionXY(arcA, arcB, _restrictToBounds = true) {
|
|
197475
197500
|
let result;
|
|
197476
|
-
if (arcA.center.isAlmostEqual(arcB.center)) {
|
|
197501
|
+
if (arcA.center.isAlmostEqual(arcB.center, this.tolerance)) {
|
|
197477
197502
|
const matrixBToA = arcA.matrixRef.multiplyMatrixInverseMatrix(arcB.matrixRef);
|
|
197478
197503
|
if (matrixBToA) {
|
|
197479
197504
|
const ux = matrixBToA.at(0, 0);
|
|
197480
197505
|
const uy = matrixBToA.at(1, 0);
|
|
197481
197506
|
const vx = matrixBToA.at(0, 1);
|
|
197482
197507
|
const vy = matrixBToA.at(1, 1);
|
|
197483
|
-
const ru =
|
|
197484
|
-
const rv =
|
|
197485
|
-
const dot =
|
|
197486
|
-
const cross =
|
|
197487
|
-
if (
|
|
197488
|
-
&&
|
|
197489
|
-
&&
|
|
197490
|
-
const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in
|
|
197491
|
-
const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB
|
|
197492
|
-
const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians;
|
|
197493
|
-
const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians;
|
|
197508
|
+
const ru = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(ux, uy);
|
|
197509
|
+
const rv = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(vx, vy);
|
|
197510
|
+
const dot = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.dotProductXYXY(ux, uy, vx, vy);
|
|
197511
|
+
const cross = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
197512
|
+
if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(ru, 1.0)
|
|
197513
|
+
&& _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(rv, 1.0)
|
|
197514
|
+
&& _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(0, dot)) {
|
|
197515
|
+
const alphaB0Radians = Math.atan2(uy, ux); // angular position of arcB 0 point in arcA sweep
|
|
197516
|
+
const sweepDirection = cross > 0 ? 1.0 : -1.0; // 1 if arcB parameter space sweeps in same direction as arcA, -1 if opposite
|
|
197517
|
+
const betaStartRadians = alphaB0Radians + sweepDirection * arcB.sweep.startRadians; // arcB start in arcA parameter space
|
|
197518
|
+
const betaEndRadians = alphaB0Radians + sweepDirection * arcB.sweep.endRadians; // arcB end in arcA parameter space
|
|
197494
197519
|
const fractionSpacesReversed = (sweepDirection * arcA.sweep.sweepRadians * arcB.sweep.sweepRadians) < 0;
|
|
197495
|
-
const sweepB =
|
|
197520
|
+
const sweepB = _AngleSweep__WEBPACK_IMPORTED_MODULE_5__.AngleSweep.createStartEndRadians(betaStartRadians, betaEndRadians);
|
|
197496
197521
|
const sweepA = arcA.sweep;
|
|
197497
197522
|
const fractionPeriodA = sweepA.fractionPeriod();
|
|
197498
|
-
const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians);
|
|
197499
|
-
|
|
197500
|
-
const
|
|
197501
|
-
const
|
|
197502
|
-
|
|
197503
|
-
|
|
197504
|
-
|
|
197505
|
-
|
|
197506
|
-
|
|
197507
|
-
|
|
197508
|
-
|
|
197523
|
+
const fractionB0 = sweepA.radiansToPositivePeriodicFraction(sweepB.startRadians); // arcB start in arcA fraction space
|
|
197524
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(fractionB0 >= 0.0);
|
|
197525
|
+
const fractionSweep = sweepB.sweepRadians / sweepA.sweepRadians; // arcB sweep in arcA fraction space
|
|
197526
|
+
const fractionB1 = fractionB0 + fractionSweep; // arcB end in arcA fraction space
|
|
197527
|
+
const fractionSweepB = _Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0, fractionB1);
|
|
197528
|
+
/** lambda to add a coincident interval or isolated intersection, given inputs in arcA fraction space
|
|
197529
|
+
* @param arcBInArcAFractionSpace span of arcB in arcA fraction space. On return, clamped to [0,1] if nontrivial.
|
|
197530
|
+
* @param testStartOfArcA if no nontrivial coincident interval was found, look for an isolated intersection at the start (true) or end (false) of arcA
|
|
197531
|
+
* @returns whether a detail pair was appended to result
|
|
197532
|
+
*/
|
|
197533
|
+
const appendCoincidentIntersection = (arcBInArcAFractionSpace, testStartOfArcA) => {
|
|
197534
|
+
const size = result ? result.length : 0;
|
|
197535
|
+
const arcBStart = arcBInArcAFractionSpace.x0;
|
|
197536
|
+
const arcBEnd = arcBInArcAFractionSpace.x1;
|
|
197537
|
+
if (arcBInArcAFractionSpace.clampDirectedTo01() && !_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isSmallRelative(arcBInArcAFractionSpace.absoluteDelta())) {
|
|
197538
|
+
result = this.appendDetailPair(result, this.createDetailPair(arcA, arcB, arcBInArcAFractionSpace, arcBStart, arcBEnd, fractionSpacesReversed));
|
|
197539
|
+
}
|
|
197540
|
+
else { // test isolated intersection
|
|
197541
|
+
const testStartOfArcB = fractionSpacesReversed ? testStartOfArcA : !testStartOfArcA;
|
|
197542
|
+
const arcAPt = this._point0 = testStartOfArcA ? arcA.startPoint(this._point0) : arcA.endPoint(this._point0);
|
|
197543
|
+
const arcBPt = this._point1 = testStartOfArcB ? arcB.startPoint(this._point1) : arcB.endPoint(this._point1);
|
|
197544
|
+
if (arcAPt.isAlmostEqual(arcBPt, this.tolerance)) {
|
|
197545
|
+
const detailA = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(arcA, testStartOfArcA ? 0 : 1, arcAPt);
|
|
197546
|
+
const detailB = _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(arcB, testStartOfArcB ? 0 : 1, arcBPt);
|
|
197547
|
+
result = this.appendDetailPair(result, _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair.createCapture(detailA, detailB));
|
|
197548
|
+
}
|
|
197549
|
+
}
|
|
197550
|
+
return result !== undefined && result.length > size;
|
|
197551
|
+
};
|
|
197552
|
+
appendCoincidentIntersection(fractionSweepB, false); // compute overlap in strict interior, or at end of arcA
|
|
197553
|
+
// check overlap at start of arcA with a periodic shift of fractionSweepB
|
|
197554
|
+
if (fractionB1 >= fractionPeriodA)
|
|
197555
|
+
appendCoincidentIntersection(_Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0 - fractionPeriodA, fractionB1 - fractionPeriodA), true);
|
|
197556
|
+
else if (fractionB0 === 0.0)
|
|
197557
|
+
appendCoincidentIntersection(_Segment1d__WEBPACK_IMPORTED_MODULE_4__.Segment1d.create(fractionB0 + fractionPeriodA, fractionB1 + fractionPeriodA), true);
|
|
197509
197558
|
}
|
|
197510
197559
|
}
|
|
197511
197560
|
}
|
|
@@ -204391,7 +204440,7 @@ class Matrix3d {
|
|
|
204391
204440
|
* almost independent and matrix is invertible).
|
|
204392
204441
|
*/
|
|
204393
204442
|
conditionNumber() {
|
|
204394
|
-
const determinant = this.determinant();
|
|
204443
|
+
const determinant = Math.abs(this.determinant());
|
|
204395
204444
|
const columnMagnitudeSum = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[0], this.coffs[3], this.coffs[6])
|
|
204396
204445
|
+ _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[1], this.coffs[4], this.coffs[7])
|
|
204397
204446
|
+ _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(this.coffs[2], this.coffs[5], this.coffs[8]);
|
|
@@ -249353,6 +249402,7 @@ class HalfEdgeGraphOps {
|
|
|
249353
249402
|
}
|
|
249354
249403
|
}
|
|
249355
249404
|
/**
|
|
249405
|
+
* Note: this class uses hardcoded micrometer coordinate/cluster tolerance throughout.
|
|
249356
249406
|
* @internal
|
|
249357
249407
|
*/
|
|
249358
249408
|
class HalfEdgeGraphMerge {
|
|
@@ -282312,7 +282362,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
|
|
|
282312
282362
|
/***/ ((module) => {
|
|
282313
282363
|
|
|
282314
282364
|
"use strict";
|
|
282315
|
-
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.
|
|
282365
|
+
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.102","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.102","@itwin/core-bentley":"workspace:^4.0.0-dev.102","@itwin/core-common":"workspace:^4.0.0-dev.102","@itwin/core-geometry":"workspace:^4.0.0-dev.102","@itwin/core-orbitgt":"workspace:^4.0.0-dev.102","@itwin/core-quantity":"workspace:^4.0.0-dev.102"},"//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"}}]}}');
|
|
282316
282366
|
|
|
282317
282367
|
/***/ })
|
|
282318
282368
|
|