@itwin/ecschema-rpcinterface-tests 4.10.0-dev.25 → 4.10.0-dev.27
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/_bea9.bundled-tests.js.map +1 -1
- package/lib/dist/bundled-tests.js +748 -711
- package/lib/dist/bundled-tests.js.map +1 -1
- package/lib/dist/core_frontend_lib_esm_ApproximateTerrainHeightsProps_js.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_loaders_gl_draco_3_1_6_node_modules_loaders_gl_draco_di-0642a6.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_meshoptimizer_0_20_0_node_modules_meshoptimizer_index_m-a5ae61.bundled-tests.js.map +1 -1
- package/package.json +15 -15
|
@@ -66566,9 +66566,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
66566
66566
|
/* harmony import */ var _Deserialization_XmlSerializationUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Deserialization/XmlSerializationUtils */ "../../core/ecschema-metadata/lib/esm/Deserialization/XmlSerializationUtils.js");
|
|
66567
66567
|
/* harmony import */ var _ECObjects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ECObjects */ "../../core/ecschema-metadata/lib/esm/ECObjects.js");
|
|
66568
66568
|
/* harmony import */ var _Exception__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Exception */ "../../core/ecschema-metadata/lib/esm/Exception.js");
|
|
66569
|
-
/* harmony import */ var
|
|
66570
|
-
/* harmony import */ var
|
|
66571
|
-
/* harmony import */ var _SchemaItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SchemaItem */ "../../core/ecschema-metadata/lib/esm/Metadata/SchemaItem.js");
|
|
66569
|
+
/* harmony import */ var _OverrideFormat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./OverrideFormat */ "../../core/ecschema-metadata/lib/esm/Metadata/OverrideFormat.js");
|
|
66570
|
+
/* harmony import */ var _SchemaItem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./SchemaItem */ "../../core/ecschema-metadata/lib/esm/Metadata/SchemaItem.js");
|
|
66572
66571
|
/*---------------------------------------------------------------------------------------------
|
|
66573
66572
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
66574
66573
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -66582,11 +66581,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
66582
66581
|
|
|
66583
66582
|
|
|
66584
66583
|
|
|
66585
|
-
|
|
66586
66584
|
/** A Typescript class representation of a KindOfQuantity.
|
|
66587
66585
|
* @beta
|
|
66588
66586
|
*/
|
|
66589
|
-
class KindOfQuantity extends
|
|
66587
|
+
class KindOfQuantity extends _SchemaItem__WEBPACK_IMPORTED_MODULE_5__.SchemaItem {
|
|
66590
66588
|
/** The first presentation format in the list of Formats. */
|
|
66591
66589
|
get defaultPresentationFormat() { return this.presentationFormats[0]; }
|
|
66592
66590
|
/** A list of presentation formats. */
|
|
@@ -66609,57 +66607,6 @@ class KindOfQuantity extends _SchemaItem__WEBPACK_IMPORTED_MODULE_6__.SchemaItem
|
|
|
66609
66607
|
// TODO: Add some sort of validation?
|
|
66610
66608
|
(isDefault) ? this._presentationFormats.splice(0, 0, format) : this._presentationFormats.push(format);
|
|
66611
66609
|
}
|
|
66612
|
-
/** Parses the format string into the parts that make up an Override Format
|
|
66613
|
-
* @param formatString
|
|
66614
|
-
*/
|
|
66615
|
-
parseFormatString(formatString) {
|
|
66616
|
-
const match = formatString.split(_itwin_core_quantity__WEBPACK_IMPORTED_MODULE_4__.formatStringRgx); // split string based on regex groups
|
|
66617
|
-
if (undefined === match[1])
|
|
66618
|
-
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity '${this.fullName}' is missing a format.`);
|
|
66619
|
-
const returnValue = { name: match[1] };
|
|
66620
|
-
if (undefined !== match[2] && undefined !== match[3]) {
|
|
66621
|
-
const overrideString = match[2];
|
|
66622
|
-
const tokens = [];
|
|
66623
|
-
let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.
|
|
66624
|
-
let currPos;
|
|
66625
|
-
// TODO need to include `,` as a valid search argument.
|
|
66626
|
-
while (-1 !== (currPos = overrideString.indexOf(")", prevPos))) { // eslint-disable-line
|
|
66627
|
-
tokens.push(overrideString.substring(prevPos, currPos));
|
|
66628
|
-
prevPos = currPos + 1;
|
|
66629
|
-
}
|
|
66630
|
-
if (overrideString.length > 0 && undefined === tokens.find((token) => {
|
|
66631
|
-
return "" !== token; // there is at least one token that is not empty.
|
|
66632
|
-
})) {
|
|
66633
|
-
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, ``);
|
|
66634
|
-
}
|
|
66635
|
-
// The first override parameter overrides the default precision of the format
|
|
66636
|
-
const precisionIndx = 0;
|
|
66637
|
-
if (tokens.length >= precisionIndx + 1) {
|
|
66638
|
-
if (tokens[precisionIndx].length > 0) {
|
|
66639
|
-
const precision = Number.parseInt(tokens[precisionIndx], 10);
|
|
66640
|
-
if (Number.isNaN(precision))
|
|
66641
|
-
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity '${this.fullName}' has a precision override '${tokens[precisionIndx]}' that is not number.`);
|
|
66642
|
-
returnValue.precision = precision;
|
|
66643
|
-
}
|
|
66644
|
-
}
|
|
66645
|
-
}
|
|
66646
|
-
let i = 4;
|
|
66647
|
-
while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value
|
|
66648
|
-
if (undefined === match[i])
|
|
66649
|
-
break;
|
|
66650
|
-
// Unit override required
|
|
66651
|
-
if (undefined === match[i + 1])
|
|
66652
|
-
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, ``);
|
|
66653
|
-
if (undefined === returnValue.unitAndLabels)
|
|
66654
|
-
returnValue.unitAndLabels = [];
|
|
66655
|
-
if (undefined !== match[i + 2]) // matches '|'
|
|
66656
|
-
returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? ""]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)
|
|
66657
|
-
else
|
|
66658
|
-
returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name
|
|
66659
|
-
i += 4;
|
|
66660
|
-
}
|
|
66661
|
-
return returnValue;
|
|
66662
|
-
}
|
|
66663
66610
|
/** Creates an OverrideFormat in the context of this KindOfQuantity.
|
|
66664
66611
|
* @param parent The Format to override.
|
|
66665
66612
|
* @param precision The precision override
|
|
@@ -66671,12 +66618,12 @@ class KindOfQuantity extends _SchemaItem__WEBPACK_IMPORTED_MODULE_6__.SchemaItem
|
|
|
66671
66618
|
if (parent.units && 0 === parent.units.length && unitLabelOverrides && 0 < unitLabelOverrides.length)
|
|
66672
66619
|
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `Cannot add a presentation format to KindOfQuantity '${this.name}' without any units and no unit overrides.`);
|
|
66673
66620
|
// TODO: Check compatibility of Unit overrides with the persistence unit
|
|
66674
|
-
return new
|
|
66621
|
+
return new _OverrideFormat__WEBPACK_IMPORTED_MODULE_4__.OverrideFormat(parent, precision, unitLabelOverrides);
|
|
66675
66622
|
}
|
|
66676
66623
|
async processPresentationUnits(presentationUnitsJson) {
|
|
66677
66624
|
const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(";");
|
|
66678
66625
|
for (const formatString of presUnitsArr) {
|
|
66679
|
-
const presFormatOverride =
|
|
66626
|
+
const presFormatOverride = _OverrideFormat__WEBPACK_IMPORTED_MODULE_4__.OverrideFormat.parseFormatString(formatString);
|
|
66680
66627
|
const format = await this.schema.lookupItem(presFormatOverride.name);
|
|
66681
66628
|
if (undefined === format || format.schemaItemType !== _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaItemType.Format)
|
|
66682
66629
|
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);
|
|
@@ -66703,7 +66650,7 @@ class KindOfQuantity extends _SchemaItem__WEBPACK_IMPORTED_MODULE_6__.SchemaItem
|
|
|
66703
66650
|
processPresentationUnitsSync(presentationUnitsJson) {
|
|
66704
66651
|
const presUnitsArr = Array.isArray(presentationUnitsJson) ? presentationUnitsJson : presentationUnitsJson.split(";");
|
|
66705
66652
|
for (const formatString of presUnitsArr) {
|
|
66706
|
-
const presFormatOverride =
|
|
66653
|
+
const presFormatOverride = _OverrideFormat__WEBPACK_IMPORTED_MODULE_4__.OverrideFormat.parseFormatString(formatString);
|
|
66707
66654
|
const format = this.schema.lookupItemSync(presFormatOverride.name);
|
|
66708
66655
|
if (undefined === format || format.schemaItemType !== _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaItemType.Format)
|
|
66709
66656
|
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `Unable to locate Format '${presFormatOverride.name}' for the presentation unit on KindOfQuantity ${this.fullName}.`);
|
|
@@ -66750,7 +66697,7 @@ class KindOfQuantity extends _SchemaItem__WEBPACK_IMPORTED_MODULE_6__.SchemaItem
|
|
|
66750
66697
|
}
|
|
66751
66698
|
if (undefined !== this.presentationFormats) {
|
|
66752
66699
|
const presUnitStrings = this.presentationFormats.map((format) => {
|
|
66753
|
-
if (!
|
|
66700
|
+
if (!_OverrideFormat__WEBPACK_IMPORTED_MODULE_4__.OverrideFormat.isOverrideFormat(format))
|
|
66754
66701
|
return _Deserialization_XmlSerializationUtils__WEBPACK_IMPORTED_MODULE_1__.XmlSerializationUtils.createXmlTypedName(this.schema, format.schema, format.name);
|
|
66755
66702
|
return format.fullNameXml(this.schema);
|
|
66756
66703
|
});
|
|
@@ -66945,6 +66892,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
66945
66892
|
/* harmony export */ });
|
|
66946
66893
|
/* harmony import */ var _Deserialization_XmlSerializationUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Deserialization/XmlSerializationUtils */ "../../core/ecschema-metadata/lib/esm/Deserialization/XmlSerializationUtils.js");
|
|
66947
66894
|
/* harmony import */ var _ECObjects__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ECObjects */ "../../core/ecschema-metadata/lib/esm/ECObjects.js");
|
|
66895
|
+
/* harmony import */ var _itwin_core_quantity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @itwin/core-quantity */ "../../core/quantity/lib/esm/core-quantity.js");
|
|
66896
|
+
/* harmony import */ var _Exception__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Exception */ "../../core/ecschema-metadata/lib/esm/Exception.js");
|
|
66948
66897
|
/*---------------------------------------------------------------------------------------------
|
|
66949
66898
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
66950
66899
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -66954,6 +66903,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
66954
66903
|
*/
|
|
66955
66904
|
|
|
66956
66905
|
|
|
66906
|
+
|
|
66907
|
+
|
|
66957
66908
|
/**
|
|
66958
66909
|
* Overrides of a Format, from a Schema, and is SchemaItem that is used specifically on KindOfQuantity.
|
|
66959
66910
|
* @beta
|
|
@@ -67022,6 +66973,57 @@ class OverrideFormat {
|
|
|
67022
66973
|
fullName += `[${unit.fullName}|${unitLabel}]`;
|
|
67023
66974
|
return fullName;
|
|
67024
66975
|
}
|
|
66976
|
+
/** Parses the format string into the parts that make up an Override Format
|
|
66977
|
+
* @param formatString
|
|
66978
|
+
*/
|
|
66979
|
+
static parseFormatString(formatString) {
|
|
66980
|
+
const match = formatString.split(_itwin_core_quantity__WEBPACK_IMPORTED_MODULE_2__.formatStringRgx); // split string based on regex groups
|
|
66981
|
+
if (undefined === match[1])
|
|
66982
|
+
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `The format string, ${formatString}, on KindOfQuantity is missing a format.`);
|
|
66983
|
+
const returnValue = { name: match[1] };
|
|
66984
|
+
if (undefined !== match[2] && undefined !== match[3]) {
|
|
66985
|
+
const overrideString = match[2];
|
|
66986
|
+
const tokens = [];
|
|
66987
|
+
let prevPos = 1; // Initial position is the character directly after the opening '(' in the override string.
|
|
66988
|
+
let currPos;
|
|
66989
|
+
// TODO need to include `,` as a valid search argument.
|
|
66990
|
+
while (-1 !== (currPos = overrideString.indexOf(")", prevPos))) { // eslint-disable-line
|
|
66991
|
+
tokens.push(overrideString.substring(prevPos, currPos));
|
|
66992
|
+
prevPos = currPos + 1;
|
|
66993
|
+
}
|
|
66994
|
+
if (overrideString.length > 0 && undefined === tokens.find((token) => {
|
|
66995
|
+
return "" !== token; // there is at least one token that is not empty.
|
|
66996
|
+
})) {
|
|
66997
|
+
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, ``);
|
|
66998
|
+
}
|
|
66999
|
+
// The first override parameter overrides the default precision of the format
|
|
67000
|
+
const precisionIndx = 0;
|
|
67001
|
+
if (tokens.length >= precisionIndx + 1) {
|
|
67002
|
+
if (tokens[precisionIndx].length > 0) {
|
|
67003
|
+
const precision = Number.parseInt(tokens[precisionIndx], 10);
|
|
67004
|
+
if (Number.isNaN(precision))
|
|
67005
|
+
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, `The format string '${formatString}' on KindOfQuantity has a precision override '${tokens[precisionIndx]}' that is not number.`);
|
|
67006
|
+
returnValue.precision = precision;
|
|
67007
|
+
}
|
|
67008
|
+
}
|
|
67009
|
+
}
|
|
67010
|
+
let i = 4;
|
|
67011
|
+
while (i < match.length - 1) { // The regex match ends with an empty last value, which causes problems when exactly 4 unit overrides as specified, so ignore this last empty value
|
|
67012
|
+
if (undefined === match[i])
|
|
67013
|
+
break;
|
|
67014
|
+
// Unit override required
|
|
67015
|
+
if (undefined === match[i + 1])
|
|
67016
|
+
throw new _Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsError(_Exception__WEBPACK_IMPORTED_MODULE_3__.ECObjectsStatus.InvalidECJson, ``);
|
|
67017
|
+
if (undefined === returnValue.unitAndLabels)
|
|
67018
|
+
returnValue.unitAndLabels = [];
|
|
67019
|
+
if (undefined !== match[i + 2]) // matches '|'
|
|
67020
|
+
returnValue.unitAndLabels.push([match[i + 1], match[i + 3] ?? ""]); // add unit name and label override (if '|' matches and next value is undefined, save it as an empty string)
|
|
67021
|
+
else
|
|
67022
|
+
returnValue.unitAndLabels.push([match[i + 1], undefined]); // add unit name
|
|
67023
|
+
i += 4;
|
|
67024
|
+
}
|
|
67025
|
+
return returnValue;
|
|
67026
|
+
}
|
|
67025
67027
|
/**
|
|
67026
67028
|
* @internal
|
|
67027
67029
|
*/
|
|
@@ -93488,6 +93490,9 @@ class ViewingSpace {
|
|
|
93488
93490
|
zMax = Math.max(zMax, 1.0); // make sure we have at least +-1m. Data may be purely planar
|
|
93489
93491
|
delta.z = 2.0 * zMax;
|
|
93490
93492
|
origin.z = -zMax;
|
|
93493
|
+
const ds = this.view.displayStyle;
|
|
93494
|
+
if (ds.getIsBackgroundMapVisible() && undefined !== ds.getBackgroundMapGeometry())
|
|
93495
|
+
this.adjustZPlanes(origin, delta); // make sure view volume includes background map
|
|
93491
93496
|
}
|
|
93492
93497
|
else {
|
|
93493
93498
|
if (view.isCameraOn)
|
|
@@ -187475,7 +187480,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187475
187480
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
187476
187481
|
/* harmony export */ "AkimaCurve3d": () => (/* reexport safe */ _bspline_AkimaCurve3d__WEBPACK_IMPORTED_MODULE_97__.AkimaCurve3d),
|
|
187477
187482
|
/* harmony export */ "AkimaCurve3dOptions": () => (/* reexport safe */ _bspline_AkimaCurve3d__WEBPACK_IMPORTED_MODULE_97__.AkimaCurve3dOptions),
|
|
187478
|
-
/* harmony export */ "AnalyticRoots": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.AnalyticRoots),
|
|
187479
187483
|
/* harmony export */ "Angle": () => (/* reexport safe */ _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle),
|
|
187480
187484
|
/* harmony export */ "AngleSweep": () => (/* reexport safe */ _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_1__.AngleSweep),
|
|
187481
187485
|
/* harmony export */ "AnnotatedLineString3d": () => (/* reexport safe */ _curve_LineString3d__WEBPACK_IMPORTED_MODULE_73__.AnnotatedLineString3d),
|
|
@@ -187505,7 +187509,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187505
187509
|
/* harmony export */ "BezierCurveBase": () => (/* reexport safe */ _bspline_BezierCurveBase__WEBPACK_IMPORTED_MODULE_99__.BezierCurveBase),
|
|
187506
187510
|
/* harmony export */ "BezierPolynomialAlgebra": () => (/* reexport safe */ _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_51__.BezierPolynomialAlgebra),
|
|
187507
187511
|
/* harmony export */ "BilinearPatch": () => (/* reexport safe */ _geometry3d_BilinearPatch__WEBPACK_IMPORTED_MODULE_4__.BilinearPatch),
|
|
187508
|
-
/* harmony export */ "BilinearPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.BilinearPolynomial),
|
|
187509
187512
|
/* harmony export */ "BooleanClipFactory": () => (/* reexport safe */ _clipping_BooleanClipFactory__WEBPACK_IMPORTED_MODULE_38__.BooleanClipFactory),
|
|
187510
187513
|
/* harmony export */ "Box": () => (/* reexport safe */ _solid_Box__WEBPACK_IMPORTED_MODULE_88__.Box),
|
|
187511
187514
|
/* harmony export */ "BoxTopology": () => (/* reexport safe */ _polyface_BoxTopology__WEBPACK_IMPORTED_MODULE_110__.BoxTopology),
|
|
@@ -187547,9 +187550,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187547
187550
|
/* harmony export */ "CutLoop": () => (/* reexport safe */ _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_27__.CutLoop),
|
|
187548
187551
|
/* harmony export */ "CutLoopMergeContext": () => (/* reexport safe */ _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_27__.CutLoopMergeContext),
|
|
187549
187552
|
/* harmony export */ "DeepCompare": () => (/* reexport safe */ _serialization_DeepCompare__WEBPACK_IMPORTED_MODULE_127__.DeepCompare),
|
|
187550
|
-
/* harmony export */ "Degree2PowerPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.Degree2PowerPolynomial),
|
|
187551
|
-
/* harmony export */ "Degree3PowerPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.Degree3PowerPolynomial),
|
|
187552
|
-
/* harmony export */ "Degree4PowerPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.Degree4PowerPolynomial),
|
|
187553
187553
|
/* harmony export */ "DirectSpiral3d": () => (/* reexport safe */ _curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_85__.DirectSpiral3d),
|
|
187554
187554
|
/* harmony export */ "DuplicateFacetClusterSelector": () => (/* reexport safe */ _polyface_PolyfaceQuery__WEBPACK_IMPORTED_MODULE_119__.DuplicateFacetClusterSelector),
|
|
187555
187555
|
/* harmony export */ "Ellipsoid": () => (/* reexport safe */ _geometry3d_Ellipsoid__WEBPACK_IMPORTED_MODULE_5__.Ellipsoid),
|
|
@@ -187560,7 +187560,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187560
187560
|
/* harmony export */ "FacetIntersectOptions": () => (/* reexport safe */ _polyface_FacetLocationDetail__WEBPACK_IMPORTED_MODULE_113__.FacetIntersectOptions),
|
|
187561
187561
|
/* harmony export */ "FacetLocationDetailPair": () => (/* reexport safe */ _polyface_FacetLocationDetail__WEBPACK_IMPORTED_MODULE_113__.FacetLocationDetailPair),
|
|
187562
187562
|
/* harmony export */ "FrameBuilder": () => (/* reexport safe */ _geometry3d_FrameBuilder__WEBPACK_IMPORTED_MODULE_6__.FrameBuilder),
|
|
187563
|
-
/* harmony export */ "GaussMapper": () => (/* reexport safe */
|
|
187563
|
+
/* harmony export */ "GaussMapper": () => (/* reexport safe */ _numerics_Quadrature__WEBPACK_IMPORTED_MODULE_55__.GaussMapper),
|
|
187564
187564
|
/* harmony export */ "GeodesicPathPoint": () => (/* reexport safe */ _geometry3d_Ellipsoid__WEBPACK_IMPORTED_MODULE_5__.GeodesicPathPoint),
|
|
187565
187565
|
/* harmony export */ "GeodesicPathSolver": () => (/* reexport safe */ _geometry3d_Ellipsoid__WEBPACK_IMPORTED_MODULE_5__.GeodesicPathSolver),
|
|
187566
187566
|
/* harmony export */ "Geometry": () => (/* reexport safe */ _Geometry__WEBPACK_IMPORTED_MODULE_36__.Geometry),
|
|
@@ -187573,7 +187573,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187573
187573
|
/* harmony export */ "GrowableXYArray": () => (/* reexport safe */ _geometry3d_GrowableXYArray__WEBPACK_IMPORTED_MODULE_11__.GrowableXYArray),
|
|
187574
187574
|
/* harmony export */ "GrowableXYZArray": () => (/* reexport safe */ _geometry3d_GrowableXYZArray__WEBPACK_IMPORTED_MODULE_12__.GrowableXYZArray),
|
|
187575
187575
|
/* harmony export */ "IModelJson": () => (/* reexport safe */ _serialization_IModelJsonSchema__WEBPACK_IMPORTED_MODULE_126__.IModelJson),
|
|
187576
|
-
/* harmony export */ "ImplicitLineXY": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.ImplicitLineXY),
|
|
187577
187576
|
/* harmony export */ "IndexedCollectionInterval": () => (/* reexport safe */ _geometry3d_IndexedCollectionInterval__WEBPACK_IMPORTED_MODULE_13__.IndexedCollectionInterval),
|
|
187578
187577
|
/* harmony export */ "IndexedPolyface": () => (/* reexport safe */ _polyface_Polyface__WEBPACK_IMPORTED_MODULE_112__.IndexedPolyface),
|
|
187579
187578
|
/* harmony export */ "IndexedPolyfaceSubsetVisitor": () => (/* reexport safe */ _polyface_IndexedPolyfaceVisitor__WEBPACK_IMPORTED_MODULE_114__.IndexedPolyfaceSubsetVisitor),
|
|
@@ -187643,11 +187642,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187643
187642
|
/* harmony export */ "PolygonLocationDetailPair": () => (/* reexport safe */ _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_27__.PolygonLocationDetailPair),
|
|
187644
187643
|
/* harmony export */ "PolygonOps": () => (/* reexport safe */ _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_27__.PolygonOps),
|
|
187645
187644
|
/* harmony export */ "PolylineOps": () => (/* reexport safe */ _geometry3d_PolylineOps__WEBPACK_IMPORTED_MODULE_26__.PolylineOps),
|
|
187646
|
-
/* harmony export */ "PowerPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.PowerPolynomial),
|
|
187647
187645
|
/* harmony export */ "ProxyCurve": () => (/* reexport safe */ _curve_ProxyCurve__WEBPACK_IMPORTED_MODULE_81__.ProxyCurve),
|
|
187648
|
-
/* harmony export */ "Quadrature": () => (/* reexport safe */
|
|
187646
|
+
/* harmony export */ "Quadrature": () => (/* reexport safe */ _numerics_Quadrature__WEBPACK_IMPORTED_MODULE_55__.Quadrature),
|
|
187649
187647
|
/* harmony export */ "Range1d": () => (/* reexport safe */ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_28__.Range1d),
|
|
187650
|
-
/* harmony export */ "Range1dArray": () => (/* reexport safe */
|
|
187648
|
+
/* harmony export */ "Range1dArray": () => (/* reexport safe */ _numerics_Range1dArray__WEBPACK_IMPORTED_MODULE_56__.Range1dArray),
|
|
187651
187649
|
/* harmony export */ "Range2d": () => (/* reexport safe */ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_28__.Range2d),
|
|
187652
187650
|
/* harmony export */ "Range3d": () => (/* reexport safe */ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_28__.Range3d),
|
|
187653
187651
|
/* harmony export */ "RangeBase": () => (/* reexport safe */ _geometry3d_Range__WEBPACK_IMPORTED_MODULE_28__.RangeBase),
|
|
@@ -187664,13 +187662,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187664
187662
|
/* harmony export */ "Sample": () => (/* reexport safe */ _serialization_GeometrySamples__WEBPACK_IMPORTED_MODULE_128__.Sample),
|
|
187665
187663
|
/* harmony export */ "Segment1d": () => (/* reexport safe */ _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_31__.Segment1d),
|
|
187666
187664
|
/* harmony export */ "SerializationHelpers": () => (/* reexport safe */ _serialization_SerializationHelpers__WEBPACK_IMPORTED_MODULE_129__.SerializationHelpers),
|
|
187667
|
-
/* harmony export */ "
|
|
187668
|
-
/* harmony export */ "SmallSystem": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.SmallSystem),
|
|
187665
|
+
/* harmony export */ "SmallSystem": () => (/* reexport safe */ _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_57__.SmallSystem),
|
|
187669
187666
|
/* harmony export */ "SmoothTransformBetweenFrusta": () => (/* reexport safe */ _geometry3d_FrustumAnimation__WEBPACK_IMPORTED_MODULE_7__.SmoothTransformBetweenFrusta),
|
|
187670
187667
|
/* harmony export */ "SolidPrimitive": () => (/* reexport safe */ _solid_SolidPrimitive__WEBPACK_IMPORTED_MODULE_93__.SolidPrimitive),
|
|
187671
187668
|
/* harmony export */ "SpacePolygonTriangulation": () => (/* reexport safe */ _topology_SpaceTriangulation__WEBPACK_IMPORTED_MODULE_125__.SpacePolygonTriangulation),
|
|
187672
187669
|
/* harmony export */ "Sphere": () => (/* reexport safe */ _solid_Sphere__WEBPACK_IMPORTED_MODULE_94__.Sphere),
|
|
187673
|
-
/* harmony export */ "SphereImplicit": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.SphereImplicit),
|
|
187674
187670
|
/* harmony export */ "StandardViewIndex": () => (/* reexport safe */ _Geometry__WEBPACK_IMPORTED_MODULE_36__.StandardViewIndex),
|
|
187675
187671
|
/* harmony export */ "SteppedIndexFunctionFactory": () => (/* reexport safe */ _serialization_GeometrySamples__WEBPACK_IMPORTED_MODULE_128__.SteppedIndexFunctionFactory),
|
|
187676
187672
|
/* harmony export */ "StringifiedClipVector": () => (/* reexport safe */ _clipping_ClipVector__WEBPACK_IMPORTED_MODULE_43__.StringifiedClipVector),
|
|
@@ -187680,14 +187676,12 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187680
187676
|
/* harmony export */ "SweepLineStringToFacetsOptions": () => (/* reexport safe */ _polyface_PolyfaceQuery__WEBPACK_IMPORTED_MODULE_119__.SweepLineStringToFacetsOptions),
|
|
187681
187677
|
/* harmony export */ "TaggedNumericConstants": () => (/* reexport safe */ _polyface_TaggedNumericData__WEBPACK_IMPORTED_MODULE_124__.TaggedNumericConstants),
|
|
187682
187678
|
/* harmony export */ "TaggedNumericData": () => (/* reexport safe */ _polyface_TaggedNumericData__WEBPACK_IMPORTED_MODULE_124__.TaggedNumericData),
|
|
187683
|
-
/* harmony export */ "TorusImplicit": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.TorusImplicit),
|
|
187684
187679
|
/* harmony export */ "TorusPipe": () => (/* reexport safe */ _solid_TorusPipe__WEBPACK_IMPORTED_MODULE_96__.TorusPipe),
|
|
187685
187680
|
/* harmony export */ "Transform": () => (/* reexport safe */ _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_32__.Transform),
|
|
187686
187681
|
/* harmony export */ "TransitionSpiral3d": () => (/* reexport safe */ _curve_spiral_TransitionSpiral3d__WEBPACK_IMPORTED_MODULE_83__.TransitionSpiral3d),
|
|
187687
187682
|
/* harmony export */ "TriDiagonalSystem": () => (/* reexport safe */ _numerics_TriDiagonalSystem__WEBPACK_IMPORTED_MODULE_58__.TriDiagonalSystem),
|
|
187688
187683
|
/* harmony export */ "TriangleLocationDetail": () => (/* reexport safe */ _geometry3d_BarycentricTriangle__WEBPACK_IMPORTED_MODULE_3__.TriangleLocationDetail),
|
|
187689
187684
|
/* harmony export */ "TriangularFacetLocationDetail": () => (/* reexport safe */ _polyface_FacetLocationDetail__WEBPACK_IMPORTED_MODULE_113__.TriangularFacetLocationDetail),
|
|
187690
|
-
/* harmony export */ "TrigPolynomial": () => (/* reexport safe */ _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_55__.TrigPolynomial),
|
|
187691
187685
|
/* harmony export */ "UVSelect": () => (/* reexport safe */ _bspline_BSplineSurface__WEBPACK_IMPORTED_MODULE_106__.UVSelect),
|
|
187692
187686
|
/* harmony export */ "UVSurfaceOps": () => (/* reexport safe */ _geometry3d_UVSurfaceOps__WEBPACK_IMPORTED_MODULE_33__.UVSurfaceOps),
|
|
187693
187687
|
/* harmony export */ "UnionOfConvexClipPlaneSets": () => (/* reexport safe */ _clipping_UnionOfConvexClipPlaneSets__WEBPACK_IMPORTED_MODULE_41__.UnionOfConvexClipPlaneSets),
|
|
@@ -187701,7 +187695,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187701
187695
|
/* harmony export */ "XYAndZ": () => (/* reexport safe */ _geometry3d_XYZProps__WEBPACK_IMPORTED_MODULE_34__.XYAndZ),
|
|
187702
187696
|
/* harmony export */ "XYZ": () => (/* reexport safe */ _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_23__.XYZ),
|
|
187703
187697
|
/* harmony export */ "YawPitchRollAngles": () => (/* reexport safe */ _geometry3d_YawPitchRollAngles__WEBPACK_IMPORTED_MODULE_35__.YawPitchRollAngles),
|
|
187704
|
-
/* harmony export */ "compareRange1dLexicalLowHigh": () => (/* reexport safe */
|
|
187698
|
+
/* harmony export */ "compareRange1dLexicalLowHigh": () => (/* reexport safe */ _numerics_Range1dArray__WEBPACK_IMPORTED_MODULE_56__.compareRange1dLexicalLowHigh)
|
|
187705
187699
|
/* harmony export */ });
|
|
187706
187700
|
/* harmony import */ var _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./geometry3d/Angle */ "../../core/geometry/lib/esm/geometry3d/Angle.js");
|
|
187707
187701
|
/* harmony import */ var _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./geometry3d/AngleSweep */ "../../core/geometry/lib/esm/geometry3d/AngleSweep.js");
|
|
@@ -187758,9 +187752,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
187758
187752
|
/* harmony import */ var _numerics_ClusterableArray__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./numerics/ClusterableArray */ "../../core/geometry/lib/esm/numerics/ClusterableArray.js");
|
|
187759
187753
|
/* harmony import */ var _numerics_Complex__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./numerics/Complex */ "../../core/geometry/lib/esm/numerics/Complex.js");
|
|
187760
187754
|
/* harmony import */ var _numerics_PascalCoefficients__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./numerics/PascalCoefficients */ "../../core/geometry/lib/esm/numerics/PascalCoefficients.js");
|
|
187761
|
-
/* harmony import */ var
|
|
187762
|
-
/* harmony import */ var
|
|
187763
|
-
/* harmony import */ var
|
|
187755
|
+
/* harmony import */ var _numerics_Quadrature__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./numerics/Quadrature */ "../../core/geometry/lib/esm/numerics/Quadrature.js");
|
|
187756
|
+
/* harmony import */ var _numerics_Range1dArray__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./numerics/Range1dArray */ "../../core/geometry/lib/esm/numerics/Range1dArray.js");
|
|
187757
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
187764
187758
|
/* harmony import */ var _numerics_TriDiagonalSystem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./numerics/TriDiagonalSystem */ "../../core/geometry/lib/esm/numerics/TriDiagonalSystem.js");
|
|
187765
187759
|
/* harmony import */ var _curve_Arc3d__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./curve/Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
187766
187760
|
/* harmony import */ var _curve_ConstructCurveBetweenCurves__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./curve/ConstructCurveBetweenCurves */ "../../core/geometry/lib/esm/curve/ConstructCurveBetweenCurves.js");
|
|
@@ -188110,20 +188104,21 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
188110
188104
|
/* harmony import */ var _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometry3d/Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
|
|
188111
188105
|
/* harmony import */ var _geometry3d_Plane3dByOriginAndVectors__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../geometry3d/Plane3dByOriginAndVectors */ "../../core/geometry/lib/esm/geometry3d/Plane3dByOriginAndVectors.js");
|
|
188112
188106
|
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
188113
|
-
/* harmony import */ var
|
|
188107
|
+
/* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
|
|
188114
188108
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
188115
|
-
/* harmony import */ var
|
|
188116
|
-
/* harmony import */ var
|
|
188109
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
188110
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
188111
|
+
/* harmony import */ var _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./CurveExtendMode */ "../../core/geometry/lib/esm/curve/CurveExtendMode.js");
|
|
188117
188112
|
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
188118
188113
|
/* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
|
|
188119
|
-
/* harmony import */ var
|
|
188120
|
-
/* harmony import */ var
|
|
188121
|
-
/* harmony import */ var
|
|
188114
|
+
/* harmony import */ var _internalContexts_CurveOffsetXYHandler__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./internalContexts/CurveOffsetXYHandler */ "../../core/geometry/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js");
|
|
188115
|
+
/* harmony import */ var _internalContexts_EllipticalArcApproximationContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./internalContexts/EllipticalArcApproximationContext */ "../../core/geometry/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js");
|
|
188116
|
+
/* harmony import */ var _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./internalContexts/PlaneAltitudeRangeContext */ "../../core/geometry/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js");
|
|
188122
188117
|
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
188123
188118
|
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
188124
|
-
/* harmony import */ var
|
|
188125
|
-
/* harmony import */ var
|
|
188126
|
-
/* harmony import */ var
|
|
188119
|
+
/* harmony import */ var _OffsetOptions__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./OffsetOptions */ "../../core/geometry/lib/esm/curve/OffsetOptions.js");
|
|
188120
|
+
/* harmony import */ var _Path__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./Path */ "../../core/geometry/lib/esm/curve/Path.js");
|
|
188121
|
+
/* harmony import */ var _StrokeOptions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./StrokeOptions */ "../../core/geometry/lib/esm/curve/StrokeOptions.js");
|
|
188127
188122
|
/*---------------------------------------------------------------------------------------------
|
|
188128
188123
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
188129
188124
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -188147,6 +188142,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
188147
188142
|
|
|
188148
188143
|
|
|
188149
188144
|
|
|
188145
|
+
|
|
188150
188146
|
|
|
188151
188147
|
|
|
188152
188148
|
/**
|
|
@@ -188567,7 +188563,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188567
188563
|
const ac2 = vectorAC.magnitudeSquared();
|
|
188568
188564
|
const normal = vectorAB.sizedCrossProduct(vectorAC, Math.sqrt(Math.sqrt(ab2 * ac2)));
|
|
188569
188565
|
if (normal) {
|
|
188570
|
-
const vectorToCenter =
|
|
188566
|
+
const vectorToCenter = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.linearSystem3d(normal.x, normal.y, normal.z, vectorAB.x, vectorAB.y, vectorAB.z, vectorAC.x, vectorAC.y, vectorAC.z, 0, // vectorToCenter DOT normal = 0 (ensure normal is perp to the plane of the 3 points)
|
|
188571
188567
|
0.5 * ab2, // vectorToCenter DOT vectorAB = ab2 / 2 (ensure the projection of vectorToCenter on AB bisects AB)
|
|
188572
188568
|
0.5 * ac2);
|
|
188573
188569
|
if (vectorToCenter) { // i.e., the negative of vectorX
|
|
@@ -188802,7 +188798,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188802
188798
|
const uu = this._matrix.columnXMagnitudeSquared();
|
|
188803
188799
|
const uv = this._matrix.columnXDotColumnY();
|
|
188804
188800
|
const vv = this._matrix.columnYMagnitudeSquared();
|
|
188805
|
-
|
|
188801
|
+
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_13__.TrigPolynomial.solveUnitCircleImplicitQuadricIntersection(uv, vv - uu, -uv, this._matrix.dotColumnY(vectorQ), -this._matrix.dotColumnX(vectorQ), 0.0, radians);
|
|
188806
188802
|
if (endpoints) {
|
|
188807
188803
|
radians.push(this.sweep.startRadians);
|
|
188808
188804
|
radians.push(this.sweep.endRadians);
|
|
@@ -188819,14 +188815,14 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188819
188815
|
closestPoint(spacePoint, extend, result) {
|
|
188820
188816
|
result = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_12__.CurveLocationDetail.create(this, result);
|
|
188821
188817
|
const allRadians = this.allPerpendicularAngles(spacePoint, true, true);
|
|
188822
|
-
let extend0 =
|
|
188823
|
-
let extend1 =
|
|
188818
|
+
let extend0 = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extend, 0);
|
|
188819
|
+
let extend1 = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendOptions.resolveVariantCurveExtendParameterToCurveExtendMode(extend, 1);
|
|
188824
188820
|
// distinct extends for cyclic space are awkward ....
|
|
188825
188821
|
if (this._sweep.isFullCircle) {
|
|
188826
|
-
extend0 =
|
|
188827
|
-
extend1 =
|
|
188822
|
+
extend0 = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendMode.None;
|
|
188823
|
+
extend1 = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendMode.None;
|
|
188828
188824
|
}
|
|
188829
|
-
if (extend0 !==
|
|
188825
|
+
if (extend0 !== _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendMode.None && extend1 !== _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendMode.None) {
|
|
188830
188826
|
allRadians.push(this._sweep.startRadians);
|
|
188831
188827
|
allRadians.push(this._sweep.endRadians);
|
|
188832
188828
|
}
|
|
@@ -188840,7 +188836,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188840
188836
|
let dMin = Number.MAX_VALUE;
|
|
188841
188837
|
let d = 0;
|
|
188842
188838
|
for (const radians of allRadians) {
|
|
188843
|
-
const fraction =
|
|
188839
|
+
const fraction = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_14__.CurveExtendOptions.resolveRadiansToSweepFraction(extend, radians, this.sweep);
|
|
188844
188840
|
if (fraction !== undefined) {
|
|
188845
188841
|
this.fractionToPointAndDerivative(fraction, workRay);
|
|
188846
188842
|
d = spacePoint.distance(workRay.origin);
|
|
@@ -188952,7 +188948,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188952
188948
|
* @param transform optional transform to apply to the arc.
|
|
188953
188949
|
*/
|
|
188954
188950
|
extendRangeInSweep(range, sweep, transform) {
|
|
188955
|
-
const trigForm = new
|
|
188951
|
+
const trigForm = new _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_13__.SineCosinePolynomial(0, 0, 0);
|
|
188956
188952
|
const center = this._center.clone(Arc3d._workPointA);
|
|
188957
188953
|
const vectorU = this._matrix.columnX(Arc3d._workVectorU);
|
|
188958
188954
|
const vectorV = this._matrix.columnY(Arc3d._workVectorV);
|
|
@@ -188963,7 +188959,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188963
188959
|
}
|
|
188964
188960
|
const lowPoint = Arc3d._workPointB;
|
|
188965
188961
|
const highPoint = Arc3d._workPointC;
|
|
188966
|
-
const range1 =
|
|
188962
|
+
const range1 = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_15__.Range1d.createNull();
|
|
188967
188963
|
for (let i = 0; i < 3; i++) {
|
|
188968
188964
|
trigForm.set(center.at(i), vectorU.at(i), vectorV.at(i));
|
|
188969
188965
|
trigForm.rangeInSweep(sweep, range1);
|
|
@@ -188979,7 +188975,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188979
188975
|
*/
|
|
188980
188976
|
rangeBetweenFractions(fraction0, fraction1, transform) {
|
|
188981
188977
|
const sweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_2__.AngleSweep.createStartEndRadians(this.sweep.fractionToRadians(fraction0), this.sweep.fractionToRadians(fraction1));
|
|
188982
|
-
const range =
|
|
188978
|
+
const range = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_15__.Range3d.create();
|
|
188983
188979
|
this.extendRangeInSweep(range, sweep, transform);
|
|
188984
188980
|
return range;
|
|
188985
188981
|
}
|
|
@@ -188992,7 +188988,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
188992
188988
|
*/
|
|
188993
188989
|
getPlaneAltitudeSineCosinePolynomial(plane, result) {
|
|
188994
188990
|
if (!result)
|
|
188995
|
-
result = new
|
|
188991
|
+
result = new _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_13__.SineCosinePolynomial(0, 0, 0);
|
|
188996
188992
|
// altitude function of angle t, given plane with origin o and unit normal n:
|
|
188997
188993
|
// A(t) = (c + u cos(t) + v sin(t)) . n = (c-o).n + u.n cos(t) + v.n sin(t)
|
|
188998
188994
|
// Note the different functions for computing dot product against a point vs. a vector!
|
|
@@ -189145,7 +189141,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
189145
189141
|
numStroke = options.applyTolerancesToArc(rMax, this._sweep.sweepRadians);
|
|
189146
189142
|
}
|
|
189147
189143
|
else {
|
|
189148
|
-
numStroke =
|
|
189144
|
+
numStroke = _StrokeOptions__WEBPACK_IMPORTED_MODULE_16__.StrokeOptions.applyAngleTol(undefined, 1, this._sweep.sweepRadians);
|
|
189149
189145
|
}
|
|
189150
189146
|
return numStroke;
|
|
189151
189147
|
}
|
|
@@ -189284,7 +189280,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
189284
189280
|
* @param offsetDistanceOrOptions offset distance (positive to left of the instance curve), or options object
|
|
189285
189281
|
*/
|
|
189286
189282
|
constructOffsetXY(offsetDistanceOrOptions) {
|
|
189287
|
-
const options =
|
|
189283
|
+
const options = _OffsetOptions__WEBPACK_IMPORTED_MODULE_17__.OffsetOptions.create(offsetDistanceOrOptions);
|
|
189288
189284
|
if (this.isCircular || options.preserveEllipticalArcs) {
|
|
189289
189285
|
const arcXY = this.cloneAtZ();
|
|
189290
189286
|
const sign = arcXY.sweep.sweepRadians * arcXY.matrixRef.coffs[8] >= 0.0 ? 1.0 : -1.0;
|
|
@@ -189306,7 +189302,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
189306
189302
|
}
|
|
189307
189303
|
}
|
|
189308
189304
|
// default impl
|
|
189309
|
-
const handler = new
|
|
189305
|
+
const handler = new _internalContexts_CurveOffsetXYHandler__WEBPACK_IMPORTED_MODULE_18__.CurveOffsetXYHandler(this, options.leftOffsetDistance);
|
|
189310
189306
|
this.emitStrokableParts(handler, options.strokeOptions);
|
|
189311
189307
|
return handler.claimResult();
|
|
189312
189308
|
}
|
|
@@ -189317,7 +189313,7 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
189317
189313
|
* @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the end of the ray.
|
|
189318
189314
|
*/
|
|
189319
189315
|
projectedParameterRange(ray, lowHigh) {
|
|
189320
|
-
return
|
|
189316
|
+
return _internalContexts_PlaneAltitudeRangeContext__WEBPACK_IMPORTED_MODULE_19__.PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);
|
|
189321
189317
|
}
|
|
189322
189318
|
/**
|
|
189323
189319
|
* Construct a circular arc chain approximation to the instance elliptical arc.
|
|
@@ -189327,10 +189323,10 @@ class Arc3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePrimitive
|
|
|
189327
189323
|
constructCircularArcChainApproximation(options) {
|
|
189328
189324
|
if (!options)
|
|
189329
189325
|
options = EllipticalArcApproximationOptions.create();
|
|
189330
|
-
const context =
|
|
189326
|
+
const context = _internalContexts_EllipticalArcApproximationContext__WEBPACK_IMPORTED_MODULE_20__.EllipticalArcApproximationContext.create(this);
|
|
189331
189327
|
const result = context.constructCircularArcChainApproximation(options);
|
|
189332
189328
|
if (!result && this.isCircular)
|
|
189333
|
-
return (this.sweep.isFullCircle && options.forcePath) ?
|
|
189329
|
+
return (this.sweep.isFullCircle && options.forcePath) ? _Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(this) : this;
|
|
189334
189330
|
return result;
|
|
189335
189331
|
}
|
|
189336
189332
|
}
|
|
@@ -191112,7 +191108,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
191112
191108
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
191113
191109
|
/* harmony import */ var _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../geometry3d/Segment1d */ "../../core/geometry/lib/esm/geometry3d/Segment1d.js");
|
|
191114
191110
|
/* harmony import */ var _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../geometry3d/Transform */ "../../core/geometry/lib/esm/geometry3d/Transform.js");
|
|
191115
|
-
/* harmony import */ var
|
|
191111
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
191116
191112
|
/* harmony import */ var _polyface_PolyfaceBuilder__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../polyface/PolyfaceBuilder */ "../../core/geometry/lib/esm/polyface/PolyfaceBuilder.js");
|
|
191117
191113
|
/* harmony import */ var _solid_Cone__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../solid/Cone */ "../../core/geometry/lib/esm/solid/Cone.js");
|
|
191118
191114
|
/* harmony import */ var _solid_RuledSweep__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../solid/RuledSweep */ "../../core/geometry/lib/esm/solid/RuledSweep.js");
|
|
@@ -191645,7 +191641,7 @@ class CurveFactory {
|
|
|
191645
191641
|
const vectorA = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_7__.Vector3d.createAdd2Scaled(unitAB, sA, unitPerpAB, tA);
|
|
191646
191642
|
const vectorB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_7__.Vector3d.createAdd2Scaled(unitCB, sB, unitPerpCB, tB);
|
|
191647
191643
|
const uv = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_22__.Vector2d.create();
|
|
191648
|
-
if (
|
|
191644
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_23__.SmallSystem.linearSystem2d(unitAB.x, -unitCB.x, unitAB.y, -unitCB.y, vectorB.x - vectorA.x, vectorB.y - vectorA.y, uv)) {
|
|
191649
191645
|
const tangencyAB = pointB.plusScaled(unitAB, uv.x);
|
|
191650
191646
|
const tangencyCB = pointB.plusScaled(unitCB, uv.y);
|
|
191651
191647
|
const frameA = _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_17__.Transform.createOriginAndMatrixColumns(tangencyAB, unitAB, unitPerpAB, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_7__.Vector3d.unitZ());
|
|
@@ -191681,7 +191677,7 @@ class CurveFactory {
|
|
|
191681
191677
|
const normalCx = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(normalAy, normalAz, normalBy, normalBz);
|
|
191682
191678
|
const normalCy = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(normalAz, normalAx, normalBz, normalBx);
|
|
191683
191679
|
const normalCz = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(normalAx, normalAy, normalBx, normalBy);
|
|
191684
|
-
const rayOrigin =
|
|
191680
|
+
const rayOrigin = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_23__.SmallSystem.linearSystem3d(normalAx, normalAy, normalAz, normalBx, normalBy, normalBz, normalCx, normalCy, normalCz, -altitudeA, -altitudeB, 0.0);
|
|
191685
191681
|
if (rayOrigin !== undefined) {
|
|
191686
191682
|
return _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_24__.Ray3d.createXYZUVW(rayOrigin.x, rayOrigin.y, rayOrigin.z, normalCx, normalCy, normalCz);
|
|
191687
191683
|
}
|
|
@@ -193339,7 +193335,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
193339
193335
|
/* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
|
|
193340
193336
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
193341
193337
|
/* harmony import */ var _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../numerics/BezierPolynomials */ "../../core/geometry/lib/esm/numerics/BezierPolynomials.js");
|
|
193342
|
-
/* harmony import */ var
|
|
193338
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
193343
193339
|
/* harmony import */ var _CurveExtendMode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./CurveExtendMode */ "../../core/geometry/lib/esm/curve/CurveExtendMode.js");
|
|
193344
193340
|
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
193345
193341
|
/* harmony import */ var _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurvePrimitive */ "../../core/geometry/lib/esm/curve/CurvePrimitive.js");
|
|
@@ -193571,7 +193567,7 @@ class LineSegment3d extends _CurvePrimitive__WEBPACK_IMPORTED_MODULE_1__.CurvePr
|
|
|
193571
193567
|
const unboundedFractions = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_7__.Vector2d.create();
|
|
193572
193568
|
if (result === undefined)
|
|
193573
193569
|
result = _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetailPair.createCapture(_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetail.create(), _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_6__.CurveLocationDetail.create());
|
|
193574
|
-
if (
|
|
193570
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dClosestApproachUnbounded(segmentA._point0, segmentA._point1, segmentB._point0, segmentB._point1, unboundedFractions)) {
|
|
193575
193571
|
// There is a simple approach between the unbounded segments. Maybe its a really easy case ...
|
|
193576
193572
|
const fractionA = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_5__.CurveExtendOptions.correctFraction(extendA, unboundedFractions.x);
|
|
193577
193573
|
const fractionB = _CurveExtendMode__WEBPACK_IMPORTED_MODULE_5__.CurveExtendOptions.correctFraction(extendB, unboundedFractions.y);
|
|
@@ -200497,17 +200493,18 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
200497
200493
|
/* harmony export */ "CurveCurveCloseApproachXY": () => (/* binding */ CurveCurveCloseApproachXY)
|
|
200498
200494
|
/* harmony export */ });
|
|
200499
200495
|
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
200500
|
-
/* harmony import */ var
|
|
200496
|
+
/* harmony import */ var _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../bspline/BSplineCurve */ "../../core/geometry/lib/esm/bspline/BSplineCurve.js");
|
|
200501
200497
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
200502
200498
|
/* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
|
|
200503
200499
|
/* harmony import */ var _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../geometry3d/GrowableFloat64Array */ "../../core/geometry/lib/esm/geometry3d/GrowableFloat64Array.js");
|
|
200504
|
-
/* harmony import */ var
|
|
200505
|
-
/* harmony import */ var
|
|
200500
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
200501
|
+
/* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
|
|
200506
200502
|
/* harmony import */ var _numerics_Newton__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../numerics/Newton */ "../../core/geometry/lib/esm/numerics/Newton.js");
|
|
200507
|
-
/* harmony import */ var
|
|
200503
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
200504
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
200508
200505
|
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
200509
|
-
/* harmony import */ var
|
|
200510
|
-
/* harmony import */ var
|
|
200506
|
+
/* harmony import */ var _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../CurveChainWithDistanceIndex */ "../../core/geometry/lib/esm/curve/CurveChainWithDistanceIndex.js");
|
|
200507
|
+
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
200511
200508
|
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
200512
200509
|
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
200513
200510
|
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
@@ -200533,6 +200530,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
200533
200530
|
|
|
200534
200531
|
|
|
200535
200532
|
|
|
200533
|
+
|
|
200536
200534
|
// cspell:word XYRR currentdFdX
|
|
200537
200535
|
/**
|
|
200538
200536
|
* Handler class for XY close approach between _geometryB and another geometry.
|
|
@@ -200961,7 +200959,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
200961
200959
|
const arcPoint = arc.radiansToPoint(radians1);
|
|
200962
200960
|
const fArc = arc.sweep.radiansToSignedPeriodicFraction(radians1);
|
|
200963
200961
|
if (this.acceptFraction(fArc)) { // reject solution outside arc sweep
|
|
200964
|
-
const fLine =
|
|
200962
|
+
const fLine = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0, pointA1, arcPoint);
|
|
200965
200963
|
if (fLine !== undefined && this.acceptFraction(fLine))
|
|
200966
200964
|
this.recordPointWithLocalFractions(fLine, cpA, fractionA0, fractionA1, fArc, arc, 0, 1, reversed);
|
|
200967
200965
|
}
|
|
@@ -201002,12 +201000,12 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201002
201000
|
const cosines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
|
|
201003
201001
|
const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
|
|
201004
201002
|
const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_9__.GrowableFloat64Array(2);
|
|
201005
|
-
const numRoots =
|
|
201003
|
+
const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_10__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(// solve the equation
|
|
201006
201004
|
alpha, beta, gamma, cosines, sines, radians);
|
|
201007
201005
|
for (let i = 0; i < numRoots; i++) {
|
|
201008
201006
|
const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
|
|
201009
201007
|
const arcFraction = data.sweep.radiansToSignedPeriodicFraction(radians.atUncheckedIndex(i));
|
|
201010
|
-
const lineFraction =
|
|
201008
|
+
const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);
|
|
201011
201009
|
// only add if the point is within the start and end fractions of both line segment and arc
|
|
201012
201010
|
if (lineFraction !== undefined && this.acceptFraction(lineFraction) && this.acceptFraction(arcFraction)) {
|
|
201013
201011
|
this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, arcFraction, arc, 0, 1, reversed);
|
|
@@ -201129,7 +201127,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201129
201127
|
/** Low level dispatch of curve collection. */
|
|
201130
201128
|
dispatchCurveCollection(geomA, geomAHandler) {
|
|
201131
201129
|
const geomB = this._geometryB; // save
|
|
201132
|
-
if (!geomB || !geomB.children || !(geomB instanceof
|
|
201130
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_11__.CurveCollection))
|
|
201133
201131
|
return;
|
|
201134
201132
|
for (const child of geomB.children) {
|
|
201135
201133
|
this.resetGeometry(child);
|
|
@@ -201139,9 +201137,9 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201139
201137
|
}
|
|
201140
201138
|
/** Low level dispatch to geomA given a CurveChainWithDistanceIndex in geometryB. */
|
|
201141
201139
|
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
201142
|
-
if (!this._geometryB || !(this._geometryB instanceof
|
|
201140
|
+
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex))
|
|
201143
201141
|
return;
|
|
201144
|
-
if (geomA instanceof
|
|
201142
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex) {
|
|
201145
201143
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
201146
201144
|
return;
|
|
201147
201145
|
}
|
|
@@ -201152,7 +201150,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201152
201150
|
geomAHandler(geomA);
|
|
201153
201151
|
}
|
|
201154
201152
|
this.resetGeometry(geomB); // restore
|
|
201155
|
-
this._results =
|
|
201153
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
201156
201154
|
}
|
|
201157
201155
|
/** Double dispatch handler for strongly typed segment. */
|
|
201158
201156
|
handleLineSegment3d(segmentA) {
|
|
@@ -201166,13 +201164,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201166
201164
|
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_4__.Arc3d) {
|
|
201167
201165
|
this.dispatchSegmentArc(segmentA, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._geometryB, false);
|
|
201168
201166
|
}
|
|
201169
|
-
else if (this._geometryB instanceof
|
|
201167
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_13__.BSplineCurve3d) {
|
|
201170
201168
|
this.dispatchSegmentBsplineCurve(segmentA, this._geometryB, false);
|
|
201171
201169
|
}
|
|
201172
|
-
else if (this._geometryB instanceof
|
|
201170
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_11__.CurveCollection) {
|
|
201173
201171
|
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
201174
201172
|
}
|
|
201175
|
-
else if (this._geometryB instanceof
|
|
201173
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex) {
|
|
201176
201174
|
this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));
|
|
201177
201175
|
}
|
|
201178
201176
|
return undefined;
|
|
@@ -201215,7 +201213,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201215
201213
|
return;
|
|
201216
201214
|
let bitB0;
|
|
201217
201215
|
let bitB1;
|
|
201218
|
-
const rangeA1 =
|
|
201216
|
+
const rangeA1 = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_14__.Range3d.createNull();
|
|
201219
201217
|
const pointA0 = CurveCurveCloseApproachXY._workPointAA0;
|
|
201220
201218
|
const pointA1 = CurveCurveCloseApproachXY._workPointAA1;
|
|
201221
201219
|
const pointB0 = CurveCurveCloseApproachXY._workPointBB0;
|
|
@@ -201265,13 +201263,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201265
201263
|
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_4__.Arc3d) {
|
|
201266
201264
|
this.computeArcLineString(this._geometryB, lsA, true);
|
|
201267
201265
|
}
|
|
201268
|
-
else if (this._geometryB instanceof
|
|
201266
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_13__.BSplineCurve3d) {
|
|
201269
201267
|
this.dispatchLineStringBSplineCurve(lsA, this._geometryB, false);
|
|
201270
201268
|
}
|
|
201271
|
-
else if (this._geometryB instanceof
|
|
201269
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_11__.CurveCollection) {
|
|
201272
201270
|
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
201273
201271
|
}
|
|
201274
|
-
else if (this._geometryB instanceof
|
|
201272
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex) {
|
|
201275
201273
|
this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));
|
|
201276
201274
|
}
|
|
201277
201275
|
return undefined;
|
|
@@ -201287,13 +201285,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201287
201285
|
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_4__.Arc3d) {
|
|
201288
201286
|
this.dispatchArcArc(arc0, this._geometryB, false);
|
|
201289
201287
|
}
|
|
201290
|
-
else if (this._geometryB instanceof
|
|
201288
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_13__.BSplineCurve3d) {
|
|
201291
201289
|
this.dispatchArcBsplineCurve3d(arc0, this._geometryB, false);
|
|
201292
201290
|
}
|
|
201293
|
-
else if (this._geometryB instanceof
|
|
201291
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_11__.CurveCollection) {
|
|
201294
201292
|
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
201295
201293
|
}
|
|
201296
|
-
else if (this._geometryB instanceof
|
|
201294
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex) {
|
|
201297
201295
|
this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));
|
|
201298
201296
|
}
|
|
201299
201297
|
return undefined;
|
|
@@ -201309,13 +201307,13 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201309
201307
|
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_4__.Arc3d) {
|
|
201310
201308
|
this.dispatchArcBsplineCurve3d(this._geometryB, curve, true);
|
|
201311
201309
|
}
|
|
201312
|
-
else if (this._geometryB instanceof
|
|
201310
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_13__.BSplineCurve3dBase) {
|
|
201313
201311
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
201314
201312
|
}
|
|
201315
|
-
else if (this._geometryB instanceof
|
|
201313
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_11__.CurveCollection) {
|
|
201316
201314
|
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
201317
201315
|
}
|
|
201318
|
-
else if (this._geometryB instanceof
|
|
201316
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex) {
|
|
201319
201317
|
this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));
|
|
201320
201318
|
}
|
|
201321
201319
|
return undefined;
|
|
@@ -201324,7 +201322,7 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201324
201322
|
handleCurveChainWithDistanceIndex(chain) {
|
|
201325
201323
|
super.handleCurveChainWithDistanceIndex(chain);
|
|
201326
201324
|
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
201327
|
-
this._results =
|
|
201325
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_12__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
201328
201326
|
}
|
|
201329
201327
|
/** Double dispatch handler for strongly typed homogeneous bspline curve .. */
|
|
201330
201328
|
handleBSplineCurve3dH(_curve) {
|
|
@@ -201344,11 +201342,11 @@ class CurveCurveCloseApproachXY extends _geometry3d_GeometryHandler__WEBPACK_IMP
|
|
|
201344
201342
|
return undefined;
|
|
201345
201343
|
}
|
|
201346
201344
|
}
|
|
201347
|
-
CurveCurveCloseApproachXY._workPointAA0 =
|
|
201348
|
-
CurveCurveCloseApproachXY._workPointAA1 =
|
|
201349
|
-
CurveCurveCloseApproachXY._workPointBB0 =
|
|
201350
|
-
CurveCurveCloseApproachXY._workPointBB1 =
|
|
201351
|
-
CurveCurveCloseApproachXY._workPointB =
|
|
201345
|
+
CurveCurveCloseApproachXY._workPointAA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__.Point3d.create();
|
|
201346
|
+
CurveCurveCloseApproachXY._workPointAA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__.Point3d.create();
|
|
201347
|
+
CurveCurveCloseApproachXY._workPointBB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__.Point3d.create();
|
|
201348
|
+
CurveCurveCloseApproachXY._workPointBB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__.Point3d.create();
|
|
201349
|
+
CurveCurveCloseApproachXY._workPointB = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_15__.Point3d.create();
|
|
201352
201350
|
|
|
201353
201351
|
|
|
201354
201352
|
/***/ }),
|
|
@@ -201365,26 +201363,27 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
201365
201363
|
/* harmony export */ "CurveCurveIntersectXY": () => (/* binding */ CurveCurveIntersectXY)
|
|
201366
201364
|
/* harmony export */ });
|
|
201367
201365
|
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
201368
|
-
/* harmony import */ var
|
|
201366
|
+
/* harmony import */ var _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../bspline/BSplineCurve */ "../../core/geometry/lib/esm/bspline/BSplineCurve.js");
|
|
201369
201367
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
201370
201368
|
/* harmony import */ var _geometry3d_CoincidentGeometryOps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../geometry3d/CoincidentGeometryOps */ "../../core/geometry/lib/esm/geometry3d/CoincidentGeometryOps.js");
|
|
201371
201369
|
/* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
|
|
201372
201370
|
/* harmony import */ var _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../geometry3d/GrowableFloat64Array */ "../../core/geometry/lib/esm/geometry3d/GrowableFloat64Array.js");
|
|
201373
|
-
/* harmony import */ var
|
|
201374
|
-
/* harmony import */ var
|
|
201375
|
-
/* harmony import */ var
|
|
201376
|
-
/* harmony import */ var
|
|
201377
|
-
/* harmony import */ var
|
|
201378
|
-
/* harmony import */ var
|
|
201379
|
-
/* harmony import */ var
|
|
201380
|
-
/* harmony import */ var
|
|
201381
|
-
/* harmony import */ var
|
|
201382
|
-
/* harmony import */ var
|
|
201371
|
+
/* harmony import */ var _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../geometry3d/Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
|
|
201372
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
201373
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
201374
|
+
/* harmony import */ var _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../geometry4d/Point4d */ "../../core/geometry/lib/esm/geometry4d/Point4d.js");
|
|
201375
|
+
/* harmony import */ var _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../numerics/BezierPolynomials */ "../../core/geometry/lib/esm/numerics/BezierPolynomials.js");
|
|
201376
|
+
/* harmony import */ var _numerics_Newton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../numerics/Newton */ "../../core/geometry/lib/esm/numerics/Newton.js");
|
|
201377
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
201378
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
201379
|
+
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
201380
|
+
/* harmony import */ var _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../CurveChainWithDistanceIndex */ "../../core/geometry/lib/esm/curve/CurveChainWithDistanceIndex.js");
|
|
201381
|
+
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
201383
201382
|
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
201384
|
-
/* harmony import */ var
|
|
201385
|
-
/* harmony import */ var
|
|
201386
|
-
/* harmony import */ var
|
|
201387
|
-
/* harmony import */ var
|
|
201383
|
+
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
201384
|
+
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
201385
|
+
/* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
|
|
201386
|
+
/* harmony import */ var _Path__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../Path */ "../../core/geometry/lib/esm/curve/Path.js");
|
|
201388
201387
|
/*---------------------------------------------------------------------------------------------
|
|
201389
201388
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
201390
201389
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -201411,6 +201410,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
201411
201410
|
|
|
201412
201411
|
|
|
201413
201412
|
|
|
201413
|
+
|
|
201414
201414
|
|
|
201415
201415
|
|
|
201416
201416
|
// cspell:word XYRR
|
|
@@ -201567,7 +201567,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201567
201567
|
this.recordPointWithLocalFractions(overlap.detailA.fraction, cpA, fractionA0, fractionA1, overlap.detailB.fraction, cpB, fractionB0, fractionB1, reversed, overlap);
|
|
201568
201568
|
}
|
|
201569
201569
|
}
|
|
201570
|
-
else if (
|
|
201570
|
+
else if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dXYTransverseIntersectionUnbounded(pointA0, pointA1, pointB0, pointB1, uv)) {
|
|
201571
201571
|
if (this.acceptFractionOnLine(extendA0, uv.x, extendA1, pointA0, pointA1, this._coincidentGeometryContext.tolerance) &&
|
|
201572
201572
|
this.acceptFractionOnLine(extendB0, uv.y, extendB1, pointB0, pointB1, this._coincidentGeometryContext.tolerance)) {
|
|
201573
201573
|
this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
|
|
@@ -201587,7 +201587,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201587
201587
|
this._worldToLocalPerspective.multiplyPoint3d(pointA1, 1, hA1);
|
|
201588
201588
|
this._worldToLocalPerspective.multiplyPoint3d(pointB0, 1, hB0);
|
|
201589
201589
|
this._worldToLocalPerspective.multiplyPoint3d(pointB1, 1, hB1);
|
|
201590
|
-
const fractionAB =
|
|
201590
|
+
const fractionAB = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dHXYTransverseIntersectionUnbounded(hA0, hA1, hB0, hB1);
|
|
201591
201591
|
if (fractionAB !== undefined) {
|
|
201592
201592
|
const fractionA = fractionAB.x;
|
|
201593
201593
|
const fractionB = fractionAB.y;
|
|
@@ -201636,11 +201636,11 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201636
201636
|
const cosines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201637
201637
|
const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201638
201638
|
const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201639
|
-
const numRoots =
|
|
201639
|
+
const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
|
|
201640
201640
|
for (let i = 0; i < numRoots; i++) {
|
|
201641
201641
|
const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
|
|
201642
201642
|
const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
|
|
201643
|
-
const lineFraction =
|
|
201643
|
+
const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, arcPoint);
|
|
201644
201644
|
if (lineFraction !== undefined &&
|
|
201645
201645
|
this.acceptFraction(extendA0, lineFraction, extendA1) &&
|
|
201646
201646
|
this.acceptFraction(extendB0, arcFraction, extendB1)) {
|
|
@@ -201662,13 +201662,13 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201662
201662
|
const cosines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201663
201663
|
const sines = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201664
201664
|
const radians = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array(2);
|
|
201665
|
-
const numRoots =
|
|
201665
|
+
const numRoots = _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.AnalyticRoots.appendImplicitLineUnitCircleIntersections(alpha, beta, gamma, cosines, sines, radians);
|
|
201666
201666
|
const lineFractionTol = 1.0e-10; // TODO: why are we loosening tolerances here?
|
|
201667
201667
|
const arcFractionTol = 1.0e-7;
|
|
201668
201668
|
for (let i = 0; i < numRoots; i++) {
|
|
201669
201669
|
const arcPoint = data.center.plus2Scaled(data.vector0, cosines.atUncheckedIndex(i), data.vector90, sines.atUncheckedIndex(i));
|
|
201670
201670
|
const arcFraction = data.sweep.radiansToSignedFraction(radians.atUncheckedIndex(i), extendB0);
|
|
201671
|
-
const lineFraction =
|
|
201671
|
+
const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dXYClosestPointUnbounded(pointA0Local, pointA1Local, arcPoint);
|
|
201672
201672
|
if (lineFraction !== undefined &&
|
|
201673
201673
|
this.acceptFraction(extendA0, lineFraction, extendA1, lineFractionTol) &&
|
|
201674
201674
|
this.acceptFraction(extendB0, arcFraction, extendB1, arcFractionTol)) {
|
|
@@ -201692,7 +201692,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201692
201692
|
const ellipseRadians = [];
|
|
201693
201693
|
const circleRadians = [];
|
|
201694
201694
|
// find the intersection of the transformed arcs
|
|
201695
|
-
|
|
201695
|
+
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.TrigPolynomial.solveUnitCircleHomogeneousEllipseIntersection(localB.coffs[2], localB.coffs[5], localB.coffs[8], // center xyw
|
|
201696
201696
|
localB.coffs[0], localB.coffs[3], localB.coffs[6], // vector0 xyw
|
|
201697
201697
|
localB.coffs[1], localB.coffs[4], localB.coffs[7], // vector90 xyw
|
|
201698
201698
|
ellipseRadians, circleRadians);
|
|
@@ -201719,14 +201719,14 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201719
201719
|
if (this._worldToLocalPerspective) {
|
|
201720
201720
|
const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
201721
201721
|
const dataB = cpB.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
201722
|
-
matrixA =
|
|
201723
|
-
matrixB =
|
|
201722
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w);
|
|
201723
|
+
matrixB = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataB.vector0, dataB.vector0.w, dataB.vector90, dataA.vector90.w, dataB.center, dataB.center.w);
|
|
201724
201724
|
}
|
|
201725
201725
|
else {
|
|
201726
201726
|
const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);
|
|
201727
201727
|
const dataB = cpB.toTransformedVectors(this._worldToLocalAffine);
|
|
201728
|
-
matrixA =
|
|
201729
|
-
matrixB =
|
|
201728
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);
|
|
201729
|
+
matrixB = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataB.vector0, 0, dataB.vector90, 0, dataB.center, 1);
|
|
201730
201730
|
}
|
|
201731
201731
|
const conditionA = matrixA.conditionNumber();
|
|
201732
201732
|
const conditionB = matrixB.conditionNumber();
|
|
@@ -201757,11 +201757,11 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201757
201757
|
let matrixA;
|
|
201758
201758
|
if (this._worldToLocalPerspective) {
|
|
201759
201759
|
const dataA = cpA.toTransformedPoint4d(this._worldToLocalPerspective);
|
|
201760
|
-
matrixA =
|
|
201760
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataA.vector0, dataA.vector0.w, dataA.vector90, dataA.vector90.w, dataA.center, dataA.center.w);
|
|
201761
201761
|
}
|
|
201762
201762
|
else {
|
|
201763
201763
|
const dataA = cpA.toTransformedVectors(this._worldToLocalAffine);
|
|
201764
|
-
matrixA =
|
|
201764
|
+
matrixA = _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_8__.Matrix3d.createColumnsXYW(dataA.vector0, 0, dataA.vector90, 0, dataA.center, 1);
|
|
201765
201765
|
}
|
|
201766
201766
|
// The worldToLocal has moved the arc vectors into local space.
|
|
201767
201767
|
// matrixA captures the xyw parts (ignoring z)
|
|
@@ -201772,7 +201772,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201772
201772
|
const orderF = cpB.order; // order of the beziers for simple coordinates
|
|
201773
201773
|
const orderG = 2 * orderF - 1; // order of the (single) bezier for squared coordinates.
|
|
201774
201774
|
const coffF = new Float64Array(orderF);
|
|
201775
|
-
const univariateBezierG = new
|
|
201775
|
+
const univariateBezierG = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_9__.UnivariateBezier(orderG);
|
|
201776
201776
|
const axx = matrixAInverse.at(0, 0);
|
|
201777
201777
|
const axy = matrixAInverse.at(0, 1);
|
|
201778
201778
|
const axz = 0.0;
|
|
@@ -201843,13 +201843,13 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201843
201843
|
dispatchBezierBezierStrokeFirst(bezierA, bcurveA, strokeCountA, bezierB, bcurveB, _strokeCountB, univariateBezierB, // caller-allocated for univariate coefficients.
|
|
201844
201844
|
reversed) {
|
|
201845
201845
|
if (!this._xyzwA0)
|
|
201846
|
-
this._xyzwA0 =
|
|
201846
|
+
this._xyzwA0 = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
201847
201847
|
if (!this._xyzwA1)
|
|
201848
|
-
this._xyzwA1 =
|
|
201848
|
+
this._xyzwA1 = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
201849
201849
|
if (!this._xyzwPlane)
|
|
201850
|
-
this._xyzwPlane =
|
|
201850
|
+
this._xyzwPlane = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
201851
201851
|
if (!this._xyzwB)
|
|
201852
|
-
this._xyzwB =
|
|
201852
|
+
this._xyzwB = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
201853
201853
|
/*
|
|
201854
201854
|
const roots = univariateBezierG.roots(0.0, true);
|
|
201855
201855
|
if (roots) {
|
|
@@ -201875,7 +201875,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201875
201875
|
for (let i = 1; i <= strokeCountA; i++, f0 = f1, this._xyzwA0.setFrom(this._xyzwA1)) {
|
|
201876
201876
|
f1 = i * df;
|
|
201877
201877
|
bezierA.fractionToPoint4d(f1, this._xyzwA1);
|
|
201878
|
-
|
|
201878
|
+
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.createPlanePointPointZ(this._xyzwA0, this._xyzwA1, this._xyzwPlane);
|
|
201879
201879
|
bezierB.poleProductsXYZW(univariateBezierB.coffs, this._xyzwPlane.x, this._xyzwPlane.y, this._xyzwPlane.z, this._xyzwPlane.w);
|
|
201880
201880
|
let errors = 0;
|
|
201881
201881
|
const roots = univariateBezierB.roots(0.0, true);
|
|
@@ -201883,13 +201883,13 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201883
201883
|
for (const r of roots) {
|
|
201884
201884
|
let bezierBFraction = r;
|
|
201885
201885
|
bezierB.fractionToPoint4d(bezierBFraction, this._xyzwB);
|
|
201886
|
-
const segmentAFraction =
|
|
201886
|
+
const segmentAFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(this._xyzwA0, this._xyzwA1, this._xyzwB);
|
|
201887
201887
|
if (segmentAFraction && _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.isIn01WithTolerance(segmentAFraction, intervalTolerance)) {
|
|
201888
201888
|
let bezierAFraction = _Geometry__WEBPACK_IMPORTED_MODULE_2__.Geometry.interpolate(f0, segmentAFraction, f1);
|
|
201889
201889
|
// We have a near intersection at fractions on the two beziers
|
|
201890
201890
|
// Iterate on the curves for a true intersection
|
|
201891
|
-
const xyMatchingFunction = new
|
|
201892
|
-
const newtonSearcher = new
|
|
201891
|
+
const xyMatchingFunction = new _numerics_Newton__WEBPACK_IMPORTED_MODULE_11__.CurveCurveIntersectionXYRRToRRD(bezierA, bezierB);
|
|
201892
|
+
const newtonSearcher = new _numerics_Newton__WEBPACK_IMPORTED_MODULE_11__.Newton2dUnboundedWithDerivative(xyMatchingFunction);
|
|
201893
201893
|
newtonSearcher.setUV(bezierAFraction, bezierBFraction);
|
|
201894
201894
|
if (newtonSearcher.runIterations()) {
|
|
201895
201895
|
bezierAFraction = newtonSearcher.getU();
|
|
@@ -201917,8 +201917,8 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201917
201917
|
const rangeB = this.getRanges(bezierSpanB);
|
|
201918
201918
|
const orderA = bcurveA.order;
|
|
201919
201919
|
const orderB = bcurveB.order;
|
|
201920
|
-
const univariateCoffsA = new
|
|
201921
|
-
const univariateCoffsB = new
|
|
201920
|
+
const univariateCoffsA = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_9__.UnivariateBezier(orderA);
|
|
201921
|
+
const univariateCoffsB = new _numerics_BezierPolynomials__WEBPACK_IMPORTED_MODULE_9__.UnivariateBezier(orderB);
|
|
201922
201922
|
for (let a = 0; a < numA; a++) {
|
|
201923
201923
|
for (let b = 0; b < numB; b++) {
|
|
201924
201924
|
if (rangeA[a].intersectsRangeXY(rangeB[b])) {
|
|
@@ -201942,7 +201942,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201942
201942
|
return this._worldToLocalPerspective.multiplyPoint3d(xyz, w);
|
|
201943
201943
|
if (this._worldToLocalAffine)
|
|
201944
201944
|
return this._worldToLocalAffine.multiplyXYZW(xyz.x, xyz.y, xyz.z, w);
|
|
201945
|
-
return
|
|
201945
|
+
return _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.createFromPointAndWeight(xyz, w);
|
|
201946
201946
|
}
|
|
201947
201947
|
mapNPCPlaneToWorld(npcPlane, worldPlane) {
|
|
201948
201948
|
// for NPC pointY, Y^ * H = 0 is "on" plane H. (Hat is transpose)
|
|
@@ -201966,7 +201966,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201966
201966
|
dispatchSegmentBsplineCurve(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, bcurve, extendB0, extendB1, reversed) {
|
|
201967
201967
|
const pointA0H = this.projectPoint(pointA0);
|
|
201968
201968
|
const pointA1H = this.projectPoint(pointA1);
|
|
201969
|
-
const planeCoffs =
|
|
201969
|
+
const planeCoffs = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.createPlanePointPointZ(pointA0H, pointA1H);
|
|
201970
201970
|
this.mapNPCPlaneToWorld(planeCoffs, planeCoffs);
|
|
201971
201971
|
// NOW .. we have a plane in world space. Intersect it with the bspline:
|
|
201972
201972
|
const intersections = [];
|
|
@@ -201978,7 +201978,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
201978
201978
|
const fractionB = detail.fraction;
|
|
201979
201979
|
const curvePoint = detail.point;
|
|
201980
201980
|
const curvePointH = this.projectPoint(curvePoint);
|
|
201981
|
-
const lineFraction =
|
|
201981
|
+
const lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_5__.SmallSystem.lineSegment3dHXYClosestPointUnbounded(pointA0H, pointA1H, curvePointH);
|
|
201982
201982
|
if (lineFraction !== undefined) {
|
|
201983
201983
|
if (this.acceptFraction(extendA0, lineFraction, extendA1) && this.acceptFraction(extendB0, fractionB, extendB1)) {
|
|
201984
201984
|
this.recordPointWithLocalFractions(lineFraction, cpA, fractionA0, fractionA1, fractionB, bcurve, 0, 1, reversed);
|
|
@@ -202087,14 +202087,14 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202087
202087
|
*/
|
|
202088
202088
|
dispatchCurveCollection(geomA, geomAHandler) {
|
|
202089
202089
|
const geomB = this._geometryB; // save
|
|
202090
|
-
if (!geomB || !geomB.children || !(geomB instanceof
|
|
202090
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection))
|
|
202091
202091
|
return;
|
|
202092
202092
|
const children = geomB.children;
|
|
202093
202093
|
const extendB0 = this._extendB0; // save
|
|
202094
202094
|
const extendB1 = this._extendB1; // save
|
|
202095
202095
|
for (let i = 0; i < children.length; i++) {
|
|
202096
202096
|
this.resetGeometry(children[i]);
|
|
202097
|
-
if (geomB instanceof
|
|
202097
|
+
if (geomB instanceof _Path__WEBPACK_IMPORTED_MODULE_13__.Path && children.length > 1) {
|
|
202098
202098
|
if (i === 0)
|
|
202099
202099
|
this._extendB1 = false; // first child can only extend from start
|
|
202100
202100
|
else if (i === children.length - 1)
|
|
@@ -202102,7 +202102,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202102
202102
|
else
|
|
202103
202103
|
this._extendB0 = this._extendB1 = false; // middle children cannot extend
|
|
202104
202104
|
}
|
|
202105
|
-
else if (geomB instanceof
|
|
202105
|
+
else if (geomB instanceof _Loop__WEBPACK_IMPORTED_MODULE_14__.Loop) {
|
|
202106
202106
|
this._extendB0 = this._extendB1 = false; // Loops cannot extend
|
|
202107
202107
|
}
|
|
202108
202108
|
geomAHandler(geomA);
|
|
@@ -202116,9 +202116,9 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202116
202116
|
* We take care of extend variables of geometry's children here if geometry.path is Path or Loop.
|
|
202117
202117
|
*/
|
|
202118
202118
|
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
202119
|
-
if (!this._geometryB || !(this._geometryB instanceof
|
|
202119
|
+
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex))
|
|
202120
202120
|
return;
|
|
202121
|
-
if (geomA instanceof
|
|
202121
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex) {
|
|
202122
202122
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
202123
202123
|
return;
|
|
202124
202124
|
}
|
|
@@ -202127,7 +202127,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202127
202127
|
this.resetGeometry(geomB.path);
|
|
202128
202128
|
this.dispatchCurveCollection(geomA, geomAHandler);
|
|
202129
202129
|
this.resetGeometry(geomB); // restore
|
|
202130
|
-
this._results =
|
|
202130
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
202131
202131
|
}
|
|
202132
202132
|
/**
|
|
202133
202133
|
* Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children`.
|
|
@@ -202139,7 +202139,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202139
202139
|
const extendA1 = this._extendA1; // save
|
|
202140
202140
|
if (children)
|
|
202141
202141
|
for (let i = 0; i < children.length; i++) {
|
|
202142
|
-
if (g instanceof
|
|
202142
|
+
if (g instanceof _Path__WEBPACK_IMPORTED_MODULE_13__.Path && children.length > 1) {
|
|
202143
202143
|
if (i === 0)
|
|
202144
202144
|
this._extendA1 = false; // first child can only extend from start
|
|
202145
202145
|
else if (i === children.length - 1)
|
|
@@ -202147,7 +202147,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202147
202147
|
else
|
|
202148
202148
|
this._extendA0 = this._extendA1 = false; // middle children cannot extend
|
|
202149
202149
|
}
|
|
202150
|
-
else if (g instanceof
|
|
202150
|
+
else if (g instanceof _Loop__WEBPACK_IMPORTED_MODULE_14__.Loop) {
|
|
202151
202151
|
this._extendA0 = this._extendA1 = false; // Loops cannot extend
|
|
202152
202152
|
}
|
|
202153
202153
|
children[i].dispatchToGeometryHandler(this);
|
|
@@ -202157,90 +202157,90 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202157
202157
|
}
|
|
202158
202158
|
/** Double dispatch handler for strongly typed segment. */
|
|
202159
202159
|
handleLineSegment3d(segmentA) {
|
|
202160
|
-
if (this._geometryB instanceof
|
|
202160
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_16__.LineSegment3d) {
|
|
202161
202161
|
const segmentB = this._geometryB;
|
|
202162
202162
|
this.dispatchSegmentSegment(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, segmentB, this._extendB0, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB1, false);
|
|
202163
202163
|
}
|
|
202164
|
-
else if (this._geometryB instanceof
|
|
202164
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_17__.LineString3d) {
|
|
202165
202165
|
this.computeSegmentLineString(segmentA, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202166
202166
|
}
|
|
202167
|
-
else if (this._geometryB instanceof
|
|
202167
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_18__.Arc3d) {
|
|
202168
202168
|
this.dispatchSegmentArc(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202169
202169
|
}
|
|
202170
|
-
else if (this._geometryB instanceof
|
|
202170
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_19__.BSplineCurve3d) {
|
|
202171
202171
|
this.dispatchSegmentBsplineCurve(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202172
202172
|
}
|
|
202173
|
-
else if (this._geometryB instanceof
|
|
202173
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
202174
202174
|
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
202175
202175
|
}
|
|
202176
|
-
else if (this._geometryB instanceof
|
|
202176
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex) {
|
|
202177
202177
|
this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));
|
|
202178
202178
|
}
|
|
202179
202179
|
return undefined;
|
|
202180
202180
|
}
|
|
202181
202181
|
/** Double dispatch handler for strongly typed linestring. */
|
|
202182
202182
|
handleLineString3d(lsA) {
|
|
202183
|
-
if (this._geometryB instanceof
|
|
202183
|
+
if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_17__.LineString3d) {
|
|
202184
202184
|
const lsB = this._geometryB;
|
|
202185
202185
|
this.computeLineStringLineString(lsA, lsB, false);
|
|
202186
202186
|
}
|
|
202187
|
-
else if (this._geometryB instanceof
|
|
202187
|
+
else if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_16__.LineSegment3d) {
|
|
202188
202188
|
this.computeSegmentLineString(this._geometryB, this._extendB0, this._extendB1, lsA, this._extendA0, this._extendA1, true);
|
|
202189
202189
|
}
|
|
202190
|
-
else if (this._geometryB instanceof
|
|
202190
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_18__.Arc3d) {
|
|
202191
202191
|
this.computeArcLineString(this._geometryB, this._extendB0, this._extendB1, lsA, this._extendA0, this._extendA1, true);
|
|
202192
202192
|
}
|
|
202193
|
-
else if (this._geometryB instanceof
|
|
202193
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_19__.BSplineCurve3d) {
|
|
202194
202194
|
this.dispatchLineStringBSplineCurve(lsA, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202195
202195
|
}
|
|
202196
|
-
else if (this._geometryB instanceof
|
|
202196
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
202197
202197
|
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
202198
202198
|
}
|
|
202199
|
-
else if (this._geometryB instanceof
|
|
202199
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex) {
|
|
202200
202200
|
this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));
|
|
202201
202201
|
}
|
|
202202
202202
|
return undefined;
|
|
202203
202203
|
}
|
|
202204
202204
|
/** Double dispatch handler for strongly typed arc. */
|
|
202205
202205
|
handleArc3d(arc0) {
|
|
202206
|
-
if (this._geometryB instanceof
|
|
202206
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_16__.LineSegment3d) {
|
|
202207
202207
|
this.dispatchSegmentArc(this._geometryB, this._extendB0, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB1, arc0, this._extendA0, this._extendA1, true);
|
|
202208
202208
|
}
|
|
202209
|
-
else if (this._geometryB instanceof
|
|
202209
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_17__.LineString3d) {
|
|
202210
202210
|
this.computeArcLineString(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202211
202211
|
}
|
|
202212
|
-
else if (this._geometryB instanceof
|
|
202212
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_18__.Arc3d) {
|
|
202213
202213
|
this.dispatchArcArc(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202214
202214
|
}
|
|
202215
|
-
else if (this._geometryB instanceof
|
|
202215
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_19__.BSplineCurve3d) {
|
|
202216
202216
|
this.dispatchArcBsplineCurve3d(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
202217
202217
|
}
|
|
202218
|
-
else if (this._geometryB instanceof
|
|
202218
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
202219
202219
|
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
202220
202220
|
}
|
|
202221
|
-
else if (this._geometryB instanceof
|
|
202221
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex) {
|
|
202222
202222
|
this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));
|
|
202223
202223
|
}
|
|
202224
202224
|
return undefined;
|
|
202225
202225
|
}
|
|
202226
202226
|
/** Double dispatch handler for strongly typed bspline curve. */
|
|
202227
202227
|
handleBSplineCurve3d(curve) {
|
|
202228
|
-
if (this._geometryB instanceof
|
|
202228
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_16__.LineSegment3d) {
|
|
202229
202229
|
this.dispatchSegmentBsplineCurve(this._geometryB, this._extendB0, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
202230
202230
|
}
|
|
202231
|
-
else if (this._geometryB instanceof
|
|
202231
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_17__.LineString3d) {
|
|
202232
202232
|
this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
202233
202233
|
}
|
|
202234
|
-
else if (this._geometryB instanceof
|
|
202234
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_18__.Arc3d) {
|
|
202235
202235
|
this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
202236
202236
|
}
|
|
202237
|
-
else if (this._geometryB instanceof
|
|
202237
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_19__.BSplineCurve3dBase) {
|
|
202238
202238
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
202239
202239
|
}
|
|
202240
|
-
else if (this._geometryB instanceof
|
|
202240
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_12__.CurveCollection) {
|
|
202241
202241
|
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
202242
202242
|
}
|
|
202243
|
-
else if (this._geometryB instanceof
|
|
202243
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex) {
|
|
202244
202244
|
this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));
|
|
202245
202245
|
}
|
|
202246
202246
|
return undefined;
|
|
@@ -202249,7 +202249,7 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202249
202249
|
handleCurveChainWithDistanceIndex(chain) {
|
|
202250
202250
|
super.handleCurveChainWithDistanceIndex(chain);
|
|
202251
202251
|
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
202252
|
-
this._results =
|
|
202252
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_15__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
202253
202253
|
}
|
|
202254
202254
|
/** Double dispatch handler for strongly typed homogeneous bspline curve. */
|
|
202255
202255
|
handleBSplineCurve3dH(_curve) {
|
|
@@ -202269,19 +202269,19 @@ class CurveCurveIntersectXY extends _geometry3d_GeometryHandler__WEBPACK_IMPORTE
|
|
|
202269
202269
|
return undefined;
|
|
202270
202270
|
}
|
|
202271
202271
|
}
|
|
202272
|
-
CurveCurveIntersectXY._workVector2dA =
|
|
202273
|
-
CurveCurveIntersectXY._workPointA0H =
|
|
202274
|
-
CurveCurveIntersectXY._workPointA1H =
|
|
202275
|
-
CurveCurveIntersectXY._workPointB0H =
|
|
202276
|
-
CurveCurveIntersectXY._workPointB1H =
|
|
202277
|
-
CurveCurveIntersectXY._workPointAA0 =
|
|
202278
|
-
CurveCurveIntersectXY._workPointAA1 =
|
|
202279
|
-
CurveCurveIntersectXY._workPointBB0 =
|
|
202280
|
-
CurveCurveIntersectXY._workPointBB1 =
|
|
202281
|
-
CurveCurveIntersectXY._workPointA0 =
|
|
202282
|
-
CurveCurveIntersectXY._workPointA1 =
|
|
202283
|
-
CurveCurveIntersectXY._workPointB0 =
|
|
202284
|
-
CurveCurveIntersectXY._workPointB1 =
|
|
202272
|
+
CurveCurveIntersectXY._workVector2dA = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_20__.Vector2d.create();
|
|
202273
|
+
CurveCurveIntersectXY._workPointA0H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
202274
|
+
CurveCurveIntersectXY._workPointA1H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
202275
|
+
CurveCurveIntersectXY._workPointB0H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
202276
|
+
CurveCurveIntersectXY._workPointB1H = _geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create();
|
|
202277
|
+
CurveCurveIntersectXY._workPointAA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202278
|
+
CurveCurveIntersectXY._workPointAA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202279
|
+
CurveCurveIntersectXY._workPointBB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202280
|
+
CurveCurveIntersectXY._workPointBB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202281
|
+
CurveCurveIntersectXY._workPointA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202282
|
+
CurveCurveIntersectXY._workPointA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202283
|
+
CurveCurveIntersectXY._workPointB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202284
|
+
CurveCurveIntersectXY._workPointB1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_21__.Point3d.create();
|
|
202285
202285
|
|
|
202286
202286
|
|
|
202287
202287
|
/***/ }),
|
|
@@ -202298,21 +202298,22 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
202298
202298
|
/* harmony export */ "CurveCurveIntersectXYZ": () => (/* binding */ CurveCurveIntersectXYZ)
|
|
202299
202299
|
/* harmony export */ });
|
|
202300
202300
|
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
202301
|
-
/* harmony import */ var
|
|
202301
|
+
/* harmony import */ var _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../bspline/BSplineCurve */ "../../core/geometry/lib/esm/bspline/BSplineCurve.js");
|
|
202302
202302
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
202303
202303
|
/* harmony import */ var _geometry3d_GeometryHandler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../geometry3d/GeometryHandler */ "../../core/geometry/lib/esm/geometry3d/GeometryHandler.js");
|
|
202304
202304
|
/* harmony import */ var _geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../geometry3d/Plane3dByOriginAndUnitNormal */ "../../core/geometry/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js");
|
|
202305
|
-
/* harmony import */ var
|
|
202305
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
202306
202306
|
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
202307
|
-
/* harmony import */ var
|
|
202308
|
-
/* harmony import */ var
|
|
202309
|
-
/* harmony import */ var
|
|
202310
|
-
/* harmony import */ var
|
|
202307
|
+
/* harmony import */ var _numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../numerics/Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
202308
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
202309
|
+
/* harmony import */ var _Arc3d__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../Arc3d */ "../../core/geometry/lib/esm/curve/Arc3d.js");
|
|
202310
|
+
/* harmony import */ var _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../CurveChainWithDistanceIndex */ "../../core/geometry/lib/esm/curve/CurveChainWithDistanceIndex.js");
|
|
202311
|
+
/* harmony import */ var _CurveCollection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../CurveCollection */ "../../core/geometry/lib/esm/curve/CurveCollection.js");
|
|
202311
202312
|
/* harmony import */ var _CurveLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
202312
|
-
/* harmony import */ var
|
|
202313
|
-
/* harmony import */ var
|
|
202314
|
-
/* harmony import */ var
|
|
202315
|
-
/* harmony import */ var
|
|
202313
|
+
/* harmony import */ var _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../LineSegment3d */ "../../core/geometry/lib/esm/curve/LineSegment3d.js");
|
|
202314
|
+
/* harmony import */ var _LineString3d__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../LineString3d */ "../../core/geometry/lib/esm/curve/LineString3d.js");
|
|
202315
|
+
/* harmony import */ var _Loop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Loop */ "../../core/geometry/lib/esm/curve/Loop.js");
|
|
202316
|
+
/* harmony import */ var _Path__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Path */ "../../core/geometry/lib/esm/curve/Path.js");
|
|
202316
202317
|
/*---------------------------------------------------------------------------------------------
|
|
202317
202318
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
202318
202319
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -202336,6 +202337,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
202336
202337
|
|
|
202337
202338
|
|
|
202338
202339
|
|
|
202340
|
+
|
|
202339
202341
|
// cspell:word XYRR
|
|
202340
202342
|
/**
|
|
202341
202343
|
* Handler class for XYZ intersections between _geometryB and another geometry.
|
|
@@ -202430,7 +202432,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202430
202432
|
*/
|
|
202431
202433
|
computeSegmentSegment3D(cpA, extendA0, pointA0, fractionA0, pointA1, fractionA1, extendA1, cpB, extendB0, pointB0, fractionB0, pointB1, fractionB1, extendB1, reversed) {
|
|
202432
202434
|
const uv = CurveCurveIntersectXYZ._workVector2dA;
|
|
202433
|
-
if (
|
|
202435
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_4__.SmallSystem.lineSegment3dClosestApproachUnbounded(pointA0, pointA1, pointB0, pointB1, uv) &&
|
|
202434
202436
|
this.acceptFraction(extendA0, uv.x, extendA1) && this.acceptFraction(extendB0, uv.y, extendB1)) {
|
|
202435
202437
|
this.recordPointWithLocalFractions(uv.x, cpA, fractionA0, fractionA1, uv.y, cpB, fractionB0, fractionB1, reversed);
|
|
202436
202438
|
}
|
|
@@ -202481,7 +202483,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202481
202483
|
for (const c of candidates) {
|
|
202482
202484
|
const arcFraction = arc.sweep.fractionToSignedPeriodicFraction(c.fraction, extendB0);
|
|
202483
202485
|
if (this.acceptFraction(extendB0, arcFraction, extendB1)) {
|
|
202484
|
-
lineFraction =
|
|
202486
|
+
lineFraction = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_4__.SmallSystem.lineSegment3dClosestPointUnbounded(pointA0, pointA1, c.point);
|
|
202485
202487
|
if (lineFraction !== undefined) {
|
|
202486
202488
|
linePoint = pointA0.interpolate(lineFraction, pointA1, linePoint);
|
|
202487
202489
|
if (linePoint.isAlmostEqualMetric(c.point) && this.acceptFraction(extendA0, lineFraction, extendA1)) {
|
|
@@ -202501,7 +202503,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202501
202503
|
if (otherVectors !== undefined) {
|
|
202502
202504
|
const ellipseRadians = [];
|
|
202503
202505
|
const circleRadians = [];
|
|
202504
|
-
|
|
202506
|
+
_numerics_Polynomials__WEBPACK_IMPORTED_MODULE_7__.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);
|
|
202505
202507
|
for (let i = 0; i < ellipseRadians.length; i++) {
|
|
202506
202508
|
const fractionA = cpA.sweep.radiansToSignedFraction(circleRadians[i], extendA0);
|
|
202507
202509
|
const fractionB = cpB.sweep.radiansToSignedFraction(ellipseRadians[i], extendB0);
|
|
@@ -202932,14 +202934,14 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202932
202934
|
*/
|
|
202933
202935
|
dispatchCurveCollection(geomA, geomAHandler) {
|
|
202934
202936
|
const geomB = this._geometryB; // save
|
|
202935
|
-
if (!geomB || !geomB.children || !(geomB instanceof
|
|
202937
|
+
if (!geomB || !geomB.children || !(geomB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection))
|
|
202936
202938
|
return;
|
|
202937
202939
|
const children = geomB.children;
|
|
202938
202940
|
const extendB0 = this._extendB0; // save
|
|
202939
202941
|
const extendB1 = this._extendB1; // save
|
|
202940
202942
|
for (let i = 0; i < children.length; i++) {
|
|
202941
202943
|
this.resetGeometry(children[i]);
|
|
202942
|
-
if (geomB instanceof
|
|
202944
|
+
if (geomB instanceof _Path__WEBPACK_IMPORTED_MODULE_9__.Path && children.length > 1) {
|
|
202943
202945
|
if (i === 0)
|
|
202944
202946
|
this._extendB1 = false; // first child can only extend from start
|
|
202945
202947
|
else if (i === children.length - 1)
|
|
@@ -202947,7 +202949,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202947
202949
|
else
|
|
202948
202950
|
this._extendB0 = this._extendB1 = false; // middle children cannot extend
|
|
202949
202951
|
}
|
|
202950
|
-
else if (geomB instanceof
|
|
202952
|
+
else if (geomB instanceof _Loop__WEBPACK_IMPORTED_MODULE_10__.Loop) {
|
|
202951
202953
|
this._extendB0 = this._extendB1 = false; // Loops cannot extend
|
|
202952
202954
|
}
|
|
202953
202955
|
geomAHandler(geomA);
|
|
@@ -202961,9 +202963,9 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202961
202963
|
* We take care of extend variables of geometry's children here if geometry.path is Path or Loop.
|
|
202962
202964
|
*/
|
|
202963
202965
|
dispatchCurveChainWithDistanceIndex(geomA, geomAHandler) {
|
|
202964
|
-
if (!this._geometryB || !(this._geometryB instanceof
|
|
202966
|
+
if (!this._geometryB || !(this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex))
|
|
202965
202967
|
return;
|
|
202966
|
-
if (geomA instanceof
|
|
202968
|
+
if (geomA instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex) {
|
|
202967
202969
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "call handleCurveChainWithDistanceIndex(geomA) instead");
|
|
202968
202970
|
return;
|
|
202969
202971
|
}
|
|
@@ -202972,7 +202974,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202972
202974
|
this.resetGeometry(geomB.path);
|
|
202973
202975
|
this.dispatchCurveCollection(geomA, geomAHandler);
|
|
202974
202976
|
this.resetGeometry(geomB); // restore
|
|
202975
|
-
this._results =
|
|
202977
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, index0, undefined, geomB, true);
|
|
202976
202978
|
}
|
|
202977
202979
|
/**
|
|
202978
202980
|
* Invoke `child.dispatchToGeometryHandler(this)` for each child in the array returned by the query `g.children`.
|
|
@@ -202984,7 +202986,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202984
202986
|
const extendA1 = this._extendA1; // save
|
|
202985
202987
|
if (children)
|
|
202986
202988
|
for (let i = 0; i < children.length; i++) {
|
|
202987
|
-
if (g instanceof
|
|
202989
|
+
if (g instanceof _Path__WEBPACK_IMPORTED_MODULE_9__.Path && children.length > 1) {
|
|
202988
202990
|
if (i === 0)
|
|
202989
202991
|
this._extendA1 = false; // first child can only extend from start
|
|
202990
202992
|
else if (i === children.length - 1)
|
|
@@ -202992,7 +202994,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
202992
202994
|
else
|
|
202993
202995
|
this._extendA0 = this._extendA1 = false; // middle children cannot extend
|
|
202994
202996
|
}
|
|
202995
|
-
else if (g instanceof
|
|
202997
|
+
else if (g instanceof _Loop__WEBPACK_IMPORTED_MODULE_10__.Loop) {
|
|
202996
202998
|
this._extendA0 = this._extendA1 = false; // Loops cannot extend
|
|
202997
202999
|
}
|
|
202998
203000
|
children[i].dispatchToGeometryHandler(this);
|
|
@@ -203002,90 +203004,90 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
203002
203004
|
}
|
|
203003
203005
|
/** Double dispatch handler for strongly typed segment. */
|
|
203004
203006
|
handleLineSegment3d(segmentA) {
|
|
203005
|
-
if (this._geometryB instanceof
|
|
203007
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d) {
|
|
203006
203008
|
const segmentB = this._geometryB;
|
|
203007
203009
|
this.dispatchSegmentSegment(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, segmentB, this._extendB0, segmentB.point0Ref, 0.0, segmentB.point1Ref, 1.0, this._extendB1, false);
|
|
203008
203010
|
}
|
|
203009
|
-
else if (this._geometryB instanceof
|
|
203011
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d) {
|
|
203010
203012
|
this.computeSegmentLineString(segmentA, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203011
203013
|
}
|
|
203012
|
-
else if (this._geometryB instanceof
|
|
203014
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_14__.Arc3d) {
|
|
203013
203015
|
this.dispatchSegmentArc(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203014
203016
|
}
|
|
203015
|
-
else if (this._geometryB instanceof
|
|
203017
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_15__.BSplineCurve3d) {
|
|
203016
203018
|
this.dispatchSegmentBsplineCurve(segmentA, this._extendA0, segmentA.point0Ref, 0.0, segmentA.point1Ref, 1.0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203017
203019
|
}
|
|
203018
|
-
else if (this._geometryB instanceof
|
|
203020
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
203019
203021
|
this.dispatchCurveCollection(segmentA, this.handleLineSegment3d.bind(this));
|
|
203020
203022
|
}
|
|
203021
|
-
else if (this._geometryB instanceof
|
|
203023
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex) {
|
|
203022
203024
|
this.dispatchCurveChainWithDistanceIndex(segmentA, this.handleLineSegment3d.bind(this));
|
|
203023
203025
|
}
|
|
203024
203026
|
return undefined;
|
|
203025
203027
|
}
|
|
203026
203028
|
/** double dispatch handler for strongly typed linestring. */
|
|
203027
203029
|
handleLineString3d(lsA) {
|
|
203028
|
-
if (this._geometryB instanceof
|
|
203030
|
+
if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d) {
|
|
203029
203031
|
const lsB = this._geometryB;
|
|
203030
203032
|
this.computeLineStringLineString(lsA, lsB, false);
|
|
203031
203033
|
}
|
|
203032
|
-
else if (this._geometryB instanceof
|
|
203034
|
+
else if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d) {
|
|
203033
203035
|
this.computeSegmentLineString(this._geometryB, this._extendB0, this._extendB1, lsA, this._extendA0, this._extendA1, true);
|
|
203034
203036
|
}
|
|
203035
|
-
else if (this._geometryB instanceof
|
|
203037
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_14__.Arc3d) {
|
|
203036
203038
|
this.computeArcLineString(this._geometryB, this._extendB0, this._extendB1, lsA, this._extendA0, this._extendA1, true);
|
|
203037
203039
|
}
|
|
203038
|
-
else if (this._geometryB instanceof
|
|
203040
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_15__.BSplineCurve3d) {
|
|
203039
203041
|
this.dispatchLineStringBSplineCurve(lsA, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203040
203042
|
}
|
|
203041
|
-
else if (this._geometryB instanceof
|
|
203043
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
203042
203044
|
this.dispatchCurveCollection(lsA, this.handleLineString3d.bind(this));
|
|
203043
203045
|
}
|
|
203044
|
-
else if (this._geometryB instanceof
|
|
203046
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex) {
|
|
203045
203047
|
this.dispatchCurveChainWithDistanceIndex(lsA, this.handleLineString3d.bind(this));
|
|
203046
203048
|
}
|
|
203047
203049
|
return undefined;
|
|
203048
203050
|
}
|
|
203049
203051
|
/** Double dispatch handler for strongly typed arc. */
|
|
203050
203052
|
handleArc3d(arc0) {
|
|
203051
|
-
if (this._geometryB instanceof
|
|
203053
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d) {
|
|
203052
203054
|
this.dispatchSegmentArc(this._geometryB, this._extendB0, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB1, arc0, this._extendA0, this._extendA1, true);
|
|
203053
203055
|
}
|
|
203054
|
-
else if (this._geometryB instanceof
|
|
203056
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d) {
|
|
203055
203057
|
this.computeArcLineString(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203056
203058
|
}
|
|
203057
|
-
else if (this._geometryB instanceof
|
|
203059
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_14__.Arc3d) {
|
|
203058
203060
|
this.dispatchArcArc(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203059
203061
|
}
|
|
203060
|
-
else if (this._geometryB instanceof
|
|
203062
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_15__.BSplineCurve3d) {
|
|
203061
203063
|
this.dispatchArcBsplineCurve3d(arc0, this._extendA0, this._extendA1, this._geometryB, this._extendB0, this._extendB1, false);
|
|
203062
203064
|
}
|
|
203063
|
-
else if (this._geometryB instanceof
|
|
203065
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
203064
203066
|
this.dispatchCurveCollection(arc0, this.handleArc3d.bind(this));
|
|
203065
203067
|
}
|
|
203066
|
-
else if (this._geometryB instanceof
|
|
203068
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex) {
|
|
203067
203069
|
this.dispatchCurveChainWithDistanceIndex(arc0, this.handleArc3d.bind(this));
|
|
203068
203070
|
}
|
|
203069
203071
|
return undefined;
|
|
203070
203072
|
}
|
|
203071
203073
|
/** Double dispatch handler for strongly typed bspline curve. */
|
|
203072
203074
|
handleBSplineCurve3d(curve) {
|
|
203073
|
-
if (this._geometryB instanceof
|
|
203075
|
+
if (this._geometryB instanceof _LineSegment3d__WEBPACK_IMPORTED_MODULE_12__.LineSegment3d) {
|
|
203074
203076
|
this.dispatchSegmentBsplineCurve(this._geometryB, this._extendB0, this._geometryB.point0Ref, 0.0, this._geometryB.point1Ref, 1.0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
203075
203077
|
}
|
|
203076
|
-
else if (this._geometryB instanceof
|
|
203078
|
+
else if (this._geometryB instanceof _LineString3d__WEBPACK_IMPORTED_MODULE_13__.LineString3d) {
|
|
203077
203079
|
this.dispatchLineStringBSplineCurve(this._geometryB, this._extendB0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
203078
203080
|
}
|
|
203079
|
-
else if (this._geometryB instanceof
|
|
203081
|
+
else if (this._geometryB instanceof _Arc3d__WEBPACK_IMPORTED_MODULE_14__.Arc3d) {
|
|
203080
203082
|
this.dispatchArcBsplineCurve3d(this._geometryB, this._extendB0, this._extendB1, curve, this._extendA0, this._extendA1, true);
|
|
203081
203083
|
}
|
|
203082
|
-
else if (this._geometryB instanceof
|
|
203084
|
+
else if (this._geometryB instanceof _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_15__.BSplineCurve3dBase) {
|
|
203083
203085
|
this.dispatchBSplineCurve3dBSplineCurve3d(curve, this._geometryB, false);
|
|
203084
203086
|
}
|
|
203085
|
-
else if (this._geometryB instanceof
|
|
203087
|
+
else if (this._geometryB instanceof _CurveCollection__WEBPACK_IMPORTED_MODULE_8__.CurveCollection) {
|
|
203086
203088
|
this.dispatchCurveCollection(curve, this.handleBSplineCurve3d.bind(this));
|
|
203087
203089
|
}
|
|
203088
|
-
else if (this._geometryB instanceof
|
|
203090
|
+
else if (this._geometryB instanceof _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex) {
|
|
203089
203091
|
this.dispatchCurveChainWithDistanceIndex(curve, this.handleBSplineCurve3d.bind(this));
|
|
203090
203092
|
}
|
|
203091
203093
|
return undefined;
|
|
@@ -203094,7 +203096,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
203094
203096
|
handleCurveChainWithDistanceIndex(chain) {
|
|
203095
203097
|
super.handleCurveChainWithDistanceIndex(chain);
|
|
203096
203098
|
// if _geometryB is also a CurveChainWithDistanceIndex, it will already have been converted by dispatchCurveChainWithDistanceIndex
|
|
203097
|
-
this._results =
|
|
203099
|
+
this._results = _CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_11__.CurveChainWithDistanceIndex.convertChildDetailToChainDetail(this._results, 0, chain, undefined, true);
|
|
203098
203100
|
}
|
|
203099
203101
|
/** Double dispatch handler for strongly typed homogeneous bspline curve. */
|
|
203100
203102
|
handleBSplineCurve3dH(_curve) {
|
|
@@ -203119,7 +203121,7 @@ class CurveCurveIntersectXYZ extends _geometry3d_GeometryHandler__WEBPACK_IMPORT
|
|
|
203119
203121
|
return undefined;
|
|
203120
203122
|
}
|
|
203121
203123
|
}
|
|
203122
|
-
CurveCurveIntersectXYZ._workVector2dA =
|
|
203124
|
+
CurveCurveIntersectXYZ._workVector2dA = _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_16__.Vector2d.create();
|
|
203123
203125
|
CurveCurveIntersectXYZ._workPointAA0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
203124
203126
|
CurveCurveIntersectXYZ._workPointAA1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
203125
203127
|
CurveCurveIntersectXYZ._workPointBB0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_6__.Point3d.create();
|
|
@@ -210018,7 +210020,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
210018
210020
|
/* harmony import */ var _bspline_SurfaceLocationDetail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../bspline/SurfaceLocationDetail */ "../../core/geometry/lib/esm/bspline/SurfaceLocationDetail.js");
|
|
210019
210021
|
/* harmony import */ var _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../curve/CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
210020
210022
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
210021
|
-
/* harmony import */ var
|
|
210023
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
210022
210024
|
/* harmony import */ var _Plane3dByOriginAndVectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Plane3dByOriginAndVectors */ "../../core/geometry/lib/esm/geometry3d/Plane3dByOriginAndVectors.js");
|
|
210023
210025
|
/* harmony import */ var _Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
210024
210026
|
/*---------------------------------------------------------------------------------------------
|
|
@@ -210193,9 +210195,9 @@ class BilinearPatch {
|
|
|
210193
210195
|
// swap rows so that the equation with largest ray.direction coefficient is first.
|
|
210194
210196
|
BilinearPatch.conditionalPivot(0, coffs, 0, 1);
|
|
210195
210197
|
BilinearPatch.conditionalPivot(0, coffs, 0, 2);
|
|
210196
|
-
|
|
210197
|
-
|
|
210198
|
-
const uvArray =
|
|
210198
|
+
_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_2__.SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[1], -1.0);
|
|
210199
|
+
_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_2__.SmallSystem.eliminateFromPivot(coffs[0], 0, coffs[2], -1.0);
|
|
210200
|
+
const uvArray = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_2__.SmallSystem.solveBilinearPair(coffs[1][1], coffs[1][2], coffs[1][3], coffs[1][4], coffs[2][1], coffs[2][2], coffs[2][3], coffs[2][4]);
|
|
210199
210201
|
if (uvArray) {
|
|
210200
210202
|
const result = [];
|
|
210201
210203
|
for (const uv of uvArray) {
|
|
@@ -227158,7 +227160,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
227158
227160
|
/* harmony export */ });
|
|
227159
227161
|
/* harmony import */ var _curve_CurveLocationDetail__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../curve/CurveLocationDetail */ "../../core/geometry/lib/esm/curve/CurveLocationDetail.js");
|
|
227160
227162
|
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
227161
|
-
/* harmony import */ var
|
|
227163
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
227162
227164
|
/* harmony import */ var _Matrix3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Matrix3d */ "../../core/geometry/lib/esm/geometry3d/Matrix3d.js");
|
|
227163
227165
|
/* harmony import */ var _Point2dVector2d__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
227164
227166
|
/* harmony import */ var _Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
@@ -227630,7 +227632,7 @@ class Ray3d {
|
|
|
227630
227632
|
let fractionA, fractionB;
|
|
227631
227633
|
let pointA, pointB;
|
|
227632
227634
|
let pairType;
|
|
227633
|
-
if (
|
|
227635
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_6__.SmallSystem.ray3dXYZUVWClosestApproachUnbounded(rayA.origin.x, rayA.origin.y, rayA.origin.z, rayA.direction.x, rayA.direction.y, rayA.direction.z, rayB.origin.x, rayB.origin.y, rayB.origin.z, rayB.direction.x, rayB.direction.y, rayB.direction.z, intersectionFractions)) {
|
|
227634
227636
|
fractionA = intersectionFractions.x;
|
|
227635
227637
|
fractionB = intersectionFractions.y;
|
|
227636
227638
|
pointA = rayA.fractionToPoint(fractionA);
|
|
@@ -233954,14 +233956,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
233954
233956
|
/* harmony import */ var _geometry3d_Plane3dByOriginAndVectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry3d/Plane3dByOriginAndVectors */ "../../core/geometry/lib/esm/geometry3d/Plane3dByOriginAndVectors.js");
|
|
233955
233957
|
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
233956
233958
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
233957
|
-
/* harmony import */ var
|
|
233959
|
+
/* harmony import */ var _SmallSystem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
233958
233960
|
/*---------------------------------------------------------------------------------------------
|
|
233959
233961
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
233960
233962
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
233961
233963
|
*--------------------------------------------------------------------------------------------*/
|
|
233962
|
-
/** @packageDocumentation
|
|
233963
|
-
* @module Numerics
|
|
233964
|
-
*/
|
|
233965
233964
|
|
|
233966
233965
|
|
|
233967
233966
|
|
|
@@ -234210,7 +234209,7 @@ class Newton2dUnboundedWithDerivative extends AbstractNewtonIterator {
|
|
|
234210
234209
|
const jCol1 = fA.vectorV;
|
|
234211
234210
|
const fX = fA.origin;
|
|
234212
234211
|
// Given X_{n+1} = X_n - dX = X_n - JInv(X_n) F(X_n), we solve J(X_n) dX = F(X_n) for dX:
|
|
234213
|
-
if (
|
|
234212
|
+
if (_SmallSystem__WEBPACK_IMPORTED_MODULE_3__.SmallSystem.linearSystem2d(jCol0.x, jCol1.x, jCol0.y, jCol1.y, fX.x, fX.y, this._currentStep))
|
|
234214
234213
|
return true;
|
|
234215
234214
|
return false;
|
|
234216
234215
|
}
|
|
@@ -234487,19 +234486,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
234487
234486
|
/* harmony export */ "ImplicitLineXY": () => (/* binding */ ImplicitLineXY),
|
|
234488
234487
|
/* harmony export */ "PowerPolynomial": () => (/* binding */ PowerPolynomial),
|
|
234489
234488
|
/* harmony export */ "SineCosinePolynomial": () => (/* binding */ SineCosinePolynomial),
|
|
234490
|
-
/* harmony export */ "SmallSystem": () => (/* binding */ SmallSystem),
|
|
234491
234489
|
/* harmony export */ "SphereImplicit": () => (/* binding */ SphereImplicit),
|
|
234492
234490
|
/* harmony export */ "TorusImplicit": () => (/* binding */ TorusImplicit),
|
|
234493
234491
|
/* harmony export */ "TrigPolynomial": () => (/* binding */ TrigPolynomial)
|
|
234494
234492
|
/* harmony export */ });
|
|
234495
|
-
/* harmony import */ var
|
|
234496
|
-
/* harmony import */ var
|
|
234497
|
-
/* harmony import */ var
|
|
234498
|
-
/* harmony import */ var
|
|
234499
|
-
/* harmony import */ var
|
|
234500
|
-
/* harmony import */ var
|
|
234501
|
-
/* harmony import */ var
|
|
234502
|
-
/* harmony import */ var
|
|
234493
|
+
/* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
|
|
234494
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
234495
|
+
/* harmony import */ var _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../geometry3d/Angle */ "../../core/geometry/lib/esm/geometry3d/Angle.js");
|
|
234496
|
+
/* harmony import */ var _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometry3d/AngleSweep */ "../../core/geometry/lib/esm/geometry3d/AngleSweep.js");
|
|
234497
|
+
/* harmony import */ var _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../geometry3d/GrowableFloat64Array */ "../../core/geometry/lib/esm/geometry3d/GrowableFloat64Array.js");
|
|
234498
|
+
/* harmony import */ var _geometry3d_LongitudeLatitudeAltitude__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../geometry3d/LongitudeLatitudeAltitude */ "../../core/geometry/lib/esm/geometry3d/LongitudeLatitudeAltitude.js");
|
|
234499
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
234500
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
234501
|
+
/* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
|
|
234503
234502
|
/*---------------------------------------------------------------------------------------------
|
|
234504
234503
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
234505
234504
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -234515,9 +234514,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
234515
234514
|
|
|
234516
234515
|
|
|
234517
234516
|
|
|
234518
|
-
|
|
234519
|
-
// cspell:
|
|
234520
|
-
/* eslint-disable @typescript-eslint/naming-convention */
|
|
234517
|
+
|
|
234518
|
+
// cspell:words Cardano internaldocs
|
|
234521
234519
|
/**
|
|
234522
234520
|
* degree 2 (quadratic) polynomial in for y = c0 + c1*x + c2*x^2
|
|
234523
234521
|
* @internal
|
|
@@ -234532,8 +234530,8 @@ class Degree2PowerPolynomial {
|
|
|
234532
234530
|
* @returns 0, 1, or 2 solutions of the usual quadratic (a*x*x + b * x + c = 0)
|
|
234533
234531
|
*/
|
|
234534
234532
|
static solveQuadratic(a, b, c) {
|
|
234535
|
-
const b1 =
|
|
234536
|
-
const c1 =
|
|
234533
|
+
const b1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(b, a);
|
|
234534
|
+
const c1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(c, a);
|
|
234537
234535
|
if (b1 !== undefined && c1 !== undefined) {
|
|
234538
234536
|
// now solving xx + b1*x + c1 = 0 -- i.e. implied "a" coefficient is 1 . .
|
|
234539
234537
|
const q = b1 * b1 - 4 * c1;
|
|
@@ -234548,7 +234546,7 @@ class Degree2PowerPolynomial {
|
|
|
234548
234546
|
return [root, root];
|
|
234549
234547
|
}
|
|
234550
234548
|
// "divide by a" failed. solve bx + c = 0
|
|
234551
|
-
const x =
|
|
234549
|
+
const x = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(-c, b);
|
|
234552
234550
|
if (x !== undefined)
|
|
234553
234551
|
return [x];
|
|
234554
234552
|
return undefined;
|
|
@@ -234588,7 +234586,7 @@ class Degree2PowerPolynomial {
|
|
|
234588
234586
|
}
|
|
234589
234587
|
/** Factor the polynomial in to the form `y0 + c * (x-x0)^2)`, i.e. complete the square. */
|
|
234590
234588
|
tryGetVertexFactorization() {
|
|
234591
|
-
const x =
|
|
234589
|
+
const x = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(-this.coffs[1], 2.0 * this.coffs[2]);
|
|
234592
234590
|
if (x !== undefined) {
|
|
234593
234591
|
const y = this.evaluate(x);
|
|
234594
234592
|
return { c: this.coffs[2], x0: x, y0: y };
|
|
@@ -234729,7 +234727,7 @@ class TorusImplicit {
|
|
|
234729
234727
|
// theta=0 point
|
|
234730
234728
|
const x0 = this.majorRadius + this.minorRadius * Math.cos(phiRadians);
|
|
234731
234729
|
const z0 = this.minorRadius * Math.sin(phiRadians);
|
|
234732
|
-
return
|
|
234730
|
+
return _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(c * x0, s * x0, z0);
|
|
234733
234731
|
}
|
|
234734
234732
|
/** Evaluate partial derivatives at angles (int radians) on major and minor circles. */
|
|
234735
234733
|
evaluateDerivativesThetaPhi(thetaRadians, phiRadians, dxdTheta, dxdPhi) {
|
|
@@ -234738,8 +234736,8 @@ class TorusImplicit {
|
|
|
234738
234736
|
const bx = this.minorRadius * Math.cos(phiRadians);
|
|
234739
234737
|
const bz = this.minorRadius * Math.sin(phiRadians);
|
|
234740
234738
|
const x0 = this.majorRadius + bx;
|
|
234741
|
-
|
|
234742
|
-
|
|
234739
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.create(-x0 * sTheta, x0 * cTheta, 0.0, dxdTheta);
|
|
234740
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.create(-cTheta * bz, -sTheta * bz, bx, dxdPhi);
|
|
234743
234741
|
}
|
|
234744
234742
|
/** Evaluate space point at major and minor angles (in radians) and distance from major hoop. */
|
|
234745
234743
|
evaluateThetaPhiDistance(thetaRadians, phiRadians, distance) {
|
|
@@ -234748,7 +234746,7 @@ class TorusImplicit {
|
|
|
234748
234746
|
// theta=0 point
|
|
234749
234747
|
const x0 = this.majorRadius + distance * Math.cos(phiRadians);
|
|
234750
234748
|
const z0 = distance * Math.sin(phiRadians);
|
|
234751
|
-
return
|
|
234749
|
+
return _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(c * x0, s * x0, z0);
|
|
234752
234750
|
}
|
|
234753
234751
|
/** Given an xyz coordinate in the local system of the toroid, compute the torus parametrization
|
|
234754
234752
|
* * theta = angular coordinate in xy plane
|
|
@@ -234760,19 +234758,19 @@ class TorusImplicit {
|
|
|
234760
234758
|
*/
|
|
234761
234759
|
xyzToThetaPhiDistance(xyz) {
|
|
234762
234760
|
const rho = xyz.magnitudeXY();
|
|
234763
|
-
const majorRadiusFactor =
|
|
234761
|
+
const majorRadiusFactor = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(this.majorRadius, rho);
|
|
234764
234762
|
let safeMajor;
|
|
234765
234763
|
let majorCirclePoint;
|
|
234766
234764
|
if (majorRadiusFactor) {
|
|
234767
234765
|
safeMajor = true;
|
|
234768
|
-
majorCirclePoint =
|
|
234766
|
+
majorCirclePoint = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(majorRadiusFactor * xyz.x, majorRadiusFactor * xyz.y, 0.0);
|
|
234769
234767
|
}
|
|
234770
234768
|
else {
|
|
234771
234769
|
safeMajor = false;
|
|
234772
|
-
majorCirclePoint =
|
|
234770
|
+
majorCirclePoint = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(xyz.x, xyz.y, 0.0);
|
|
234773
234771
|
}
|
|
234774
234772
|
const theta = safeMajor ? Math.atan2(xyz.y, xyz.x) : 0.0;
|
|
234775
|
-
const vectorFromMajorCircle =
|
|
234773
|
+
const vectorFromMajorCircle = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(majorCirclePoint, xyz);
|
|
234776
234774
|
const distance = vectorFromMajorCircle.magnitude();
|
|
234777
234775
|
const dRho = rho - this.majorRadius;
|
|
234778
234776
|
let safePhi;
|
|
@@ -234836,10 +234834,10 @@ class SphereImplicit {
|
|
|
234836
234834
|
}
|
|
234837
234835
|
/** Return the range of a uv-aligned patch of the sphere. */
|
|
234838
234836
|
static patchRangeStartEndRadians(center, radius, theta0Radians, theta1Radians, phi0Radians, phi1Radians, result) {
|
|
234839
|
-
const thetaSweep =
|
|
234840
|
-
const phiSweep =
|
|
234841
|
-
const range =
|
|
234842
|
-
const xyz =
|
|
234837
|
+
const thetaSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_3__.AngleSweep.createStartEndRadians(theta0Radians, theta1Radians);
|
|
234838
|
+
const phiSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_3__.AngleSweep.createStartEndRadians(phi0Radians, phi1Radians);
|
|
234839
|
+
const range = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createNull(result);
|
|
234840
|
+
const xyz = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create();
|
|
234843
234841
|
if (thetaSweep.isFullCircle && phiSweep.isFullLatitudeSweep) {
|
|
234844
234842
|
// full sphere, no trimming -- build directly
|
|
234845
234843
|
range.extendPoint(center);
|
|
@@ -234867,7 +234865,7 @@ class SphereImplicit {
|
|
|
234867
234865
|
}
|
|
234868
234866
|
// 4 boundary curves, each with 3 components ...
|
|
234869
234867
|
// BUT: phi should not extend beyond poles. Hence z extremes on constant theta curve will never be different from z of constant phi curve or of poles as tested above.
|
|
234870
|
-
const axisRange =
|
|
234868
|
+
const axisRange = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createNull();
|
|
234871
234869
|
const cosPhi0 = Math.cos(phi0Radians);
|
|
234872
234870
|
const cosPhi1 = Math.cos(phi1Radians);
|
|
234873
234871
|
const sinPhi0 = Math.sin(phi0Radians);
|
|
@@ -234918,9 +234916,9 @@ class SphereImplicit {
|
|
|
234918
234916
|
const ux = ray.direction.x;
|
|
234919
234917
|
const uy = ray.direction.y;
|
|
234920
234918
|
const uz = ray.direction.z;
|
|
234921
|
-
const a0 =
|
|
234922
|
-
const a1 = 2.0 *
|
|
234923
|
-
const a2 =
|
|
234919
|
+
const a0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseSquaredXYZ(vx, vy, vz) - radius * radius;
|
|
234920
|
+
const a1 = 2.0 * _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.dotProductXYZXYZ(ux, uy, uz, vx, vy, vz);
|
|
234921
|
+
const a2 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseSquaredXYZ(ux, uy, uz);
|
|
234924
234922
|
const parameters = Degree2PowerPolynomial.solveQuadratic(a2, a1, a0);
|
|
234925
234923
|
if (rayFractions !== undefined)
|
|
234926
234924
|
rayFractions.length = 0;
|
|
@@ -234942,7 +234940,7 @@ class SphereImplicit {
|
|
|
234942
234940
|
xyz.push(point);
|
|
234943
234941
|
if (thetaPhiRadians !== undefined) {
|
|
234944
234942
|
const data = sphere.xyzToThetaPhiR(point);
|
|
234945
|
-
thetaPhiRadians.push(
|
|
234943
|
+
thetaPhiRadians.push(_geometry3d_LongitudeLatitudeAltitude__WEBPACK_IMPORTED_MODULE_5__.LongitudeLatitudeNumber.createRadians(data.thetaRadians, data.phiRadians));
|
|
234946
234944
|
}
|
|
234947
234945
|
}
|
|
234948
234946
|
}
|
|
@@ -234976,7 +234974,7 @@ class SphereImplicit {
|
|
|
234976
234974
|
const rs = this.radius * Math.sin(thetaRadians);
|
|
234977
234975
|
const cosPhi = Math.cos(phiRadians);
|
|
234978
234976
|
const sinPhi = Math.sin(phiRadians);
|
|
234979
|
-
return
|
|
234977
|
+
return _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(rc * cosPhi, rs * cosPhi, this.radius * sinPhi, result);
|
|
234980
234978
|
}
|
|
234981
234979
|
/**
|
|
234982
234980
|
* * convert radians to xyz on unit sphere
|
|
@@ -235001,8 +234999,8 @@ class SphereImplicit {
|
|
|
235001
234999
|
const rs = this.radius * Math.sin(thetaRadians);
|
|
235002
235000
|
const cosPhi = Math.cos(phiRadians);
|
|
235003
235001
|
const sinPhi = Math.sin(phiRadians);
|
|
235004
|
-
|
|
235005
|
-
|
|
235002
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.create(-rs * cosPhi, rc * cosPhi, 0.0, dxdTheta);
|
|
235003
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.create(-rc * sinPhi, -rs * sinPhi, this.radius * cosPhi, dxdPhi);
|
|
235006
235004
|
}
|
|
235007
235005
|
}
|
|
235008
235006
|
/** AnalyticRoots has static methods for solving quadratic, cubic, and quartic equations.
|
|
@@ -235131,7 +235129,7 @@ class AnalyticRoots {
|
|
|
235131
235129
|
* @param values array to expand
|
|
235132
235130
|
*/
|
|
235133
235131
|
static appendLinearRoot(c0, c1, values) {
|
|
235134
|
-
AnalyticRoots.appendSolution(
|
|
235132
|
+
AnalyticRoots.appendSolution(_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(-c0, c1), values);
|
|
235135
235133
|
}
|
|
235136
235134
|
/**
|
|
235137
235135
|
* * Compute the mean of all the entries in `data`
|
|
@@ -235162,7 +235160,7 @@ class AnalyticRoots {
|
|
|
235162
235160
|
*/
|
|
235163
235161
|
static appendQuadraticRoots(c, values) {
|
|
235164
235162
|
// Normal form: x^2 + 2px + q = 0
|
|
235165
|
-
const divFactor =
|
|
235163
|
+
const divFactor = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(1.0, c[2]);
|
|
235166
235164
|
if (!divFactor) {
|
|
235167
235165
|
this.appendLinearRoot(c[0], c[1], values);
|
|
235168
235166
|
return;
|
|
@@ -235178,8 +235176,8 @@ class AnalyticRoots {
|
|
|
235178
235176
|
return;
|
|
235179
235177
|
}
|
|
235180
235178
|
else if (D > 0) {
|
|
235181
|
-
const
|
|
235182
|
-
this.append2Solutions(
|
|
235179
|
+
const sqrtD = Math.sqrt(D);
|
|
235180
|
+
this.append2Solutions(sqrtD - p, -sqrtD - p, values);
|
|
235183
235181
|
return;
|
|
235184
235182
|
}
|
|
235185
235183
|
return;
|
|
@@ -235245,7 +235243,7 @@ class AnalyticRoots {
|
|
|
235245
235243
|
*/
|
|
235246
235244
|
/*
|
|
235247
235245
|
private static _appendCubicRootsUnsorted(c: Float64Array | number[], results: GrowableFloat64Array) {
|
|
235248
|
-
let
|
|
235246
|
+
let AA: number;
|
|
235249
235247
|
let p: number;
|
|
235250
235248
|
let q: number;
|
|
235251
235249
|
|
|
@@ -235266,9 +235264,9 @@ class AnalyticRoots {
|
|
|
235266
235264
|
// f' = 3y^2 + p
|
|
235267
235265
|
// local min/max at Y = +-sqrt (-p)
|
|
235268
235266
|
// f(+Y) = -p sqrt(-p) + 3p sqrt (-p) + 2q = 2 p sqrt (-p) + 2q
|
|
235269
|
-
|
|
235270
|
-
p = (3.0 * B -
|
|
235271
|
-
q = 1.0 / 2 * (2.0 / 27 * A *
|
|
235267
|
+
AA = A * A;
|
|
235268
|
+
p = (3.0 * B - AA) / 9.0;
|
|
235269
|
+
q = 1.0 / 2 * (2.0 / 27 * A * AA - 1.0 / 3 * A * B + C);
|
|
235272
235270
|
|
|
235273
235271
|
// Use Cardano formula
|
|
235274
235272
|
const cb_p: number = p * p * p;
|
|
@@ -235306,9 +235304,9 @@ class AnalyticRoots {
|
|
|
235306
235304
|
|
|
235307
235305
|
return;
|
|
235308
235306
|
} else { // One real solution
|
|
235309
|
-
const
|
|
235310
|
-
const u = this.cbrt(
|
|
235311
|
-
const v = -(this.cbrt(
|
|
235307
|
+
const sqrtD = Math.sqrt(D);
|
|
235308
|
+
const u = this.cbrt(sqrtD - q);
|
|
235309
|
+
const v = -(this.cbrt(sqrtD + q));
|
|
235312
235310
|
results.push(origin + u + v);
|
|
235313
235311
|
this.improveRoots(c, 3, results, false);
|
|
235314
235312
|
return;
|
|
@@ -235317,7 +235315,7 @@ class AnalyticRoots {
|
|
|
235317
235315
|
*/
|
|
235318
235316
|
/** Compute roots of cubic 'c[0] + c[1] * x + c[2] * x^2 + c[3] * x^3 */
|
|
235319
235317
|
static appendCubicRoots(c, results) {
|
|
235320
|
-
if (
|
|
235318
|
+
if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideCoordinate(1.0, c[3]) !== undefined) {
|
|
235321
235319
|
this.appendFullCubicSolutions(c[3], c[2], c[1], c[0], results);
|
|
235322
235320
|
// EDL April 5, 2020 replace classic GraphicsGems solver by RWDNickalls.
|
|
235323
235321
|
// Don't know if improveRoots is needed.
|
|
@@ -235349,11 +235347,11 @@ class AnalyticRoots {
|
|
|
235349
235347
|
const D = c[0] * coffScale[0];
|
|
235350
235348
|
const origin = -0.25 * A;
|
|
235351
235349
|
// substitute x = y - A/4 to eliminate cubic term: y^4 + py^2 + qy + r = 0
|
|
235352
|
-
const
|
|
235353
|
-
const p = -0.375 *
|
|
235354
|
-
const q = 0.125 *
|
|
235355
|
-
const r = -0.01171875 *
|
|
235356
|
-
const cubicSolutions = new
|
|
235350
|
+
const AA = A * A;
|
|
235351
|
+
const p = -0.375 * AA + B;
|
|
235352
|
+
const q = 0.125 * AA * A - 0.5 * A * B + C;
|
|
235353
|
+
const r = -0.01171875 * AA * AA + 0.0625 * AA * B - 0.25 * A * C + D;
|
|
235354
|
+
const cubicSolutions = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array();
|
|
235357
235355
|
if (this.isZero(r)) { // no absolute term: y(y^3 + py + q) = 0
|
|
235358
235356
|
coffs[0] = q;
|
|
235359
235357
|
coffs[1] = p;
|
|
@@ -235531,17 +235529,16 @@ class PowerPolynomial {
|
|
|
235531
235529
|
*/
|
|
235532
235530
|
class TrigPolynomial {
|
|
235533
235531
|
/**
|
|
235534
|
-
*
|
|
235535
|
-
*
|
|
235536
|
-
*
|
|
235537
|
-
* *
|
|
235538
|
-
* (
|
|
235539
|
-
*
|
|
235540
|
-
* @param
|
|
235541
|
-
*
|
|
235542
|
-
*
|
|
235543
|
-
*
|
|
235544
|
-
* stages of computation. A small fraction of this will be used as a zero tolerance
|
|
235532
|
+
* Find the roots of a univariate polynomial created from substituting the rational parameterization of the unit
|
|
235533
|
+
* circle into a trigonometric polynomial. Roots are returned as radian angles.
|
|
235534
|
+
* * Currently implemented for polynomials of degree <= 4.
|
|
235535
|
+
* * For example, the ellipse-ellipse intersection problem reduces to finding the roots of a quartic polynomial:
|
|
235536
|
+
* `p(t) = coff[0] + coff[1] t + coff[2] t^2 + coff[3] t^3 + coff[4] t^4`.
|
|
235537
|
+
* * Particular care is given to report a root at t = +/-infinity, which corresponds to the returned angle -pi/2.
|
|
235538
|
+
* @param coff coefficients in the power basis
|
|
235539
|
+
* @param nominalDegree degree of the polynomial under the most complex root case.
|
|
235540
|
+
* @param referenceCoefficient a number which represents the size of coefficients at various stages of computation.
|
|
235541
|
+
* A small fraction of this number will be used as a zero tolerance.
|
|
235545
235542
|
* @param radians roots are placed here.
|
|
235546
235543
|
* @return false if equation is all zeros. This usually means any angle is a solution.
|
|
235547
235544
|
*/
|
|
@@ -235559,7 +235556,7 @@ class TrigPolynomial {
|
|
|
235559
235556
|
let degree = nominalDegree;
|
|
235560
235557
|
while (degree > 0 && (Math.abs(coff[degree]) <= coffTol))
|
|
235561
235558
|
degree--;
|
|
235562
|
-
const roots = new
|
|
235559
|
+
const roots = new _geometry3d_GrowableFloat64Array__WEBPACK_IMPORTED_MODULE_6__.GrowableFloat64Array();
|
|
235563
235560
|
if (degree === -1) {
|
|
235564
235561
|
// do nothing
|
|
235565
235562
|
}
|
|
@@ -235581,41 +235578,42 @@ class TrigPolynomial {
|
|
|
235581
235578
|
}
|
|
235582
235579
|
else {
|
|
235583
235580
|
// TODO: WORK WITH BEZIER SOLVER
|
|
235581
|
+
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(false, "Unimplemented degree in trig solver");
|
|
235584
235582
|
}
|
|
235585
235583
|
if (roots.length > 0) {
|
|
235586
|
-
//
|
|
235587
|
-
//
|
|
235584
|
+
// each solution t represents an angle with Math.Cos(theta) = C(t)/W(t) and sin(theta) = S(t)/W(t)
|
|
235585
|
+
// division by W has no effect on atan2 calculations, so we just compute S(t),C(t)
|
|
235588
235586
|
for (let i = 0; i < roots.length; i++) {
|
|
235589
235587
|
const ss = PowerPolynomial.evaluate(this.S, roots.atUncheckedIndex(i));
|
|
235590
235588
|
const cc = PowerPolynomial.evaluate(this.C, roots.atUncheckedIndex(i));
|
|
235591
235589
|
radians.push(Math.atan2(ss, cc));
|
|
235592
235590
|
}
|
|
235593
|
-
// each leading zero at the front of the coefficient array corresponds to a root at -PI/2.
|
|
235594
|
-
// only make one entry because we don't report multiplicity.
|
|
235595
|
-
if (degree < nominalDegree)
|
|
235596
|
-
radians.push(-0.5 * Math.PI);
|
|
235597
235591
|
}
|
|
235592
|
+
// If the tail of the coff array is zero, we solved a polynomial of lesser degree above, and
|
|
235593
|
+
// we report the skipped "root at infinity" as the corresponding angle -pi/2 (without multiplicity).
|
|
235594
|
+
// See core\geometry\internaldocs\unitCircleEllipseIntersection.md for details.
|
|
235595
|
+
if (degree < nominalDegree)
|
|
235596
|
+
radians.push(-0.5 * Math.PI);
|
|
235598
235597
|
}
|
|
235599
235598
|
return radians.length > 0;
|
|
235600
235599
|
}
|
|
235601
235600
|
/**
|
|
235602
|
-
* Compute intersections of unit circle `x^2 + y^2 = 1` with general quadric
|
|
235603
|
-
* `axx
|
|
235604
|
-
* Solutions are returned as angles. Sine and Cosine of the angles are the x, y results.
|
|
235601
|
+
* Compute intersections of the unit circle `x^2 + y^2 = 1` with the general quadric (conic)
|
|
235602
|
+
* `axx x^2 + axy xy + ayy y^2 + ax x + ay y + a = 0`.
|
|
235605
235603
|
* @param axx coefficient of x^2
|
|
235606
235604
|
* @param axy coefficient of xy
|
|
235607
235605
|
* @param ayy coefficient of y^2
|
|
235608
235606
|
* @param ax coefficient of x
|
|
235609
235607
|
* @param ay coefficient of y
|
|
235610
235608
|
* @param a constant coefficient
|
|
235611
|
-
* @param radians solution angles
|
|
235609
|
+
* @param radians up to 4 solution angles t in the quadric parameterization: x = cos(t), y = sin(t)
|
|
235612
235610
|
*/
|
|
235613
235611
|
static solveUnitCircleImplicitQuadricIntersection(axx, axy, ayy, ax, ay, a, radians) {
|
|
235614
235612
|
const coffs = new Float64Array(5);
|
|
235615
235613
|
PowerPolynomial.zero(coffs);
|
|
235616
235614
|
let degree;
|
|
235617
235615
|
// see core\geometry\internaldocs\unitCircleEllipseIntersection.md for derivation of these coefficients
|
|
235618
|
-
if (
|
|
235616
|
+
if (_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXYZ(axx, axy, ayy) > TrigPolynomial._coefficientRelTol * _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXYZ(ax, ay, a)) {
|
|
235619
235617
|
PowerPolynomial.accumulate(coffs, this.CW, ax);
|
|
235620
235618
|
PowerPolynomial.accumulate(coffs, this.SW, ay);
|
|
235621
235619
|
PowerPolynomial.accumulate(coffs, this.WW, a);
|
|
@@ -235663,9 +235661,9 @@ class TrigPolynomial {
|
|
|
235663
235661
|
const acs = 2.0 * (ux * vx + uy * vy);
|
|
235664
235662
|
const ass = vx * vx + vy * vy;
|
|
235665
235663
|
const ac = 2.0 * (ux * cx + uy * cy);
|
|
235666
|
-
const
|
|
235664
|
+
const as = 2.0 * (vx * cx + vy * cy);
|
|
235667
235665
|
const a = cx * cx + cy * cy - 1.0;
|
|
235668
|
-
const status = this.solveUnitCircleImplicitQuadricIntersection(acc, acs, ass, ac,
|
|
235666
|
+
const status = this.solveUnitCircleImplicitQuadricIntersection(acc, acs, ass, ac, as, a, ellipseRadians);
|
|
235669
235667
|
for (const radians of ellipseRadians) {
|
|
235670
235668
|
const cc = Math.cos(radians);
|
|
235671
235669
|
const ss = Math.sin(radians);
|
|
@@ -235732,328 +235730,8 @@ TrigPolynomial.CC = Float64Array.from([1.0, -4.0, 4.0]);
|
|
|
235732
235730
|
/** Standard Basis coefficients for W(t) * W(t). */
|
|
235733
235731
|
TrigPolynomial.WW = Float64Array.from([1.0, -4.0, 8.0, -8.0, 4.0]);
|
|
235734
235732
|
/** Standard Basis coefficients for C(t) * C(t) - S(t) * S(t). */
|
|
235735
|
-
TrigPolynomial.
|
|
235733
|
+
TrigPolynomial.CCMinusSS = Float64Array.from([1.0, -4.0, 0.0, 8.0, -4.0]); // eslint-disable-line @typescript-eslint/naming-convention
|
|
235736
235734
|
TrigPolynomial._coefficientRelTol = 1.0e-12;
|
|
235737
|
-
/**
|
|
235738
|
-
* static methods for commonly appearing sets of equations in 2 or 3 variables
|
|
235739
|
-
* @public
|
|
235740
|
-
*/
|
|
235741
|
-
class SmallSystem {
|
|
235742
|
-
/**
|
|
235743
|
-
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection.
|
|
235744
|
-
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
235745
|
-
* @param a0 start point of line a
|
|
235746
|
-
* @param a1 end point of line a
|
|
235747
|
-
* @param b0 start point of line b
|
|
235748
|
-
* @param b1 end point of line b
|
|
235749
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235750
|
-
*/
|
|
235751
|
-
static lineSegment2dXYTransverseIntersectionUnbounded(a0, a1, b0, b1, result) {
|
|
235752
|
-
const ux = a1.x - a0.x;
|
|
235753
|
-
const uy = a1.y - a0.y;
|
|
235754
|
-
const vx = b1.x - b0.x;
|
|
235755
|
-
const vy = b1.y - b0.y;
|
|
235756
|
-
const cx = b0.x - a0.x;
|
|
235757
|
-
const cy = b0.y - a0.y;
|
|
235758
|
-
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
235759
|
-
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
235760
|
-
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
235761
|
-
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
235762
|
-
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
235763
|
-
if (s !== undefined && t !== undefined) {
|
|
235764
|
-
result.set(s, -t);
|
|
235765
|
-
return true;
|
|
235766
|
-
}
|
|
235767
|
-
result.set(0, 0);
|
|
235768
|
-
return false;
|
|
235769
|
-
}
|
|
235770
|
-
/**
|
|
235771
|
-
* * (ax0,ay0) to (ax0+ux,ay0+uy) are line A.
|
|
235772
|
-
* * (bx0,by0) to (bx0+vx,by0+vy) are lineB.
|
|
235773
|
-
* * Return true if the lines have a simple intersection.
|
|
235774
|
-
* * Return the fractional (not xy) coordinates in result.x, result.y
|
|
235775
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235776
|
-
*/
|
|
235777
|
-
static lineSegmentXYUVTransverseIntersectionUnbounded(ax0, ay0, ux, uy, bx0, by0, vx, vy, result) {
|
|
235778
|
-
const cx = bx0 - ax0;
|
|
235779
|
-
const cy = by0 - ay0;
|
|
235780
|
-
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
235781
|
-
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
235782
|
-
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
235783
|
-
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
235784
|
-
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
235785
|
-
if (s !== undefined && t !== undefined) {
|
|
235786
|
-
result.set(s, -t);
|
|
235787
|
-
return true;
|
|
235788
|
-
}
|
|
235789
|
-
result.set(0, 0);
|
|
235790
|
-
return false;
|
|
235791
|
-
}
|
|
235792
|
-
/**
|
|
235793
|
-
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts
|
|
235794
|
-
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
235795
|
-
* @param a0 start point of line a
|
|
235796
|
-
* @param a1 end point of line a
|
|
235797
|
-
* @param b0 start point of line b
|
|
235798
|
-
* @param b1 end point of line b
|
|
235799
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235800
|
-
*/
|
|
235801
|
-
static lineSegment3dXYTransverseIntersectionUnbounded(a0, a1, b0, b1, result) {
|
|
235802
|
-
const ux = a1.x - a0.x;
|
|
235803
|
-
const uy = a1.y - a0.y;
|
|
235804
|
-
const vx = b1.x - b0.x;
|
|
235805
|
-
const vy = b1.y - b0.y;
|
|
235806
|
-
const cx = b0.x - a0.x;
|
|
235807
|
-
const cy = b0.y - a0.y;
|
|
235808
|
-
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
235809
|
-
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
235810
|
-
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
235811
|
-
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
235812
|
-
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
235813
|
-
if (s !== undefined && t !== undefined) {
|
|
235814
|
-
result.set(s, -t);
|
|
235815
|
-
return true;
|
|
235816
|
-
}
|
|
235817
|
-
result.set(0, 0);
|
|
235818
|
-
return false;
|
|
235819
|
-
}
|
|
235820
|
-
/**
|
|
235821
|
-
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts of WEIGHTED 4D Points
|
|
235822
|
-
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
235823
|
-
* @param hA0 homogeneous start point of line a
|
|
235824
|
-
* @param hA1 homogeneous end point of line a
|
|
235825
|
-
* @param hB0 homogeneous start point of line b
|
|
235826
|
-
* @param hB1 homogeneous end point of line b
|
|
235827
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235828
|
-
*/
|
|
235829
|
-
static lineSegment3dHXYTransverseIntersectionUnbounded(hA0, hA1, hB0, hB1, result) {
|
|
235830
|
-
// Considering only x,y,w parts....
|
|
235831
|
-
// Point Q along B is (in full homogeneous) `(1-lambda) B0 + lambda 1`
|
|
235832
|
-
// PointQ is colinear with A0,A1 when the determinant det (A0,A1,Q) is zero. (Each column takes xyw parts)
|
|
235833
|
-
const alpha0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, hA1.x, hB0.x, hA0.y, hA1.y, hB0.y, hA0.w, hA1.w, hB0.w);
|
|
235834
|
-
const alpha1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, hA1.x, hB1.x, hA0.y, hA1.y, hB1.y, hA0.w, hA1.w, hB1.w);
|
|
235835
|
-
const fractionB = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-alpha0, alpha1 - alpha0);
|
|
235836
|
-
if (fractionB !== undefined) {
|
|
235837
|
-
const beta0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hB0.x, hB1.x, hA0.x, hB0.y, hB1.y, hA0.y, hB0.w, hB1.w, hA0.w);
|
|
235838
|
-
const beta1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hB0.x, hB1.x, hA1.x, hB0.y, hB1.y, hA1.y, hB0.w, hB1.w, hA1.w);
|
|
235839
|
-
const fractionA = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-beta0, beta1 - beta0);
|
|
235840
|
-
if (fractionA !== undefined)
|
|
235841
|
-
return _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_6__.Vector2d.create(fractionA, fractionB, result);
|
|
235842
|
-
}
|
|
235843
|
-
return undefined;
|
|
235844
|
-
}
|
|
235845
|
-
/**
|
|
235846
|
-
* Return the line fraction at which the (homogeneous) line is closest to a space point as viewed in xy only.
|
|
235847
|
-
* @param hA0 homogeneous start point of line a
|
|
235848
|
-
* @param hA1 homogeneous end point of line a
|
|
235849
|
-
* @param spacePoint homogeneous point in space
|
|
235850
|
-
*/
|
|
235851
|
-
static lineSegment3dHXYClosestPointUnbounded(hA0, hA1, spacePoint) {
|
|
235852
|
-
// Considering only x,y,w parts....
|
|
235853
|
-
// weighted difference of (A1 w0 - A0 w1) is (cartesian) tangent vector along the line as viewed.
|
|
235854
|
-
// The perpendicular (pure vector) W = (-y,x) flip is the direction of projection
|
|
235855
|
-
// Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`
|
|
235856
|
-
// PointQ is colinear with spacePoint and and W when the xyw homogeneous determinant | Q W spacePoint | is zero.
|
|
235857
|
-
const tx = hA1.x * hA0.w - hA0.x * hA1.w;
|
|
235858
|
-
const ty = hA1.y * hA0.w - hA0.y * hA1.w;
|
|
235859
|
-
const det0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, -ty, spacePoint.x, hA0.y, tx, spacePoint.y, hA0.w, 0, spacePoint.w);
|
|
235860
|
-
const det1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA1.x, -ty, spacePoint.x, hA1.y, tx, spacePoint.y, hA1.w, 0, spacePoint.w);
|
|
235861
|
-
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-det0, det1 - det0);
|
|
235862
|
-
}
|
|
235863
|
-
/**
|
|
235864
|
-
* Return the line fraction at which the line is closest to a space point as viewed in xy only.
|
|
235865
|
-
* @param pointA0 start point
|
|
235866
|
-
* @param pointA1 end point
|
|
235867
|
-
* @param spacePoint point in space
|
|
235868
|
-
*/
|
|
235869
|
-
static lineSegment3dXYClosestPointUnbounded(pointA0, pointA1, spacePoint) {
|
|
235870
|
-
// Considering only x,y parts....
|
|
235871
|
-
const ux = pointA1.x - pointA0.x;
|
|
235872
|
-
const uy = pointA1.y - pointA0.y;
|
|
235873
|
-
const uu = ux * ux + uy * uy;
|
|
235874
|
-
const vx = spacePoint.x - pointA0.x;
|
|
235875
|
-
const vy = spacePoint.y - pointA0.y;
|
|
235876
|
-
const uv = ux * vx + uy * vy;
|
|
235877
|
-
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(uv, uu);
|
|
235878
|
-
}
|
|
235879
|
-
/**
|
|
235880
|
-
* Return the line fraction at which the line is closest to a space point
|
|
235881
|
-
* @param pointA0 start point
|
|
235882
|
-
* @param pointA1 end point
|
|
235883
|
-
* @param spacePoint point in space
|
|
235884
|
-
*/
|
|
235885
|
-
static lineSegment3dClosestPointUnbounded(pointA0, pointA1, spacePoint) {
|
|
235886
|
-
const ux = pointA1.x - pointA0.x;
|
|
235887
|
-
const uy = pointA1.y - pointA0.y;
|
|
235888
|
-
const uz = pointA1.z - pointA0.z;
|
|
235889
|
-
const uu = ux * ux + uy * uy + uz * uz;
|
|
235890
|
-
const vx = spacePoint.x - pointA0.x;
|
|
235891
|
-
const vy = spacePoint.y - pointA0.y;
|
|
235892
|
-
const vz = spacePoint.z - pointA0.z;
|
|
235893
|
-
const uv = ux * vx + uy * vy + uz * vz;
|
|
235894
|
-
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(uv, uu);
|
|
235895
|
-
}
|
|
235896
|
-
/**
|
|
235897
|
-
* Return true if lines (a0,a1) to (b0, b1) have closest approach (go by each other) in 3d
|
|
235898
|
-
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
235899
|
-
* @param a0 start point of line a
|
|
235900
|
-
* @param a1 end point of line a
|
|
235901
|
-
* @param b0 start point of line b
|
|
235902
|
-
* @param b1 end point of line b
|
|
235903
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235904
|
-
*/
|
|
235905
|
-
static lineSegment3dClosestApproachUnbounded(a0, a1, b0, b1, result) {
|
|
235906
|
-
return this.ray3dXYZUVWClosestApproachUnbounded(a0.x, a0.y, a0.z, a1.x - a0.x, a1.y - a0.y, a1.z - a0.z, b0.x, b0.y, b0.z, b1.x - b0.x, b1.y - b0.y, b1.z - b0.z, result);
|
|
235907
|
-
}
|
|
235908
|
-
/**
|
|
235909
|
-
* Return true if the given rays have closest approach (go by each other) in 3d
|
|
235910
|
-
* Return the fractional (not xy) coordinates as x and y parts of a Point2d.
|
|
235911
|
-
* @param ax x-coordinate of the origin of the first ray
|
|
235912
|
-
* @param ay y-coordinate of the origin of the first ray
|
|
235913
|
-
* @param az z-coordinate of the origin of the first ray
|
|
235914
|
-
* @param au x-coordinate of the direction vector of the first ray
|
|
235915
|
-
* @param av y-coordinate of the direction vector of the first ray
|
|
235916
|
-
* @param aw z-coordinate of the direction vector of the first ray
|
|
235917
|
-
* @param bx x-coordinate of the origin of the second ray
|
|
235918
|
-
* @param by y-coordinate of the origin of the second ray
|
|
235919
|
-
* @param bz z-coordinate of the origin of the second ray
|
|
235920
|
-
* @param bu x-coordinate of the direction vector of the second ray
|
|
235921
|
-
* @param bv y-coordinate of the direction vector of the second ray
|
|
235922
|
-
* @param bw z-coordinate of the direction vector of the second ray
|
|
235923
|
-
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
235924
|
-
*/
|
|
235925
|
-
static ray3dXYZUVWClosestApproachUnbounded(ax, ay, az, au, av, aw, bx, by, bz, bu, bv, bw, result) {
|
|
235926
|
-
const cx = bx - ax;
|
|
235927
|
-
const cy = by - ay;
|
|
235928
|
-
const cz = bz - az;
|
|
235929
|
-
const uu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseSquaredXYZ(au, av, aw);
|
|
235930
|
-
const vv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseSquaredXYZ(bu, bv, bw);
|
|
235931
|
-
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(au, av, aw, bu, bv, bw);
|
|
235932
|
-
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(cx, cy, cz, au, av, aw);
|
|
235933
|
-
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(cx, cy, cz, bu, bv, bw);
|
|
235934
|
-
return SmallSystem.linearSystem2d(uu, -uv, uv, -vv, cu, cv, result);
|
|
235935
|
-
}
|
|
235936
|
-
/**
|
|
235937
|
-
* Solve the pair of linear equations
|
|
235938
|
-
* * `ux * x + vx * y = cx`
|
|
235939
|
-
* * `uy * x + vy * y = cy`
|
|
235940
|
-
* @param ux xx coefficient
|
|
235941
|
-
* @param vx xy coefficient
|
|
235942
|
-
* @param uy yx coefficient
|
|
235943
|
-
* @param vy yy coefficient
|
|
235944
|
-
* @param cx x right hand side
|
|
235945
|
-
* @param cy y right hand side
|
|
235946
|
-
* @param result (x,y) solution (MUST be preallocated by caller)
|
|
235947
|
-
*/
|
|
235948
|
-
static linearSystem2d(ux, vx, // first row of matrix
|
|
235949
|
-
uy, vy, // second row of matrix
|
|
235950
|
-
cx, cy, // right side
|
|
235951
|
-
result) {
|
|
235952
|
-
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
235953
|
-
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
235954
|
-
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
235955
|
-
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
235956
|
-
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
235957
|
-
if (s !== undefined && t !== undefined) {
|
|
235958
|
-
result.set(s, t);
|
|
235959
|
-
return true;
|
|
235960
|
-
}
|
|
235961
|
-
result.set(0, 0);
|
|
235962
|
-
return false;
|
|
235963
|
-
}
|
|
235964
|
-
/**
|
|
235965
|
-
* Solve a linear system:
|
|
235966
|
-
* * x equation: `axx * u + axy * v + axz * w = cx`
|
|
235967
|
-
* * y equation: `ayx * u + ayy * v + ayz * w = cy`
|
|
235968
|
-
* * z equation: `azx * u + azy * v + azz * w = cz`
|
|
235969
|
-
* @param axx row 0, column 0 coefficient
|
|
235970
|
-
* @param axy row 0, column 1 coefficient
|
|
235971
|
-
* @param axz row 0, column 1 coefficient
|
|
235972
|
-
* @param ayx row 1, column 0 coefficient
|
|
235973
|
-
* @param ayy row 1, column 1 coefficient
|
|
235974
|
-
* @param ayz row 1, column 2 coefficient
|
|
235975
|
-
* @param azx row 2, column 0 coefficient
|
|
235976
|
-
* @param azy row 2, column 1 coefficient
|
|
235977
|
-
* @param azz row 2, column 2 coefficient
|
|
235978
|
-
* @param cx right hand side row 0 coefficient
|
|
235979
|
-
* @param cy right hand side row 1 coefficient
|
|
235980
|
-
* @param cz right hand side row 2 coefficient
|
|
235981
|
-
* @param result optional result.
|
|
235982
|
-
* @returns solution vector (u,v,w) or `undefined` if system is singular.
|
|
235983
|
-
*/
|
|
235984
|
-
static linearSystem3d(axx, axy, axz, // first row of matrix
|
|
235985
|
-
ayx, ayy, ayz, // second row of matrix
|
|
235986
|
-
azx, azy, azz, // second row of matrix
|
|
235987
|
-
cx, cy, cz, // right side
|
|
235988
|
-
result) {
|
|
235989
|
-
// determinants of various combinations of columns ...
|
|
235990
|
-
const detXYZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, axz, ayz, azz);
|
|
235991
|
-
const detCYZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(cx, cy, cz, axy, ayy, azy, axz, ayz, azz);
|
|
235992
|
-
const detXCZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, cx, cy, cz, axz, ayz, azz);
|
|
235993
|
-
const detXYC = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, cx, cy, cz);
|
|
235994
|
-
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detCYZ, detXYZ);
|
|
235995
|
-
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detXCZ, detXYZ);
|
|
235996
|
-
const u = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detXYC, detXYZ);
|
|
235997
|
-
if (s !== undefined && t !== undefined && u !== undefined) {
|
|
235998
|
-
return _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(s, t, u, result);
|
|
235999
|
-
}
|
|
236000
|
-
return undefined;
|
|
236001
|
-
}
|
|
236002
|
-
/**
|
|
236003
|
-
* Compute the intersection of three planes.
|
|
236004
|
-
* @param xyzA point on the first plane
|
|
236005
|
-
* @param normalA normal of the first plane
|
|
236006
|
-
* @param xyzB point on the second plane
|
|
236007
|
-
* @param normalB normal of the second plane
|
|
236008
|
-
* @param xyzC point on the third plane
|
|
236009
|
-
* @param normalC normal of the third plane
|
|
236010
|
-
* @param result optional result
|
|
236011
|
-
* @returns intersection point of the three planes (as a Vector3d), or undefined if at least two planes are parallel.
|
|
236012
|
-
*/
|
|
236013
|
-
static intersect3Planes(xyzA, normalA, xyzB, normalB, xyzC, normalC, result) {
|
|
236014
|
-
return this.linearSystem3d(normalA.x, normalA.y, normalA.z, normalB.x, normalB.y, normalB.z, normalC.x, normalC.y, normalC.z, _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzA.x, xyzA.y, xyzA.z, normalA.x, normalA.y, normalA.z), _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzB.x, xyzB.y, xyzB.z, normalB.x, normalB.y, normalB.z), _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzC.x, xyzC.y, xyzC.z, normalC.x, normalC.y, normalC.z), result);
|
|
236015
|
-
}
|
|
236016
|
-
/**
|
|
236017
|
-
* * in rowB, replace `rowB[j] += a * rowB[pivot] * rowA[j] / rowA[pivot]` for `j>pivot`
|
|
236018
|
-
* @param rowA row that does not change
|
|
236019
|
-
* @param pivotIndex index of pivot (divisor) in rowA.
|
|
236020
|
-
* @param rowB row where elimination occurs.
|
|
236021
|
-
*/
|
|
236022
|
-
static eliminateFromPivot(rowA, pivotIndex, rowB, a) {
|
|
236023
|
-
const n = rowA.length;
|
|
236024
|
-
let q = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(rowB[pivotIndex], rowA[pivotIndex]);
|
|
236025
|
-
if (q === undefined)
|
|
236026
|
-
return false;
|
|
236027
|
-
q *= a;
|
|
236028
|
-
for (let j = pivotIndex + 1; j < n; j++)
|
|
236029
|
-
rowB[j] += q * rowA[j];
|
|
236030
|
-
return true;
|
|
236031
|
-
}
|
|
236032
|
-
/**
|
|
236033
|
-
* Solve a pair of bilinear equations
|
|
236034
|
-
* * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`
|
|
236035
|
-
* * Second equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`
|
|
236036
|
-
*/
|
|
236037
|
-
static solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1) {
|
|
236038
|
-
// constant linear, and quadratic coefficients for c0 + c1 * u + c2 * u*u = 0
|
|
236039
|
-
const e0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(a0, a1, c0, c1);
|
|
236040
|
-
const e1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(b0, b1, c0, c1) + _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(a0, a1, d0, d1);
|
|
236041
|
-
const e2 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(b0, b1, d0, d1);
|
|
236042
|
-
const uRoots = Degree2PowerPolynomial.solveQuadratic(e2, e1, e0);
|
|
236043
|
-
if (uRoots === undefined)
|
|
236044
|
-
return undefined;
|
|
236045
|
-
const uv = [];
|
|
236046
|
-
for (const u of uRoots) {
|
|
236047
|
-
const v0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-(a0 + b0 * u), c0 + d0 * u);
|
|
236048
|
-
const v1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-(a1 + b1 * u), c1 + d1 * u);
|
|
236049
|
-
if (v0 !== undefined)
|
|
236050
|
-
uv.push(_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_6__.Point2d.create(u, v0));
|
|
236051
|
-
else if (v1 !== undefined)
|
|
236052
|
-
uv.push(_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_6__.Point2d.create(u, v1));
|
|
236053
|
-
}
|
|
236054
|
-
return uv;
|
|
236055
|
-
}
|
|
236056
|
-
}
|
|
236057
235735
|
/**
|
|
236058
235736
|
* * bilinear expression
|
|
236059
235737
|
* * `f(u,v) = a + b * u * c * v + d * u * v`
|
|
@@ -236084,6 +235762,30 @@ class BilinearPolynomial {
|
|
|
236084
235762
|
static createUnitSquareValues(f00, f10, f01, f11) {
|
|
236085
235763
|
return new BilinearPolynomial(f00, f10, f10, f11 - f10 - f01);
|
|
236086
235764
|
}
|
|
235765
|
+
/**
|
|
235766
|
+
* Solve a pair of bilinear equations
|
|
235767
|
+
* * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`
|
|
235768
|
+
* * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`
|
|
235769
|
+
*/
|
|
235770
|
+
static solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1) {
|
|
235771
|
+
// constant linear, and quadratic coefficients for c0 + c1 * u + c2 * u*u = 0
|
|
235772
|
+
const e0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(a0, a1, c0, c1);
|
|
235773
|
+
const e1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(b0, b1, c0, c1) + _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(a0, a1, d0, d1);
|
|
235774
|
+
const e2 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.crossProductXYXY(b0, b1, d0, d1);
|
|
235775
|
+
const uRoots = Degree2PowerPolynomial.solveQuadratic(e2, e1, e0);
|
|
235776
|
+
if (uRoots === undefined)
|
|
235777
|
+
return undefined;
|
|
235778
|
+
const uv = [];
|
|
235779
|
+
for (const u of uRoots) {
|
|
235780
|
+
const v0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(-(a0 + b0 * u), c0 + d0 * u);
|
|
235781
|
+
const v1 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideFraction(-(a1 + b1 * u), c1 + d1 * u);
|
|
235782
|
+
if (v0 !== undefined)
|
|
235783
|
+
uv.push(_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_7__.Point2d.create(u, v0));
|
|
235784
|
+
else if (v1 !== undefined)
|
|
235785
|
+
uv.push(_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_7__.Point2d.create(u, v1));
|
|
235786
|
+
}
|
|
235787
|
+
return uv;
|
|
235788
|
+
}
|
|
236087
235789
|
/**
|
|
236088
235790
|
* Solve the simultaneous equations
|
|
236089
235791
|
* * `p(u,v) = pValue`
|
|
@@ -236094,7 +235796,7 @@ class BilinearPolynomial {
|
|
|
236094
235796
|
* @param qValue
|
|
236095
235797
|
*/
|
|
236096
235798
|
static solvePair(p, pValue, q, qValue) {
|
|
236097
|
-
return
|
|
235799
|
+
return BilinearPolynomial.solveBilinearPair(p.a - pValue, p.b, p.c, p.d, q.a - qValue, q.b, q.c, q.d);
|
|
236098
235800
|
}
|
|
236099
235801
|
}
|
|
236100
235802
|
/**
|
|
@@ -236125,21 +235827,21 @@ class SineCosinePolynomial {
|
|
|
236125
235827
|
}
|
|
236126
235828
|
/** Return the range of function values over the entire angle range. */
|
|
236127
235829
|
range(result) {
|
|
236128
|
-
const q =
|
|
236129
|
-
return
|
|
235830
|
+
const q = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.hypotenuseXY(this.cosineCoff, this.sineCoff);
|
|
235831
|
+
return _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(this.a - q, this.a + q, result);
|
|
236130
235832
|
}
|
|
236131
235833
|
/** Return the min and max values of the function over theta range from radians0 to radians1 inclusive. */
|
|
236132
235834
|
rangeInStartEndRadians(radians0, radians1, result) {
|
|
236133
|
-
if (
|
|
235835
|
+
if (_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_8__.Angle.isFullCircleRadians(radians1 - radians0))
|
|
236134
235836
|
return this.range(result);
|
|
236135
|
-
result =
|
|
235837
|
+
result = _geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(this.evaluateRadians(radians0), this.evaluateRadians(radians1), result);
|
|
236136
235838
|
// angles of min and max ...
|
|
236137
235839
|
// angles for min and max of the sine wave . ..
|
|
236138
235840
|
const alphaA = Math.atan2(this.sineCoff, this.cosineCoff);
|
|
236139
235841
|
const alphaB = alphaA + Math.PI;
|
|
236140
|
-
if (
|
|
235842
|
+
if (_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_3__.AngleSweep.isRadiansInStartEnd(alphaA, radians0, radians1))
|
|
236141
235843
|
result.extendX(this.evaluateRadians(alphaA));
|
|
236142
|
-
if (
|
|
235844
|
+
if (_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_3__.AngleSweep.isRadiansInStartEnd(alphaB, radians0, radians1))
|
|
236143
235845
|
result.extendX(this.evaluateRadians(alphaB));
|
|
236144
235846
|
return result;
|
|
236145
235847
|
}
|
|
@@ -236175,14 +235877,14 @@ class ImplicitLineXY {
|
|
|
236175
235877
|
*/
|
|
236176
235878
|
convertToSegmentPoints(b) {
|
|
236177
235879
|
const q = Math.sqrt(this.ax * this.ax + this.ay * this.ay);
|
|
236178
|
-
const alpha =
|
|
235880
|
+
const alpha = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.conditionalDivideCoordinate(1.0, q, 1.0e10);
|
|
236179
235881
|
if (alpha === undefined)
|
|
236180
235882
|
return undefined;
|
|
236181
235883
|
const ux = alpha * this.ax;
|
|
236182
235884
|
const uy = alpha * this.ay;
|
|
236183
235885
|
const px = -alpha * ux;
|
|
236184
235886
|
const py = -alpha * uy;
|
|
236185
|
-
return [
|
|
235887
|
+
return [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(px - b * uy, py + b * ux), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Point3d.create(px + b * uy, py - b * ux)];
|
|
236186
235888
|
}
|
|
236187
235889
|
/**
|
|
236188
235890
|
* Evaluate the half-space function at an xy point
|
|
@@ -236794,6 +236496,341 @@ function compareRange1dLexicalLowHigh(a, b) {
|
|
|
236794
236496
|
}
|
|
236795
236497
|
|
|
236796
236498
|
|
|
236499
|
+
/***/ }),
|
|
236500
|
+
|
|
236501
|
+
/***/ "../../core/geometry/lib/esm/numerics/SmallSystem.js":
|
|
236502
|
+
/*!***********************************************************!*\
|
|
236503
|
+
!*** ../../core/geometry/lib/esm/numerics/SmallSystem.js ***!
|
|
236504
|
+
\***********************************************************/
|
|
236505
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
236506
|
+
|
|
236507
|
+
"use strict";
|
|
236508
|
+
__webpack_require__.r(__webpack_exports__);
|
|
236509
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
236510
|
+
/* harmony export */ "SmallSystem": () => (/* binding */ SmallSystem)
|
|
236511
|
+
/* harmony export */ });
|
|
236512
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
236513
|
+
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
236514
|
+
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
236515
|
+
/* harmony import */ var _Polynomials__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Polynomials */ "../../core/geometry/lib/esm/numerics/Polynomials.js");
|
|
236516
|
+
/*---------------------------------------------------------------------------------------------
|
|
236517
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
236518
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
236519
|
+
*--------------------------------------------------------------------------------------------*/
|
|
236520
|
+
/** @packageDocumentation
|
|
236521
|
+
* @module Numerics
|
|
236522
|
+
*/
|
|
236523
|
+
|
|
236524
|
+
|
|
236525
|
+
|
|
236526
|
+
|
|
236527
|
+
// cspell:word XYUV
|
|
236528
|
+
/**
|
|
236529
|
+
* static methods for commonly appearing sets of equations in 2 or 3 variables
|
|
236530
|
+
* @public
|
|
236531
|
+
*/
|
|
236532
|
+
class SmallSystem {
|
|
236533
|
+
/**
|
|
236534
|
+
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection.
|
|
236535
|
+
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
236536
|
+
* @param a0 start point of line a
|
|
236537
|
+
* @param a1 end point of line a
|
|
236538
|
+
* @param b0 start point of line b
|
|
236539
|
+
* @param b1 end point of line b
|
|
236540
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236541
|
+
*/
|
|
236542
|
+
static lineSegment2dXYTransverseIntersectionUnbounded(a0, a1, b0, b1, result) {
|
|
236543
|
+
const ux = a1.x - a0.x;
|
|
236544
|
+
const uy = a1.y - a0.y;
|
|
236545
|
+
const vx = b1.x - b0.x;
|
|
236546
|
+
const vy = b1.y - b0.y;
|
|
236547
|
+
const cx = b0.x - a0.x;
|
|
236548
|
+
const cy = b0.y - a0.y;
|
|
236549
|
+
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
236550
|
+
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
236551
|
+
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
236552
|
+
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
236553
|
+
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
236554
|
+
if (s !== undefined && t !== undefined) {
|
|
236555
|
+
result.set(s, -t);
|
|
236556
|
+
return true;
|
|
236557
|
+
}
|
|
236558
|
+
result.set(0, 0);
|
|
236559
|
+
return false;
|
|
236560
|
+
}
|
|
236561
|
+
/**
|
|
236562
|
+
* * (ax0,ay0) to (ax0+ux,ay0+uy) are line A.
|
|
236563
|
+
* * (bx0,by0) to (bx0+vx,by0+vy) are lineB.
|
|
236564
|
+
* * Return true if the lines have a simple intersection.
|
|
236565
|
+
* * Return the fractional (not xy) coordinates in result.x, result.y
|
|
236566
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236567
|
+
*/
|
|
236568
|
+
static lineSegmentXYUVTransverseIntersectionUnbounded(ax0, ay0, ux, uy, bx0, by0, vx, vy, result) {
|
|
236569
|
+
const cx = bx0 - ax0;
|
|
236570
|
+
const cy = by0 - ay0;
|
|
236571
|
+
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
236572
|
+
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
236573
|
+
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
236574
|
+
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
236575
|
+
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
236576
|
+
if (s !== undefined && t !== undefined) {
|
|
236577
|
+
result.set(s, -t);
|
|
236578
|
+
return true;
|
|
236579
|
+
}
|
|
236580
|
+
result.set(0, 0);
|
|
236581
|
+
return false;
|
|
236582
|
+
}
|
|
236583
|
+
/**
|
|
236584
|
+
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts
|
|
236585
|
+
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
236586
|
+
* @param a0 start point of line a
|
|
236587
|
+
* @param a1 end point of line a
|
|
236588
|
+
* @param b0 start point of line b
|
|
236589
|
+
* @param b1 end point of line b
|
|
236590
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236591
|
+
*/
|
|
236592
|
+
static lineSegment3dXYTransverseIntersectionUnbounded(a0, a1, b0, b1, result) {
|
|
236593
|
+
const ux = a1.x - a0.x;
|
|
236594
|
+
const uy = a1.y - a0.y;
|
|
236595
|
+
const vx = b1.x - b0.x;
|
|
236596
|
+
const vy = b1.y - b0.y;
|
|
236597
|
+
const cx = b0.x - a0.x;
|
|
236598
|
+
const cy = b0.y - a0.y;
|
|
236599
|
+
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
236600
|
+
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
236601
|
+
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
236602
|
+
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
236603
|
+
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
236604
|
+
if (s !== undefined && t !== undefined) {
|
|
236605
|
+
result.set(s, -t);
|
|
236606
|
+
return true;
|
|
236607
|
+
}
|
|
236608
|
+
result.set(0, 0);
|
|
236609
|
+
return false;
|
|
236610
|
+
}
|
|
236611
|
+
/**
|
|
236612
|
+
* Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts of WEIGHTED 4D Points
|
|
236613
|
+
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
236614
|
+
* @param hA0 homogeneous start point of line a
|
|
236615
|
+
* @param hA1 homogeneous end point of line a
|
|
236616
|
+
* @param hB0 homogeneous start point of line b
|
|
236617
|
+
* @param hB1 homogeneous end point of line b
|
|
236618
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236619
|
+
*/
|
|
236620
|
+
static lineSegment3dHXYTransverseIntersectionUnbounded(hA0, hA1, hB0, hB1, result) {
|
|
236621
|
+
// Considering only x,y,w parts....
|
|
236622
|
+
// Point Q along B is (in full homogeneous) `(1-lambda) B0 + lambda 1`
|
|
236623
|
+
// PointQ is colinear with A0,A1 when the determinant det (A0,A1,Q) is zero. (Each column takes xyw parts)
|
|
236624
|
+
const alpha0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, hA1.x, hB0.x, hA0.y, hA1.y, hB0.y, hA0.w, hA1.w, hB0.w);
|
|
236625
|
+
const alpha1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, hA1.x, hB1.x, hA0.y, hA1.y, hB1.y, hA0.w, hA1.w, hB1.w);
|
|
236626
|
+
const fractionB = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-alpha0, alpha1 - alpha0);
|
|
236627
|
+
if (fractionB !== undefined) {
|
|
236628
|
+
const beta0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hB0.x, hB1.x, hA0.x, hB0.y, hB1.y, hA0.y, hB0.w, hB1.w, hA0.w);
|
|
236629
|
+
const beta1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hB0.x, hB1.x, hA1.x, hB0.y, hB1.y, hA1.y, hB0.w, hB1.w, hA1.w);
|
|
236630
|
+
const fractionA = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-beta0, beta1 - beta0);
|
|
236631
|
+
if (fractionA !== undefined)
|
|
236632
|
+
return _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.Vector2d.create(fractionA, fractionB, result);
|
|
236633
|
+
}
|
|
236634
|
+
return undefined;
|
|
236635
|
+
}
|
|
236636
|
+
/**
|
|
236637
|
+
* Return the line fraction at which the (homogeneous) line is closest to a space point as viewed in xy only.
|
|
236638
|
+
* @param hA0 homogeneous start point of line a
|
|
236639
|
+
* @param hA1 homogeneous end point of line a
|
|
236640
|
+
* @param spacePoint homogeneous point in space
|
|
236641
|
+
*/
|
|
236642
|
+
static lineSegment3dHXYClosestPointUnbounded(hA0, hA1, spacePoint) {
|
|
236643
|
+
// Considering only x,y,w parts....
|
|
236644
|
+
// weighted difference of (A1 w0 - A0 w1) is (cartesian) tangent vector along the line as viewed.
|
|
236645
|
+
// The perpendicular (pure vector) W = (-y,x) flip is the direction of projection
|
|
236646
|
+
// Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`
|
|
236647
|
+
// PointQ is colinear with spacePoint and and W when the xyw homogeneous determinant | Q W spacePoint | is zero.
|
|
236648
|
+
const tx = hA1.x * hA0.w - hA0.x * hA1.w;
|
|
236649
|
+
const ty = hA1.y * hA0.w - hA0.y * hA1.w;
|
|
236650
|
+
const det0 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA0.x, -ty, spacePoint.x, hA0.y, tx, spacePoint.y, hA0.w, 0, spacePoint.w);
|
|
236651
|
+
const det1 = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(hA1.x, -ty, spacePoint.x, hA1.y, tx, spacePoint.y, hA1.w, 0, spacePoint.w);
|
|
236652
|
+
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(-det0, det1 - det0);
|
|
236653
|
+
}
|
|
236654
|
+
/**
|
|
236655
|
+
* Return the line fraction at which the line is closest to a space point as viewed in xy only.
|
|
236656
|
+
* @param pointA0 start point
|
|
236657
|
+
* @param pointA1 end point
|
|
236658
|
+
* @param spacePoint point in space
|
|
236659
|
+
*/
|
|
236660
|
+
static lineSegment3dXYClosestPointUnbounded(pointA0, pointA1, spacePoint) {
|
|
236661
|
+
// Considering only x,y parts....
|
|
236662
|
+
const ux = pointA1.x - pointA0.x;
|
|
236663
|
+
const uy = pointA1.y - pointA0.y;
|
|
236664
|
+
const uu = ux * ux + uy * uy;
|
|
236665
|
+
const vx = spacePoint.x - pointA0.x;
|
|
236666
|
+
const vy = spacePoint.y - pointA0.y;
|
|
236667
|
+
const uv = ux * vx + uy * vy;
|
|
236668
|
+
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(uv, uu);
|
|
236669
|
+
}
|
|
236670
|
+
/**
|
|
236671
|
+
* Return the line fraction at which the line is closest to a space point
|
|
236672
|
+
* @param pointA0 start point
|
|
236673
|
+
* @param pointA1 end point
|
|
236674
|
+
* @param spacePoint point in space
|
|
236675
|
+
*/
|
|
236676
|
+
static lineSegment3dClosestPointUnbounded(pointA0, pointA1, spacePoint) {
|
|
236677
|
+
const ux = pointA1.x - pointA0.x;
|
|
236678
|
+
const uy = pointA1.y - pointA0.y;
|
|
236679
|
+
const uz = pointA1.z - pointA0.z;
|
|
236680
|
+
const uu = ux * ux + uy * uy + uz * uz;
|
|
236681
|
+
const vx = spacePoint.x - pointA0.x;
|
|
236682
|
+
const vy = spacePoint.y - pointA0.y;
|
|
236683
|
+
const vz = spacePoint.z - pointA0.z;
|
|
236684
|
+
const uv = ux * vx + uy * vy + uz * vz;
|
|
236685
|
+
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(uv, uu);
|
|
236686
|
+
}
|
|
236687
|
+
/**
|
|
236688
|
+
* Return true if lines (a0,a1) to (b0, b1) have closest approach (go by each other) in 3d
|
|
236689
|
+
* Return the fractional (not xy) coordinates in result.x, result.y
|
|
236690
|
+
* @param a0 start point of line a
|
|
236691
|
+
* @param a1 end point of line a
|
|
236692
|
+
* @param b0 start point of line b
|
|
236693
|
+
* @param b1 end point of line b
|
|
236694
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236695
|
+
*/
|
|
236696
|
+
static lineSegment3dClosestApproachUnbounded(a0, a1, b0, b1, result) {
|
|
236697
|
+
return this.ray3dXYZUVWClosestApproachUnbounded(a0.x, a0.y, a0.z, a1.x - a0.x, a1.y - a0.y, a1.z - a0.z, b0.x, b0.y, b0.z, b1.x - b0.x, b1.y - b0.y, b1.z - b0.z, result);
|
|
236698
|
+
}
|
|
236699
|
+
/**
|
|
236700
|
+
* Return true if the given rays have closest approach (go by each other) in 3d
|
|
236701
|
+
* Return the fractional (not xy) coordinates as x and y parts of a Point2d.
|
|
236702
|
+
* @param ax x-coordinate of the origin of the first ray
|
|
236703
|
+
* @param ay y-coordinate of the origin of the first ray
|
|
236704
|
+
* @param az z-coordinate of the origin of the first ray
|
|
236705
|
+
* @param au x-coordinate of the direction vector of the first ray
|
|
236706
|
+
* @param av y-coordinate of the direction vector of the first ray
|
|
236707
|
+
* @param aw z-coordinate of the direction vector of the first ray
|
|
236708
|
+
* @param bx x-coordinate of the origin of the second ray
|
|
236709
|
+
* @param by y-coordinate of the origin of the second ray
|
|
236710
|
+
* @param bz z-coordinate of the origin of the second ray
|
|
236711
|
+
* @param bu x-coordinate of the direction vector of the second ray
|
|
236712
|
+
* @param bv y-coordinate of the direction vector of the second ray
|
|
236713
|
+
* @param bw z-coordinate of the direction vector of the second ray
|
|
236714
|
+
* @param result point to receive fractional coordinates of intersection. result.x is fraction on line a. result.y is fraction on line b.
|
|
236715
|
+
*/
|
|
236716
|
+
static ray3dXYZUVWClosestApproachUnbounded(ax, ay, az, au, av, aw, bx, by, bz, bu, bv, bw, result) {
|
|
236717
|
+
const cx = bx - ax;
|
|
236718
|
+
const cy = by - ay;
|
|
236719
|
+
const cz = bz - az;
|
|
236720
|
+
const uu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseSquaredXYZ(au, av, aw);
|
|
236721
|
+
const vv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseSquaredXYZ(bu, bv, bw);
|
|
236722
|
+
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(au, av, aw, bu, bv, bw);
|
|
236723
|
+
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(cx, cy, cz, au, av, aw);
|
|
236724
|
+
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(cx, cy, cz, bu, bv, bw);
|
|
236725
|
+
return SmallSystem.linearSystem2d(uu, -uv, uv, -vv, cu, cv, result);
|
|
236726
|
+
}
|
|
236727
|
+
/**
|
|
236728
|
+
* Solve the pair of linear equations
|
|
236729
|
+
* * `ux * x + vx * y = cx`
|
|
236730
|
+
* * `uy * x + vy * y = cy`
|
|
236731
|
+
* @param ux xx coefficient
|
|
236732
|
+
* @param vx xy coefficient
|
|
236733
|
+
* @param uy yx coefficient
|
|
236734
|
+
* @param vy yy coefficient
|
|
236735
|
+
* @param cx x right hand side
|
|
236736
|
+
* @param cy y right hand side
|
|
236737
|
+
* @param result (x,y) solution (MUST be preallocated by caller)
|
|
236738
|
+
*/
|
|
236739
|
+
static linearSystem2d(ux, vx, // first row of matrix
|
|
236740
|
+
uy, vy, // second row of matrix
|
|
236741
|
+
cx, cy, // right side
|
|
236742
|
+
result) {
|
|
236743
|
+
const uv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, vx, vy);
|
|
236744
|
+
const cv = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(cx, cy, vx, vy);
|
|
236745
|
+
const cu = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(ux, uy, cx, cy);
|
|
236746
|
+
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cv, uv);
|
|
236747
|
+
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(cu, uv);
|
|
236748
|
+
if (s !== undefined && t !== undefined) {
|
|
236749
|
+
result.set(s, t);
|
|
236750
|
+
return true;
|
|
236751
|
+
}
|
|
236752
|
+
result.set(0, 0);
|
|
236753
|
+
return false;
|
|
236754
|
+
}
|
|
236755
|
+
/**
|
|
236756
|
+
* Solve a linear system:
|
|
236757
|
+
* * x equation: `axx * u + axy * v + axz * w = cx`
|
|
236758
|
+
* * y equation: `ayx * u + ayy * v + ayz * w = cy`
|
|
236759
|
+
* * z equation: `azx * u + azy * v + azz * w = cz`
|
|
236760
|
+
* @param axx row 0, column 0 coefficient
|
|
236761
|
+
* @param axy row 0, column 1 coefficient
|
|
236762
|
+
* @param axz row 0, column 1 coefficient
|
|
236763
|
+
* @param ayx row 1, column 0 coefficient
|
|
236764
|
+
* @param ayy row 1, column 1 coefficient
|
|
236765
|
+
* @param ayz row 1, column 2 coefficient
|
|
236766
|
+
* @param azx row 2, column 0 coefficient
|
|
236767
|
+
* @param azy row 2, column 1 coefficient
|
|
236768
|
+
* @param azz row 2, column 2 coefficient
|
|
236769
|
+
* @param cx right hand side row 0 coefficient
|
|
236770
|
+
* @param cy right hand side row 1 coefficient
|
|
236771
|
+
* @param cz right hand side row 2 coefficient
|
|
236772
|
+
* @param result optional result.
|
|
236773
|
+
* @returns solution vector (u,v,w) or `undefined` if system is singular.
|
|
236774
|
+
*/
|
|
236775
|
+
static linearSystem3d(axx, axy, axz, // first row of matrix
|
|
236776
|
+
ayx, ayy, ayz, // second row of matrix
|
|
236777
|
+
azx, azy, azz, // second row of matrix
|
|
236778
|
+
cx, cy, cz, // right side
|
|
236779
|
+
result) {
|
|
236780
|
+
// determinants of various combinations of columns ...
|
|
236781
|
+
const detXYZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, axz, ayz, azz);
|
|
236782
|
+
const detCYZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(cx, cy, cz, axy, ayy, azy, axz, ayz, azz);
|
|
236783
|
+
const detXCZ = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, cx, cy, cz, axz, ayz, azz);
|
|
236784
|
+
const detXYC = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, cx, cy, cz);
|
|
236785
|
+
const s = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detCYZ, detXYZ);
|
|
236786
|
+
const t = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detXCZ, detXYZ);
|
|
236787
|
+
const u = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(detXYC, detXYZ);
|
|
236788
|
+
if (s !== undefined && t !== undefined && u !== undefined) {
|
|
236789
|
+
return _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_2__.Vector3d.create(s, t, u, result);
|
|
236790
|
+
}
|
|
236791
|
+
return undefined;
|
|
236792
|
+
}
|
|
236793
|
+
/**
|
|
236794
|
+
* Compute the intersection of three planes.
|
|
236795
|
+
* @param xyzA point on the first plane
|
|
236796
|
+
* @param normalA normal of the first plane
|
|
236797
|
+
* @param xyzB point on the second plane
|
|
236798
|
+
* @param normalB normal of the second plane
|
|
236799
|
+
* @param xyzC point on the third plane
|
|
236800
|
+
* @param normalC normal of the third plane
|
|
236801
|
+
* @param result optional result
|
|
236802
|
+
* @returns intersection point of the three planes (as a Vector3d), or undefined if at least two planes are parallel.
|
|
236803
|
+
*/
|
|
236804
|
+
static intersect3Planes(xyzA, normalA, xyzB, normalB, xyzC, normalC, result) {
|
|
236805
|
+
return this.linearSystem3d(normalA.x, normalA.y, normalA.z, normalB.x, normalB.y, normalB.z, normalC.x, normalC.y, normalC.z, _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzA.x, xyzA.y, xyzA.z, normalA.x, normalA.y, normalA.z), _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzB.x, xyzB.y, xyzB.z, normalB.x, normalB.y, normalB.z), _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.dotProductXYZXYZ(xyzC.x, xyzC.y, xyzC.z, normalC.x, normalC.y, normalC.z), result);
|
|
236806
|
+
}
|
|
236807
|
+
/**
|
|
236808
|
+
* * in rowB, replace `rowB[j] += a * rowB[pivot] * rowA[j] / rowA[pivot]` for `j>pivot`
|
|
236809
|
+
* @param rowA row that does not change
|
|
236810
|
+
* @param pivotIndex index of pivot (divisor) in rowA.
|
|
236811
|
+
* @param rowB row where elimination occurs.
|
|
236812
|
+
*/
|
|
236813
|
+
static eliminateFromPivot(rowA, pivotIndex, rowB, a) {
|
|
236814
|
+
const n = rowA.length;
|
|
236815
|
+
let q = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.conditionalDivideFraction(rowB[pivotIndex], rowA[pivotIndex]);
|
|
236816
|
+
if (q === undefined)
|
|
236817
|
+
return false;
|
|
236818
|
+
q *= a;
|
|
236819
|
+
for (let j = pivotIndex + 1; j < n; j++)
|
|
236820
|
+
rowB[j] += q * rowA[j];
|
|
236821
|
+
return true;
|
|
236822
|
+
}
|
|
236823
|
+
/**
|
|
236824
|
+
* Solve a pair of bilinear equations
|
|
236825
|
+
* * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`
|
|
236826
|
+
* * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`
|
|
236827
|
+
*/
|
|
236828
|
+
static solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1) {
|
|
236829
|
+
return _Polynomials__WEBPACK_IMPORTED_MODULE_3__.BilinearPolynomial.solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1);
|
|
236830
|
+
}
|
|
236831
|
+
}
|
|
236832
|
+
|
|
236833
|
+
|
|
236797
236834
|
/***/ }),
|
|
236798
236835
|
|
|
236799
236836
|
/***/ "../../core/geometry/lib/esm/numerics/TriDiagonalSystem.js":
|
|
@@ -247343,16 +247380,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
247343
247380
|
/* harmony export */ "OffsetMeshContext": () => (/* binding */ OffsetMeshContext),
|
|
247344
247381
|
/* harmony export */ "SectorOffsetProperties": () => (/* binding */ SectorOffsetProperties)
|
|
247345
247382
|
/* harmony export */ });
|
|
247346
|
-
/* harmony import */ var
|
|
247383
|
+
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
247384
|
+
/* harmony import */ var _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../geometry3d/Angle */ "../../core/geometry/lib/esm/geometry3d/Angle.js");
|
|
247347
247385
|
/* harmony import */ var _geometry3d_GrowableXYZArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../geometry3d/GrowableXYZArray */ "../../core/geometry/lib/esm/geometry3d/GrowableXYZArray.js");
|
|
247348
247386
|
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
247349
247387
|
/* harmony import */ var _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../geometry3d/PolygonOps */ "../../core/geometry/lib/esm/geometry3d/PolygonOps.js");
|
|
247388
|
+
/* harmony import */ var _geometry3d_PolylineCompressionByEdgeOffset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../geometry3d/PolylineCompressionByEdgeOffset */ "../../core/geometry/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js");
|
|
247350
247389
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
247390
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
247351
247391
|
/* harmony import */ var _topology_Graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../topology/Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
|
|
247352
247392
|
/* harmony import */ var _topology_HalfEdgeGraphFromIndexedLoopsContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../topology/HalfEdgeGraphFromIndexedLoopsContext */ "../../core/geometry/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js");
|
|
247353
|
-
/* harmony import */ var _Geometry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../Geometry */ "../../core/geometry/lib/esm/Geometry.js");
|
|
247354
|
-
/* harmony import */ var _geometry3d_PolylineCompressionByEdgeOffset__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../geometry3d/PolylineCompressionByEdgeOffset */ "../../core/geometry/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js");
|
|
247355
|
-
/* harmony import */ var _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../geometry3d/Angle */ "../../core/geometry/lib/esm/geometry3d/Angle.js");
|
|
247356
247393
|
/*---------------------------------------------------------------------------------------------
|
|
247357
247394
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
247358
247395
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -248093,7 +248130,7 @@ class OffsetMeshContext {
|
|
|
248093
248130
|
const sectorA = nodeA.edgeTag;
|
|
248094
248131
|
const sectorB = nodeB.edgeTag;
|
|
248095
248132
|
const sectorC = nodeC.edgeTag;
|
|
248096
|
-
const vector =
|
|
248133
|
+
const vector = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.intersect3Planes(sectorA.xyz, sectorA.normal, sectorB.xyz, sectorB.normal, sectorC.xyz, sectorC.normal, result);
|
|
248097
248134
|
return vector;
|
|
248098
248135
|
}
|
|
248099
248136
|
/** Compute the point of intersection of the planes in the sectors of 3 half edges */
|
|
@@ -248106,7 +248143,7 @@ class OffsetMeshContext {
|
|
|
248106
248143
|
for (const sector of [sectorA, sectorB, sectorC])
|
|
248107
248144
|
emitSector(sector);
|
|
248108
248145
|
}
|
|
248109
|
-
const vector =
|
|
248146
|
+
const vector = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.intersect3Planes(sectorA.xyz, sectorA.normal, sectorB.xyz, sectorB.normal, sectorC.xyz, sectorC.normal, result);
|
|
248110
248147
|
if (OffsetMeshContext.stringDebugFunction !== undefined) {
|
|
248111
248148
|
if (vector === undefined)
|
|
248112
248149
|
OffsetMeshContext.stringDebugFunction(" NO INTERSECTION");
|
|
@@ -248120,7 +248157,7 @@ class OffsetMeshContext {
|
|
|
248120
248157
|
const sectorA = nodeA.edgeTag;
|
|
248121
248158
|
const sectorB = nodeB.edgeTag;
|
|
248122
248159
|
const normalC = sectorA.normal.crossProduct(sectorB.normal);
|
|
248123
|
-
return
|
|
248160
|
+
return _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_7__.SmallSystem.intersect3Planes(sectorA.xyz, sectorA.normal, sectorB.xyz, sectorB.normal, sectorB.xyz, normalC, result);
|
|
248124
248161
|
}
|
|
248125
248162
|
/**
|
|
248126
248163
|
* * at input, graph has all original faces and edges
|
|
@@ -263058,7 +263095,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
263058
263095
|
/* harmony import */ var _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometry3d/Angle */ "../../core/geometry/lib/esm/geometry3d/Angle.js");
|
|
263059
263096
|
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
263060
263097
|
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
263061
|
-
/* harmony import */ var
|
|
263098
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
263062
263099
|
/* harmony import */ var _MaskManager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./MaskManager */ "../../core/geometry/lib/esm/topology/MaskManager.js");
|
|
263063
263100
|
/*---------------------------------------------------------------------------------------------
|
|
263064
263101
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
@@ -264151,7 +264188,7 @@ class HalfEdge {
|
|
|
264151
264188
|
// (nodeA1.x - nodeA0.x)ta + (nodeB0.x - nodeB1.x)tb = nodeB0.x - nodeA0.x
|
|
264152
264189
|
// (nodeA1.y - nodeA0.y)ta + (nodeB0.y - nodeB1.y)tb = nodeB0.y - nodeA0.y
|
|
264153
264190
|
// Proof can be found at geometry/internaldocs/Graph.md
|
|
264154
|
-
if (
|
|
264191
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_4__.SmallSystem.linearSystem2d(nodeA1.x - nodeA0.x, nodeB0.x - nodeB1.x, nodeA1.y - nodeA0.y, nodeB0.y - nodeB1.y, nodeB0.x - nodeA0.x, nodeB0.y - nodeA0.y, result))
|
|
264155
264192
|
return result;
|
|
264156
264193
|
return undefined;
|
|
264157
264194
|
}
|
|
@@ -266266,7 +266303,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
266266
266303
|
/* harmony import */ var _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../geometry3d/Point3dVector3d */ "../../core/geometry/lib/esm/geometry3d/Point3dVector3d.js");
|
|
266267
266304
|
/* harmony import */ var _geometry3d_PolygonOps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../geometry3d/PolygonOps */ "../../core/geometry/lib/esm/geometry3d/PolygonOps.js");
|
|
266268
266305
|
/* harmony import */ var _geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../geometry3d/Ray3d */ "../../core/geometry/lib/esm/geometry3d/Ray3d.js");
|
|
266269
|
-
/* harmony import */ var
|
|
266306
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
266270
266307
|
/* harmony import */ var _Graph__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
|
|
266271
266308
|
/* harmony import */ var _HalfEdgeMarkSet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HalfEdgeMarkSet */ "../../core/geometry/lib/esm/topology/HalfEdgeMarkSet.js");
|
|
266272
266309
|
/* harmony import */ var _HalfEdgePointInGraphSearch__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./HalfEdgePointInGraphSearch */ "../../core/geometry/lib/esm/topology/HalfEdgePointInGraphSearch.js");
|
|
@@ -266370,7 +266407,7 @@ class InsertAndRetriangulateContext {
|
|
|
266370
266407
|
let distanceC;
|
|
266371
266408
|
for (const nodeA of this._graph.allHalfEdges) {
|
|
266372
266409
|
const nodeB = nodeA.faceSuccessor;
|
|
266373
|
-
fractionC =
|
|
266410
|
+
fractionC = _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_6__.SmallSystem.lineSegment3dXYClosestPointUnbounded(nodeA, nodeB, xyz);
|
|
266374
266411
|
if (fractionC !== undefined) {
|
|
266375
266412
|
if (fractionC > 1.0) {
|
|
266376
266413
|
distanceC = xyz.distanceXY(nodeB);
|
|
@@ -266736,7 +266773,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
266736
266773
|
/* harmony import */ var _geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../geometry3d/Point2dVector2d */ "../../core/geometry/lib/esm/geometry3d/Point2dVector2d.js");
|
|
266737
266774
|
/* harmony import */ var _geometry3d_Range__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometry3d/Range */ "../../core/geometry/lib/esm/geometry3d/Range.js");
|
|
266738
266775
|
/* harmony import */ var _numerics_ClusterableArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../numerics/ClusterableArray */ "../../core/geometry/lib/esm/numerics/ClusterableArray.js");
|
|
266739
|
-
/* harmony import */ var
|
|
266776
|
+
/* harmony import */ var _numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../numerics/SmallSystem */ "../../core/geometry/lib/esm/numerics/SmallSystem.js");
|
|
266740
266777
|
/* harmony import */ var _Graph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Graph */ "../../core/geometry/lib/esm/topology/Graph.js");
|
|
266741
266778
|
/* harmony import */ var _HalfEdgePriorityQueue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HalfEdgePriorityQueue */ "../../core/geometry/lib/esm/topology/HalfEdgePriorityQueue.js");
|
|
266742
266779
|
/* harmony import */ var _RegularizeFace__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./RegularizeFace */ "../../core/geometry/lib/esm/topology/RegularizeFace.js");
|
|
@@ -267214,7 +267251,7 @@ class HalfEdgeGraphMerge {
|
|
|
267214
267251
|
const vx = nodeB1.x - bx0;
|
|
267215
267252
|
const vy = nodeB1.y - by0;
|
|
267216
267253
|
// cspell:word lineSegmentXYUVTransverseIntersectionUnbounded
|
|
267217
|
-
if (
|
|
267254
|
+
if (_numerics_SmallSystem__WEBPACK_IMPORTED_MODULE_8__.SmallSystem.lineSegmentXYUVTransverseIntersectionUnbounded(ax0, ay0, ux, uy, bx0, by0, vx, vy, fractions)) {
|
|
267218
267255
|
pointA.x = ax0 + fractions.x * ux;
|
|
267219
267256
|
pointA.y = ay0 + fractions.x * uy;
|
|
267220
267257
|
pointB.x = bx0 + fractions.y * vx;
|
|
@@ -304206,7 +304243,7 @@ var loadLanguages = instance.loadLanguages;
|
|
|
304206
304243
|
/***/ ((module) => {
|
|
304207
304244
|
|
|
304208
304245
|
"use strict";
|
|
304209
|
-
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.10.0-dev.
|
|
304246
|
+
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.10.0-dev.27","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 --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -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.10.0-dev.27","@itwin/core-bentley":"workspace:^4.10.0-dev.27","@itwin/core-common":"workspace:^4.10.0-dev.27","@itwin/core-geometry":"workspace:^4.10.0-dev.27","@itwin/core-orbitgt":"workspace:^4.10.0-dev.27","@itwin/core-quantity":"workspace:^4.10.0-dev.27"},"//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.2","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/mocha":"^10.0.6","@types/sinon":"^17.0.2","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.3.10","chai-as-promised":"^7.1.1","cpx2":"^3.0.0","eslint":"^8.56.0","glob":"^10.3.12","mocha":"^10.2.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^17.0.2","source-map-loader":"^4.0.0","typescript":"~5.3.3","typemoq":"^2.1.0","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.2.4","@itwin/object-storage-core":"^2.2.5","@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","meshoptimizer":"~0.20.0","wms-capabilities":"0.4.0"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"}}');
|
|
304210
304247
|
|
|
304211
304248
|
/***/ })
|
|
304212
304249
|
|