@itwin/ecschema-rpcinterface-tests 4.3.0-dev.2 → 4.3.0-dev.5
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/bundled-tests.js +631 -336
- package/lib/dist/bundled-tests.js.map +1 -1
- package/package.json +16 -16
|
@@ -100657,6 +100657,7 @@ const UNIT_DATA = [
|
|
|
100657
100657
|
{ name: "Units.SQ_FT", phenomenon: "Units.AREA", system: "Units.USCUSTOM", conversion: { numerator: 1.0, denominator: .09290304, offset: 0.0 }, displayLabel: "ft²" },
|
|
100658
100658
|
{ name: "Units.SQ_US_SURVEY_FT", phenomenon: "Units.AREA", system: "Units.USCUSTOM", conversion: { numerator: 15499969.0, denominator: 1440000, offset: 0.0 }, displayLabel: "ft² (US Survey)" },
|
|
100659
100659
|
{ name: "Units.SQ_M", phenomenon: "Units.AREA", system: "Units.SI", conversion: { numerator: 1.0, denominator: 1.0, offset: 0.0 }, displayLabel: "m²" },
|
|
100660
|
+
{ name: "Units.SQ_KM", phenomenon: "Units.AREA", system: "Units.SI", conversion: { numerator: 1.0, denominator: 1000000.0, offset: 0.0 }, displayLabel: "km²" },
|
|
100660
100661
|
// conversion => specified unit to base unit m³
|
|
100661
100662
|
{ name: "Units.CUB_FT", phenomenon: "Units.VOLUME", system: "Units.USCUSTOM", conversion: { numerator: 1.0, denominator: 0.028316847, offset: 0.0 }, displayLabel: "ft³" },
|
|
100662
100663
|
{ name: "Units.CUB_US_SURVEY_FT", phenomenon: "Units.VOLUME", system: "Units.USSURVEY", conversion: { numerator: 1, denominator: 0.0283170164937591, offset: 0.0 }, displayLabel: "ft³" },
|
|
@@ -136885,8 +136886,8 @@ class ContextShareProvider {
|
|
|
136885
136886
|
// Not a valid URL for Context share
|
|
136886
136887
|
return false;
|
|
136887
136888
|
}
|
|
136888
|
-
// If api.bentley.com/realitydata is used, it is context share
|
|
136889
|
-
if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata"))
|
|
136889
|
+
// If api.bentley.com/realitydata or api.bentley.com/reality-management is used, it is context share
|
|
136890
|
+
if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata") || tilesetUrl.toLowerCase().includes("api.bentley.com/reality-management/reality-data"))
|
|
136890
136891
|
return true;
|
|
136891
136892
|
// detect if it is a RDS url
|
|
136892
136893
|
const formattedUrl1 = attUrl.pathname.replace(/~2F/g, "/").replace(/\\/g, "/");
|
|
@@ -136916,16 +136917,24 @@ class ContextShareProvider {
|
|
|
136916
136917
|
// Not a valid URL and not equal, probably $cesiumAsset
|
|
136917
136918
|
return invalidUrlInfo;
|
|
136918
136919
|
}
|
|
136919
|
-
// If api.bentley.com/realitydata is used, it is context share
|
|
136920
|
-
if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata")) {
|
|
136920
|
+
// If api.bentley.com/realitydata or api.bentley.com/reality-management is used, it is context share
|
|
136921
|
+
if (tilesetUrl.toLowerCase().includes("api.bentley.com/realitydata") || tilesetUrl.toLowerCase().includes("api.bentley.com/reality-management/reality-data")) {
|
|
136921
136922
|
const lcTilesetUrl = tilesetUrl.toLowerCase();
|
|
136922
136923
|
// NOTICE: We assume it is a ThreeDTile BUT this could technically be a point cloud (OPC).
|
|
136923
136924
|
// This method was used in typical workflow where format was always ThreeDTile and is here for legacy support.
|
|
136924
136925
|
// We don't want to make a call to RDS to resolve format since this method must not be async (it is used in workflow that are not async)
|
|
136925
136926
|
const format = _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.RealityDataFormat.ThreeDTile;
|
|
136926
|
-
|
|
136927
|
+
let indexId = -1;
|
|
136928
|
+
let indexProjectId = -1;
|
|
136929
|
+
if (tilesetUrl.toLowerCase().includes("reality-management/reality-data")) {
|
|
136930
|
+
indexId = lcTilesetUrl.indexOf("reality-management/reality-data/") + 32; // length of "reality-management/reality-data/" = 32;
|
|
136931
|
+
indexProjectId = lcTilesetUrl.indexOf("itwinid=") + 8; // length of "itwinid=" = 8;
|
|
136932
|
+
}
|
|
136933
|
+
else if (tilesetUrl.toLowerCase().includes("realitydata")) {
|
|
136934
|
+
indexId = lcTilesetUrl.indexOf("realitydata/") + 12; // length of "realitydata/" = 12;
|
|
136935
|
+
indexProjectId = lcTilesetUrl.indexOf("projectid=") + 10; // length of "projectid=" = 10;
|
|
136936
|
+
}
|
|
136927
136937
|
const id = lcTilesetUrl.substring(indexId, _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Guid.empty.length + indexId);
|
|
136928
|
-
const indexProjectId = lcTilesetUrl.indexOf("projectid=") + 10; // lenght of "projectid=" = 10;
|
|
136929
136938
|
let projectId;
|
|
136930
136939
|
if (indexProjectId && indexProjectId > 0)
|
|
136931
136940
|
projectId = lcTilesetUrl.substring(indexProjectId, _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Guid.empty.length + indexProjectId);
|
|
@@ -147134,7 +147143,8 @@ var TileGraphicType;
|
|
|
147134
147143
|
*/
|
|
147135
147144
|
class TileTreeReference /* implements RenderMemory.Consumer */ {
|
|
147136
147145
|
/** Force a new tree owner / tile tree to be created for the current tile tree reference
|
|
147137
|
-
|
|
147146
|
+
* @internal
|
|
147147
|
+
*/
|
|
147138
147148
|
resetTreeOwner() { }
|
|
147139
147149
|
/** Disclose *all* TileTrees use by this reference. This may include things like map tiles used for draping on terrain.
|
|
147140
147150
|
* Override this and call super if you have such auxiliary trees.
|
|
@@ -148260,7 +148270,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
148260
148270
|
/** @packageDocumentation
|
|
148261
148271
|
* @module Tiles
|
|
148262
148272
|
*/
|
|
148263
|
-
/**
|
|
148273
|
+
/**
|
|
148274
|
+
* Class representing an ArcGIS error code.
|
|
148275
|
+
* @internal
|
|
148276
|
+
*/
|
|
148264
148277
|
var ArcGisErrorCode;
|
|
148265
148278
|
(function (ArcGisErrorCode) {
|
|
148266
148279
|
ArcGisErrorCode[ArcGisErrorCode["InvalidCredentials"] = 401] = "InvalidCredentials";
|
|
@@ -148269,7 +148282,10 @@ var ArcGisErrorCode;
|
|
|
148269
148282
|
ArcGisErrorCode[ArcGisErrorCode["UnknownError"] = 1000] = "UnknownError";
|
|
148270
148283
|
ArcGisErrorCode[ArcGisErrorCode["NoTokenService"] = 1001] = "NoTokenService";
|
|
148271
148284
|
})(ArcGisErrorCode || (ArcGisErrorCode = {}));
|
|
148272
|
-
/**
|
|
148285
|
+
/**
|
|
148286
|
+
* Class containing utilities relating to ArcGIS services and coordinate systems.
|
|
148287
|
+
* @internal
|
|
148288
|
+
*/
|
|
148273
148289
|
class ArcGisUtilities {
|
|
148274
148290
|
static getBBoxString(range) {
|
|
148275
148291
|
if (!range)
|
|
@@ -148327,6 +148343,12 @@ class ArcGisUtilities {
|
|
|
148327
148343
|
}
|
|
148328
148344
|
return sources;
|
|
148329
148345
|
}
|
|
148346
|
+
/**
|
|
148347
|
+
* Get map layer sources from an ArcGIS query.
|
|
148348
|
+
* @param range Range for the query.
|
|
148349
|
+
* @param url URL for the query.
|
|
148350
|
+
* @returns List of map layer sources.
|
|
148351
|
+
*/
|
|
148330
148352
|
static async getSourcesFromQuery(range, url = "https://usgs.maps.arcgis.com/sharing/rest/search") {
|
|
148331
148353
|
const sources = new Array();
|
|
148332
148354
|
for (let start = 1; start > 0;) {
|
|
@@ -148346,11 +148368,11 @@ class ArcGisUtilities {
|
|
|
148346
148368
|
return sources;
|
|
148347
148369
|
}
|
|
148348
148370
|
/**
|
|
148349
|
-
* Parse the URL to check if it
|
|
148371
|
+
* Parse the URL to check if it represents a valid ArcGIS service
|
|
148350
148372
|
* @param url URL to validate.
|
|
148351
148373
|
* @param serviceType Service type to validate (i.e FeatureServer, MapServer)
|
|
148352
148374
|
* @return Validation Status.
|
|
148353
|
-
|
|
148375
|
+
*/
|
|
148354
148376
|
static validateUrl(url, serviceType) {
|
|
148355
148377
|
const urlObj = new URL(url.toLowerCase());
|
|
148356
148378
|
if (urlObj.pathname.includes("/rest/services/")) {
|
|
@@ -148373,10 +148395,10 @@ class ArcGisUtilities {
|
|
|
148373
148395
|
* @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata
|
|
148374
148396
|
* in order to be valid. For example: 'Map', 'Query', etc
|
|
148375
148397
|
* @param userName Username to use for legacy token based security.
|
|
148376
|
-
* @param password
|
|
148398
|
+
* @param password Password to use for legacy token based security.
|
|
148377
148399
|
* @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)
|
|
148378
148400
|
* @return Validation Status. If successful, a list of available sub-layers will also be returned.
|
|
148379
|
-
|
|
148401
|
+
*/
|
|
148380
148402
|
static async validateSource(url, formatId, capabilitiesFilter, userName, password, ignoreCache) {
|
|
148381
148403
|
const metadata = await this.getServiceJson(url, formatId, userName, password, ignoreCache);
|
|
148382
148404
|
const json = metadata?.content;
|
|
@@ -148420,9 +148442,7 @@ class ArcGisUtilities {
|
|
|
148420
148442
|
}
|
|
148421
148443
|
return { status: _internal__WEBPACK_IMPORTED_MODULE_1__.MapLayerSourceStatus.Valid, subLayers };
|
|
148422
148444
|
}
|
|
148423
|
-
/**
|
|
148424
|
-
* Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible.
|
|
148425
|
-
*/
|
|
148445
|
+
/** Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible. */
|
|
148426
148446
|
static isEpsg3857Compatible(tileInfo) {
|
|
148427
148447
|
if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))
|
|
148428
148448
|
return false;
|
|
@@ -148430,11 +148450,17 @@ class ArcGisUtilities {
|
|
|
148430
148450
|
return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;
|
|
148431
148451
|
}
|
|
148432
148452
|
/**
|
|
148433
|
-
*
|
|
148453
|
+
* Fetches an ArcGIS service metadata, and returns its JSON representation.
|
|
148434
148454
|
* If an access client has been configured for the specified formatId,
|
|
148435
148455
|
* it will be used to apply required security token.
|
|
148436
148456
|
* By default, response for each URL are cached.
|
|
148437
|
-
|
|
148457
|
+
* @param url URL of the ArcGIS service
|
|
148458
|
+
* @param formatId Format ID of the service
|
|
148459
|
+
* @param userName Username to use for legacy token based security
|
|
148460
|
+
* @param password Password to use for legacy token based security
|
|
148461
|
+
* @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)
|
|
148462
|
+
* @param requireToken Flag to indicate if a token is required
|
|
148463
|
+
*/
|
|
148438
148464
|
static async getServiceJson(url, formatId, userName, password, ignoreCache, requireToken) {
|
|
148439
148465
|
if (!ignoreCache) {
|
|
148440
148466
|
const cached = ArcGisUtilities._serviceCache.get(url);
|
|
@@ -148481,8 +148507,7 @@ class ArcGisUtilities {
|
|
|
148481
148507
|
return undefined;
|
|
148482
148508
|
}
|
|
148483
148509
|
}
|
|
148484
|
-
/** Read a response from ArcGIS server and check for error code in the response.
|
|
148485
|
-
*/
|
|
148510
|
+
/** Read a response from ArcGIS server and check for error code in the response. */
|
|
148486
148511
|
static async checkForResponseErrorCode(response) {
|
|
148487
148512
|
const tmpResponse = response;
|
|
148488
148513
|
if (response.headers && tmpResponse.headers.get("content-type")?.toLowerCase().includes("json")) {
|
|
@@ -148523,8 +148548,7 @@ class ArcGisUtilities {
|
|
|
148523
148548
|
* @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)
|
|
148524
148549
|
* @param tileSize Size of a tile in pixels (i.e 256)
|
|
148525
148550
|
* @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)
|
|
148526
|
-
*
|
|
148527
|
-
* @returns An array containing resolution and scale values for each requested zoom level
|
|
148551
|
+
* @returns An array containing resolution and scale values for each requested zoom level
|
|
148528
148552
|
*/
|
|
148529
148553
|
static computeZoomLevelsScales(startZoom = 0, endZoom = 20, latitude = 0, tileSize = 256, screenDpi = 96) {
|
|
148530
148554
|
// Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.
|
|
@@ -148543,12 +148567,12 @@ class ArcGisUtilities {
|
|
|
148543
148567
|
return results;
|
|
148544
148568
|
}
|
|
148545
148569
|
/**
|
|
148546
|
-
* Match the provided minScale,maxScale values to corresponding wgs84 zoom levels
|
|
148570
|
+
* Match the provided minScale, maxScale values to corresponding wgs84 zoom levels
|
|
148547
148571
|
* @param defaultMaxLod Value of the last LOD (i.e 22)
|
|
148548
148572
|
* @param tileSize Size of a tile in pixels (i.e 256)
|
|
148549
148573
|
* @param minScale Minimum scale value that needs to be matched to a LOD level
|
|
148550
148574
|
* @param maxScale Maximum scale value that needs to be matched to a LOD level
|
|
148551
|
-
|
|
148575
|
+
* @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale
|
|
148552
148576
|
*/
|
|
148553
148577
|
static getZoomLevelsScales(defaultMaxLod, tileSize, minScale, maxScale, tolerance = 0) {
|
|
148554
148578
|
let minLod, maxLod;
|
|
@@ -149565,9 +149589,9 @@ class ArcGISMapLayerImageryProvider extends _internal__WEBPACK_IMPORTED_MODULE_2
|
|
|
149565
149589
|
return undefined;
|
|
149566
149590
|
}
|
|
149567
149591
|
}
|
|
149568
|
-
_generateChildIds(
|
|
149569
|
-
const childIds = this.getPotentialChildIds(
|
|
149570
|
-
if (
|
|
149592
|
+
_generateChildIds(quadId, resolveChildren) {
|
|
149593
|
+
const childIds = this.getPotentialChildIds(quadId);
|
|
149594
|
+
if (quadId.level < Math.max(1, this.minimumZoomLevel - 1)) {
|
|
149571
149595
|
resolveChildren(childIds);
|
|
149572
149596
|
return;
|
|
149573
149597
|
}
|
|
@@ -150866,14 +150890,14 @@ class WmtsMapLayerImageryProvider extends _internal__WEBPACK_IMPORTED_MODULE_2__
|
|
|
150866
150890
|
getDisplayedTileMatrixSetAndLimits() {
|
|
150867
150891
|
return this._preferredLayerTileMatrixSet.get(this.displayedLayerName);
|
|
150868
150892
|
}
|
|
150869
|
-
_generateChildIds(
|
|
150870
|
-
const childIds = this.getPotentialChildIds(
|
|
150893
|
+
_generateChildIds(quadId, resolveChildren) {
|
|
150894
|
+
const childIds = this.getPotentialChildIds(quadId);
|
|
150871
150895
|
const matrixSetAndLimits = this.getDisplayedTileMatrixSetAndLimits();
|
|
150872
150896
|
if (!matrixSetAndLimits) {
|
|
150873
150897
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false); // Must always hava a matrix set.
|
|
150874
150898
|
return;
|
|
150875
150899
|
}
|
|
150876
|
-
const limits = matrixSetAndLimits.limits?.[
|
|
150900
|
+
const limits = matrixSetAndLimits.limits?.[quadId.level + 1]?.limits;
|
|
150877
150901
|
if (!limits) {
|
|
150878
150902
|
resolveChildren(childIds);
|
|
150879
150903
|
return;
|
|
@@ -151253,17 +151277,24 @@ class ImageryMapLayerTreeSupplier {
|
|
|
151253
151277
|
}
|
|
151254
151278
|
const imageryTreeSupplier = new ImageryMapLayerTreeSupplier();
|
|
151255
151279
|
/** A reference to one of our tile trees. The specific TileTree drawn may change when the desired imagery type or target iModel changes.
|
|
151256
|
-
* @
|
|
151280
|
+
* @beta
|
|
151257
151281
|
*/
|
|
151258
151282
|
class ImageryMapLayerTreeReference extends _internal__WEBPACK_IMPORTED_MODULE_4__.MapLayerTileTreeReference {
|
|
151259
|
-
|
|
151260
|
-
|
|
151283
|
+
/**
|
|
151284
|
+
* Constructor for an ImageryMapLayerTreeReference.
|
|
151285
|
+
* @param layerSettings Map layer settings that are applied to the ImageryMapLayerTreeReference.
|
|
151286
|
+
* @param layerIndex The index of the associated map layer. Usually passed in through [[createMapLayerTreeReference]] in [[MapTileTree]]'s constructor.
|
|
151287
|
+
* @param iModel The iModel containing the ImageryMapLayerTreeReference.
|
|
151288
|
+
*/
|
|
151289
|
+
constructor(args) {
|
|
151290
|
+
super(args.layerSettings, args.layerIndex, args.iModel);
|
|
151261
151291
|
}
|
|
151262
151292
|
get castsShadows() { return false; }
|
|
151263
151293
|
/** Return the owner of the TileTree to draw. */
|
|
151264
151294
|
get treeOwner() {
|
|
151265
151295
|
return this.iModel.tiles.getTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);
|
|
151266
151296
|
}
|
|
151297
|
+
/* @internal */
|
|
151267
151298
|
resetTreeOwner() {
|
|
151268
151299
|
return this.iModel.tiles.resetTileTreeOwner({ settings: this._layerSettings }, imageryTreeSupplier);
|
|
151269
151300
|
}
|
|
@@ -151530,32 +151561,52 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
151530
151561
|
|
|
151531
151562
|
|
|
151532
151563
|
const loggerCategory = "ArcGISFeatureProvider";
|
|
151533
|
-
/**
|
|
151564
|
+
/**
|
|
151565
|
+
* Class representing a map-layer format.
|
|
151534
151566
|
* Each format has it's unique 'formatId' string, used to uniquely identify a format in the [[MapLayerFormatRegistry]].
|
|
151535
151567
|
* When creating an [[ImageMapLayerSettings]] object, a format needs to be specified this 'formatId'.
|
|
151536
151568
|
* The MapLayerFormat object can later be used to validate a source, or create a provider.
|
|
151537
151569
|
*
|
|
151538
|
-
* Subclasses should override formatId and [[MapLayerFormat.
|
|
151570
|
+
* Subclasses should override formatId, [[MapLayerFormat.createImageryProvider]], and [[MapLayerFormat.createMapLayerTree]].
|
|
151539
151571
|
* @public
|
|
151540
151572
|
*/
|
|
151541
151573
|
class MapLayerFormat {
|
|
151542
|
-
/** Register the current format in the [[MapLayerFormatRegistry]].
|
|
151543
|
-
*/
|
|
151574
|
+
/** Register the current format in the [[MapLayerFormatRegistry]]. */
|
|
151544
151575
|
static register() { _IModelApp__WEBPACK_IMPORTED_MODULE_1__.IModelApp.mapLayerFormatRegistry.register(this); }
|
|
151545
|
-
/**
|
|
151546
|
-
|
|
151576
|
+
/**
|
|
151577
|
+
* Allow a source of a specific format to be validated before being attached as a map-layer.
|
|
151578
|
+
* @param _url The URL of the source.
|
|
151579
|
+
* @param _userName The username to access the source if needed.
|
|
151580
|
+
* @param _password The password to access the source if needed.
|
|
151581
|
+
* @param _ignoreCache Flag to skip cache lookup (i.e. force a new server request).
|
|
151582
|
+
* @returns Validation Status. If successful, a list of available sub-layers may also be returned.
|
|
151583
|
+
*/
|
|
151547
151584
|
static async validateSource(_url, _userName, _password, _ignoreCache) { return { status: _internal__WEBPACK_IMPORTED_MODULE_2__.MapLayerSourceStatus.Valid }; }
|
|
151548
|
-
/**
|
|
151549
|
-
*
|
|
151550
|
-
|
|
151551
|
-
|
|
151552
|
-
|
|
151585
|
+
/**
|
|
151586
|
+
* Create a [[MapLayerImageryProvider]] that will be used to feed data in a map-layer tile tree.
|
|
151587
|
+
* @param _settings The map layer settings to be applied to the imagery provider.
|
|
151588
|
+
* @returns Returns the new imagery provider.
|
|
151589
|
+
* @beta
|
|
151590
|
+
*/
|
|
151591
|
+
static createImageryProvider(_settings) {
|
|
151592
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "Subclasses must override this method.");
|
|
151593
|
+
return undefined;
|
|
151594
|
+
}
|
|
151595
|
+
/**
|
|
151596
|
+
* Creates a MapLayerTileTreeReference for this map layer format.
|
|
151597
|
+
* @param _layerSettings Map layer settings that are applied to the MapLayerTileTreeReference.
|
|
151598
|
+
* @param _layerIndex The index of the associated map layer.
|
|
151599
|
+
* @param _iModel The iModel containing the MapLayerTileTreeReference.
|
|
151600
|
+
* @returns Returns the new tile tree reference.
|
|
151601
|
+
* @beta
|
|
151602
|
+
*/
|
|
151553
151603
|
static createMapLayerTree(_layerSettings, _layerIndex, _iModel) {
|
|
151554
|
-
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false);
|
|
151604
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "Subclasses must override this method.");
|
|
151555
151605
|
return undefined;
|
|
151556
151606
|
}
|
|
151557
151607
|
}
|
|
151558
|
-
/**
|
|
151608
|
+
/**
|
|
151609
|
+
* A registry of MapLayerFormats identified by their unique format IDs. The registry can be accessed via [[IModelApp.mapLayerFormatRegistry]].
|
|
151559
151610
|
* @public
|
|
151560
151611
|
*/
|
|
151561
151612
|
class MapLayerFormatRegistry {
|
|
@@ -151598,7 +151649,8 @@ class MapLayerFormatRegistry {
|
|
|
151598
151649
|
}
|
|
151599
151650
|
return format.createMapLayerTree(layerSettings, layerIndex, iModel);
|
|
151600
151651
|
}
|
|
151601
|
-
/**
|
|
151652
|
+
/**
|
|
151653
|
+
* Returns a [[MapLayerImageryProvider]] based on the provided [[ImageMapLayerSettings]] object.
|
|
151602
151654
|
* @internal
|
|
151603
151655
|
*/
|
|
151604
151656
|
createImageryProvider(layerSettings) {
|
|
@@ -151643,7 +151695,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
151643
151695
|
class ImageryMapLayerFormat extends _internal__WEBPACK_IMPORTED_MODULE_0__.MapLayerFormat {
|
|
151644
151696
|
/** @internal */
|
|
151645
151697
|
static createMapLayerTree(layerSettings, layerIndex, iModel) {
|
|
151646
|
-
return new _internal__WEBPACK_IMPORTED_MODULE_0__.ImageryMapLayerTreeReference(layerSettings, layerIndex, iModel);
|
|
151698
|
+
return new _internal__WEBPACK_IMPORTED_MODULE_0__.ImageryMapLayerTreeReference({ layerSettings, layerIndex, iModel });
|
|
151647
151699
|
}
|
|
151648
151700
|
}
|
|
151649
151701
|
class WmsMapLayerFormat extends ImageryMapLayerFormat {
|
|
@@ -151875,15 +151927,23 @@ class MapLayerImageryProvider {
|
|
|
151875
151927
|
this._geographicTilingScheme = new _internal__WEBPACK_IMPORTED_MODULE_5__.GeographicTilingScheme();
|
|
151876
151928
|
/** @internal */
|
|
151877
151929
|
this._status = MapLayerImageryProviderStatus.Valid;
|
|
151878
|
-
|
|
151879
|
-
|
|
151930
|
+
/**
|
|
151931
|
+
* This value is used internally for various computations, this should not get overriden.
|
|
151932
|
+
* @internal
|
|
151933
|
+
*/
|
|
151880
151934
|
this.defaultMinimumZoomLevel = 0;
|
|
151881
|
-
/**
|
|
151935
|
+
/**
|
|
151936
|
+
* This value is used internally for various computations, this should not get overriden.
|
|
151937
|
+
* @internal
|
|
151938
|
+
*/
|
|
151882
151939
|
this.defaultMaximumZoomLevel = 22;
|
|
151883
151940
|
this._mercatorTilingScheme = new _internal__WEBPACK_IMPORTED_MODULE_5__.WebMercatorTilingScheme();
|
|
151884
151941
|
this._geographicTilingScheme = new _internal__WEBPACK_IMPORTED_MODULE_5__.GeographicTilingScheme(2, 1, true);
|
|
151885
151942
|
}
|
|
151886
|
-
/**
|
|
151943
|
+
/**
|
|
151944
|
+
* Initialize the provider by loading the first tile at its default maximum zoom level.
|
|
151945
|
+
* @beta
|
|
151946
|
+
*/
|
|
151887
151947
|
async initialize() {
|
|
151888
151948
|
this.loadTile(0, 0, this.defaultMaximumZoomLevel).then((tileData) => {
|
|
151889
151949
|
if (tileData !== undefined)
|
|
@@ -151891,20 +151951,31 @@ class MapLayerImageryProvider {
|
|
|
151891
151951
|
});
|
|
151892
151952
|
}
|
|
151893
151953
|
get tilingScheme() { return this.useGeographicTilingScheme ? this._geographicTilingScheme : this._mercatorTilingScheme; }
|
|
151894
|
-
/**
|
|
151954
|
+
/**
|
|
151955
|
+
* Add attribution logo cards for the data supplied by this provider to the [[Viewport]]'s logo div.
|
|
151956
|
+
* @param _cards Logo cards HTML element that may contain custom data attributes.
|
|
151957
|
+
* @param _viewport Viewport to add logo cards to.
|
|
151958
|
+
* @beta
|
|
151959
|
+
*/
|
|
151895
151960
|
addLogoCards(_cards, _viewport) { }
|
|
151896
151961
|
/** @internal */
|
|
151897
151962
|
get transparentBackgroundString() { return this._settings.transparentBackground ? "true" : "false"; }
|
|
151898
151963
|
/** @internal */
|
|
151899
151964
|
async _areChildrenAvailable(_tile) { return true; }
|
|
151900
151965
|
/** @internal */
|
|
151901
|
-
getPotentialChildIds(
|
|
151902
|
-
const childLevel =
|
|
151903
|
-
return
|
|
151966
|
+
getPotentialChildIds(quadId) {
|
|
151967
|
+
const childLevel = quadId.level + 1;
|
|
151968
|
+
return quadId.getChildIds(this.tilingScheme.getNumberOfXChildrenAtLevel(childLevel), this.tilingScheme.getNumberOfYChildrenAtLevel(childLevel));
|
|
151904
151969
|
}
|
|
151905
|
-
/**
|
|
151906
|
-
|
|
151907
|
-
|
|
151970
|
+
/**
|
|
151971
|
+
* Get child IDs of a quad and generate tiles based on these child IDs.
|
|
151972
|
+
* See [[ImageryTileTree._loadChildren]] for the definition of `resolveChildren` where this function is commonly called.
|
|
151973
|
+
* @param quadId quad to generate child IDs for.
|
|
151974
|
+
* @param resolveChildren Function that creates tiles from child IDs.
|
|
151975
|
+
* @beta
|
|
151976
|
+
*/
|
|
151977
|
+
_generateChildIds(quadId, resolveChildren) {
|
|
151978
|
+
resolveChildren(this.getPotentialChildIds(quadId));
|
|
151908
151979
|
}
|
|
151909
151980
|
/** @internal */
|
|
151910
151981
|
generateChildIds(tile, resolveChildren) {
|
|
@@ -151912,9 +151983,16 @@ class MapLayerImageryProvider {
|
|
|
151912
151983
|
tile.setLeaf();
|
|
151913
151984
|
return;
|
|
151914
151985
|
}
|
|
151915
|
-
this._generateChildIds(tile, resolveChildren);
|
|
151986
|
+
this._generateChildIds(tile.quadId, resolveChildren);
|
|
151916
151987
|
}
|
|
151917
|
-
/**
|
|
151988
|
+
/**
|
|
151989
|
+
* Get tooltip text for a specific quad and cartographic position.
|
|
151990
|
+
* @param strings List of strings to contain tooltip text.
|
|
151991
|
+
* @param quadId Quad ID to get tooltip for.
|
|
151992
|
+
* @param _carto Cartographic that may be used to retrieve and/or format tooltip text.
|
|
151993
|
+
* @param tree Tree associated with the quad to get the tooltip for.
|
|
151994
|
+
* @internal
|
|
151995
|
+
*/
|
|
151918
151996
|
async getToolTip(strings, quadId, _carto, tree) {
|
|
151919
151997
|
if (doDebugToolTips) {
|
|
151920
151998
|
const range = quadId.getLatLongRangeDegrees(tree.tilingScheme);
|
|
@@ -151949,7 +152027,8 @@ class MapLayerImageryProvider {
|
|
|
151949
152027
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "Invalid tile content type");
|
|
151950
152028
|
return undefined;
|
|
151951
152029
|
}
|
|
151952
|
-
/**
|
|
152030
|
+
/**
|
|
152031
|
+
* Change the status of this provider.
|
|
151953
152032
|
* Sub-classes should override 'onStatusUpdated' instead of this method.
|
|
151954
152033
|
* @internal
|
|
151955
152034
|
*/
|
|
@@ -152032,31 +152111,49 @@ class MapLayerImageryProvider {
|
|
|
152032
152111
|
}
|
|
152033
152112
|
return true;
|
|
152034
152113
|
}
|
|
152035
|
-
/**
|
|
152036
|
-
|
|
152114
|
+
/**
|
|
152115
|
+
* Calculates the projected x cartesian coordinate in EPSG:3857 from the longitude in EPSG:4326 (WGS84)
|
|
152116
|
+
* @param longitude Longitude in EPSG:4326 (WGS84)
|
|
152117
|
+
* @internal
|
|
152118
|
+
*/
|
|
152037
152119
|
getEPSG3857X(longitude) {
|
|
152038
152120
|
return longitude * 20037508.34 / 180.0;
|
|
152039
152121
|
}
|
|
152040
|
-
/**
|
|
152041
|
-
|
|
152122
|
+
/**
|
|
152123
|
+
* Calculates the projected y cartesian coordinate in EPSG:3857 from the latitude in EPSG:4326 (WGS84)
|
|
152124
|
+
* @param latitude Latitude in EPSG:4326 (WGS84)
|
|
152125
|
+
* @internal
|
|
152126
|
+
*/
|
|
152042
152127
|
getEPSG3857Y(latitude) {
|
|
152043
152128
|
const y = Math.log(Math.tan((90.0 + latitude) * Math.PI / 360.0)) / (Math.PI / 180.0);
|
|
152044
152129
|
return y * 20037508.34 / 180.0;
|
|
152045
152130
|
}
|
|
152046
|
-
/**
|
|
152047
|
-
|
|
152131
|
+
/**
|
|
152132
|
+
* Calculates the longitude in EPSG:4326 (WGS84) from the projected x cartesian coordinate in EPSG:3857
|
|
152133
|
+
* @param x3857 Projected x cartesian coordinate in EPSG:3857
|
|
152134
|
+
* @internal
|
|
152135
|
+
*/
|
|
152048
152136
|
getEPSG4326Lon(x3857) {
|
|
152049
152137
|
return _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Angle.radiansToDegrees(x3857 / earthRadius);
|
|
152050
152138
|
}
|
|
152051
|
-
/**
|
|
152052
|
-
|
|
152139
|
+
/**
|
|
152140
|
+
* Calculates the latitude in EPSG:4326 (WGS84) from the projected y cartesian coordinate in EPSG:3857
|
|
152141
|
+
* @param y3857 Projected y cartesian coordinate in EPSG:3857
|
|
152142
|
+
* @internal
|
|
152143
|
+
*/
|
|
152053
152144
|
getEPSG4326Lat(y3857) {
|
|
152054
152145
|
const y = 2 * Math.atan(Math.exp(y3857 / earthRadius)) - (Math.PI / 2);
|
|
152055
152146
|
return _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Angle.radiansToDegrees(y);
|
|
152056
152147
|
}
|
|
152057
|
-
/**
|
|
152058
|
-
|
|
152059
|
-
|
|
152148
|
+
/**
|
|
152149
|
+
* Get the bounding box/extents of a tile in EPSG:4326 (WGS84) format.
|
|
152150
|
+
* Map tile providers like Bing and Mapbox allow the URL to be constructed directly from the zoom level and tile coordinates.
|
|
152151
|
+
* However, WMS-based servers take a bounding box instead. This method can help get that bounding box from a tile.
|
|
152152
|
+
* @param row Row of the tile
|
|
152153
|
+
* @param column Column of the tile
|
|
152154
|
+
* @param zoomLevel Desired zoom level of the tile
|
|
152155
|
+
* @internal
|
|
152156
|
+
*/
|
|
152060
152157
|
getEPSG4326Extent(row, column, zoomLevel) {
|
|
152061
152158
|
// Shift left (this.tileSize << zoomLevel) overflow when using 512 pixels tile at higher resolution,
|
|
152062
152159
|
// so use Math.pow instead (I assume the performance lost to be minimal)
|
|
@@ -152071,7 +152168,13 @@ class MapLayerImageryProvider {
|
|
|
152071
152168
|
const latitudeTop = 90.0 - 360.0 * Math.atan(Math.exp(-y1 * 2 * Math.PI)) / Math.PI;
|
|
152072
152169
|
return { longitudeLeft, longitudeRight, latitudeTop, latitudeBottom };
|
|
152073
152170
|
}
|
|
152074
|
-
/**
|
|
152171
|
+
/**
|
|
152172
|
+
* Get the bounding box/extents of a tile in EPSG:3857 format.
|
|
152173
|
+
* @param row Row of the tile
|
|
152174
|
+
* @param column Column of the tile
|
|
152175
|
+
* @param zoomLevel Desired zoom level of the tile
|
|
152176
|
+
* @internal
|
|
152177
|
+
*/
|
|
152075
152178
|
getEPSG3857Extent(row, column, zoomLevel) {
|
|
152076
152179
|
const epsg4326Extent = this.getEPSG4326Extent(row, column, zoomLevel);
|
|
152077
152180
|
const left = this.getEPSG3857X(epsg4326Extent.longitudeLeft);
|
|
@@ -152348,24 +152451,45 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
152348
152451
|
|
|
152349
152452
|
|
|
152350
152453
|
|
|
152351
|
-
/**
|
|
152454
|
+
/**
|
|
152455
|
+
* A [[TileTreeReference]] to be used specifically for [[MapTileTree]]s.
|
|
152456
|
+
* The reference refers to its MapTileTree by way of the tree's [[TileTreeOwner]].
|
|
152457
|
+
* Multiple MapLayerTileTreeReferences can refer to the same TileTree if the map layer settings are equivalent, meaning
|
|
152458
|
+
* they have identical format IDs, URLs, credentials, etc.
|
|
152459
|
+
* @beta
|
|
152460
|
+
*/
|
|
152352
152461
|
class MapLayerTileTreeReference extends _internal__WEBPACK_IMPORTED_MODULE_3__.TileTreeReference {
|
|
152462
|
+
/**
|
|
152463
|
+
* Constructor for a MapLayerTileTreeReference.
|
|
152464
|
+
* @param _layerSettings Map layer settings that are applied to the MapLayerTileTreeReference.
|
|
152465
|
+
* @param _layerIndex The index of the associated map layer.
|
|
152466
|
+
* @param iModel The iModel containing the MapLayerTileTreeReference.
|
|
152467
|
+
* @internal
|
|
152468
|
+
*/
|
|
152353
152469
|
constructor(_layerSettings, _layerIndex, iModel) {
|
|
152354
152470
|
super();
|
|
152355
152471
|
this._layerSettings = _layerSettings;
|
|
152356
152472
|
this._layerIndex = _layerIndex;
|
|
152357
152473
|
this.iModel = iModel;
|
|
152358
152474
|
}
|
|
152475
|
+
/* @internal */
|
|
152359
152476
|
get _transparency() { return this._layerSettings.transparency ? this._layerSettings.transparency : undefined; }
|
|
152477
|
+
/** Returns true if the associated map layer, including its sublayers, is opaque. */
|
|
152360
152478
|
get isOpaque() {
|
|
152361
152479
|
return this._layerSettings.visible && (!this._layerSettings.allSubLayersInvisible) && !this._layerSettings.transparentBackground && 0 === this._layerSettings.transparency;
|
|
152362
152480
|
}
|
|
152481
|
+
/* Returns the map layer name. */
|
|
152363
152482
|
get layerName() { return this._layerSettings.name; }
|
|
152483
|
+
/** Returns the imagery provider for the tile tree. */
|
|
152364
152484
|
get imageryProvider() { return undefined; }
|
|
152365
152485
|
set layerSettings(layerSettings) { this._layerSettings = layerSettings; }
|
|
152486
|
+
/** Returns the layer settings for the map layer. */
|
|
152366
152487
|
get layerSettings() { return this._layerSettings; }
|
|
152488
|
+
/** Returns the index of the map layer associated with the tile tree. */
|
|
152367
152489
|
get layerIndex() { return this._layerIndex; }
|
|
152490
|
+
/** Returns the transparency value of the map layer. */
|
|
152368
152491
|
get transparency() { return this._transparency; }
|
|
152492
|
+
/* Returns a tooltip describing the hit with the map layer name. */
|
|
152369
152493
|
async getToolTip(hit) {
|
|
152370
152494
|
const tree = this.treeOwner.tileTree;
|
|
152371
152495
|
if (undefined === tree || hit.iModel !== tree.iModel || tree.modelId !== hit.sourceId)
|
|
@@ -152377,7 +152501,14 @@ class MapLayerTileTreeReference extends _internal__WEBPACK_IMPORTED_MODULE_3__.T
|
|
|
152377
152501
|
return div;
|
|
152378
152502
|
}
|
|
152379
152503
|
}
|
|
152380
|
-
/**
|
|
152504
|
+
/**
|
|
152505
|
+
* Creates a MapLayerTileTreeReference.
|
|
152506
|
+
* @param layerSettings Model or image map layer settings that are applied to the MapLayerTileTreeReference.
|
|
152507
|
+
* @param layerIndex The index of the associated map layer.
|
|
152508
|
+
* @param iModel The iModel containing the new MapLayerTileTreeReference.
|
|
152509
|
+
* @returns Returns the new tile tree reference, either a ModelMapLayerTileTreeReference or an ImageryMapLayerTreeReference.
|
|
152510
|
+
* @internal
|
|
152511
|
+
*/
|
|
152381
152512
|
function createMapLayerTreeReference(layerSettings, layerIndex, iModel) {
|
|
152382
152513
|
if (layerSettings instanceof _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.ModelMapLayerSettings) {
|
|
152383
152514
|
return (0,_internal__WEBPACK_IMPORTED_MODULE_3__.createModelMapLayerTileTreeReference)(layerSettings, layerIndex, iModel);
|
|
@@ -183380,11 +183511,28 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
|
|
|
183380
183511
|
curveLengthBetweenFractions(fraction0, fraction1) {
|
|
183381
183512
|
return Math.abs(fraction1 - fraction0) * this._totalLength;
|
|
183382
183513
|
}
|
|
183514
|
+
/** Flatten CurveChainWithDistanceIndex children in the input chain.
|
|
183515
|
+
* @return cloned flattened CurveChain, or reference to the input chain if no nesting
|
|
183516
|
+
*/
|
|
183517
|
+
static flattenNestedChains(chain) {
|
|
183518
|
+
if (-1 === chain.children.findIndex((child) => { return child instanceof CurveChainWithDistanceIndex; }))
|
|
183519
|
+
return chain;
|
|
183520
|
+
const flatChain = chain.clone();
|
|
183521
|
+
const flatChildren = flatChain.children.flatMap((child) => {
|
|
183522
|
+
if (child instanceof CurveChainWithDistanceIndex)
|
|
183523
|
+
return child.path.children;
|
|
183524
|
+
else
|
|
183525
|
+
return [child];
|
|
183526
|
+
});
|
|
183527
|
+
flatChain.children.splice(0, Infinity, ...flatChildren);
|
|
183528
|
+
return flatChain;
|
|
183529
|
+
}
|
|
183383
183530
|
/**
|
|
183384
183531
|
* Capture (not clone) a path into a new `CurveChainWithDistanceIndex`
|
|
183385
183532
|
* @param path primitive array to be CAPTURED (not cloned)
|
|
183386
183533
|
*/
|
|
183387
183534
|
static createCapture(path, options) {
|
|
183535
|
+
path = this.flattenNestedChains(path); // nested chains not allowed
|
|
183388
183536
|
const fragments = DistanceIndexConstructionContext.createPathFragmentIndex(path, options);
|
|
183389
183537
|
const result = new CurveChainWithDistanceIndex(path, fragments);
|
|
183390
183538
|
return result;
|
|
@@ -183720,6 +183868,36 @@ class CurveChainWithDistanceIndex extends _curve_CurvePrimitive__WEBPACK_IMPORTE
|
|
|
183720
183868
|
}
|
|
183721
183869
|
return undefined;
|
|
183722
183870
|
}
|
|
183871
|
+
/**
|
|
183872
|
+
* Given a parent chain, convert the corresponding child details in the specified pairs.
|
|
183873
|
+
* * Converted details refer to the chain's global parameterization instead of the child's.
|
|
183874
|
+
* * It is assumed that for all i >= index0, `pairs[i].detailA.curve` is a child of chainA (similarly for chainB).
|
|
183875
|
+
* @param pairs array to mutate
|
|
183876
|
+
* @param index0 convert details of pairs in the tail of the array, starting at index0
|
|
183877
|
+
* @param chainA convert each specified detailA to the global parameterization of chainA
|
|
183878
|
+
* @param chainB convert each specified detailB to the global parameterization of chainB
|
|
183879
|
+
* @param compressAdjacent whether to remove adjacent duplicate pairs after conversion
|
|
183880
|
+
* @return the converted array
|
|
183881
|
+
* @internal
|
|
183882
|
+
*/
|
|
183883
|
+
static convertChildDetailToChainDetail(pairs, index0, chainA, chainB, compressAdjacent) {
|
|
183884
|
+
for (let i = index0; i < pairs.length; ++i) {
|
|
183885
|
+
const childDetailPair = pairs[i];
|
|
183886
|
+
if (chainA) {
|
|
183887
|
+
const chainDetail = chainA.computeChainDetail(childDetailPair.detailA);
|
|
183888
|
+
if (chainDetail)
|
|
183889
|
+
childDetailPair.detailA = chainDetail;
|
|
183890
|
+
}
|
|
183891
|
+
if (chainB) {
|
|
183892
|
+
const chainDetail = chainB.computeChainDetail(childDetailPair.detailB);
|
|
183893
|
+
if (chainDetail)
|
|
183894
|
+
childDetailPair.detailB = chainDetail;
|
|
183895
|
+
}
|
|
183896
|
+
}
|
|
183897
|
+
if (compressAdjacent)
|
|
183898
|
+
pairs = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_8__.CurveLocationDetailPair.removeAdjacentDuplicates(pairs, index0);
|
|
183899
|
+
return pairs;
|
|
183900
|
+
}
|
|
183723
183901
|
}
|
|
183724
183902
|
CurveChainWithDistanceIndex._numCalls = 0;
|
|
183725
183903
|
CurveChainWithDistanceIndex._numTested = 0;
|
|
@@ -183778,15 +183956,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
183778
183956
|
|
|
183779
183957
|
/**
|
|
183780
183958
|
* A `CurveCollection` is an abstract (non-instantiable) class for various sets of curves with particular structures:
|
|
183781
|
-
* -
|
|
183782
|
-
* The two instantiable forms of `CurveChain` are
|
|
183783
|
-
* -
|
|
183784
|
-
*
|
|
183785
|
-
*
|
|
183786
|
-
*
|
|
183787
|
-
* -
|
|
183788
|
-
* - `UnionRegion` -- a collection of coplanar `Loop` and/or `ParityRegion`, with "in/out" classification by union rules.
|
|
183789
|
-
* - `BagOfCurves` -- a collection of `AnyCurve` with no implied structure.
|
|
183959
|
+
* - [[CurveChain]] - a non-instantiable intermediate class for a sequence of [[CurvePrimitive]] joining head-to-tail.
|
|
183960
|
+
* The two instantiable forms of `CurveChain` are:
|
|
183961
|
+
* - [[Path]] - a chain of curves. Does not have to be closed or planar. A closed `Path` is not treated as bounding a surface.
|
|
183962
|
+
* - [[Loop]] - a closed and planar chain of curves. A `Loop` is treated as bounding a planar area.
|
|
183963
|
+
* - [[ParityRegion]] - a collection of coplanar `Loop`, with "in/out" classification by parity rules.
|
|
183964
|
+
* - [[UnionRegion]] - a collection of coplanar `Loop` and/or `ParityRegion`, with "in/out" classification by union rules.
|
|
183965
|
+
* - [[BagOfCurves]] - a collection of [[AnyCurve]] with no implied structure.
|
|
183790
183966
|
*
|
|
183791
183967
|
* @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.
|
|
183792
183968
|
* @public
|
|
@@ -183796,7 +183972,6 @@ class CurveCollection extends _GeometryQuery__WEBPACK_IMPORTED_MODULE_0__.Geomet
|
|
|
183796
183972
|
super(...arguments);
|
|
183797
183973
|
/** String name for schema properties */
|
|
183798
183974
|
this.geometryCategory = "curveCollection";
|
|
183799
|
-
/* eslint-disable @typescript-eslint/naming-convention, no-empty */
|
|
183800
183975
|
/** Flag for inner loop status. Only used by `Loop`. */
|
|
183801
183976
|
this.isInner = false;
|
|
183802
183977
|
}
|
|
@@ -184173,11 +184348,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
184173
184348
|
/* harmony export */ CurveCurve: () => (/* binding */ CurveCurve)
|
|
184174
184349
|
/* harmony export */ });
|
|
184175
184350
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
184176
|
-
/* harmony import */ var
|
|
184177
|
-
/* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
|
|
184178
|
-
/* harmony import */ var _internalContexts_CurveCurveCloseApproachXY__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./internalContexts/CurveCurveCloseApproachXY */ "../../core/geometry/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js");
|
|
184351
|
+
/* harmony import */ var _internalContexts_CurveCurveCloseApproachXY__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internalContexts/CurveCurveCloseApproachXY */ "../../core/geometry/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js");
|
|
184179
184352
|
/* harmony import */ var _internalContexts_CurveCurveIntersectXY__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internalContexts/CurveCurveIntersectXY */ "../../core/geometry/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js");
|
|
184180
|
-
/* harmony import */ var
|
|
184353
|
+
/* harmony import */ var _internalContexts_CurveCurveIntersectXYZ__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internalContexts/CurveCurveIntersectXYZ */ "../../core/geometry/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js");
|
|
184181
184354
|
/*---------------------------------------------------------------------------------------------
|
|
184182
184355
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
184183
184356
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -184189,8 +184362,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
184189
184362
|
|
|
184190
184363
|
|
|
184191
184364
|
|
|
184192
|
-
|
|
184193
|
-
|
|
184194
184365
|
/**
|
|
184195
184366
|
* `CurveCurve` has static method for various computations that work on a pair of curves or curve collections.
|
|
184196
184367
|
* @public
|
|
@@ -184205,22 +184376,11 @@ class CurveCurve {
|
|
|
184205
184376
|
* @param tolerance optional distance tolerance for coincidence
|
|
184206
184377
|
*/
|
|
184207
184378
|
static intersectionXYPairs(curveA, extendA, curveB, extendB, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
|
|
184208
|
-
|
|
184209
|
-
if (curveB instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_2__.CurvePrimitive) {
|
|
184210
|
-
curveA.dispatchToGeometryHandler(handler);
|
|
184211
|
-
}
|
|
184212
|
-
else if (curveB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_3__.CurveCollection) {
|
|
184213
|
-
const allCurves = curveB.collectCurvePrimitives();
|
|
184214
|
-
for (const child of allCurves) {
|
|
184215
|
-
handler.resetGeometry(false, child, false);
|
|
184216
|
-
curveA.dispatchToGeometryHandler(handler);
|
|
184217
|
-
}
|
|
184218
|
-
}
|
|
184219
|
-
return handler.grabPairedResults();
|
|
184379
|
+
return CurveCurve.intersectionProjectedXYPairs(undefined, curveA, extendA, curveB, extendB, tolerance);
|
|
184220
184380
|
}
|
|
184221
184381
|
/**
|
|
184222
184382
|
* Return xy intersections of 2 projected curves.
|
|
184223
|
-
* @param worldToLocal transform (possibly perspective) defining the local coordinates in which to compute xy intersections
|
|
184383
|
+
* @param worldToLocal transform (possibly perspective) defining the local coordinates in which to compute xy intersections
|
|
184224
184384
|
* @param curveA first curve
|
|
184225
184385
|
* @param extendA true to allow curveA to extend
|
|
184226
184386
|
* @param curveB second curve
|
|
@@ -184244,7 +184404,7 @@ class CurveCurve {
|
|
|
184244
184404
|
* @returns array of intersections structured as CurveLocationDetailPair[]
|
|
184245
184405
|
*/
|
|
184246
184406
|
static intersectionXYZPairs(curveA, extendA, curveB, extendB) {
|
|
184247
|
-
const handler = new
|
|
184407
|
+
const handler = new _internalContexts_CurveCurveIntersectXYZ__WEBPACK_IMPORTED_MODULE_2__.CurveCurveIntersectXYZ(extendA, curveB, extendB);
|
|
184248
184408
|
curveA.dispatchToGeometryHandler(handler);
|
|
184249
184409
|
return handler.grabPairedResults();
|
|
184250
184410
|
}
|
|
@@ -184258,7 +184418,7 @@ class CurveCurve {
|
|
|
184258
184418
|
for (let i = 0; i < primitives.length; i++) {
|
|
184259
184419
|
const curveA = primitives[i];
|
|
184260
184420
|
for (let j = i + 1; j < primitives.length; j++) {
|
|
184261
|
-
handler.resetGeometry(
|
|
184421
|
+
handler.resetGeometry(primitives[j]);
|
|
184262
184422
|
curveA.dispatchToGeometryHandler(handler);
|
|
184263
184423
|
}
|
|
184264
184424
|
}
|
|
@@ -184278,7 +184438,7 @@ class CurveCurve {
|
|
|
184278
184438
|
* Close approaches further than this xy-distance are not returned.
|
|
184279
184439
|
*/
|
|
184280
184440
|
static closeApproachProjectedXYPairs(curveA, curveB, maxDistance) {
|
|
184281
|
-
const handler = new
|
|
184441
|
+
const handler = new _internalContexts_CurveCurveCloseApproachXY__WEBPACK_IMPORTED_MODULE_3__.CurveCurveCloseApproachXY(curveB);
|
|
184282
184442
|
handler.maxDistanceToAccept = maxDistance;
|
|
184283
184443
|
curveA.dispatchToGeometryHandler(handler);
|
|
184284
184444
|
return handler.grabPairedResults();
|
|
@@ -185412,6 +185572,10 @@ class CurveLocationDetail {
|
|
|
185412
185572
|
}
|
|
185413
185573
|
return detailB;
|
|
185414
185574
|
}
|
|
185575
|
+
/** Compare only the curve and fraction of this detail with `other`. */
|
|
185576
|
+
isSameCurveAndFraction(other) {
|
|
185577
|
+
return this.curve === other.curve && _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.isAlmostEqualNumber(this.fraction, other.fraction);
|
|
185578
|
+
}
|
|
185415
185579
|
}
|
|
185416
185580
|
/**
|
|
185417
185581
|
* Enumeration of configurations for intersections and min/max distance-between-curve
|
|
@@ -185474,6 +185638,30 @@ class CurveLocationDetailPair {
|
|
|
185474
185638
|
this.detailA = this.detailB;
|
|
185475
185639
|
this.detailB = q;
|
|
185476
185640
|
}
|
|
185641
|
+
/**
|
|
185642
|
+
* Mutate the input array by removing the second of two adjacent duplicate pairs.
|
|
185643
|
+
* * Ignores details representing coincident intervals (e.g., for which `fraction1` is defined).
|
|
185644
|
+
* * Comparison is performed by [[CurveLocationDetail.isSameCurveAndFraction]].
|
|
185645
|
+
* * No sorting is performed.
|
|
185646
|
+
* @param pairs array to de-duplicate in place
|
|
185647
|
+
* @param index0 look for duplicates in the tail of the array starting at index0
|
|
185648
|
+
* @return reference to input array
|
|
185649
|
+
* @internal
|
|
185650
|
+
*/
|
|
185651
|
+
static removeAdjacentDuplicates(pairs, index0 = 0) {
|
|
185652
|
+
return pairs.flatMap((pair, i, arr) => {
|
|
185653
|
+
if (i >= index0 && i > 0) {
|
|
185654
|
+
if (!pair.detailA.hasFraction1 && !pair.detailB.hasFraction1) {
|
|
185655
|
+
if (pair.detailA.isSameCurveAndFraction(arr[i - 1].detailA)) {
|
|
185656
|
+
if (pair.detailB.isSameCurveAndFraction(arr[i - 1].detailB)) {
|
|
185657
|
+
return []; // remove the i_th pair
|
|
185658
|
+
}
|
|
185659
|
+
}
|
|
185660
|
+
}
|
|
185661
|
+
}
|
|
185662
|
+
return [pair]; // preserve the i_th pair
|
|
185663
|
+
});
|
|
185664
|
+
}
|
|
185477
185665
|
}
|
|
185478
185666
|
/**
|
|
185479
185667
|
* Data bundle for a pair of arrays of CurveLocationDetail structures.
|
|
@@ -186524,10 +186712,8 @@ class CurveWireMomentsXYZ {
|
|
|
186524
186712
|
if (root instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_3__.CurvePrimitive)
|
|
186525
186713
|
root.emitStrokableParts(this);
|
|
186526
186714
|
else if (root instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_4__.CurveCollection) {
|
|
186527
|
-
|
|
186528
|
-
|
|
186529
|
-
this.visitLeaves(child);
|
|
186530
|
-
}
|
|
186715
|
+
for (const child of root.children)
|
|
186716
|
+
this.visitLeaves(child);
|
|
186531
186717
|
}
|
|
186532
186718
|
}
|
|
186533
186719
|
}
|
|
@@ -187916,10 +188102,7 @@ class LineString3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_0__.CurvePri
|
|
|
187916
188102
|
isInPlane(plane) {
|
|
187917
188103
|
return this._points.isCloseToPlane(plane, _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallMetricDistance);
|
|
187918
188104
|
}
|
|
187919
|
-
/**
|
|
187920
|
-
* Push a hit, fixing up the prior entry if needed.
|
|
187921
|
-
* Return the incremented counter.
|
|
187922
|
-
*/
|
|
188105
|
+
/** Push a hit, fixing up the prior entry if needed. */
|
|
187923
188106
|
static pushVertexHit(result, counter, cp, fraction, point) {
|
|
187924
188107
|
const detail = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_12__.CurveLocationDetail.createCurveFractionPoint(cp, fraction, point);
|
|
187925
188108
|
result.push(detail);
|
|
@@ -193739,10 +193922,6 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193739
193922
|
this._results = [];
|
|
193740
193923
|
return result;
|
|
193741
193924
|
}
|
|
193742
|
-
/** Returns `true` if `detail` has same curve and fraction. */
|
|
193743
|
-
sameCurveAndFraction(cp, fraction, detail) {
|
|
193744
|
-
return cp === detail.curve && _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isAlmostEqualNumber(fraction, detail.fraction);
|
|
193745
|
-
}
|
|
193746
193925
|
/**
|
|
193747
193926
|
* If distance between pointA and pointB is less than maxDistance, record CurveLocationDetailPair which is
|
|
193748
193927
|
* the approach from pointA to pointB.
|
|
@@ -193793,13 +193972,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193793
193972
|
const oldDetailA = this._results[numPrevious - 1].detailA;
|
|
193794
193973
|
const oldDetailB = this._results[numPrevious - 1].detailB;
|
|
193795
193974
|
if (reversed) {
|
|
193796
|
-
if (
|
|
193797
|
-
|
|
193975
|
+
if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
193976
|
+
oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
193798
193977
|
return;
|
|
193799
193978
|
}
|
|
193800
193979
|
else {
|
|
193801
|
-
if (
|
|
193802
|
-
|
|
193980
|
+
if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
193981
|
+
oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
193803
193982
|
return;
|
|
193804
193983
|
}
|
|
193805
193984
|
}
|
|
@@ -193845,13 +194024,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
193845
194024
|
const oldDetailA = this._results[numPrevious - 1].detailA;
|
|
193846
194025
|
const oldDetailB = this._results[numPrevious - 1].detailB;
|
|
193847
194026
|
if (reversed) {
|
|
193848
|
-
if (
|
|
193849
|
-
|
|
194027
|
+
if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
194028
|
+
oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
193850
194029
|
return;
|
|
193851
194030
|
}
|
|
193852
194031
|
else {
|
|
193853
|
-
if (
|
|
193854
|
-
|
|
194032
|
+
if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
194033
|
+
oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
193855
194034
|
return;
|
|
193856
194035
|
}
|
|
193857
194036
|
}
|
|
@@ -194237,38 +194416,22 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194237
194416
|
}
|
|
194238
194417
|
this._geometryB = geomB; // restore
|
|
194239
194418
|
}
|
|
194240
|
-
/**
|
|
194241
|
-
* Given a parent chain, convert the corresponding child details so that they refer to the chain's global parameterization.
|
|
194242
|
-
* * It is assumed that `this._results[i].detailA.curve` is a child of chainA, and similarly for detailB/chainB.
|
|
194243
|
-
* @param chainA convert each detailA to the global parameterization of chainA
|
|
194244
|
-
* @param chainB convert each detailB to the global parameterization of chainB
|
|
194245
|
-
*/
|
|
194246
|
-
convertChildDetailToChainDetail(chainA, chainB) {
|
|
194247
|
-
for (const childDetailPair of this._results) {
|
|
194248
|
-
if (chainA) {
|
|
194249
|
-
const chainDetail = chainA.computeChainDetail(childDetailPair.detailA);
|
|
194250
|
-
if (chainDetail)
|
|
194251
|
-
childDetailPair.detailA = chainDetail;
|
|
194252
|
-
}
|
|
194253
|
-
if (chainB) {
|
|
194254
|
-
const chainDetail = chainB.computeChainDetail(childDetailPair.detailB);
|
|
194255
|
-
if (chainDetail)
|
|
194256
|
-
childDetailPair.detailB = chainDetail;
|
|
194257
|
-
}
|
|
194258
|
-
}
|
|
194259
|
-
}
|
|
194260
194419
|
/** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */
|
|
194261
194420
|
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
194262
194421
|
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_10__.CurveChainWithDistanceIndex))
|
|
194263
194422
|
return;
|
|
194423
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_10__.CurveChainWithDistanceIndex) {
|
|
194424
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(!!"call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
194425
|
+
return;
|
|
194426
|
+
}
|
|
194427
|
+
const index0 = this._results.length;
|
|
194264
194428
|
const geomB = this._geometryB; // save
|
|
194265
194429
|
for (const child of geomB.path.children) {
|
|
194266
194430
|
this.resetGeometry(child);
|
|
194267
194431
|
geomAHandler(geomA);
|
|
194268
194432
|
}
|
|
194269
194433
|
this.resetGeometry(geomB); // restore
|
|
194270
|
-
|
|
194271
|
-
this.convertChildDetailToChainDetail(undefined, geomB);
|
|
194434
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_10__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
194272
194435
|
}
|
|
194273
194436
|
/** Double dispatch handler for strongly typed segment. */
|
|
194274
194437
|
handleLineSegment3d(segmentA) {
|
|
@@ -194439,7 +194602,8 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
194439
194602
|
/** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */
|
|
194440
194603
|
handleCurveChainWithDistanceIndex(chain) {
|
|
194441
194604
|
super.handleCurveChainWithDistanceIndex(chain);
|
|
194442
|
-
|
|
194605
|
+
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
194606
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_10__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
194443
194607
|
}
|
|
194444
194608
|
/** Double dispatch handler for strongly typed homogeneous bspline curve .. */
|
|
194445
194609
|
handleBSplineCurve3dH(_curve) {
|
|
@@ -194481,27 +194645,36 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
194481
194645
|
/* harmony export */ BezierBezierIntersectionXYRRToRRD: () => (/* binding */ BezierBezierIntersectionXYRRToRRD),
|
|
194482
194646
|
/* harmony export */ CurveCurveIntersectXY: () => (/* binding */ CurveCurveIntersectXY)
|
|
194483
194647
|
/* harmony export */ });
|
|
194484
|
-
/* harmony import */ var
|
|
194485
|
-
/* harmony import */ var
|
|
194486
|
-
/* harmony import */ var
|
|
194487
|
-
/* harmony import */ var
|
|
194488
|
-
/* harmony import */ var
|
|
194489
|
-
/* harmony import */ var
|
|
194490
|
-
/* harmony import */ var
|
|
194491
|
-
/* harmony import */ var
|
|
194492
|
-
/* harmony import */ var
|
|
194493
|
-
/* harmony import */ var
|
|
194494
|
-
/* harmony import */ var
|
|
194495
|
-
/* harmony import */ var
|
|
194496
|
-
/* harmony import */ var
|
|
194497
|
-
/* harmony import */ var
|
|
194498
|
-
/* harmony import */ var
|
|
194499
|
-
/* harmony import */ var
|
|
194500
|
-
/* harmony import */ var
|
|
194648
|
+
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
194649
|
+
/* harmony import */ var _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../bspline/BSplineCurve */ "../../core/geometry/lib/esm/bspline/BSplineCurve.js");
|
|
194650
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
194651
|
+
/* harmony import */ var _geometry3d_CoincidentGeometryOps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../geometry3d/CoincidentGeometryOps */ "../../core/geometry/lib/esm/geometry3d/CoincidentGeometryOps.js");
|
|
194652
|
+
/* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
|
|
194653
|
+
/* harmony import */ var _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../geometry3d/GrowableFloat64Array */ "../../core/geometry/lib/esm/geometry3d/GrowableFloat64Array.js");
|
|
194654
|
+
/* harmony import */ var _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../geometry3d/Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
|
|
194655
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
194656
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
194657
|
+
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
194658
|
+
/* harmony import */ var _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../geometry4d/Point4d */ "../../core/geometry/lib/esm/geometry4d/Point4d.js");
|
|
194659
|
+
/* harmony import */ var _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../numerics/BezierPolynomials */ "../../core/geometry/lib/esm/numerics/BezierPolynomials.js");
|
|
194660
|
+
/* harmony import */ var _numerics_Newton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../numerics/Newton */ "../../core/geometry/lib/esm/numerics/Newton.js");
|
|
194661
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
194662
|
+
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
194663
|
+
/* harmony import */ var _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../CurveChainWithDistanceIndex */ "../../core/geometry/lib/esm/curve/CurveChainWithDistanceIndex.js");
|
|
194664
|
+
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
194665
|
+
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
194666
|
+
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
194667
|
+
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
194501
194668
|
/*---------------------------------------------------------------------------------------------
|
|
194502
194669
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
194503
194670
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
194504
194671
|
*--------------------------------------------------------------------------------------------*/
|
|
194672
|
+
/** @packageDocumentation
|
|
194673
|
+
* @module Curve
|
|
194674
|
+
*/
|
|
194675
|
+
|
|
194676
|
+
|
|
194677
|
+
|
|
194505
194678
|
|
|
194506
194679
|
|
|
194507
194680
|
|
|
@@ -194525,13 +194698,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
194525
194698
|
* * The inputs are assumed pre-transformed so that the target condition is to match x and y coordinates.
|
|
194526
194699
|
* @internal
|
|
194527
194700
|
*/
|
|
194528
|
-
class BezierBezierIntersectionXYRRToRRD extends
|
|
194701
|
+
class BezierBezierIntersectionXYRRToRRD extends _numerics_Newton__WEBPACK_IMPORTED_MODULE_1__.NewtonEvaluatorRRtoRRD {
|
|
194529
194702
|
constructor(curveA, curveB) {
|
|
194530
194703
|
super();
|
|
194531
194704
|
this._curveA = curveA;
|
|
194532
194705
|
this._curveB = curveB;
|
|
194533
|
-
this._rayA =
|
|
194534
|
-
this._rayB =
|
|
194706
|
+
this._rayA = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_2__.Ray3d.createZero();
|
|
194707
|
+
this._rayB = _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_2__.Ray3d.createZero();
|
|
194535
194708
|
}
|
|
194536
194709
|
evaluate(fractionA, fractionB) {
|
|
194537
194710
|
this._curveA.fractionToPointAndDerivative(fractionA, this._rayA);
|
|
@@ -194546,7 +194719,7 @@ class BezierBezierIntersectionXYRRToRRD extends _numerics_Newton__WEBPACK_IMPORT
|
|
|
194546
194719
|
* * geometryB is saved for later reference.
|
|
194547
194720
|
* @internal
|
|
194548
194721
|
*/
|
|
194549
|
-
class CurveCurveIntersectXY extends
|
|
194722
|
+
class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_3__.RecurseToCurvesGeometryHandler {
|
|
194550
194723
|
/**
|
|
194551
194724
|
* The constructor.
|
|
194552
194725
|
* @param worldToLocal optional transform (possibly perspective) to project to xy plane for intersection.
|
|
@@ -194555,7 +194728,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194555
194728
|
* @param extendB flag for extension of geometryB.
|
|
194556
194729
|
* @param tolerance optional distance tolerance for coincidence.
|
|
194557
194730
|
*/
|
|
194558
|
-
constructor(worldToLocal, extendA, geometryB, extendB, tolerance =
|
|
194731
|
+
constructor(worldToLocal, extendA, geometryB, extendB, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.smallMetricDistance) {
|
|
194559
194732
|
super();
|
|
194560
194733
|
this._extendA = extendA;
|
|
194561
194734
|
this._geometryB = geometryB;
|
|
@@ -194567,14 +194740,12 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194567
194740
|
if (!this._worldToLocalAffine)
|
|
194568
194741
|
this._worldToLocalPerspective = worldToLocal.clone();
|
|
194569
194742
|
}
|
|
194570
|
-
this._coincidentGeometryContext =
|
|
194743
|
+
this._coincidentGeometryContext = _geometry3d_CoincidentGeometryOps__WEBPACK_IMPORTED_MODULE_5__.CoincidentGeometryQuery.create(tolerance);
|
|
194571
194744
|
this._results = [];
|
|
194572
194745
|
}
|
|
194573
|
-
/** Reset the geometry
|
|
194574
|
-
resetGeometry(
|
|
194575
|
-
this._extendA = extendA;
|
|
194746
|
+
/** Reset the geometry, leaving all other parts unchanged (and preserving accumulated intersections). */
|
|
194747
|
+
resetGeometry(geometryB) {
|
|
194576
194748
|
this._geometryB = geometryB;
|
|
194577
|
-
this._extendB = extendB;
|
|
194578
194749
|
}
|
|
194579
194750
|
acceptFraction(extend0, fraction, extend1, fractionTol = 1.0e-12) {
|
|
194580
194751
|
if (!extend0 && fraction < -fractionTol)
|
|
@@ -194584,12 +194755,12 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194584
194755
|
return true;
|
|
194585
194756
|
}
|
|
194586
194757
|
/** Test the fraction by strict parameter, but allow toleranced distance test at ends. */
|
|
194587
|
-
acceptFractionOnLine(extend0, fraction, extend1, pointA, pointB, tolerance =
|
|
194758
|
+
acceptFractionOnLine(extend0, fraction, extend1, pointA, pointB, tolerance = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.smallMetricDistance) {
|
|
194588
194759
|
if (!extend0 && fraction < 0) {
|
|
194589
|
-
return
|
|
194760
|
+
return _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.isDistanceWithinTol(fraction * pointA.distanceXY(pointB), tolerance);
|
|
194590
194761
|
}
|
|
194591
194762
|
else if (!extend1 && fraction > 1.0)
|
|
194592
|
-
return
|
|
194763
|
+
return _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.isDistanceWithinTol((fraction - 1.0) * pointA.distanceXY(pointB), tolerance);
|
|
194593
194764
|
return true;
|
|
194594
194765
|
}
|
|
194595
194766
|
/**
|
|
@@ -194602,9 +194773,6 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194602
194773
|
this._results = [];
|
|
194603
194774
|
return result;
|
|
194604
194775
|
}
|
|
194605
|
-
sameCurveAndFraction(cp, fraction, detail) {
|
|
194606
|
-
return cp === detail.curve && _Geometry__WEBPACK_IMPORTED_MODULE_3__.Geometry.isAlmostEqualNumber(fraction, detail.fraction);
|
|
194607
|
-
}
|
|
194608
194776
|
/**
|
|
194609
194777
|
* Record the pre-computed intersection between two curves. Filter by extension rules. Record with fraction mapping.
|
|
194610
194778
|
* @param localFractionA intersection fraction local to the subcurve of cpA between fractionA0 and fractionA1
|
|
@@ -194625,14 +194793,14 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194625
194793
|
intervalDetails.detailA.hasFraction1 &&
|
|
194626
194794
|
intervalDetails.detailB.hasFraction1;
|
|
194627
194795
|
if (isInterval) {
|
|
194628
|
-
globalFractionA =
|
|
194629
|
-
globalFractionB =
|
|
194630
|
-
globalFractionA1 =
|
|
194631
|
-
globalFractionB1 =
|
|
194796
|
+
globalFractionA = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction, fractionA1);
|
|
194797
|
+
globalFractionB = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction, fractionB1);
|
|
194798
|
+
globalFractionA1 = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionA0, intervalDetails.detailA.fraction1, fractionA1);
|
|
194799
|
+
globalFractionB1 = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionB0, intervalDetails.detailB.fraction1, fractionB1);
|
|
194632
194800
|
}
|
|
194633
194801
|
else {
|
|
194634
|
-
globalFractionA = globalFractionA1 =
|
|
194635
|
-
globalFractionB = globalFractionB1 =
|
|
194802
|
+
globalFractionA = globalFractionA1 = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionA0, localFractionA, fractionA1);
|
|
194803
|
+
globalFractionB = globalFractionB1 = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(fractionB0, localFractionB, fractionB1);
|
|
194636
194804
|
}
|
|
194637
194805
|
// ignore duplicate of most recent pair
|
|
194638
194806
|
const numPrevious = this._results.length;
|
|
@@ -194640,31 +194808,31 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194640
194808
|
const oldDetailA = this._results[numPrevious - 1].detailA;
|
|
194641
194809
|
const oldDetailB = this._results[numPrevious - 1].detailB;
|
|
194642
194810
|
if (reversed) {
|
|
194643
|
-
if (
|
|
194644
|
-
|
|
194811
|
+
if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
194812
|
+
oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
194645
194813
|
return;
|
|
194646
194814
|
}
|
|
194647
194815
|
else {
|
|
194648
|
-
if (
|
|
194649
|
-
|
|
194816
|
+
if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
194817
|
+
oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
194650
194818
|
return;
|
|
194651
194819
|
}
|
|
194652
194820
|
}
|
|
194653
|
-
const detailA =
|
|
194654
|
-
const detailB =
|
|
194821
|
+
const detailA = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetail.createCurveFractionPoint(cpA, globalFractionA, cpA.fractionToPoint(globalFractionA));
|
|
194822
|
+
const detailB = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetail.createCurveFractionPoint(cpB, globalFractionB, cpB.fractionToPoint(globalFractionB));
|
|
194655
194823
|
if (isInterval) {
|
|
194656
194824
|
detailA.captureFraction1Point1(globalFractionA1, cpA.fractionToPoint(globalFractionA1));
|
|
194657
194825
|
detailB.captureFraction1Point1(globalFractionB1, cpB.fractionToPoint(globalFractionB1));
|
|
194658
194826
|
}
|
|
194659
194827
|
else {
|
|
194660
|
-
detailA.setIntervalRole(
|
|
194661
|
-
detailB.setIntervalRole(
|
|
194828
|
+
detailA.setIntervalRole(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveIntervalRole.isolated);
|
|
194829
|
+
detailB.setIntervalRole(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveIntervalRole.isolated);
|
|
194662
194830
|
}
|
|
194663
194831
|
if (reversed) {
|
|
194664
|
-
this._results.push(new
|
|
194832
|
+
this._results.push(new _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetailPair(detailB, detailA));
|
|
194665
194833
|
}
|
|
194666
194834
|
else {
|
|
194667
|
-
this._results.push(new
|
|
194835
|
+
this._results.push(new _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetailPair(detailA, detailB));
|
|
194668
194836
|
}
|
|
194669
194837
|
}
|
|
194670
194838
|
/**
|
|
@@ -194692,7 +194860,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194692
194860
|
if (overlap) {
|
|
194693
194861
|
this.recordPointWithLocalFractions(overlap.detailA.fraction, cpA, fractionA0, fractionA1, overlap.detailB.fraction, cpB, fractionB0, fractionB1, reversed, overlap);
|
|
194694
194862
|
}
|
|
194695
|
-
else if (
|
|
194863
|
+
else if (_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dXYTransverseIntersectionUnbounded(pointA0, pointA1, pointB0, pointB1, uv)) {
|
|
194696
194864
|
if (this.acceptFractionOnLine(extendA0, uv.x, extendA1, pointA0, pointA1, this._coincidentGeometryContext.tolerance) &&
|
|
194697
194865
|
this.acceptFractionOnLine(extendB0, uv.y, extendB1, pointB0, pointB1, this._coincidentGeometryContext.tolerance)) {
|
|
194698
194866
|
this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
|
|
@@ -194712,7 +194880,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194712
194880
|
this._worldToLocalPerspective.multiplyPoint3d(pointA1, 1, hA1);
|
|
194713
194881
|
this._worldToLocalPerspective.multiplyPoint3d(pointB0, 1, hB0);
|
|
194714
194882
|
this._worldToLocalPerspective.multiplyPoint3d(pointB1, 1, hB1);
|
|
194715
|
-
const fractionAB =
|
|
194883
|
+
const fractionAB = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dHXYTransverseIntersectionUnbounded(hA0, hA1, hB0, hB1);
|
|
194716
194884
|
if (fractionAB !== undefined) {
|
|
194717
194885
|
const fractionA = fractionAB.x;
|
|
194718
194886
|
const fractionB = fractionAB.y;
|
|
@@ -194755,17 +194923,17 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194755
194923
|
const data = arc.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
194756
194924
|
const pointA0H = this._worldToLocalPerspective.multiplyPoint3d(pointA0, 1);
|
|
194757
194925
|
const pointA1H = this._worldToLocalPerspective.multiplyPoint3d(pointA1, 1);
|
|
194758
|
-
const alpha =
|
|
194759
|
-
const beta =
|
|
194760
|
-
const gamma =
|
|
194761
|
-
const cosines = new
|
|
194762
|
-
const sines = new
|
|
194763
|
-
const radians = new
|
|
194764
|
-
const numRoots =
|
|
194926
|
+
const alpha = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductPoint4dXYW(pointA0H, pointA1H, data.center);
|
|
194927
|
+
const beta = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductPoint4dXYW(pointA0H, pointA1H, data.vector0);
|
|
194928
|
+
const gamma = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductPoint4dXYW(pointA0H, pointA1H, data.vector90);
|
|
194929
|
+
const cosines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194930
|
+
const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194931
|
+
const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194932
|
+
const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
|
|
194765
194933
|
for (let i = 0; i < numRoots; i++) {
|
|
194766
194934
|
const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
|
|
194767
194935
|
const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));
|
|
194768
|
-
const lineFraction =
|
|
194936
|
+
const lineFraction = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, arcPoint);
|
|
194769
194937
|
if (lineFraction !== undefined &&
|
|
194770
194938
|
this.acceptFraction(extendA0, lineFraction, extendA1) &&
|
|
194771
194939
|
this.acceptFraction(extendB0, arcFraction, extendB1)) {
|
|
@@ -194781,19 +194949,19 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194781
194949
|
pointA0Local = this._worldToLocalAffine.multiplyPoint3d(pointA0);
|
|
194782
194950
|
pointA1Local = this._worldToLocalAffine.multiplyPoint3d(pointA1);
|
|
194783
194951
|
}
|
|
194784
|
-
const alpha =
|
|
194785
|
-
const beta =
|
|
194786
|
-
const gamma =
|
|
194787
|
-
const cosines = new
|
|
194788
|
-
const sines = new
|
|
194789
|
-
const radians = new
|
|
194790
|
-
const numRoots =
|
|
194952
|
+
const alpha = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.center, 1);
|
|
194953
|
+
const beta = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector0, 0);
|
|
194954
|
+
const gamma = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.tripleProductXYW(pointA0Local, 1, pointA1Local, 1, data.vector90, 0);
|
|
194955
|
+
const cosines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194956
|
+
const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194957
|
+
const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_8__.GrowableFloat64Array(2);
|
|
194958
|
+
const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
|
|
194791
194959
|
const lineFractionTol = 1.0e-10;
|
|
194792
194960
|
const arcFractionTol = 1.0e-7;
|
|
194793
194961
|
for (let i = 0; i < numRoots; i++) {
|
|
194794
194962
|
const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
|
|
194795
194963
|
const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));
|
|
194796
|
-
const lineFraction =
|
|
194964
|
+
const lineFraction = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);
|
|
194797
194965
|
if (lineFraction !== undefined &&
|
|
194798
194966
|
this.acceptFraction(extendA0, lineFraction, extendA1, lineFractionTol) &&
|
|
194799
194967
|
this.acceptFraction(extendB0, arcFraction, extendB1, arcFractionTol)) {
|
|
@@ -194814,7 +194982,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194814
194982
|
const localB = inverseA.multiplyMatrixMatrix(matrixB); // localB->localA transform
|
|
194815
194983
|
const ellipseRadians = [];
|
|
194816
194984
|
const circleRadians = [];
|
|
194817
|
-
|
|
194985
|
+
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(localB.coffs[2], localB.coffs[5], localB.coffs[8], // center xyw
|
|
194818
194986
|
localB.coffs[0], localB.coffs[3], localB.coffs[6], // vector0 xyw
|
|
194819
194987
|
localB.coffs[1], localB.coffs[4], localB.coffs[7], // vector90 xyw
|
|
194820
194988
|
ellipseRadians, circleRadians);
|
|
@@ -194845,14 +195013,14 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194845
195013
|
if (this._worldToLocalPerspective) {
|
|
194846
195014
|
const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
194847
195015
|
const dataB = cpB.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
194848
|
-
matrixA =
|
|
194849
|
-
matrixB =
|
|
195016
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w);
|
|
195017
|
+
matrixB = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataB.vector0, dataB.vector0.w, dataB.vector90, dataA.vector90.w, dataB.center, dataB.center.w);
|
|
194850
195018
|
}
|
|
194851
195019
|
else {
|
|
194852
195020
|
const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);
|
|
194853
195021
|
const dataB = cpB.toTransformedVectors(this._worldToLocalAffine);
|
|
194854
|
-
matrixA =
|
|
194855
|
-
matrixB =
|
|
195022
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);
|
|
195023
|
+
matrixB = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataB.vector0, 0, dataB.vector90, 0, dataB.center, 1);
|
|
194856
195024
|
}
|
|
194857
195025
|
const conditionA = matrixA.conditionNumber();
|
|
194858
195026
|
const conditionB = matrixB.conditionNumber();
|
|
@@ -194882,11 +195050,11 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194882
195050
|
let matrixA;
|
|
194883
195051
|
if (this._worldToLocalPerspective) {
|
|
194884
195052
|
const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
194885
|
-
matrixA =
|
|
195053
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w);
|
|
194886
195054
|
}
|
|
194887
195055
|
else {
|
|
194888
195056
|
const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);
|
|
194889
|
-
matrixA =
|
|
195057
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_9__.Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);
|
|
194890
195058
|
}
|
|
194891
195059
|
// The worldToLocal has moved the arc vectors into local space.
|
|
194892
195060
|
// matrixA captures the xyw parts (ignoring z)
|
|
@@ -194897,7 +195065,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194897
195065
|
const orderF = cpB.order; // order of the beziers for simple coordinates
|
|
194898
195066
|
const orderG = 2 * orderF - 1; // order of the (single) bezier for squared coordinates.
|
|
194899
195067
|
const coffF = new Float64Array(orderF);
|
|
194900
|
-
const univariateBezierG = new
|
|
195068
|
+
const univariateBezierG = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_10__.UnivariateBezier(orderG);
|
|
194901
195069
|
const axx = matrixAInverse.at(0, 0);
|
|
194902
195070
|
const axy = matrixAInverse.at(0, 1);
|
|
194903
195071
|
const axz = 0.0;
|
|
@@ -194968,13 +195136,13 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
194968
195136
|
dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients.
|
|
194969
195137
|
reversed) {
|
|
194970
195138
|
if (!this._xyzwA0)
|
|
194971
|
-
this._xyzwA0 =
|
|
195139
|
+
this._xyzwA0 = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
194972
195140
|
if (!this._xyzwA1)
|
|
194973
|
-
this._xyzwA1 =
|
|
195141
|
+
this._xyzwA1 = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
194974
195142
|
if (!this._xyzwPlane)
|
|
194975
|
-
this._xyzwPlane =
|
|
195143
|
+
this._xyzwPlane = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
194976
195144
|
if (!this._xyzwB)
|
|
194977
|
-
this._xyzwB =
|
|
195145
|
+
this._xyzwB = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
194978
195146
|
/*
|
|
194979
195147
|
const roots = univariateBezierG.roots(0.0, true);
|
|
194980
195148
|
if (roots) {
|
|
@@ -195000,7 +195168,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195000
195168
|
for (let i = 1; i <= strokeCountA; i++, f0 = f1, this._xyzwA0.setFrom(this._xyzwA1)) {
|
|
195001
195169
|
f1 = i * df;
|
|
195002
195170
|
bezierA.fractionToPoint4d(f1, this._xyzwA1);
|
|
195003
|
-
|
|
195171
|
+
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.createPlanePointPointZ(this._xyzwA0, this._xyzwA1, this._xyzwPlane);
|
|
195004
195172
|
bezierB.poleProductsXYZW(univariateBezierB.coffs, this._xyzwPlane.x, this._xyzwPlane.y, this._xyzwPlane.z, this._xyzwPlane.w);
|
|
195005
195173
|
let errors = 0;
|
|
195006
195174
|
const roots = univariateBezierB.roots(0.0, true);
|
|
@@ -195008,11 +195176,11 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195008
195176
|
for (const r of roots) {
|
|
195009
195177
|
let bezierBFraction = r;
|
|
195010
195178
|
bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);
|
|
195011
|
-
const segmentAFraction =
|
|
195012
|
-
if (segmentAFraction &&
|
|
195013
|
-
let bezierAFraction =
|
|
195179
|
+
const segmentAFraction = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);
|
|
195180
|
+
if (segmentAFraction && _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
|
|
195181
|
+
let bezierAFraction = _Geometry__WEBPACK_IMPORTED_MODULE_4__.Geometry.interpolate(f0, segmentAFraction, f1);
|
|
195014
195182
|
const xyMatchingFunction = new BezierBezierIntersectionXYRRToRRD(bezierA, bezierB);
|
|
195015
|
-
const newtonSearcher = new
|
|
195183
|
+
const newtonSearcher = new _numerics_Newton__WEBPACK_IMPORTED_MODULE_1__.Newton2dUnboundedWithDerivative(xyMatchingFunction);
|
|
195016
195184
|
newtonSearcher.setUV(bezierAFraction, bezierBFraction);
|
|
195017
195185
|
if (newtonSearcher.runIterations()) {
|
|
195018
195186
|
bezierAFraction = newtonSearcher.getU();
|
|
@@ -195055,8 +195223,8 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195055
195223
|
const rangeB = this.getRanges(bezierSpanB);
|
|
195056
195224
|
const orderA = bcurveA.order;
|
|
195057
195225
|
const orderB = bcurveB.order;
|
|
195058
|
-
const univariateCoffsA = new
|
|
195059
|
-
const univariateCoffsB = new
|
|
195226
|
+
const univariateCoffsA = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_10__.UnivariateBezier(orderA);
|
|
195227
|
+
const univariateCoffsB = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_10__.UnivariateBezier(orderB);
|
|
195060
195228
|
for (let a = 0; a < numA; a++) {
|
|
195061
195229
|
for (let b = 0; b < numB; b++) {
|
|
195062
195230
|
if (rangeA[a].intersectsRangeXY(rangeB[b])) {
|
|
@@ -195080,7 +195248,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195080
195248
|
return this._worldToLocalPerspective.multiplyPoint3d(xyz, w);
|
|
195081
195249
|
if (this._worldToLocalAffine)
|
|
195082
195250
|
return this._worldToLocalAffine.multiplyXYZW(xyz.x, xyz.y, xyz.z, w);
|
|
195083
|
-
return
|
|
195251
|
+
return _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.createFromPointAndWeight(xyz, w);
|
|
195084
195252
|
}
|
|
195085
195253
|
mapNPCPlaneToWorld(npcPlane, worldPlane) {
|
|
195086
195254
|
// for NPC pointY, Y^ * H = 0 is "on" plane H. (Hat is transpose)
|
|
@@ -195104,7 +195272,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195104
195272
|
dispatchSegmentBsplineCurve(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, bcurve, extendB, reversed) {
|
|
195105
195273
|
const pointA0H = this.projectPoint(pointA0);
|
|
195106
195274
|
const pointA1H = this.projectPoint(pointA1);
|
|
195107
|
-
const planeCoffs =
|
|
195275
|
+
const planeCoffs = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.createPlanePointPointZ(pointA0H, pointA1H);
|
|
195108
195276
|
this.mapNPCPlaneToWorld(planeCoffs, planeCoffs);
|
|
195109
195277
|
// NOW .. we have a plane in world space. Intersect it with the bspline:
|
|
195110
195278
|
const intersections = [];
|
|
@@ -195116,7 +195284,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195116
195284
|
const fractionB = detail.fraction;
|
|
195117
195285
|
const curvePoint = detail.point;
|
|
195118
195286
|
const curvePointH = this.projectPoint(curvePoint);
|
|
195119
|
-
const lineFraction =
|
|
195287
|
+
const lineFraction = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, curvePointH);
|
|
195120
195288
|
if (lineFraction !== undefined && this.acceptFraction(extendA0, lineFraction, extendA1) &&
|
|
195121
195289
|
this.acceptFraction(extendB, fractionB, extendB)) {
|
|
195122
195290
|
this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, fractionB, bcurve, 0, 1, reversed);
|
|
@@ -195220,72 +195388,130 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195220
195388
|
transform.multiplyPoint3d(pointB0, this._workPointB0);
|
|
195221
195389
|
transform.multiplyPoint3d(pointB1, this._workPointB1);
|
|
195222
195390
|
}
|
|
195391
|
+
/** Low level dispatch of curve collection. */
|
|
195392
|
+
dispatchCurveCollection(geomA, geomAHandler) {
|
|
195393
|
+
const geomB = this._geometryB; // save
|
|
195394
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection))
|
|
195395
|
+
return;
|
|
195396
|
+
for (const child of geomB.children) {
|
|
195397
|
+
this.resetGeometry(child);
|
|
195398
|
+
geomAHandler(geomA);
|
|
195399
|
+
}
|
|
195400
|
+
this._geometryB = geomB; // restore
|
|
195401
|
+
}
|
|
195402
|
+
/** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */
|
|
195403
|
+
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
195404
|
+
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex))
|
|
195405
|
+
return;
|
|
195406
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex) {
|
|
195407
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(!!"call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
195408
|
+
return;
|
|
195409
|
+
}
|
|
195410
|
+
const index0 = this._results.length;
|
|
195411
|
+
const geomB = this._geometryB; // save
|
|
195412
|
+
for (const child of geomB.path.children) {
|
|
195413
|
+
this.resetGeometry(child);
|
|
195414
|
+
geomAHandler(geomA);
|
|
195415
|
+
}
|
|
195416
|
+
this.resetGeometry(geomB); // restore
|
|
195417
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
195418
|
+
}
|
|
195223
195419
|
/** Double dispatch handler for strongly typed segment. */
|
|
195224
195420
|
handleLineSegment3d(segmentA) {
|
|
195225
|
-
if (this._geometryB instanceof
|
|
195421
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_14__.LineSegment3d) {
|
|
195226
195422
|
const segmentB = this._geometryB;
|
|
195227
195423
|
this.dispatchSegmentSegment(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, segmentB, this._extendB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB, false);
|
|
195228
195424
|
}
|
|
195229
|
-
else if (this._geometryB instanceof
|
|
195425
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d) {
|
|
195230
195426
|
this.computeSegmentLineString(segmentA, this._extendA, this._geometryB, this._extendB, false);
|
|
195231
195427
|
}
|
|
195232
|
-
else if (this._geometryB instanceof
|
|
195428
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_16__.Arc3d) {
|
|
195233
195429
|
this.dispatchSegmentArc(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, this._geometryB, this._extendB, this._extendB, false);
|
|
195234
195430
|
}
|
|
195235
|
-
else if (this._geometryB instanceof
|
|
195431
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_17__.BSplineCurve3d) {
|
|
195236
195432
|
this.dispatchSegmentBsplineCurve(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, this._geometryB, this._extendB, false);
|
|
195237
195433
|
}
|
|
195434
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
195435
|
+
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
195436
|
+
}
|
|
195437
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex) {
|
|
195438
|
+
this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));
|
|
195439
|
+
}
|
|
195238
195440
|
return undefined;
|
|
195239
195441
|
}
|
|
195240
195442
|
/** Double dispatch handler for strongly typed linestring. */
|
|
195241
195443
|
handleLineString3d(lsA) {
|
|
195242
|
-
if (this._geometryB instanceof
|
|
195444
|
+
if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d) {
|
|
195243
195445
|
const lsB = this._geometryB;
|
|
195244
195446
|
this.computeLineStringLineString(lsA, lsB, false);
|
|
195245
195447
|
}
|
|
195246
|
-
else if (this._geometryB instanceof
|
|
195448
|
+
else if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_14__.LineSegment3d) {
|
|
195247
195449
|
this.computeSegmentLineString(this._geometryB, this._extendB, lsA, this._extendA, true);
|
|
195248
195450
|
}
|
|
195249
|
-
else if (this._geometryB instanceof
|
|
195451
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_16__.Arc3d) {
|
|
195250
195452
|
this.computeArcLineString(this._geometryB, this._extendB, lsA, this._extendA, true);
|
|
195251
195453
|
}
|
|
195252
|
-
else if (this._geometryB instanceof
|
|
195454
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_17__.BSplineCurve3d) {
|
|
195253
195455
|
this.dispatchLineStringBSplineCurve(lsA, this._extendA, this._geometryB, this._extendB, false);
|
|
195254
195456
|
}
|
|
195457
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
195458
|
+
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
195459
|
+
}
|
|
195460
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex) {
|
|
195461
|
+
this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));
|
|
195462
|
+
}
|
|
195255
195463
|
return undefined;
|
|
195256
195464
|
}
|
|
195257
195465
|
/** Double dispatch handler for strongly typed arc. */
|
|
195258
195466
|
handleArc3d(arc0) {
|
|
195259
|
-
if (this._geometryB instanceof
|
|
195467
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_14__.LineSegment3d) {
|
|
195260
195468
|
this.dispatchSegmentArc(this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB, arc0, this._extendA, this._extendA, true);
|
|
195261
195469
|
}
|
|
195262
|
-
else if (this._geometryB instanceof
|
|
195470
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d) {
|
|
195263
195471
|
this.computeArcLineString(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195264
195472
|
}
|
|
195265
|
-
else if (this._geometryB instanceof
|
|
195473
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_16__.Arc3d) {
|
|
195266
195474
|
this.dispatchArcArc(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195267
195475
|
}
|
|
195268
|
-
else if (this._geometryB instanceof
|
|
195476
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_17__.BSplineCurve3d) {
|
|
195269
195477
|
this.dispatchArcBsplineCurve3d(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195270
195478
|
}
|
|
195479
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
195480
|
+
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
195481
|
+
}
|
|
195482
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex) {
|
|
195483
|
+
this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));
|
|
195484
|
+
}
|
|
195271
195485
|
return undefined;
|
|
195272
195486
|
}
|
|
195273
195487
|
/** Double dispatch handler for strongly typed bspline curve. */
|
|
195274
195488
|
handleBSplineCurve3d(curve) {
|
|
195275
|
-
if (this._geometryB instanceof
|
|
195489
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_14__.LineSegment3d) {
|
|
195276
195490
|
this.dispatchSegmentBsplineCurve(this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB, curve, this._extendA, true);
|
|
195277
195491
|
}
|
|
195278
|
-
else if (this._geometryB instanceof
|
|
195492
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d) {
|
|
195279
195493
|
this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);
|
|
195280
195494
|
}
|
|
195281
|
-
else if (this._geometryB instanceof
|
|
195495
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_16__.Arc3d) {
|
|
195282
195496
|
this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);
|
|
195283
195497
|
}
|
|
195284
|
-
else if (this._geometryB instanceof
|
|
195498
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_17__.BSplineCurve3dBase) {
|
|
195285
195499
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
195286
195500
|
}
|
|
195501
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
195502
|
+
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
195503
|
+
}
|
|
195504
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex) {
|
|
195505
|
+
this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));
|
|
195506
|
+
}
|
|
195287
195507
|
return undefined;
|
|
195288
195508
|
}
|
|
195509
|
+
/** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */
|
|
195510
|
+
handleCurveChainWithDistanceIndex(chain) {
|
|
195511
|
+
super.handleCurveChainWithDistanceIndex(chain);
|
|
195512
|
+
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
195513
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_13__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
195514
|
+
}
|
|
195289
195515
|
/** Double dispatch handler for strongly typed homogeneous bspline curve .. */
|
|
195290
195516
|
handleBSplineCurve3dH(_curve) {
|
|
195291
195517
|
/*
|
|
@@ -195304,19 +195530,19 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
195304
195530
|
return undefined;
|
|
195305
195531
|
}
|
|
195306
195532
|
}
|
|
195307
|
-
CurveCurveIntersectXY._workVector2dA =
|
|
195308
|
-
CurveCurveIntersectXY._workPointA0H =
|
|
195309
|
-
CurveCurveIntersectXY._workPointA1H =
|
|
195310
|
-
CurveCurveIntersectXY._workPointB0H =
|
|
195311
|
-
CurveCurveIntersectXY._workPointB1H =
|
|
195312
|
-
CurveCurveIntersectXY._workPointAA0 =
|
|
195313
|
-
CurveCurveIntersectXY._workPointAA1 =
|
|
195314
|
-
CurveCurveIntersectXY._workPointBB0 =
|
|
195315
|
-
CurveCurveIntersectXY._workPointBB1 =
|
|
195316
|
-
CurveCurveIntersectXY._workPointA0 =
|
|
195317
|
-
CurveCurveIntersectXY._workPointA1 =
|
|
195318
|
-
CurveCurveIntersectXY._workPointB0 =
|
|
195319
|
-
CurveCurveIntersectXY._workPointB1 =
|
|
195533
|
+
CurveCurveIntersectXY._workVector2dA = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_18__.Vector2d.create();
|
|
195534
|
+
CurveCurveIntersectXY._workPointA0H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
195535
|
+
CurveCurveIntersectXY._workPointA1H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
195536
|
+
CurveCurveIntersectXY._workPointB0H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
195537
|
+
CurveCurveIntersectXY._workPointB1H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_11__.Point4d.create();
|
|
195538
|
+
CurveCurveIntersectXY._workPointAA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195539
|
+
CurveCurveIntersectXY._workPointAA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195540
|
+
CurveCurveIntersectXY._workPointBB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195541
|
+
CurveCurveIntersectXY._workPointBB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195542
|
+
CurveCurveIntersectXY._workPointA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195543
|
+
CurveCurveIntersectXY._workPointA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195544
|
+
CurveCurveIntersectXY._workPointB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195545
|
+
CurveCurveIntersectXY._workPointB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_19__.Point3d.create();
|
|
195320
195546
|
|
|
195321
195547
|
|
|
195322
195548
|
|
|
@@ -195333,17 +195559,20 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
195333
195559
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
195334
195560
|
/* harmony export */ CurveCurveIntersectXYZ: () => (/* binding */ CurveCurveIntersectXYZ)
|
|
195335
195561
|
/* harmony export */ });
|
|
195336
|
-
/* harmony import */ var
|
|
195337
|
-
/* harmony import */ var
|
|
195338
|
-
/* harmony import */ var
|
|
195339
|
-
/* harmony import */ var
|
|
195340
|
-
/* harmony import */ var
|
|
195341
|
-
/* harmony import */ var
|
|
195342
|
-
/* harmony import */ var
|
|
195343
|
-
/* harmony import */ var
|
|
195344
|
-
/* harmony import */ var
|
|
195345
|
-
/* harmony import */ var
|
|
195346
|
-
/* harmony import */ var
|
|
195562
|
+
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
195563
|
+
/* harmony import */ var _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../bspline/BSplineCurve */ "../../core/geometry/lib/esm/bspline/BSplineCurve.js");
|
|
195564
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
195565
|
+
/* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
|
|
195566
|
+
/* harmony import */ var _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../geometry3d/Plane3dByOriginAndUnitNormal */ "../../core/geometry/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js");
|
|
195567
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
195568
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
195569
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
195570
|
+
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
195571
|
+
/* harmony import */ var _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../CurveChainWithDistanceIndex */ "../../core/geometry/lib/esm/curve/CurveChainWithDistanceIndex.js");
|
|
195572
|
+
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
195573
|
+
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
195574
|
+
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
195575
|
+
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
195347
195576
|
/*---------------------------------------------------------------------------------------------
|
|
195348
195577
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
195349
195578
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -195362,6 +195591,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
195362
195591
|
|
|
195363
195592
|
|
|
195364
195593
|
|
|
195594
|
+
|
|
195595
|
+
|
|
195596
|
+
|
|
195365
195597
|
// cspell:word XYRR
|
|
195366
195598
|
/**
|
|
195367
195599
|
* Handler class for XYZ intersections between _geometryB and another geometry.
|
|
@@ -195369,7 +195601,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
195369
195601
|
* * geometryB is saved for later reference.
|
|
195370
195602
|
* @internal
|
|
195371
195603
|
*/
|
|
195372
|
-
class CurveCurveIntersectXYZ extends
|
|
195604
|
+
class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_1__.RecurseToCurvesGeometryHandler {
|
|
195373
195605
|
/**
|
|
195374
195606
|
* @param extendA flag to enable using extension of the other geometry.
|
|
195375
195607
|
* @param geometryB second curve for intersection. Saved for reference by specific handler methods.
|
|
@@ -195382,6 +195614,10 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195382
195614
|
this._extendB = extendB;
|
|
195383
195615
|
this._results = [];
|
|
195384
195616
|
}
|
|
195617
|
+
/** Reset the geometry, leaving all other parts unchanged (and preserving accumulated intersections). */
|
|
195618
|
+
resetGeometry(geometryB) {
|
|
195619
|
+
this._geometryB = geometryB;
|
|
195620
|
+
}
|
|
195385
195621
|
/**
|
|
195386
195622
|
* Return the results structure for the intersection calculation, structured as an array of CurveLocationDetailPair.
|
|
195387
195623
|
* @param reinitialize if true, a new results structure is created for use by later calls.
|
|
@@ -195406,21 +195642,21 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195406
195642
|
* Record with fraction mapping.
|
|
195407
195643
|
*/
|
|
195408
195644
|
recordPointWithLocalFractions(localFractionA, cpA, fractionA0, fractionA1, localFractionB, cpB, fractionB0, fractionB1, reversed) {
|
|
195409
|
-
const globalFractionA =
|
|
195410
|
-
const globalFractionB =
|
|
195411
|
-
// ignore duplicate of most recent point
|
|
195645
|
+
const globalFractionA = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.interpolate(fractionA0, localFractionA, fractionA1);
|
|
195646
|
+
const globalFractionB = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.interpolate(fractionB0, localFractionB, fractionB1);
|
|
195647
|
+
// ignore duplicate of most recent point
|
|
195412
195648
|
const numPrevious = this._results.length;
|
|
195413
195649
|
if (numPrevious > 0) {
|
|
195414
|
-
const
|
|
195415
|
-
const
|
|
195650
|
+
const oldDetailA = this._results[numPrevious - 1].detailA;
|
|
195651
|
+
const oldDetailB = this._results[numPrevious - 1].detailB;
|
|
195416
195652
|
if (reversed) {
|
|
195417
|
-
if (
|
|
195418
|
-
|
|
195653
|
+
if (oldDetailB.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
195654
|
+
oldDetailA.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
195419
195655
|
return;
|
|
195420
195656
|
}
|
|
195421
195657
|
else {
|
|
195422
|
-
if (
|
|
195423
|
-
|
|
195658
|
+
if (oldDetailA.isSameCurveAndFraction({ curve: cpA, fraction: globalFractionA }) &&
|
|
195659
|
+
oldDetailB.isSameCurveAndFraction({ curve: cpB, fraction: globalFractionB }))
|
|
195424
195660
|
return;
|
|
195425
195661
|
}
|
|
195426
195662
|
}
|
|
@@ -195428,16 +195664,16 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195428
195664
|
const pointB = cpB.fractionToPoint(globalFractionB);
|
|
195429
195665
|
if (!pointA.isAlmostEqualMetric(pointB))
|
|
195430
195666
|
return;
|
|
195431
|
-
const detailA =
|
|
195432
|
-
detailA.setIntervalRole(
|
|
195433
|
-
const detailB =
|
|
195434
|
-
detailB.setIntervalRole(
|
|
195667
|
+
const detailA = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(cpA, globalFractionA, pointA);
|
|
195668
|
+
detailA.setIntervalRole(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveIntervalRole.isolated);
|
|
195669
|
+
const detailB = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetail.createCurveFractionPoint(cpB, globalFractionB, pointB);
|
|
195670
|
+
detailB.setIntervalRole(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveIntervalRole.isolated);
|
|
195435
195671
|
if (reversed) {
|
|
195436
|
-
const pair = new
|
|
195672
|
+
const pair = new _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair(detailB, detailA);
|
|
195437
195673
|
this._results.push(pair);
|
|
195438
195674
|
}
|
|
195439
195675
|
else {
|
|
195440
|
-
const pair = new
|
|
195676
|
+
const pair = new _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__.CurveLocationDetailPair(detailA, detailB);
|
|
195441
195677
|
this._results.push(pair);
|
|
195442
195678
|
}
|
|
195443
195679
|
}
|
|
@@ -195448,7 +195684,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195448
195684
|
*/
|
|
195449
195685
|
computeSegmentSegment3D(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, cpB, extendB0, pointB0, fractionB0, pointB1, fractionB1, extendB1, reversed) {
|
|
195450
195686
|
const uv = CurveCurveIntersectXYZ._workVector2dA;
|
|
195451
|
-
if (
|
|
195687
|
+
if (_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_4__.SmallSystem.lineSegment3dClosestApproachUnbounded(pointA0, pointA1, pointB0, pointB1, uv) &&
|
|
195452
195688
|
this.acceptFraction(extendA0, uv.x, extendA1) && this.acceptFraction(extendB0, uv.y, extendB1)) {
|
|
195453
195689
|
this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
|
|
195454
195690
|
}
|
|
@@ -195475,20 +195711,20 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195475
195711
|
* @param vectorC second candidate for additional in-plane vector
|
|
195476
195712
|
*/
|
|
195477
195713
|
createPlaneWithPreferredPerpendicular(origin, vectorA, cosineValue, vectorB, vectorC) {
|
|
195478
|
-
cosineValue =
|
|
195714
|
+
cosineValue = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.restrictToInterval(Math.abs(cosineValue), 0.0, 1.0 - _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.smallFraction);
|
|
195479
195715
|
const dotAA = vectorA.magnitudeSquared();
|
|
195480
195716
|
const dotBB = vectorB.magnitudeSquared();
|
|
195481
195717
|
const dotAB = Math.abs(vectorA.dotProduct(vectorB));
|
|
195482
195718
|
const cross = vectorA.unitCrossProduct(dotAB * dotAB <= cosineValue * cosineValue * dotAA * dotBB ? vectorB : vectorC);
|
|
195483
195719
|
if (cross)
|
|
195484
|
-
return
|
|
195720
|
+
return _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_5__.Plane3dByOriginAndUnitNormal.create(origin, cross);
|
|
195485
195721
|
return undefined;
|
|
195486
195722
|
}
|
|
195487
195723
|
// Caller accesses data from a linestring or segment and passes it here.
|
|
195488
195724
|
// The line segment in question might be (a) a full line segment or (b) a fragment within a linestring.
|
|
195489
195725
|
// The fraction and extend parameters allow all combinations to be passed in.
|
|
195490
195726
|
dispatchSegmentArc(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, arc, extendB0, extendB1, reversed) {
|
|
195491
|
-
const lineVector =
|
|
195727
|
+
const lineVector = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Vector3d.createStartEnd(pointA0, pointA1);
|
|
195492
195728
|
const plane = this.createPlaneWithPreferredPerpendicular(pointA0, lineVector, 0.94, arc.perpendicularVector, arc.vector0);
|
|
195493
195729
|
if (plane !== undefined) {
|
|
195494
195730
|
const candidates = [];
|
|
@@ -195497,7 +195733,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195497
195733
|
let linePoint;
|
|
195498
195734
|
for (const c of candidates) {
|
|
195499
195735
|
if (this.acceptFraction(extendB0, c.fraction, extendB1)) {
|
|
195500
|
-
lineFraction =
|
|
195736
|
+
lineFraction = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_4__.SmallSystem.lineSegment3dClosestPointUnbounded(pointA0, pointA1, c.point);
|
|
195501
195737
|
if (lineFraction !== undefined) {
|
|
195502
195738
|
linePoint = pointA0.interpolate(lineFraction, pointA1, linePoint);
|
|
195503
195739
|
if (linePoint.isAlmostEqualMetric(c.point)
|
|
@@ -195518,7 +195754,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195518
195754
|
if (otherVectors !== undefined) {
|
|
195519
195755
|
const ellipseRadians = [];
|
|
195520
195756
|
const circleRadians = [];
|
|
195521
|
-
|
|
195757
|
+
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_4__.TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(otherVectors.center.x, otherVectors.center.y, 1.0, otherVectors.vector0.x, otherVectors.vector0.y, 0.0, otherVectors.vector90.x, otherVectors.vector90.y, 0.0, ellipseRadians, circleRadians);
|
|
195522
195758
|
for (let i = 0; i < ellipseRadians.length; i++) {
|
|
195523
195759
|
const fractionA = cpA.sweep.radiansToSignedPeriodicFraction(circleRadians[i]);
|
|
195524
195760
|
const fractionB = cpB.sweep.radiansToSignedPeriodicFraction(ellipseRadians[i]);
|
|
@@ -195538,8 +195774,8 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195538
195774
|
// 2) accept points that appear in both intersection sets.
|
|
195539
195775
|
// If arcs are in parallel planes -- no intersections.
|
|
195540
195776
|
// If arcs are in the same plane -- xy intersection in that plane.
|
|
195541
|
-
const planeA =
|
|
195542
|
-
const planeB =
|
|
195777
|
+
const planeA = _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_5__.Plane3dByOriginAndUnitNormal.create(cpA.center, cpA.perpendicularVector);
|
|
195778
|
+
const planeB = _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_5__.Plane3dByOriginAndUnitNormal.create(cpB.center, cpB.perpendicularVector);
|
|
195543
195779
|
if (planeA === undefined || planeB === undefined)
|
|
195544
195780
|
return;
|
|
195545
195781
|
if (planeA.getNormalRef().isParallelTo(planeB.getNormalRef())) {
|
|
@@ -195940,72 +196176,130 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
195940
196176
|
}
|
|
195941
196177
|
}
|
|
195942
196178
|
}
|
|
196179
|
+
/** Low level dispatch of curve collection. */
|
|
196180
|
+
dispatchCurveCollection(geomA, geomAHandler) {
|
|
196181
|
+
const geomB = this._geometryB; // save
|
|
196182
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_7__.CurveCollection))
|
|
196183
|
+
return;
|
|
196184
|
+
for (const child of geomB.children) {
|
|
196185
|
+
this.resetGeometry(child);
|
|
196186
|
+
geomAHandler(geomA);
|
|
196187
|
+
}
|
|
196188
|
+
this._geometryB = geomB; // restore
|
|
196189
|
+
}
|
|
196190
|
+
/** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */
|
|
196191
|
+
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
196192
|
+
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex))
|
|
196193
|
+
return;
|
|
196194
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex) {
|
|
196195
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(!!"call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
196196
|
+
return;
|
|
196197
|
+
}
|
|
196198
|
+
const index0 = this._results.length;
|
|
196199
|
+
const geomB = this._geometryB; // save
|
|
196200
|
+
for (const child of geomB.path.children) {
|
|
196201
|
+
this.resetGeometry(child);
|
|
196202
|
+
geomAHandler(geomA);
|
|
196203
|
+
}
|
|
196204
|
+
this.resetGeometry(geomB); // restore
|
|
196205
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
196206
|
+
}
|
|
195943
196207
|
/** Double dispatch handler for strongly typed segment. */
|
|
195944
196208
|
handleLineSegment3d(segmentA) {
|
|
195945
|
-
if (this._geometryB instanceof
|
|
196209
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_9__.LineSegment3d) {
|
|
195946
196210
|
const segmentB = this._geometryB;
|
|
195947
196211
|
this.dispatchSegmentSegment(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, segmentB, this._extendB, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB, false);
|
|
195948
196212
|
}
|
|
195949
|
-
else if (this._geometryB instanceof
|
|
196213
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_10__.LineString3d) {
|
|
195950
196214
|
this.computeSegmentLineString(segmentA, this._extendA, this._geometryB, this._extendB, false);
|
|
195951
196215
|
}
|
|
195952
|
-
else if (this._geometryB instanceof
|
|
196216
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_11__.Arc3d) {
|
|
195953
196217
|
this.dispatchSegmentArc(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, this._geometryB, this._extendB, this._extendB, false);
|
|
195954
196218
|
}
|
|
195955
|
-
else if (this._geometryB instanceof
|
|
196219
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_12__.BSplineCurve3d) {
|
|
195956
196220
|
this.dispatchSegmentBsplineCurve(segmentA, this._extendA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA, this._geometryB, this._extendB, false);
|
|
195957
196221
|
}
|
|
196222
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_7__.CurveCollection) {
|
|
196223
|
+
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
196224
|
+
}
|
|
196225
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex) {
|
|
196226
|
+
this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));
|
|
196227
|
+
}
|
|
195958
196228
|
return undefined;
|
|
195959
196229
|
}
|
|
195960
196230
|
/** double dispatch handler for strongly typed linestring. */
|
|
195961
196231
|
handleLineString3d(lsA) {
|
|
195962
|
-
if (this._geometryB instanceof
|
|
196232
|
+
if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_10__.LineString3d) {
|
|
195963
196233
|
const lsB = this._geometryB;
|
|
195964
196234
|
this.computeLineStringLineString(lsA, lsB, false);
|
|
195965
196235
|
}
|
|
195966
|
-
else if (this._geometryB instanceof
|
|
196236
|
+
else if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_9__.LineSegment3d) {
|
|
195967
196237
|
this.computeSegmentLineString(this._geometryB, this._extendB, lsA, this._extendA, true);
|
|
195968
196238
|
}
|
|
195969
|
-
else if (this._geometryB instanceof
|
|
196239
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_11__.Arc3d) {
|
|
195970
196240
|
this.computeArcLineString(this._geometryB, this._extendB, lsA, this._extendA, true);
|
|
195971
196241
|
}
|
|
195972
|
-
else if (this._geometryB instanceof
|
|
196242
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_12__.BSplineCurve3d) {
|
|
195973
196243
|
this.dispatchLineStringBSplineCurve(lsA, this._extendA, this._geometryB, this._extendB, false);
|
|
195974
196244
|
}
|
|
196245
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_7__.CurveCollection) {
|
|
196246
|
+
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
196247
|
+
}
|
|
196248
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex) {
|
|
196249
|
+
this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));
|
|
196250
|
+
}
|
|
195975
196251
|
return undefined;
|
|
195976
196252
|
}
|
|
195977
196253
|
/** Double dispatch handler for strongly typed arc. */
|
|
195978
196254
|
handleArc3d(arc0) {
|
|
195979
|
-
if (this._geometryB instanceof
|
|
196255
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_9__.LineSegment3d) {
|
|
195980
196256
|
this.dispatchSegmentArc(this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB, arc0, this._extendA, this._extendA, true);
|
|
195981
196257
|
}
|
|
195982
|
-
else if (this._geometryB instanceof
|
|
196258
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_10__.LineString3d) {
|
|
195983
196259
|
this.computeArcLineString(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195984
196260
|
}
|
|
195985
|
-
else if (this._geometryB instanceof
|
|
196261
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_11__.Arc3d) {
|
|
195986
196262
|
this.dispatchArcArc(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195987
196263
|
}
|
|
195988
|
-
else if (this._geometryB instanceof
|
|
196264
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_12__.BSplineCurve3d) {
|
|
195989
196265
|
this.dispatchArcBsplineCurve3d(arc0, this._extendA, this._geometryB, this._extendB, false);
|
|
195990
196266
|
}
|
|
196267
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_7__.CurveCollection) {
|
|
196268
|
+
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
196269
|
+
}
|
|
196270
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex) {
|
|
196271
|
+
this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));
|
|
196272
|
+
}
|
|
195991
196273
|
return undefined;
|
|
195992
196274
|
}
|
|
195993
196275
|
/** Double dispatch handler for strongly typed bspline curve. */
|
|
195994
196276
|
handleBSplineCurve3d(curve) {
|
|
195995
|
-
if (this._geometryB instanceof
|
|
196277
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_9__.LineSegment3d) {
|
|
195996
196278
|
this.dispatchSegmentBsplineCurve(this._geometryB, this._extendB, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB, curve, this._extendA, true);
|
|
195997
196279
|
}
|
|
195998
|
-
else if (this._geometryB instanceof
|
|
196280
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_10__.LineString3d) {
|
|
195999
196281
|
this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB, curve, this._extendA, true);
|
|
196000
196282
|
}
|
|
196001
|
-
else if (this._geometryB instanceof
|
|
196283
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_11__.Arc3d) {
|
|
196002
196284
|
this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB, curve, this._extendA, true);
|
|
196003
196285
|
}
|
|
196004
|
-
else if (this._geometryB instanceof
|
|
196286
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_12__.BSplineCurve3dBase) {
|
|
196005
196287
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
196006
196288
|
}
|
|
196289
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_7__.CurveCollection) {
|
|
196290
|
+
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
196291
|
+
}
|
|
196292
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex) {
|
|
196293
|
+
this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));
|
|
196294
|
+
}
|
|
196007
196295
|
return undefined;
|
|
196008
196296
|
}
|
|
196297
|
+
/** Double dispatch handler for strongly typed CurveChainWithDistanceIndex. */
|
|
196298
|
+
handleCurveChainWithDistanceIndex(chain) {
|
|
196299
|
+
super.handleCurveChainWithDistanceIndex(chain);
|
|
196300
|
+
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
196301
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_8__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
196302
|
+
}
|
|
196009
196303
|
/** Double dispatch handler for strongly typed homogeneous bspline curve. */
|
|
196010
196304
|
handleBSplineCurve3dH(_curve) {
|
|
196011
196305
|
/*
|
|
@@ -196024,11 +196318,11 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
196024
196318
|
return undefined;
|
|
196025
196319
|
}
|
|
196026
196320
|
}
|
|
196027
|
-
CurveCurveIntersectXYZ._workVector2dA =
|
|
196028
|
-
CurveCurveIntersectXYZ._workPointAA0 =
|
|
196029
|
-
CurveCurveIntersectXYZ._workPointAA1 =
|
|
196030
|
-
CurveCurveIntersectXYZ._workPointBB0 =
|
|
196031
|
-
CurveCurveIntersectXYZ._workPointBB1 =
|
|
196321
|
+
CurveCurveIntersectXYZ._workVector2dA = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_13__.Vector2d.create();
|
|
196322
|
+
CurveCurveIntersectXYZ._workPointAA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
196323
|
+
CurveCurveIntersectXYZ._workPointAA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
196324
|
+
CurveCurveIntersectXYZ._workPointBB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
196325
|
+
CurveCurveIntersectXYZ._workPointBB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
196032
196326
|
|
|
196033
196327
|
|
|
196034
196328
|
|
|
@@ -196393,10 +196687,9 @@ class MultiChainCollector {
|
|
|
196393
196687
|
captureCurve(candidate) {
|
|
196394
196688
|
if (candidate instanceof _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive)
|
|
196395
196689
|
this.captureCurvePrimitive(candidate);
|
|
196396
|
-
else if (candidate instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_2__.CurveCollection
|
|
196397
|
-
for (const c of candidate.children)
|
|
196690
|
+
else if (candidate instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_2__.CurveCollection) {
|
|
196691
|
+
for (const c of candidate.children)
|
|
196398
196692
|
this.captureCurve(c);
|
|
196399
|
-
}
|
|
196400
196693
|
}
|
|
196401
196694
|
}
|
|
196402
196695
|
/** If allowed by the geometry type, move an endpoint. */
|
|
@@ -222599,7 +222892,7 @@ class Point4d extends _geometry3d_Plane3d__WEBPACK_IMPORTED_MODULE_0__.Plane3d {
|
|
|
222599
222892
|
return undefined;
|
|
222600
222893
|
}
|
|
222601
222894
|
/**
|
|
222602
|
-
* * Return xyz projection of spacePoint to the plane
|
|
222895
|
+
* * Return xyz projection of spacePoint to the plane (this Point4d is understood as plane coefficients, not point coordinates)
|
|
222603
222896
|
* * If the xyz part of `this` are all zero, (a clone of) `spacePoint` is returned.
|
|
222604
222897
|
*/
|
|
222605
222898
|
projectPointToPlane(spacePoint, result) {
|
|
@@ -223119,14 +223412,15 @@ class BezierCoffs {
|
|
|
223119
223412
|
for (let i = 0; i < this.coffs.length; i++)
|
|
223120
223413
|
this.coffs[i] += a;
|
|
223121
223414
|
}
|
|
223122
|
-
/** Compute parameter values where the bezier value matches
|
|
223415
|
+
/** Compute parameter values where the bezier value matches targetValue.
|
|
223123
223416
|
* * The base class finds roots only in 01. (i.e. ignores _restrictTo01)
|
|
223124
|
-
* * Order-specific implementations apply special case
|
|
223417
|
+
* * Order-specific implementations apply special case analytic logic, e.g. for degree 1,2,3,4.
|
|
223125
223418
|
*/
|
|
223126
223419
|
roots(targetValue, _restrictTo01) {
|
|
223127
223420
|
const bezier = UnivariateBezier.create(this);
|
|
223128
223421
|
bezier.addInPlace(-targetValue);
|
|
223129
|
-
|
|
223422
|
+
const roots = UnivariateBezier.deflateRoots(bezier);
|
|
223423
|
+
return this.filter01(roots, true);
|
|
223130
223424
|
}
|
|
223131
223425
|
/** Given an array of numbers, optionally remove those not in the 0..1 interval.
|
|
223132
223426
|
* @param roots candidate values
|
|
@@ -223154,7 +223448,9 @@ class BezierCoffs {
|
|
|
223154
223448
|
return undefined;
|
|
223155
223449
|
}
|
|
223156
223450
|
/** zero out all coefficients. */
|
|
223157
|
-
zero() {
|
|
223451
|
+
zero() {
|
|
223452
|
+
this.coffs.fill(0);
|
|
223453
|
+
}
|
|
223158
223454
|
/** Subdivide -- write results into caller-supplied bezier coffs (which must be of the same order) */
|
|
223159
223455
|
subdivide(u, left, right) {
|
|
223160
223456
|
const order = this.order;
|
|
@@ -223677,11 +223973,10 @@ class UnivariateBezier extends BezierCoffs {
|
|
|
223677
223973
|
// first c0*b0 = a0
|
|
223678
223974
|
// last c[orderC-1]*b1 = a[orderA-1]
|
|
223679
223975
|
/** Find roots of a bezier polynomial
|
|
223680
|
-
* * Only look for roots in 0..1
|
|
223681
223976
|
* * As roots are found, deflate the polynomial.
|
|
223682
223977
|
* * bezier coffs are changed (and order reduced) at each step.
|
|
223683
223978
|
*/
|
|
223684
|
-
static
|
|
223979
|
+
static deflateRoots(bezier) {
|
|
223685
223980
|
const roots = [];
|
|
223686
223981
|
const coffs = bezier.coffs;
|
|
223687
223982
|
let a0, a1, segmentFraction, globalStartFraction, newtonFraction;
|
|
@@ -288076,7 +288371,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
|
|
|
288076
288371
|
/***/ ((module) => {
|
|
288077
288372
|
|
|
288078
288373
|
"use strict";
|
|
288079
|
-
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.0-dev.
|
|
288374
|
+
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.3.0-dev.5","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.3.0-dev.5","@itwin/core-bentley":"workspace:^4.3.0-dev.5","@itwin/core-common":"workspace:^4.3.0-dev.5","@itwin/core-geometry":"workspace:^4.3.0-dev.5","@itwin/core-orbitgt":"workspace:^4.3.0-dev.5","@itwin/core-quantity":"workspace:^4.3.0-dev.5"},"//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.3.10","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"}}');
|
|
288080
288375
|
|
|
288081
288376
|
/***/ })
|
|
288082
288377
|
|