@arcgis/core 6.0.0-next.29 → 6.0.0-next.30

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.
Files changed (122) hide show
  1. package/WebDocument2D.js +1 -1
  2. package/WebMap.d.ts +3 -19
  3. package/WebMap.js +1 -1
  4. package/WebScene.js +1 -1
  5. package/arcgisGlobal.d.ts +1 -0
  6. package/assets/esri/core/workers/RemoteClient.js +1 -1
  7. package/assets/esri/core/workers/chunks/039d9bc5b5015012f811.js +1 -0
  8. package/assets/esri/core/workers/chunks/{b01688ccc29d33bfc82d.js → 28a821de9dbf10324033.js} +1 -1
  9. package/assets/esri/core/workers/chunks/{d3c3fb079ad97970f834.js → 4fb2fcc95f852bf8f86c.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{84940d8e14caf5a27e04.js → 64b360625c68cb863a08.js} +1 -1
  11. package/assets/esri/core/workers/chunks/71f792a20077aa739f87.js +1 -0
  12. package/assets/esri/core/workers/chunks/{e480e7d5f40049a2053b.js → 7af4edc6e87d27b9d467.js} +1 -1
  13. package/assets/esri/core/workers/chunks/90c1d10eae7ae71889b0.js +1 -0
  14. package/assets/esri/core/workers/chunks/{8a485130781b49dbf608.js → 9d40786c5ceface786ba.js} +1 -1
  15. package/assets/esri/core/workers/chunks/aba259a70bee68d2edb7.js +1 -0
  16. package/assets/esri/core/workers/chunks/c33a9635c294c8774977.js +1 -0
  17. package/assets/esri/views/3d/environment/resources/milkyway-band.avif +0 -0
  18. package/chunks/GlobalIllumination.glsl.js +16 -10
  19. package/chunks/GlobalIlluminationBlur.glsl.js +14 -14
  20. package/chunks/GlobalIlluminationUpscale.glsl.js +4 -4
  21. package/chunks/RibbonLine.glsl.js +78 -75
  22. package/config.js +1 -1
  23. package/core/workers/WorkerHandle.js +1 -1
  24. package/kernel.js +1 -1
  25. package/layers/WMTSLayer.d.ts +1 -1
  26. package/layers/WMTSLayer.js +1 -1
  27. package/layers/mixins/TiledImagery.d.ts +7 -0
  28. package/layers/support/WMTSSublayer.d.ts +5 -5
  29. package/networks/Network.js +1 -1
  30. package/networks/support/TopologyValidationJobInfo.js +1 -1
  31. package/package.json +2 -2
  32. package/rest/networks/support/ValidateNetworkTopologyResult.js +1 -1
  33. package/support/timeUtils.js +1 -1
  34. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  35. package/views/2d/layers/GeospatialPDFLayerView2D.js +1 -1
  36. package/views/2d/layers/SketchLayerView2D.js +1 -1
  37. package/views/2d/layers/WMTSLayerView2D.js +1 -1
  38. package/views/2d/types.d.ts +2 -1
  39. package/views/3d/interactive/editingTools/move/MoveTool3D.js +1 -1
  40. package/views/3d/interactive/editingTools/reshape/ReshapeOperation.js +1 -1
  41. package/views/3d/interactive/visualElements/Object3DVisualElement.js +1 -1
  42. package/views/3d/interactive/visualElements/PointVisualElement.js +1 -1
  43. package/views/3d/interactive/visualElements/StageObjectVisualElement.js +2 -0
  44. package/views/3d/layers/WMTSLayerView3D.js +1 -1
  45. package/views/3d/layers/graphics/Deconflictor.js +1 -1
  46. package/views/3d/layers/graphics/ElevationAligners.js +1 -1
  47. package/views/3d/layers/graphics/Graphics3DBufferGraphicLayer.js +1 -1
  48. package/views/3d/layers/graphics/Graphics3DLineCalloutSymbolLayer.js +1 -1
  49. package/views/3d/layers/graphics/Graphics3DLineSymbolLayer.js +1 -1
  50. package/views/3d/layers/graphics/Graphics3DPathSymbolLayerConstants.js +1 -1
  51. package/views/3d/layers/graphics/Graphics3DStageObjectGraphicLayer.js +1 -1
  52. package/views/3d/layers/graphics/Graphics3DTextSymbolLayer.js +1 -1
  53. package/views/3d/layers/graphics/elevationAlignmentUtils.js +1 -1
  54. package/views/3d/layers/graphics/pointUtils.js +1 -1
  55. package/views/3d/terrain/ExtentHelper.js +1 -1
  56. package/views/3d/terrain/PatchGeometryFactory.js +1 -1
  57. package/views/3d/terrain/PatchRenderData.js +1 -1
  58. package/views/3d/terrain/SphericalPatch.js +1 -1
  59. package/views/3d/terrain/TerrainRenderer.js +1 -1
  60. package/views/3d/terrain/TerrainSurface.js +1 -1
  61. package/views/3d/terrain/Tile.js +1 -1
  62. package/views/3d/terrain/tileUtils.js +1 -1
  63. package/views/3d/types.d.ts +2 -1
  64. package/views/3d/webgl-engine/Stage.js +1 -1
  65. package/views/3d/webgl-engine/core/shaderLibrary/attributes/PathVertexInfo.glsl.js +10 -11
  66. package/views/3d/webgl-engine/core/shaderLibrary/util/PackedUint32.glsl.js +2 -0
  67. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.glsl.js +1 -1
  68. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +1 -1
  69. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationBlur.glsl.js +1 -1
  70. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationUpscale.glsl.js +1 -1
  71. package/views/3d/webgl-engine/effects/globalIllumination/globalIlluminationUniforms.js +2 -0
  72. package/views/3d/webgl-engine/effects/stars/Stars.js +1 -1
  73. package/views/3d/webgl-engine/lib/GeometryUtil.js +1 -1
  74. package/views/3d/webgl-engine/lib/Object3D.js +1 -1
  75. package/views/3d/webgl-engine/lib/PackedUint32.js +2 -0
  76. package/views/3d/webgl-engine/lib/PathGeometry.js +1 -1
  77. package/views/3d/webgl-engine/lib/PathVertexInfo.js +1 -1
  78. package/views/3d/webgl-engine/lib/RibbonLineVertexInfo.js +2 -0
  79. package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
  80. package/views/3d/webgl-engine/materials/HUDMaterialBaseInstance.js +1 -1
  81. package/views/3d/webgl-engine/materials/LineCalloutMaterial.js +1 -1
  82. package/views/3d/webgl-engine/materials/LineCalloutMaterialBaseInstance.js +1 -1
  83. package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
  84. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  85. package/views/3d/webgl-engine/materials/internal/bufferWriterUtils.js +1 -1
  86. package/views/3d/webgl-engine/parts/Model.js +1 -1
  87. package/views/3d/webgl-engine/shaders/RibbonLine.glsl.js +1 -1
  88. package/views/3d/webgl-engine/shaders/RibbonLineLayouts.js +1 -1
  89. package/views/3d/webgl-engine/shaders/RibbonLineTechniqueConfiguration.js +1 -1
  90. package/views/3d/webgl-engine/shaders/RibbonLineTextureBuffer.glsl.js +1 -1
  91. package/views/SelectionManager.d.ts +5 -5
  92. package/views/SelectionManager.js +1 -1
  93. package/views/input/InputManager.js +1 -1
  94. package/views/layers/WMTSLayerView.d.ts +16 -0
  95. package/views/layers/WMTSLayerView.js +2 -0
  96. package/views/layers/support/highlightUtils.js +1 -1
  97. package/views/selection/SelectionOperation.js +1 -1
  98. package/views/selection/types.d.ts +3 -3
  99. package/views/support/GeometryWorker.js +1 -1
  100. package/views/support/GeometryWorkerHandle.js +1 -1
  101. package/views/support/selectionUtils.js +1 -1
  102. package/webdoc/support/webdocLoadUtils.js +1 -1
  103. package/widgets/BatchAttributeForm/inputs/RelationshipElementInput.js +1 -1
  104. package/widgets/FeatureTable/AttachmentsColumn.js +1 -1
  105. package/widgets/FeatureTable/RelationshipColumn.js +1 -1
  106. package/widgets/OrientedImageryViewer/imageMeasurementWorkerUtils.js +1 -1
  107. package/widgets/support/SelectionList/GroupLayerItem.d.ts +5 -5
  108. package/widgets/support/SelectionList/GroupLayerItem.js +1 -1
  109. package/widgets/support/SelectionList/ItemBase.d.ts +3 -3
  110. package/widgets/support/SelectionList/LayerItem.js +1 -1
  111. package/widgets/support/SelectionList/SelectionListViewModel.d.ts +5 -6
  112. package/widgets/support/SelectionList/SelectionListViewModel.js +1 -1
  113. package/widgets/support/SelectionList/types.d.ts +3 -1
  114. package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
  115. package/widgets/support/Selector2D/selectorUtils.js +1 -1
  116. package/widgets/support/symbolPreviewUtils.js +1 -1
  117. package/assets/esri/core/workers/chunks/2de4296590bf9f9e9add.js +0 -1
  118. package/assets/esri/core/workers/chunks/4976f5567fc7f1b63d10.js +0 -1
  119. package/assets/esri/core/workers/chunks/53c7510df09b71ab5646.js +0 -1
  120. package/assets/esri/core/workers/chunks/66c2a28a851130b87c04.js +0 -1
  121. package/assets/esri/core/workers/chunks/e7aaf7579592b79d6dd7.js +0 -1
  122. package/layers/geospatialPDF/CIM2DLayerview.js +0 -2
@@ -1,5 +1,5 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{sliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{RibbonVertexPosition as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{EvaluateAmbientOcclusion as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{forwardLocalUp as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/forwardLocalUp.glsl.js";import{mainLightIntensity as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/lightingUniforms.js";import{LineStipple as o,computePixelSize as s}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as c}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as l}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{positionOutsideClipSpace as u}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{readFragmentShadow as d}from"../views/3d/webgl-engine/core/shaderLibrary/shading/readFragmentShadow.glsl.js";import{metersPerRenderUnit as f,screenPixelSizePerDistance as p,inverseProjectionMatrix as m,nearFar as h,viewport as ee,pixelRatio as te}from"../views/3d/webgl-engine/core/shaderLibrary/util/cameraUniforms.js";import{ColorConversion as ne}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{NoPerspectiveWrite as g,NoPerspectiveRead as _}from"../views/3d/webgl-engine/core/shaderLibrary/util/NoPerspective.glsl.js";import{addProjViewLocalOrigin as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float4PassUniform as y}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatPassUniform as b}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as x,If as S}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{alphaCutoff as C}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{animatedAlpha as re}from"../views/3d/webgl-engine/shaders/animatedAlpha.glsl.js";import{groundMetersToScreenRatio as ie,planarDistanceToScreenRatio as w}from"../views/3d/webgl-engine/shaders/lineUniforms.js";import{outputColorHighlightOLID as T}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{getTextureBackedBufferModule as E}from"../views/3d/webgl-engine/shaders/RibbonLineTextureBuffer.glsl.js";import{ShaderBuilder as D}from"../views/webgl/ShaderBuilder.js";const O=1;function k(O){let k=new D,{attributes:A,varyings:j,vertex:M,fragment:N}=k,{applyMarkerOffset:P,draped:F,shadingEnabled:I,output:L,capType:R,stippleEnabled:z,falloffEnabled:B,wireframe:V,innerColorEnabled:H,hasAnimation:U,hasScreenSizePerspective:W,worldSized:G,imagePattern:K,useFlatJoinVarying:q}=O,J=R===2,Y=z&&J,X=B||Y,ae=z||J,Z=O.usePerspectiveCorrectStipple,Q=E(O).createBuilder(k,O);M.inputs.add(`position`,()=>Q.getTextureAttribute(`position`)),O.hasVVSize?M.inputs.add(`sizeFeatureAttribute`,()=>Q.getTextureAttribute(`sizeFeatureAttribute`)):M.inputs.add(`size`,()=>Q.getTextureAttribute(`size`)),O.hasVVOpacity&&M.inputs.add(`opacityFeatureAttribute`,()=>Q.getTextureAttribute(`opacityFeatureAttribute`)),O.hasVVColor?M.inputs.add(`colorFeatureAttribute`,()=>Q.getTextureAttribute(`colorFeatureAttribute`)):M.inputs.add(`color`,()=>Q.getTextureAttribute(`color`)),N.include(l),k.include(t,O),k.include(o,O),L===11?(k.varyings.add(`objectAndLayerIdColorVarying`,`vec4`),M.code.add(x`
2
+ import{sliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{RibbonVertexPosition as t}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/RibbonVertexPosition.glsl.js";import{EvaluateAmbientOcclusion as n}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as ee}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{forwardLocalUp as te}from"../views/3d/webgl-engine/core/shaderLibrary/shading/forwardLocalUp.glsl.js";import{mainLightIntensity as ne}from"../views/3d/webgl-engine/core/shaderLibrary/shading/lightingUniforms.js";import{LineStipple as re,computePixelSize as ie}from"../views/3d/webgl-engine/core/shaderLibrary/shading/LineStipple.glsl.js";import{MarkerSizing as ae}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MarkerSizing.glsl.js";import{PiUtils as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PiUtils.glsl.js";import{positionOutsideClipSpace as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{readFragmentShadow as a}from"../views/3d/webgl-engine/core/shaderLibrary/shading/readFragmentShadow.glsl.js";import{metersPerRenderUnit as o,screenPixelSizePerDistance as s,inverseProjectionMatrix as c,nearFar as l,viewport as u,pixelRatio as oe}from"../views/3d/webgl-engine/core/shaderLibrary/util/cameraUniforms.js";import{ColorConversion as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/ColorConversion.glsl.js";import{NoPerspectiveWrite as f,NoPerspectiveRead as p}from"../views/3d/webgl-engine/core/shaderLibrary/util/NoPerspective.glsl.js";import{getPackedUint32Field as m}from"../views/3d/webgl-engine/core/shaderLibrary/util/PackedUint32.glsl.js";import{addProjViewLocalOrigin as h}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float4PassUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Float4PassUniform.js";import{FloatPassUniform as _}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as v,If as y}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{ribbonLineVertexInfoPacking as b,ribbonVertexTypeSignBit as se,ribbonSubdivisionScale as ce,ribbonInsideJoinOffset as x}from"../views/3d/webgl-engine/lib/RibbonLineVertexInfo.js";import{alphaCutoff as S}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{animatedAlpha as C}from"../views/3d/webgl-engine/shaders/animatedAlpha.glsl.js";import{groundMetersToScreenRatio as w,planarDistanceToScreenRatio as T}from"../views/3d/webgl-engine/shaders/lineUniforms.js";import{outputColorHighlightOLID as E}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{getTextureBackedBufferModule as D}from"../views/3d/webgl-engine/shaders/RibbonLineTextureBuffer.glsl.js";import{ShaderBuilder as O}from"../views/webgl/ShaderBuilder.js";const k=1;function A(k){let A=new O,{attributes:j,varyings:M,vertex:N,fragment:P}=A,{applyMarkerOffset:F,draped:I,shadingEnabled:L,output:R,capType:z,stippleEnabled:B,falloffEnabled:V,wireframe:H,innerColorEnabled:U,hasAnimation:W,hasScreenSizePerspective:G,worldSized:K,imagePattern:le,useFlatJoinVarying:q}=k,J=z===2,Y=B&&J,X=V||Y,ue=B||J,Z=B&&k.usePerspectiveCorrectStipple,Q=D(k).createBuilder(A,k);N.inputs.add(`position`,()=>Q.getTextureAttribute(`position`)),k.hasVVSize?N.inputs.add(`sizeFeatureAttribute`,()=>Q.getTextureAttribute(`sizeFeatureAttribute`)):N.inputs.add(`size`,()=>k.hasVertexSize?Q.getTextureAttribute(`size`):v`1.0`),k.hasVVOpacity&&N.inputs.add(`opacityFeatureAttribute`,()=>Q.getTextureAttribute(`opacityFeatureAttribute`)),k.hasVVColor?N.inputs.add(`colorFeatureAttribute`,()=>Q.getTextureAttribute(`colorFeatureAttribute`)):N.inputs.add(`color`,()=>k.hasVertexColor?Q.getTextureAttribute(`color`):v`vec4(1.0)`),P.include(r),A.include(t,k),A.include(re,k),R===11?(A.varyings.add(`objectAndLayerIdColorVarying`,`vec4`),N.code.add(v`
3
3
  vec4 getOlidColor() {
4
4
  return ${Q.getTextureAttribute(`olidColor`)};
5
5
  }
@@ -7,9 +7,9 @@ import{sliceDraw as e}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.gls
7
7
  void forwardObjectAndLayerIdColor() {
8
8
  objectAndLayerIdColorVarying = getOlidColor();
9
9
  }
10
- `),N.code.add(x`void outputObjectAndLayerIdColor() {
10
+ `),P.code.add(v`void outputObjectAndLayerIdColor() {
11
11
  fragColor = objectAndLayerIdColorVarying;
12
- }`)):(M.code.add(x`void forwardObjectAndLayerIdColor() {}`),N.code.add(x`void outputObjectAndLayerIdColor() {}`));let $=P&&!F;return $&&k.include(c,O),v(M,O),F&&(G||z)&&M.uniforms.add(G?ie:w),G&&!F&&M.uniforms.add(f,p),M.uniforms.add(m,h,ee,new b(`miterLimit`,e=>e.join===`miter`?e.miterLimit:0)),M.constants.add(`LARGE_HALF_FLOAT`,`float`,65500),M.constants.add(`EPS`,`float`,.001),M.constants.add(`NUM_JOIN_SUBDIVISIONS`,`float`,O.numJoinSubdivisions),A.add(`textureElementIndex`,`uint`),A.add(`lineParameters`,`vec2`),j.add(`vColor`,`vec4`),j.add(`vpos`,`vec3`,{invariant:!0}),j.add(`vLineDistance`,`float`),j.add(`vLineWidth`,`float`),q?j.add(`vIsInsideJoin`,`int`,{flat:!0}):j.add(`vIsInsideJoin`,`float`),j.add(`vStretchFactor`,`float`),j.add(`vJoinCenterLineSDFs`,`vec2`),j.add(`vSubdivisionFactor`,`float`),z&&j.add(`vLineSizeInv`,`float`),X&&j.add(`vLineDistanceNorm`,`float`),J&&(j.add(`vSegmentSDF`,`float`),j.add(`vReverseSegmentSDF`,`float`)),M.code.add(x`vec3 perpendicular(vec3 v) {
12
+ }`)):(N.code.add(v`void forwardObjectAndLayerIdColor() {}`),P.code.add(v`void outputObjectAndLayerIdColor() {}`));let $=F&&!I;$&&A.include(ae,k),h(N,k),I&&(K||B)&&N.uniforms.add(K?w:T),K&&!I&&N.uniforms.add(o,s),N.uniforms.add(c,l,u,new _(`miterLimit`,e=>e.join===`miter`?e.miterLimit:0)),N.constants.add(`LARGE_HALF_FLOAT`,`float`,65500),N.constants.add(`EPS`,`float`,.001),N.constants.add(`NUM_JOIN_SUBDIVISIONS`,`float`,k.numJoinSubdivisions),j.add(`ribbonLineVertexInfo`,`uint`),M.add(`vColor`,`vec4`),M.add(`vpos`,`vec3`,{invariant:!0}),M.add(`vLineDistance`,`float`),M.add(`vLineWidth`,`float`),q?M.add(`vIsInsideJoin`,`int`,{flat:!0}):M.add(`vIsInsideJoin`,`float`),M.add(`vStretchFactor`,`float`),M.add(`vJoinCenterLineSDFs`,`vec2`),M.add(`vSubdivisionFactor`,`float`),B&&M.add(`vLineSizeInv`,`float`),X&&M.add(`vLineDistanceNorm`,`float`),J&&(M.add(`vSegmentSDF`,`float`),M.add(`vReverseSegmentSDF`,`float`)),N.code.add(v`vec3 perpendicular(vec3 v) {
13
13
  return vec3(v.y, -v.x, 0.0);
14
14
  }
15
15
  float nearPlaneInterpolationFactor(float nearPlaneDistance, vec4 start, vec4 end) {
@@ -20,17 +20,17 @@ float s = sin(a);
20
20
  float c = cos(a);
21
21
  mat2 m = mat2(c, -s, s, c);
22
22
  return vec3(m * v.xy, v.z);
23
- }`),M.code.add(x`vec4 projectAndScale(vec4 pos) {
23
+ }`),N.code.add(v`vec4 projectAndScale(vec4 pos) {
24
24
  vec4 posNdc = proj * pos;
25
25
  posNdc.xy *= viewport.zw / posNdc.w;
26
26
  posNdc.z /= posNdc.w;
27
27
  return posNdc;
28
- }`),M.code.add(x`
28
+ }`),N.code.add(v`
29
29
  void clip(
30
30
  inout vec4 pos,
31
31
  inout vec4 prev,
32
32
  inout vec4 next,
33
- ${S(Z,x`inout float u0, inout float prevU0, inout float nextU0,`)}
33
+ ${y(Z,v`inout float u0, inout float prevU0, inout float nextU0,`)}
34
34
  bool isStartVertex
35
35
  ) {
36
36
  float adjustedNearPlaneDistance = nearFar[0] * 0.99;
@@ -41,7 +41,7 @@ return posNdc;
41
41
  if (prev.z < -nearFar[0]) {
42
42
  // Previous position in front of near plane
43
43
  float clipFactor = nearPlaneInterpolationFactor(adjustedNearPlaneDistance, prev, pos);
44
- ${S(Z,x`u0 = mix(prevU0, u0, clipFactor); nextU0 = u0;`)}
44
+ ${y(Z,v`u0 = mix(prevU0, u0, clipFactor); nextU0 = u0;`)}
45
45
  pos = mix(prev, pos, clipFactor);
46
46
  next = pos;
47
47
  } else {
@@ -51,7 +51,7 @@ return posNdc;
51
51
  if (next.z < -nearFar[0]) {
52
52
  // Next position in front of near plane
53
53
  float clipFactor = nearPlaneInterpolationFactor(adjustedNearPlaneDistance, pos, next);
54
- ${S(Z,x`u0 = mix(u0, nextU0, clipFactor); prevU0 = u0;`)}
54
+ ${y(Z,v`u0 = mix(u0, nextU0, clipFactor); prevU0 = u0;`)}
55
55
  pos = mix(pos, next, clipFactor);
56
56
  prev = pos;
57
57
  } else {
@@ -63,58 +63,61 @@ return posNdc;
63
63
  if (prev.z > -nearFar[0]) {
64
64
  // Previous position behind near plane
65
65
  float clipFactor = nearPlaneInterpolationFactor(adjustedNearPlaneDistance, pos, prev);
66
- ${S(Z,x`prevU0 = mix(u0, prevU0, clipFactor);`)}
66
+ ${y(Z,v`prevU0 = mix(u0, prevU0, clipFactor);`)}
67
67
  prev = mix(pos, prev, clipFactor);
68
68
  }
69
69
 
70
70
  if (next.z > -nearFar[0]) {
71
71
  // Next position behind near plane
72
72
  float clipFactor = nearPlaneInterpolationFactor(adjustedNearPlaneDistance, next, pos);
73
- ${S(Z,x`nextU0 = mix(nextU0, u0, clipFactor);`)}
73
+ ${y(Z,v`nextU0 = mix(nextU0, u0, clipFactor);`)}
74
74
  next = mix(next, pos, clipFactor);
75
75
  }
76
76
  }
77
77
  }
78
- `),M.uniforms.add(te),M.constants.add(`aaWidth`,`float`,1),N.constants.add(`aaWidth`,`float`,1),M.main.add(x`
78
+ `),N.uniforms.add(oe),N.constants.add(`aaWidth`,`float`,1),P.constants.add(`aaWidth`,`float`,1);let de=b.getField(1);return N.main.add(v`
79
+ uint vertexTypeBits = ${m(b,1,v`ribbonLineVertexInfo`)};
80
+ // Sign-extend the packed type; casting its unsigned field to int does not extend the field's sign bit.
81
+ uint signExtendedVertexTypeBits = (vertexTypeBits & ${v.hexuint(se)}) != 0u ? (vertexTypeBits | ~${v.hexuint(de.max)}) : vertexTypeBits;
82
+ int signedVertexType = int(signExtendedVertexTypeBits);
83
+ float subdivisionFactor = float(${m(b,2,v`ribbonLineVertexInfo`)}) / ${v.float(ce)};
79
84
  vec3 position = ${Q.getTextureAttribute(`position`)};
80
- float u0 = ${Q.getTextureAttribute(`u0`)};
81
- ${S(G,x`
85
+ ${B?v`float u0 = ${Q.getTextureAttribute(`u0`)};`:``}
86
+ ${B&&K?v`
82
87
  float prevU0 = ${Q.getTextureAttribute(`u0`,-1)};
83
88
  float nextU0 = ${Q.getTextureAttribute(`u0`,1)};
84
- ${S(!F,x`
89
+ ${y(!I,v`
85
90
  u0 *= metersPerRenderUnit;
86
91
  prevU0 *= metersPerRenderUnit;
87
92
  nextU0 *= metersPerRenderUnit;
88
93
  `)}
89
- `)}
90
-
94
+ `:``}
91
95
  // unpack values from vertex type
92
- float vertexType = abs(lineParameters.y);
93
- ${S(!q,x`
94
- bool isInsideJoin = vertexType > 8.0;
95
- vertexType -= isInsideJoin ? 8.0 : 0.0;
96
+ int vertexType = abs(signedVertexType);
97
+ ${y(!q,v`
98
+ bool isInsideJoin = vertexType > ${v.int(x)};
99
+ vertexType -= isInsideJoin ? ${v.int(x)} : 0;
96
100
  `)}
97
- float lineSide = sign(lineParameters.y);
98
- bool isStartVertex = vertexType == 2.0 || vertexType == 4.0;
101
+ float lineSide = float(sign(signedVertexType));
102
+ bool isStartVertex = vertexType == 2 || vertexType == 3;
99
103
  vec3 prevPosition = ${Q.getTextureAttribute(`position`,-1)};
100
104
  vec3 nextPosition = ${Q.getTextureAttribute(`position`,1)};
101
105
 
102
- // Check for special value of lineParameters.y which is used by the Renderer when graphics are removed before the
103
- // VBO is recompacted. If this is the case, then we just project outside of clip space.
104
- if (lineParameters.y == 0.0) {
105
- gl_Position = ${u};
106
+ // Cleared geometry has a zero descriptor; a zero vertex type marks geometry to hide.
107
+ if (signedVertexType == 0) {
108
+ gl_Position = ${i};
106
109
  }
107
110
  else {
108
111
  vec4 pos = view * vec4(position, 1.0);
109
112
  vec4 prev = view * vec4(prevPosition, 1.0);
110
113
  vec4 next = view * vec4(nextPosition, 1.0);
111
114
 
112
- bool isJoin = vertexType < 3.0;
113
- `),$&&M.main.add(x`vec4 other = isStartVertex ? next : prev;
115
+ bool isJoin = vertexType < 3;
116
+ `),$&&N.main.add(v`vec4 other = isStartVertex ? next : prev;
114
117
  bool markersHidden = areWorldMarkersHidden(pos.xyz, other.xyz);
115
118
  if (!isJoin && !markersHidden) {
116
119
  pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
117
- }`),k.include(g),M.code.add(x`
120
+ }`),A.include(f),N.code.add(v`
118
121
  vec2 computeJoinAndCapDisplacement(
119
122
  bool isJoin,
120
123
  bool isStartVertex,
@@ -160,7 +163,7 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
160
163
  }
161
164
 
162
165
  // Compute stretch compensation for feathering.
163
- ${S(q,x`
166
+ ${y(q,v`
164
167
  if (subdivisionFactor > 0.0) {
165
168
  vIsInsideJoin = 1;
166
169
  }
@@ -194,14 +197,14 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
194
197
  }
195
198
 
196
199
  if (isOutside && displacementLen > miterLimit * lineWidth) {
197
- ${S(O.roundJoins,x`
200
+ ${y(k.roundJoins,v`
198
201
  vec3 startDir = perpendicular(leftLen < EPS ? right : left);
199
202
  vec3 endDir = perpendicular(rightLen < EPS ? left : right);
200
- float factor = ${z?x`min(1.0, subdivisionFactor * ((NUM_JOIN_SUBDIVISIONS + 1.0) / NUM_JOIN_SUBDIVISIONS))`:x`subdivisionFactor`};
203
+ float factor = ${B?v`min(1.0, subdivisionFactor * ((NUM_JOIN_SUBDIVISIONS + 1.0) / NUM_JOIN_SUBDIVISIONS))`:v`subdivisionFactor`};
201
204
 
202
205
  float rotationAngle = acos(clamp(dot(startDir.xy, endDir.xy), -1.0, 1.0));
203
206
  joinDisplacementDir = rotateZ(startDir, -lineSide * factor * rotationAngle);
204
- `,x`
207
+ `,v`
205
208
  /**
206
209
  * Convert to bevel join if miterLimit is exceeded.
207
210
  * Here vertices with a subdivisionFactor > 0 are either START vertices or
@@ -213,19 +216,19 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
213
216
  vec3 startDir = perpendicular(leftLen < EPS ? right : left);
214
217
  vec3 endDir = perpendicular(rightLen < EPS ? left : right);
215
218
 
216
- ${S(z,x`joinDisplacementDir = (isStartVertex || subdivisionFactor > 0.0) ? endDir : startDir;`,x`joinDisplacementDir = mix(startDir, endDir, subdivisionFactor);`)}
219
+ ${y(B,v`joinDisplacementDir = (isStartVertex || subdivisionFactor > 0.0) ? endDir : startDir;`,v`joinDisplacementDir = mix(startDir, endDir, subdivisionFactor);`)}
217
220
  `)}
218
221
  displacementLen = lineWidth;
219
222
  }
220
223
  } else {
221
224
  joinDisplacementDir = perpendicular(isStartVertex ? right : left);
222
- ${R===0?``:x`capDisplacementDir = vec3((isStartVertex ? -right : left).xy, 0.0);`}
225
+ ${z===0?``:v`capDisplacementDir = vec3((isStartVertex ? -right : left).xy, 0.0);`}
223
226
  }
224
227
 
225
228
  return (joinDisplacementDir.xy * lineSide + capDisplacementDir.xy) * displacementLen;
226
229
  }
227
- `),M.main.add(x`
228
- clip(pos, prev, next, ${S(Z,x`u0, prevU0, nextU0,`)} isStartVertex);
230
+ `),N.main.add(v`
231
+ clip(pos, prev, next, ${y(Z,v`u0, prevU0, nextU0,`)} isStartVertex);
229
232
 
230
233
  vec3 clippedPos = pos.xyz;
231
234
  vec3 clippedCenter = mix(pos.xyz, isStartVertex ? next.xyz : prev.xyz, 0.5);
@@ -237,29 +240,29 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
237
240
  vec3 left = (pos.xyz - prev.xyz);
238
241
  vec3 right = (next.xyz - pos.xyz);
239
242
 
240
- float lineSize = getSize(${S(W,`clippedPos`)});
241
- ${S(z&&W,`float patternLineSize = getSize(clippedCenter);`)}
242
- ${S(z&&!W,`float patternLineSize = lineSize;`)}
243
+ float lineSize = getSize(${y(G,`clippedPos`)});
244
+ ${y(B&&G,`float patternLineSize = getSize(clippedCenter);`)}
245
+ ${y(B&&!G,`float patternLineSize = lineSize;`)}
243
246
 
244
- ${S(G,x`
245
- ${S(F,x`float lineSizeScreen = lineSize * groundMetersToScreenRatio;`,x`
247
+ ${y(K,v`
248
+ ${y(I,v`float lineSizeScreen = lineSize * groundMetersToScreenRatio;`,v`
246
249
  float metersPerScreenPixel = max(-clippedPos.z, nearFar[0]) * metersPerRenderUnit * screenPixelSizePerDistance;
247
250
  float lineSizeScreen = lineSize / metersPerScreenPixel;
248
251
  `)}
249
252
  float lineWidth = lineSizeScreen * pixelRatio + aaWidth;
250
- `,x`
253
+ `,v`
251
254
  float lineWidth = lineSize * pixelRatio + aaWidth;
252
255
  `)}
253
256
 
254
257
  vLineWidth = noPerspectiveWrite(lineWidth, pos.w);
255
- ${z?`vLineSizeInv = noPerspectiveWrite(1.0 / ${G?`lineSize`:`max(lineSize, 1.0)`}, pos.w);`:``}
256
- `),ae&&M.main.add(x`
258
+ ${B?`vLineSizeInv = noPerspectiveWrite(1.0 / ${K?`lineSize`:`max(lineSize, 1.0)`}, pos.w);`:``}
259
+ `),ue&&N.main.add(v`
257
260
  float isEndVertex = float(!isStartVertex);
258
261
  vec3 segmentOrigin = mix(pos.xyz, prev.xyz, isEndVertex);
259
262
  vec3 segment = mix(right, left, isEndVertex);
260
263
  ${J?`vec3 segmentEnd = mix(next.xyz, pos.xyz, isEndVertex);`:``}
261
- `),M.main.add(x`
262
- vIsInsideJoin = ${q?x`0`:x`float(isInsideJoin)`};
264
+ `),N.main.add(v`
265
+ vIsInsideJoin = ${q?v`0`:v`float(isInsideJoin)`};
263
266
  vStretchFactor = 1.0;
264
267
  vSubdivisionFactor = 0.0;
265
268
  vJoinCenterLineSDFs = vec2(LARGE_HALF_FLOAT);
@@ -271,7 +274,7 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
271
274
  right,
272
275
  lineSide,
273
276
  lineWidth,
274
- lineParameters.x,
277
+ subdivisionFactor,
275
278
  pos.w
276
279
  );
277
280
  vec3 segmentDirection = isStartVertex ? right : left;
@@ -288,10 +291,10 @@ pos.xyz += normalize(other.xyz - pos.xyz) * getWorldMarkerSize(pos.xyz) * 0.5;
288
291
  float lineDistNorm = noPerspectiveWrite(lineSide, pos.w);
289
292
 
290
293
  vLineDistance = lineWidth * lineDistNorm;
291
- ${X?x`vLineDistanceNorm = lineDistNorm;`:``}
294
+ ${X?v`vLineDistanceNorm = lineDistNorm;`:``}
292
295
 
293
296
  pos.xyz += displacement;
294
- `),M.main.add(x`if (isJoin) {
297
+ `),N.main.add(v`if (isJoin) {
295
298
  vec2 joinCenterToVertex = displacementXY;
296
299
  vec2 leftCenterlineDir = left.xy;
297
300
  vec2 rightCenterlineDir = right.xy;
@@ -306,36 +309,36 @@ dot(vec2(leftCenterlineDir.y, -leftCenterlineDir.x), joinCenterToVertex)
306
309
  ),
307
310
  pos.w
308
311
  );
309
- }`),J&&M.main.add(x`vec2 segmentDir = normalize(segment.xy);
312
+ }`),J&&N.main.add(v`vec2 segmentDir = normalize(segment.xy);
310
313
  vSegmentSDF = noPerspectiveWrite((isJoin && isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentOrigin.xy, segmentDir)), pos.w);
311
- vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),z&&(F?M.main.add(`float stippleDistanceToScreenRatio = ${G?`groundMetersToScreenRatio`:`planarDistanceToScreenRatio`};`):M.main.add(x`vec3 segmentCenter = mix((nextPosition + position) * 0.5, (position + prevPosition) * 0.5, isEndVertex);
312
- float stippleDistanceToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),M.main.add(x`
314
+ vReverseSegmentSDF = noPerspectiveWrite((isJoin && !isStartVertex) ? LARGE_HALF_FLOAT : (dot(pos.xy - segmentEnd.xy, -segmentDir)), pos.w);`),B&&(I?N.main.add(`float stippleDistanceToScreenRatio = ${K?`groundMetersToScreenRatio`:`planarDistanceToScreenRatio`};`):N.main.add(v`vec3 segmentCenter = mix((nextPosition + position) * 0.5, (position + prevPosition) * 0.5, isEndVertex);
315
+ float stippleDistanceToScreenRatio = computeWorldToScreenRatio(segmentCenter);`),N.main.add(v`
313
316
  float segmentLengthScreenDouble = length(segment.xy);
314
317
  float segmentLengthScreen = segmentLengthScreenDouble * 0.5;
315
318
  float discreteStippleDistanceToScreenRatio = discretizeStippleDistanceToScreenRatio(stippleDistanceToScreenRatio);
316
- float segmentLengthRender = ${S(G,x`abs(mix(nextU0 - u0, u0 - prevU0, isEndVertex))`,x`length(mix(nextPosition - position, position - prevPosition, isEndVertex))`)};
319
+ float segmentLengthRender = ${y(K,v`abs(mix(nextU0 - u0, u0 - prevU0, isEndVertex))`,v`length(mix(nextPosition - position, position - prevPosition, isEndVertex))`)};
317
320
 
318
- ${S(!F||G,x`
319
- float segmentStartRender = ${S(G,x`mix(u0, prevU0, isEndVertex)`,x`mix(u0, u0 - segmentLengthRender, isEndVertex)`)};
321
+ ${y(!I||K,v`
322
+ float segmentStartRender = ${y(K,v`mix(u0, prevU0, isEndVertex)`,v`mix(u0, u0 - segmentLengthRender, isEndVertex)`)};
320
323
  `)}
321
324
 
322
325
  vStipplePatternStretch = stippleDistanceToScreenRatio / discreteStippleDistanceToScreenRatio;
323
- `),F?M.main.add(x`float segmentLengthPseudoScreen = segmentLengthScreen / pixelRatio * discreteStippleDistanceToScreenRatio / stippleDistanceToScreenRatio;
324
- float startPseudoScreen = u0 * discreteStippleDistanceToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):M.main.add(x`float startPseudoScreen = segmentStartRender * discreteStippleDistanceToScreenRatio;
325
- float segmentLengthPseudoScreen = segmentLengthRender * discreteStippleDistanceToScreenRatio;`),M.uniforms.add(new b(`stipplePatternPixelSize`,e=>s(e))),M.main.add(x`
326
+ `),I?N.main.add(v`float segmentLengthPseudoScreen = segmentLengthScreen / pixelRatio * discreteStippleDistanceToScreenRatio / stippleDistanceToScreenRatio;
327
+ float startPseudoScreen = u0 * discreteStippleDistanceToScreenRatio - mix(0.0, segmentLengthPseudoScreen, isEndVertex);`):N.main.add(v`float startPseudoScreen = segmentStartRender * discreteStippleDistanceToScreenRatio;
328
+ float segmentLengthPseudoScreen = segmentLengthRender * discreteStippleDistanceToScreenRatio;`),N.uniforms.add(new _(`stipplePatternPixelSize`,e=>ie(e))),N.main.add(v`
326
329
  float patternLength = patternLineSize * stipplePatternPixelSize;
327
330
  vec2 stippleDistanceLimits;
328
331
 
329
- ${S(G,x`
332
+ ${y(K,v`
330
333
  stippleDistanceLimits = vec2(segmentStartRender, segmentStartRender + segmentLengthRender);
331
334
  vStipplePatternStretch = 1.0;
332
335
 
333
- ${S(K,x`
336
+ ${y(le,v`
334
337
  // The v-coordinate used in case of an image pattern.
335
338
  bool isLeft = lineSide < 0.0;
336
339
  vStippleV = isLeft ? 0.0 : 1.0;
337
340
  `)}
338
- `,x`
341
+ `,v`
339
342
  // Compute the coordinates at both start and end of the line segment, because we need both to clamp to in the
340
343
  // fragment shader
341
344
  stippleDistanceLimits = computeStippleDistanceLimits(startPseudoScreen, segmentLengthPseudoScreen, segmentLengthScreen, patternLength);
@@ -355,7 +358,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteStippleDistanceT
355
358
  vStippleDistance += (stippleDisplacementFactor - isEndVertex) * (stippleDistanceLimits.y - stippleDistanceLimits.x);
356
359
  }
357
360
 
358
- ${S(Z,x`
361
+ ${y(Z,v`
359
362
  float segmentStartInverseW = 1.0 / mix(pos.w, prev.w, isEndVertex);
360
363
  float segmentEndInverseW = 1.0 / mix(next.w, pos.w, isEndVertex);
361
364
  vStipplePerspective = noPerspectiveWrite(
@@ -371,7 +374,7 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteStippleDistanceT
371
374
  // Disable stipple distance limits on caps
372
375
  vStippleLimitsAndCaps.zw = isJoin ? vec2(0.0) :
373
376
  isStartVertex ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
374
- `)),M.main.add(x`
377
+ `)),N.main.add(v`
375
378
  // Convert back into NDC
376
379
  pos.xy = (pos.xy / viewport.zw) * pos.w;
377
380
  pos.z = pos.z * pos.w;
@@ -379,13 +382,13 @@ float segmentLengthPseudoScreen = segmentLengthRender * discreteStippleDistanceT
379
382
  vColor = getColor();
380
383
  vColor.a = noPerspectiveWrite(vColor.a, pos.w);
381
384
 
382
- ${V&&!F?`pos.z -= EPS * pos.w;`:``}
385
+ ${H&&!I?`pos.z -= EPS * pos.w;`:``}
383
386
 
384
387
  // transform final position to camera space for slicing
385
388
  vpos = (inverseProjectionMatrix * pos).xyz;
386
389
  gl_Position = pos;
387
390
  forwardObjectAndLayerIdColor();
388
- }`),k.include(T,O),k.include(_),N.include(ne),N.include(C),N.include(e,O),N.main.add(`discardBySlice(vpos);`),N.code.add(x`float lineFeatheringFactor(float lineWidth, float lineDistance) {
391
+ }`),A.include(E,k),A.include(p),P.include(d),P.include(S),P.include(e,k),P.main.add(`discardBySlice(vpos);`),P.code.add(v`float lineFeatheringFactor(float lineWidth, float lineDistance) {
389
392
  float stretchFactor = float(vIsInsideJoin) > 0.5 ? noPerspectiveRead(vStretchFactor) : 1.0;
390
393
  float featherWidth = 2.0;
391
394
  float featherStartDistance = lineWidth - featherWidth / stretchFactor;
@@ -398,12 +401,12 @@ float straightFeather = (joinCenterDistance - straightFeatherStartDistance) / (l
398
401
  feather = float(vIsInsideJoin) > 0.5 ? max(feather, straightFeather) : feather;
399
402
  float coverage = min(lineWidth - aaWidth, 1.0);
400
403
  return clamp(1.0 - feather, 0.0, coverage);
401
- }`),N.main.add(x`
404
+ }`),P.main.add(v`
402
405
  float lineWidth = noPerspectiveRead(vLineWidth);
403
406
  float lineDistance = noPerspectiveRead(vLineDistance);
404
- ${S(X,x`float lineDistanceNorm = noPerspectiveRead(vLineDistanceNorm);`)}
405
- `),Y&&N.main.add(x`float nominalLineWidth = lineWidth - aaWidth;`),V?N.main.add(x`vec4 albedo = vec4(1.0, 0.0, 1.0, 1.0);
406
- vec4 finalColor = albedo;`):(J&&N.main.add(x`
407
+ ${y(X,v`float lineDistanceNorm = noPerspectiveRead(vLineDistanceNorm);`)}
408
+ `),Y&&P.main.add(v`float nominalLineWidth = lineWidth - aaWidth;`),H?P.main.add(v`vec4 albedo = vec4(1.0, 0.0, 1.0, 1.0);
409
+ vec4 finalColor = albedo;`):(J&&P.main.add(v`
407
410
  float sdf = noPerspectiveRead(min(vSegmentSDF, vReverseSegmentSDF));
408
411
  vec2 fragmentPosition = vec2(min(sdf, 0.0), lineDistance);
409
412
 
@@ -414,7 +417,7 @@ vec4 finalColor = albedo;`):(J&&N.main.add(x`
414
417
  if (capCoverage < alphaCutoff) {
415
418
  discard;
416
419
  }
417
- `),Y?N.main.add(x`vec2 stipplePosition = vec2(
420
+ `),Y?P.main.add(v`vec2 stipplePosition = vec2(
418
421
  min(getStippleCapDistance(), 0.0) * nominalLineWidth,
419
422
  lineDistance
420
423
  );
@@ -422,11 +425,11 @@ float stippleRadius = length(stipplePosition);
422
425
  float stippleCapSDF = (stippleRadius - nominalLineWidth) * 0.5;
423
426
  float stippleCoverage = clamp(0.5 - stippleCapSDF, 0.0, 1.0);
424
427
  float lineCoverage = min(lineFeatheringFactor(lineWidth, lineDistance), capCoverage);
425
- float stippleAlpha = lineCoverage > 0.0 ? min(stippleCoverage, lineCoverage) / lineCoverage : 0.0;`):N.main.add(x`float stippleAlpha = getStippleAlpha(lineWidth);`),L!==11&&N.main.add(x`discardByStippleAlpha(stippleAlpha, alphaCutoff);`),N.uniforms.add(new y(`intrinsicColor`,e=>e.color)).main.add(x`vec4 color = intrinsicColor * vColor;
426
- color.a = noPerspectiveRead(color.a);`),H&&N.uniforms.add(new y(`innerColor`,e=>e.innerColor??e.color),new b(`innerWidth`,(e,t)=>e.innerWidth*t.camera.pixelRatio)).main.add(x`float distToInner = abs(lineDistance) - innerWidth;
428
+ float stippleAlpha = lineCoverage > 0.0 ? min(stippleCoverage, lineCoverage) / lineCoverage : 0.0;`):P.main.add(v`float stippleAlpha = getStippleAlpha(lineWidth);`),R!==11&&P.main.add(v`discardByStippleAlpha(stippleAlpha, alphaCutoff);`),P.uniforms.add(new g(`intrinsicColor`,e=>e.color)).main.add(v`vec4 color = intrinsicColor * vColor;
429
+ color.a = noPerspectiveRead(color.a);`),U&&P.uniforms.add(new g(`innerColor`,e=>e.innerColor??e.color),new _(`innerWidth`,(e,t)=>e.innerWidth*t.camera.pixelRatio)).main.add(v`float distToInner = abs(lineDistance) - innerWidth;
427
430
  float innerAA = clamp(0.5 - distToInner, 0.0, 1.0);
428
431
  float innerAlpha = innerColor.a + color.a * (1.0 - innerColor.a);
429
- color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),N.main.add(`vec4 albedo = blendStipple(color, stippleAlpha);`),B&&(N.uniforms.add(new b(`falloff`,e=>e.falloff)),N.main.add(x`albedo.a *= pow(max(0.0, 1.0 - abs(lineDistanceNorm)), falloff);`)),N.main.add(x`albedo.a *= ${Y?`lineCoverage`:`lineFeatheringFactor(lineWidth, lineDistance)`};`),U&&(M.main.add(`vec4 animatedAlphaTimeStamps = ${Q.getTextureAttribute(`timeStamps`)};`),k.include(re,O),N.main.add(`albedo.a *= animatedAlpha();`)),I?(k.include(i,O),M.main.add(x`forwardLocalUp(position, localOrigin);`),M.main.add(`forwardLinearDepthToReadShadow();`),k.include(d,O),N.include(r,O),N.include(n,O),N.uniforms.add(a).main.add(x`vec3 normal = normalize(upNormal);
432
+ color = mix(color, vec4(innerColor.rgb, innerAlpha), innerAA);`),P.main.add(`vec4 albedo = blendStipple(color, stippleAlpha);`),V&&(P.uniforms.add(new _(`falloff`,e=>e.falloff)),P.main.add(v`albedo.a *= pow(max(0.0, 1.0 - abs(lineDistanceNorm)), falloff);`)),P.main.add(v`albedo.a *= ${Y?`lineCoverage`:`lineFeatheringFactor(lineWidth, lineDistance)`};`),W&&(N.main.add(`vec4 animatedAlphaTimeStamps = ${Q.getTextureAttribute(`timeStamps`)};`),A.include(C,k),P.main.add(`albedo.a *= animatedAlpha();`)),L?(A.include(te,k),N.main.add(v`forwardLocalUp(position, localOrigin);`),N.main.add(`forwardLinearDepthToReadShadow();`),A.include(a,k),P.include(ee,k),P.include(n,k),P.uniforms.add(ne).main.add(v`vec3 normal = normalize(upNormal);
430
433
  float additionalAmbientScale = additionalDirectedAmbientLight(normal);
431
434
  float shadow = readFragmentShadow(additionalAmbientScale);
432
435
  float ssao = evaluateAmbientOcclusionInverse();
@@ -435,4 +438,4 @@ vec3 viewDirection = normalize((inverseViewMatrix * vec4(vpos, 0.0)).xyz);
435
438
  vec4 finalColor = vec4(
436
439
  evaluateSceneLighting(normal, albedo.rgb, shadow, 1.0 - ssao, additionalLight,viewDirection, normal),
437
440
  albedo.a
438
- );`)):N.main.add(`vec4 finalColor = albedo;`)),N.main.add(x`outputColorHighlightOLID(applySlice(finalColor, vpos), albedo.rgb);`),k}const A=Object.freeze(Object.defineProperty({__proto__:null,build:k,numRoundJoinSubdivisions:1},Symbol.toStringTag,{value:`Module`}));export{A as R,k as b,O as n};
441
+ );`)):P.main.add(`vec4 finalColor = albedo;`)),P.main.add(v`outputColorHighlightOLID(applySlice(finalColor, vpos), albedo.rgb);`),A}const j=Object.freeze(Object.defineProperty({__proto__:null,build:A,numRoundJoinSubdivisions:1},Symbol.toStringTag,{value:`Module`}));export{j as R,A as b,k as n};
package/config.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import"./core/has.js";import{deepMerge as e}from"./core/object.js";const t={apiKey:void 0,apiKeys:{scopes:[]},applicationName:``,applicationUrl:globalThis.location?.href,assetsPath:``,fontsUrl:`https://static.arcgis.com/fonts`,geometryServiceUrl:`https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer`,geoRSSServiceUrl:`https://utility.arcgis.com/sharing/rss`,kmlServiceUrl:`https://utility.arcgis.com/sharing/kml`,userPrivilegesApplied:!0,portalUrl:`https://www.arcgis.com`,respectPrefersReducedMotion:!0,routeServiceUrl:`https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World`,workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:[`arcgis.com`,`arcgisonline.com`,`esrikr.com`,`premiumservices.blackbridge.com`,`esripremium.accuweather.com`,`gbm.digitalglobe.com`,`firstlook.digitalglobe.com`,`msi.digitalglobe.com`],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:`high`,proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};globalThis.esriConfig&&(e(t,globalThis.esriConfig,!0),delete t.has),t.assetsPath||(t.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@6.0.0-next.29/assets`,t.defaultAssetsPath=t.assetsPath);export{t as default};
2
+ import"./core/has.js";import{deepMerge as e}from"./core/object.js";const t={apiKey:void 0,apiKeys:{scopes:[]},applicationName:``,applicationUrl:globalThis.location?.href,assetsPath:``,fontsUrl:`https://static.arcgis.com/fonts`,geometryServiceUrl:`https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer`,geoRSSServiceUrl:`https://utility.arcgis.com/sharing/rss`,kmlServiceUrl:`https://utility.arcgis.com/sharing/kml`,userPrivilegesApplied:!0,portalUrl:`https://www.arcgis.com`,respectPrefersReducedMotion:!0,routeServiceUrl:`https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World`,workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:[`arcgis.com`,`arcgisonline.com`,`esrikr.com`,`premiumservices.blackbridge.com`,`esripremium.accuweather.com`,`gbm.digitalglobe.com`,`firstlook.digitalglobe.com`,`msi.digitalglobe.com`],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:`high`,proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};globalThis.esriConfig&&(e(t,globalThis.esriConfig,!0),delete t.has),t.assetsPath||(t.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@6.0.0-next.30/assets`,t.defaultAssetsPath=t.assetsPath);export{t as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{remove as e}from"../arrayUtils.js";import t from"../Handles.js";import{makeHandle as n}from"../handleUtils.js";import r from"../Logger.js";import{removeMaybe as i}from"../maybe.js";import{throwIfAborted as a,createAbortError as o}from"../promiseUtils.js";import{open as s}from"../workers.js";class c{constructor(e,t,n,i,a={}){this._mainMethod=t,this._transferLists=n,this._listeners=[],this._onClientConnectedHandle=null,this._destroyed=!1,this._promise=s(e,{...a,schedule:i}).then(e=>{this._thread==null&&!this._destroyed?(this._thread=e,this._promise=null,this._onClientConnectedHandle=this._thread.onClientConnected(e=>{a.hasInitialize&&e.invoke(`initialize`,{}).catch(()=>{});for(let t of this._listeners)this._connectListenerToClient(t,e);this._onClientConnected(e)})):e.close()}),this._promise.catch(t=>r.getLogger(`esri.core.workers.WorkerHandle`).error(`Failed to initialize ${e} worker: ${t}`))}on(t,r){let i=new l(t,r);return this._listeners.push(i),this._connectListener(i),n(()=>{e(this._listeners,i),i.destroy()})}[Symbol.dispose](){this.destroy()}destroy(){this._onClientConnectedHandle=i(this._onClientConnectedHandle),this._thread&&=(this._thread.close(),null),this._promise=null;for(let e of this._listeners)e.destroy();this._listeners.length=0,this._transferLists={},this._destroyed=!0}invoke(e,t,n){return this.invokeMethod(this._mainMethod,e,t,n)}invokeMethod(e,t,n,r){if(this._thread){let i=this._transferLists[e],a=i?i(t):[];return this._thread.invoke(e,t,{transferList:a,signal:n,jobPriority:r})}return this._promise?this._promise.then(()=>(a(n),this.invokeMethod(e,t,n))):Promise.reject(o())}broadcast(e,t){return this._thread?Promise.all(this._thread.broadcast(t,e)).then(u):this._promise?this._promise.then(()=>this.broadcast(e,t)):Promise.reject(o())}get promise(){return this._promise}_onClientConnected(e){}_connectListener(e){this._thread&&e.add(this._thread.on(e.eventName,e.callback))}_connectListenerToClient(e,t){e.add(t.on(e.eventName,e.callback))}}class l{constructor(e,n){this.eventName=e,this.callback=n,this._handles=new t}add(e){this._handles.add(e)}destroy(){this._handles.destroy()}}function u(){}export{c as WorkerHandle};
2
+ import{remove as e}from"../arrayUtils.js";import t from"../Handles.js";import{makeHandle as n}from"../handleUtils.js";import r from"../Logger.js";import{removeMaybe as i}from"../maybe.js";import{throwIfAborted as a,createAbortError as o}from"../promiseUtils.js";import{open as s}from"../workers.js";class c{constructor(e,t,n,i,a={}){this._mainMethod=t,this._transferLists=n,this._listeners=[],this._onClientConnectedHandle=null,this._destroyed=!1,this._promise=s(e,{...a,schedule:i}).then(e=>{this._thread==null&&!this._destroyed?(this._thread=e,this._promise=null,this._onClientConnectedHandle=this._thread.onClientConnected(e=>{a.hasInitialize&&e.invoke(`initialize`,{}).catch(()=>{});for(let t of this._listeners)this._connectListenerToClient(t,e);this._onClientConnected(e)})):e.close()}),this._promise.catch(t=>r.getLogger(`esri.core.workers.WorkerHandle`).error(`Failed to initialize ${e} worker: ${t}`))}on(t,r){let i=new l(t,r);return this._listeners.push(i),this._connectListener(i),n(()=>{e(this._listeners,i),i.destroy()})}[Symbol.dispose](){this.destroy()}destroy(){this._onClientConnectedHandle=i(this._onClientConnectedHandle),this._thread&&=(this._thread.close(),null),this._promise=null;for(let e of this._listeners)e.destroy();this._listeners.length=0,this._transferLists={},this._destroyed=!0}invoke(e,t,n){return this.invokeMethod(this._mainMethod,e,t,n)}invokeMethod(e,t,n,r){return this._invokeMethod(e,[t],n,r)}invokeMethodWithArgs(e,t,n,r){return this._invokeMethod(e,t,n,r)}_invokeMethod(e,t,n,r){if(this._thread){let i=this._transferLists[e],a=i?i(...t):[];return this._thread.apply(e,t,{transferList:a,signal:n,jobPriority:r})}return this._promise?this._promise.then(()=>(a(n),this._invokeMethod(e,t,n,r))):Promise.reject(o())}broadcast(e,t){return this._thread?Promise.all(this._thread.broadcast(t,e)).then(u):this._promise?this._promise.then(()=>this.broadcast(e,t)):Promise.reject(o())}get promise(){return this._promise}_onClientConnected(e){}_connectListener(e){this._thread&&e.add(this._thread.on(e.eventName,e.callback))}_connectListenerToClient(e,t){e.add(t.on(e.eventName,e.callback))}}class l{constructor(e,n){this.eventName=e,this.callback=n,this._handles=new t}add(e){this._handles.add(e)}destroy(){this._handles.destroy()}}function u(){}export{c as WorkerHandle};
package/kernel.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import"./core/has.js";import{addQueryParameter as e}from"./core/urlUtils.js";Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`);const t=`5.2`;let n=`5.2`;n=`6.0.0-next.29`;let r;function i(e){r=e}function a(t){let n=r?.findCredential(t);return n?.token?e(t,`token`,n.token):t}globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}});export{a as addTokenParameter,n as fullVersion,r as id,i as setId,t as version};
2
+ import"./core/has.js";import{addQueryParameter as e}from"./core/urlUtils.js";Symbol.dispose??=Symbol(`Symbol.dispose`),Symbol.asyncDispose??=Symbol(`Symbol.asyncDispose`);const t=`5.2`;let n=`5.2`;n=`6.0.0-next.30`;let r;function i(e){r=e}function a(t){let n=r?.findCredential(t);return n?.token?e(t,`token`,n.token):t}globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}});export{a as addTokenParameter,n as fullVersion,r as id,i as setId,t as version};
@@ -97,7 +97,7 @@ export default class WMTSLayer extends WMTSLayerSuperclass {
97
97
  * @returns Resolves to an image element with the tile data.
98
98
  * @since 4.27
99
99
  */
100
- fetchTile(level: number, row: number, col: number, options?: AbortOptions): Promise<HTMLImageElement>;
100
+ fetchTile(level: number, row: number, col: number, options?: AbortOptions & { tileMatrixSetId?: string; }): Promise<HTMLImageElement>;
101
101
  /**
102
102
  * Returns a [WMTSSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/) based on the given sublayer id.
103
103
  *
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../request.js";import{isSome as n}from"../core/arrayUtils.js";import r from"../core/Collection.js";import i from"../core/Error.js";import{clone as a}from"../core/lang.js";import{MultiOriginJSONSupportMixin as o}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as s}from"../core/promiseUtils.js";import{watch as c,sync as l,on as u}from"../core/reactiveUtils.js";import{urlToObject as d,objectToQuery as f}from"../core/urlUtils.js";import{property as p,subclass as m}from"../core/accessorSupport/decorators.js";import h from"../geometry/Extent.js";import g from"./Layer.js";import _ from"./WebTileLayer.js";import{BlendLayer as v}from"./mixins/BlendLayer.js";import{OperationalLayer as y}from"./mixins/OperationalLayer.js";import{PortalLayer as b}from"./mixins/PortalLayer.js";import{RefreshableLayer as x}from"./mixins/RefreshableLayer.js";import{ScaleRangeLayer as S}from"./mixins/ScaleRangeLayer.js";import{createTileBitmap as C}from"./support/imageBitmapUtils.js";import w from"./support/TileInfo.js";import T from"./support/TileInfoTilemapCache.js";import{WMTSLayerInfo as E}from"./support/WMTSLayerInfo.js";import D from"./support/WMTSSublayer.js";import{getTileUrlFromResourceUrls as O,getTileUrlTemplateFromResourceUrls as k,parseResourceInfo as A,parseText as j,validateCapabilities as M,parseCapabilities as N}from"./support/wmtsUtils.js";import{reader as P}from"../core/accessorSupport/decorators/reader.js";import{writer as F}from"../core/accessorSupport/decorators/writer.js";var I;const L={"image/png":`.png`,"image/png8":`.png`,"image/png24":`.png`,"image/png32":`.png`,"image/jpg":`.jpg`,"image/jpeg":`.jpeg`,"image/gif":`.gif`,"image/bmp":`.bmp`,"image/tiff":`.tif`,"image/jpgpng":``,"image/jpegpng":``,"image/unknown":``},R=new Set([`version`,`service`,`request`,`layer`,`style`,`format`,`tilematrixset`,`tilematrix`,`tilerow`,`tilecol`]);let z=I=class extends v(x(S(y(b(o(g)))))){constructor(...e){super(...e),this.activeLayer=null,this.copyright=``,this.customParameters=null,this.customLayerParameters=null,this.fullExtent=null,this.operationalLayerType=`WebTiledLayer`,this.resourceInfo=null,this.serviceMode=`RESTful`,this.sublayers=null,this.type=`wmts`,this.version=`1.0.0`,this.addHandles([c(()=>this.activeLayer,(e,t)=>{t&&!this.sublayers?.includes(t)&&(t.layer=null,t.parent=null),e&&(e.layer=this,e.parent=this)},l),u(()=>this.sublayers,`after-add`,({item:e})=>{e.layer=this,e.parent=this},l),u(()=>this.sublayers,`after-remove`,({item:e})=>{e.layer=null,e.parent=null},l),c(()=>this.sublayers,(e,t)=>{if(t)for(let e of t)e.layer=null,e.parent=null;if(e)for(let t of e)t.layer=this,t.parent=this},l)])}normalizeCtorArgs(e,t){return typeof e==`string`?{url:e,...t}:e}load(e){return this.addResolvingPromise(this.loadFromPortal({supportedTypes:[`WMTS`]},e).catch(s).then(()=>this._fetchService(e)).catch(e=>{throw s(e),new i(`wmtslayer:unsupported-service-data`,`Invalid response from the WMTS service.`,{error:e})})),Promise.resolve(this)}readActiveLayerFromService(e,t,n){this.activeLayer||=new D;let r=t.layers.find(e=>e.id===this.activeLayer.id);return r||=t.layers[0],this.activeLayer.read(r,n),this.activeLayer}readActiveLayerFromItemOrWebDoc(e,t){let{templateUrl:n,wmtsInfo:r}=t,i=n?this._getLowerCasedUrlParams(n):null,a=r?.layerIdentifier,o=null,s=r?.tileMatrixSet;s&&(Array.isArray(s)?s.length&&(o=s[0]):o=s);let c=i?.format,l=i?.style;return new D({id:a,imageFormat:c,styleId:l,tileMatrixSetId:o})}writeActiveLayer(e,t,n,r){let{activeLayer:i,loaded:a}=this,{id:o,tileMatrixSet:s,tileMatrixSetId:c,imageFormat:l,styleId:u}=i;t.templateUrl=a?this.getUrlTemplate(o,c,l,u):void 0,t.tileInfo=a?s?.tileInfo?.toJSON(r)??null:void 0,t.wmtsInfo={...t.wmtsInfo,layerIdentifier:o,tileMatrixSet:c}}readCustomParameters(e,t){let n=t.wmtsInfo;return n?this._mergeParams(n.customParameters,n.url):null}get fullExtents(){return this.activeLayer.fullExtents}readServiceMode(e,t){return t.templateUrl.includes(`?`)?`KVP`:`RESTful`}readSublayersFromService(e,t,n){return B(t.layers,n)}get supportedSpatialReferences(){return this.activeLayer.tileMatrixSets?.map(e=>e.tileInfo?.spatialReference).toArray().filter(n)??[]}get tilemapCache(){let e=this.activeLayer?.tileMatrixSet?.tileInfo;return e?new T(e):void 0}get title(){return this.activeLayer?.title??`Layer`}set title(e){this._overrideIfSome(`title`,e)}get url(){return this._get(`url`)}set url(e){e&&e.endsWith(`/`)?this._set(`url`,e.slice(0,-1)):this._set(`url`,e)}createWebTileLayer(e){let t=this.getUrlTemplate(this.activeLayer.id,this.activeLayer.tileMatrixSetId,this.activeLayer.imageFormat,this.activeLayer.styleId),n=this._getTileMatrixSetById(e.tileMatrixSetId)?.tileInfo,r=e.fullExtent,i=new E({layerIdentifier:e.id,tileMatrixSet:e.tileMatrixSetId,url:this.url});return this.customLayerParameters&&(i.customLayerParameters=this.customLayerParameters),this.customParameters&&(i.customParameters=this.customParameters),new _({fullExtent:r,urlTemplate:t,tileInfo:n,wmtsInfo:i})}async fetchTile(e,n,r,i={}){let{signal:a}=i,o=this.getTileUrl(e,n,r),{data:s}=await t(o,{responseType:`image`,signal:a});return s}async fetchImageBitmapTile(e,n,r,i={}){let{signal:a}=i;if(this.fetchTile!==I.prototype.fetchTile){let t=await this.fetchTile(e,n,r,i);return C(t,e,n,r,i)}let o=this.getTileUrl(e,n,r),{data:s}=await t(o,{responseType:`blob`,signal:a});return C(s,e,n,r,i)}findSublayerById(e){return this.sublayers?.find(t=>t.id===e)}getTileUrl(e,t,n){let r=this._getTileMatrixSetById(this.activeLayer.tileMatrixSetId)?.tileInfo?.lods[e],i=r?r.levelValue||`${r.level}`:`${e}`,a=this.resourceInfo?``:O({dimensionMap:this.dimensionMap,layerMap:this.layerMap},this.activeLayer.id,this.activeLayer.tileMatrixSetId,this.activeLayer.imageFormat,this.activeLayer.styleId,i,t,n);return a||=this.getUrlTemplate(this.activeLayer.id,this.activeLayer.tileMatrixSetId,this.activeLayer.imageFormat,this.activeLayer.styleId).replaceAll(/\{level\}/gi,i).replaceAll(/\{row\}/gi,`${t}`).replaceAll(/\{col\}/gi,`${n}`),a=this._appendCustomLayerParameters(a),a}getUrlTemplate(e,t,n,r){if(!this.resourceInfo){let n=k({dimensionMap:this.dimensionMap,layerMap:this.layerMap},e,t,r);if(n)return n}if(this.serviceMode===`KVP`)return this.url+`?SERVICE=WMTS&VERSION=`+this.version+`&REQUEST=GetTile&LAYER=`+e+`&STYLE=`+r+`&FORMAT=`+n+`&TILEMATRIXSET=`+t+`&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}`;if(this.serviceMode===`RESTful`){let i=``,a=n.toLowerCase();return L[a]&&(i=L[a]),this.url+e+`/`+r+`/`+t+`/{level}/{row}/{col}`+i}return``}async _fetchService(e){if(this.resourceInfo){this.resourceInfo.serviceMode===`KVP`&&!this.url.includes(`?`)&&(this.url+=`?`),A(this.resourceInfo),this.read(this.resourceInfo,{origin:`service`});return}let t=null;try{let{data:n}=await this._getCapabilities(this.serviceMode,e);t=j(n),M(t)}catch{let n=this.serviceMode===`KVP`?`RESTful`:`KVP`;try{let{data:r}=await this._getCapabilities(n,e);t=j(r),M(t),this.serviceMode=n}catch(e){throw new i(`wmtslayer:unsupported-service-data`,`Services does not support RESTful or KVP service modes.`,{error:e})}}let{serviceMode:n,url:r}=this,a=N(t,{serviceMode:n,url:r});this.read(a,{origin:`service`})}async _getCapabilities(e,n){let r=this._getCapabilitiesUrl(e);return await t(r,{...n,responseType:`text`})}_getTileMatrixSetById(e){return this.findSublayerById(this.activeLayer.id)?.tileMatrixSets?.find(({id:t})=>t===e)}_appendCustomParameters(e){return this._appendParameters(e,this.customParameters)}_appendCustomLayerParameters(e){return this._appendParameters(e,{...a(this.customParameters),...this.customLayerParameters})}_appendParameters(e,t){let n=d(e),r={...n.query,...t},i=f(r);return i===``?n.path:`${n.path}?${i}`}_getCapabilitiesUrl(e){this.url=d(this.url).path;let t=this.url;switch(e){case`KVP`:t+=`?request=GetCapabilities&service=WMTS&version=${this.version}`;break;case`RESTful`:{let e=`/${this.version}/WMTSCapabilities.xml`,n=new RegExp(e,`i`);t=t.replace(n,``),t+=e;break}}return this._appendCustomParameters(t)}_getLowerCasedUrlParams(e){if(!e)return null;let t=d(e).query;if(!t)return null;let n={};return Object.keys(t).forEach(e=>{n[e.toLowerCase()]=t[e]}),n}_mergeParams(e,t){let n=this._getLowerCasedUrlParams(t);if(n){let t=Object.keys(n);t.length&&(e=e?a(e):{},t.forEach(t=>{!e.hasOwnProperty(t)&&!R.has(t)&&(e[t]=n[t])}))}return e}};e([p()],z.prototype,`dimensionMap`,void 0),e([p()],z.prototype,`layerMap`,void 0),e([p({type:D,json:{origins:{"web-document":{write:{ignoreOrigin:!0}}}}})],z.prototype,`activeLayer`,void 0),e([P(`service`,`activeLayer`,[`layers`])],z.prototype,`readActiveLayerFromService`,null),e([P([`web-document`,`portal-item`],`activeLayer`,[`wmtsInfo`])],z.prototype,`readActiveLayerFromItemOrWebDoc`,null),e([F([`web-document`,`portal-item`],`activeLayer`,{templateUrl:{type:String},tileInfo:{type:w},"wmtsInfo.layerIdentifier":{type:String},"wmtsInfo.tileMatrixSet":{type:String}})],z.prototype,`writeActiveLayer`,null),e([p({type:String,value:``,json:{write:!0}})],z.prototype,`copyright`,void 0),e([p({type:[`show`,`hide`]})],z.prototype,`listMode`,void 0),e([p({json:{read:!0,write:!0}})],z.prototype,`blendMode`,void 0),e([p({json:{origins:{"web-document":{read:{source:[`wmtsInfo.customParameters`,`wmtsInfo.url`]},write:{target:`wmtsInfo.customParameters`}},"portal-item":{read:{source:[`wmtsInfo.customParameters`,`wmtsInfo.url`]},write:{target:`wmtsInfo.customParameters`}}}}})],z.prototype,`customParameters`,void 0),e([P([`portal-item`,`web-document`],`customParameters`)],z.prototype,`readCustomParameters`,null),e([p({json:{origins:{"web-document":{read:{source:`wmtsInfo.customLayerParameters`},write:{target:`wmtsInfo.customLayerParameters`}},"portal-item":{read:{source:`wmtsInfo.customLayerParameters`},write:{target:`wmtsInfo.customLayerParameters`}}}}})],z.prototype,`customLayerParameters`,void 0),e([p({type:h,json:{write:{ignoreOrigin:!0},origins:{"web-document":{read:{source:`fullExtent`}},"portal-item":{read:{source:`fullExtent`}}}}})],z.prototype,`fullExtent`,void 0),e([p({readOnly:!0})],z.prototype,`fullExtents`,null),e([p({type:[`WebTiledLayer`]})],z.prototype,`operationalLayerType`,void 0),e([p()],z.prototype,`resourceInfo`,void 0),e([p()],z.prototype,`serviceMode`,void 0),e([P([`portal-item`,`web-document`],`serviceMode`,[`templateUrl`])],z.prototype,`readServiceMode`,null),e([p({type:r.ofType(D)})],z.prototype,`sublayers`,void 0),e([P(`service`,`sublayers`,[`layers`])],z.prototype,`readSublayersFromService`,null),e([p({readOnly:!0})],z.prototype,`supportedSpatialReferences`,null),e([p({readOnly:!0})],z.prototype,`tilemapCache`,null),e([p({json:{read:{source:`title`}}})],z.prototype,`title`,null),e([p({json:{read:!1},readOnly:!0,value:`wmts`})],z.prototype,`type`,void 0),e([p({json:{origins:{service:{read:{source:`tileUrl`}},"web-document":{read:{source:`wmtsInfo.url`},write:{target:`wmtsInfo.url`}},"portal-item":{read:{source:`wmtsInfo.url`},write:{target:`wmtsInfo.url`}}}}})],z.prototype,`url`,null),e([p()],z.prototype,`version`,void 0),z=I=e([m(`esri.layers.WMTSLayer`)],z);function B(e,t){return e.map(e=>{let n=new D;return n.read(e,t),n})}const V=z;export{V as default};
2
+ import{__decorate as e}from"tslib";import t from"../request.js";import{isSome as n}from"../core/arrayUtils.js";import r from"../core/Collection.js";import i from"../core/Error.js";import{clone as a}from"../core/lang.js";import{MultiOriginJSONSupportMixin as o}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as s}from"../core/promiseUtils.js";import{watch as c,sync as l,on as u}from"../core/reactiveUtils.js";import{urlToObject as d,objectToQuery as f}from"../core/urlUtils.js";import{property as p,subclass as m}from"../core/accessorSupport/decorators.js";import h from"../geometry/Extent.js";import g from"./Layer.js";import _ from"./WebTileLayer.js";import{BlendLayer as v}from"./mixins/BlendLayer.js";import{OperationalLayer as y}from"./mixins/OperationalLayer.js";import{PortalLayer as b}from"./mixins/PortalLayer.js";import{RefreshableLayer as x}from"./mixins/RefreshableLayer.js";import{ScaleRangeLayer as S}from"./mixins/ScaleRangeLayer.js";import{createTileBitmap as C}from"./support/imageBitmapUtils.js";import w from"./support/TileInfo.js";import T from"./support/TileInfoTilemapCache.js";import{WMTSLayerInfo as E}from"./support/WMTSLayerInfo.js";import D from"./support/WMTSSublayer.js";import{getTileUrlFromResourceUrls as O,getTileUrlTemplateFromResourceUrls as k,parseResourceInfo as A,parseText as j,validateCapabilities as M,parseCapabilities as N}from"./support/wmtsUtils.js";import{reader as P}from"../core/accessorSupport/decorators/reader.js";import{writer as F}from"../core/accessorSupport/decorators/writer.js";var I;const L={"image/png":`.png`,"image/png8":`.png`,"image/png24":`.png`,"image/png32":`.png`,"image/jpg":`.jpg`,"image/jpeg":`.jpeg`,"image/gif":`.gif`,"image/bmp":`.bmp`,"image/tiff":`.tif`,"image/jpgpng":``,"image/jpegpng":``,"image/unknown":``},R=new Set([`version`,`service`,`request`,`layer`,`style`,`format`,`tilematrixset`,`tilematrix`,`tilerow`,`tilecol`]);let z=I=class extends v(x(S(y(b(o(g)))))){constructor(...e){super(...e),this.activeLayer=null,this.copyright=``,this.customParameters=null,this.customLayerParameters=null,this.operationalLayerType=`WebTiledLayer`,this.resourceInfo=null,this.serviceMode=`RESTful`,this.sublayers=null,this.type=`wmts`,this.version=`1.0.0`,this.addHandles([c(()=>this.activeLayer,(e,t)=>{t&&!this.sublayers?.includes(t)&&(t.layer=null,t.parent=null),e&&(e.layer=this,e.parent=this)},l),u(()=>this.sublayers,`after-add`,({item:e})=>{e.layer=this,e.parent=this},l),u(()=>this.sublayers,`after-remove`,({item:e})=>{e.layer=null,e.parent=null},l),c(()=>this.sublayers,(e,t)=>{if(t)for(let e of t)e.layer=null,e.parent=null;if(e)for(let t of e)t.layer=this,t.parent=this},l)])}normalizeCtorArgs(e,t){return typeof e==`string`?{url:e,...t}:e}load(e){return this.addResolvingPromise(this.loadFromPortal({supportedTypes:[`WMTS`]},e).catch(s).then(()=>this._fetchService(e)).catch(e=>{throw s(e),new i(`wmtslayer:unsupported-service-data`,`Invalid response from the WMTS service.`,{error:e})})),Promise.resolve(this)}readActiveLayerFromService(e,t,n){this.activeLayer||=new D;let r=t.layers.find(e=>e.id===this.activeLayer.id);return r||=t.layers[0],this.activeLayer.read(r,n),this.activeLayer}readActiveLayerFromItemOrWebDoc(e,t){let{templateUrl:n,wmtsInfo:r}=t,i=n?this._getLowerCasedUrlParams(n):null,a=r?.layerIdentifier,o=null,s=r?.tileMatrixSet;s&&(Array.isArray(s)?s.length&&(o=s[0]):o=s);let c=i?.format,l=i?.style;return new D({id:a,imageFormat:c,styleId:l,tileMatrixSetId:o})}writeActiveLayer(e,t,n,r){let{activeLayer:i,loaded:a}=this,{id:o,tileMatrixSet:s,tileMatrixSetId:c,imageFormat:l,styleId:u}=i;t.templateUrl=a?this.getUrlTemplate(o,c,l,u):void 0,t.tileInfo=a?s?.tileInfo?.toJSON(r)??null:void 0,t.wmtsInfo={...t.wmtsInfo,layerIdentifier:o,tileMatrixSet:c}}readCustomParameters(e,t){let n=t.wmtsInfo;return n?this._mergeParams(n.customParameters,n.url):null}get fullExtent(){return this.fullExtents?.[0]}set fullExtent(e){this._override(`fullExtent`,e)}get fullExtents(){return this.activeLayer?.fullExtents}readServiceMode(e,t){return t.templateUrl.includes(`?`)?`KVP`:`RESTful`}readSublayersFromService(e,t,n){return B(t.layers,n)}get supportedSpatialReferences(){return this.activeLayer.tileMatrixSets?.map(e=>e.tileInfo?.spatialReference).toArray().filter(n)??[]}get tilemapCache(){let e=this.activeLayer?.tileMatrixSet?.tileInfo;return e?new T(e):void 0}get title(){return this.activeLayer?.title??`Layer`}set title(e){this._overrideIfSome(`title`,e)}get url(){return this._get(`url`)}set url(e){e&&e.endsWith(`/`)?this._set(`url`,e.slice(0,-1)):this._set(`url`,e)}createWebTileLayer(e){let t=this.getUrlTemplate(this.activeLayer.id,this.activeLayer.tileMatrixSetId,this.activeLayer.imageFormat,this.activeLayer.styleId),n=this._getTileMatrixSetById(e.tileMatrixSetId)?.tileInfo,r=e.fullExtent,i=new E({layerIdentifier:e.id,tileMatrixSet:e.tileMatrixSetId,url:this.url});return this.customLayerParameters&&(i.customLayerParameters=this.customLayerParameters),this.customParameters&&(i.customParameters=this.customParameters),new _({fullExtent:r,urlTemplate:t,tileInfo:n,wmtsInfo:i})}async fetchTile(e,n,r,i={}){let{signal:a}=i,o=this.getTileUrl(e,n,r,i.tileMatrixSetId),{data:s}=await t(o,{responseType:`image`,signal:a});return s}async fetchImageBitmapTile(e,n,r,i={}){let{signal:a}=i;if(this.fetchTile!==I.prototype.fetchTile){let t=await this.fetchTile(e,n,r,i);return C(t,e,n,r,i)}let o=this.getTileUrl(e,n,r,i.tileMatrixSetId),{data:s}=await t(o,{responseType:`blob`,signal:a});return C(s,e,n,r,i)}findSublayerById(e){return this.sublayers?.find(t=>t.id===e)}getTileUrl(e,t,n,r=this.activeLayer.tileMatrixSetId){let i=this._getTileMatrixSetById(r)?.tileInfo?.lods[e],a=i?i.levelValue||`${i.level}`:`${e}`,o=this.resourceInfo?``:O({dimensionMap:this.dimensionMap,layerMap:this.layerMap},this.activeLayer.id,r,this.activeLayer.imageFormat,this.activeLayer.styleId,a,t,n);return o||=this.getUrlTemplate(this.activeLayer.id,r,this.activeLayer.imageFormat,this.activeLayer.styleId).replaceAll(/\{level\}/gi,a).replaceAll(/\{row\}/gi,`${t}`).replaceAll(/\{col\}/gi,`${n}`),o=this._appendCustomLayerParameters(o),o}updateFrom(e){let{tileMatrixSet:t}=e;t&&(this.activeLayer.tileMatrixSetId=t.id,this.fullExtent=t.fullExtent?.clone()??null)}getUrlTemplate(e,t,n,r){if(!this.resourceInfo){let n=k({dimensionMap:this.dimensionMap,layerMap:this.layerMap},e,t,r);if(n)return n}if(this.serviceMode===`KVP`)return this.url+`?SERVICE=WMTS&VERSION=`+this.version+`&REQUEST=GetTile&LAYER=`+e+`&STYLE=`+r+`&FORMAT=`+n+`&TILEMATRIXSET=`+t+`&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}`;if(this.serviceMode===`RESTful`){let i=``,a=n.toLowerCase();return L[a]&&(i=L[a]),this.url+e+`/`+r+`/`+t+`/{level}/{row}/{col}`+i}return``}async _fetchService(e){if(this.resourceInfo){this.resourceInfo.serviceMode===`KVP`&&!this.url.includes(`?`)&&(this.url+=`?`),A(this.resourceInfo),this.read(this.resourceInfo,{origin:`service`});return}let t=null;try{let{data:n}=await this._getCapabilities(this.serviceMode,e);t=j(n),M(t)}catch{let n=this.serviceMode===`KVP`?`RESTful`:`KVP`;try{let{data:r}=await this._getCapabilities(n,e);t=j(r),M(t),this.serviceMode=n}catch(e){throw new i(`wmtslayer:unsupported-service-data`,`Services does not support RESTful or KVP service modes.`,{error:e})}}let{serviceMode:n,url:r}=this,a=N(t,{serviceMode:n,url:r});this.read(a,{origin:`service`})}async _getCapabilities(e,n){let r=this._getCapabilitiesUrl(e);return await t(r,{...n,responseType:`text`})}_getTileMatrixSetById(e){return this.findSublayerById(this.activeLayer.id)?.tileMatrixSets?.find(({id:t})=>t===e)}_appendCustomParameters(e){return this._appendParameters(e,this.customParameters)}_appendCustomLayerParameters(e){return this._appendParameters(e,{...a(this.customParameters),...this.customLayerParameters})}_appendParameters(e,t){let n=d(e),r={...n.query,...t},i=f(r);return i===``?n.path:`${n.path}?${i}`}_getCapabilitiesUrl(e){this.url=d(this.url).path;let t=this.url;switch(e){case`KVP`:t+=`?request=GetCapabilities&service=WMTS&version=${this.version}`;break;case`RESTful`:{let e=`/${this.version}/WMTSCapabilities.xml`,n=new RegExp(e,`i`);t=t.replace(n,``),t+=e;break}}return this._appendCustomParameters(t)}_getLowerCasedUrlParams(e){if(!e)return null;let t=d(e).query;if(!t)return null;let n={};return Object.keys(t).forEach(e=>{n[e.toLowerCase()]=t[e]}),n}_mergeParams(e,t){let n=this._getLowerCasedUrlParams(t);if(n){let t=Object.keys(n);t.length&&(e=e?a(e):{},t.forEach(t=>{!e.hasOwnProperty(t)&&!R.has(t)&&(e[t]=n[t])}))}return e}};e([p()],z.prototype,`dimensionMap`,void 0),e([p()],z.prototype,`layerMap`,void 0),e([p({type:D,json:{origins:{"web-document":{write:{ignoreOrigin:!0}}}}})],z.prototype,`activeLayer`,void 0),e([P(`service`,`activeLayer`,[`layers`])],z.prototype,`readActiveLayerFromService`,null),e([P([`web-document`,`portal-item`],`activeLayer`,[`wmtsInfo`])],z.prototype,`readActiveLayerFromItemOrWebDoc`,null),e([F([`web-document`,`portal-item`],`activeLayer`,{templateUrl:{type:String},tileInfo:{type:w},"wmtsInfo.layerIdentifier":{type:String},"wmtsInfo.tileMatrixSet":{type:String}})],z.prototype,`writeActiveLayer`,null),e([p({type:String,value:``,json:{write:!0}})],z.prototype,`copyright`,void 0),e([p({type:[`show`,`hide`]})],z.prototype,`listMode`,void 0),e([p({json:{read:!0,write:!0}})],z.prototype,`blendMode`,void 0),e([p({json:{origins:{"web-document":{read:{source:[`wmtsInfo.customParameters`,`wmtsInfo.url`]},write:{target:`wmtsInfo.customParameters`}},"portal-item":{read:{source:[`wmtsInfo.customParameters`,`wmtsInfo.url`]},write:{target:`wmtsInfo.customParameters`}}}}})],z.prototype,`customParameters`,void 0),e([P([`portal-item`,`web-document`],`customParameters`)],z.prototype,`readCustomParameters`,null),e([p({json:{origins:{"web-document":{read:{source:`wmtsInfo.customLayerParameters`},write:{target:`wmtsInfo.customLayerParameters`}},"portal-item":{read:{source:`wmtsInfo.customLayerParameters`},write:{target:`wmtsInfo.customLayerParameters`}}}}})],z.prototype,`customLayerParameters`,void 0),e([p({type:h,json:{write:{ignoreOrigin:!0},origins:{"web-document":{read:{source:`fullExtent`}},"portal-item":{read:{source:`fullExtent`}}}}})],z.prototype,`fullExtent`,null),e([p({readOnly:!0})],z.prototype,`fullExtents`,null),e([p({type:[`WebTiledLayer`]})],z.prototype,`operationalLayerType`,void 0),e([p()],z.prototype,`resourceInfo`,void 0),e([p()],z.prototype,`serviceMode`,void 0),e([P([`portal-item`,`web-document`],`serviceMode`,[`templateUrl`])],z.prototype,`readServiceMode`,null),e([p({type:r.ofType(D)})],z.prototype,`sublayers`,void 0),e([P(`service`,`sublayers`,[`layers`])],z.prototype,`readSublayersFromService`,null),e([p({readOnly:!0})],z.prototype,`supportedSpatialReferences`,null),e([p({readOnly:!0})],z.prototype,`tilemapCache`,null),e([p({json:{read:{source:`title`}}})],z.prototype,`title`,null),e([p({json:{read:!1},readOnly:!0,value:`wmts`})],z.prototype,`type`,void 0),e([p({json:{origins:{service:{read:{source:`tileUrl`}},"web-document":{read:{source:`wmtsInfo.url`},write:{target:`wmtsInfo.url`}},"portal-item":{read:{source:`wmtsInfo.url`},write:{target:`wmtsInfo.url`}}}}})],z.prototype,`url`,null),e([p()],z.prototype,`version`,void 0),z=I=e([m(`esri.layers.WMTSLayer`)],z);function B(e,t){return e.map(e=>{let n=new D;return n.read(e,t),n})}const V=z;export{V as default};
@@ -4,6 +4,7 @@ import type SpatialReference from "../../geometry/SpatialReference.js";
4
4
  import type DimensionalDefinition from "../support/DimensionalDefinition.js";
5
5
  import type MultidimensionalSubset from "../support/MultidimensionalSubset.js";
6
6
  import type RasterInfo from "../support/RasterInfo.js";
7
+ import type TimeInfo from "../support/TimeInfo.js";
7
8
  import type ImageSampleParameters from "../../rest/support/ImageSampleParameters.js";
8
9
  import type ImageSampleResult from "../../rest/support/ImageSampleResult.js";
9
10
  import type TimeExtent from "../../time/TimeExtent.js";
@@ -272,6 +273,12 @@ export abstract class TiledImagery {
272
273
  * });
273
274
  */
274
275
  abstract accessor timeExtent: TimeExtent | null | undefined;
276
+ /**
277
+ * TimeInfo provides information such as date fields that store [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
278
+ * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
279
+ * for the layer.
280
+ */
281
+ abstract accessor timeInfo: TimeInfo | null | undefined;
275
282
  /**
276
283
  * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
277
284
  * users to overlay features from two or more time-aware layers with different time extents.
@@ -64,15 +64,15 @@ export default class WMTSSublayer extends JSONSupport {
64
64
  get styles(): Collection<WMTSStyle> | null | undefined;
65
65
  set styles(value: ReadonlyArrayOrCollection<WMTSStyleProperties> | null | undefined);
66
66
  /**
67
- * The [TileMatrixSet](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TileMatrixSet/) to request.
68
- * Defaults to the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSet) that matches the spatialReference of the view.
69
- * Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSet).
67
+ * The [TileMatrixSet](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TileMatrixSet/) identified by [tileMatrixSetId](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSetId).
68
+ * A layer view may select a compatible tile matrix set without modifying this property.
70
69
  */
71
70
  get tileMatrixSet(): TileMatrixSet | null | undefined;
72
71
  /**
73
72
  * The id of the [TileMatrixSet](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TileMatrixSet/) to request.
74
- * Defaults to the id of the first item in [tileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSet) that matches the spatialReference of the view.
75
- * Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSet).
73
+ * Must be one of the supported [tileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/WMTSSublayer/#tileMatrixSets).
74
+ * If not specified, each view selects a compatible tile matrix set without modifying this property.
75
+ * Use [WebMap.updateFrom()](https://developers.arcgis.com/javascript/latest/references/core/WebMap/#updateFrom) or [WebScene.updateFrom()](https://developers.arcgis.com/javascript/latest/references/core/WebScene/#updateFrom) to persist the view's selection.
76
76
  */
77
77
  accessor tileMatrixSetId: string;
78
78
  /** A collection of supported [TileMatrixSets](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TileMatrixSet/). */