@itwin/ecschema-rpcinterface-tests 4.2.0-dev.16 → 4.2.0-dev.18
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/_0062.bundled-tests.js.map +1 -1
- package/lib/dist/bundled-tests.js +108 -96
- 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/vendors-common_temp_node_modules_pnpm_loaders_gl_draco_3_4_7_node_modules_loaders_gl_draco_di-02c2bd.bundled-tests.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_0062.bundled-tests.js","mappings":";;;;;;;;AAAA","sources":["file:///ignored|D:\\vsts_a\\
|
|
1
|
+
{"version":3,"file":"_0062.bundled-tests.js","mappings":";;;;;;;;AAAA","sources":["file:///ignored|D:\\vsts_a\\15\\s\\common\\temp\\node_modules\\.pnpm\\@loaders.gl+worker-utils@3.4.7\\node_modules\\@loaders.gl\\worker-utils\\dist\\esm\\lib\\library-utils|../node/require-utils.node"],"names":[],"sourceRoot":""}
|
|
@@ -89898,10 +89898,11 @@ class ViewState extends _EntityState__WEBPACK_IMPORTED_MODULE_5__.ElementState {
|
|
|
89898
89898
|
}
|
|
89899
89899
|
if (0 === elevation && !modelTransform && !scriptTransform)
|
|
89900
89900
|
return undefined;
|
|
89901
|
-
const transform = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.
|
|
89902
|
-
|
|
89903
|
-
|
|
89904
|
-
|
|
89901
|
+
const transform = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createTranslationXYZ(0, 0, elevation);
|
|
89902
|
+
if (modelTransform?.premultiply)
|
|
89903
|
+
modelTransform.transform.multiplyTransformTransform(transform, transform);
|
|
89904
|
+
if (modelTransform && !modelTransform.premultiply)
|
|
89905
|
+
transform.multiplyTransformTransform(modelTransform.transform, transform);
|
|
89905
89906
|
if (scriptTransform)
|
|
89906
89907
|
transform.multiplyTransformTransform(scriptTransform, transform);
|
|
89907
89908
|
return transform;
|
|
@@ -98415,7 +98416,7 @@ function splitMeshParams(args) {
|
|
|
98415
98416
|
const result = new Map();
|
|
98416
98417
|
const mat = args.params.surface.material;
|
|
98417
98418
|
const atlasOffset = undefined !== mat && mat.isAtlas ? mat.vertexTableOffset : undefined;
|
|
98418
|
-
const atlasInfo = atlasOffset ? { offset: atlasOffset, createMaterial: args.createMaterial } : undefined;
|
|
98419
|
+
const atlasInfo = undefined !== atlasOffset ? { offset: atlasOffset, createMaterial: args.createMaterial } : undefined;
|
|
98419
98420
|
const nodes = VertexTableSplitter.split({
|
|
98420
98421
|
indices: args.params.surface.indices,
|
|
98421
98422
|
vertices: args.params.vertices,
|
|
@@ -141858,7 +141859,9 @@ class PrimaryTreeReference extends _internal__WEBPACK_IMPORTED_MODULE_6__.TileTr
|
|
|
141858
141859
|
computeTransform(tree) {
|
|
141859
141860
|
const baseTf = this.computeBaseTransform(tree);
|
|
141860
141861
|
const displayTf = this.view.modelDisplayTransformProvider?.getModelDisplayTransform(this.model.id);
|
|
141861
|
-
|
|
141862
|
+
if (!displayTf)
|
|
141863
|
+
return baseTf;
|
|
141864
|
+
return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);
|
|
141862
141865
|
}
|
|
141863
141866
|
}
|
|
141864
141867
|
/** @internal */
|
|
@@ -145845,7 +145848,7 @@ class TileDrawArgs {
|
|
|
145845
145848
|
}
|
|
145846
145849
|
computePixelSizeScaleFactor() {
|
|
145847
145850
|
// Check to see if a model display transform with non-uniform scaling is being used.
|
|
145848
|
-
const mat = this.context.viewport.view.modelDisplayTransformProvider?.getModelDisplayTransform(this.tree.modelId)?.matrix;
|
|
145851
|
+
const mat = this.context.viewport.view.modelDisplayTransformProvider?.getModelDisplayTransform(this.tree.modelId)?.transform.matrix;
|
|
145849
145852
|
if (!mat)
|
|
145850
145853
|
return 1;
|
|
145851
145854
|
const scale = [0, 1, 2].map((x) => mat.getColumn(x).magnitude());
|
|
@@ -181110,7 +181113,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
181110
181113
|
/* harmony export */ ClusterableArray: () => (/* reexport safe */ _numerics_ClusterableArray__WEBPACK_IMPORTED_MODULE_52__.ClusterableArray),
|
|
181111
181114
|
/* harmony export */ Complex: () => (/* reexport safe */ _numerics_Complex__WEBPACK_IMPORTED_MODULE_54__.Complex),
|
|
181112
181115
|
/* harmony export */ Cone: () => (/* reexport safe */ _solid_Cone__WEBPACK_IMPORTED_MODULE_90__.Cone),
|
|
181113
|
-
/* harmony export */ ConsolidateAdjacentCurvePrimitivesOptions: () => (/* reexport safe */
|
|
181116
|
+
/* harmony export */ ConsolidateAdjacentCurvePrimitivesOptions: () => (/* reexport safe */ _curve_RegionOps__WEBPACK_IMPORTED_MODULE_80__.ConsolidateAdjacentCurvePrimitivesOptions),
|
|
181114
181117
|
/* harmony export */ Constant: () => (/* reexport safe */ _Constant__WEBPACK_IMPORTED_MODULE_37__.Constant),
|
|
181115
181118
|
/* harmony export */ ConstructCurveBetweenCurves: () => (/* reexport safe */ _curve_ConstructCurveBetweenCurves__WEBPACK_IMPORTED_MODULE_61__.ConstructCurveBetweenCurves),
|
|
181116
181119
|
/* harmony export */ ConvexClipPlaneSet: () => (/* reexport safe */ _clipping_ConvexClipPlaneSet__WEBPACK_IMPORTED_MODULE_40__.ConvexClipPlaneSet),
|
|
@@ -182256,10 +182259,10 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_0__.CurvePrimitive
|
|
|
182256
182259
|
const uy = this._matrix.at(1, 0);
|
|
182257
182260
|
const vx = this._matrix.at(0, 1);
|
|
182258
182261
|
const vy = this._matrix.at(1, 1);
|
|
182259
|
-
const
|
|
182260
|
-
const
|
|
182261
|
-
const
|
|
182262
|
-
if (_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_6__.Angle.isPerpendicularDotSet(
|
|
182262
|
+
const dotUU = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.dotProductXYXY(ux, uy, ux, uy);
|
|
182263
|
+
const dotVV = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.dotProductXYXY(vx, vy, vx, vy);
|
|
182264
|
+
const dotUV = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.dotProductXYXY(ux, uy, vx, vy);
|
|
182265
|
+
if (_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_6__.Angle.isPerpendicularDotSet(dotUU, dotVV, dotUV) && _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.isSameCoordinateSquared(dotUU, dotVV))
|
|
182263
182266
|
return _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.hypotenuseXY(ux, uy);
|
|
182264
182267
|
return undefined;
|
|
182265
182268
|
}
|
|
@@ -183671,7 +183674,6 @@ CurveChainWithDistanceIndex._numCandidate = 0;
|
|
|
183671
183674
|
__webpack_require__.r(__webpack_exports__);
|
|
183672
183675
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
183673
183676
|
/* harmony export */ BagOfCurves: () => (/* binding */ BagOfCurves),
|
|
183674
|
-
/* harmony export */ ConsolidateAdjacentCurvePrimitivesOptions: () => (/* binding */ ConsolidateAdjacentCurvePrimitivesOptions),
|
|
183675
183677
|
/* harmony export */ CurveChain: () => (/* binding */ CurveChain),
|
|
183676
183678
|
/* harmony export */ CurveCollection: () => (/* binding */ CurveCollection)
|
|
183677
183679
|
/* harmony export */ });
|
|
@@ -184072,22 +184074,6 @@ class BagOfCurves extends CurveCollection {
|
|
|
184072
184074
|
return handler.handleBagOfCurves(this);
|
|
184073
184075
|
}
|
|
184074
184076
|
}
|
|
184075
|
-
/**
|
|
184076
|
-
* * Options to control method `RegionOps.consolidateAdjacentPrimitives`
|
|
184077
|
-
* @public
|
|
184078
|
-
*/
|
|
184079
|
-
class ConsolidateAdjacentCurvePrimitivesOptions {
|
|
184080
|
-
constructor() {
|
|
184081
|
-
/** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */
|
|
184082
|
-
this.consolidateLinearGeometry = true;
|
|
184083
|
-
/** True to consolidate contiguous arcs */
|
|
184084
|
-
this.consolidateCompatibleArcs = true;
|
|
184085
|
-
/** Tolerance for collapsing identical points */
|
|
184086
|
-
this.duplicatePointTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_10__.Geometry.smallMetricDistance;
|
|
184087
|
-
/** Tolerance for removing interior colinear points. */
|
|
184088
|
-
this.colinearPointTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_10__.Geometry.smallMetricDistance;
|
|
184089
|
-
}
|
|
184090
|
-
}
|
|
184091
184077
|
|
|
184092
184078
|
|
|
184093
184079
|
/***/ }),
|
|
@@ -184198,6 +184184,9 @@ class CurveCurve {
|
|
|
184198
184184
|
* * Close approach xy-distances are measured without regard to z. This is equivalent to their separation distance
|
|
184199
184185
|
* as seen in the top view, or as measured between their projections onto the xy-plane.
|
|
184200
184186
|
* * If more than one approach is returned, one of them is the closest approach.
|
|
184187
|
+
* * If an input curve is a `CurveCollection`, then close approaches are computed to each `CurvePrimitive` child.
|
|
184188
|
+
* This can lead to many returned pairs, especially when both inputs are `CurveCollection`s. If an input curve is
|
|
184189
|
+
* an `AnyRegion` then close approaches are computed only to the boundary curves, not to the interior.
|
|
184201
184190
|
* @param curveA first curve
|
|
184202
184191
|
* @param curveB second curve
|
|
184203
184192
|
* @param maxDistance maximum xy-distance to consider between the curves.
|
|
@@ -189305,10 +189294,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
189305
189294
|
/* harmony import */ var _geometry3d_PolylineCompressionByEdgeOffset__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../geometry3d/PolylineCompressionByEdgeOffset */ "../../core/geometry/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js");
|
|
189306
189295
|
/* harmony import */ var _geometry3d_PolylineOps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../geometry3d/PolylineOps */ "../../core/geometry/lib/esm/geometry3d/PolylineOps.js");
|
|
189307
189296
|
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
189308
|
-
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
189309
189297
|
/* harmony import */ var _CurveFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../CurveFactory */ "../../core/geometry/lib/esm/curve/CurveFactory.js");
|
|
189310
189298
|
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
189311
189299
|
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
189300
|
+
/* harmony import */ var _RegionOps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../RegionOps */ "../../core/geometry/lib/esm/curve/RegionOps.js");
|
|
189312
189301
|
/*---------------------------------------------------------------------------------------------
|
|
189313
189302
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
189314
189303
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -189332,7 +189321,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
189332
189321
|
class ConsolidateAdjacentCurvePrimitivesContext extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_0__.NullGeometryHandler {
|
|
189333
189322
|
constructor(options) {
|
|
189334
189323
|
super();
|
|
189335
|
-
this._options = options ? options : new
|
|
189324
|
+
this._options = options ? options : new _RegionOps__WEBPACK_IMPORTED_MODULE_1__.ConsolidateAdjacentCurvePrimitivesOptions();
|
|
189336
189325
|
}
|
|
189337
189326
|
/** look for adjacent compatible primitives in a path or loop. */
|
|
189338
189327
|
handleCurveChain(g) {
|
|
@@ -190892,6 +190881,7 @@ class RegionMomentsXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODU
|
|
|
190892
190881
|
"use strict";
|
|
190893
190882
|
__webpack_require__.r(__webpack_exports__);
|
|
190894
190883
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
190884
|
+
/* harmony export */ ConsolidateAdjacentCurvePrimitivesOptions: () => (/* binding */ ConsolidateAdjacentCurvePrimitivesOptions),
|
|
190895
190885
|
/* harmony export */ RegionBinaryOpType: () => (/* binding */ RegionBinaryOpType),
|
|
190896
190886
|
/* harmony export */ RegionOps: () => (/* binding */ RegionOps)
|
|
190897
190887
|
/* harmony export */ });
|
|
@@ -191614,6 +191604,22 @@ function pushToInOnOutArrays(curve, select, arrayNegative, array0, arrayPositive
|
|
|
191614
191604
|
else
|
|
191615
191605
|
array0.push(curve);
|
|
191616
191606
|
}
|
|
191607
|
+
/**
|
|
191608
|
+
* * Options to control method `RegionOps.consolidateAdjacentPrimitives`
|
|
191609
|
+
* @public
|
|
191610
|
+
*/
|
|
191611
|
+
class ConsolidateAdjacentCurvePrimitivesOptions {
|
|
191612
|
+
constructor() {
|
|
191613
|
+
/** True to consolidated linear geometry (e.g. separate LineSegment3d and LineString3d) into LineString3d */
|
|
191614
|
+
this.consolidateLinearGeometry = true;
|
|
191615
|
+
/** True to consolidate contiguous arcs */
|
|
191616
|
+
this.consolidateCompatibleArcs = true;
|
|
191617
|
+
/** Tolerance for collapsing identical points */
|
|
191618
|
+
this.duplicatePointTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance;
|
|
191619
|
+
/** Tolerance for removing interior colinear points. */
|
|
191620
|
+
this.colinearPointTolerance = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance;
|
|
191621
|
+
}
|
|
191622
|
+
}
|
|
191617
191623
|
|
|
191618
191624
|
|
|
191619
191625
|
/***/ }),
|
|
@@ -193662,7 +193668,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193662
193668
|
fractionB = 1;
|
|
193663
193669
|
this._workPointB = pointB0.interpolate(fractionB, pointB1, this._workPointB);
|
|
193664
193670
|
const distanceSquared = this._workPointB.distanceSquaredXY(pointA);
|
|
193665
|
-
if (distanceSquared
|
|
193671
|
+
if (distanceSquared <= Math.min(maxDistanceSquared, closestApproach.detailA.a)) {
|
|
193666
193672
|
closestApproach.detailA.setFP(fractionA, pointA, undefined, distanceSquared);
|
|
193667
193673
|
closestApproach.detailB.setFP(fractionB, this._workPointB, undefined, distanceSquared);
|
|
193668
193674
|
updated = true;
|
|
@@ -193705,23 +193711,23 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193705
193711
|
closestApproach.detailA.a = 2 * maxDistanceSquared; // init to an approach that's too far away
|
|
193706
193712
|
let reversed = false;
|
|
193707
193713
|
const uu = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.hypotenuseSquaredXY(ux, uy);
|
|
193708
|
-
if (hab0 * hab0
|
|
193714
|
+
if (hab0 * hab0 <= maxDistanceSquared * uu) { // test distance of b0 to u
|
|
193709
193715
|
const fractionA = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.dotProductXYXY(ux, uy, e00x, e00y) / uu;
|
|
193710
193716
|
if (this.updatePointToSegmentDistance(0, b0, a0, a1, fractionA, maxDistanceSquared, closestApproach))
|
|
193711
193717
|
reversed = true;
|
|
193712
193718
|
}
|
|
193713
|
-
if (hab1 * hab1
|
|
193719
|
+
if (hab1 * hab1 <= maxDistanceSquared * uu) { // test distance of b1 to u
|
|
193714
193720
|
const fractionA = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.dotProductXYXY(ux, uy, e01x, e01y) / uu;
|
|
193715
193721
|
if (this.updatePointToSegmentDistance(1, b1, a0, a1, fractionA, maxDistanceSquared, closestApproach))
|
|
193716
193722
|
reversed = true;
|
|
193717
193723
|
}
|
|
193718
193724
|
const vv = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.hypotenuseSquaredXY(vx, vy);
|
|
193719
|
-
if (hba0 * hba0
|
|
193725
|
+
if (hba0 * hba0 <= maxDistanceSquared * vv) { // test distance of a0 to v
|
|
193720
193726
|
const fractionB = -_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.dotProductXYXY(vx, vy, e00x, e00y) / vv;
|
|
193721
193727
|
if (this.updatePointToSegmentDistance(0, a0, b0, b1, fractionB, maxDistanceSquared, closestApproach))
|
|
193722
193728
|
reversed = false;
|
|
193723
193729
|
}
|
|
193724
|
-
if (hba1 * hba1
|
|
193730
|
+
if (hba1 * hba1 <= maxDistanceSquared * vv) { // test distance of a1 to v
|
|
193725
193731
|
const fractionB = -_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.dotProductXYXY(vx, vy, e10x, e10y) / vv;
|
|
193726
193732
|
if (this.updatePointToSegmentDistance(1, a1, b0, b1, fractionB, maxDistanceSquared, closestApproach))
|
|
193727
193733
|
reversed = false;
|
|
@@ -193799,10 +193805,10 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193799
193805
|
* Low level dispatch of segment with arc.
|
|
193800
193806
|
* Find close approaches within maxDistance between a line segments (pointA0, pointA1) and an arc.
|
|
193801
193807
|
* To consider:
|
|
193802
|
-
* 1)
|
|
193803
|
-
* 2)
|
|
193808
|
+
* 1) intersection between arc and segment.
|
|
193809
|
+
* 2) arc endpoints to segment endpoints or arc endpoints projection to the segment.
|
|
193804
193810
|
* 3) line parallel to arc tangent.
|
|
193805
|
-
* @param cpA
|
|
193811
|
+
* @param cpA curve A (line segment or line string)
|
|
193806
193812
|
* @param pointA0 start point of the segment
|
|
193807
193813
|
* @param fractionA0 fraction of the start of the segment
|
|
193808
193814
|
* @param pointA1 end point of the segment
|
|
@@ -193811,9 +193817,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193811
193817
|
* @param reversed true to have order reversed in final structures
|
|
193812
193818
|
*/
|
|
193813
193819
|
dispatchSegmentArc(cpA, pointA0, fractionA0, pointA1, fractionA1, arc, reversed) {
|
|
193814
|
-
// 1)
|
|
193815
|
-
this.testAndRecordFractionalPairApproach(cpA, 0, 1, true, arc, 0, 1, false, reversed);
|
|
193816
|
-
// 2) intersection between arc and segment
|
|
193820
|
+
// 1) intersection between arc and segment
|
|
193817
193821
|
// Suppose:
|
|
193818
193822
|
// Arc: X = C + cU + sV where c = cos(theta) and s = sin(theta)
|
|
193819
193823
|
// Line: contains points A0 and A1
|
|
@@ -193822,6 +193826,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193822
193826
|
// solve for theta.
|
|
193823
193827
|
// evaluate points.
|
|
193824
193828
|
// project back to line.
|
|
193829
|
+
let intersectionFound = false;
|
|
193825
193830
|
const data = arc.toTransformedVectors();
|
|
193826
193831
|
const pointA0Local = pointA0;
|
|
193827
193832
|
const pointA1Local = pointA1;
|
|
@@ -193840,8 +193845,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193840
193845
|
// only add if the point is within the start and end fractions of both line segment and arc
|
|
193841
193846
|
if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {
|
|
193842
193847
|
this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
|
|
193848
|
+
intersectionFound = true;
|
|
193843
193849
|
}
|
|
193844
193850
|
}
|
|
193851
|
+
if (intersectionFound)
|
|
193852
|
+
return;
|
|
193853
|
+
// 2) endpoints to endpoints or endpoints projection to the other curve
|
|
193854
|
+
this.testAndRecordFractionalPairApproach(cpA, fractionA0, fractionA1, true, arc, 0, 1, false, reversed);
|
|
193845
193855
|
// 3) line parallel to arc tangent.
|
|
193846
193856
|
// If line does not intersect the arc, then the closest (and/or the furthest) point on arc to the line is a
|
|
193847
193857
|
// point where the tangent line on arc at that point is parallel to the line.
|
|
@@ -193858,48 +193868,37 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193858
193868
|
}
|
|
193859
193869
|
}
|
|
193860
193870
|
}
|
|
193861
|
-
|
|
193871
|
+
/** Low level dispatch of circular arc with circular arc. radiusA must be larger than or equal to radiusB. */
|
|
193862
193872
|
dispatchCircularCircularOrdered(cpA, radiusA, cpB, radiusB, reversed) {
|
|
193863
193873
|
const c = cpA.center.distance(cpB.center);
|
|
193864
193874
|
const e = this._maxDistanceToAccept !== undefined ? this._maxDistanceToAccept : _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance;
|
|
193865
|
-
if (c > radiusA + radiusB + e) //
|
|
193875
|
+
if (c > radiusA + radiusB + e) // distance between circles is more than max distance
|
|
193866
193876
|
return;
|
|
193867
|
-
//
|
|
193868
|
-
//
|
|
193869
|
-
// 2) true intersection
|
|
193870
|
-
// 3) line parallel to arc tangent.
|
|
193877
|
+
// TODO: 1) intersection between arcs
|
|
193878
|
+
// 2) endpoints to endpoints
|
|
193871
193879
|
this.testAndRecordFractionalPairApproach(cpA, 0, 1, false, cpB, 0, 1, false, reversed);
|
|
193880
|
+
// 3) line from one arc to another (perpendicular to arc tangents along center-center line)
|
|
193872
193881
|
if (!_Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.isSmallMetricDistance(c)) {
|
|
193873
|
-
// ?? endpoint hits are recorded. Maybe also need overlap?
|
|
193874
193882
|
const vectorAB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Vector3d.createStartEnd(cpA.center, cpB.center);
|
|
193875
193883
|
vectorAB.scaleInPlace(1.0 / c);
|
|
193876
|
-
|
|
193877
|
-
|
|
193878
|
-
|
|
193879
|
-
|
|
193880
|
-
|
|
193881
|
-
|
|
193882
|
-
|
|
193883
|
-
|
|
193884
|
-
|
|
193885
|
-
if (detailA) {
|
|
193886
|
-
const detailB = this.resolveDirectionToArcXYFraction(cpB, vectorAB, rB);
|
|
193887
|
-
if (detailB) {
|
|
193888
|
-
this.captureDetailPair(detailA, detailB, reversed);
|
|
193889
|
-
}
|
|
193890
|
-
}
|
|
193884
|
+
for (const rA of [-radiusA, radiusA]) {
|
|
193885
|
+
for (const rB of [-radiusB, radiusB]) {
|
|
193886
|
+
const tangentDistance = c - rA + rB;
|
|
193887
|
+
if (tangentDistance < e) {
|
|
193888
|
+
const detailA = this.resolveDirectionToArcXYFraction(cpA, vectorAB, rA);
|
|
193889
|
+
if (detailA) {
|
|
193890
|
+
const detailB = this.resolveDirectionToArcXYFraction(cpB, vectorAB, rB);
|
|
193891
|
+
if (detailB)
|
|
193892
|
+
this.captureDetailPair(detailA, detailB, reversed);
|
|
193891
193893
|
}
|
|
193892
193894
|
}
|
|
193893
193895
|
}
|
|
193894
193896
|
}
|
|
193895
193897
|
}
|
|
193896
193898
|
}
|
|
193897
|
-
/**
|
|
193898
|
-
* Find the fractional point (if any) on an arc, known to be circular and displayed from the center in the
|
|
193899
|
-
* direction of a scaled vector.
|
|
193900
|
-
*/
|
|
193899
|
+
/** Find the fractional point (if any) on the circular `arc` in the direction of `radialVector`. */
|
|
193901
193900
|
resolveDirectionToArcXYFraction(arc, radialVector, scale) {
|
|
193902
|
-
// The scale ultimately only affects the direction --- easiest way to use it is two multiplies
|
|
193901
|
+
// The scale ultimately only affects the direction --- easiest way to use it is two multiplies.
|
|
193903
193902
|
const c = scale * arc.matrixRef.columnDotXYZ(0, radialVector.x, radialVector.y, 0);
|
|
193904
193903
|
const s = scale * arc.matrixRef.columnDotXYZ(1, radialVector.x, radialVector.y, 0);
|
|
193905
193904
|
const radians = Math.atan2(s, c);
|
|
@@ -193908,10 +193907,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193908
193907
|
return _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveEvaluatedFraction(arc, fraction);
|
|
193909
193908
|
return undefined;
|
|
193910
193909
|
}
|
|
193911
|
-
|
|
193912
|
-
// Selects the best conditioned arc (in xy parts) as "circle after inversion"
|
|
193913
|
-
// Solves the arc-arc equations
|
|
193910
|
+
/** Low level dispatch of arc with arc. Only circular arcs are supported. */
|
|
193914
193911
|
dispatchArcArc(cpA, cpB, reversed) {
|
|
193912
|
+
const rangeA = cpA.range();
|
|
193913
|
+
const rangeB = cpB.range();
|
|
193914
|
+
rangeA.expandInPlace(this._maxDistanceToAccept);
|
|
193915
|
+
if (!rangeB.intersectsRangeXY(rangeA))
|
|
193916
|
+
return;
|
|
193915
193917
|
if (this._circularArcB) {
|
|
193916
193918
|
const radiusB = this._circularRadiusB;
|
|
193917
193919
|
const radiusA = cpA.circularRadiusXY();
|
|
@@ -193924,17 +193926,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193924
193926
|
}
|
|
193925
193927
|
}
|
|
193926
193928
|
}
|
|
193927
|
-
|
|
193928
|
-
// Selects the best conditioned arc (in xy parts) as "circle after inversion"
|
|
193929
|
-
// Solves the arc-arc equations
|
|
193929
|
+
/** Low level dispatch of arc with (beziers of) a bspline curve */
|
|
193930
193930
|
dispatchArcBsplineCurve3d(cpA, cpB, reversed) {
|
|
193931
193931
|
const ls = _LineString3d__WEBPACK_IMPORTED_MODULE_7__.LineString3d.create();
|
|
193932
193932
|
cpB.emitStrokes(ls);
|
|
193933
193933
|
this.computeArcLineString(cpA, ls, reversed);
|
|
193934
193934
|
}
|
|
193935
|
-
|
|
193936
|
-
// Selects the best conditioned arc (in xy parts) as "circle after inversion"
|
|
193937
|
-
// Solves the arc-arc equations
|
|
193935
|
+
/** Low level dispatch of (beziers of) a bspline curve with (beziers of) a bspline curve */
|
|
193938
193936
|
dispatchBSplineCurve3dBSplineCurve3d(bcurveA, bcurveB, reversed) {
|
|
193939
193937
|
const lsA = _LineString3d__WEBPACK_IMPORTED_MODULE_7__.LineString3d.create();
|
|
193940
193938
|
bcurveA.emitStrokes(lsA);
|
|
@@ -193972,6 +193970,11 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193972
193970
|
}
|
|
193973
193971
|
/** Detail computation for arc approaching linestring. */
|
|
193974
193972
|
computeArcLineString(arcA, lsB, reversed) {
|
|
193973
|
+
const rangeA = arcA.range();
|
|
193974
|
+
const rangeB = lsB.range();
|
|
193975
|
+
rangeA.expandInPlace(this._maxDistanceToAccept);
|
|
193976
|
+
if (!rangeB.intersectsRangeXY(rangeA))
|
|
193977
|
+
return;
|
|
193975
193978
|
const pointB0 = CurveCurveCloseApproachXY._workPointBB0;
|
|
193976
193979
|
const pointB1 = CurveCurveCloseApproachXY._workPointBB1;
|
|
193977
193980
|
const numB = lsB.numPoints();
|
|
@@ -193989,10 +193992,10 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193989
193992
|
}
|
|
193990
193993
|
return undefined;
|
|
193991
193994
|
}
|
|
193992
|
-
/** Low level dispatch of curve
|
|
193993
|
-
|
|
193995
|
+
/** Low level dispatch of curve collection. */
|
|
193996
|
+
dispatchCurveCollection(geomA, geomAHandler) {
|
|
193994
193997
|
const geomB = this._geometryB; // save
|
|
193995
|
-
if (!geomB || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.
|
|
193998
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection))
|
|
193996
193999
|
return;
|
|
193997
194000
|
for (const child of geomB.children) {
|
|
193998
194001
|
this.resetGeometry(child);
|
|
@@ -194015,9 +194018,10 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194015
194018
|
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_10__.BSplineCurve3d) {
|
|
194016
194019
|
this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);
|
|
194017
194020
|
}
|
|
194018
|
-
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.
|
|
194019
|
-
this.
|
|
194021
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
194022
|
+
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
194020
194023
|
}
|
|
194024
|
+
return undefined;
|
|
194021
194025
|
}
|
|
194022
194026
|
/**
|
|
194023
194027
|
* Set bits for comparison to range xy
|
|
@@ -194025,6 +194029,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194025
194029
|
* * bit 0x02 => x larger than range.high.x
|
|
194026
194030
|
* * bit 0x04 => y smaller than range.low.y
|
|
194027
194031
|
* * bit 0x08 => y larger than range.high.y
|
|
194032
|
+
* * If we divide XY plane into 9 areas using the range, the function returns 0 for points
|
|
194033
|
+
* inside the range. Below is other binary numbers returned by the function for all 9 areas:
|
|
194034
|
+
* 1001 | 1000 | 1010
|
|
194035
|
+
* ------------------
|
|
194036
|
+
* 1 | 0 | 10
|
|
194037
|
+
* ------------------
|
|
194038
|
+
* 101 | 100 | 110
|
|
194028
194039
|
* @param xy point to test
|
|
194029
194040
|
* @param range range for comparison
|
|
194030
194041
|
*/
|
|
@@ -194034,12 +194045,14 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194034
194045
|
result = 0x01;
|
|
194035
194046
|
else if (x > range.high.x)
|
|
194036
194047
|
result = 0x02;
|
|
194048
|
+
// note the OR operation
|
|
194037
194049
|
if (y < range.low.y)
|
|
194038
194050
|
result |= 0x04;
|
|
194039
194051
|
else if (y > range.high.y)
|
|
194040
194052
|
result |= 0x08;
|
|
194041
194053
|
return result;
|
|
194042
194054
|
}
|
|
194055
|
+
/** Low level dispatch of line string with line string. */
|
|
194043
194056
|
computeLineStringLineString(lsA, lsB, reversed) {
|
|
194044
194057
|
const rangeA = lsA.range();
|
|
194045
194058
|
const rangeB = lsB.range();
|
|
@@ -194056,7 +194069,6 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194056
194069
|
const numA = lsA.numPoints();
|
|
194057
194070
|
const numB = lsB.numPoints();
|
|
194058
194071
|
if (numA > 1 && numB > 1) {
|
|
194059
|
-
lsA.pointAt(0, pointA0);
|
|
194060
194072
|
const dfA = 1.0 / (numA - 1);
|
|
194061
194073
|
const dfB = 1.0 / (numB - 1);
|
|
194062
194074
|
let fA0 = 0.0;
|
|
@@ -194066,6 +194078,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194066
194078
|
fA1 = ia * dfA;
|
|
194067
194079
|
fB0 = 0.0;
|
|
194068
194080
|
lsA.pointAt(ia, pointA1);
|
|
194081
|
+
// rangeA1 is around line segment [A0,A1] expanded by max distance
|
|
194069
194082
|
rangeA1.setNull();
|
|
194070
194083
|
rangeA1.extendPoint(pointA0);
|
|
194071
194084
|
rangeA1.extendPoint(pointA1);
|
|
@@ -194077,10 +194090,10 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194077
194090
|
lsB.pointAt(ib, pointB1);
|
|
194078
194091
|
bitB1 = this.classifyBitsPointRangeXY(pointB1.x, pointB1.y, rangeA1);
|
|
194079
194092
|
fB1 = ib * dfB;
|
|
194080
|
-
//
|
|
194081
|
-
|
|
194093
|
+
// DO NOT study the segment in detail if both bitB bits are on for any of the 4 planes
|
|
194094
|
+
// (i.e., no intersection between rangeA1 and the range around line segment [B0,B1])
|
|
194095
|
+
if ((bitB0 & bitB1) === 0)
|
|
194082
194096
|
this.dispatchSegmentSegment(lsA, pointA0, fA0, pointA1, fA1, lsB, pointB0, fB0, pointB1, fB1, reversed);
|
|
194083
|
-
}
|
|
194084
194097
|
}
|
|
194085
194098
|
}
|
|
194086
194099
|
}
|
|
@@ -194101,8 +194114,8 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194101
194114
|
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_10__.BSplineCurve3d) {
|
|
194102
194115
|
this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);
|
|
194103
194116
|
}
|
|
194104
|
-
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.
|
|
194105
|
-
this.
|
|
194117
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
194118
|
+
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
194106
194119
|
}
|
|
194107
194120
|
return undefined;
|
|
194108
194121
|
}
|
|
@@ -194120,8 +194133,8 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194120
194133
|
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_10__.BSplineCurve3d) {
|
|
194121
194134
|
this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);
|
|
194122
194135
|
}
|
|
194123
|
-
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.
|
|
194124
|
-
this.
|
|
194136
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
194137
|
+
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
194125
194138
|
}
|
|
194126
194139
|
return undefined;
|
|
194127
194140
|
}
|
|
@@ -194139,8 +194152,8 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194139
194152
|
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_10__.BSplineCurve3dBase) {
|
|
194140
194153
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
194141
194154
|
}
|
|
194142
|
-
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.
|
|
194143
|
-
this.
|
|
194155
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
194156
|
+
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
194144
194157
|
}
|
|
194145
194158
|
return undefined;
|
|
194146
194159
|
}
|
|
@@ -211609,7 +211622,6 @@ class XYZ {
|
|
|
211609
211622
|
}
|
|
211610
211623
|
/**
|
|
211611
211624
|
* Set the x,y,z parts from one of these input types
|
|
211612
|
-
*
|
|
211613
211625
|
* * XYZ -- copy the x,y,z parts
|
|
211614
211626
|
* * Float64Array -- Copy from indices 0,1,2 to x,y,z
|
|
211615
211627
|
* * XY -- copy the x, y parts and set z=0
|
|
@@ -220386,7 +220398,7 @@ class YawPitchRollAngles {
|
|
|
220386
220398
|
*/
|
|
220387
220399
|
static createFromMatrix3d(matrix, result) {
|
|
220388
220400
|
/**
|
|
220389
|
-
* The rotation matrix
|
|
220401
|
+
* The rotation matrix form is
|
|
220390
220402
|
*
|
|
220391
220403
|
* Matrix3d.createRowValues(
|
|
220392
220404
|
* cz * cy, -(sz * cx + cz * sy * sx), (sz * sx - cz * sy * cx),
|
|
@@ -287561,7 +287573,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
|
|
|
287561
287573
|
/***/ ((module) => {
|
|
287562
287574
|
|
|
287563
287575
|
"use strict";
|
|
287564
|
-
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.2.0-dev.
|
|
287576
|
+
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.2.0-dev.18","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s webpackWorkers && npm run -s copy:workers","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module 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","copy:workers":"cpx \\"./lib/workers/webpack/parse-imdl-worker.js\\" ./lib/public/scripts","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint -c extraction.eslint.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 && npm run -s webpackTestWorker","webpackTestWorker":"webpack --config ./src/test/worker/webpack.config.js 1>&2 && cpx \\"./lib/test/test-worker.js\\" ./lib/test","webpackWorkers":"webpack --config ./src/workers/ImdlParser/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.2.0-dev.18","@itwin/core-bentley":"workspace:^4.2.0-dev.18","@itwin/core-common":"workspace:^4.2.0-dev.18","@itwin/core-geometry":"workspace:^4.2.0-dev.18","@itwin/core-orbitgt":"workspace:^4.2.0-dev.18","@itwin/core-quantity":"workspace:^4.2.0-dev.18"},"//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.44","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^8.2.2","@types/node":"18.16.1","@types/sinon":"^10.0.15","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.44.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^15.0.4","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/cloud-agnostic-core":"^2.1.0","@itwin/object-storage-core":"^2.1.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"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
|
|
287565
287577
|
|
|
287566
287578
|
/***/ })
|
|
287567
287579
|
|