@itwin/rpcinterface-full-stack-tests 4.0.0-dev.55 → 4.0.0-dev.58
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/_d48c.bundled-tests.js.map +1 -1
- package/lib/dist/bundled-tests.js +633 -490
- package/lib/dist/bundled-tests.js.map +1 -1
- package/lib/dist/core_frontend_lib_esm_ApproximateTerrainHeightsProps_js.bundled-tests.js.map +1 -1
- package/lib/dist/object-storage.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_itwin_object-storage-azure_1_5_0_node_modules_itwin_obj-e3e81d.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_loaders_gl_draco_3_3_1_node_modules_loaders_gl_draco_di-d3af41.bundled-tests.js.map +1 -1
- package/lib/dist/vendors-common_temp_node_modules_pnpm_reflect-metadata_0_1_13_node_modules_reflect-metadata_R-610cb3.bundled-tests.js.map +1 -1
- package/package.json +13 -13
|
@@ -52912,6 +52912,13 @@ class TextureMapping {
|
|
|
52912
52912
|
this.weight = props?.textureWeight ?? 1;
|
|
52913
52913
|
this.mode = props?.mapMode ?? Mode.Parametric;
|
|
52914
52914
|
this.worldMapping = props?.worldMapping ?? false;
|
|
52915
|
+
this.useConstantLod = props?.useConstantLod ?? false;
|
|
52916
|
+
this.constantLodParams = {
|
|
52917
|
+
repetitions: props?.constantLodParams?.repetitions ?? 1,
|
|
52918
|
+
offset: props?.constantLodParams?.offset ?? { x: 0, y: 0 },
|
|
52919
|
+
minDistClamp: props?.constantLodParams?.minDistClamp ?? 1,
|
|
52920
|
+
maxDistClamp: props?.constantLodParams?.maxDistClamp ?? 4096 * 1024 * 1024,
|
|
52921
|
+
};
|
|
52915
52922
|
}
|
|
52916
52923
|
/**
|
|
52917
52924
|
* Generates UV parameters for textured surfaces. Returns undefined on failure.
|
|
@@ -116669,7 +116676,6 @@ class BranchUniforms {
|
|
|
116669
116676
|
this._mvp32 = new _Matrix__WEBPACK_IMPORTED_MODULE_4__.Matrix4();
|
|
116670
116677
|
this._m32 = new _Matrix__WEBPACK_IMPORTED_MODULE_4__.Matrix4();
|
|
116671
116678
|
this._v32 = new _Matrix__WEBPACK_IMPORTED_MODULE_4__.Matrix3();
|
|
116672
|
-
this._mvn32 = new _Matrix__WEBPACK_IMPORTED_MODULE_4__.Matrix3();
|
|
116673
116679
|
// Working state
|
|
116674
116680
|
this._scratchTransform = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createIdentity();
|
|
116675
116681
|
this._scratchTransform2 = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createIdentity();
|
|
@@ -116752,10 +116758,6 @@ class BranchUniforms {
|
|
|
116752
116758
|
if (this.update(uniform, geom, isViewCoords))
|
|
116753
116759
|
uniform.setMatrix3(this._v32);
|
|
116754
116760
|
}
|
|
116755
|
-
bindModelViewNTransform(uniform, geom, isViewCoords) {
|
|
116756
|
-
if (this.update(uniform, geom, isViewCoords))
|
|
116757
|
-
uniform.setMatrix3(this._mvn32);
|
|
116758
|
-
}
|
|
116759
116761
|
update(uniform, geometry, isViewCoords) {
|
|
116760
116762
|
const uniforms = this._target.uniforms[isViewCoords ? "viewRect" : "frustum"];
|
|
116761
116763
|
if (!(0,_Sync__WEBPACK_IMPORTED_MODULE_6__.sync)(uniforms, this))
|
|
@@ -116787,7 +116789,6 @@ class BranchUniforms {
|
|
|
116787
116789
|
}
|
|
116788
116790
|
else {
|
|
116789
116791
|
const viewMatrix = this._target.uniforms.frustum.viewMatrix;
|
|
116790
|
-
mv = viewMatrix.clone(this._scratchTransform);
|
|
116791
116792
|
if (undefined !== instancedGeom) {
|
|
116792
116793
|
// For instanced geometry, the "model view" matrix is really a transform from center of instanced geometry range to view.
|
|
116793
116794
|
// Shader will compute final model-view matrix based on this and the per-instance transform.
|
|
@@ -116795,10 +116796,10 @@ class BranchUniforms {
|
|
|
116795
116796
|
const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld);
|
|
116796
116797
|
const rotateAboutOrigin = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);
|
|
116797
116798
|
const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), this._scratchVIModelMatrix);
|
|
116798
|
-
mv.multiplyTransformTransform(viModelMatrix,
|
|
116799
|
+
mv = viewMatrix.multiplyTransformTransform(viModelMatrix, this._scratchTransform);
|
|
116799
116800
|
}
|
|
116800
116801
|
else {
|
|
116801
|
-
mv.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix),
|
|
116802
|
+
mv = viewMatrix.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), this._scratchTransform);
|
|
116802
116803
|
}
|
|
116803
116804
|
}
|
|
116804
116805
|
else {
|
|
@@ -116806,10 +116807,10 @@ class BranchUniforms {
|
|
|
116806
116807
|
const viewToWorldRot = viewMatrix.matrix.inverse(this._scratchViewToWorld);
|
|
116807
116808
|
const rotateAboutOrigin = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Transform.createFixedPointAndMatrix(vio, viewToWorldRot, this._scratchTransform2);
|
|
116808
116809
|
const viModelMatrix = rotateAboutOrigin.multiplyTransformTransform(modelMatrix, this._scratchVIModelMatrix);
|
|
116809
|
-
mv.multiplyTransformTransform(viModelMatrix,
|
|
116810
|
+
mv = viewMatrix.multiplyTransformTransform(viModelMatrix, this._scratchTransform);
|
|
116810
116811
|
}
|
|
116811
116812
|
else {
|
|
116812
|
-
mv =
|
|
116813
|
+
mv = viewMatrix.multiplyTransformTransform(modelMatrix, this._scratchTransform);
|
|
116813
116814
|
}
|
|
116814
116815
|
}
|
|
116815
116816
|
}
|
|
@@ -116817,6 +116818,9 @@ class BranchUniforms {
|
|
|
116817
116818
|
this._m32.initFromTransform(modelMatrix);
|
|
116818
116819
|
this._v32.initFromMatrix3d(this._target.uniforms.frustum.viewMatrix.matrix);
|
|
116819
116820
|
}
|
|
116821
|
+
else if (undefined !== geometry.asSurface?.mesh.constantLodVParams) {
|
|
116822
|
+
this._m32.initFromTransform(modelMatrix);
|
|
116823
|
+
}
|
|
116820
116824
|
_itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__.Matrix4d.createTransform(mv, this._mv);
|
|
116821
116825
|
this._mv32.initFromTransform(mv);
|
|
116822
116826
|
// Don't bother computing mvp for instanced geometry - it's not used.
|
|
@@ -122718,19 +122722,35 @@ class MeshData {
|
|
|
122718
122722
|
this.hasFeatures = _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.FeatureIndexType.Empty !== params.vertices.featureIndexType;
|
|
122719
122723
|
if (_itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.FeatureIndexType.Uniform === params.vertices.featureIndexType)
|
|
122720
122724
|
this.uniformFeatureId = params.vertices.uniformFeatureID;
|
|
122725
|
+
this.textureUsesConstantLod = false;
|
|
122726
|
+
this.normalMapUsesConstantLod = false;
|
|
122721
122727
|
if (undefined !== params.surface.textureMapping) {
|
|
122722
122728
|
this.texture = params.surface.textureMapping.texture;
|
|
122723
122729
|
this._textureAlwaysDisplayed = params.surface.textureMapping.alwaysDisplayed;
|
|
122724
122730
|
if (undefined !== params.surface.material && !params.surface.material.isAtlas) {
|
|
122725
122731
|
const matTM = params.surface.material.material.textureMapping;
|
|
122726
|
-
if (undefined !== matTM
|
|
122727
|
-
|
|
122728
|
-
|
|
122732
|
+
if (undefined !== matTM) {
|
|
122733
|
+
this.textureUsesConstantLod = this.texture && matTM.params.useConstantLod;
|
|
122734
|
+
if (undefined !== matTM.normalMapParams) {
|
|
122735
|
+
this.normalMapUsesConstantLod = matTM.normalMapParams.useConstantLod;
|
|
122736
|
+
if (undefined !== matTM.normalMapParams.normalMap) {
|
|
122737
|
+
this.normalMap = matTM.normalMapParams.normalMap;
|
|
122738
|
+
}
|
|
122739
|
+
else {
|
|
122740
|
+
// If there are normal map params but the normal map is not present, use the texture as a normal map instead of a pattern map.
|
|
122741
|
+
this.normalMap = this.texture;
|
|
122742
|
+
this.texture = undefined;
|
|
122743
|
+
}
|
|
122729
122744
|
}
|
|
122730
|
-
|
|
122731
|
-
|
|
122732
|
-
this.
|
|
122733
|
-
this.
|
|
122745
|
+
if (this.normalMapUsesConstantLod || this.textureUsesConstantLod) {
|
|
122746
|
+
this.constantLodVParams = new Float32Array(3);
|
|
122747
|
+
this.constantLodVParams[0] = matTM.params.constantLodParams.offset.x; // x offset
|
|
122748
|
+
this.constantLodVParams[1] = matTM.params.constantLodParams.offset.y; // y offset
|
|
122749
|
+
this.constantLodVParams[3] = 0.0; // placeholder for orto view distance
|
|
122750
|
+
this.constantLodFParams = new Float32Array(3);
|
|
122751
|
+
this.constantLodFParams[0] = matTM.params.constantLodParams.minDistClamp; // Minimum texture size
|
|
122752
|
+
this.constantLodFParams[1] = matTM.params.constantLodParams.maxDistClamp; // Maximum texture size
|
|
122753
|
+
this.constantLodFParams[2] = matTM.params.constantLodParams.repetitions; // # repetitions of pattern (to scale it)
|
|
122734
122754
|
}
|
|
122735
122755
|
}
|
|
122736
122756
|
}
|
|
@@ -130539,6 +130559,8 @@ class SurfaceGeometry extends _MeshGeometry__WEBPACK_IMPORTED_MODULE_7__.MeshGeo
|
|
|
130539
130559
|
}
|
|
130540
130560
|
flags[0 /* SurfaceBitIndex.HasTexture */] = this.useTexture(params) ? 1 : 0;
|
|
130541
130561
|
flags[8 /* SurfaceBitIndex.HasNormalMap */] = this.useNormalMap(params) ? 1 : 0;
|
|
130562
|
+
flags[10 /* SurfaceBitIndex.UseConstantLodTextureMapping */] = this.mesh.textureUsesConstantLod ? 1 : 0;
|
|
130563
|
+
flags[11 /* SurfaceBitIndex.UseConstantLodNormalMapMapping */] = this.mesh.normalMapUsesConstantLod ? 1 : 0;
|
|
130542
130564
|
// The transparency threshold controls how transparent a surface must be to allow light to pass through; more opaque surfaces cast shadows.
|
|
130543
130565
|
flags[4 /* SurfaceBitIndex.TransparencyThreshold */] = params.target.isDrawingShadowMap ? 1 : 0;
|
|
130544
130566
|
flags[5 /* SurfaceBitIndex.BackgroundFill */] = 0;
|
|
@@ -137106,7 +137128,6 @@ function createVolClassCopyZProgram(context) {
|
|
|
137106
137128
|
_Texture__WEBPACK_IMPORTED_MODULE_4__.Texture2DHandle.bindSampler(uniform, geom.texture, _RenderFlags__WEBPACK_IMPORTED_MODULE_3__.TextureUnit.Zero);
|
|
137107
137129
|
});
|
|
137108
137130
|
});
|
|
137109
|
-
frag.addExtension("GL_EXT_frag_depth");
|
|
137110
137131
|
frag.set(18 /* FragmentShaderComponent.FinalizeDepth */, depthFromTexture);
|
|
137111
137132
|
builder.vert.headerComment = "//!V! VolClassCopyZ";
|
|
137112
137133
|
builder.frag.headerComment = "//!F! VolClassCopyZ";
|
|
@@ -141375,6 +141396,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
141375
141396
|
/* harmony import */ var _Vertex__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./Vertex */ "../../core/frontend/lib/esm/render/webgl/glsl/Vertex.js");
|
|
141376
141397
|
/* harmony import */ var _SurfaceGeometry__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../SurfaceGeometry */ "../../core/frontend/lib/esm/render/webgl/SurfaceGeometry.js");
|
|
141377
141398
|
/* harmony import */ var _Wiremesh__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./Wiremesh */ "../../core/frontend/lib/esm/render/webgl/glsl/Wiremesh.js");
|
|
141399
|
+
/* harmony import */ var _itwin_core_common__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @itwin/core-common */ "../../core/common/lib/esm/core-common.js");
|
|
141378
141400
|
/*---------------------------------------------------------------------------------------------
|
|
141379
141401
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
141380
141402
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
@@ -141405,10 +141427,45 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
141405
141427
|
|
|
141406
141428
|
|
|
141407
141429
|
|
|
141430
|
+
|
|
141431
|
+
const constantLodTextureLookup = `
|
|
141432
|
+
vec4 constantLodTextureLookup(sampler2D textureSampler) {
|
|
141433
|
+
float logDepth = log2(v_uvCustom.z);
|
|
141434
|
+
float f = fract(logDepth);
|
|
141435
|
+
float p = floor(logDepth);
|
|
141436
|
+
// When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).
|
|
141437
|
+
// This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative
|
|
141438
|
+
// that is auto calculated on the tex coords for the mip-map. The below approach attempts to "smooth"
|
|
141439
|
+
// the transition of the coord in use at the transition by only changing the coord that is not in use
|
|
141440
|
+
// (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether
|
|
141441
|
+
// p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the
|
|
141442
|
+
// line problem.
|
|
141443
|
+
float p1, p2;
|
|
141444
|
+
if (0u == (uint(p) & 1u)) { // p is even
|
|
141445
|
+
p1 = p;
|
|
141446
|
+
p2 = p + 1.0;
|
|
141447
|
+
} else { // p is odd
|
|
141448
|
+
p1 = p + 1.0;
|
|
141449
|
+
p2 = p;
|
|
141450
|
+
f = 1.0 - f;
|
|
141451
|
+
}
|
|
141452
|
+
|
|
141453
|
+
vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;
|
|
141454
|
+
vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;
|
|
141455
|
+
return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);
|
|
141456
|
+
}
|
|
141457
|
+
`;
|
|
141408
141458
|
// NB: Textures do not contain pre-multiplied alpha.
|
|
141409
141459
|
const sampleSurfaceTexture = `
|
|
141410
141460
|
vec4 sampleSurfaceTexture() {
|
|
141411
|
-
|
|
141461
|
+
vec4 clr;
|
|
141462
|
+
if (!isSurfaceBitSet(kSurfaceBit_HasTexture))
|
|
141463
|
+
clr = vec4(1.0, 1.0, 1.0, 1.0);
|
|
141464
|
+
else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])
|
|
141465
|
+
clr = constantLodTextureLookup(s_texture);
|
|
141466
|
+
else
|
|
141467
|
+
clr = TEXTURE(s_texture, v_texCoord);
|
|
141468
|
+
return clr;
|
|
141412
141469
|
}
|
|
141413
141470
|
`;
|
|
141414
141471
|
const applyMaterialColor = `
|
|
@@ -141558,6 +141615,10 @@ const adjustEyeSpace = `
|
|
|
141558
141615
|
if (kRenderOrder_BlankingRegion == u_renderOrder)
|
|
141559
141616
|
v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);
|
|
141560
141617
|
`;
|
|
141618
|
+
const computeConstantLodUvCustom = `
|
|
141619
|
+
vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;
|
|
141620
|
+
v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);
|
|
141621
|
+
`;
|
|
141561
141622
|
const computePositionPostlude = `
|
|
141562
141623
|
return u_proj * pos;
|
|
141563
141624
|
`;
|
|
@@ -141572,17 +141633,17 @@ function createCommon(isInstanced, animated, shadowable, isHiliter, positionType
|
|
|
141572
141633
|
(0,_SolarShadowMapping__WEBPACK_IMPORTED_MODULE_17__.addSolarShadowMap)(builder);
|
|
141573
141634
|
(0,_Vertex__WEBPACK_IMPORTED_MODULE_20__.addProjectionMatrix)(vert);
|
|
141574
141635
|
(0,_Vertex__WEBPACK_IMPORTED_MODULE_20__.addModelViewMatrix)(vert);
|
|
141575
|
-
let computePosition;
|
|
141576
|
-
if (isHiliter
|
|
141577
|
-
computePosition = computePositionPrelude + computePositionPostlude;
|
|
141578
|
-
}
|
|
141579
|
-
else {
|
|
141636
|
+
let computePosition = computePositionPrelude;
|
|
141637
|
+
if (!isHiliter || _System__WEBPACK_IMPORTED_MODULE_5__.System.instance.supportsLogZBuffer) {
|
|
141580
141638
|
(0,_Common__WEBPACK_IMPORTED_MODULE_9__.addFrustum)(builder);
|
|
141581
141639
|
(0,_FeatureSymbology__WEBPACK_IMPORTED_MODULE_11__.addRenderOrder)(builder.vert);
|
|
141582
141640
|
(0,_FeatureSymbology__WEBPACK_IMPORTED_MODULE_11__.addRenderOrderConstants)(builder.vert);
|
|
141583
141641
|
builder.addVarying("v_eyeSpace", 4 /* VariableType.Vec3 */);
|
|
141584
|
-
computePosition
|
|
141642
|
+
computePosition += adjustEyeSpace;
|
|
141585
141643
|
}
|
|
141644
|
+
if (!isHiliter)
|
|
141645
|
+
computePosition += computeConstantLodUvCustom;
|
|
141646
|
+
computePosition += computePositionPostlude;
|
|
141586
141647
|
vert.set(10 /* VertexShaderComponent.ComputePosition */, computePosition);
|
|
141587
141648
|
return builder;
|
|
141588
141649
|
}
|
|
@@ -141616,6 +141677,8 @@ function addSurfaceFlagsLookup(builder) {
|
|
|
141616
141677
|
builder.addConstant("kSurfaceBitIndex_OverrideRgb", 1 /* VariableType.Int */, 7 /* SurfaceBitIndex.OverrideRgb */.toString());
|
|
141617
141678
|
builder.addConstant("kSurfaceBitIndex_HasNormalMap", 1 /* VariableType.Int */, 8 /* SurfaceBitIndex.HasNormalMap */.toString());
|
|
141618
141679
|
builder.addConstant("kSurfaceBitIndex_HasMaterialAtlas", 1 /* VariableType.Int */, 9 /* SurfaceBitIndex.HasMaterialAtlas */.toString());
|
|
141680
|
+
builder.addConstant("kSurfaceBitIndex_UseConstantLodTextureMapping", 1 /* VariableType.Int */, 10 /* SurfaceBitIndex.UseConstantLodTextureMapping */.toString());
|
|
141681
|
+
builder.addConstant("kSurfaceBitIndex_UseConstantLodNormalMapMapping", 1 /* VariableType.Int */, 11 /* SurfaceBitIndex.UseConstantLodNormalMapMapping */.toString());
|
|
141619
141682
|
// Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus
|
|
141620
141683
|
// used differently there & so require different constants. Unused constants are commented out.
|
|
141621
141684
|
builder.addBitFlagConstant("kSurfaceBit_HasTexture", 0 /* SurfaceBitIndex.HasTexture */);
|
|
@@ -141700,7 +141763,11 @@ const finalizeNormalNormalMap = `
|
|
|
141700
141763
|
vec3 biTangent = cross (normal, tangent);
|
|
141701
141764
|
if (flip)
|
|
141702
141765
|
biTangent = -biTangent;
|
|
141703
|
-
vec3 normM
|
|
141766
|
+
vec3 normM;
|
|
141767
|
+
if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])
|
|
141768
|
+
normM = constantLodTextureLookup(s_normalMap).xyz;
|
|
141769
|
+
else
|
|
141770
|
+
normM = TEXTURE(s_normalMap, v_texCoord).xyz;
|
|
141704
141771
|
if (length (normM) > 0.0001) { // check for empty normal texture
|
|
141705
141772
|
normM = (normM - 0.5) * 2.0;
|
|
141706
141773
|
normM = normalize (normM);
|
|
@@ -141764,7 +141831,7 @@ const computeBaseColor = `
|
|
|
141764
141831
|
surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);
|
|
141765
141832
|
return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);
|
|
141766
141833
|
`;
|
|
141767
|
-
const surfaceFlagArray = new Int32Array(
|
|
141834
|
+
const surfaceFlagArray = new Int32Array(12 /* SurfaceBitIndex.Count */);
|
|
141768
141835
|
/** @internal */
|
|
141769
141836
|
function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
|
|
141770
141837
|
addSurfaceFlagsLookup(builder.vert);
|
|
@@ -141775,7 +141842,7 @@ function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
|
|
|
141775
141842
|
compute += returnSurfaceFlags;
|
|
141776
141843
|
builder.addFunctionComputedVarying("v_surfaceFlags", 2 /* VariableType.Float */, "computeSurfaceFlags", compute);
|
|
141777
141844
|
builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
|
|
141778
|
-
builder.addUniformArray("u_surfaceFlags", 0 /* VariableType.Boolean */,
|
|
141845
|
+
builder.addUniformArray("u_surfaceFlags", 0 /* VariableType.Boolean */, 12 /* SurfaceBitIndex.Count */, (prog) => {
|
|
141779
141846
|
prog.addGraphicUniform("u_surfaceFlags", (uniform, params) => {
|
|
141780
141847
|
(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== params.geometry.asSurface);
|
|
141781
141848
|
const mesh = params.geometry.asSurface;
|
|
@@ -141793,17 +141860,19 @@ function addNormal(builder, animated) {
|
|
|
141793
141860
|
builder.frag.addGlobal("g_normal", 4 /* VariableType.Vec3 */);
|
|
141794
141861
|
let finalizeNormal = finalizeNormalPrelude;
|
|
141795
141862
|
finalizeNormal += finalizeNormalNormalMap;
|
|
141863
|
+
builder.frag.addFunction(constantLodTextureLookup);
|
|
141796
141864
|
builder.frag.addUniform("u_normalMapScale", 2 /* VariableType.Float */, (prog) => {
|
|
141797
141865
|
prog.addGraphicUniform("u_normalMapScale", (uniform, params) => {
|
|
141798
|
-
|
|
141799
|
-
|
|
141800
|
-
undefined !==
|
|
141801
|
-
|
|
141802
|
-
|
|
141803
|
-
|
|
141804
|
-
|
|
141805
|
-
|
|
141806
|
-
|
|
141866
|
+
if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {
|
|
141867
|
+
const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;
|
|
141868
|
+
if (undefined !== normalMapParams) {
|
|
141869
|
+
let normalMapScale = 1.0;
|
|
141870
|
+
normalMapScale = normalMapParams.scale ?? 1.0;
|
|
141871
|
+
if (normalMapParams.greenUp)
|
|
141872
|
+
normalMapScale = -normalMapScale;
|
|
141873
|
+
uniform.setUniform1f(normalMapScale);
|
|
141874
|
+
}
|
|
141875
|
+
}
|
|
141807
141876
|
});
|
|
141808
141877
|
});
|
|
141809
141878
|
finalizeNormal += finalizeNormalPostlude;
|
|
@@ -141839,7 +141908,6 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite) {
|
|
|
141839
141908
|
}
|
|
141840
141909
|
});
|
|
141841
141910
|
});
|
|
141842
|
-
builder.frag.addFunction(sampleSurfaceTexture);
|
|
141843
141911
|
}
|
|
141844
141912
|
builder.frag.addUniform("s_texture", 8 /* VariableType.Sampler2D */, (prog) => {
|
|
141845
141913
|
prog.addGraphicUniform("s_texture", (uniform, params) => {
|
|
@@ -141918,8 +141986,17 @@ function createSurfaceBuilder(flags) {
|
|
|
141918
141986
|
opts &= ~16 /* FeatureSymbologyOptions.Alpha */;
|
|
141919
141987
|
(0,_PlanarClassification__WEBPACK_IMPORTED_MODULE_15__.addColorPlanarClassifier)(builder, flags.isTranslucent, flags.isThematic);
|
|
141920
141988
|
}
|
|
141921
|
-
if (flags.isThematic)
|
|
141989
|
+
if (flags.isThematic) {
|
|
141922
141990
|
(0,_Thematic__WEBPACK_IMPORTED_MODULE_18__.addThematicDisplay)(builder);
|
|
141991
|
+
}
|
|
141992
|
+
else {
|
|
141993
|
+
builder.vert.addUniform("u_modelToWorld", 7 /* VariableType.Mat4 */, (prog) => {
|
|
141994
|
+
prog.addGraphicUniform("u_modelToWorld", (uniform, params) => {
|
|
141995
|
+
if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)
|
|
141996
|
+
params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);
|
|
141997
|
+
});
|
|
141998
|
+
});
|
|
141999
|
+
}
|
|
141923
142000
|
(0,_FeatureSymbology__WEBPACK_IMPORTED_MODULE_11__.addFeatureSymbology)(builder, feat, opts);
|
|
141924
142001
|
addSurfaceFlags(builder, 2 /* FeatureMode.Overrides */ === feat, true);
|
|
141925
142002
|
(0,_FeatureSymbology__WEBPACK_IMPORTED_MODULE_11__.addSurfaceDiscard)(builder, flags);
|
|
@@ -141963,6 +142040,25 @@ function createSurfaceBuilder(flags) {
|
|
|
141963
142040
|
(0,_Fragment__WEBPACK_IMPORTED_MODULE_12__.addAltPickBufferOutputs)(builder.frag);
|
|
141964
142041
|
}
|
|
141965
142042
|
}
|
|
142043
|
+
builder.addVarying("v_uvCustom", 4 /* VariableType.Vec3 */);
|
|
142044
|
+
builder.vert.addUniform("u_constantLodVParams", 4 /* VariableType.Vec3 */, (prog) => {
|
|
142045
|
+
prog.addGraphicUniform("u_constantLodVParams", (uniform, params) => {
|
|
142046
|
+
const vParams = params.geometry.asSurface?.mesh.constantLodVParams;
|
|
142047
|
+
if (undefined !== vParams) {
|
|
142048
|
+
vParams[2] = params.target.planFrustum.points[_itwin_core_common__WEBPACK_IMPORTED_MODULE_23__.Npc.LeftTopRear].distance(params.target.planFrustum.points[_itwin_core_common__WEBPACK_IMPORTED_MODULE_23__.Npc.RightTopRear]);
|
|
142049
|
+
uniform.setUniform3fv(vParams);
|
|
142050
|
+
}
|
|
142051
|
+
});
|
|
142052
|
+
});
|
|
142053
|
+
builder.frag.addUniform("u_constantLodFParams", 4 /* VariableType.Vec3 */, (prog) => {
|
|
142054
|
+
prog.addGraphicUniform("u_constantLodFParams", (uniform, params) => {
|
|
142055
|
+
const fParams = params.geometry.asSurface?.mesh.constantLodFParams;
|
|
142056
|
+
if (undefined !== fParams)
|
|
142057
|
+
uniform.setUniform3fv(fParams);
|
|
142058
|
+
});
|
|
142059
|
+
});
|
|
142060
|
+
builder.frag.addFunction(constantLodTextureLookup);
|
|
142061
|
+
builder.frag.addFunction(sampleSurfaceTexture);
|
|
141966
142062
|
builder.frag.addGlobal("g_surfaceTexel", 5 /* VariableType.Vec4 */);
|
|
141967
142063
|
builder.frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, (flags.isThematic === 0 /* IsThematic.No */) ? computeBaseColor : "return getSurfaceColor();");
|
|
141968
142064
|
if (flags.isClassified)
|
|
@@ -142468,33 +142564,31 @@ const computeLineCode = "\nfloat computeLineCode() { return g_lineCode; }\n";
|
|
|
142468
142564
|
function addSamplePosition(vert) {
|
|
142469
142565
|
vert.addFunction(getSamplePosition(vert.positionType));
|
|
142470
142566
|
}
|
|
142567
|
+
const getSamplePositionPrelude = `
|
|
142568
|
+
vec4 samplePosition(float index) {
|
|
142569
|
+
vec2 tc = compute_vert_coords(index);`;
|
|
142570
|
+
const getSamplePositionQuantizedPostlude = `
|
|
142571
|
+
vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
142572
|
+
tc.x += g_vert_stepX;
|
|
142573
|
+
vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
142574
|
+
vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));
|
|
142575
|
+
return unquantizePosition(qpos, u_qOrigin, u_qScale);
|
|
142576
|
+
}
|
|
142577
|
+
`;
|
|
142578
|
+
const getSamplePositionUnquantizedPostlude = `
|
|
142579
|
+
uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142580
|
+
tc.x += g_vert_stepX;
|
|
142581
|
+
uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142582
|
+
tc.x += g_vert_stepX;
|
|
142583
|
+
uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142584
|
+
tc.x += g_vert_stepX;
|
|
142585
|
+
uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142586
|
+
uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
|
|
142587
|
+
return vec4(uintBitsToFloat(u), 1.0);
|
|
142588
|
+
}
|
|
142589
|
+
`;
|
|
142471
142590
|
function getSamplePosition(type) {
|
|
142472
|
-
|
|
142473
|
-
vec4 samplePosition(float index) {
|
|
142474
|
-
vec2 tc = compute_vert_coords(index);`;
|
|
142475
|
-
if ("quantized" === type) {
|
|
142476
|
-
return `
|
|
142477
|
-
${prelude}
|
|
142478
|
-
vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
142479
|
-
tc.x += g_vert_stepX;
|
|
142480
|
-
vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
|
|
142481
|
-
vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));
|
|
142482
|
-
return unquantizePosition(qpos, u_qOrigin, u_qScale);
|
|
142483
|
-
}
|
|
142484
|
-
`;
|
|
142485
|
-
}
|
|
142486
|
-
return `
|
|
142487
|
-
${prelude}
|
|
142488
|
-
uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142489
|
-
tc.x += g_vert_stepX;
|
|
142490
|
-
uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142491
|
-
tc.x += g_vert_stepX;
|
|
142492
|
-
uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142493
|
-
tc.x += g_vert_stepX;
|
|
142494
|
-
uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
|
|
142495
|
-
uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
|
|
142496
|
-
return vec4(uintBitsToFloat(u), 1.0);
|
|
142497
|
-
}`;
|
|
142591
|
+
return `${getSamplePositionPrelude}${"quantized" === type ? getSamplePositionQuantizedPostlude : getSamplePositionUnquantizedPostlude}`;
|
|
142498
142592
|
}
|
|
142499
142593
|
/** @internal */
|
|
142500
142594
|
function addModelViewProjectionMatrix(vert) {
|
|
@@ -176432,7 +176526,11 @@ class Geometry {
|
|
|
176432
176526
|
static resolveToUndefined(value, targetValue) {
|
|
176433
176527
|
return value === targetValue ? undefined : value;
|
|
176434
176528
|
}
|
|
176435
|
-
/**
|
|
176529
|
+
/**
|
|
176530
|
+
* Simple interpolation between values, but choosing (based on fraction) a or b as starting
|
|
176531
|
+
* point for maximum accuracy.
|
|
176532
|
+
* * If `f = 0`, then `a` is returned and if `f = 1`, then `b` is returned.
|
|
176533
|
+
*/
|
|
176436
176534
|
static interpolate(a, f, b) {
|
|
176437
176535
|
return f <= 0.5 ? a + f * (b - a) : b - (1.0 - f) * (b - a);
|
|
176438
176536
|
}
|
|
@@ -205259,11 +205357,11 @@ class Angle {
|
|
|
205259
205357
|
}
|
|
205260
205358
|
}
|
|
205261
205359
|
/**
|
|
205262
|
-
|
|
205263
|
-
|
|
205264
|
-
|
|
205265
|
-
|
|
205266
|
-
|
|
205360
|
+
* Create an Angle from a JSON object
|
|
205361
|
+
* @param json object from JSON.parse. If a number, value is in *DEGREES*
|
|
205362
|
+
* @param defaultValRadians if json is undefined, default value in radians.
|
|
205363
|
+
* @return a new Angle
|
|
205364
|
+
*/
|
|
205267
205365
|
static fromJSON(json, defaultValRadians) {
|
|
205268
205366
|
const val = new Angle();
|
|
205269
205367
|
val.setFromJSON(json, defaultValRadians);
|
|
@@ -205318,21 +205416,15 @@ class Angle {
|
|
|
205318
205416
|
// all larger radians reference from 360 degrees (2PI)
|
|
205319
205417
|
return 360.0 + 180 * ((radians - 2.0 * pi) / pi);
|
|
205320
205418
|
}
|
|
205321
|
-
/**
|
|
205322
|
-
* Return the cosine of this Angle object's angle.
|
|
205323
|
-
*/
|
|
205419
|
+
/** Return the cosine of this Angle object's angle */
|
|
205324
205420
|
cos() {
|
|
205325
205421
|
return Math.cos(this._radians);
|
|
205326
205422
|
}
|
|
205327
|
-
/**
|
|
205328
|
-
* Return the sine of this Angle object's angle.
|
|
205329
|
-
*/
|
|
205423
|
+
/** Return the sine of this Angle object's angle */
|
|
205330
205424
|
sin() {
|
|
205331
205425
|
return Math.sin(this._radians);
|
|
205332
205426
|
}
|
|
205333
|
-
/**
|
|
205334
|
-
* Return the tangent of this Angle object's angle.
|
|
205335
|
-
*/
|
|
205427
|
+
/** Return the tangent of this Angle object's angle */
|
|
205336
205428
|
tan() {
|
|
205337
205429
|
return Math.tan(this._radians);
|
|
205338
205430
|
}
|
|
@@ -205344,11 +205436,11 @@ class Angle {
|
|
|
205344
205436
|
static isHalfCircleRadians(radians) {
|
|
205345
205437
|
return Math.abs(Math.abs(radians) - Math.PI) <= _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallAngleRadians;
|
|
205346
205438
|
}
|
|
205347
|
-
/**
|
|
205439
|
+
/** Test if the angle is a full circle */
|
|
205348
205440
|
get isFullCircle() {
|
|
205349
205441
|
return Angle.isFullCircleRadians(this._radians);
|
|
205350
205442
|
}
|
|
205351
|
-
/**
|
|
205443
|
+
/** Test if the angle is a half circle (in either direction) */
|
|
205352
205444
|
get isHalfCircle() {
|
|
205353
205445
|
return Angle.isHalfCircleRadians(this._radians);
|
|
205354
205446
|
}
|
|
@@ -205417,7 +205509,7 @@ class Angle {
|
|
|
205417
205509
|
// fall through for NaN disaster.
|
|
205418
205510
|
return 0;
|
|
205419
205511
|
}
|
|
205420
|
-
/**
|
|
205512
|
+
/** Return a (newly allocated) Angle object with value 0 radians */
|
|
205421
205513
|
static zero() {
|
|
205422
205514
|
return new Angle(0);
|
|
205423
205515
|
}
|
|
@@ -205571,19 +205663,19 @@ class Angle {
|
|
|
205571
205663
|
return value;
|
|
205572
205664
|
}
|
|
205573
205665
|
/**
|
|
205574
|
-
|
|
205575
|
-
|
|
205576
|
-
|
|
205577
|
-
|
|
205578
|
-
|
|
205579
|
-
|
|
205580
|
-
|
|
205581
|
-
|
|
205582
|
-
|
|
205583
|
-
|
|
205584
|
-
|
|
205585
|
-
|
|
205586
|
-
|
|
205666
|
+
* Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
|
|
205667
|
+
* an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
|
|
205668
|
+
* half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
|
|
205669
|
+
* * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
|
|
205670
|
+
* * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
|
|
205671
|
+
* perpendicular to the ellipse.
|
|
205672
|
+
* * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
|
|
205673
|
+
* implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
|
|
205674
|
+
* math details can be found at docs/learning/geometry/Angle.md
|
|
205675
|
+
* @param dotUU dot product of vectorU with itself
|
|
205676
|
+
* @param dotVV dot product of vectorV with itself
|
|
205677
|
+
* @param dotUV dot product of vectorU with vectorV
|
|
205678
|
+
*/
|
|
205587
205679
|
static dotProductsToHalfAngleTrigValues(dotUU, dotVV, dotUV, favorZero = true) {
|
|
205588
205680
|
const cos2t0 = dotUU - dotVV;
|
|
205589
205681
|
const sin2t0 = 2.0 * dotUV;
|
|
@@ -205592,9 +205684,8 @@ class Angle {
|
|
|
205592
205684
|
return Angle.trigValuesToHalfAngleTrigValues(cos2t0, sin2t0);
|
|
205593
205685
|
}
|
|
205594
205686
|
/**
|
|
205595
|
-
*
|
|
205687
|
+
* Returns the angle between two vectors, with the vectors given as xyz components
|
|
205596
205688
|
* * The returned angle is between 0 and PI
|
|
205597
|
-
*
|
|
205598
205689
|
* @param ux x component of vector u
|
|
205599
205690
|
* @param uy y component of vector u
|
|
205600
205691
|
* @param uz z component of vector u
|
|
@@ -205607,7 +205698,8 @@ class Angle {
|
|
|
205607
205698
|
return Math.atan2(_Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductMagnitude(ux, uy, uz, vx, vy, vz), uDotV);
|
|
205608
205699
|
}
|
|
205609
205700
|
/**
|
|
205610
|
-
*
|
|
205701
|
+
* Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve
|
|
205702
|
+
* angle to a full 2PI range.
|
|
205611
205703
|
* * The returned angle is (-PI < radians <= PI) or (0 <= radians < 2 * PI)
|
|
205612
205704
|
* * The angle is in the plane of the U and V vectors.
|
|
205613
205705
|
* * The upVector determines a positive side of the plane but need not be strictly perpendicular to the plane.
|
|
@@ -205621,7 +205713,8 @@ class Angle {
|
|
|
205621
205713
|
* @param upVectorX x component of vector to positive side of plane.
|
|
205622
205714
|
* @param upVectorY y component of vector to positive side of plane.
|
|
205623
205715
|
* @param upVectorZ z component of vector to positive side of plane.
|
|
205624
|
-
* @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI).
|
|
205716
|
+
* @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return
|
|
205717
|
+
* signed (-PI < radians <= PI)
|
|
205625
205718
|
*/
|
|
205626
205719
|
static orientedRadiansBetweenVectorsXYZ(ux, uy, uz, vx, vy, vz, upVectorX, upVectorY, upVectorZ, adjustToPositive = false) {
|
|
205627
205720
|
const uDotV = ux * vx + uy * vy + uz * vz;
|
|
@@ -205632,8 +205725,8 @@ class Angle {
|
|
|
205632
205725
|
const crossMagnitude = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.hypotenuseXYZ(wx, wy, wz);
|
|
205633
205726
|
if (upDotW < 0.0) {
|
|
205634
205727
|
if (adjustToPositive) {
|
|
205635
|
-
// The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as
|
|
205636
|
-
// This gives the smoothest numerical transition passing PI.
|
|
205728
|
+
// The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as
|
|
205729
|
+
// addition to PI. This gives the smoothest numerical transition passing PI.
|
|
205637
205730
|
return Math.PI + Math.atan2(crossMagnitude, -uDotV);
|
|
205638
205731
|
}
|
|
205639
205732
|
else {
|
|
@@ -205748,7 +205841,8 @@ class AngleSweep {
|
|
|
205748
205841
|
get endAngle() {
|
|
205749
205842
|
return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(this._radians1);
|
|
205750
205843
|
}
|
|
205751
|
-
/**
|
|
205844
|
+
/**
|
|
205845
|
+
* Create a sweep as one of
|
|
205752
205846
|
* * A clone of a given sweep
|
|
205753
205847
|
* * 0 to given angle
|
|
205754
205848
|
* * full circle if no arg given (sweep 0 to 360 degrees)
|
|
@@ -205760,7 +205854,8 @@ class AngleSweep {
|
|
|
205760
205854
|
return new AngleSweep(0, data.radians);
|
|
205761
205855
|
return AngleSweep.create360();
|
|
205762
205856
|
}
|
|
205763
|
-
/**
|
|
205857
|
+
/**
|
|
205858
|
+
* (private) constructor with start and end angles in radians.
|
|
205764
205859
|
* * Use explicitly named static methods to clarify intent and units of inputs:
|
|
205765
205860
|
*
|
|
205766
205861
|
* * createStartEndRadians (startRadians:number, endRadians:number)
|
|
@@ -205775,9 +205870,9 @@ class AngleSweep {
|
|
|
205775
205870
|
this._radians1 = endRadians;
|
|
205776
205871
|
}
|
|
205777
205872
|
/**
|
|
205778
|
-
*
|
|
205873
|
+
* Directly set the start and end angles in radians
|
|
205779
205874
|
* * If the difference between startRadians and endRadians is greater than 360, the function limits the angle sweep to 360.
|
|
205780
|
-
|
|
205875
|
+
*/
|
|
205781
205876
|
setStartEndRadians(startRadians = 0, endRadians = 2.0 * Math.PI) {
|
|
205782
205877
|
const delta = endRadians - startRadians;
|
|
205783
205878
|
if (_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isFullCircleRadians(delta)) {
|
|
@@ -205786,14 +205881,14 @@ class AngleSweep {
|
|
|
205786
205881
|
this._radians0 = startRadians;
|
|
205787
205882
|
this._radians1 = endRadians;
|
|
205788
205883
|
}
|
|
205789
|
-
/**
|
|
205884
|
+
/** Directly set the start and end angles in degrees */
|
|
205790
205885
|
setStartEndDegrees(startDegrees = 0, endDegrees = 360.0) {
|
|
205791
205886
|
this.setStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(endDegrees));
|
|
205792
205887
|
}
|
|
205793
205888
|
/**
|
|
205794
|
-
*
|
|
205889
|
+
* Create an AngleSweep from start and end angles given in radians.
|
|
205795
205890
|
* * If the difference between startRadians and endRadians is greater than 360, the function limits the angle sweep to 360.
|
|
205796
|
-
|
|
205891
|
+
*/
|
|
205797
205892
|
static createStartEndRadians(startRadians = 0, endRadians = 2.0 * Math.PI, result) {
|
|
205798
205893
|
result = result ? result : new AngleSweep();
|
|
205799
205894
|
result.setStartEndRadians(startRadians, endRadians);
|
|
@@ -205803,23 +205898,23 @@ class AngleSweep {
|
|
|
205803
205898
|
cloneMinusRadians(radians) {
|
|
205804
205899
|
return new AngleSweep(this._radians0 - radians, this._radians1 - radians);
|
|
205805
205900
|
}
|
|
205806
|
-
/**
|
|
205901
|
+
/** Create an AngleSweep from start and end angles given in degrees. */
|
|
205807
205902
|
static createStartEndDegrees(startDegrees = 0, endDegrees = 360, result) {
|
|
205808
205903
|
return AngleSweep.createStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(endDegrees), result);
|
|
205809
205904
|
}
|
|
205810
|
-
/**
|
|
205905
|
+
/** Create an angle sweep from strongly typed start and end angles */
|
|
205811
205906
|
static createStartEnd(startAngle, endAngle, result) {
|
|
205812
205907
|
result = result ? result : new AngleSweep();
|
|
205813
205908
|
result.setStartEndRadians(startAngle.radians, endAngle.radians);
|
|
205814
205909
|
return result;
|
|
205815
205910
|
}
|
|
205816
|
-
/**
|
|
205911
|
+
/** Create an AngleSweep from start and end angles given in radians. */
|
|
205817
205912
|
static createStartSweepRadians(startRadians = 0, sweepRadians = Math.PI, result) {
|
|
205818
205913
|
result = result ? result : new AngleSweep();
|
|
205819
205914
|
result.setStartEndRadians(startRadians, startRadians + sweepRadians);
|
|
205820
205915
|
return result;
|
|
205821
205916
|
}
|
|
205822
|
-
/**
|
|
205917
|
+
/** Create an AngleSweep from start and sweep given in degrees. */
|
|
205823
205918
|
static createStartSweepDegrees(startDegrees = 0, sweepDegrees = 360, result) {
|
|
205824
205919
|
return AngleSweep.createStartEndRadians(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.degreesToRadians(startDegrees + sweepDegrees), result);
|
|
205825
205920
|
}
|
|
@@ -205831,17 +205926,17 @@ class AngleSweep {
|
|
|
205831
205926
|
interpolate(fraction, other) {
|
|
205832
205927
|
return new AngleSweep(_Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.interpolate(this._radians0, fraction, other._radians0), _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.interpolate(this._radians1, fraction, other._radians1));
|
|
205833
205928
|
}
|
|
205834
|
-
/**
|
|
205929
|
+
/** Copy from other AngleSweep. */
|
|
205835
205930
|
setFrom(other) {
|
|
205836
205931
|
this._radians0 = other._radians0;
|
|
205837
205932
|
this._radians1 = other._radians1;
|
|
205838
205933
|
}
|
|
205839
|
-
/**
|
|
205934
|
+
/** Create a full circle sweep (CCW). startRadians defaults to 0 */
|
|
205840
205935
|
static create360(startRadians) {
|
|
205841
205936
|
startRadians = startRadians ? startRadians : 0.0;
|
|
205842
205937
|
return new AngleSweep(startRadians, startRadians + 2.0 * Math.PI);
|
|
205843
205938
|
}
|
|
205844
|
-
/**
|
|
205939
|
+
/** Create a sweep from the south pole to the north pole (-90 to +90). */
|
|
205845
205940
|
static createFullLatitude() {
|
|
205846
205941
|
return AngleSweep.createStartEndRadians(-0.5 * Math.PI, 0.5 * Math.PI);
|
|
205847
205942
|
}
|
|
@@ -205851,7 +205946,8 @@ class AngleSweep {
|
|
|
205851
205946
|
this._radians0 = this._radians1;
|
|
205852
205947
|
this._radians1 = tmp;
|
|
205853
205948
|
}
|
|
205854
|
-
/**
|
|
205949
|
+
/**
|
|
205950
|
+
* Return a sweep for the "other" part of the circle.
|
|
205855
205951
|
* @param reverseDirection true to move backwards (CW) from start to end, false to more forwards (CCW) from start to end.
|
|
205856
205952
|
*/
|
|
205857
205953
|
cloneComplement(reverseDirection = false, result) {
|
|
@@ -205861,9 +205957,7 @@ class AngleSweep {
|
|
|
205861
205957
|
else
|
|
205862
205958
|
return AngleSweep.createStartEndRadians(this.endRadians, this.startRadians + s * Math.PI, result);
|
|
205863
205959
|
}
|
|
205864
|
-
/**
|
|
205865
|
-
* Restrict start and end angles into the range (-90,+90) in degrees.
|
|
205866
|
-
* */
|
|
205960
|
+
/** Restrict start and end angles into the range (-90,+90) in degrees */
|
|
205867
205961
|
capLatitudeInPlace() {
|
|
205868
205962
|
const limit = 0.5 * Math.PI;
|
|
205869
205963
|
this._radians0 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.clampToStartEnd(this._radians0, -limit, limit);
|
|
@@ -205883,7 +205977,7 @@ class AngleSweep {
|
|
|
205883
205977
|
return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians0, -a)
|
|
205884
205978
|
&& _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians1, a);
|
|
205885
205979
|
}
|
|
205886
|
-
/**
|
|
205980
|
+
/** Return a clone of this sweep. */
|
|
205887
205981
|
clone() {
|
|
205888
205982
|
return new AngleSweep(this._radians0, this._radians1);
|
|
205889
205983
|
}
|
|
@@ -205897,15 +205991,16 @@ class AngleSweep {
|
|
|
205897
205991
|
fractionToAngle(fraction) {
|
|
205898
205992
|
return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(this.fractionToRadians(fraction));
|
|
205899
205993
|
}
|
|
205900
|
-
/**
|
|
205994
|
+
/**
|
|
205995
|
+
* Return 2PI divided by the sweep radians (i.e. 360 degrees divided by sweep angle).
|
|
205901
205996
|
* * This is the number of fractional intervals required to cover a whole circle.
|
|
205902
205997
|
*/
|
|
205903
205998
|
fractionPeriod() {
|
|
205904
205999
|
return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(Math.PI * 2.0, Math.abs(this._radians1 - this._radians0), 1.0);
|
|
205905
206000
|
}
|
|
205906
|
-
/**
|
|
206001
|
+
/**
|
|
206002
|
+
* Return the fractionalized position of the given angle (as Angle) computed without consideration of
|
|
205907
206003
|
* 2PI period and without consideration of angle sweep direction (CW or CCW).
|
|
205908
|
-
*
|
|
205909
206004
|
* * the start angle is at fraction 0
|
|
205910
206005
|
* * the end angle is at fraction 1
|
|
205911
206006
|
* * interior angles are between 0 and 1
|
|
@@ -205918,8 +206013,8 @@ class AngleSweep {
|
|
|
205918
206013
|
angleToUnboundedFraction(theta) {
|
|
205919
206014
|
return _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(theta.radians - this._radians0, this._radians1 - this._radians0, 1.0);
|
|
205920
206015
|
}
|
|
205921
|
-
/**
|
|
205922
|
-
*
|
|
206016
|
+
/**
|
|
206017
|
+
* Return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
|
|
205923
206018
|
* * consider radians0 as `start` angle of the sweep and radians1 as `end` angle of the sweep
|
|
205924
206019
|
* * fraction is always positive
|
|
205925
206020
|
* * the start angle is at fraction 0
|
|
@@ -205944,8 +206039,8 @@ class AngleSweep {
|
|
|
205944
206039
|
const fraction2 = _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(delta2, -sweep, zeroSweepDefault);
|
|
205945
206040
|
return fraction2;
|
|
205946
206041
|
}
|
|
205947
|
-
/**
|
|
205948
|
-
*
|
|
206042
|
+
/**
|
|
206043
|
+
* Return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
|
|
205949
206044
|
* * fraction is always positive
|
|
205950
206045
|
* * the start angle is at fraction 0
|
|
205951
206046
|
* * the end angle is at fraction 1
|
|
@@ -205956,8 +206051,8 @@ class AngleSweep {
|
|
|
205956
206051
|
radiansToPositivePeriodicFraction(radians, zeroSweepDefault = 0.0) {
|
|
205957
206052
|
return AngleSweep.radiansToPositivePeriodicFractionStartEnd(radians, this._radians0, this._radians1, zeroSweepDefault);
|
|
205958
206053
|
}
|
|
205959
|
-
/**
|
|
205960
|
-
*
|
|
206054
|
+
/**
|
|
206055
|
+
* Return the fractionalized position of the given angle (as Angle), computed with consideration of 2PI period.
|
|
205961
206056
|
* * fraction is always positive
|
|
205962
206057
|
* * the start angle is at fraction 0
|
|
205963
206058
|
* * the end angle is at fraction 1
|
|
@@ -205968,8 +206063,8 @@ class AngleSweep {
|
|
|
205968
206063
|
angleToPositivePeriodicFraction(theta) {
|
|
205969
206064
|
return this.radiansToPositivePeriodicFraction(theta.radians);
|
|
205970
206065
|
}
|
|
205971
|
-
/**
|
|
205972
|
-
*
|
|
206066
|
+
/**
|
|
206067
|
+
* Return the fractionalized position of the given array of angles (as radian), computed with consideration of 2PI period.
|
|
205973
206068
|
* * fraction is always positive
|
|
205974
206069
|
* * the start angle is at fraction 0
|
|
205975
206070
|
* * the end angle is at fraction 1
|
|
@@ -205983,9 +206078,9 @@ class AngleSweep {
|
|
|
205983
206078
|
data.reassign(i, this.radiansToPositivePeriodicFraction(data.atUncheckedIndex(i)));
|
|
205984
206079
|
}
|
|
205985
206080
|
}
|
|
205986
|
-
/**
|
|
206081
|
+
/**
|
|
206082
|
+
* Return the fractionalized position of the given angle (as radian) computed with consideration of
|
|
205987
206083
|
* 2PI period and with consideration of angle sweep direction (CW or CCW).
|
|
205988
|
-
*
|
|
205989
206084
|
* * the start angle is at fraction 0
|
|
205990
206085
|
* * the end angle is at fraction 1
|
|
205991
206086
|
* * interior angles are between 0 and 1
|
|
@@ -206009,9 +206104,9 @@ class AngleSweep {
|
|
|
206009
206104
|
const fraction = 0.5 + _Geometry__WEBPACK_IMPORTED_MODULE_1__.Geometry.safeDivideFraction(delta2, -sweep, 0.0);
|
|
206010
206105
|
return fraction;
|
|
206011
206106
|
}
|
|
206012
|
-
/**
|
|
206107
|
+
/**
|
|
206108
|
+
* Return the fractionalized position of the given angle (as Angle) computed with consideration of
|
|
206013
206109
|
* 2PI period and with consideration of angle sweep direction (CW or CCW).
|
|
206014
|
-
*
|
|
206015
206110
|
* * the start angle is at fraction 0
|
|
206016
206111
|
* * the end angle is at fraction 1
|
|
206017
206112
|
* * interior angles are between 0 and 1
|
|
@@ -206022,7 +206117,7 @@ class AngleSweep {
|
|
|
206022
206117
|
angleToSignedPeriodicFraction(theta) {
|
|
206023
206118
|
return this.radiansToSignedPeriodicFraction(theta.radians);
|
|
206024
206119
|
}
|
|
206025
|
-
/**
|
|
206120
|
+
/** Test if the given angle (as radians) is within sweep (between radians0 and radians1) */
|
|
206026
206121
|
static isRadiansInStartEnd(radians, radians0, radians1, allowPeriodShift = true) {
|
|
206027
206122
|
const delta0 = radians - radians0;
|
|
206028
206123
|
const delta1 = radians - radians1;
|
|
@@ -206032,16 +206127,16 @@ class AngleSweep {
|
|
|
206032
206127
|
return allowPeriodShift ? _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(radians, radians0) : _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(radians, radians0);
|
|
206033
206128
|
return allowPeriodShift ? this.radiansToPositivePeriodicFractionStartEnd(radians, radians0, radians1, 1000.0) <= 1.0 : false;
|
|
206034
206129
|
}
|
|
206035
|
-
/**
|
|
206130
|
+
/** Test if the given angle (as radians) is within sweep */
|
|
206036
206131
|
isRadiansInSweep(radians, allowPeriodShift = true) {
|
|
206037
206132
|
return AngleSweep.isRadiansInStartEnd(radians, this.startRadians, this.endRadians, allowPeriodShift);
|
|
206038
206133
|
}
|
|
206039
|
-
/**
|
|
206134
|
+
/** Test if the given angle (as Angle) is within the sweep */
|
|
206040
206135
|
isAngleInSweep(angle) {
|
|
206041
206136
|
return this.isRadiansInSweep(angle.radians);
|
|
206042
206137
|
}
|
|
206043
|
-
/**
|
|
206044
|
-
*
|
|
206138
|
+
/**
|
|
206139
|
+
* Set this AngleSweep from various sources:
|
|
206045
206140
|
* * if json is undefined, a full-circle sweep is returned.
|
|
206046
206141
|
* * If json is an AngleSweep object, it is cloned
|
|
206047
206142
|
* * If json is an array of 2 numbers, those numbers are start and end angles in degrees.
|
|
@@ -206063,7 +206158,7 @@ class AngleSweep {
|
|
|
206063
206158
|
else
|
|
206064
206159
|
this.setStartEndRadians(); // default full circle
|
|
206065
206160
|
}
|
|
206066
|
-
/**
|
|
206161
|
+
/** Create an AngleSweep from a json object. */
|
|
206067
206162
|
static fromJSON(json) {
|
|
206068
206163
|
const result = AngleSweep.create360();
|
|
206069
206164
|
result.setFromJSON(json);
|
|
@@ -206076,7 +206171,8 @@ class AngleSweep {
|
|
|
206076
206171
|
toJSON() {
|
|
206077
206172
|
return [this.startDegrees, this.endDegrees];
|
|
206078
206173
|
}
|
|
206079
|
-
/**
|
|
206174
|
+
/**
|
|
206175
|
+
* Test if this angle sweep and other angle sweep match with radians tolerance.
|
|
206080
206176
|
* * Period shifts are allowed.
|
|
206081
206177
|
*/
|
|
206082
206178
|
isAlmostEqualAllowPeriodShift(other) {
|
|
@@ -206085,14 +206181,16 @@ class AngleSweep {
|
|
|
206085
206181
|
return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians0, other._radians0)
|
|
206086
206182
|
&& _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0);
|
|
206087
206183
|
}
|
|
206088
|
-
/**
|
|
206184
|
+
/**
|
|
206185
|
+
* Test if this angle sweep and other angle sweep match with radians tolerance.
|
|
206089
206186
|
* * Period shifts are not allowed.
|
|
206090
206187
|
*/
|
|
206091
206188
|
isAlmostEqualNoPeriodShift(other) {
|
|
206092
206189
|
return _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians0, other._radians0)
|
|
206093
206190
|
&& _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.isAlmostEqualRadiansNoPeriodShift(this._radians1 - this._radians0, other._radians1 - other._radians0);
|
|
206094
206191
|
}
|
|
206095
|
-
/**
|
|
206192
|
+
/**
|
|
206193
|
+
* Test if start and end angles match with radians tolerance.
|
|
206096
206194
|
* * Period shifts are not allowed.
|
|
206097
206195
|
* * This function is equivalent to isAlmostEqualNoPeriodShift. It is present for consistency with other classes.
|
|
206098
206196
|
* However, it is recommended to use isAlmostEqualNoPeriodShift which has a clearer name.
|
|
@@ -213359,7 +213457,7 @@ class Matrix3d {
|
|
|
213359
213457
|
return undefined;
|
|
213360
213458
|
}
|
|
213361
213459
|
/**
|
|
213362
|
-
* Multiply `matrixInverse * [x,y,z]` and return result as `Point4d` the
|
|
213460
|
+
* Multiply `matrixInverse * [x,y,z]` and return result as a `Point4d` with the given weight as the last coordinate.
|
|
213363
213461
|
* * Equivalent to solving `matrix * result = [x,y,z]` for an unknown `result`.
|
|
213364
213462
|
* * Result is `undefined` if the matrix is singular (e.g. has parallel columns or a zero magnitude column)
|
|
213365
213463
|
* @return result as a Point4d with the same weight.
|
|
@@ -213495,20 +213593,17 @@ class Matrix3d {
|
|
|
213495
213593
|
}
|
|
213496
213594
|
/**
|
|
213497
213595
|
* Multiply `this` Matrix3d (considered to be a Transform with 0 `origin`) times `other` Transform.
|
|
213498
|
-
* **Note:** If `other = [B b]`, then
|
|
213499
|
-
* Then `this * other` is defined as [A*B Aa]. That's because we create a 4x4 matrix for each Transform
|
|
213500
|
-
* with the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we
|
|
213501
|
-
* multiply those two 4x4 matrixes:
|
|
213596
|
+
* * **Note:** If `this = [A 0]` and `other = [B b]`, then `this * other` is defined as [A*B Ab] because:
|
|
213502
213597
|
* ```
|
|
213503
213598
|
* equation
|
|
213504
213599
|
* \begin{matrix}
|
|
213505
|
-
* \text{
|
|
213506
|
-
* \text{
|
|
213600
|
+
* \text{this matrix }\bold{A}\text{ promoted to block Transform} & \blockTransform{A}{0} \\
|
|
213601
|
+
* \text{other Transform with `matrix` part }\bold{B}\text{ and origin part }\bold{b} & \blockTransform{B}{b}\\
|
|
213507
213602
|
* \text{product}& \blockTransform{A}{0}\blockTransform{B}{b}=\blockTransform{AB}{Ab}
|
|
213508
213603
|
* \end{matrix}
|
|
213509
213604
|
* ```
|
|
213510
213605
|
* @param other the `other` Transform to be multiplied to `this` matrix.
|
|
213511
|
-
* @param result optional preallocated result to reuse.
|
|
213606
|
+
* @param result optional preallocated `result` to reuse.
|
|
213512
213607
|
*/
|
|
213513
213608
|
multiplyMatrixTransform(other, result) {
|
|
213514
213609
|
if (!result)
|
|
@@ -214291,7 +214386,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
214291
214386
|
|
|
214292
214387
|
/* cspell:word cxcz, cxsz, cxcy, cxsy, sxcz, sxsz, sxcy, sxsy, cycz, cysz, sycz, sysz */
|
|
214293
214388
|
/**
|
|
214294
|
-
*
|
|
214389
|
+
* Represents a non-trivial rotation using three simple axis rotation angles and an order in which to apply them.
|
|
214295
214390
|
* * This class accommodates application-specific interpretation of "multiplying 3 rotation matrices" with regard to
|
|
214296
214391
|
* * Whether a "vector" is a "row" or a "column"
|
|
214297
214392
|
* * The order in which the X,Y,Z rotations are applied.
|
|
@@ -214349,7 +214444,7 @@ class OrderedRotationAngles {
|
|
|
214349
214444
|
get zRadians() {
|
|
214350
214445
|
return this._z.radians;
|
|
214351
214446
|
}
|
|
214352
|
-
/**
|
|
214447
|
+
/** The flag controlling whether vectors are treated as rows or as columns */
|
|
214353
214448
|
static get treatVectorsAsColumns() {
|
|
214354
214449
|
return OrderedRotationAngles._sTreatVectorsAsColumns;
|
|
214355
214450
|
}
|
|
@@ -214432,7 +214527,7 @@ class OrderedRotationAngles {
|
|
|
214432
214527
|
* * In the failure case the method's return value is `undefined`.
|
|
214433
214528
|
* * In the failure case, if the optional result was supplied, that result will nonetheless be filled with
|
|
214434
214529
|
* a set of angles.
|
|
214435
|
-
|
|
214530
|
+
*/
|
|
214436
214531
|
static createFromMatrix3d(matrix, order, result) {
|
|
214437
214532
|
// treat vector as columns
|
|
214438
214533
|
let m11 = matrix.coffs[0], m12 = matrix.coffs[1], m13 = matrix.coffs[2];
|
|
@@ -215229,21 +215324,19 @@ class Point2dArrayCarrier extends _IndexedXYCollection__WEBPACK_IMPORTED_MODULE_
|
|
|
215229
215324
|
return undefined;
|
|
215230
215325
|
}
|
|
215231
215326
|
/**
|
|
215232
|
-
|
|
215233
|
-
|
|
215234
|
-
|
|
215235
|
-
|
|
215236
|
-
|
|
215237
|
-
|
|
215238
|
-
|
|
215327
|
+
* Return the cross product of vectors from point at originIndex to points at indexA and indexB
|
|
215328
|
+
* @param originIndex index of origin
|
|
215329
|
+
* @param indexA index of first target within the array
|
|
215330
|
+
* @param indexB index of second target within the array
|
|
215331
|
+
* @param result caller-allocated vector.
|
|
215332
|
+
* @returns return true if indexA, indexB both valid
|
|
215333
|
+
*/
|
|
215239
215334
|
crossProductIndexIndexIndex(originIndex, indexA, indexB) {
|
|
215240
215335
|
if (this.isValidIndex(originIndex) && this.isValidIndex(indexA) && this.isValidIndex(indexB))
|
|
215241
215336
|
return _Point2dVector2d__WEBPACK_IMPORTED_MODULE_1__.XY.crossProductToPoints(this.data[originIndex], this.data[indexA], this.data[indexB]);
|
|
215242
215337
|
return undefined;
|
|
215243
215338
|
}
|
|
215244
|
-
/**
|
|
215245
|
-
* read-only property for number of XYZ in the collection.
|
|
215246
|
-
*/
|
|
215339
|
+
/** Read-only property for number of XYZ in the collection. */
|
|
215247
215340
|
get length() {
|
|
215248
215341
|
return this.data.length;
|
|
215249
215342
|
}
|
|
@@ -215289,10 +215382,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
215289
215382
|
* @module CartesianGeometry
|
|
215290
215383
|
*/
|
|
215291
215384
|
// cspell:word JSONXY
|
|
215292
|
-
// cspell:word CWXY
|
|
215385
|
+
// cspell:word CWXY CCWXY
|
|
215293
215386
|
|
|
215294
215387
|
|
|
215295
|
-
/**
|
|
215388
|
+
/**
|
|
215389
|
+
* Minimal object containing x,y and operations that are meaningful without change in both point and vector.
|
|
215296
215390
|
* * `XY` is not instantiable.
|
|
215297
215391
|
* * The derived (instantiable) classes are
|
|
215298
215392
|
* * `Point2d`
|
|
@@ -215337,11 +215431,11 @@ class XY {
|
|
|
215337
215431
|
isAlmostEqualXY(x, y, tol) {
|
|
215338
215432
|
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(this.x, x, tol) && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSameCoordinate(this.y, y, tol);
|
|
215339
215433
|
}
|
|
215340
|
-
/**
|
|
215434
|
+
/** Return a json array `[x,y]` */
|
|
215341
215435
|
toJSON() {
|
|
215342
215436
|
return [this.x, this.y];
|
|
215343
215437
|
}
|
|
215344
|
-
/**
|
|
215438
|
+
/** Return a json object `{x: 1, y:2}` */
|
|
215345
215439
|
toJSONXY() {
|
|
215346
215440
|
return { x: this.x, y: this.y };
|
|
215347
215441
|
}
|
|
@@ -215349,7 +215443,7 @@ class XY {
|
|
|
215349
215443
|
* Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
|
|
215350
215444
|
* * If no JSON input is provided, 0 would be used as default values for x and y.
|
|
215351
215445
|
* @param json the JSON input
|
|
215352
|
-
|
|
215446
|
+
*/
|
|
215353
215447
|
setFromJSON(json) {
|
|
215354
215448
|
if (Array.isArray(json)) {
|
|
215355
215449
|
this.set(json[0] || 0, json[1] || 0);
|
|
@@ -215377,17 +215471,13 @@ class XY {
|
|
|
215377
215471
|
maxDiff(other) {
|
|
215378
215472
|
return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y));
|
|
215379
215473
|
}
|
|
215380
|
-
/**
|
|
215381
|
-
* Return the x,y component corresponding to 0,1.
|
|
215382
|
-
*/
|
|
215474
|
+
/** Return the x,y component corresponding to 0,1 */
|
|
215383
215475
|
at(index) {
|
|
215384
215476
|
if (index < 0.5)
|
|
215385
215477
|
return this.x;
|
|
215386
215478
|
return this.y;
|
|
215387
215479
|
}
|
|
215388
|
-
/**
|
|
215389
|
-
* Set value at index 0 or 1.
|
|
215390
|
-
*/
|
|
215480
|
+
/** Set value at index 0 or 1 */
|
|
215391
215481
|
setAt(index, value) {
|
|
215392
215482
|
if (index < 0.5)
|
|
215393
215483
|
this.x = value;
|
|
@@ -215404,7 +215494,7 @@ class XY {
|
|
|
215404
215494
|
}
|
|
215405
215495
|
return index;
|
|
215406
215496
|
}
|
|
215407
|
-
/**
|
|
215497
|
+
/** Returns true if the x,y components are both small by metric metric tolerance */
|
|
215408
215498
|
get isAlmostZero() {
|
|
215409
215499
|
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSmallMetricDistance(this.x) && _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isSmallMetricDistance(this.y);
|
|
215410
215500
|
}
|
|
@@ -215420,11 +215510,11 @@ class XY {
|
|
|
215420
215510
|
magnitudeSquared() {
|
|
215421
215511
|
return this.x * this.x + this.y * this.y;
|
|
215422
215512
|
}
|
|
215423
|
-
/**
|
|
215513
|
+
/** Returns true if the x,y components are exactly equal. */
|
|
215424
215514
|
isExactEqual(other) {
|
|
215425
215515
|
return this.x === other.x && this.y === other.y;
|
|
215426
215516
|
}
|
|
215427
|
-
/**
|
|
215517
|
+
/** Returns true if x,y match `other` within metric tolerance */
|
|
215428
215518
|
isAlmostEqualMetric(other, distanceTol = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance) {
|
|
215429
215519
|
return this.maxDiff(other) <= distanceTol;
|
|
215430
215520
|
}
|
|
@@ -215436,7 +215526,7 @@ class XY {
|
|
|
215436
215526
|
unitVectorTo(other, result) {
|
|
215437
215527
|
return this.vectorTo(other, result).normalize(result);
|
|
215438
215528
|
}
|
|
215439
|
-
/**
|
|
215529
|
+
/** Cross product of vectors from origin to targets */
|
|
215440
215530
|
static crossProductToPoints(origin, targetA, targetB) {
|
|
215441
215531
|
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductXYXY(targetA.x - origin.x, targetA.y - origin.y, targetB.x - origin.x, targetB.y - origin.y);
|
|
215442
215532
|
}
|
|
@@ -215449,7 +215539,7 @@ class Point2d extends XY {
|
|
|
215449
215539
|
constructor(x = 0, y = 0) {
|
|
215450
215540
|
super(x, y);
|
|
215451
215541
|
}
|
|
215452
|
-
/**
|
|
215542
|
+
/** Return a new Point2d with x,y coordinates from this. */
|
|
215453
215543
|
clone(result) {
|
|
215454
215544
|
return Point2d.create(this.x, this.y, result);
|
|
215455
215545
|
}
|
|
@@ -215471,7 +215561,7 @@ class Point2d extends XY {
|
|
|
215471
215561
|
* Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
|
|
215472
215562
|
* * If no JSON input is provided, 0 would be used as default values for x and y.
|
|
215473
215563
|
* @param json the JSON input
|
|
215474
|
-
|
|
215564
|
+
*/
|
|
215475
215565
|
static fromJSON(json) {
|
|
215476
215566
|
const val = new Point2d();
|
|
215477
215567
|
val.setFromJSON(json);
|
|
@@ -215487,7 +215577,8 @@ class Point2d extends XY {
|
|
|
215487
215577
|
static createZero(result) {
|
|
215488
215578
|
return Point2d.create(0, 0, result);
|
|
215489
215579
|
}
|
|
215490
|
-
/**
|
|
215580
|
+
/**
|
|
215581
|
+
* Starting at this point, move along vector by tangentFraction of the vector length, and then
|
|
215491
215582
|
* to the left by leftFraction of the perpendicular vector length.
|
|
215492
215583
|
* @param tangentFraction distance to move along the vector, as a fraction of vector
|
|
215493
215584
|
* @param leftFraction distance to move perpendicular to the vector, as a fraction of the rotated vector
|
|
@@ -215498,7 +215589,8 @@ class Point2d extends XY {
|
|
|
215498
215589
|
const dy = vector.y;
|
|
215499
215590
|
return Point2d.create(this.x + tangentFraction * dx - leftFraction * dy, this.y + tangentFraction * dy + leftFraction * dx);
|
|
215500
215591
|
}
|
|
215501
|
-
/**
|
|
215592
|
+
/**
|
|
215593
|
+
* Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
|
|
215502
215594
|
* along the xy perpendicular of the vector between the points.
|
|
215503
215595
|
*/
|
|
215504
215596
|
forwardLeftInterpolate(tangentFraction, leftFraction, point) {
|
|
@@ -215561,7 +215653,8 @@ class Point2d extends XY {
|
|
|
215561
215653
|
const y2 = target2.y - this.y;
|
|
215562
215654
|
return x1 * y2 - y1 * x2;
|
|
215563
215655
|
}
|
|
215564
|
-
/**
|
|
215656
|
+
/**
|
|
215657
|
+
* Return the fractional coordinate of the projection of this instance x,y onto the
|
|
215565
215658
|
* line from startPoint to endPoint.
|
|
215566
215659
|
* @param startPoint start point of line
|
|
215567
215660
|
* @param endPoint end point of line
|
|
@@ -215575,7 +215668,8 @@ class Point2d extends XY {
|
|
|
215575
215668
|
return numerator / denominator;
|
|
215576
215669
|
}
|
|
215577
215670
|
}
|
|
215578
|
-
/**
|
|
215671
|
+
/**
|
|
215672
|
+
* 2D vector with `x`,`y` as properties
|
|
215579
215673
|
* @public
|
|
215580
215674
|
*/
|
|
215581
215675
|
class Vector2d extends XY {
|
|
@@ -215613,7 +215707,7 @@ class Vector2d extends XY {
|
|
|
215613
215707
|
static createZero(result) {
|
|
215614
215708
|
return Vector2d.create(0, 0, result);
|
|
215615
215709
|
}
|
|
215616
|
-
/**
|
|
215710
|
+
/** Copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
|
|
215617
215711
|
static createFrom(data, result) {
|
|
215618
215712
|
if (data instanceof Float64Array) {
|
|
215619
215713
|
if (data.length >= 2)
|
|
@@ -215628,7 +215722,7 @@ class Vector2d extends XY {
|
|
|
215628
215722
|
* Set x and y from a JSON input such as `[1,2]` or `{x:1, y:2}`
|
|
215629
215723
|
* * If no JSON input is provided, 0 would be used as default values for x and y.
|
|
215630
215724
|
* @param json the JSON input
|
|
215631
|
-
|
|
215725
|
+
*/
|
|
215632
215726
|
static fromJSON(json) {
|
|
215633
215727
|
const val = new Vector2d();
|
|
215634
215728
|
val.setFromJSON(json);
|
|
@@ -215660,7 +215754,8 @@ class Vector2d extends XY {
|
|
|
215660
215754
|
}
|
|
215661
215755
|
return undefined;
|
|
215662
215756
|
}
|
|
215663
|
-
/**
|
|
215757
|
+
/**
|
|
215758
|
+
* Return a (new or optionally reused) vector which is `this` divided by `denominator`
|
|
215664
215759
|
* * return undefined if denominator is zero.
|
|
215665
215760
|
*/
|
|
215666
215761
|
safeDivideOrNull(denominator, result) {
|
|
@@ -215681,7 +215776,7 @@ class Vector2d extends XY {
|
|
|
215681
215776
|
* it's returning the length of the projection as a fraction of the target magnitude.
|
|
215682
215777
|
* @param target the target vector
|
|
215683
215778
|
* @param defaultFraction the returned value in case magnitude square of target vector is very small
|
|
215684
|
-
|
|
215779
|
+
*/
|
|
215685
215780
|
fractionOfProjectionToVector(target, defaultFraction) {
|
|
215686
215781
|
/*
|
|
215687
215782
|
* projection length is (this.target)/||target||
|
|
@@ -215736,7 +215831,7 @@ class Vector2d extends XY {
|
|
|
215736
215831
|
}
|
|
215737
215832
|
return result;
|
|
215738
215833
|
}
|
|
215739
|
-
/**
|
|
215834
|
+
/** Return a new Vector2d rotated CCW by given angle */
|
|
215740
215835
|
rotateXY(angle, result) {
|
|
215741
215836
|
const s = angle.sin();
|
|
215742
215837
|
const c = angle.cos();
|
|
@@ -215748,7 +215843,8 @@ class Vector2d extends XY {
|
|
|
215748
215843
|
result.y = xx * s + yy * c;
|
|
215749
215844
|
return result;
|
|
215750
215845
|
}
|
|
215751
|
-
/**
|
|
215846
|
+
/**
|
|
215847
|
+
* Return a vector computed at fractional position between this vector and vectorB
|
|
215752
215848
|
* @param fraction fractional position. 0 is at `this`. 1 is at `vectorB`.
|
|
215753
215849
|
* True fractions are "between", negatives are "before this", beyond 1 is "beyond vectorB".
|
|
215754
215850
|
* @param vectorB second vector
|
|
@@ -215771,14 +215867,14 @@ class Vector2d extends XY {
|
|
|
215771
215867
|
}
|
|
215772
215868
|
return result;
|
|
215773
215869
|
}
|
|
215774
|
-
/**
|
|
215870
|
+
/** Return {this + vector}. */
|
|
215775
215871
|
plus(vector, result) {
|
|
215776
215872
|
result = result ? result : new Vector2d();
|
|
215777
215873
|
result.x = this.x + vector.x;
|
|
215778
215874
|
result.y = this.y + vector.y;
|
|
215779
215875
|
return result;
|
|
215780
215876
|
}
|
|
215781
|
-
/**
|
|
215877
|
+
/** Return {this - vector}. */
|
|
215782
215878
|
minus(vector, result) {
|
|
215783
215879
|
result = result ? result : new Vector2d();
|
|
215784
215880
|
result.x = this.x - vector.x;
|
|
@@ -215813,34 +215909,34 @@ class Vector2d extends XY {
|
|
|
215813
215909
|
result.y = this.y * scale;
|
|
215814
215910
|
return result;
|
|
215815
215911
|
}
|
|
215816
|
-
/**
|
|
215912
|
+
/** Return a vector parallel to this but with specified length */
|
|
215817
215913
|
scaleToLength(length, result) {
|
|
215818
215914
|
const mag = _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.correctSmallMetricDistance(this.magnitude());
|
|
215819
215915
|
if (mag === 0)
|
|
215820
215916
|
return undefined;
|
|
215821
215917
|
return this.scale(length / mag, result);
|
|
215822
215918
|
}
|
|
215823
|
-
/**
|
|
215919
|
+
/** Return the dot product of this with vectorB */
|
|
215824
215920
|
dotProduct(vectorB) {
|
|
215825
215921
|
return this.x * vectorB.x + this.y * vectorB.y;
|
|
215826
215922
|
}
|
|
215827
|
-
/**
|
|
215923
|
+
/** Dot product with vector from pointA to pointB */
|
|
215828
215924
|
dotProductStartEnd(pointA, pointB) {
|
|
215829
215925
|
return this.x * (pointB.x - pointA.x) + this.y * (pointB.y - pointA.y);
|
|
215830
215926
|
}
|
|
215831
|
-
/**
|
|
215927
|
+
/** Vector cross product {this CROSS vectorB} */
|
|
215832
215928
|
crossProduct(vectorB) {
|
|
215833
215929
|
return this.x * vectorB.y - this.y * vectorB.x;
|
|
215834
215930
|
}
|
|
215835
215931
|
/**
|
|
215836
|
-
*
|
|
215932
|
+
* Return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
|
|
215837
215933
|
* This is positive if the shortest turn is counterclockwise, negative if clockwise.
|
|
215838
215934
|
*/
|
|
215839
215935
|
radiansTo(vectorB) {
|
|
215840
215936
|
return Math.atan2(this.crossProduct(vectorB), this.dotProduct(vectorB));
|
|
215841
215937
|
}
|
|
215842
215938
|
/**
|
|
215843
|
-
*
|
|
215939
|
+
* Return the (strongly typed) signed angle from this to vectorB.
|
|
215844
215940
|
* This is positive if the shortest turn is counterclockwise, negative if clockwise.
|
|
215845
215941
|
*/
|
|
215846
215942
|
angleTo(vectorB) {
|
|
@@ -215928,7 +216024,7 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
|
|
|
215928
216024
|
super();
|
|
215929
216025
|
this.data = data;
|
|
215930
216026
|
}
|
|
215931
|
-
/**
|
|
216027
|
+
/** Test if `index` is a valid index into the array. */
|
|
215932
216028
|
isValidIndex(index) {
|
|
215933
216029
|
return index >= 0 && index < this.data.length;
|
|
215934
216030
|
}
|
|
@@ -215970,23 +216066,23 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
|
|
|
215970
216066
|
return undefined;
|
|
215971
216067
|
}
|
|
215972
216068
|
/**
|
|
215973
|
-
*
|
|
216069
|
+
* Access x of indexed point
|
|
215974
216070
|
* * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
|
|
215975
|
-
|
|
216071
|
+
*/
|
|
215976
216072
|
getXAtUncheckedPointIndex(pointIndex) {
|
|
215977
216073
|
return this.data[pointIndex].x;
|
|
215978
216074
|
}
|
|
215979
216075
|
/**
|
|
215980
|
-
*
|
|
216076
|
+
* Access y of indexed point
|
|
215981
216077
|
* * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
|
|
215982
|
-
|
|
216078
|
+
*/
|
|
215983
216079
|
getYAtUncheckedPointIndex(pointIndex) {
|
|
215984
216080
|
return this.data[pointIndex].y;
|
|
215985
216081
|
}
|
|
215986
216082
|
/**
|
|
215987
|
-
*
|
|
216083
|
+
* Access z of indexed point
|
|
215988
216084
|
* * WARNING: make sure `pointIndex` is a valid index, otherwise, you get random results
|
|
215989
|
-
|
|
216085
|
+
*/
|
|
215990
216086
|
getZAtUncheckedPointIndex(pointIndex) {
|
|
215991
216087
|
return this.data[pointIndex].z;
|
|
215992
216088
|
}
|
|
@@ -216053,10 +216149,7 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
|
|
|
216053
216149
|
if (this.isValidIndex(originIndex) && this.isValidIndex(indexA) && this.isValidIndex(indexB))
|
|
216054
216150
|
result.addCrossProductToTargetsInPlace(data[originIndex].x, data[originIndex].y, data[originIndex].z, data[indexA].x, data[indexA].y, data[indexA].z, data[indexB].x, data[indexB].y, data[indexB].z);
|
|
216055
216151
|
}
|
|
216056
|
-
/**
|
|
216057
|
-
* Accumulate scale times the x,y,z values at index to the sum.
|
|
216058
|
-
* No action if index is out of bounds.
|
|
216059
|
-
*/
|
|
216152
|
+
/** Accumulate scale times the x,y,z values at index to the sum. No action if index is out of bounds */
|
|
216060
216153
|
accumulateScaledXYZ(index, scale, sum) {
|
|
216061
216154
|
if (this.isValidIndex(index)) {
|
|
216062
216155
|
const point = this.data[index];
|
|
@@ -216065,20 +216158,19 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
|
|
|
216065
216158
|
sum.z += scale * point.z;
|
|
216066
216159
|
}
|
|
216067
216160
|
}
|
|
216068
|
-
/**
|
|
216069
|
-
* read-only property for number of XYZ in the collection.
|
|
216070
|
-
*/
|
|
216161
|
+
/** Read-only property for number of XYZ in the collection */
|
|
216071
216162
|
get length() {
|
|
216072
216163
|
return this.data.length;
|
|
216073
216164
|
}
|
|
216074
|
-
/**
|
|
216165
|
+
/**
|
|
216166
|
+
* Push a (clone of) point onto the collection
|
|
216075
216167
|
* * point itself is not pushed -- xyz data is extracted into the native form of the collection.
|
|
216076
216168
|
*/
|
|
216077
216169
|
push(data) {
|
|
216078
216170
|
this.data.push(data.clone());
|
|
216079
216171
|
}
|
|
216080
216172
|
/**
|
|
216081
|
-
*
|
|
216173
|
+
* Push a new point (given by coordinates) onto the collection
|
|
216082
216174
|
* @param x x coordinate
|
|
216083
216175
|
* @param y y coordinate
|
|
216084
216176
|
* @param z z coordinate
|
|
@@ -216086,26 +216178,26 @@ class Point3dArrayCarrier extends _IndexedXYZCollection__WEBPACK_IMPORTED_MODULE
|
|
|
216086
216178
|
pushXYZ(x, y, z) {
|
|
216087
216179
|
this.data.push(_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x === undefined ? 0.0 : x, y === undefined ? 0.0 : y, z === undefined ? 0.0 : z));
|
|
216088
216180
|
}
|
|
216089
|
-
/**
|
|
216181
|
+
/** Extract (copy) the final point */
|
|
216090
216182
|
back(result) {
|
|
216091
216183
|
if (this.data.length > 0) {
|
|
216092
216184
|
return this.data[this.data.length - 1].clone(result);
|
|
216093
216185
|
}
|
|
216094
216186
|
return undefined;
|
|
216095
216187
|
}
|
|
216096
|
-
/**
|
|
216188
|
+
/** Extract (copy) the first point */
|
|
216097
216189
|
front(result) {
|
|
216098
216190
|
if (this.data.length > 0) {
|
|
216099
216191
|
return this.data[0].clone(result);
|
|
216100
216192
|
}
|
|
216101
216193
|
return undefined;
|
|
216102
216194
|
}
|
|
216103
|
-
/**
|
|
216195
|
+
/** Remove the final point. */
|
|
216104
216196
|
pop() {
|
|
216105
216197
|
if (this.data.length > 0)
|
|
216106
216198
|
this.data.pop();
|
|
216107
216199
|
}
|
|
216108
|
-
/**
|
|
216200
|
+
/** Remove all points. */
|
|
216109
216201
|
clear() {
|
|
216110
216202
|
this.data.length = 0;
|
|
216111
216203
|
}
|
|
@@ -216174,7 +216266,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
216174
216266
|
|
|
216175
216267
|
// cspell:words CWXY CCWXY arctan Rodrigues
|
|
216176
216268
|
/**
|
|
216177
|
-
*
|
|
216269
|
+
* * `XYZ` is a minimal object containing x,y,z and operations that are meaningful without change in both
|
|
216270
|
+
* point and vector.
|
|
216178
216271
|
* * `XYZ` is not instantiable.
|
|
216179
216272
|
* * The derived (instantiable) classes are
|
|
216180
216273
|
* * `Point3d`
|
|
@@ -216218,7 +216311,8 @@ class XYZ {
|
|
|
216218
216311
|
static isXYAndZ(arg) {
|
|
216219
216312
|
return this.isXAndY(arg) && this.hasZ(arg);
|
|
216220
216313
|
}
|
|
216221
|
-
/**
|
|
216314
|
+
/**
|
|
216315
|
+
* Test if arg is any of:
|
|
216222
216316
|
* * XAndY
|
|
216223
216317
|
* * XYAndZ
|
|
216224
216318
|
* * [number,number]
|
|
@@ -216227,7 +216321,8 @@ class XYZ {
|
|
|
216227
216321
|
static isAnyImmediatePointType(arg) {
|
|
216228
216322
|
return Point3d.isXAndY(arg) || _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.isNumberArray(arg, 2);
|
|
216229
216323
|
}
|
|
216230
|
-
/**
|
|
216324
|
+
/**
|
|
216325
|
+
* Look for (in order) an x coordinate present as:
|
|
216231
216326
|
* * arg.x
|
|
216232
216327
|
* * arg[0]
|
|
216233
216328
|
*/
|
|
@@ -216238,7 +216333,8 @@ class XYZ {
|
|
|
216238
216333
|
return arg[0];
|
|
216239
216334
|
return defaultValue;
|
|
216240
216335
|
}
|
|
216241
|
-
/**
|
|
216336
|
+
/**
|
|
216337
|
+
* Look for (in order) an x coordinate present as:
|
|
216242
216338
|
* * arg.y
|
|
216243
216339
|
* * arg[1]
|
|
216244
216340
|
*/
|
|
@@ -216249,7 +216345,8 @@ class XYZ {
|
|
|
216249
216345
|
return arg[1];
|
|
216250
216346
|
return defaultValue;
|
|
216251
216347
|
}
|
|
216252
|
-
/**
|
|
216348
|
+
/**
|
|
216349
|
+
* Look for (in order) an x coordinate present as:
|
|
216253
216350
|
* * arg.z
|
|
216254
216351
|
* * arg[2]
|
|
216255
216352
|
*/
|
|
@@ -216312,7 +216409,8 @@ class XYZ {
|
|
|
216312
216409
|
this.setZero();
|
|
216313
216410
|
}
|
|
216314
216411
|
}
|
|
216315
|
-
/**
|
|
216412
|
+
/**
|
|
216413
|
+
* Returns true if this and other have equal x,y,z parts within Geometry.smallMetricDistance.
|
|
216316
216414
|
* @param other The other XYAndZ to compare
|
|
216317
216415
|
* @param tol The tolerance for the comparison. If undefined, use [[Geometry.smallMetricDistance]]
|
|
216318
216416
|
*/
|
|
@@ -216393,9 +216491,7 @@ class XYZ {
|
|
|
216393
216491
|
maxDiff(other) {
|
|
216394
216492
|
return Math.max(Math.abs(this.x - other.x), Math.abs(this.y - other.y), Math.abs(this.z - other.z));
|
|
216395
216493
|
}
|
|
216396
|
-
/**
|
|
216397
|
-
* Return the x,y, z component corresponding to 0,1,2.
|
|
216398
|
-
*/
|
|
216494
|
+
/** Return the x,y, z component corresponding to 0,1,2 */
|
|
216399
216495
|
at(index) {
|
|
216400
216496
|
if (index < 0.5)
|
|
216401
216497
|
return this.x;
|
|
@@ -216403,9 +216499,7 @@ class XYZ {
|
|
|
216403
216499
|
return this.z;
|
|
216404
216500
|
return this.y;
|
|
216405
216501
|
}
|
|
216406
|
-
/**
|
|
216407
|
-
* Set value at index 0 or 1 or 2.
|
|
216408
|
-
*/
|
|
216502
|
+
/** Set value at index 0 or 1 or 2 */
|
|
216409
216503
|
setAt(index, value) {
|
|
216410
216504
|
if (index < 0.5)
|
|
216411
216505
|
this.x = value;
|
|
@@ -216459,27 +216553,27 @@ class XYZ {
|
|
|
216459
216553
|
magnitudeSquaredXY() {
|
|
216460
216554
|
return this.x * this.x + this.y * this.y;
|
|
216461
216555
|
}
|
|
216462
|
-
/**
|
|
216556
|
+
/** Exact equality test. */
|
|
216463
216557
|
isExactEqual(other) {
|
|
216464
216558
|
return this.x === other.x && this.y === other.y && this.z === other.z;
|
|
216465
216559
|
}
|
|
216466
|
-
/**
|
|
216560
|
+
/** Equality test with Geometry.smallMetricDistance tolerance */
|
|
216467
216561
|
isAlmostEqualMetric(other) {
|
|
216468
216562
|
return this.maxDiff(other) <= _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.smallMetricDistance;
|
|
216469
216563
|
}
|
|
216470
|
-
/**
|
|
216564
|
+
/** Add x,y,z from other in place. */
|
|
216471
216565
|
addInPlace(other) {
|
|
216472
216566
|
this.x += other.x;
|
|
216473
216567
|
this.y += other.y;
|
|
216474
216568
|
this.z += other.z;
|
|
216475
216569
|
}
|
|
216476
|
-
/**
|
|
216570
|
+
/** Add x,y,z from other in place. */
|
|
216477
216571
|
subtractInPlace(other) {
|
|
216478
216572
|
this.x -= other.x;
|
|
216479
216573
|
this.y -= other.y;
|
|
216480
216574
|
this.z -= other.z;
|
|
216481
216575
|
}
|
|
216482
|
-
/**
|
|
216576
|
+
/** Add (in place) the scaled x,y,z of other */
|
|
216483
216577
|
addScaledInPlace(other, scale) {
|
|
216484
216578
|
this.x += scale * other.x;
|
|
216485
216579
|
this.y += scale * other.y;
|
|
@@ -216491,7 +216585,7 @@ class XYZ {
|
|
|
216491
216585
|
this.y *= scale;
|
|
216492
216586
|
this.z *= scale;
|
|
216493
216587
|
}
|
|
216494
|
-
/**
|
|
216588
|
+
/** Add to x, y, z parts */
|
|
216495
216589
|
addXYZInPlace(dx = 0.0, dy = 0.0, dz = 0.0) {
|
|
216496
216590
|
this.x += dx;
|
|
216497
216591
|
this.y += dy;
|
|
@@ -216509,7 +216603,8 @@ class XYZ {
|
|
|
216509
216603
|
scaledVectorTo(other, scale, result) {
|
|
216510
216604
|
return Vector3d.create(scale * (other.x - this.x), scale * (other.y - this.y), scale * (other.z - this.z), result);
|
|
216511
216605
|
}
|
|
216512
|
-
/**
|
|
216606
|
+
/**
|
|
216607
|
+
* Return a unit vector from this vector to other. Return a 000 vector if the input is too small to normalize.
|
|
216513
216608
|
* @param other target of created vector.
|
|
216514
216609
|
* @param result optional result vector.
|
|
216515
216610
|
*/
|
|
@@ -216520,7 +216615,7 @@ class XYZ {
|
|
|
216520
216615
|
freeze() {
|
|
216521
216616
|
return Object.freeze(this);
|
|
216522
216617
|
}
|
|
216523
|
-
/**
|
|
216618
|
+
/** Access x part of XYZProps (which may be .x or [0]) */
|
|
216524
216619
|
static x(xyz, defaultValue = 0) {
|
|
216525
216620
|
if (xyz === undefined)
|
|
216526
216621
|
return defaultValue;
|
|
@@ -216530,7 +216625,7 @@ class XYZ {
|
|
|
216530
216625
|
return xyz.x;
|
|
216531
216626
|
return defaultValue;
|
|
216532
216627
|
}
|
|
216533
|
-
/**
|
|
216628
|
+
/** Access x part of XYZProps (which may be .x or [0]) */
|
|
216534
216629
|
static y(xyz, defaultValue = 0) {
|
|
216535
216630
|
if (xyz === undefined)
|
|
216536
216631
|
return defaultValue;
|
|
@@ -216540,7 +216635,7 @@ class XYZ {
|
|
|
216540
216635
|
return xyz.y;
|
|
216541
216636
|
return defaultValue;
|
|
216542
216637
|
}
|
|
216543
|
-
/**
|
|
216638
|
+
/** Access x part of XYZProps (which may be .x or [0]) */
|
|
216544
216639
|
static z(xyz, defaultValue = 0) {
|
|
216545
216640
|
if (xyz === undefined)
|
|
216546
216641
|
return defaultValue;
|
|
@@ -216575,7 +216670,8 @@ class Point3d extends XYZ {
|
|
|
216575
216670
|
clone(result) {
|
|
216576
216671
|
return Point3d.create(this.x, this.y, this.z, result);
|
|
216577
216672
|
}
|
|
216578
|
-
/**
|
|
216673
|
+
/**
|
|
216674
|
+
* Create a new Point3d with given coordinates
|
|
216579
216675
|
* @param x x part
|
|
216580
216676
|
* @param y y part
|
|
216581
216677
|
* @param z z part
|
|
@@ -216648,8 +216744,8 @@ class Point3d extends XYZ {
|
|
|
216648
216744
|
static createZero(result) {
|
|
216649
216745
|
return Point3d.create(0, 0, 0, result);
|
|
216650
216746
|
}
|
|
216651
|
-
/**
|
|
216652
|
-
*
|
|
216747
|
+
/**
|
|
216748
|
+
* Return the cross product of the vectors from this to pointA and pointB
|
|
216653
216749
|
* * the result is a vector
|
|
216654
216750
|
* * the result is perpendicular to both vectors, with right hand orientation
|
|
216655
216751
|
* * the magnitude of the vector is twice the area of the triangle.
|
|
@@ -216657,21 +216753,20 @@ class Point3d extends XYZ {
|
|
|
216657
216753
|
crossProductToPoints(pointA, pointB, result) {
|
|
216658
216754
|
return Vector3d.createCrossProduct(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z, result);
|
|
216659
216755
|
}
|
|
216660
|
-
/** Return the magnitude of the cross product of the vectors from this to pointA and pointB
|
|
216661
|
-
*/
|
|
216756
|
+
/** Return the magnitude of the cross product of the vectors from this to pointA and pointB */
|
|
216662
216757
|
crossProductToPointsMagnitude(pointA, pointB) {
|
|
216663
216758
|
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.crossProductMagnitude(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z);
|
|
216664
216759
|
}
|
|
216665
|
-
/**
|
|
216666
|
-
*
|
|
216760
|
+
/**
|
|
216761
|
+
* Return the triple product of the vectors from this to pointA, pointB, pointC
|
|
216667
216762
|
* * This is a scalar (number)
|
|
216668
216763
|
* * This is 6 times the (signed) volume of the tetrahedron on the 4 points.
|
|
216669
216764
|
*/
|
|
216670
216765
|
tripleProductToPoints(pointA, pointB, pointC) {
|
|
216671
216766
|
return _Geometry__WEBPACK_IMPORTED_MODULE_0__.Geometry.tripleProduct(pointA.x - this.x, pointA.y - this.y, pointA.z - this.z, pointB.x - this.x, pointB.y - this.y, pointB.z - this.z, pointC.x - this.x, pointC.y - this.y, pointC.z - this.z);
|
|
216672
216767
|
}
|
|
216673
|
-
/**
|
|
216674
|
-
*
|
|
216768
|
+
/**
|
|
216769
|
+
* Return the cross product of the vectors from this to pointA and pointB
|
|
216675
216770
|
* * the result is a scalar
|
|
216676
216771
|
* * the magnitude of the vector is twice the signed area of the triangle.
|
|
216677
216772
|
* * this is positive for counter-clockwise order of the points, negative for clockwise.
|
|
@@ -216681,8 +216776,8 @@ class Point3d extends XYZ {
|
|
|
216681
216776
|
}
|
|
216682
216777
|
/**
|
|
216683
216778
|
* Return a point interpolated between `this` point and the `other` point.
|
|
216684
|
-
* *
|
|
216685
|
-
|
|
216779
|
+
* * Fraction specifies where the interpolated point is located on the line passing `this` and `other`.
|
|
216780
|
+
*/
|
|
216686
216781
|
interpolate(fraction, other, result) {
|
|
216687
216782
|
if (fraction <= 0.5)
|
|
216688
216783
|
return Point3d.create(this.x + fraction * (other.x - this.x), this.y + fraction * (other.y - this.y), this.z + fraction * (other.z - this.z), result);
|
|
@@ -216735,7 +216830,8 @@ class Point3d extends XYZ {
|
|
|
216735
216830
|
static createScale(source, scale, result) {
|
|
216736
216831
|
return Point3d.create(source.x * scale, source.y * scale, source.z * scale, result);
|
|
216737
216832
|
}
|
|
216738
|
-
/**
|
|
216833
|
+
/**
|
|
216834
|
+
* Create a point that is a linear combination (weighted sum) of 2 input points.
|
|
216739
216835
|
* @param pointA first input point
|
|
216740
216836
|
* @param scaleA scale factor for pointA
|
|
216741
216837
|
* @param pointB second input point
|
|
@@ -216773,7 +216869,8 @@ class Point3d extends XYZ {
|
|
|
216773
216869
|
return startPoint.dotVectorsToTargets(endPoint, this) / denominator;
|
|
216774
216870
|
}
|
|
216775
216871
|
}
|
|
216776
|
-
/**
|
|
216872
|
+
/**
|
|
216873
|
+
* 3D vector with `x`,`y`,`z` as properties
|
|
216777
216874
|
* @public
|
|
216778
216875
|
*/
|
|
216779
216876
|
class Vector3d extends XYZ {
|
|
@@ -216798,7 +216895,7 @@ class Vector3d extends XYZ {
|
|
|
216798
216895
|
return Vector3d.create(this.x, this.y, this.z, result);
|
|
216799
216896
|
}
|
|
216800
216897
|
/**
|
|
216801
|
-
*
|
|
216898
|
+
* Return a Vector3d (new or reused from optional result)
|
|
216802
216899
|
* @param x x component
|
|
216803
216900
|
* @param y y component
|
|
216804
216901
|
* @param z z component
|
|
@@ -216851,7 +216948,6 @@ class Vector3d extends XYZ {
|
|
|
216851
216948
|
}
|
|
216852
216949
|
/**
|
|
216853
216950
|
* Return the cross product of the vectors from origin to pointA and pointB.
|
|
216854
|
-
*
|
|
216855
216951
|
* * the result is a vector
|
|
216856
216952
|
* * the result is perpendicular to both vectors, with right hand orientation
|
|
216857
216953
|
* * the magnitude of the vector is twice the area of the triangle.
|
|
@@ -217028,7 +217124,8 @@ class Vector3d extends XYZ {
|
|
|
217028
217124
|
this.z *= a;
|
|
217029
217125
|
return true;
|
|
217030
217126
|
}
|
|
217031
|
-
/**
|
|
217127
|
+
/**
|
|
217128
|
+
* Create a normalized vector from the inputs.
|
|
217032
217129
|
* @param result optional result
|
|
217033
217130
|
* @returns undefined if and only if normalization fails
|
|
217034
217131
|
*/
|
|
@@ -217062,7 +217159,8 @@ class Vector3d extends XYZ {
|
|
|
217062
217159
|
return defaultFraction;
|
|
217063
217160
|
return numerator / denominator;
|
|
217064
217161
|
}
|
|
217065
|
-
/**
|
|
217162
|
+
/**
|
|
217163
|
+
* Return a new vector with components negated from the calling instance.
|
|
217066
217164
|
* @param result optional result vector.
|
|
217067
217165
|
*/
|
|
217068
217166
|
negate(result) {
|
|
@@ -217144,7 +217242,8 @@ class Vector3d extends XYZ {
|
|
|
217144
217242
|
const normal = this.crossProduct(target).normalize();
|
|
217145
217243
|
return normal ? normal.crossProduct(this, result) : undefined;
|
|
217146
217244
|
}
|
|
217147
|
-
/**
|
|
217245
|
+
/**
|
|
217246
|
+
* Rotate this vector 90 degrees around an axis vector.
|
|
217148
217247
|
* * Note that simple cross is in the plane perpendicular to axis -- it loses the part
|
|
217149
217248
|
* of "this" that is along the axis. The unit and scale is supposed to fix that.
|
|
217150
217249
|
* This matches with Rodrigues' rotation formula because cos(theta) = 0 and sin(theta) = 1
|
|
@@ -217233,8 +217332,10 @@ class Vector3d extends XYZ {
|
|
|
217233
217332
|
static createAdd2Scaled(vectorA, scaleA, vectorB, scaleB, result) {
|
|
217234
217333
|
return Vector3d.create(vectorA.x * scaleA + vectorB.x * scaleB, vectorA.y * scaleA + vectorB.y * scaleB, vectorA.z * scaleA + vectorB.z * scaleB, result);
|
|
217235
217334
|
}
|
|
217236
|
-
/**
|
|
217237
|
-
*
|
|
217335
|
+
/**
|
|
217336
|
+
* Return the (strongly typed Vector3d) `thisVector3d + vectorA * scalarA + vectorB * scalarB`
|
|
217337
|
+
* with all components presented as numbers
|
|
217338
|
+
*/
|
|
217238
217339
|
static createAdd2ScaledXYZ(ax, ay, az, scaleA, bx, by, bz, scaleB, result) {
|
|
217239
217340
|
return Vector3d.create(ax * scaleA + bx * scaleB, ay * scaleA + by * scaleB, az * scaleA + bz * scaleB, result);
|
|
217240
217341
|
}
|
|
@@ -217261,7 +217362,8 @@ class Vector3d extends XYZ {
|
|
|
217261
217362
|
return undefined;
|
|
217262
217363
|
return this.scale(length / mag, result);
|
|
217263
217364
|
}
|
|
217264
|
-
/**
|
|
217365
|
+
/**
|
|
217366
|
+
* Compute the cross product of this vector with `vectorB`. Immediately pass it to `normalize`.
|
|
217265
217367
|
* @param vectorB second vector for cross product.
|
|
217266
217368
|
* @returns see `Vector3d` method `normalize()` for error condition.
|
|
217267
217369
|
*/
|
|
@@ -217348,7 +217450,8 @@ class Vector3d extends XYZ {
|
|
|
217348
217450
|
crossProductMagnitude(vectorB) {
|
|
217349
217451
|
return Math.sqrt(this.crossProductMagnitudeSquared(vectorB));
|
|
217350
217452
|
}
|
|
217351
|
-
/**
|
|
217453
|
+
/**
|
|
217454
|
+
* Return the dot product of this vector with vectorB.
|
|
217352
217455
|
* @param vectorB second vector of cross product
|
|
217353
217456
|
* @returns the dot product of this instance with vectorB
|
|
217354
217457
|
*/
|
|
@@ -217404,7 +217507,8 @@ class Vector3d extends XYZ {
|
|
|
217404
217507
|
return this.x * (pointB.x - pointA.x)
|
|
217405
217508
|
+ this.y * (pointB.y - pointA.y);
|
|
217406
217509
|
}
|
|
217407
|
-
/**
|
|
217510
|
+
/**
|
|
217511
|
+
* Dot product with vector from pointA to pointB, with pointB given as (weighted) wx,wy,wz,w
|
|
217408
217512
|
* * We need to unweight pointB (which is a homogeneous point) to be able to participate in the
|
|
217409
217513
|
* vector dot product
|
|
217410
217514
|
* * if the weight is near zero metric, the return is zero.
|
|
@@ -217448,7 +217552,7 @@ class Vector3d extends XYZ {
|
|
|
217448
217552
|
return Vector3d.createCrossProduct(this.x, this.y, this.z, vectorB.x, vectorB.y, vectorB.z, result);
|
|
217449
217553
|
}
|
|
217450
217554
|
/**
|
|
217451
|
-
*
|
|
217555
|
+
* Return cross product of `this` with the vector `(x, y, z)`
|
|
217452
217556
|
* @param x x component of second vector
|
|
217453
217557
|
* @param y y component of second vector
|
|
217454
217558
|
* @param z z component of second vector
|
|
@@ -217458,12 +217562,12 @@ class Vector3d extends XYZ {
|
|
|
217458
217562
|
return Vector3d.createCrossProduct(this.x, this.y, this.z, x, y, z, result);
|
|
217459
217563
|
}
|
|
217460
217564
|
/**
|
|
217461
|
-
|
|
217462
|
-
|
|
217463
|
-
|
|
217464
|
-
|
|
217465
|
-
|
|
217466
|
-
|
|
217565
|
+
* Return the angle in radians (not as strongly typed Angle) from this vector to vectorB.
|
|
217566
|
+
* * The returned angle is between 0 and `Math.PI`.
|
|
217567
|
+
* * The returned angle is measured in the plane containing the two vectors.
|
|
217568
|
+
* * Use `planarRadiansTo` and `signedRadiansTo` to return an angle measured in a specific plane.
|
|
217569
|
+
* @param vectorB target vector.
|
|
217570
|
+
*/
|
|
217467
217571
|
radiansTo(vectorB) {
|
|
217468
217572
|
// ||axb|| = ||a|| ||b|| |sin(t)| and a.b = ||a|| ||b|| cos(t) ==>
|
|
217469
217573
|
// ||axb|| / a.b = sin(t)/cos(t) = tan(t) ==> t = arctan(||axb|| / a.b).
|
|
@@ -217499,16 +217603,16 @@ class Vector3d extends XYZ {
|
|
|
217499
217603
|
return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createAtan2(this.crossProductXY(vectorB), this.dotProductXY(vectorB));
|
|
217500
217604
|
}
|
|
217501
217605
|
/**
|
|
217502
|
-
|
|
217503
|
-
|
|
217504
|
-
|
|
217505
|
-
|
|
217506
|
-
|
|
217507
|
-
|
|
217508
|
-
|
|
217509
|
-
|
|
217510
|
-
|
|
217511
|
-
|
|
217606
|
+
* Return the angle in radians (not as strongly-typed Angle) from this vector to vectorB, measured
|
|
217607
|
+
* in their containing plane whose normal lies in the same half-space as vectorW.
|
|
217608
|
+
* * The returned angle is between `-Math.PI` and `Math.PI`.
|
|
217609
|
+
* * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
|
|
217610
|
+
* this function returns `radiansTo(vectorB)`; otherwise, it returns `-radiansTo(vectorB)`.
|
|
217611
|
+
* * `vectorW` does not have to be perpendicular to the plane.
|
|
217612
|
+
* * Use `planarRadiansTo` to measure the angle between vectors that are projected to another plane.
|
|
217613
|
+
* @param vectorB target vector.
|
|
217614
|
+
* @param vectorW determines the side of the plane in which the returned angle is measured
|
|
217615
|
+
*/
|
|
217512
217616
|
signedRadiansTo(vectorB, vectorW) {
|
|
217513
217617
|
const p = this.crossProduct(vectorB);
|
|
217514
217618
|
const theta = Math.atan2(p.magnitude(), this.dotProduct(vectorB));
|
|
@@ -217517,7 +217621,8 @@ class Vector3d extends XYZ {
|
|
|
217517
217621
|
else
|
|
217518
217622
|
return theta;
|
|
217519
217623
|
}
|
|
217520
|
-
/**
|
|
217624
|
+
/**
|
|
217625
|
+
* Return the (strongly-typed) angle from this vector to vectorB, measured
|
|
217521
217626
|
* in their containing plane whose normal lies in the same half-space as vectorW.
|
|
217522
217627
|
* * The returned angle is between -180 and 180 degrees.
|
|
217523
217628
|
* * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
|
|
@@ -217560,15 +217665,19 @@ class Vector3d extends XYZ {
|
|
|
217560
217665
|
planarAngleTo(vectorB, planeNormal) {
|
|
217561
217666
|
return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createRadians(this.planarRadiansTo(vectorB, planeNormal));
|
|
217562
217667
|
}
|
|
217563
|
-
/**
|
|
217564
|
-
|
|
217668
|
+
/**
|
|
217669
|
+
* Return the smallest angle (in radians) from the (bidirectional) line containing `this`
|
|
217670
|
+
* to the (bidirectional) line containing `vectorB`
|
|
217671
|
+
*/
|
|
217565
217672
|
smallerUnorientedRadiansTo(vectorB) {
|
|
217566
217673
|
const c = this.dotProduct(vectorB);
|
|
217567
217674
|
const s = this.crossProductMagnitude(vectorB);
|
|
217568
217675
|
return Math.atan2(Math.abs(s), Math.abs(c));
|
|
217569
217676
|
}
|
|
217570
|
-
/**
|
|
217571
|
-
*
|
|
217677
|
+
/**
|
|
217678
|
+
* Return the smallest (strongly typed) angle from the (bidirectional) line containing `this`
|
|
217679
|
+
* to the (bidirectional) line containing `vectorB`
|
|
217680
|
+
*/
|
|
217572
217681
|
smallerUnorientedAngleTo(vectorB) {
|
|
217573
217682
|
return _Angle__WEBPACK_IMPORTED_MODULE_2__.Angle.createRadians(this.smallerUnorientedRadiansTo(vectorB));
|
|
217574
217683
|
}
|
|
@@ -223469,7 +223578,7 @@ class Transform {
|
|
|
223469
223578
|
}
|
|
223470
223579
|
/**
|
|
223471
223580
|
* Return a modified copy of `this` Transform so that its `matrix` part is rigid (`origin` part is untouched).
|
|
223472
|
-
* *
|
|
223581
|
+
* * @see [[Matrix3d.axisOrderCrossProductsInPlace]] documentation for details of how the matrix is modified to rigid.
|
|
223473
223582
|
*/
|
|
223474
223583
|
cloneRigid(axisOrder = _Geometry__WEBPACK_IMPORTED_MODULE_0__.AxisOrder.XYZ) {
|
|
223475
223584
|
const modifiedMatrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createRigidFromMatrix3d(this.matrix, axisOrder);
|
|
@@ -223477,7 +223586,7 @@ class Transform {
|
|
|
223477
223586
|
return undefined;
|
|
223478
223587
|
return new Transform(this.origin.cloneAsPoint3d(), modifiedMatrix);
|
|
223479
223588
|
}
|
|
223480
|
-
/** Create a Transform with the given `origin` and `matrix`. */
|
|
223589
|
+
/** Create a Transform with the given `origin` and `matrix`. Inputs are captured, not cloned. */
|
|
223481
223590
|
static createRefs(origin, matrix, result) {
|
|
223482
223591
|
if (!origin)
|
|
223483
223592
|
origin = _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero();
|
|
@@ -223488,7 +223597,7 @@ class Transform {
|
|
|
223488
223597
|
}
|
|
223489
223598
|
return new Transform(origin, matrix);
|
|
223490
223599
|
}
|
|
223491
|
-
/** Create a Transform with complete contents given */
|
|
223600
|
+
/** Create a Transform with complete contents given. `q` inputs make the matrix and `a` inputs make the origin */
|
|
223492
223601
|
static createRowValues(qxx, qxy, qxz, ax, qyx, qyy, qyz, ay, qzx, qzy, qzz, az, result) {
|
|
223493
223602
|
if (result) {
|
|
223494
223603
|
result._origin.set(ax, ay, az);
|
|
@@ -223503,6 +223612,8 @@ class Transform {
|
|
|
223503
223612
|
}
|
|
223504
223613
|
/**
|
|
223505
223614
|
* Create a Transform with translation provided by x,y,z parts.
|
|
223615
|
+
* * Translation Transform maps any vector `v` to `v + p` where `p = (x,y,z)`
|
|
223616
|
+
* * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/MoveCube
|
|
223506
223617
|
* @param x x part of translation
|
|
223507
223618
|
* @param y y part of translation
|
|
223508
223619
|
* @param z z part of translation
|
|
@@ -223514,6 +223625,8 @@ class Transform {
|
|
|
223514
223625
|
}
|
|
223515
223626
|
/**
|
|
223516
223627
|
* Create a Transform with specified `translation` part.
|
|
223628
|
+
* * Translation Transform maps any vector `v` to `v + translation`
|
|
223629
|
+
* * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/MoveCube
|
|
223517
223630
|
* @param translation x,y,z parts of the translation
|
|
223518
223631
|
* @param result optional pre-allocated Transform
|
|
223519
223632
|
* @returns new or updated transform
|
|
@@ -223560,6 +223673,7 @@ class Transform {
|
|
|
223560
223673
|
* local-to-world mapping.
|
|
223561
223674
|
* * This function is a closely related to `createFixedPointAndMatrix` whose point input is the fixed point
|
|
223562
223675
|
* of the world-to-world transformation.
|
|
223676
|
+
* * If origin is `undefined`, (0,0,0) is used. If matrix is `undefined` the identity matrix is used.
|
|
223563
223677
|
*/
|
|
223564
223678
|
static createOriginAndMatrix(origin, matrix, result) {
|
|
223565
223679
|
if (result) {
|
|
@@ -223585,7 +223699,7 @@ class Transform {
|
|
|
223585
223699
|
}
|
|
223586
223700
|
/**
|
|
223587
223701
|
* Create a Transform such that its `matrix` part is rigid.
|
|
223588
|
-
*
|
|
223702
|
+
* @see [[Matrix3d.createRigidFromColumns]] for details of how the matrix is created to be rigid.
|
|
223589
223703
|
*/
|
|
223590
223704
|
static createRigidFromOriginAndColumns(origin, vectorX, vectorY, axisOrder, result) {
|
|
223591
223705
|
const matrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createRigidFromColumns(vectorX, vectorY, axisOrder, result ? result._matrix : undefined);
|
|
@@ -223597,10 +223711,10 @@ class Transform {
|
|
|
223597
223711
|
return result;
|
|
223598
223712
|
}
|
|
223599
223713
|
/**
|
|
223600
|
-
* We don't want to pass "origin" to createRefs because createRefs does not clone "origin"
|
|
223601
|
-
*
|
|
223602
|
-
*
|
|
223603
|
-
*
|
|
223714
|
+
* We don't want to pass "origin" to createRefs because createRefs does not clone "origin". That means if "origin"
|
|
223715
|
+
* is changed via Transform at any point, the initial "origin" passed by the user is also changed. To avoid that,
|
|
223716
|
+
* we pass "undefined" to createRefs so that it allocates a new point which then we set it to the "origin" which
|
|
223717
|
+
* is passed by user in the next line.
|
|
223604
223718
|
*/
|
|
223605
223719
|
result = Transform.createRefs(undefined, matrix);
|
|
223606
223720
|
result._origin.setFromPoint3d(origin);
|
|
@@ -223623,18 +223737,19 @@ class Transform {
|
|
|
223623
223737
|
return Transform.createRefs(undefined, matrix.clone());
|
|
223624
223738
|
}
|
|
223625
223739
|
/**
|
|
223626
|
-
* Create a transform with the specified `matrix` and points `a` and `b`. The returned Transform
|
|
223627
|
-
* point `p` to `M*(p-a) + b` (i.e., `Tp = M*(p-a) + b`) so
|
|
223740
|
+
* Create a transform with the specified `matrix` and points `a` and `b`. The returned Transform maps
|
|
223741
|
+
* point `p` to `M*(p-a) + b` (i.e., `Tp = M*(p-a) + b`), so maps `a` to 'b'.
|
|
223628
223742
|
*/
|
|
223629
223743
|
static createMatrixPickupPutdown(matrix, a, b, result) {
|
|
223630
|
-
// we define the origin o = b - M*a so Tp = M*p + o = M*p + (b - M*a) = M*(
|
|
223744
|
+
// we define the origin o = b - M*a so Tp = M*p + o = M*p + (b - M*a) = M*(p-a) + b
|
|
223631
223745
|
const origin = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzMinusMatrixTimesXYZ(b, matrix, a);
|
|
223632
223746
|
return Transform.createRefs(origin, matrix.clone(), result);
|
|
223633
223747
|
}
|
|
223634
223748
|
/**
|
|
223635
223749
|
* Create a Transform which leaves the fixedPoint unchanged and scales everything else around it by
|
|
223636
|
-
* a single scale factor. The returned Transform
|
|
223750
|
+
* a single scale factor. The returned Transform maps a point `p` to `M*p + (f - M*f)`
|
|
223637
223751
|
* where `f` is the fixedPoint and M is the scale matrix (i.e., `Tp = M*(p-f) + f`).
|
|
223752
|
+
* * Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/ScaleCube
|
|
223638
223753
|
*/
|
|
223639
223754
|
static createScaleAboutPoint(fixedPoint, scale, result) {
|
|
223640
223755
|
const matrix = _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.createScale(scale, scale, scale);
|
|
@@ -223676,8 +223791,7 @@ class Transform {
|
|
|
223676
223791
|
return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesCoordinates(this._origin, this._matrix, x, y, z, result);
|
|
223677
223792
|
}
|
|
223678
223793
|
/**
|
|
223679
|
-
* Multiply a specific row (component) of the
|
|
223680
|
-
* at the same row. Return the result.
|
|
223794
|
+
* Multiply a specific row (component) of the 3x4 instance times (x,y,z,1). Return the result.
|
|
223681
223795
|
*/
|
|
223682
223796
|
multiplyComponentXYZ(componentIndex, x, y, z = 0) {
|
|
223683
223797
|
const coffs = this._matrix.coffs;
|
|
@@ -223685,8 +223799,7 @@ class Transform {
|
|
|
223685
223799
|
return this.origin.at(componentIndex) + (coffs[idx] * x) + (coffs[idx + 1] * y) + (coffs[idx + 2] * z);
|
|
223686
223800
|
}
|
|
223687
223801
|
/**
|
|
223688
|
-
* Multiply a specific row (component) of the
|
|
223689
|
-
* at the same row times w. Return the result.
|
|
223802
|
+
* Multiply a specific row (component) of the 3x4 instance times (x,y,z,w). Return the result.
|
|
223690
223803
|
*/
|
|
223691
223804
|
multiplyComponentXYZW(componentIndex, x, y, z, w) {
|
|
223692
223805
|
const coffs = this._matrix.coffs;
|
|
@@ -223694,31 +223807,38 @@ class Transform {
|
|
|
223694
223807
|
return (this.origin.at(componentIndex) * w) + (coffs[idx] * x) + (coffs[idx + 1] * y) + (coffs[idx + 2] * z);
|
|
223695
223808
|
}
|
|
223696
223809
|
/**
|
|
223697
|
-
*
|
|
223698
|
-
*
|
|
223810
|
+
* Transform the homogeneous point. Return as a new `Point4d`, or in the pre-allocated result (if result is given).
|
|
223811
|
+
* * If `p = (x,y,z)` then this method computes `Tp = M*p + o*w` and returns the `Point4d` formed by `Tp` in the
|
|
223812
|
+
* first three coordinates, and `w` in the fourth.
|
|
223813
|
+
* * Logically, this is multiplication by the 4x4 matrix formed from the 3x4 instance augmented with fourth row 0001.
|
|
223699
223814
|
*/
|
|
223700
223815
|
multiplyXYZW(x, y, z, w, result) {
|
|
223701
223816
|
return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesWeightedCoordinates(this._origin, this._matrix, x, y, z, w, result);
|
|
223702
223817
|
}
|
|
223703
223818
|
/**
|
|
223704
|
-
*
|
|
223705
|
-
*
|
|
223706
|
-
* (
|
|
223819
|
+
* Transform the homogeneous point. Return as new `Float64Array` with size 4, or in the pre-allocated result (if
|
|
223820
|
+
* result is given).
|
|
223821
|
+
* * If `p = (x,y,z)` then this method computes `Tp = M*p + o*w` and returns the `Float64Array` formed by `Tp`
|
|
223822
|
+
* in the first 3 numbers of the array and `w` as the fourth.
|
|
223823
|
+
* * Logically, this is multiplication by the 4x4 matrix formed from the 3x4 instance augmented with fourth row 0001.
|
|
223707
223824
|
*/
|
|
223708
223825
|
multiplyXYZWToFloat64Array(x, y, z, w, result) {
|
|
223709
223826
|
return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesWeightedCoordinatesToFloat64Array(this._origin, this._matrix, x, y, z, w, result);
|
|
223710
223827
|
}
|
|
223711
223828
|
/**
|
|
223712
|
-
*
|
|
223713
|
-
*
|
|
223829
|
+
* * Transform the point. Return as new `Float64Array` with size 3, or in the pre-allocated result (if result is given).
|
|
223830
|
+
* * If `p = (x,y,z)` then this method computes `Tp = M*p + o` and returns it as the first 3 elements of the array.
|
|
223714
223831
|
*/
|
|
223715
223832
|
multiplyXYZToFloat64Array(x, y, z, result) {
|
|
223716
223833
|
return _Matrix3d__WEBPACK_IMPORTED_MODULE_2__.Matrix3d.xyzPlusMatrixTimesCoordinatesToFloat64Array(this._origin, this._matrix, x, y, z, result);
|
|
223717
223834
|
}
|
|
223718
223835
|
/**
|
|
223719
|
-
*
|
|
223720
|
-
*
|
|
223721
|
-
*
|
|
223836
|
+
* Multiply the homogeneous point by the transpose of `this` Transform. Return as a new `Point4d` or in the
|
|
223837
|
+
* pre-allocated result (if result is given).
|
|
223838
|
+
* * If `p = (x,y,z)` then this method computes `M^t*p` and returns it in the first three coordinates of the `Point4d`,
|
|
223839
|
+
* and `o*p + w` in the fourth.
|
|
223840
|
+
* * Logically, this is multiplication by the transpose of the 4x4 matrix formed from the 3x4 instance augmented with
|
|
223841
|
+
* fourth row 0001.
|
|
223722
223842
|
*/
|
|
223723
223843
|
multiplyTransposeXYZW(x, y, z, w, result) {
|
|
223724
223844
|
const coffs = this._matrix.coffs;
|
|
@@ -223737,9 +223857,9 @@ class Transform {
|
|
|
223737
223857
|
this.multiplyPoint3dArrayInPlace(chain);
|
|
223738
223858
|
}
|
|
223739
223859
|
/**
|
|
223740
|
-
*
|
|
223741
|
-
* `p = MInverse
|
|
223742
|
-
*
|
|
223860
|
+
* Multiply the point by the inverse Transform.
|
|
223861
|
+
* * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse`
|
|
223862
|
+
* Transform has matrix part `MInverse` and origin part `-MInverse*o`.
|
|
223743
223863
|
* * Return as a new point or in the optional `result`.
|
|
223744
223864
|
* * Returns `undefined` if the `matrix` part if this Transform is singular.
|
|
223745
223865
|
*/
|
|
@@ -223747,9 +223867,13 @@ class Transform {
|
|
|
223747
223867
|
return this._matrix.multiplyInverseXYZAsPoint3d(point.x - this._origin.x, point.y - this._origin.y, point.z - this._origin.z, result);
|
|
223748
223868
|
}
|
|
223749
223869
|
/**
|
|
223750
|
-
*
|
|
223751
|
-
* `p =
|
|
223752
|
-
*
|
|
223870
|
+
* Multiply the homogenous point by the inverse Transform.
|
|
223871
|
+
* * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse` Transform
|
|
223872
|
+
* has matrix part `MInverse` and origin part `-MInverse*o`.
|
|
223873
|
+
* * This method computes `TInverse p = MInverse*p - w*MInverse*o` and returns the `Point4d` formed by `TInverse*p`
|
|
223874
|
+
* in the first three coordinates, and `w` in the fourth.
|
|
223875
|
+
* * Logically, this is multiplication by the inverse of the 4x4 matrix formed from the 3x4 instance augmented with
|
|
223876
|
+
* fourth row 0001. This is equivalent to the 4x4 matrix formed in similar fashion from the inverse of this instance.
|
|
223753
223877
|
* * Return as a new point or in the optional `result`.
|
|
223754
223878
|
* * Returns `undefined` if the `matrix` part if this Transform is singular.
|
|
223755
223879
|
*/
|
|
@@ -223758,9 +223882,9 @@ class Transform {
|
|
|
223758
223882
|
return this._matrix.multiplyInverseXYZW(weightedPoint.x - w * this.origin.x, weightedPoint.y - w * this.origin.y, weightedPoint.z - w * this.origin.z, w, result);
|
|
223759
223883
|
}
|
|
223760
223884
|
/**
|
|
223761
|
-
*
|
|
223762
|
-
* `p = MInverse
|
|
223763
|
-
*
|
|
223885
|
+
* Multiply the point by the inverse Transform.
|
|
223886
|
+
* * If for a point `p` we have `Tp = M*p + o = q`, then `p = MInverse*(q - o) = TInverse q` so `TInverse` Transform
|
|
223887
|
+
* has matrix part `MInverse` and origin part `-MInverse*o`.
|
|
223764
223888
|
* * Return as a new point or in the optional `result`.
|
|
223765
223889
|
* * Returns `undefined` if the `matrix` part if this Transform is singular.
|
|
223766
223890
|
*/
|
|
@@ -223799,35 +223923,35 @@ class Transform {
|
|
|
223799
223923
|
return numSource;
|
|
223800
223924
|
}
|
|
223801
223925
|
/**
|
|
223802
|
-
*
|
|
223803
|
-
*
|
|
223804
|
-
*
|
|
223805
|
-
* * If `
|
|
223806
|
-
* * If `
|
|
223926
|
+
* Multiply each point in the array by the inverse of `this` Transform.
|
|
223927
|
+
* * For a transform `T = [M o]` the inverse transform `T' = [M' -M'o]` exists if and only if `M` has an inverse
|
|
223928
|
+
* `M'`. Indeed, for any point `p`, we have `T'Tp = T'(Mp + o) = M'(Mp + o) - M'o = M'Mp + M'o - M'o = p.`
|
|
223929
|
+
* * If `result` is given, resize it to match the input `points` array and update it with original points `p[]`.
|
|
223930
|
+
* * If `result` is not given, return a new array.
|
|
223807
223931
|
* * Returns `undefined` if the `matrix` part if this Transform is singular.
|
|
223808
223932
|
*/
|
|
223809
|
-
multiplyInversePoint3dArray(points,
|
|
223933
|
+
multiplyInversePoint3dArray(points, result) {
|
|
223810
223934
|
if (!this._matrix.computeCachedInverse(true))
|
|
223811
223935
|
return undefined;
|
|
223812
223936
|
const originX = this.origin.x;
|
|
223813
223937
|
const originY = this.origin.y;
|
|
223814
223938
|
const originZ = this.origin.z;
|
|
223815
|
-
if (
|
|
223816
|
-
const n = Transform.matchArrayLengths(points,
|
|
223939
|
+
if (result) {
|
|
223940
|
+
const n = Transform.matchArrayLengths(points, result, _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero);
|
|
223817
223941
|
for (let i = 0; i < n; i++)
|
|
223818
|
-
this._matrix.multiplyInverseXYZAsPoint3d(points[i].x - originX, points[i].y - originY, points[i].z - originZ,
|
|
223942
|
+
this._matrix.multiplyInverseXYZAsPoint3d(points[i].x - originX, points[i].y - originY, points[i].z - originZ, result[i]);
|
|
223943
|
+
return result;
|
|
223819
223944
|
}
|
|
223820
|
-
|
|
223945
|
+
result = [];
|
|
223821
223946
|
for (const point of points)
|
|
223822
|
-
|
|
223823
|
-
return
|
|
223947
|
+
result.push(this._matrix.multiplyInverseXYZAsPoint3d(point.x - originX, point.y - originY, point.z - originZ));
|
|
223948
|
+
return result;
|
|
223824
223949
|
}
|
|
223825
223950
|
/**
|
|
223826
|
-
*
|
|
223827
|
-
*
|
|
223828
|
-
*
|
|
223829
|
-
*
|
|
223830
|
-
* * Returns `true` if the `matrix` part if this Transform is invertible and `false if singular.
|
|
223951
|
+
* Multiply each point in the array by the inverse of `this` Transform in place.
|
|
223952
|
+
* * For a transform `T = [M o]` the inverse transform `T' = [M' -M'o]` exists if and only if `M` has an inverse
|
|
223953
|
+
* `M'`. Indeed, for any point `p`, we have `T'Tp = T'(Mp + o) = M'(Mp + o) - M'o = M'Mp + M'o - M'o = p.`
|
|
223954
|
+
* * Returns `true` if the `matrix` part if this Transform is invertible and `false` if singular.
|
|
223831
223955
|
*/
|
|
223832
223956
|
multiplyInversePoint3dArrayInPlace(points) {
|
|
223833
223957
|
if (!this._matrix.computeCachedInverse(true))
|
|
@@ -223896,7 +224020,8 @@ class Transform {
|
|
|
223896
224020
|
/**
|
|
223897
224021
|
* Calculate `transformA * transformB` and store it into the calling instance (`this`).
|
|
223898
224022
|
* * **Note:** If `transformA = [A a]` and `transformB = [B b]` then `transformA * transformB` is defined as
|
|
223899
|
-
* `[A*B Ab+a]`.
|
|
224023
|
+
* `[A*B Ab+a]`.
|
|
224024
|
+
* * @see [[multiplyTransformTransform]] documentation for math details.
|
|
223900
224025
|
* @param transformA first operand
|
|
223901
224026
|
* @param transformB second operand
|
|
223902
224027
|
*/
|
|
@@ -223906,19 +224031,17 @@ class Transform {
|
|
|
223906
224031
|
}
|
|
223907
224032
|
/**
|
|
223908
224033
|
* Multiply `this` Transform times `other` Transform.
|
|
223909
|
-
* **Note:** If `this = [A a]` and `other = [B b]` then `this * other` is defined as [A*B Ab+a]
|
|
223910
|
-
* That's because we create a 4x4 matrix for each Transform with the 3x3 `matrix` and `origin`
|
|
223911
|
-
* as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we multiply those two 4x4 matrixes:
|
|
224034
|
+
* * **Note:** If `this = [A a]` and `other = [B b]` then `this * other` is defined as [A*B Ab+a] because:
|
|
223912
224035
|
* ```
|
|
223913
224036
|
* equation
|
|
223914
224037
|
* \begin{matrix}
|
|
223915
|
-
* \text{
|
|
223916
|
-
* \text{
|
|
224038
|
+
* \text{this Transform with matrix part }\bold{A}\text{ and origin part }\bold{a} & \blockTransform{A}{a}\\
|
|
224039
|
+
* \text{other Transform with matrix part }\bold{B}\text{ and origin part }\bold{b} & \blockTransform{B}{b} \\
|
|
223917
224040
|
* \text{product}& \blockTransform{A}{a}\blockTransform{B}{b}=\blockTransform{AB}{Ab + a}
|
|
223918
224041
|
* \end{matrix}
|
|
223919
224042
|
* ```
|
|
223920
224043
|
* @param other the 'other` Transform to be multiplied to `this` Transform.
|
|
223921
|
-
* @param result optional preallocated result to reuse.
|
|
224044
|
+
* @param result optional preallocated `result` to reuse.
|
|
223922
224045
|
*/
|
|
223923
224046
|
multiplyTransformTransform(other, result) {
|
|
223924
224047
|
if (!result)
|
|
@@ -223928,20 +224051,17 @@ class Transform {
|
|
|
223928
224051
|
}
|
|
223929
224052
|
/**
|
|
223930
224053
|
* Multiply `this` Transform times `other` Matrix3d (considered to be a Transform with 0 `origin`).
|
|
223931
|
-
* **Note:** If `this = [A a]`, then
|
|
223932
|
-
* Then `this * other` is defined as [A*B a]. That's because we create a 4x4 matrix for each Transform
|
|
223933
|
-
* with the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix and 0001 as the final row. Then we
|
|
223934
|
-
* multiply those two 4x4 matrixes:
|
|
224054
|
+
* * **Note:** If `this = [A a]` and `other = [B 0]`, then `this * other` is defined as [A*B a] because:
|
|
223935
224055
|
* ```
|
|
223936
224056
|
* equation
|
|
223937
224057
|
* \begin{matrix}
|
|
223938
|
-
* \text{
|
|
223939
|
-
* \text{
|
|
224058
|
+
* \text{this Transform with matrix part }\bold{A}\text{ and origin part }\bold{a} & \blockTransform{A}{a}\\
|
|
224059
|
+
* \text{other matrix }\bold{B}\text{ promoted to block Transform} & \blockTransform{B}{0} \\
|
|
223940
224060
|
* \text{product}& \blockTransform{A}{a}\blockTransform{B}{0}=\blockTransform{AB}{a}
|
|
223941
224061
|
* \end{matrix}
|
|
223942
224062
|
* ```
|
|
223943
224063
|
* @param other the `other` Matrix3d to be multiplied to `this` Transform.
|
|
223944
|
-
* @param result optional preallocated result to reuse.
|
|
224064
|
+
* @param result optional preallocated `result` to reuse.
|
|
223945
224065
|
*/
|
|
223946
224066
|
multiplyTransformMatrix3d(other, result) {
|
|
223947
224067
|
if (!result)
|
|
@@ -223951,13 +224071,13 @@ class Transform {
|
|
|
223951
224071
|
return result;
|
|
223952
224072
|
}
|
|
223953
224073
|
/**
|
|
223954
|
-
* Return the
|
|
224074
|
+
* Return the range of the transformed corners.
|
|
223955
224075
|
* * The 8 corners are transformed individually.
|
|
223956
224076
|
* * **Note:** Suppose you have a geometry, a range box around that geometry, and your Transform is a rotation.
|
|
223957
224077
|
* If you rotate the range box and recompute a new range box around the rotated range box, then the new range
|
|
223958
224078
|
* box will have a larger volume than the original range box. However, if you rotate the geometry itself and
|
|
223959
224079
|
* then recompute the range box, it will be a tighter range box around the rotated geometry. `multiplyRange`
|
|
223960
|
-
* function creates the larger range box because it only has access to the range box and the geometry itself.
|
|
224080
|
+
* function creates the larger range box because it only has access to the range box and not the geometry itself.
|
|
223961
224081
|
*/
|
|
223962
224082
|
multiplyRange(range, result) {
|
|
223963
224083
|
if (range.isNull)
|
|
@@ -223981,7 +224101,7 @@ class Transform {
|
|
|
223981
224101
|
}
|
|
223982
224102
|
/**
|
|
223983
224103
|
* Return a Transform which is the inverse of `this` Transform.
|
|
223984
|
-
* * If `transform = [M o]` then `transformInverse = [MInverse MInverse
|
|
224104
|
+
* * If `transform = [M o]` then `transformInverse = [MInverse -MInverse*o]`
|
|
223985
224105
|
* * Return `undefined` if this Transform's matrix is singular.
|
|
223986
224106
|
*/
|
|
223987
224107
|
inverse(result) {
|
|
@@ -223996,14 +224116,14 @@ class Transform {
|
|
|
223996
224116
|
return Transform.createRefs(matrixInverse.multiplyXYZ(-this._origin.x, -this._origin.y, -this._origin.z), matrixInverse);
|
|
223997
224117
|
}
|
|
223998
224118
|
/**
|
|
223999
|
-
* Initialize 2 Transforms
|
|
224000
|
-
*
|
|
224001
|
-
* @param min the min corner of the box
|
|
224002
|
-
* @param max the max corner of the box
|
|
224003
|
-
* @param npcToGlobal maps
|
|
224004
|
-
*
|
|
224005
|
-
* @param globalToNpc maps
|
|
224006
|
-
*
|
|
224119
|
+
* Initialize 2 Transforms that map between the unit box (specified by 000 and 111) and the range box specified
|
|
224120
|
+
* by the input points.
|
|
224121
|
+
* @param min the min corner of the range box
|
|
224122
|
+
* @param max the max corner of the range box
|
|
224123
|
+
* @param npcToGlobal maps NPC coordinates into range box coordinates. Specifically, maps 000 to `min` and maps
|
|
224124
|
+
* 111 to `max`. This Transform is the inverse of `globalToNpc`. Object created by caller, re-initialized here.
|
|
224125
|
+
* @param globalToNpc maps range box coordinates into NPC coordinates. Specifically, maps `min` to 000 and maps
|
|
224126
|
+
* `max` to 111. This Transform is the inverse of `npcToGlobal`. Object created by caller, re-initialized here.
|
|
224007
224127
|
* * NPC stands for `Normalized Projection Coordinate`
|
|
224008
224128
|
*/
|
|
224009
224129
|
static initFromRange(min, max, npcToGlobal, globalToNpc) {
|
|
@@ -224256,11 +224376,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
224256
224376
|
*/
|
|
224257
224377
|
class YawPitchRollAngles {
|
|
224258
224378
|
/**
|
|
224259
|
-
*
|
|
224379
|
+
* Constructor
|
|
224260
224380
|
* @param yaw counterclockwise rotation angle around z
|
|
224261
224381
|
* @param pitch **clockwise** rotation angle around y
|
|
224262
224382
|
* @param roll counterclockwise rotation angle around x
|
|
224263
|
-
|
|
224383
|
+
*/
|
|
224264
224384
|
constructor(yaw = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero(), pitch = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero(), roll = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.zero()) {
|
|
224265
224385
|
this.yaw = yaw;
|
|
224266
224386
|
this.pitch = pitch;
|
|
@@ -224274,29 +224394,29 @@ class YawPitchRollAngles {
|
|
|
224274
224394
|
return Object.freeze(this);
|
|
224275
224395
|
}
|
|
224276
224396
|
/**
|
|
224277
|
-
*
|
|
224397
|
+
* Constructor for YawPitchRollAngles with angles in degrees.
|
|
224278
224398
|
* @param yawDegrees counterclockwise rotation angle (in degrees) around z
|
|
224279
224399
|
* @param pitchDegrees **clockwise** rotation angle (in degrees) around y
|
|
224280
224400
|
* @param rollDegrees counterclockwise rotation angle (in degrees) around x
|
|
224281
|
-
|
|
224401
|
+
*/
|
|
224282
224402
|
static createDegrees(yawDegrees, pitchDegrees, rollDegrees) {
|
|
224283
224403
|
return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(yawDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(pitchDegrees), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createDegrees(rollDegrees));
|
|
224284
224404
|
}
|
|
224285
224405
|
/**
|
|
224286
|
-
*
|
|
224406
|
+
* Constructor for YawPitchRollAngles with angles in radians.
|
|
224287
224407
|
* @param yawRadians counterclockwise rotation angle (in radians) around z
|
|
224288
224408
|
* @param pitchRadians **clockwise** rotation angle (in radians) around y
|
|
224289
224409
|
* @param rollRadians counterclockwise rotation angle (in radians) around x
|
|
224290
|
-
|
|
224410
|
+
*/
|
|
224291
224411
|
static createRadians(yawRadians, pitchRadians, rollRadians) {
|
|
224292
224412
|
return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(yawRadians), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(pitchRadians), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.createRadians(rollRadians));
|
|
224293
224413
|
}
|
|
224294
|
-
/**
|
|
224414
|
+
/** Construct a `YawPitchRoll` object from an object with 3 named angles */
|
|
224295
224415
|
static fromJSON(json) {
|
|
224296
224416
|
json = json ? json : {};
|
|
224297
224417
|
return new YawPitchRollAngles(_Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.yaw), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.pitch), _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.roll));
|
|
224298
224418
|
}
|
|
224299
|
-
/**
|
|
224419
|
+
/** Populate yaw, pitch and roll fields using `Angle.fromJSON` */
|
|
224300
224420
|
setFromJSON(json) {
|
|
224301
224421
|
json = json ? json : {};
|
|
224302
224422
|
this.yaw = _Angle__WEBPACK_IMPORTED_MODULE_0__.Angle.fromJSON(json.yaw);
|
|
@@ -224306,7 +224426,7 @@ class YawPitchRollAngles {
|
|
|
224306
224426
|
/**
|
|
224307
224427
|
* Convert to a JSON object of form { pitch: 20 , roll: 30 , yaw: 10 }. Angles are in degrees.
|
|
224308
224428
|
* Any values that are exactly zero (with tolerance `Geometry.smallAngleRadians`) are omitted.
|
|
224309
|
-
|
|
224429
|
+
*/
|
|
224310
224430
|
toJSON() {
|
|
224311
224431
|
const val = {};
|
|
224312
224432
|
if (!this.pitch.isAlmostZero)
|
|
@@ -224336,15 +224456,12 @@ class YawPitchRollAngles {
|
|
|
224336
224456
|
&& this.pitch.isAlmostEqualAllowPeriodShift(other.pitch)
|
|
224337
224457
|
&& this.roll.isAlmostEqualAllowPeriodShift(other.roll);
|
|
224338
224458
|
}
|
|
224339
|
-
/**
|
|
224340
|
-
* Make a copy of this YawPitchRollAngles.
|
|
224341
|
-
*/
|
|
224459
|
+
/** Make a copy of this YawPitchRollAngles */
|
|
224342
224460
|
clone() {
|
|
224343
224461
|
return new YawPitchRollAngles(this.yaw.clone(), this.pitch.clone(), this.roll.clone());
|
|
224344
224462
|
}
|
|
224345
224463
|
/**
|
|
224346
224464
|
* Expand the angles into a (rigid rotation) matrix.
|
|
224347
|
-
*
|
|
224348
224465
|
* * The returned matrix is "rigid" (i.e., it has unit length rows and columns, and its transpose is its inverse).
|
|
224349
224466
|
* * The rigid matrix is always a right handed coordinate system.
|
|
224350
224467
|
* @param result optional pre-allocated `Matrix3d`
|
|
@@ -224381,7 +224498,8 @@ class YawPitchRollAngles {
|
|
|
224381
224498
|
*/
|
|
224382
224499
|
return _Matrix3d__WEBPACK_IMPORTED_MODULE_1__.Matrix3d.createRowValues(cz * cy, -(sz * cx + cz * sy * sx), (sz * sx - cz * sy * cx), sz * cy, (cz * cx - sz * sy * sx), -(cz * sx + sz * sy * cx), sy, cy * sx, cy * cx, result);
|
|
224383
224500
|
}
|
|
224384
|
-
/**
|
|
224501
|
+
/**
|
|
224502
|
+
* Returns true if this rotation does nothing.
|
|
224385
224503
|
* * If allowPeriodShift is false, any nonzero angle is considered a non-identity
|
|
224386
224504
|
* * If allowPeriodShift is true, all angles are individually allowed to be any multiple of 360 degrees.
|
|
224387
224505
|
*/
|
|
@@ -224426,7 +224544,8 @@ class YawPitchRollAngles {
|
|
|
224426
224544
|
angles: YawPitchRollAngles.createFromMatrix3d(transform.matrix),
|
|
224427
224545
|
};
|
|
224428
224546
|
}
|
|
224429
|
-
/**
|
|
224547
|
+
/**
|
|
224548
|
+
* Attempts to create a YawPitchRollAngles object from a Matrix3d
|
|
224430
224549
|
* * This conversion fails if the matrix is not rigid (unit rows and columns, and transpose is inverse)
|
|
224431
224550
|
* * In the failure case the method's return value is `undefined`.
|
|
224432
224551
|
* * In the failure case, if the optional result was supplied, that result will nonetheless be filled with
|
|
@@ -248738,19 +248857,22 @@ class SteppedIndexFunctionFactory {
|
|
|
248738
248857
|
static createConstant(value = 0) {
|
|
248739
248858
|
return (_i, _n) => value;
|
|
248740
248859
|
}
|
|
248741
|
-
/**
|
|
248860
|
+
/**
|
|
248861
|
+
* Return a function that steps linearly
|
|
248742
248862
|
* * f(i,n) = y0 + (i/n) * a
|
|
248743
248863
|
*/
|
|
248744
248864
|
static createLinear(a, f0 = 0) {
|
|
248745
248865
|
return (i, n) => (f0 + a * (i / n));
|
|
248746
248866
|
}
|
|
248747
|
-
/**
|
|
248867
|
+
/**
|
|
248868
|
+
* Return a function that steps with cosine of angles in sweep
|
|
248748
248869
|
* * f(i,n) = y0 + amplitude * cos(i/n)
|
|
248749
248870
|
*/
|
|
248750
248871
|
static createCosine(amplitude, sweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.create360(), f0 = 0) {
|
|
248751
248872
|
return (i, n) => (f0 + amplitude * Math.cos(sweep.fractionToRadians(i / n)));
|
|
248752
248873
|
}
|
|
248753
|
-
/**
|
|
248874
|
+
/**
|
|
248875
|
+
* Return a function that steps with cosine of angles in sweep.
|
|
248754
248876
|
* * f(i,n) = y0 + amplitude * sin(i/n)
|
|
248755
248877
|
*/
|
|
248756
248878
|
static createSine(amplitude, sweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.create360(), f0 = 0) {
|
|
@@ -248762,7 +248884,8 @@ class SteppedIndexFunctionFactory {
|
|
|
248762
248884
|
* @alpha
|
|
248763
248885
|
*/
|
|
248764
248886
|
class Sample {
|
|
248765
|
-
/**
|
|
248887
|
+
/**
|
|
248888
|
+
* Return an array of Point3d, with x,y,z all stepping through a range of values.
|
|
248766
248889
|
* x varies fastest, then y then z
|
|
248767
248890
|
*/
|
|
248768
248891
|
static createPoint3dLattice(low, step, high) {
|
|
@@ -248773,7 +248896,8 @@ class Sample {
|
|
|
248773
248896
|
points.push(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x, y, z));
|
|
248774
248897
|
return points;
|
|
248775
248898
|
}
|
|
248776
|
-
/**
|
|
248899
|
+
/**
|
|
248900
|
+
* Return an array of Point2d, with x,y all stepping through a range of values.
|
|
248777
248901
|
* x varies fastest, then y
|
|
248778
248902
|
*/
|
|
248779
248903
|
static createPoint2dLattice(low, step, high) {
|
|
@@ -248821,7 +248945,8 @@ class Sample {
|
|
|
248821
248945
|
static createCenteredRectangleXY(cx, cy, ax, ay, z = 0) {
|
|
248822
248946
|
return this.createRectangleXY(cx - ax, cy - ay, 2 * ax, 2 * ay, z);
|
|
248823
248947
|
}
|
|
248824
|
-
/**
|
|
248948
|
+
/**
|
|
248949
|
+
* Access the last point in the array. push another shifted by dx,dy,dz.
|
|
248825
248950
|
* * No push if all are 0.
|
|
248826
248951
|
* * If array is empty, push a leading 000
|
|
248827
248952
|
*/
|
|
@@ -248843,7 +248968,8 @@ class Sample {
|
|
|
248843
248968
|
points.push(points[0].clone());
|
|
248844
248969
|
return points;
|
|
248845
248970
|
}
|
|
248846
|
-
/**
|
|
248971
|
+
/**
|
|
248972
|
+
* Create points for an L shaped polygon
|
|
248847
248973
|
* * lower left at x0,y0.
|
|
248848
248974
|
* * ax,ay are larger side lengths (lower left to corners along x and y directions)
|
|
248849
248975
|
* * bx,by are smaller side lengths (inner corner to points along x and y directions)
|
|
@@ -248868,7 +248994,7 @@ class Sample {
|
|
|
248868
248994
|
return [
|
|
248869
248995
|
plane0, plane1, plane2,
|
|
248870
248996
|
_clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createNormalAndDistance(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(3, 4, 0), 2.0),
|
|
248871
|
-
_clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createEdgeXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(24, 32, 0))
|
|
248997
|
+
_clipping_ClipPlane__WEBPACK_IMPORTED_MODULE_6__.ClipPlane.createEdgeXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(24, 32, 0)),
|
|
248872
248998
|
];
|
|
248873
248999
|
}
|
|
248874
249000
|
/**
|
|
@@ -248884,16 +249010,17 @@ class Sample {
|
|
|
248884
249010
|
const quadrant4 = _clipping_ConvexClipPlaneSet__WEBPACK_IMPORTED_MODULE_7__.ConvexClipPlaneSet.createXYBox(0, -1, 1, 0);
|
|
248885
249011
|
result.push(_clipping_UnionOfConvexClipPlaneSets__WEBPACK_IMPORTED_MODULE_8__.UnionOfConvexClipPlaneSets.createConvexSets([
|
|
248886
249012
|
quadrant1.clone(),
|
|
248887
|
-
quadrant4.clone()
|
|
249013
|
+
quadrant4.clone(),
|
|
248888
249014
|
]));
|
|
248889
249015
|
result.push(_clipping_UnionOfConvexClipPlaneSets__WEBPACK_IMPORTED_MODULE_8__.UnionOfConvexClipPlaneSets.createConvexSets([
|
|
248890
249016
|
quadrant1.clone(),
|
|
248891
249017
|
quadrant2.clone(),
|
|
248892
|
-
quadrant4.clone()
|
|
249018
|
+
quadrant4.clone(),
|
|
248893
249019
|
]));
|
|
248894
249020
|
return result;
|
|
248895
249021
|
}
|
|
248896
|
-
/**
|
|
249022
|
+
/**
|
|
249023
|
+
* Create (unweighted) bspline curves.
|
|
248897
249024
|
* order varies from 2 to 5
|
|
248898
249025
|
*/
|
|
248899
249026
|
static createBsplineCurves(includeMultipleKnots = false) {
|
|
@@ -248930,7 +249057,8 @@ class Sample {
|
|
|
248930
249057
|
}
|
|
248931
249058
|
return result;
|
|
248932
249059
|
}
|
|
248933
|
-
/**
|
|
249060
|
+
/**
|
|
249061
|
+
* Create weighted bspline curves.
|
|
248934
249062
|
* order varies from 2 to 5
|
|
248935
249063
|
*/
|
|
248936
249064
|
static createBspline3dHCurves() {
|
|
@@ -248968,8 +249096,7 @@ class Sample {
|
|
|
248968
249096
|
}
|
|
248969
249097
|
return result;
|
|
248970
249098
|
}
|
|
248971
|
-
/** Create weighted bsplines for circular arcs.
|
|
248972
|
-
*/
|
|
249099
|
+
/** Create weighted bsplines for circular arcs. */
|
|
248973
249100
|
static createBspline3dHArcs() {
|
|
248974
249101
|
const result = [];
|
|
248975
249102
|
const halfRadians = _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.degreesToRadians(60.0);
|
|
@@ -248984,14 +249111,15 @@ class Sample {
|
|
|
248984
249111
|
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(-1, 0, 0, c),
|
|
248985
249112
|
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(-c, -s, 0, 1),
|
|
248986
249113
|
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(c, -s, 0, c),
|
|
248987
|
-
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(1, 0, 0, 1)
|
|
249114
|
+
_geometry4d_Point4d__WEBPACK_IMPORTED_MODULE_10__.Point4d.create(1, 0, 0, 1),
|
|
248988
249115
|
];
|
|
248989
249116
|
const knots = [0, 0, 1, 1, 2, 2, 3, 3];
|
|
248990
249117
|
const curve = _bspline_BSplineCurve3dH__WEBPACK_IMPORTED_MODULE_11__.BSplineCurve3dH.create(points, knots, 3);
|
|
248991
249118
|
result.push(curve);
|
|
248992
249119
|
return result;
|
|
248993
249120
|
}
|
|
248994
|
-
/**
|
|
249121
|
+
/**
|
|
249122
|
+
* Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.
|
|
248995
249123
|
* @param points array of [x,y,z,w]
|
|
248996
249124
|
* @param center center of arc
|
|
248997
249125
|
* @param axes matrix with 0 and 90 degree axes
|
|
@@ -249037,7 +249165,7 @@ class Sample {
|
|
|
249037
249165
|
result.push(b);
|
|
249038
249166
|
return result;
|
|
249039
249167
|
}
|
|
249040
|
-
/**
|
|
249168
|
+
/** Create a plane from origin and normal coordinates -- default to 001 normal if needed. */
|
|
249041
249169
|
static createPlane(x, y, z, u, v, w) {
|
|
249042
249170
|
const point = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x, y, z);
|
|
249043
249171
|
const vector = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(u, v, w).normalize();
|
|
@@ -249057,22 +249185,23 @@ class Sample {
|
|
|
249057
249185
|
return [
|
|
249058
249186
|
_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
|
|
249059
249187
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
|
|
249060
|
-
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0)
|
|
249188
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
|
|
249061
249189
|
]),
|
|
249062
249190
|
_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
|
|
249063
249191
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
|
|
249064
249192
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
|
|
249065
|
-
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0)
|
|
249193
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0),
|
|
249066
249194
|
]),
|
|
249067
249195
|
_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createPoints([
|
|
249068
249196
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0),
|
|
249069
249197
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0),
|
|
249070
249198
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 1, 0),
|
|
249071
|
-
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(2, 2, 0)
|
|
249072
|
-
])
|
|
249199
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(2, 2, 0),
|
|
249200
|
+
]),
|
|
249073
249201
|
];
|
|
249074
249202
|
}
|
|
249075
|
-
/**
|
|
249203
|
+
/**
|
|
249204
|
+
* Assorted Matrix3d:
|
|
249076
249205
|
* * identity
|
|
249077
249206
|
* * rotation around x
|
|
249078
249207
|
* * rotation around general vector
|
|
@@ -249097,10 +249226,11 @@ class Sample {
|
|
|
249097
249226
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(1, 2, 0),
|
|
249098
249227
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(1, 2, 3),
|
|
249099
249228
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createUniformScale(2.0)),
|
|
249100
|
-
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createRadians(10)))
|
|
249229
|
+
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(4, 1, -2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createRadians(10))),
|
|
249101
249230
|
];
|
|
249102
249231
|
}
|
|
249103
|
-
/**
|
|
249232
|
+
/**
|
|
249233
|
+
* Return an array of Matrix3d with various skew and scale. This includes at least:
|
|
249104
249234
|
* * identity
|
|
249105
249235
|
* * 3 distinct diagonals.
|
|
249106
249236
|
* * The distinct diagonal base with smaller value added to other 6 spots in succession.
|
|
@@ -249119,9 +249249,10 @@ class Sample {
|
|
|
249119
249249
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(5, 2, 3, 2, 6, 1, -1, 2, 7),
|
|
249120
249250
|
];
|
|
249121
249251
|
}
|
|
249122
|
-
/**
|
|
249252
|
+
/**
|
|
249253
|
+
* Return an array of singular Matrix3d. This includes at least:
|
|
249123
249254
|
* * all zeros
|
|
249124
|
-
* * one
|
|
249255
|
+
* * one non-zero column
|
|
249125
249256
|
* * two independent columns, third is zero
|
|
249126
249257
|
* * two independent columns, third is sum of those
|
|
249127
249258
|
* * two independent columns, third is copy of one
|
|
@@ -249133,26 +249264,26 @@ class Sample {
|
|
|
249133
249264
|
const vector0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.createZero();
|
|
249134
249265
|
return [
|
|
249135
249266
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createZero(),
|
|
249136
|
-
// one
|
|
249267
|
+
// one non-zero column
|
|
249137
249268
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vector0, vector0),
|
|
249138
249269
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vectorU, vector0),
|
|
249139
|
-
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vector0,
|
|
249140
|
-
// two independent
|
|
249270
|
+
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vector0, vectorU),
|
|
249271
|
+
// two independent non-zero columns with one zero column
|
|
249141
249272
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vector0),
|
|
249142
249273
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vector0, vectorU, vectorV),
|
|
249143
|
-
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(
|
|
249144
|
-
//
|
|
249274
|
+
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vector0, vectorV),
|
|
249275
|
+
// two independent columns with one dependent column
|
|
249145
249276
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorUPlusV),
|
|
249146
249277
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorUPlusV, vectorV),
|
|
249147
|
-
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorUPlusV,
|
|
249148
|
-
// two independent with duplicate
|
|
249149
|
-
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorU),
|
|
249278
|
+
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorUPlusV, vectorU, vectorV),
|
|
249279
|
+
// two independent with columns with one duplicate column
|
|
249150
249280
|
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorU, vectorV),
|
|
249151
|
-
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(
|
|
249281
|
+
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorU, vectorV, vectorU),
|
|
249282
|
+
_geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createColumns(vectorV, vectorU, vectorU),
|
|
249152
249283
|
];
|
|
249153
249284
|
}
|
|
249154
249285
|
/**
|
|
249155
|
-
*
|
|
249286
|
+
* Return an array of rigid transforms. This includes (at least)
|
|
249156
249287
|
* * Identity
|
|
249157
249288
|
* * translation with identity matrix
|
|
249158
249289
|
* * rotation around origin and arbitrary vector
|
|
@@ -249167,16 +249298,15 @@ class Sample {
|
|
|
249167
249298
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createTranslationXYZ(distanceScale3 * 1, distanceScale3 * 2, distanceScale3 * 3),
|
|
249168
249299
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(10))),
|
|
249169
249300
|
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(1, 2, 3), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(10))),
|
|
249170
|
-
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-2, 1, 4), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(35)))
|
|
249301
|
+
_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(distanceScale4 * 4, distanceScale4 * 1, -distanceScale4 * 2), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-2, 1, 4), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(35))),
|
|
249171
249302
|
];
|
|
249172
249303
|
}
|
|
249173
|
-
/**
|
|
249174
|
-
* Return a single rigid transform with all terms nonzero.
|
|
249175
|
-
*/
|
|
249304
|
+
/** Return a single rigid transform with all terms nonzero. */
|
|
249176
249305
|
static createMessyRigidTransform(fixedPoint) {
|
|
249177
249306
|
return _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createFixedPointAndMatrix(fixedPoint ? fixedPoint : _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(0.3, -0.2, 1.2), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15.7)));
|
|
249178
249307
|
}
|
|
249179
|
-
/**
|
|
249308
|
+
/**
|
|
249309
|
+
* Return various rigid matrices:
|
|
249180
249310
|
* * identity
|
|
249181
249311
|
* * small rotations around x, y, z
|
|
249182
249312
|
* * small rotation around (1,2,3)
|
|
@@ -249206,9 +249336,7 @@ class Sample {
|
|
|
249206
249336
|
}
|
|
249207
249337
|
return result;
|
|
249208
249338
|
}
|
|
249209
|
-
/**
|
|
249210
|
-
* Create full Map4d for each `Sample.createInvertibleTransforms ()`
|
|
249211
|
-
*/
|
|
249339
|
+
/** Create full Map4d for each `Sample.createInvertibleTransforms()` */
|
|
249212
249340
|
static createMap4ds() {
|
|
249213
249341
|
const result = [];
|
|
249214
249342
|
let transform;
|
|
@@ -249226,7 +249354,12 @@ class Sample {
|
|
|
249226
249354
|
static createSimplePaths(withGaps = false) {
|
|
249227
249355
|
const point0 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0);
|
|
249228
249356
|
const point1 = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0);
|
|
249229
|
-
const p1 = [
|
|
249357
|
+
const p1 = [
|
|
249358
|
+
point1, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0),
|
|
249359
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0),
|
|
249360
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0),
|
|
249361
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0),
|
|
249362
|
+
];
|
|
249230
249363
|
const segment1 = _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, point1);
|
|
249231
249364
|
const vectorU = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitX(3);
|
|
249232
249365
|
const vectorV = _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(3);
|
|
@@ -249241,7 +249374,8 @@ class Sample {
|
|
|
249241
249374
|
simplePaths.push(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0)), _curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(5, 0, 0))));
|
|
249242
249375
|
return simplePaths;
|
|
249243
249376
|
}
|
|
249244
|
-
/**
|
|
249377
|
+
/**
|
|
249378
|
+
* Assorted `Path` with lines and arcs.
|
|
249245
249379
|
* Specifically useful for offset tests.
|
|
249246
249380
|
*/
|
|
249247
249381
|
static createLineArcPaths() {
|
|
@@ -249270,12 +249404,16 @@ class Sample {
|
|
|
249270
249404
|
}
|
|
249271
249405
|
/** Assorted `PointString3d` objects. */
|
|
249272
249406
|
static createSimplePointStrings() {
|
|
249273
|
-
const p1 = [
|
|
249407
|
+
const p1 = [
|
|
249408
|
+
[_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)],
|
|
249409
|
+
[_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)],
|
|
249410
|
+
[_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)]],
|
|
249411
|
+
];
|
|
249274
249412
|
const simplePaths = [
|
|
249275
249413
|
_curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0)),
|
|
249276
249414
|
_curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0)),
|
|
249277
249415
|
_curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(10, 5, 0)),
|
|
249278
|
-
_curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(p1)
|
|
249416
|
+
_curve_PointString3d__WEBPACK_IMPORTED_MODULE_22__.PointString3d.create(p1),
|
|
249279
249417
|
];
|
|
249280
249418
|
return simplePaths;
|
|
249281
249419
|
}
|
|
@@ -249304,8 +249442,7 @@ class Sample {
|
|
|
249304
249442
|
* @param dx1 distance along x axis at y=dy
|
|
249305
249443
|
* @param numPhase number of phases of the jump.
|
|
249306
249444
|
* @param dyReturn y value for return to origin. If 0, the wave ends at y=0 after then final "down" with one extra horizontal dx0
|
|
249307
|
-
*
|
|
249308
|
-
*
|
|
249445
|
+
* If nonzero, rise to that y value, return to x=0, and return down to origin.
|
|
249309
249446
|
*/
|
|
249310
249447
|
static createSquareWave(origin, dx0, dy, dx1, numPhase, dyReturn) {
|
|
249311
249448
|
const result = [origin.clone()];
|
|
@@ -249366,7 +249503,7 @@ class Sample {
|
|
|
249366
249503
|
}
|
|
249367
249504
|
return points;
|
|
249368
249505
|
}
|
|
249369
|
-
/**
|
|
249506
|
+
/** Append sawtooth with x distances successively scaled by xFactor */
|
|
249370
249507
|
static appendVariableSawTooth(points, dxLow, riseX, riseY, dxHigh, numPhase, xFactor) {
|
|
249371
249508
|
let factor = 1.0;
|
|
249372
249509
|
for (let i = 0; i < numPhase; i++) {
|
|
@@ -249407,7 +249544,8 @@ class Sample {
|
|
|
249407
249544
|
data.push(data[0].clone());
|
|
249408
249545
|
return data;
|
|
249409
249546
|
}
|
|
249410
|
-
/**
|
|
249547
|
+
/**
|
|
249548
|
+
* Append to a linestring, taking steps along given vector directions
|
|
249411
249549
|
* If the linestring is empty, a 000 point is added.
|
|
249412
249550
|
* @param linestring LineString3d to receive points.
|
|
249413
249551
|
* @param numPhase number of phases of the sawtooth
|
|
@@ -249424,7 +249562,8 @@ class Sample {
|
|
|
249424
249562
|
}
|
|
249425
249563
|
}
|
|
249426
249564
|
}
|
|
249427
|
-
/**
|
|
249565
|
+
/**
|
|
249566
|
+
* Assorted regions with arc boundaries
|
|
249428
249567
|
* * full circle
|
|
249429
249568
|
* * with varying sweep:
|
|
249430
249569
|
* * partial arc with single chord closure
|
|
@@ -249451,7 +249590,8 @@ class Sample {
|
|
|
249451
249590
|
}
|
|
249452
249591
|
return result;
|
|
249453
249592
|
}
|
|
249454
|
-
/**
|
|
249593
|
+
/**
|
|
249594
|
+
* Assorted loops in xy plane:
|
|
249455
249595
|
* * unit square
|
|
249456
249596
|
* * rectangle
|
|
249457
249597
|
* * L shape
|
|
@@ -249491,10 +249631,14 @@ class Sample {
|
|
|
249491
249631
|
];
|
|
249492
249632
|
if (includeBCurves) {
|
|
249493
249633
|
const ey = 1.0;
|
|
249494
|
-
result.push(_curve_ParityRegion__WEBPACK_IMPORTED_MODULE_24__.ParityRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, pointA), _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_9__.BSplineCurve3d.createUniformKnots([
|
|
249634
|
+
result.push(_curve_ParityRegion__WEBPACK_IMPORTED_MODULE_24__.ParityRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(point0, pointA), _bspline_BSplineCurve__WEBPACK_IMPORTED_MODULE_9__.BSplineCurve3d.createUniformKnots([
|
|
249635
|
+
pointA,
|
|
249636
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, ey),
|
|
249495
249637
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 2 * ey),
|
|
249496
249638
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 2, 3 * ey),
|
|
249497
|
-
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 4 * ey),
|
|
249639
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, 4 * ey),
|
|
249640
|
+
pointB,
|
|
249641
|
+
], 3), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0))));
|
|
249498
249642
|
}
|
|
249499
249643
|
return result;
|
|
249500
249644
|
}
|
|
@@ -249508,7 +249652,7 @@ class Sample {
|
|
|
249508
249652
|
const by = 2.0;
|
|
249509
249653
|
const result = [
|
|
249510
249654
|
_curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), ax, ay)), _curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 2 * ay, 0), bx, by))),
|
|
249511
|
-
_curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.create(Sample.createRectangleXY(parityRange.low.x, parityRange.high.y + 0.5, parityRange.xLength(), parityRange.yLength()))), parityRegions[0])
|
|
249655
|
+
_curve_UnionRegion__WEBPACK_IMPORTED_MODULE_25__.UnionRegion.create(_curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.create(Sample.createRectangleXY(parityRange.low.x, parityRange.high.y + 0.5, parityRange.xLength(), parityRange.yLength()))), parityRegions[0]),
|
|
249512
249656
|
];
|
|
249513
249657
|
return result;
|
|
249514
249658
|
}
|
|
@@ -249527,7 +249671,8 @@ class Sample {
|
|
|
249527
249671
|
];
|
|
249528
249672
|
return result;
|
|
249529
249673
|
}
|
|
249530
|
-
/**
|
|
249674
|
+
/**
|
|
249675
|
+
* Assorted smooth curve primitives:
|
|
249531
249676
|
* * line segments
|
|
249532
249677
|
* * arcs
|
|
249533
249678
|
*/
|
|
@@ -249542,7 +249687,7 @@ class Sample {
|
|
|
249542
249687
|
_curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(size, alpha * size, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.create(-alpha * beta * size, beta * size, 0), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(-40, 270)),
|
|
249543
249688
|
];
|
|
249544
249689
|
}
|
|
249545
|
-
/**
|
|
249690
|
+
/** Assorted small polyface grids, possibly expanded by gridMultiplier */
|
|
249546
249691
|
static createSimpleIndexedPolyfaces(gridMultiplier) {
|
|
249547
249692
|
const meshes = [
|
|
249548
249693
|
Sample.createTriangularUnitGridPolyface(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitX(), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitY(), gridMultiplier * 3, 2 * gridMultiplier, false, false, false),
|
|
@@ -249773,7 +249918,7 @@ class Sample {
|
|
|
249773
249918
|
}
|
|
249774
249919
|
return _bspline_BSplineSurface__WEBPACK_IMPORTED_MODULE_28__.BSplineSurface3dH.create(xyzPoles, weights, numU, orderU, undefined, numV, orderV, undefined);
|
|
249775
249920
|
}
|
|
249776
|
-
/**
|
|
249921
|
+
/** Assorted linear sweeps */
|
|
249777
249922
|
static createSimpleLinearSweeps() {
|
|
249778
249923
|
const result = [];
|
|
249779
249924
|
const base = _curve_Loop__WEBPACK_IMPORTED_MODULE_23__.Loop.create(_curve_LineString3d__WEBPACK_IMPORTED_MODULE_15__.LineString3d.createRectangleXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(), 2, 3));
|
|
@@ -249792,7 +249937,7 @@ class Sample {
|
|
|
249792
249937
|
const xyPoints = [
|
|
249793
249938
|
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(0, 0),
|
|
249794
249939
|
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 0),
|
|
249795
|
-
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 1)
|
|
249940
|
+
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(1, 1),
|
|
249796
249941
|
];
|
|
249797
249942
|
result.push(_solid_LinearSweep__WEBPACK_IMPORTED_MODULE_30__.LinearSweep.createZSweep(xyPoints, 1, 3, false));
|
|
249798
249943
|
// this forces artificial closure point . . .
|
|
@@ -249836,7 +249981,7 @@ class Sample {
|
|
|
249836
249981
|
for (const axis of [
|
|
249837
249982
|
_geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(0, 0, 0, 0, 1, 0),
|
|
249838
249983
|
_geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(5, 0, 0, 0, 1, 0),
|
|
249839
|
-
_geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0)
|
|
249984
|
+
_geometry3d_Ray3d__WEBPACK_IMPORTED_MODULE_14__.Ray3d.createXYZUVW(-1, 0, 0, -1, 1, 0),
|
|
249840
249985
|
]) {
|
|
249841
249986
|
result.push(_solid_RotationalSweep__WEBPACK_IMPORTED_MODULE_31__.RotationalSweep.create(base, axis, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(45.0), false));
|
|
249842
249987
|
result.push(_solid_RotationalSweep__WEBPACK_IMPORTED_MODULE_31__.RotationalSweep.create(base, axis, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(150.0), true));
|
|
@@ -249861,7 +250006,7 @@ class Sample {
|
|
|
249861
250006
|
/** Create true (non-spherical) ellipsoids. */
|
|
249862
250007
|
static createEllipsoids() {
|
|
249863
250008
|
return [
|
|
249864
|
-
_solid_Sphere__WEBPACK_IMPORTED_MODULE_32__.Sphere.createEllipsoid(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(4, 1, 1, 1, 4, 1, 0.5, 0.2, 5)), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createFullLatitude(), true)
|
|
250009
|
+
_solid_Sphere__WEBPACK_IMPORTED_MODULE_32__.Sphere.createEllipsoid(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRowValues(4, 1, 1, 1, 4, 1, 0.5, 0.2, 5)), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createFullLatitude(), true),
|
|
249865
250010
|
];
|
|
249866
250011
|
}
|
|
249867
250012
|
/** Create assorted cones. */
|
|
@@ -249919,8 +250064,7 @@ class Sample {
|
|
|
249919
250064
|
result.push(_solid_Box__WEBPACK_IMPORTED_MODULE_35__.Box.createDgnBox(cornerA, frameY.columnX(), frameY.columnY(), cornerA.plusScaled(frameY.columnZ(), h), aX, aY, bX, bY, capped));
|
|
249920
250065
|
return result;
|
|
249921
250066
|
}
|
|
249922
|
-
/**
|
|
249923
|
-
*/
|
|
250067
|
+
/** Create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z) */
|
|
249924
250068
|
static createRectangle(x0, y0, x1, y1, z = 0.0, closed = false) {
|
|
249925
250069
|
const points = [
|
|
249926
250070
|
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x0, y0, z),
|
|
@@ -249932,8 +250076,7 @@ class Sample {
|
|
|
249932
250076
|
points.push(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(x0, y0, z));
|
|
249933
250077
|
return points;
|
|
249934
250078
|
}
|
|
249935
|
-
/**
|
|
249936
|
-
*/
|
|
250079
|
+
/** Create an array of points for a rectangle with corners of a Range2d. */
|
|
249937
250080
|
static createRectangleInRange2d(range, z = 0.0, closed = false) {
|
|
249938
250081
|
const x0 = range.low.x;
|
|
249939
250082
|
const x1 = range.high.x;
|
|
@@ -250042,8 +250185,9 @@ class Sample {
|
|
|
250042
250185
|
}
|
|
250043
250186
|
return points;
|
|
250044
250187
|
}
|
|
250045
|
-
/**
|
|
250046
|
-
*
|
|
250188
|
+
/**
|
|
250189
|
+
* Primary shape is a "triangle" with lower edge pushed in so it becomes a mild nonconvex quad.
|
|
250190
|
+
* Fractal effects are gentle.
|
|
250047
250191
|
*/
|
|
250048
250192
|
static nonConvexQuadSimpleFractal(numRecursion, perpendicularFactor) {
|
|
250049
250193
|
const pattern = [
|
|
@@ -250060,7 +250204,7 @@ class Sample {
|
|
|
250060
250204
|
];
|
|
250061
250205
|
return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);
|
|
250062
250206
|
}
|
|
250063
|
-
/**
|
|
250207
|
+
/** Create a diamond with convex fractal */
|
|
250064
250208
|
static createFractalDiamondConvexPattern(numRecursion, perpendicularFactor) {
|
|
250065
250209
|
const pattern = [
|
|
250066
250210
|
_geometry3d_Point2dVector2d__WEBPACK_IMPORTED_MODULE_2__.Point2d.create(),
|
|
@@ -250157,7 +250301,7 @@ class Sample {
|
|
|
250157
250301
|
];
|
|
250158
250302
|
return Sample.createRecursiveFractalPolygon(poles, pattern, numRecursion, perpendicularFactor);
|
|
250159
250303
|
}
|
|
250160
|
-
/**
|
|
250304
|
+
/** Append interpolated points from the array tail to the target. */
|
|
250161
250305
|
static appendSplits(points, target, numSplit, includeTarget) {
|
|
250162
250306
|
const pointA = points[points.length - 1];
|
|
250163
250307
|
for (let i = 0; i < numSplit; i++)
|
|
@@ -250201,7 +250345,8 @@ class Sample {
|
|
|
250201
250345
|
geometry.push(_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.createXYZXYZ(x0, y1, z0, x0, y1, z1));
|
|
250202
250346
|
return geometry;
|
|
250203
250347
|
}
|
|
250204
|
-
/**
|
|
250348
|
+
/**
|
|
250349
|
+
* Assorted transition spirals
|
|
250205
250350
|
* * (All combinations of bearing radius bearing radius length subsets.)
|
|
250206
250351
|
*/
|
|
250207
250352
|
static createSimpleTransitionSpirals() {
|
|
@@ -250222,10 +250367,11 @@ class Sample {
|
|
|
250222
250367
|
_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("ChineseCubic", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
|
|
250223
250368
|
_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("JapaneseCubic", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
|
|
250224
250369
|
_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createFromLengthAndRadius("DirectHalfCosine", r0, r1, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(0), undefined, arcLength, undefined, _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 0), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundVector(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Vector3d.unitZ(), _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(15)))),
|
|
250225
|
-
_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createCzechCubic(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createIdentity(), arcLength, r1)
|
|
250370
|
+
_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createCzechCubic(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createIdentity(), arcLength, r1),
|
|
250226
250371
|
];
|
|
250227
250372
|
}
|
|
250228
|
-
/**
|
|
250373
|
+
/**
|
|
250374
|
+
* Create a Bezier curve with significant twist effects
|
|
250229
250375
|
* * r and theta are circle in xy plane at steps in thetaStepper
|
|
250230
250376
|
* * z varies with sin(phi) at steps in phiStepper.
|
|
250231
250377
|
*/
|
|
@@ -250281,18 +250427,10 @@ class Sample {
|
|
|
250281
250427
|
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// arc spline with smooth joins
|
|
250282
250428
|
_curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(5, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 0)), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(15, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 360)), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createXY(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(25, 0), 5, _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(180, 0)))));
|
|
250283
250429
|
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// 2-pt Interpolation Curve
|
|
250284
|
-
_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
|
|
250285
|
-
fitPoints: [pointsA[0], pointsA[1]],
|
|
250286
|
-
})))));
|
|
250430
|
+
_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: [pointsA[0], pointsA[1]] })))));
|
|
250287
250431
|
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(// 3-pt Interpolation Curve
|
|
250288
|
-
_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
|
|
250289
|
-
|
|
250290
|
-
})))));
|
|
250291
|
-
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({
|
|
250292
|
-
fitPoints: pointsA,
|
|
250293
|
-
startTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, -1),
|
|
250294
|
-
endTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-1, -1),
|
|
250295
|
-
})))));
|
|
250432
|
+
_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: [pointsA[0], pointsA[1], pointsA[2]] })))));
|
|
250433
|
+
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3d.createCapture(_bspline_InterpolationCurve3d__WEBPACK_IMPORTED_MODULE_45__.InterpolationCurve3dOptions.create({ fitPoints: pointsA, startTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, -1), endTangent: _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-1, -1) })))));
|
|
250296
250434
|
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_spiral_IntegratedSpiral3d__WEBPACK_IMPORTED_MODULE_39__.IntegratedSpiral3d.createRadiusRadiusBearingBearing(_geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 100), _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(10, 75), _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 1), _geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero(), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundAxisIndex(2, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(30))), "bloss"))));
|
|
250297
250435
|
result.push(_curve_CurveChainWithDistanceIndex__WEBPACK_IMPORTED_MODULE_44__.CurveChainWithDistanceIndex.createCapture(_curve_Path__WEBPACK_IMPORTED_MODULE_21__.Path.create(_curve_spiral_DirectSpiral3d__WEBPACK_IMPORTED_MODULE_41__.DirectSpiral3d.createDirectHalfCosine(_geometry3d_Transform__WEBPACK_IMPORTED_MODULE_16__.Transform.createOriginAndMatrix(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero(), _geometry3d_Matrix3d__WEBPACK_IMPORTED_MODULE_12__.Matrix3d.createRotationAroundAxisIndex(2, _geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(110))), 50, 350, _geometry3d_Segment1d__WEBPACK_IMPORTED_MODULE_40__.Segment1d.create(0, 1)))));
|
|
250298
250436
|
return result;
|
|
@@ -250376,7 +250514,7 @@ class Sample {
|
|
|
250376
250514
|
const sweep2 = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(160.0, 380.0);
|
|
250377
250515
|
for (const arcs of [
|
|
250378
250516
|
Sample.createArcs(1.0), Sample.createArcs(0.5),
|
|
250379
|
-
Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2)
|
|
250517
|
+
Sample.createArcs(1.0, sweep1), Sample.createArcs(0.3, sweep2),
|
|
250380
250518
|
]) {
|
|
250381
250519
|
for (const arc of arcs)
|
|
250382
250520
|
result.push(arc);
|
|
@@ -250479,10 +250617,10 @@ class Sample {
|
|
|
250479
250617
|
return points;
|
|
250480
250618
|
}
|
|
250481
250619
|
/**
|
|
250482
|
-
* *
|
|
250483
|
-
* *
|
|
250484
|
-
* *
|
|
250485
|
-
* *
|
|
250620
|
+
* * Let ay = 4
|
|
250621
|
+
* * Base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).
|
|
250622
|
+
* * Shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)
|
|
250623
|
+
* * Shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)
|
|
250486
250624
|
* * This is useful for testing non-y-monotonic face situations.
|
|
250487
250625
|
* * Return as points.
|
|
250488
250626
|
* @param dy1
|
|
@@ -250502,7 +250640,7 @@ class Sample {
|
|
|
250502
250640
|
return points;
|
|
250503
250641
|
}
|
|
250504
250642
|
/**
|
|
250505
|
-
*
|
|
250643
|
+
* Make line segments for each pair of adjacent points.
|
|
250506
250644
|
* @param points array of points
|
|
250507
250645
|
* @param forceClosure if true, inspect coordinates to determine if a closure edge is needed.
|
|
250508
250646
|
*/
|
|
@@ -250618,7 +250756,8 @@ class Sample {
|
|
|
250618
250756
|
this.appendGeometry(this.createBagOfCurves(), result);
|
|
250619
250757
|
return result;
|
|
250620
250758
|
}
|
|
250621
|
-
/**
|
|
250759
|
+
/**
|
|
250760
|
+
* Create points on a sine wave
|
|
250622
250761
|
* Point i is origin + (i * xStep, a *sin(theta0 + i * dTheta), b * sin(beta0 + i * dBeta))
|
|
250623
250762
|
* * Default b is zero, so it is a simple sine wave
|
|
250624
250763
|
* * If the dTheta and dBeta are equal, it is a sine wave in a tilted plane.
|
|
@@ -250627,8 +250766,9 @@ class Sample {
|
|
|
250627
250766
|
static createPointSineWave(origin, numInterval = 24, xStep = Math.PI / 12, a = 1, thetaSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 360), b = 0, betaSweep = _geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 180)) {
|
|
250628
250767
|
return this.createPointsByIndexFunctions(numInterval, SteppedIndexFunctionFactory.createLinear(xStep, origin ? origin.x : 0), SteppedIndexFunctionFactory.createCosine(a, thetaSweep, origin ? origin.y : 0), SteppedIndexFunctionFactory.createCosine(b, betaSweep, origin ? origin.z : 0));
|
|
250629
250768
|
}
|
|
250630
|
-
/**
|
|
250631
|
-
*
|
|
250769
|
+
/**
|
|
250770
|
+
* Create points with x,y,z independent functions of i and numInterval,
|
|
250771
|
+
* Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));
|
|
250632
250772
|
*/
|
|
250633
250773
|
static createPointsByIndexFunctions(numInterval, fx, fy, fz) {
|
|
250634
250774
|
const points = [];
|
|
@@ -250699,9 +250839,7 @@ class Sample {
|
|
|
250699
250839
|
builder.addGreedyTriangulationBetweenLineStrings(point0, point1);
|
|
250700
250840
|
return builder.claimPolyface();
|
|
250701
250841
|
}
|
|
250702
|
-
/**
|
|
250703
|
-
* create strokes on an arc at radius r0, then returning at radius r1.
|
|
250704
|
-
*/
|
|
250842
|
+
/** Create strokes on an arc at radius r0, then returning at radius r1. */
|
|
250705
250843
|
static createAnnulusPolyline(edgesPerQuadrant, center, r0, r1, theta0, theta1, addClosure) {
|
|
250706
250844
|
const point0 = [];
|
|
250707
250845
|
const point1 = [];
|
|
@@ -250771,7 +250909,12 @@ class Sample {
|
|
|
250771
250909
|
for (let yC = 0; yC + 1 <= ySweep; yC++) {
|
|
250772
250910
|
const yD = yC + 1;
|
|
250773
250911
|
if (acceptFunction(xA, yC))
|
|
250774
|
-
builder.addPolygon([
|
|
250912
|
+
builder.addPolygon([
|
|
250913
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yC, zA),
|
|
250914
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yC, zB),
|
|
250915
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yD, zB),
|
|
250916
|
+
_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yD, zA),
|
|
250917
|
+
]);
|
|
250775
250918
|
}
|
|
250776
250919
|
}
|
|
250777
250920
|
}
|
|
@@ -250829,7 +250972,7 @@ Sample.plane3dByOriginAndUnitNormal = [
|
|
|
250829
250972
|
_geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_13__.Plane3dByOriginAndUnitNormal.createYZPlane(),
|
|
250830
250973
|
_geometry3d_Plane3dByOriginAndUnitNormal__WEBPACK_IMPORTED_MODULE_13__.Plane3dByOriginAndUnitNormal.createZXPlane(),
|
|
250831
250974
|
Sample.createPlane(0, 0, 0, 3, 0, 1),
|
|
250832
|
-
Sample.createPlane(1, 2, 3, 2, 4, -1)
|
|
250975
|
+
Sample.createPlane(1, 2, 3, 2, 4, -1),
|
|
250833
250976
|
];
|
|
250834
250977
|
/** Assorted Ray3d, not all unit direction vectors. */
|
|
250835
250978
|
Sample.ray3d = [
|
|
@@ -250837,7 +250980,7 @@ Sample.ray3d = [
|
|
|
250837
250980
|
Sample.createRay(0, 0, 0, 0, 1, 0),
|
|
250838
250981
|
Sample.createRay(0, 0, 0, 0, 0, 1),
|
|
250839
250982
|
Sample.createRay(0, 0, 0, 1, 2, 0),
|
|
250840
|
-
Sample.createRay(1, 2, 3, 4, 2, -1)
|
|
250983
|
+
Sample.createRay(1, 2, 3, 4, 2, -1),
|
|
250841
250984
|
];
|
|
250842
250985
|
/** Assorted angles. All principal directions, some others included. */
|
|
250843
250986
|
Sample.angle = [
|
|
@@ -250846,7 +250989,7 @@ Sample.angle = [
|
|
|
250846
250989
|
_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(180),
|
|
250847
250990
|
_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-90),
|
|
250848
250991
|
_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(30),
|
|
250849
|
-
_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-105)
|
|
250992
|
+
_geometry3d_Angle__WEBPACK_IMPORTED_MODULE_3__.Angle.createDegrees(-105),
|
|
250850
250993
|
];
|
|
250851
250994
|
/** Assorted angle sweeps */
|
|
250852
250995
|
Sample.angleSweep = [
|
|
@@ -250855,35 +250998,35 @@ Sample.angleSweep = [
|
|
|
250855
250998
|
_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(-90, 0),
|
|
250856
250999
|
_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, -90),
|
|
250857
251000
|
_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(0, 30),
|
|
250858
|
-
_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(45, 110)
|
|
251001
|
+
_geometry3d_AngleSweep__WEBPACK_IMPORTED_MODULE_0__.AngleSweep.createStartEndDegrees(45, 110),
|
|
250859
251002
|
];
|
|
250860
|
-
/**
|
|
251003
|
+
/** Assorted line segments */
|
|
250861
251004
|
Sample.lineSegment3d = [
|
|
250862
251005
|
_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 0, 0)),
|
|
250863
251006
|
_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 1, 0)),
|
|
250864
251007
|
_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 0, 1)),
|
|
250865
|
-
_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-2, -3, 0.5))
|
|
251008
|
+
_curve_LineSegment3d__WEBPACK_IMPORTED_MODULE_19__.LineSegment3d.create(_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(1, 2, 3), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(-2, -3, 0.5)),
|
|
250866
251009
|
];
|
|
250867
|
-
/** Assorted Range1d:
|
|
251010
|
+
/** Assorted Range1d: single point, null, simple forward, simple reverse */
|
|
250868
251011
|
Sample.range1d = [
|
|
250869
251012
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createX(1),
|
|
250870
251013
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createNull(),
|
|
250871
251014
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(1, 2),
|
|
250872
|
-
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(2, 1)
|
|
251015
|
+
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range1d.createXX(2, 1),
|
|
250873
251016
|
];
|
|
250874
251017
|
/** Assorted range2d: single point, null, 2 point with various creation orders. */
|
|
250875
251018
|
Sample.range2d = [
|
|
250876
251019
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXY(1, 2),
|
|
250877
251020
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createNull(),
|
|
250878
251021
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 0, 3),
|
|
250879
|
-
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 3, 4)
|
|
251022
|
+
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range2d.createXYXY(1, 2, 3, 4),
|
|
250880
251023
|
];
|
|
250881
251024
|
/** Assorted range2d: single point, null, 2 point with various creation orders. */
|
|
250882
251025
|
Sample.range3d = [
|
|
250883
251026
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZ(1, 2, 3),
|
|
250884
251027
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createNull(),
|
|
250885
251028
|
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 0, 3, 4, 7),
|
|
250886
|
-
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1)
|
|
251029
|
+
_geometry3d_Range__WEBPACK_IMPORTED_MODULE_4__.Range3d.createXYZXYZ(1, 2, 3, -2, -4, -1),
|
|
250887
251030
|
];
|
|
250888
251031
|
|
|
250889
251032
|
|
|
@@ -281034,7 +281177,7 @@ class TestContext {
|
|
|
281034
281177
|
this.initializeRpcInterfaces({ title: this.settings.Backend.name, version: this.settings.Backend.version });
|
|
281035
281178
|
const iModelClient = new imodels_client_management_1.IModelsClient({ api: { baseUrl: `https://${process.env.IMJS_URL_PREFIX ?? ""}api.bentley.com/imodels` } });
|
|
281036
281179
|
await core_frontend_1.NoRenderApp.startup({
|
|
281037
|
-
applicationVersion: "4.0.0-dev.
|
|
281180
|
+
applicationVersion: "4.0.0-dev.58",
|
|
281038
281181
|
applicationId: this.settings.gprid,
|
|
281039
281182
|
authorizationClient: new frontend_1.TestFrontendAuthorizationClient(this.adminUserAccessToken),
|
|
281040
281183
|
hubAccess: new imodels_access_frontend_1.FrontendIModelsAccess(iModelClient),
|
|
@@ -300607,7 +300750,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
|
|
|
300607
300750
|
/***/ ((module) => {
|
|
300608
300751
|
|
|
300609
300752
|
"use strict";
|
|
300610
|
-
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.
|
|
300753
|
+
module.exports = JSON.parse('{"name":"@itwin/core-frontend","version":"4.0.0-dev.58","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","build:ci":"npm run -s build && npm run -s build:esm","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2020 --outDir lib/esm","clean":"rimraf lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","docs":"betools docs --includes=../../generated-docs/extract --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/primitives,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-eslintrc -c \\"./node_modules/@itwin/eslint-plugin/dist/configs/extension-exports-config.js\\" \\"./src/**/*.ts\\" 1>&2","lint":"eslint -f visualstudio \\"./src/**/*.ts\\" 1>&2","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run -s webpackTests && certa -r chrome","cover":"npm -s test","test:debug":"certa -r chrome --debug","webpackTests":"webpack --config ./src/test/utils/webpack.config.js 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core/tree/master/core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:^4.0.0-dev.58","@itwin/core-bentley":"workspace:^4.0.0-dev.58","@itwin/core-common":"workspace:^4.0.0-dev.58","@itwin/core-geometry":"workspace:^4.0.0-dev.58","@itwin/core-orbitgt":"workspace:^4.0.0-dev.58","@itwin/core-quantity":"workspace:^4.0.0-dev.58"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/certa":"workspace:*","@itwin/eslint-plugin":"^4.0.0-dev.32","@itwin/webgl-compatibility":"workspace:*","@types/chai":"4.3.1","@types/chai-as-promised":"^7","@types/deep-assign":"^0.1.0","@types/mocha":"^8.2.2","@types/node":"^18.11.5","@types/qs":"^6.5.0","@types/semver":"7.3.10","@types/superagent":"^4.1.14","@types/sinon":"^9.0.0","babel-loader":"~8.2.5","babel-plugin-istanbul":"~6.1.1","chai":"^4.1.2","chai-as-promised":"^7","cpx2":"^3.0.0","eslint":"^7.11.0","glob":"^7.1.2","mocha":"^10.0.0","nyc":"^15.1.0","rimraf":"^3.0.2","sinon":"^9.0.2","source-map-loader":"^4.0.0","typescript":"~5.0.2","webpack":"^5.76.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/object-storage-azure":"^1.5.0","@itwin/cloud-agnostic-core":"^1.5.0","@itwin/object-storage-core":"^1.5.0","@itwin/core-i18n":"workspace:*","@itwin/core-telemetry":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^3.1.6","@loaders.gl/draco":"^3.1.6","deep-assign":"^2.0.0","fuse.js":"^3.3.0","qs":"^6.5.3","semver":"^7.3.5","superagent":"^7.1.5","wms-capabilities":"0.4.0","reflect-metadata":"0.1.13"},"nyc":{"extends":"./node_modules/@itwin/build-tools/.nycrc"},"eslintConfig":{"plugins":["@itwin"],"extends":"plugin:@itwin/itwinjs-recommended","rules":{"@itwin/no-internal-barrel-imports":["error",{"required-barrel-modules":["./src/tile/internal.ts"]}],"@itwin/public-extension-exports":["error",{"releaseTags":["public","preview"],"outputApiFile":false}]},"overrides":[{"files":["*.test.ts","*.test.tsx","**/test/**/*.ts"],"rules":{"@itwin/no-internal-barrel-imports":"off"}}]}}');
|
|
300611
300754
|
|
|
300612
300755
|
/***/ }),
|
|
300613
300756
|
|