@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.
@@ -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, mv);
116799
+ mv = viewMatrix.multiplyTransformTransform(viModelMatrix, this._scratchTransform);
116799
116800
  }
116800
116801
  else {
116801
- mv.multiplyTransformTransform(instancedGeom.getRtcModelTransform(modelMatrix), mv);
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, mv);
116810
+ mv = viewMatrix.multiplyTransformTransform(viModelMatrix, this._scratchTransform);
116810
116811
  }
116811
116812
  else {
116812
- mv = mv.multiplyTransformTransform(modelMatrix, 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 && undefined !== matTM.normalMapParams) {
122727
- if (undefined !== matTM.normalMapParams.normalMap) {
122728
- this.normalMap = matTM.normalMapParams.normalMap;
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
- else {
122731
- // 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.
122732
- this.normalMap = this.texture;
122733
- this.texture = undefined;
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
- return TEXTURE(s_texture, v_texCoord);
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 && !_System__WEBPACK_IMPORTED_MODULE_5__.System.instance.supportsLogZBuffer) {
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 = computePositionPrelude + adjustEyeSpace + computePositionPostlude;
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 = TEXTURE(s_normalMap, v_texCoord).xyz;
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(10 /* SurfaceBitIndex.Count */);
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 */, 10 /* SurfaceBitIndex.Count */, (prog) => {
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
- let normalMapScale = 1.0;
141799
- if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&
141800
- undefined !== params.geometry.materialInfo.textureMapping &&
141801
- undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {
141802
- normalMapScale = params.geometry.materialInfo.textureMapping.normalMapParams.scale ?? 1.0;
141803
- if (params.geometry.materialInfo.textureMapping.normalMapParams.greenUp)
141804
- normalMapScale = -normalMapScale;
141805
- }
141806
- uniform.setUniform1f(normalMapScale);
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
- const prelude = `
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
- /** Simple interpolation between values, but choosing (based on fraction) a or b as starting point for maximum accuracy. */
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
- * Create an Angle from a JSON object
205263
- * @param json object from JSON.parse. If a number, value is in *DEGREES*
205264
- * @param defaultValRadians if json is undefined, default value in radians.
205265
- * @return a new Angle
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
- /** test if the angle is a full circle */
205439
+ /** Test if the angle is a full circle */
205348
205440
  get isFullCircle() {
205349
205441
  return Angle.isFullCircleRadians(this._radians);
205350
205442
  }
205351
- /** test if the angle is a half circle (in either direction) */
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
- /** return a (newly allocated) Angle object with value 0 radians */
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
- * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
205575
- * 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
205576
- * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
205577
- * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
205578
- * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
205579
- * perpendicular to the ellipse.
205580
- * * 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)
205581
- * 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.
205582
- * math details can be found at docs/learning/geometry/Angle.md
205583
- * @param dotUU dot product of vectorU with itself
205584
- * @param dotVV dot product of vectorV with itself
205585
- * @param dotUV dot product of vectorU with vectorV
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
- * * Returns the angle between two vectors, with the vectors given as xyz components
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
- * * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve angle to a full 2PI range.
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). If false, return signed (-PI < radians <= 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 addition to PI.
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
- /** Create a sweep as one of
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
- /** (private) constructor with start and end angles in radians.
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
- * directly set the start and end angles in radians
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
- /** directly set the start and end angles in degrees */
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
- * create an AngleSweep from start and end angles given in radians.
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
- /** create an AngleSweep from start and end angles given in degrees. */
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
- /** create an angle sweep from strongly typed start and end angles */
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
- /** create an AngleSweep from start and end angles given in radians. */
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
- /** create an AngleSweep from start and sweep given in degrees. */
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
- /** copy from other AngleSweep. */
205929
+ /** Copy from other AngleSweep. */
205835
205930
  setFrom(other) {
205836
205931
  this._radians0 = other._radians0;
205837
205932
  this._radians1 = other._radians1;
205838
205933
  }
205839
- /** create a full circle sweep (CCW). startRadians defaults to 0 */
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
- /** create a sweep from the south pole to the north pole (-90 to +90). */
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
- /** return a sweep for the "other" part of the circle.
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
- /** return a clone of this sweep. */
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
- /** return 2PI divided by the sweep radians (i.e. 360 degrees divided by sweep angle).
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
- /** return the fractionalized position of the given angle (as Angle) computed without consideration of
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
- /** return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
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
- /** return the fractionalized position of the given angle (as radians), computed with consideration of 2PI period.
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
- /** return the fractionalized position of the given angle (as Angle), computed with consideration of 2PI period.
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
- /** return the fractionalized position of the given array of angles (as radian), computed with consideration of 2PI period.
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
- /** return the fractionalized position of the given angle (as radian) computed with consideration of
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
- /** return the fractionalized position of the given angle (as Angle) computed with consideration of
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
- /** test if the given angle (as radians) is within sweep (between radians0 and radians1) */
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
- /** test if the given angle (as radians) is within sweep */
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
- /** test if the given angle (as Angle) is within the sweep */
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
- /** set this AngleSweep from various sources:
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
- /** create an AngleSweep from a json object. */
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
- /** test if this angle sweep and other angle sweep match with radians tolerance.
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
- /** test if this angle sweep and other angle sweep match with radians tolerance.
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
- /** test if start and end angles match with radians tolerance.
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 with given weight as last element.
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 we promote `this` matrix to be a Transform [A 0].
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{`this` matrix }\bold{A}\text{ promoted to block Transform} & \blockTransform{A}{0} \\
213506
- * \text{`other` Transform with `matrix` part }\bold{B}\text{ and `origin` part }\bold{b} & \blockTransform{B}{b}\\
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
- * represents a non-trivial rotation using three simple axis rotation angles and an order in which to apply them.
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
- /** the flag controlling whether vectors are treated as rows or as columns */
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
- * Return the cross product of vectors from point at originIndex to points at indexA and indexB
215233
- * @param originIndex index of origin
215234
- * @param indexA index of first target within the array
215235
- * @param indexB index of second target within the array
215236
- * @param result caller-allocated vector.
215237
- * @returns return true if indexA, indexB both valid
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
- /** Minimal object containing x,y and operations that are meaningful without change in both point and vector.
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
- /** return a json array `[x,y]` */
215434
+ /** Return a json array `[x,y]` */
215341
215435
  toJSON() {
215342
215436
  return [this.x, this.y];
215343
215437
  }
215344
- /** return a json object `{x: 1, y:2}` */
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
- /** returns true if the x,y components are both small by metric metric tolerance */
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
- /** returns true if the x,y components are exactly equal. */
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
- /** returns true if x,y match `other` within metric tolerance */
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
- /** cross product of vectors from origin to targets */
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
- /** return a new Point2d with x,y coordinates from this. */
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
- /** Starting at this point, move along vector by tangentFraction of the vector length, and then
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
- /** Interpolate at tangentFraction between this instance and point, and then Move by leftFraction
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
- /** Return the fractional coordinate of the projection of this instance x,y onto the
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
- /** 2D vector with `x`,`y` as properties
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
- /** copy contents from another Point3d, Point2d, Vector2d, or Vector3d, or leading entries of Float64Array */
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
- /** Return a (new or optionally reused) vector which is `this` divided by `denominator`
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
- /** return a new Vector2d rotated CCW by given angle */
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
- /** Return a vector computed at fractional position between this vector and vectorB
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
- /** return {this + vector}. */
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
- /** return {this - vector}. */
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
- /** return a vector parallel to this but with specified length */
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
- /** return the dot product of this with vectorB */
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
- /** dot product with vector from pointA to pointB */
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
- /** vector cross product {this CROSS vectorB} */
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
- * return the radians (as a simple number, not strongly typed Angle) signed angle from this to vectorB.
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
- * return the (strongly typed) signed angle from this to vectorB.
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
- /** test if `index` is a valid index into the array. */
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
- * access x of indexed point
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
- * access y of indexed point
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
- * access z of indexed point
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
- /** push a (clone of) point onto the collection
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
- * push a new point (given by coordinates) onto the collection
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
- /** extract (copy) the final point */
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
- /** extract (copy) the first point */
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
- /** remove the final point. */
216195
+ /** Remove the final point. */
216104
216196
  pop() {
216105
216197
  if (this.data.length > 0)
216106
216198
  this.data.pop();
216107
216199
  }
216108
- /** remove all points. */
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
- * * `XYZ` is a minimal object containing x,y,z and operations that are meaningful without change in both point and vector.
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
- /** Test if arg is any of:
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
- /** Look for (in order) an x coordinate present as:
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
- /** Look for (in order) an x coordinate present as:
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
- /** Look for (in order) an x coordinate present as:
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
- /** Returns true if this and other have equal x,y,z parts within Geometry.smallMetricDistance.
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
- /** exact equality test. */
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
- /** equality test with Geometry.smallMetricDistance tolerance */
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
- /** add x,y,z from other in place. */
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
- /** add x,y,z from other in place. */
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
- /** add (in place) the scaled x,y,z of other */
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
- /** add to x, y, z parts */
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
- /** Return a unit vector from this vector to other. Return a 000 vector if the input is too small to normalize.
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
- /** access x part of XYZProps (which may be .x or [0]) */
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
- /** access x part of XYZProps (which may be .x or [0]) */
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
- /** access x part of XYZProps (which may be .x or [0]) */
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
- /** Create a new Point3d with given coordinates
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
- /** Return the cross product of the vectors from this to pointA and pointB
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
- /** Return the triple product of the vectors from this to pointA, pointB, pointC
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
- /** Return the cross product of the vectors from this to pointA and pointB
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
- * * fraction specifies where the interpolated point is located on the line passing `this` and `other`.
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
- /** create a point that is a linear combination (weighted sum) of 2 input points.
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
- /** 3D vector with `x`,`y`,`z` as properties
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
- * return a Vector3d (new or reused from optional result)
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
- /** Create a normalized vector from the inputs.
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
- /** Return a new vector with components negated from the calling instance.
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
- /** Rotate this vector 90 degrees around an axis vector.
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
- /** Return the (strongly typed Vector3d) `thisVector3d + vectorA * scalarA + vectorB * scalarB`
217237
- * with all components presented as numbers */
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
- /** Compute the cross product of this vector with `vectorB`. Immediately pass it to `normalize`.
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
- /** Return the dot product of this vector with vectorB.
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
- /** Dot product with vector from pointA to pointB, with pointB given as (weighted) wx,wy,wz,w
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
- * return cross product of `this` with the vector `(x, y, z)`
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
- * Return the angle in radians (not as strongly typed Angle) from this vector to vectorB.
217462
- * * The returned angle is between 0 and `Math.PI`.
217463
- * * The returned angle is measured in the plane containing the two vectors.
217464
- * * Use `planarRadiansTo` and `signedRadiansTo` to return an angle measured in a specific plane.
217465
- * @param vectorB target vector.
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
- * Return the angle in radians (not as strongly-typed Angle) from this vector to vectorB, measured
217503
- * in their containing plane whose normal lies in the same half-space as vectorW.
217504
- * * The returned angle is between `-Math.PI` and `Math.PI`.
217505
- * * If the cross product of this vector and vectorB lies on the same side of the plane as vectorW,
217506
- * this function returns `radiansTo(vectorB)`; otherwise, it returns `-radiansTo(vectorB)`.
217507
- * * `vectorW` does not have to be perpendicular to the plane.
217508
- * * Use `planarRadiansTo` to measure the angle between vectors that are projected to another plane.
217509
- * @param vectorB target vector.
217510
- * @param vectorW determines the side of the plane in which the returned angle is measured
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
- /** Return the (strongly-typed) angle from this vector to vectorB, measured
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
- /** Return the smallest angle (in radians) from the (bidirectional) line containing `this`
217564
- * to the (bidirectional) line containing `vectorB` */
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
- /** Return the smallest (strongly typed) angle from the (bidirectional) line containing `this`
217571
- * to the (bidirectional) line containing `vectorB` */
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
- * * For details of how the matrix is modified to rigid, see documentation of `Matrix3d.axisOrderCrossProductsInPlace`
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
- * * For details of how the matrix is created to be rigid, see documentation of `Matrix3d.createRigidFromColumns`
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" and use its reference.
223601
- * That means if "origin" is changed via Transform at any point, the initial "origin" passed by the user is also
223602
- * changed. To avoid that, we pass undefined to createRefs. This would cause createRefs to create a new "origin"
223603
- * equals (0,0,0) which then we set it to the "origin" passed by user in the next line.
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, transforms
223627
- * point `p` to `M*(p-a) + b` (i.e., `Tp = M*(p-a) + b`) so transforms point `a` to 'b'.
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*(x-a) + b
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, transforms a point `p` to `M*p + (f - M*f)`
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 transform matrix times xyz and add it to the origin element
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 transform matrix times xyz and add it to the origin element
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
- * If `p = (x,y,z)` then transform is `Tp = M*p + o*w`. This function returns the transformed point as a new
223698
- * point4d (`Tp` as first 3 elements and `w` as last element) or in the pre-allocated result (if result is given).
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
- * If `p = (x,y,z)` then transform is `Tp = M*p + o*w`. This function returns the transformed point as a new
223705
- * Float64Array with size 4 (`Tp` as first 3 elements and `w` as last element) or in the pre-allocated result
223706
- * (if result is given).
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
- * If `p = (x,y,z)` then transform is `Tp = M*p + o`. This function returns the transformed point as a new
223713
- * Float64Array with size 3 (`Tp` as 3 elements) or in the pre-allocated result (if result is given).
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
- * Treat the 3x3 `matrix` and `origin` as upper 3x4 part of a 4x4 matrix, with 0001 as the final row. Now multiply
223720
- * the transposed of this 4x4 matrix by Point4d given as xyzw. Return as a new point4d (`M*p` as first 3 elements
223721
- * and `o*p + w` as last element where `p = (x,y,z)`) or in the pre-allocated result (if result is given).
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
- * If for a point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223741
- * `p = MInverse * (point - o)`. This function returns the original point `p` if `point` is the
223742
- * transformed point (`Tp = point`).
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
- * If for a point `p` we have `Tp = M*p + w*o = weightedPoint` (where `weightedPoint` is the transformed point), then
223751
- * `p = MInverse * (weightedPoint - w*o)`. This function returns a Point4d where first 3 elements are the original
223752
- * point `p` if `weightedPoint` is the transformed point (`Tp = weightedPoint`) and the last element is `w`.
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
- * If for a point `p = (x,y,z)` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223762
- * `p = MInverse * (point - o)`. This function returns the original point `p` if `point` is the transformed
223763
- * point (`Tp = point`).
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
- * If for each point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223803
- * `p = MInverse * (point - o)`. This function returns the array of original points `p[]` if `points`
223804
- * is the array of transformed point (`Tp = point` for each `p` and `point`).
223805
- * * If `results` is given, resize it to match the input `points` array and update it with original points `p[]`.
223806
- * * If `results` is not given, return a new array.
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, results) {
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 (results) {
223816
- const n = Transform.matchArrayLengths(points, results, _Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.createZero);
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, results[i]);
223942
+ this._matrix.multiplyInverseXYZAsPoint3d(points[i].x - originX, points[i].y - originY, points[i].z - originZ, result[i]);
223943
+ return result;
223819
223944
  }
223820
- results = [];
223945
+ result = [];
223821
223946
  for (const point of points)
223822
- results.push(this._matrix.multiplyInverseXYZAsPoint3d(point.x - originX, point.y - originY, point.z - originZ));
223823
- return results;
223947
+ result.push(this._matrix.multiplyInverseXYZAsPoint3d(point.x - originX, point.y - originY, point.z - originZ));
223948
+ return result;
223824
223949
  }
223825
223950
  /**
223826
- * If for each point `p` we have `Tp = M*p + o = point` (where `point` is the transformed point), then
223827
- * `p = MInverse * (point - o)`. This function calculates the array of original points `p[]` if `points`
223828
- * is the array of transformed point (`Tp = point` for each `p` and `point`) and replaces `points`
223829
- * with the array of original points.
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]`. See `multiplyTransformTransform` doc for math details.
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{`this` Transform with `matrix` part }\bold{A}\text{ and `origin` part }\bold{a} & \blockTransform{A}{a}\\
223916
- * \text{`other` Transform with `matrix` part }\bold{B}\text{ and `origin` part }\bold{b} & \blockTransform{B}{b} \\
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 we promote `other` matrix to be a Transform [B 0].
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{`this` Transform with `matrix` part }\bold{A}\text{ and `origin` part }\bold{a} & \blockTransform{A}{a}\\
223939
- * \text{`other` matrix }\bold{B}\text{ promoted to block Transform} & \blockTransform{B}{0} \\
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 Range of the transformed corners.
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*-o]`
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: First Transform maps a box (axis aligned) specified by `min` and `max` to
224000
- * the unit box specified by 000 and 111 and inverse of it. Second Transform is the reverse of first.
224001
- * @param min the min corner of the box
224002
- * @param max the max corner of the box
224003
- * @param npcToGlobal maps global (the unit box specified by 000 and 111) to NPC (a box specified by `min`
224004
- * and `max`). Object created by caller, re-initialized here.
224005
- * @param globalToNpc maps NPC (a box specified by `min` and `max`) to global (the unit box specified by
224006
- * 000 and 111). Object created by caller, re-initialized here.
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
- * constructor
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
- * constructor for YawPitchRollAngles with angles in degrees.
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
- * constructor for YawPitchRollAngles with angles in radians.
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
- /** construct a `YawPitchRoll` object from an object with 3 named angles */
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
- /** populate yaw, pitch and roll fields using `Angle.fromJSON` */
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
- /** Returns true if this rotation does nothing.
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
- /** Attempts to create a YawPitchRollAngles object from a Matrix3d
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
- /** Return a function that steps linearly
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
- /** Return a function that steps with cosine of angles in sweep
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
- /** Return a function that steps with cosine of angles in sweep.
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
- /** Return an array of Point3d, with x,y,z all stepping through a range of values.
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
- /** Return an array of Point2d, with x,y all stepping through a range of values.
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
- /** Access the last point in the array. push another shifted by dx,dy,dz.
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
- /** Create points for an L shaped polygon
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
- /** Create (unweighted) bspline curves.
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
- /** Create weighted bspline curves.
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
- /** Return array [x,y,z,w] bspline control points for an arc in 90 degree bspline spans.
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
- /** create a plane from origin and normal coordinates -- default to 001 normal if needed. */
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
- /** Assorted Matrix3d:
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
- /** Return an array of Matrix3d with various skew and scale. This includes at least:
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
- /** Return an array of singular Matrix3d. This includes at least:
249252
+ /**
249253
+ * Return an array of singular Matrix3d. This includes at least:
249123
249254
  * * all zeros
249124
- * * one nonzero column
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 nonzero column
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, vector0),
249140
- // two independent nonzero columns with zero
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(vectorV, vector0, vector0),
249144
- // third column dependent
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, vectorV, vectorU),
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(vectorV, vectorV, vectorU)
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
- * * Return an array of rigid transforms. This includes (at least)
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
- /** Return various rigid matrices:
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 = [point1, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)];
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
- /** Assorted `Path` with lines and arcs.
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 = [[_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(0, 10, 0)], [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)], [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0), [_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(6, 10, 0)]]];
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
- * If nonzero, rise to that y value, return to x=0, and return down to origin.
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
- /** append sawtooth with x distances successively scaled by xFactor */
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
- /** append to a linestring, taking steps along given vector directions
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
- /** Assorted regions with arc boundaries
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
- /** Assorted loops in xy plane:
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([pointA, _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(ax + 1, ey),
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), pointB], 3), _curve_Arc3d__WEBPACK_IMPORTED_MODULE_20__.Arc3d.createCircularStartMiddleEnd(pointB, pointC1, point0))));
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
- /** Assorted smooth curve primitives:
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
- /** assorted small polyface grids, possibly expanded by gridMultiplier */
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
- /** assorted linear sweeps */
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
- /** create an array of points for a rectangle with corners (x0,y0,z) and (x1,y1,z)
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
- /** create an array of points for a rectangle with corners of a Range2d.
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
- /** Primary shape is a "triangle" with lower edge pushed in so it becomes a mild nonconvex quad.
250046
- * Fractal effects are gentle.
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
- /** create a diamond with convex fractal */
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
- /** append interpolated points from the array tail to the target. */
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
- /** Assorted transition spirals
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
- /** Create a Bezier curve with significant twist effects
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
- fitPoints: [pointsA[0], pointsA[1], pointsA[2]],
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
- * * let ay = 4
250483
- * * base polygon has vertices (0,0), (ax,0), (2*ax,0), (2* ax,ay), (ax,ay), (0,ay), (0,0).
250484
- * * shift the x coordinates of vertices 1,4 by indicated amounts (0-based numbering)
250485
- * * shift the y coordinates for points 1,2,3,4 by indicated amounts (in 0-based numbering)
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
- * make line segments for each pair of adjacent points.
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
- /** Create points on a sine wave
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
- /** Create points with x,y,z independent functions of i and numInterval,
250631
- * Point3d.create (fx(i,numInterval), fy(i,numInterval), fz(i, numInterval));
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([_geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yC, zA), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yC, zB), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xB, yD, zB), _geometry3d_Point3dVector3d__WEBPACK_IMPORTED_MODULE_1__.Point3d.create(xA, yD, zA)]);
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
- /** assorted line segments */
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: single point, null, simple forward, simple reverse */
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.55",
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.55","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.55","@itwin/core-bentley":"workspace:^4.0.0-dev.55","@itwin/core-common":"workspace:^4.0.0-dev.55","@itwin/core-geometry":"workspace:^4.0.0-dev.55","@itwin/core-orbitgt":"workspace:^4.0.0-dev.55","@itwin/core-quantity":"workspace:^4.0.0-dev.55"},"//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"}}]}}');
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