@arcgis/core 5.1.0-next.103 → 5.1.0-next.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analysis/ShadowCastAnalysis.d.ts +81 -62
- package/assets/esri/core/t9n/Units.json +1 -1
- package/assets/esri/core/t9n/Units_en.json +1 -1
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{f5bd0a4f82df5e942b70.js → 093f27e4e4781870b431.js} +1 -1
- package/assets/esri/core/workers/chunks/{8e986167d4a393ee41ea.js → 130851b81f04e6a008cd.js} +1 -1
- package/assets/esri/core/workers/chunks/{1cb0c4fc315bbc2bd00b.js → 1c8a21b7b60c0709e6b2.js} +1 -1
- package/assets/esri/core/workers/chunks/{ce0c7070eeb723a718e7.js → 1e8d5bfc5f8c2664190c.js} +1 -1
- package/assets/esri/core/workers/chunks/{7d571845292b1b7769c2.js → 2dced41ff2aa1bd86665.js} +1 -1
- package/assets/esri/core/workers/chunks/{bff0c4094c14cb97b18f.js → 359dbfbfb9acfb18bc6e.js} +1 -1
- package/assets/esri/core/workers/chunks/{9542ef3f6c2bc7c14d85.js → 39a8e6c9d710d3faea3c.js} +1 -1
- package/assets/esri/core/workers/chunks/3fed503185ea1913fb84.js +1 -0
- package/assets/esri/core/workers/chunks/466c250537415f12eb59.js +1 -0
- package/assets/esri/core/workers/chunks/4b130db9b7b4e2e32ea4.js +1 -0
- package/assets/esri/core/workers/chunks/{0cb8bc6dbbbe3b212712.js → 558606a1af22e4a0d536.js} +1 -1
- package/assets/esri/core/workers/chunks/6854b28853f5dd195110.js +262 -0
- package/assets/esri/core/workers/chunks/{b63cbf6c2c9ec1b02b9a.js → 6e21675bbd7a44070771.js} +1 -1
- package/assets/esri/core/workers/chunks/{bb04aff0b4947408592c.js → 7617bd0f3a70dfe61637.js} +1 -1
- package/assets/esri/core/workers/chunks/{cf3c0bee919bb509cd4f.js → 7b66691d133dabd87ce6.js} +1 -1
- package/assets/esri/core/workers/chunks/{bf2c202dec5ab7bc770b.js → 829a0583b8a228c65379.js} +1 -1
- package/assets/esri/core/workers/chunks/8a1751187a20b6578875.js +1 -0
- package/assets/esri/core/workers/chunks/{d610f517fb3c6cb24365.js → 8ade869fa9bae446266a.js} +1 -1
- package/assets/esri/core/workers/chunks/9b89cc85c1b5d561df7c.js +2 -0
- package/assets/esri/core/workers/chunks/{2a5f6a8d282f2c391591.js → a0e72b107991ba38a9f0.js} +1 -1
- package/assets/esri/core/workers/chunks/{f3a9100518b044e79501.js → a943bd2e6fb7443c2b66.js} +1 -1
- package/assets/esri/core/workers/chunks/{037b36d415ae27e987f9.js → aec4a4cd7044fdbbbe34.js} +1 -1
- package/assets/esri/core/workers/chunks/{29b00d07d3e1d095c590.js → b262478da29470abb72b.js} +2 -2
- package/assets/esri/core/workers/chunks/b7a81fd4994eabba1869.js +640 -0
- package/assets/esri/core/workers/chunks/{3c9482764c9e4f8bcbb0.js → c187bc997bad61b6c6e9.js} +1 -1
- package/assets/esri/core/workers/chunks/{1c83e61fd9a4f8fc8372.js → d3f08f1a9a250cd8a2c8.js} +1 -1
- package/assets/esri/core/workers/chunks/{c476f4979048e558baa7.js → e90afd914f2ccd4f5374.js} +57 -75
- package/assets/esri/core/workers/chunks/{5cffc7b49966201eccdb.js → f75295cdd5e84eb97d5a.js} +1 -1
- package/assets/esri/core/workers/chunks/{95798e3de3419fdda6ac.js → fb415b01f0f1d644832d.js} +1 -1
- package/assets/esri/core/workers/chunks/{64e268ebac0b62076f81.js → fbb23db01f3cf629d32e.js} +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ar.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_bg.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_bs.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ca.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_cs.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_da.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_de.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_el.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_en.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_es.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_et.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_fi.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_fr.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_he.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_hr.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_hu.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_id.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_it.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ja.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ko.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_lt.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_lv.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_nl.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_no.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pl.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pt-BR.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pt-PT.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ro.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ru.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sk.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sl.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sr.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sv.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_th.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_tr.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_uk.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_vi.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-CN.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-HK.json +1 -1
- package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-TW.json +1 -1
- package/assets/esri/widgets/Sketch/t9n/Sketch_cs.json +1 -1
- package/chunks/ChapmanAtmosphere.glsl.js +14 -19
- package/chunks/Compositing.glsl.js +4 -4
- package/chunks/GaussianSplatShadow.glsl.js +7 -7
- package/chunks/GlobalIllumination.glsl.js +27 -50
- package/chunks/GlobalIlluminationBlur.glsl.js +16 -11
- package/chunks/Terrain.glsl.js +1 -1
- package/config.js +1 -1
- package/core/ReactiveSet.js +1 -1
- package/kernel.js +1 -1
- package/layers/VideoLayer.js +1 -1
- package/layers/knowledgeGraph/KnowledgeGraphLayerDataManager.js +1 -1
- package/layers/knowledgeGraph/KnowledgeGraphSublayer.d.ts +1 -1
- package/layers/knowledgeGraph/KnowledgeGraphSublayer.js +1 -1
- package/layers/knowledgeGraph/layerUtils.js +1 -1
- package/layers/orientedImagery/core/utils.js +1 -1
- package/package.json +2 -2
- package/support/revision.js +1 -1
- package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
- package/symbols/cim/utils.js +1 -1
- package/symbols/support/cimSymbolUtils.js +1 -1
- package/symbols/support/utils.js +1 -1
- package/views/2d/engine/webgl/AttributeStoreView.js +1 -1
- package/views/2d/engine/webgl/RenderingDevice.js +1 -1
- package/views/2d/engine/webgl/effects/HittestEffect.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/featureTechniqueUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/AFeatureShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/FillShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/LineShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/OutlineFillShader.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/constants.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/shaders/hittestUtils.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
- package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
- package/views/2d/layers/FeatureLikeLayerView2D.js +1 -1
- package/views/2d/layers/features/FeatureContainer.js +1 -1
- package/views/2d/layers/features/layerAdapters/KnowledgeGraphSublayerAdapter.js +1 -1
- package/views/3d/analysis/ShadowCastAnalysisView3D.d.ts +9 -5
- package/views/3d/layers/FlowSubView3D.js +1 -1
- package/views/3d/layers/graphics/objectResourceUtils.js +1 -1
- package/views/3d/support/flow/FlowSubViewTiles3D.js +1 -1
- package/views/3d/terrain/TerrainRenderer.js +1 -1
- package/views/3d/terrain/TileCompositor.js +1 -1
- package/views/3d/webgl-engine/collections/Component/Material/ComponentTechnique.js +1 -1
- package/views/3d/webgl-engine/core/shaderTechnique/ShaderTechnique.js +1 -1
- package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphere.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphere.js +1 -1
- package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphereTechnique.js +1 -1
- package/views/3d/webgl-engine/effects/blit/Blit.js +1 -1
- package/views/3d/webgl-engine/effects/clouds/CloudsComposition.js +1 -1
- package/views/3d/webgl-engine/effects/focusArea/FocusAreaMaskNode.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationBlur.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/lib/Compositor.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/RenderingContext.js +1 -1
- package/views/3d/webgl-engine/lib/ShadowAccumulator.js +1 -1
- package/views/3d/webgl-engine/materials/renderers/VaoRenderer.js +1 -1
- package/views/3d/webgl-engine/parts/RenderView.js +1 -1
- package/views/3d/webgl-engine/shaders/ColorMaterialTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/CompositingTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/CompositingTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/shaders/DefaultMaterialTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/ImageMaterialTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/LineMarkerTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/NativeLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/TerrainTechnique.js +1 -1
- package/views/3d/webgl-engine/shaders/ditherNoise.glsl.js +1 -1
- package/views/layers/FeatureLikeLayerView.js +1 -1
- package/widgets/BatchAttributeForm/BatchAttributeFormViewModel.js +1 -1
- package/widgets/BatchAttributeForm/inputs/UtilityNetworkAssociationsElementInput.js +1 -1
- package/widgets/BatchAttributeForm/inputs/support/createBatchFormInputs.js +1 -1
- package/widgets/OrientedImageryViewer/components/VideoEnhancementTools.js +1 -1
- package/widgets/OrientedImageryViewer.js +1 -1
- package/widgets/TableList/TableListViewModel.js +1 -1
- package/widgets/Track/TrackViewModel.d.ts +1 -0
- package/widgets/Track/TrackViewModel.js +1 -1
- package/widgets/Track.js +1 -1
- package/widgets/support/GeolocationPositioning.d.ts +1 -0
- package/widgets/support/GeolocationPositioning.js +1 -1
- package/assets/esri/core/workers/chunks/35fdd62277fd06468a29.js +0 -2
- package/assets/esri/core/workers/chunks/40caf5e09e4382d81104.js +0 -640
- package/assets/esri/core/workers/chunks/4213aa844900fcf95287.js +0 -1
- package/assets/esri/core/workers/chunks/594e1f633527749d92d7.js +0 -1
- package/assets/esri/core/workers/chunks/cc8d55d1830d7542c3f5.js +0 -262
- package/assets/esri/core/workers/chunks/f196ad0c7dbcbf632776.js +0 -1
- package/assets/esri/core/workers/chunks/fae79769df54eb4c4154.js +0 -1
- package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphereTechniqueConfiguration.js +0 -2
- /package/assets/esri/core/workers/chunks/{35fdd62277fd06468a29.js.LICENSE.txt → 9b89cc85c1b5d561df7c.js.LICENSE.txt} +0 -0
- /package/assets/esri/core/workers/chunks/{29b00d07d3e1d095c590.js.LICENSE.txt → b262478da29470abb72b.js.LICENSE.txt} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{set as e}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{RejectBySlicePass as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{OutputDepth as r}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{positionOutsideClipSpace as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{GaussianSplatCovariance as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatCovariance.glsl.js";import{GaussianSplatEvaluation as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatEvaluation.glsl.js";import{GaussianSplatTextureFetch as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatTextureFetch.glsl.js";import{GaussianSplatUnpackingPassParameters as l,GaussianSplatUnpacking as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatUnpacking.glsl.js";import{QuaternionToRotationMatrix as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/QuaternionToRotationMatrix.glsl.js";import{Float2BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float3PassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/Float3PassUniform.js";import{FloatPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as f,If as x}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DUintPassUniform as w}from"../views/3d/webgl-engine/core/shaderModules/Texture2DUintPassUniform.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";class
|
|
2
|
+
import{set as e}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{RejectBySlicePass as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{OutputDepth as r}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{positionOutsideClipSpace as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{GaussianSplatCovariance as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatCovariance.glsl.js";import{GaussianSplatEvaluation as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatEvaluation.glsl.js";import{GaussianSplatTextureFetch as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatTextureFetch.glsl.js";import{GaussianSplatUnpackingPassParameters as l,GaussianSplatUnpacking as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatUnpacking.glsl.js";import{QuaternionToRotationMatrix as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/QuaternionToRotationMatrix.glsl.js";import{Float2BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float3PassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/Float3PassUniform.js";import{FloatPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as f,If as x}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DUintPassUniform as w}from"../views/3d/webgl-engine/core/shaderModules/Texture2DUintPassUniform.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";class S extends l{constructor(){super(...arguments),this.clipMinCameraRelative=i(),this.clipMaxCameraRelative=i(),this.minSplatRadius=-1}}function P(a){const{clippingEnabled:i,hasSlicePlane:l}=a,S=new h,{fragment:P,varyings:y,vertex:G}=S;S.include(r,a),y.add("conic","vec3"),y.add("gaussianLogAlphaCutoff","float"),y.add("offsetFromCenter","vec2"),y.add("depth","float",{invariant:!0}),G.uniforms.add(new w("splatOrderTexture",e=>e.splatOrder),new w("splatAtlasTexture",e=>e.splatAtlas),new m("minSplatRadius",e=>e.minSplatRadius),new u("inverseScreenSize",({camera:a})=>e(j,1/a.fullWidth,1/a.fullHeight)),new g("proj",e=>e.camera.projectionMatrix),new g("view",e=>e.camera.viewMatrix),new u("nearFar",e=>e.camera.nearFar)),i&&G.uniforms.add(new p("clipMin",e=>e.clipMinCameraRelative),new p("clipMax",e=>e.clipMaxCameraRelative)),G.include(v),G.include(t),G.include(d),G.include(c),G.include(s),G.include(n,a),G.code.add(f`float safeClipW(float clipW) {
|
|
3
3
|
return abs(clipW) < 1e-7 ? (clipW < 0.0 ? -1e-7 : 1e-7) : clipW;
|
|
4
|
-
}`),
|
|
4
|
+
}`),G.code.add(f`vec3 computeProjectivePixelGradient(
|
|
5
5
|
vec3 clipGradient,
|
|
6
6
|
vec3 clipWGradient,
|
|
7
7
|
float clipValue,
|
|
@@ -10,13 +10,13 @@ float invWSquared,
|
|
|
10
10
|
float halfScreenSize
|
|
11
11
|
) {
|
|
12
12
|
return (clipGradient * safeW - clipValue * clipWGradient) * invWSquared * halfScreenSize;
|
|
13
|
-
}`),
|
|
13
|
+
}`),G.code.add(f`vec3 multiplyCovariance3D(float[6] covariance3D, vec3 value) {
|
|
14
14
|
return vec3(
|
|
15
15
|
covariance3D[0] * value.x + covariance3D[1] * value.y + covariance3D[2] * value.z,
|
|
16
16
|
covariance3D[1] * value.x + covariance3D[3] * value.y + covariance3D[4] * value.z,
|
|
17
17
|
covariance3D[2] * value.x + covariance3D[4] * value.y + covariance3D[5] * value.z
|
|
18
18
|
);
|
|
19
|
-
}`),
|
|
19
|
+
}`),G.code.add(f`vec3 computeProjectiveCovariance2D(vec3 pixelXGradient, vec3 pixelYGradient, float[6] covariance3D, mat4 view) {
|
|
20
20
|
mat3 worldToView = transpose(mat3(view));
|
|
21
21
|
vec3 axisX = worldToView * pixelXGradient;
|
|
22
22
|
vec3 axisY = worldToView * pixelYGradient;
|
|
@@ -27,13 +27,13 @@ float covarianceXX = dot(axisX, covarianceAxisX) + regularization;
|
|
|
27
27
|
float covarianceXY = dot(axisX, covarianceAxisY);
|
|
28
28
|
float covarianceYY = dot(axisY, covarianceAxisY) + regularization;
|
|
29
29
|
return vec3(covarianceXX, covarianceXY, covarianceYY);
|
|
30
|
-
}`);const b=.25,D=Math.log(b);return
|
|
30
|
+
}`);const b=.25,D=Math.log(b);return G.main.add(`\n uint gaussianIndex = fetchOrderedGaussianIndex(uint(gl_InstanceID));\n uvec4 packedGaussian = fetchPackedGaussian(gaussianIndex);\n\n float opacity = unpackOpacity(packedGaussian);\n\n gl_Position = ${o};\n\n if (opacity < ${b}) {\n return;\n }\n\n vec3 cameraRelativePosition = fetchGaussianCameraRelativePosition(gaussianIndex, packedGaussian);\n\n ${x(i,f`if (cameraRelativePosition.x < clipMin.x || cameraRelativePosition.y < clipMin.y || cameraRelativePosition.z < clipMin.z ||
|
|
31
31
|
cameraRelativePosition.x > clipMax.x || cameraRelativePosition.y > clipMax.y || cameraRelativePosition.z > clipMax.z) {
|
|
32
32
|
return;
|
|
33
33
|
}`)}\n\n ${x(l,f`if (rejectBySlice(cameraRelativePosition)) {
|
|
34
34
|
return;
|
|
35
|
-
}`)}\n\n vec4 viewPos = vec4(mat3(view) * cameraRelativePosition, 1.0);\n\n if (viewPos.z > -nearFar.x || viewPos.z < -nearFar.y) {\n return;\n }\n\n vec3 covarianceA;\n vec3 covarianceB;\n computePackedGaussianCovariance3D(packedGaussian, covarianceA, covarianceB);\n\n float covariance3D[6] = float[6](covarianceA.x, covarianceA.y, covarianceA.z, covarianceB.x, covarianceB.y, covarianceB.z);\n\n vec4 projPos = proj * viewPos;\n float safeW = safeClipW(projPos.w);\n float invWSquared = 1.0 / (safeW * safeW);\n vec2 halfScreenSize = 0.5 / inverseScreenSize;\n\n // Projection matrix columns are the clip-space derivatives with respect to view-space xyz.\n vec3 clipWGradient = vec3(proj[0][3], proj[1][3], proj[2][3]);\n vec3 pixelXGradient = computeProjectivePixelGradient(\n vec3(proj[0][0], proj[1][0], proj[2][0]),\n clipWGradient,\n projPos.x,\n safeW,\n invWSquared,\n halfScreenSize.x\n );\n vec3 pixelYGradient = computeProjectivePixelGradient(\n vec3(proj[0][1], proj[1][1], proj[2][1]),\n clipWGradient,\n projPos.y,\n safeW,\n invWSquared,\n halfScreenSize.y\n );\n vec3 covariance2D = computeProjectiveCovariance2D(pixelXGradient, pixelYGradient, covariance3D, view);\n\n float determinant = computeGaussianCovarianceDeterminant(covariance2D);\n if (determinant <= 0.0) {\n return;\n }\n\n vec2 eigenvalues = computeGaussianCovarianceEigenvalues(covariance2D);\n\n gaussianLogAlphaCutoff = ${D} - log(opacity);\n float gaussianEllipseThreshold = computeGaussianEllipseThreshold(gaussianLogAlphaCutoff);\n vec2 axisLengths = computeGaussianAxisLengths(eigenvalues, gaussianEllipseThreshold);\n float maxRadius = max(axisLengths.x, axisLengths.y);\n\n if (rejectGaussianByMinimumRadius(maxRadius, opacity, minSplatRadius)) {\n return;\n }\n\n vec3 ndcPos = projPos.xyz / safeW;\n vec2 clipSpacePixelScale = 2.0 * inverseScreenSize;\n\n if (rejectGaussianByScreenBounds(ndcPos.xy, maxRadius, clipSpacePixelScale)) {\n return;\n }\n\n offsetFromCenter = computeGaussianQuadOffset(covariance2D, eigenvalues, axisLengths, gl_VertexID);\n conic = computeGaussianConic(covariance2D, determinant);\n depth = (-viewPos.z - nearFar.x) / (nearFar.y - nearFar.x);\n\n vec2 clipPos = ndcPos.xy + offsetFromCenter * clipSpacePixelScale - inverseScreenSize;\n gl_Position = vec4(clipPos, ndcPos.z, 1.0);\n `),
|
|
35
|
+
}`)}\n\n vec4 viewPos = vec4(mat3(view) * cameraRelativePosition, 1.0);\n\n if (viewPos.z > -nearFar.x || viewPos.z < -nearFar.y) {\n return;\n }\n\n vec3 covarianceA;\n vec3 covarianceB;\n computePackedGaussianCovariance3D(packedGaussian, covarianceA, covarianceB);\n\n float covariance3D[6] = float[6](covarianceA.x, covarianceA.y, covarianceA.z, covarianceB.x, covarianceB.y, covarianceB.z);\n\n vec4 projPos = proj * viewPos;\n float safeW = safeClipW(projPos.w);\n float invWSquared = 1.0 / (safeW * safeW);\n vec2 halfScreenSize = 0.5 / inverseScreenSize;\n float maxShadowSplatRadius = max(halfScreenSize.x, halfScreenSize.y);\n\n // Projection matrix columns are the clip-space derivatives with respect to view-space xyz.\n vec3 clipWGradient = vec3(proj[0][3], proj[1][3], proj[2][3]);\n vec3 pixelXGradient = computeProjectivePixelGradient(\n vec3(proj[0][0], proj[1][0], proj[2][0]),\n clipWGradient,\n projPos.x,\n safeW,\n invWSquared,\n halfScreenSize.x\n );\n vec3 pixelYGradient = computeProjectivePixelGradient(\n vec3(proj[0][1], proj[1][1], proj[2][1]),\n clipWGradient,\n projPos.y,\n safeW,\n invWSquared,\n halfScreenSize.y\n );\n vec3 covariance2D = computeProjectiveCovariance2D(pixelXGradient, pixelYGradient, covariance3D, view);\n\n float determinant = computeGaussianCovarianceDeterminant(covariance2D);\n if (determinant <= 0.0) {\n return;\n }\n\n vec2 eigenvalues = computeGaussianCovarianceEigenvalues(covariance2D);\n\n gaussianLogAlphaCutoff = ${D} - log(opacity);\n float gaussianEllipseThreshold = computeGaussianEllipseThreshold(gaussianLogAlphaCutoff);\n vec2 axisLengths = computeGaussianAxisLengths(eigenvalues, gaussianEllipseThreshold);\n float maxRadius = max(axisLengths.x, axisLengths.y);\n\n // Avoid invalid/extremely large footprints.\n if (maxRadius < 0.0 || maxRadius > maxShadowSplatRadius) {\n return;\n }\n\n if (rejectGaussianByMinimumRadius(maxRadius, opacity, minSplatRadius)) {\n return;\n }\n\n vec3 ndcPos = projPos.xyz / safeW;\n vec2 clipSpacePixelScale = 2.0 * inverseScreenSize;\n\n if (rejectGaussianByScreenBounds(ndcPos.xy, maxRadius, clipSpacePixelScale)) {\n return;\n }\n\n offsetFromCenter = computeGaussianQuadOffset(covariance2D, eigenvalues, axisLengths, gl_VertexID);\n conic = computeGaussianConic(covariance2D, determinant);\n depth = (-viewPos.z - nearFar.x) / (nearFar.y - nearFar.x);\n\n vec2 clipPos = ndcPos.xy + offsetFromCenter * clipSpacePixelScale - inverseScreenSize;\n gl_Position = vec4(clipPos, ndcPos.z, 1.0);\n `),P.include(s),P.main.add(f`float gaussianExponent = evaluateGaussianExponent(conic, offsetFromCenter);
|
|
36
36
|
if (gaussianExponent > 0.0 || gaussianExponent < gaussianLogAlphaCutoff) {
|
|
37
37
|
discard;
|
|
38
38
|
}
|
|
39
|
-
outputDepth(depth);`),
|
|
39
|
+
outputDepth(depth);`),S}const j=a(),y=Object.freeze(Object.defineProperty({__proto__:null,GaussianSplatShadowPassParameters:S,build:P},Symbol.toStringTag,{value:"Module"}));export{y as G,S as a,P as b};
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as a}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js";import{addMainLightDirection as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{ScreenSpaceRayMarching as
|
|
2
|
+
import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as a}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js";import{Gamma as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{addMainLightDirection as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{ScreenSpaceRayMarching as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js";import{CameraSpace as i}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{FloatPassUniform as l}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as n,If as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as c}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as h}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ColorAttachment1 as d}from"../views/webgl/enums.js";import{NoParameters as u}from"../views/webgl/NoParameters.js";import{ShaderBuilder as p}from"../views/webgl/ShaderBuilder.js";const f=.01,g=.008,x=.002,M=.5,v=.02,y=.1,b=.008,w=.012,S=.008,W=40,R=.095,D=.008,F=60,j=2,z=.0039,C=.25,B=.15,I=25,G=.15,P=.5,T=1,E=1,$=16;class L extends u{constructor(){super(...arguments),this.projScale=1,this.scaleGlobalIllumination=1,this.accumulatedFrames=0,this.frameCount=0,this.rayMarchMinReach=G,this.rayMarchMaxReach=P,this.rayMarchWorldReach=I,this.rayMarchMinReachEmissionWeight=T,this.rayMarchMaxReachEmissionWeight=E,this.rayMarchMaxSteps=$,this.colorBleedWeight=B}}function O(u){const B=new p,I=B.fragment;return B.include(e),B.include(i),o(I),I.include(a),I.include(t),B.include(r,u),I.uniforms.add(new h("normalMap",e=>e.normalTexture),new h("depthMap",e=>e.depthTexture),new h("lastFrameColorTexture",(e,a)=>a.reprojection.lastFrameColor?.getTexture()),new h("lastFrameDepthTexture",(e,a)=>a.reprojection.lastFrameDepth?.attachment),new m("lastFrameGlobalIlluminationTexture",e=>e.globalIllumination?.getTexture()),new m("lastFrameGlobalIlluminationWeightTexture",e=>e.globalIllumination?.getTexture(d)),new c("reprojectionViewMatrix",e=>e.reprojection.viewMatrix),new c("view",e=>e.camera.viewMatrix),new l("accumulatedFramesGI",e=>e.accumulatedFrames),new l("frameCount",e=>e.frameCount),new l("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new h("blueNoiseTex",e=>e.noiseTexture)),I.uniforms.add(new l("rayMarchMinReach",e=>e.rayMarchMinReach),new l("rayMarchMaxReach",e=>e.rayMarchMaxReach),new l("rayMarchWorldReach",e=>e.rayMarchWorldReach),new l("rayMarchMinReachEmissionWeight",e=>e.rayMarchMinReachEmissionWeight),new l("rayMarchMaxReachEmissionWeight",e=>e.rayMarchMaxReachEmissionWeight),new l("rayMarchMaxSteps",e=>e.rayMarchMaxSteps),new l("colorBleedWeight",e=>e.colorBleedWeight)),u.hasEmission&&I.uniforms.add(new h("lastFrameEmissionTexture",(e,a)=>a.reprojection.lastFrameEmission?.attachment)),I.constants.add("timeSamplesSize","float",64),I.constants.add("blueNoiseGridSize","float",8),I.code.add(n`
|
|
3
3
|
float computeIdleColorBlendWeight(float accumulatedFrames) {
|
|
4
4
|
float idleColorBlendProgress = clamp(
|
|
5
|
-
accumulatedFrames / ${
|
|
5
|
+
accumulatedFrames / ${n.float(W)},
|
|
6
6
|
0.0,
|
|
7
7
|
1.0
|
|
8
8
|
);
|
|
9
9
|
return mix(
|
|
10
|
-
${
|
|
11
|
-
${
|
|
10
|
+
${n.float(w)},
|
|
11
|
+
${n.float(S)},
|
|
12
12
|
idleColorBlendProgress
|
|
13
13
|
);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
float computeIdleOcclusionBlendWeight(float accumulatedFrames) {
|
|
17
17
|
float idleOcclusionBlendProgress = clamp(
|
|
18
|
-
accumulatedFrames / ${
|
|
18
|
+
accumulatedFrames / ${n.float(F)},
|
|
19
19
|
0.0,
|
|
20
20
|
1.0
|
|
21
21
|
);
|
|
22
22
|
return mix(
|
|
23
|
-
${
|
|
24
|
-
${
|
|
25
|
-
pow(idleOcclusionBlendProgress, ${
|
|
23
|
+
${n.float(R)},
|
|
24
|
+
${n.float(D)},
|
|
25
|
+
pow(idleOcclusionBlendProgress, ${n.float(j)})
|
|
26
26
|
);
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -67,30 +67,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
67
67
|
|
|
68
68
|
return mat3(tangent, bitangent, n);
|
|
69
69
|
}
|
|
70
|
-
|
|
71
|
-
float computeChromaWeight(vec3 color) {
|
|
72
|
-
float gray = dot(color, vec3(${l.float(z)}));
|
|
73
|
-
vec3 deviationFromGray = color - gray;
|
|
74
|
-
float chromaDistanceSquared = dot(deviationFromGray, deviationFromGray);
|
|
75
|
-
float normalizedChroma = chromaDistanceSquared / ${l.float(I)};
|
|
76
|
-
|
|
77
|
-
return clamp(normalizedChroma * ${l.float(B)}, 0.0, 1.0);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
float computeColorBleedWeight(vec3 receiverColor, vec3 sourceColor) {
|
|
81
|
-
float receiverChromaWeight = computeChromaWeight(receiverColor);
|
|
82
|
-
float sourceChromaWeight = computeChromaWeight(sourceColor);
|
|
83
|
-
float receiverAverageIntensity = dot(receiverColor, vec3(${l.float(z)}));
|
|
84
|
-
|
|
85
|
-
// Favor bright, neutral receivers lit by more saturated hit surfaces
|
|
86
|
-
float bleedFactor =
|
|
87
|
-
pow(receiverAverageIntensity, ${l.float(G)}) *
|
|
88
|
-
(1.0 - receiverChromaWeight) *
|
|
89
|
-
pow(sourceChromaWeight, ${l.float(P)});
|
|
90
|
-
|
|
91
|
-
return ${l.float(T)} * clamp(bleedFactor, 0.0, 1.0);
|
|
92
|
-
}
|
|
93
|
-
`),$.outputs.add("fragGlobalIllumination","vec4",0),$.outputs.add("fragWeight","float",1),E.main.add(l`
|
|
70
|
+
`),B.outputs.add("fragGlobalIllumination","vec4",0),B.outputs.add("fragWeight","float",1),I.main.add(n`
|
|
94
71
|
float depth = depthFromTexture(depthMap, uv);
|
|
95
72
|
|
|
96
73
|
// Early out if depth is out of range, such as in the sky
|
|
@@ -130,7 +107,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
130
107
|
float idleColorBlendWeight = computeIdleColorBlendWeight(accumulatedFramesGI);
|
|
131
108
|
float idleOcclusionBlendWeight = computeIdleOcclusionBlendWeight(accumulatedFramesGI);
|
|
132
109
|
float reprojectionDepthMismatch = abs((lastFrameDepthViewPos + reprojectedViewPos.z) / max(lastFrameDepthViewPos, reprojectedViewPos.z));
|
|
133
|
-
bool hasReprojectionMismatch = reprojectionDepthMismatch > ${
|
|
110
|
+
bool hasReprojectionMismatch = reprojectionDepthMismatch > ${n.float(f)};
|
|
134
111
|
bool isScaledGlobalIllumination = scaleGlobalIllumination < 1.0;
|
|
135
112
|
bool isLowQualityEdgePixel = isScaledGlobalIllumination && isEdgeDepth(currentPixelDepth, uv);
|
|
136
113
|
bool resetColorHistory = false;
|
|
@@ -139,7 +116,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
139
116
|
if (hasReprojectionMismatch) {
|
|
140
117
|
if (isLowQualityEdgePixel) {
|
|
141
118
|
steps = 1;
|
|
142
|
-
occlusionBlendWeight = ${
|
|
119
|
+
occlusionBlendWeight = ${n.float(g)};
|
|
143
120
|
resetColorHistory = true;
|
|
144
121
|
} else {
|
|
145
122
|
steps = 6;
|
|
@@ -148,15 +125,15 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
148
125
|
}
|
|
149
126
|
} else {
|
|
150
127
|
steps = 1;
|
|
151
|
-
if (historyOcclusionBlendWeight > ${
|
|
152
|
-
occlusionBlendWeight = ${
|
|
153
|
-
colorBlendWeight = ${
|
|
154
|
-
} else if (historyOcclusionBlendWeight > ${
|
|
128
|
+
if (historyOcclusionBlendWeight > ${n.float(M)}) {
|
|
129
|
+
occlusionBlendWeight = ${n.float(y)};
|
|
130
|
+
colorBlendWeight = ${n.float(b)};
|
|
131
|
+
} else if (historyOcclusionBlendWeight > ${n.float(v)}) {
|
|
155
132
|
occlusionBlendWeight = historyOcclusionBlendWeight - 0.05;
|
|
156
|
-
colorBlendWeight = ${
|
|
133
|
+
colorBlendWeight = ${n.float(b)};
|
|
157
134
|
} else {
|
|
158
|
-
occlusionBlendWeight = isScaledGlobalIllumination ? ${
|
|
159
|
-
colorBlendWeight = isScaledGlobalIllumination ? ${
|
|
135
|
+
occlusionBlendWeight = isScaledGlobalIllumination ? ${n.float(g)} : idleOcclusionBlendWeight;
|
|
136
|
+
colorBlendWeight = isScaledGlobalIllumination ? ${n.float(x)} : idleColorBlendWeight;
|
|
160
137
|
}
|
|
161
138
|
}
|
|
162
139
|
|
|
@@ -186,21 +163,21 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
186
163
|
);
|
|
187
164
|
|
|
188
165
|
if (hit.z > 0.0) {
|
|
189
|
-
${
|
|
166
|
+
${s(u.hasColor,n`
|
|
190
167
|
// Emission and color bleed - Reproject the current receiver and sampled hit to estimate bounced color
|
|
191
168
|
vec3 receiverColor = texture(lastFrameColorTexture, reprojectedCoordinate.xy).rgb;
|
|
192
169
|
|
|
193
170
|
vec2 hitReprojectedCoordinate = reprojectionCoordinate(hit);
|
|
194
171
|
vec3 sourceColor = texture(lastFrameColorTexture, hitReprojectedCoordinate).rgb;
|
|
195
|
-
vec3
|
|
172
|
+
vec3 sourceColorLinear = linearizeGamma(sourceColor);
|
|
173
|
+
vec3 sourceEmission = ${s(u.hasEmission,"texture(lastFrameEmissionTexture, hitReprojectedCoordinate).xyz","vec3(0.0)")};
|
|
196
174
|
|
|
197
|
-
float colorBleedWeight = computeColorBleedWeight(receiverColor, sourceColor);
|
|
198
175
|
float emissionWeight = mix(
|
|
199
176
|
rayMarchMinReachEmissionWeight,
|
|
200
177
|
rayMarchMaxReachEmissionWeight,
|
|
201
178
|
(rayMarchScreenReach - rayMarchMinReach) / max(rayMarchMaxReach - rayMarchMinReach, 0.00001)
|
|
202
179
|
);
|
|
203
|
-
fragGlobalIllumination.rgb += (
|
|
180
|
+
fragGlobalIllumination.rgb += ((sourceColorLinear * colorBleedWeight) + sourceEmission * emissionWeight) * stepSize;
|
|
204
181
|
`)}
|
|
205
182
|
} else {
|
|
206
183
|
// Occlusion - heuristic modulating sky intensity based on angle to main light
|
|
@@ -214,17 +191,17 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
214
191
|
|
|
215
192
|
// Rendering trick add noise to reduce accumulation artifacts
|
|
216
193
|
float accumulationDither = occlusionBlendWeight < 1.0
|
|
217
|
-
? randomDirectionSample.b * ${
|
|
194
|
+
? randomDirectionSample.b * ${n.float(z)}
|
|
218
195
|
: 0.0;
|
|
219
196
|
|
|
220
|
-
${
|
|
197
|
+
${s(u.hasColor,n`
|
|
221
198
|
// Accumulate color
|
|
222
199
|
vec3 lastFrameColor = lastFrameGlobalIllumination.rgb;
|
|
223
|
-
float colorDitherScale = isScaledGlobalIllumination ? ${
|
|
200
|
+
float colorDitherScale = isScaledGlobalIllumination ? ${n.float(C)} : 1.0;
|
|
224
201
|
fragGlobalIllumination.rgb = resetColorHistory
|
|
225
202
|
? vec3(0.0)
|
|
226
203
|
: mix(lastFrameColor + accumulationDither * colorDitherScale, fragGlobalIllumination.rgb, colorBlendWeight);
|
|
227
|
-
`,
|
|
204
|
+
`,n`
|
|
228
205
|
fragGlobalIllumination.rgb = vec3(0.0);
|
|
229
206
|
`)}
|
|
230
207
|
|
|
@@ -232,4 +209,4 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
|
|
|
232
209
|
fragGlobalIllumination.a = mix(lastFrameGlobalIllumination.a + accumulationDither, fragGlobalIllumination.a, occlusionBlendWeight);
|
|
233
210
|
|
|
234
211
|
fragWeight = occlusionBlendWeight;
|
|
235
|
-
`)
|
|
212
|
+
`),B}const U=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationPassParameters:L,build:O,defaultColorBleedWeight:B,defaultRayMarchMaxReach:P,defaultRayMarchMaxReachEmissionWeight:E,defaultRayMarchMaxSteps:$,defaultRayMarchMinReach:G,defaultRayMarchMinReachEmissionWeight:T,defaultRayMarchWorldReach:I},Symbol.toStringTag,{value:"Module"}));export{U as G,L as a,O as b,P as c,B as d,E as e,$ as f,G as g,T as h,I as i};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ScreenSpacePass as l}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as o}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{GlobalIlluminationWeights as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/GlobalIlluminationWeights.glsl.js";import{CameraSpace as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{BooleanBindUniform as a}from"../views/3d/webgl-engine/core/shaderModules/BooleanBindUniform.js";import{Float2DrawUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Float2DrawUniform.js";import{FloatPassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as r}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DDrawUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DDrawUniform.js";import{Texture2DPassUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{
|
|
2
|
+
import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ScreenSpacePass as l}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as o}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{GlobalIlluminationWeights as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/GlobalIlluminationWeights.glsl.js";import{CameraSpace as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{BooleanBindUniform as a}from"../views/3d/webgl-engine/core/shaderModules/BooleanBindUniform.js";import{Float2DrawUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Float2DrawUniform.js";import{FloatPassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as r}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DDrawUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DDrawUniform.js";import{Texture2DPassUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ditherNoiseUnconditional as c}from"../views/3d/webgl-engine/shaders/ditherNoise.glsl.js";import{NoParameters as p}from"../views/webgl/NoParameters.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";const d=4;class f extends p{constructor(){super(...arguments),this.blurSize=e()}}function g(){const e=new h,p=e.fragment;e.include(l),e.include(t),e.include(i);const f=(d+3)/2,g=1/(2*f*f);p.include(o),p.include(c);const b=5e4;p.uniforms.add(new a("hasEmission",e=>e.hasEmission),new u("depthMap",e=>e.depthTexture),new u("normalMap",e=>e.normalTexture),new m("globalIlluminationTexture",e=>e.texture),new m("globalIlluminationWeightTexture",e=>e.weightTexture),new s("blurSize",e=>e.blurSize),new n("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new n("projScale",(e,l)=>{const o=l.camera.distance;return o>b?Math.max(0,e.projScale-(o-b)):e.projScale}));const S=.1,v=400,w=.03,W=.08,I=1.5;return p.code.add(r`
|
|
3
3
|
void accumulateBlurSample(
|
|
4
4
|
vec2 sampleUv,
|
|
5
5
|
float sampleOffset,
|
|
@@ -22,10 +22,10 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
|
|
|
22
22
|
float normalSimilarityWeight = globalIlluminationNormalSimilarityWeight(sampleNormal, centerNormal);
|
|
23
23
|
float depthNormalCorrection = globalIlluminationDepthNormalCorrection(sampleNormal);
|
|
24
24
|
vec3 emission = sampleGlobalIllumination.rgb;
|
|
25
|
-
float emissionSpatialWeightMultiplier = isScaledGlobalIllumination ? ${r.float(
|
|
25
|
+
float emissionSpatialWeightMultiplier = isScaledGlobalIllumination ? ${r.float(v)} : 1.0;
|
|
26
26
|
|
|
27
27
|
float emissionWeight = exp(
|
|
28
|
-
-sampleOffset * sampleOffset * ${r.float(
|
|
28
|
+
-sampleOffset * sampleOffset * ${r.float(g)} * ${r.float(S)} * emissionSpatialWeightMultiplier
|
|
29
29
|
- depthDelta * depthDelta * depthSharpness * depthNormalCorrection
|
|
30
30
|
);
|
|
31
31
|
emissionWeight *= normalSimilarityWeight;
|
|
@@ -36,22 +36,22 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
|
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
float occlusionSpatialKernelScale = centerOcclusionBlendWeight > ${r.float(
|
|
40
|
-
? ${r.float(
|
|
41
|
-
: ${r.float(
|
|
39
|
+
float occlusionSpatialKernelScale = centerOcclusionBlendWeight > ${r.float(w)}
|
|
40
|
+
? ${r.float(W)}
|
|
41
|
+
: ${r.float(I)};
|
|
42
42
|
float occlusionWeight = exp(-sampleOffset * sampleOffset * occlusionSpatialKernelScale - depthDelta * depthDelta * depthSharpness);
|
|
43
43
|
occlusionWeight *= normalSimilarityWeight;
|
|
44
44
|
occlusionWeightSum += occlusionWeight;
|
|
45
45
|
occlusionSum += occlusionWeight * sampleGlobalIllumination.a;
|
|
46
46
|
}
|
|
47
|
-
`),
|
|
47
|
+
`),p.main.add(r`
|
|
48
48
|
vec3 emissionSum = vec3(0.0);
|
|
49
49
|
float emissionWeightSum = 0.0;
|
|
50
50
|
|
|
51
51
|
vec4 centerGlobalIllumination = texture(globalIlluminationTexture, uv);
|
|
52
52
|
float centerOcclusionBlendWeight = texture(globalIlluminationWeightTexture, uv).r;
|
|
53
53
|
bool isScaledGlobalIllumination = scaleGlobalIllumination < 1.0;
|
|
54
|
-
bool shouldReuseCenterOcclusion = isScaledGlobalIllumination && centerOcclusionBlendWeight <= ${r.float(
|
|
54
|
+
bool shouldReuseCenterOcclusion = isScaledGlobalIllumination && centerOcclusionBlendWeight <= ${r.float(w)};
|
|
55
55
|
bool shouldSkipLowQualityBlur = !hasEmission && shouldReuseCenterOcclusion;
|
|
56
56
|
if (shouldSkipLowQualityBlur) {
|
|
57
57
|
fragColor = centerGlobalIllumination;
|
|
@@ -64,7 +64,7 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
|
|
|
64
64
|
float occlusionWeightSum = 0.0;
|
|
65
65
|
|
|
66
66
|
float depthSharpness = globalIlluminationDepthSharpness(projScale, centerDepth);
|
|
67
|
-
for (int sampleOffset = -${r.int(
|
|
67
|
+
for (int sampleOffset = -${r.int(d)}; sampleOffset <= ${r.int(d)}; ++sampleOffset) {
|
|
68
68
|
float sampleOffsetFloat = float(sampleOffset);
|
|
69
69
|
vec2 sampleUv = uv + sampleOffsetFloat * blurSize;
|
|
70
70
|
accumulateBlurSample(
|
|
@@ -82,7 +82,12 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
|
|
|
82
82
|
);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
vec3 blurredEmission = (emissionSum / emissionWeightSum).rgb;
|
|
86
85
|
float occlusion = shouldReuseCenterOcclusion ? centerGlobalIllumination.a : occlusionSum / occlusionWeightSum;
|
|
86
|
+
vec3 blurredEmission = (emissionSum / emissionWeightSum).rgb;
|
|
87
|
+
|
|
88
|
+
// heuristic dithering of the colors to remove banding, color shifts and wrong color accumulation
|
|
89
|
+
float dither = ditherNoise(vec4(blurredEmission, occlusion)) - 1./32768.0;
|
|
90
|
+
blurredEmission += isScaledGlobalIllumination ? 0.85 * dither : dither;
|
|
91
|
+
|
|
87
92
|
fragColor = vec4(blurredEmission, occlusion);
|
|
88
|
-
`),e}const
|
|
93
|
+
`),e}const b=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationBlurDrawParameters:f,build:g},Symbol.toStringTag,{value:"Module"}));export{b as G,f as a,g as b};
|
package/chunks/Terrain.glsl.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{translate as e}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{normalize as r,set as i}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{addLinearDepth as l}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js";import{addNearFar as t}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepthToWriteShadowMap.glsl.js";import{SliceDraw as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as s}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{NormalAttribute as d}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/NormalAttribute.glsl.js";import{TextureCoordinateAttribute as c}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js";import{VertexTangent as m}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/VertexTangent.glsl.js";import{OutputDepth as g}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{OutputHighlight as v}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{OutputHighlightOverlay as u}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlightOverlay.js";import{EvaluateAmbientOcclusion as p}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as w,addAmbientBoostFactor as f,addLightingGlobalFactor as h}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{addMainLightDirection as b,addMainLightIntensity as y}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{NormalUtils as C}from"../views/3d/webgl-engine/core/shaderLibrary/shading/NormalUtils.glsl.js";import{ReadShadowMapDrawFragment as O}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{OverlayTerrain as L}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{OverlayTerrainPassParameters as j,TerrainTexture as x}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/TerrainTexture.glsl.js";import{addProjViewLocalOrigin as T,addViewNormal as M,addCameraPosition as P}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float3BindUniform as S}from"../views/3d/webgl-engine/core/shaderModules/Float3BindUniform.js";import{glsl as z,If as D}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4DrawUniform as $}from"../views/3d/webgl-engine/core/shaderModules/Matrix4DrawUniform.js";import{Texture2DBindUniform as A}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{alphaCutoff as F}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{outputColorHighlightOLID as _}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as V}from"../views/webgl/ShaderBuilder.js";class N extends j{}function W(o){const a=new V,{attributes:j,vertex:N,fragment:W,varyings:H}=a;j.add("position","vec3"),a.include(d,o),a.include(c,o);const U=()=>{a.include(C,o),N.code.add(z`vec3 getNormal() {
|
|
2
|
+
import{translate as e}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{normalize as r,set as i}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{addLinearDepth as l}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js";import{addNearFar as t}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepthToWriteShadowMap.glsl.js";import{SliceDraw as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as s}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{NormalAttribute as d}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/NormalAttribute.glsl.js";import{TextureCoordinateAttribute as c}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js";import{VertexTangent as m}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/VertexTangent.glsl.js";import{OutputDepth as g}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{OutputHighlight as v}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{OutputHighlightOverlay as u}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlightOverlay.js";import{EvaluateAmbientOcclusion as p}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as w,addAmbientBoostFactor as f,addLightingGlobalFactor as h}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{addMainLightDirection as b,addMainLightIntensity as y}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{NormalUtils as C}from"../views/3d/webgl-engine/core/shaderLibrary/shading/NormalUtils.glsl.js";import{ReadShadowMapDrawFragment as O}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{OverlayTerrain as L}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{OverlayTerrainPassParameters as j,TerrainTexture as x}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/TerrainTexture.glsl.js";import{addProjViewLocalOrigin as T,addViewNormal as M,addCameraPosition as P}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float3BindUniform as S}from"../views/3d/webgl-engine/core/shaderModules/Float3BindUniform.js";import{glsl as z,If as D}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4DrawUniform as $}from"../views/3d/webgl-engine/core/shaderModules/Matrix4DrawUniform.js";import{Texture2DBindUniform as A}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{alphaCutoff as F}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{outputColorHighlightOLID as _}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as V}from"../views/webgl/ShaderBuilder.js";class N extends j{constructor(){super(...arguments),this.useStencil=!1}}function W(o){const a=new V,{attributes:j,vertex:N,fragment:W,varyings:H}=a;j.add("position","vec3"),a.include(d,o),a.include(c,o);const U=()=>{a.include(C,o),N.code.add(z`vec3 getNormal() {
|
|
3
3
|
float z = 1.0 - abs(normalCompressed.x) - abs(normalCompressed.y);
|
|
4
4
|
vec3 n = vec3(normalCompressed + vec2(normalCompressed.x >= 0.0 ? 1.0 : -1.0,
|
|
5
5
|
normalCompressed.y >= 0.0 ? 1.0 : -1.0) * min(z, 0.0), z);
|
package/config.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={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}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.
|
|
2
|
+
import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={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}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.105";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
|
package/core/ReactiveSet.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{trackAccess as t}from"./accessorSupport/tracking.js";import{SimpleObservable as
|
|
2
|
+
import{trackAccess as t}from"./accessorSupport/tracking.js";import{SimpleObservable as e}from"./accessorSupport/tracking/SimpleObservable.js";class s{constructor(t){this._observable=new e,this._notifyPending=!1,this._batchDepth=0,this._set=new Set(t)}get size(){return t(this._observable),this._set.size}add(t){const e=this._set.size;return this._set.add(t),this._set.size!==e&&this._notify(),this}batch(t){try{this._batchDepth++,t()}finally{this._batchDepth--,this._notifyPending&&0===this._batchDepth&&(this._notifyPending=!1,this._notify())}}clear(){this._set.size>0&&(this._set.clear(),this._notify())}delete(t){const e=this._set.delete(t);return e&&this._notify(),e}entries(){return t(this._observable),this._set.entries()}forEach(e,s){t(this._observable),this._set.forEach((t,i)=>e.call(s,t,i,this),s)}has(e){return t(this._observable),this._set.has(e)}keys(){return t(this._observable),this._set.keys()}values(){return t(this._observable),this._set.values()}union(e){return t(this._observable),this._set.union(e)}intersection(e){return t(this._observable),this._set.intersection(e)}difference(e){return t(this._observable),this._set.difference(e)}symmetricDifference(e){return t(this._observable),this._set.symmetricDifference(e)}isSubsetOf(e){return t(this._observable),this._set.isSubsetOf(e)}isSupersetOf(e){return t(this._observable),this._set.isSupersetOf(e)}isDisjointFrom(e){return t(this._observable),this._set.isDisjointFrom(e)}[Symbol.iterator](){return t(this._observable),this._set[Symbol.iterator]()}[Symbol.dispose](){this._observable.destroy()}get[Symbol.toStringTag](){return this._set[Symbol.toStringTag]}_notify(){this._batchDepth>0?this._notifyPending=!0:this._observable.notify()}}export{s as default};
|
package/kernel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.
|
|
2
|
+
import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.105",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
|
package/layers/VideoLayer.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../Color.js";import r from"../request.js";import{deprecatedProperty as o}from"../core/deprecate.js";import i from"../core/Error.js";import s from"../core/Logger.js";import{clamp as l}from"../core/mathUtils.js";import{MultiOriginJSONSupportMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as p,initial as m,whenOnce as y}from"../core/reactiveUtils.js";import{property as u,subclass as d}from"../core/accessorSupport/decorators.js";import{Integer as c}from"../core/accessorSupport/ensureType.js";import h from"../geometry/Extent.js";import f from"../geometry/Point.js";import v from"../geometry/Polygon.js";import g from"../geometry/Polyline.js";import S from"../geometry/SpatialReference.js";import b from"./Layer.js";import{ArcGISService as O}from"./mixins/ArcGISService.js";import{BlendLayer as j,effectProperty as T}from"./mixins/BlendLayer.js";import{CustomParametersMixin as w}from"./mixins/CustomParametersMixin.js";import{OperationalLayer as P}from"./mixins/OperationalLayer.js";import{PortalLayer as I}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as C}from"./mixins/ScaleRangeLayer.js";import{parse as L,cleanTitle as x,titleFromUrlAndName as U}from"./support/arcgisLayerUrl.js";import{opacity as E,id as M}from"./support/commonProperties.js";import{normalizeParsedUrlObject as N,urlProperty as _}from"./support/multiLayerServiceUtils.js";import k from"./support/PlaybackInfo.js";import{getVideoLayerCapabilities as J}from"./support/serviceCapabilitiesUtils.js";import F from"./support/TelemetryData.js";import V from"./support/TelemetryDisplay.js";import R from"./support/VideoFrame.js";import H from"./support/VideoTimeExtent.js";import G from"./video/VideoController.js";import{getFrameHorizonPoints as q,getGroundControlPoints as z,getTelemetryData as A,getServiceLayersInfo as D,getStyledTelemetrySymbol as Z,getLineOfSight as B,getSensorTrailPoints as Q,readVideoTimeExtent as W}from"./video/videoUtils.js";import $ from"../symbols/CIMSymbol.js";import K from"../symbols/PictureMarkerSymbol.js";import X from"../symbols/SimpleFillSymbol.js";import Y from"../symbols/SimpleLineSymbol.js";import ee from"../symbols/SimpleMarkerSymbol.js";import te from"../symbols/Symbol.js";import{write as re}from"../symbols/support/jsonUtils.js";import{addLayerUnsupportedError as oe}from"../webdoc/support/unsupportedErrors.js";import{reader as ie}from"../core/accessorSupport/decorators/reader.js";function se(e,t){return{ignoreOrigin:this.originIdOf(t)<3}}const le=new t([255,127,0]),ne=new t([0,0,0,.05]),ae=new t([0,0,0]),pe=new ee({angle:0,color:le,size:10,style:"cross"}),me=new X({color:ne,outline:new Y({color:le,width:2})}),ye=new Y({color:ae,style:"dash",width:1}),ue=new Y({color:le,width:1}),de=new ee({angle:0,color:le,outline:{color:[255,255,255],width:1.33},size:10,style:"circle"}),ce=new Y({color:le,width:1}),he={types:{base:te,key:"type",typeMap:{"simple-marker":ee,"picture-marker":K,cim:$}},json:{name:"drawingInfo.sensorSymbol",write:{writer:re,overridePolicy:se}}};function fe(e,t){return{type:t,json:{name:e,write:{overridePolicy:se}}}}let ve=class extends(j(C(O(P(I(n(w(b)))))))){constructor(e){super(e),this._trailPoints=[],this.cameraInfo=null,this.capabilities=null,this.codecs=null,this.connectionInfo=null,this.controller=new G,this.copyright=null,this.coverage=null,this.created=null,this.customParameters=null,this.description=null,this.elevationSource=null,this.frame=null,this.frameCenterSymbol=pe.clone(),this.frameCount=null,this.frameEffect=null,this.frameOpacity=1,this.frameOutlineSymbol=me.clone(),this.fullExtent=null,this.fullTimeExtent=null,this.initialExtent=null,this.layerId=null,this.operationalLayerType="ArcGISVideoLayer",this.playbackInfo=null,this.posterUrl=null,this.qualities=null,this.sensorSymbolOrientation={source:"platformHeading",symbolOffset:0},this.sensorPathSymbol=ye.clone(),this.sensorSymbol=de.clone(),this.sensorSightLineSymbol=ue.clone(),this.sensorTrailSymbol=ce.clone(),this.serviceItemId=null,this.sourceJSON=null,this.sourceQuality=null,this.sourceType=null,this.spatialReference=S.WGS84,this.start=0,this.telemetryDisplay=new V,this.sublayerTitleMode="item-title",this.type="video",this.url=null,this.version=null,this.videoLayersInfo=null}initialize(){this.addHandles([p(()=>this.metadata,()=>{this.notifyChange("telemetry"),this.notifyChange("groundControlPoints"),this.notifyChange("frameHorizonPoints")}),p(()=>this.telemetry?.sensorLocation,e=>{this._setSensorPath(e),this._setSensorTrail(e)},m)]),y(()=>this.loaded&&"can-play"===this.state&&this.duration>0).then(()=>{this.start>=0&&this.start<=this.duration&&this.setCurrentTime(this.start)})}destroy(){this.removeAllHandles(),this.controller&&this.controller.destroy()}load(e){const t=null!=e?e.signal:null,r=this.loadFromPortal({supportedTypes:["Video Service"],supportsData:!0},e).catch(a).then(()=>this._fetchService(t)).then(()=>this._fetchCoverage(t));return this.addResolvingPromise(r),Promise.resolve(this)}get autoplay(){return this.controller?.autoplay??!1}set autoplay(e){this.controller.autoplay=e}get buffered(){return this.controller.buffered}readCapabilitiesFromService(e,t){return J(t)}readConnectionInfo(e,t){const r=Object.values(t.connectionUrl);return r?.length&&(this.controller.startMode="ondemand"===t.serviceType?"auto":"metadata",this.controller.playerUrl=r[0]),t.connectionUrl}get currentTime(){return this.controller.currentTime}get duration(){return this.controller.duration}get ended(){return this.controller.ended}get frameHorizonPoints(){return q(this.metadata)}get groundControlPoints(){return z(this.metadata)}get isLive(){return this.controller?.isLive??!1}get livestreamStatus(){return this.controller?.livestreamStatus}get loop(){return this.controller.loop}set loop(e){this.controller.loop=e}get metadata(){return this.controller?.currentMetadata}get mimeType(){return this.controller?.mimeType}get muted(){return this.controller.muted}set muted(e){this.controller.muted=e}get parsedUrl(){return N(this)}get playbackRate(){return this.controller.rate}set playbackRate(e){this.controller.rate=e}get playerUrl(){return this.controller.playerUrl}get playing(){return this.controller.playing}get started(){return this.controller?.started??!1}get state(){return this.controller.state}get telemetry(){return A(this.metadata)}readTitleFromService(e,t){const{url:r}=this,o=t.name||(r?L(r)?.title:void 0);switch(this.sublayerTitleMode){case"item-title":if(r)return U(r,o);break;case"item-title-and-service-name":{const e=this.portalItem?.title;if(e&&e!==o)return x(e)+(o?" - "+x(o):"");break}}return o?x(o):void 0}readTitleFromPortalItem(e){return"item-title"===this.sublayerTitleMode?e:void 0}get videoElement(){return this.controller?.element}get videoHeight(){return this.controller?.videoHeight}readLayerInfosFromService(e,t){return D(t)}get videoTimeExtent(){return o(s.getLogger(this),"videoTimeExtent",{replacement:"fullTimeExtent",version:"4.33",warnOnce:!0}),this.fullTimeExtent}get videoWidth(){return this.controller?.videoWidth}get volume(){return this.controller?.volume??0}set volume(e){this.controller.volume=e}get waiting(){return this.controller.waiting}play(){this.controller.play()}pause(){this.controller.pause()}reset(){this._trailPoints=[],this.controller.reset()}setCurrentTime(e){if(this.duration<0)return;const t=l(e,0,this.duration);this.controller.setCurrentTime(t)}toGround(e,t){return this.controller?.sensorModel?.metadataSupportsTransforms?this.controller.sensorModel.transformImageToGeo(e,t):null}toVideo(e){if(!this.controller?.sensorModel?.metadataSupportsTransforms)return null;const t=this.controller.sensorModel.transformGeoToImage(e.x,e.y,e.z);return{x:t[0],y:t[1]}}updateTelemetryColor(e,r){if(!e)return;const o=new t(e);r&&!r?.frameCenter||(this.frameCenterSymbol=Z(this.frameCenterSymbol,o)??pe),r&&!r?.frameOutline||(this.frameOutlineSymbol=Z(this.frameOutlineSymbol,o,ne)??me),r&&!r?.lineOfSight||(this.sensorSightLineSymbol=Z(this.sensorSightLineSymbol,o)??ue),r&&!r?.sensorLocation||(this.sensorSymbol=Z(this.sensorSymbol,o)??de),r&&!r?.sensorPath||(this.sensorPathSymbol=Z(this.sensorPathSymbol,o)??ye),r&&!r?.sensorTrail||(this.sensorTrailSymbol=Z(this.sensorTrailSymbol,o)??ce)}write(e,t){return null==this.layerId?(oe(t,this,"the ArcGIS server version must be greater than 11.2."),null):super.write(e,t)}async _fetchCoverage(e){if(!this.capabilities?.operations?.supportsCoverageQuery||"number"!=typeof this.layerId)return;const t=`${this.parsedUrl.path}/coverage`,{data:o}=await r(t,{query:{f:"json",...this.customParameters},signal:e}),{area:i=null,sensorPoints:s=null,telemetry:l=null}=o,n={area:null,path:null};if(i?.rings?.length&&(n.area=v.fromJSON(i)),s?.points?.length){const e=s.points;n.path=new g({hasM:!0,hasZ:!0,paths:[e]})}if(l?.start){const{frameCenter:e=null,frameOutline:t=null,sensor:r=null}=l?.start||{};if(t&&(this.telemetry.frameOutline=v.fromJSON(t)),r&&(this.telemetry.sensorLocation=f.fromJSON(r)),e&&(this.telemetry.frameCenter=f.fromJSON(e)),r&&e){const{sensorLocation:e,frameCenter:t}=this.telemetry;this.telemetry.lineOfSight=B(e,t)}}this._set("coverage",n)}async _fetchService(e){if(this.sourceJSON)return void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});const{data:t,ssl:o}=await r(this.url,{query:{f:"json",...this.parsedUrl.query,...this.customParameters},signal:e});if(o&&(this.url=this.url.replace(/^http:/i,"https:")),!t?.currentVersion)return t.currentVersion="11.2",this.sourceJSON=t,void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});if(this.layerId??=t.layers?.[0]?.id??null,null==this.layerId)throw new i("arcgis-layers:url-mismatch","The url is not a valid arcgis resource");const{data:s}=await r(this.parsedUrl.path,{query:{f:"json",...this.customParameters},signal:e});this.sourceJSON={...t,...s},this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl})}_setSensorTrail(e){if(!e)return;const t=Q(e,this._trailPoints);this._trailPoints=[...t];const r=this._trailPoints.map(e=>e.toArray()),o=new g({hasZ:e.hasZ,paths:[r]});this.telemetry.sensorTrail=o.clone()}_setSensorPath(e){if(!e||"polyline"!==this.coverage?.path?.type)return;const t=this.telemetry?.sensorPath??this.coverage.path.clone(),{spatialReference:r,hasZ:o,hasM:i,paths:s}=t;if(!i)return;const l=t.hasZ?3:2,n=1e3*this.currentTime,a=[];for(const p of s){let e=0;const t=p.length,r=n>500?n+1500:n;for(;e<t&&p[e][l]<=r;)e++;e<p.length&&a.push(...p.slice(e))}this.telemetry.sensorPath=new g({hasZ:o,hasM:i,paths:[a],spatialReference:r})}};e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"autoplay",null),e([u({readOnly:!0})],ve.prototype,"buffered",null),e([u({readOnly:!0})],ve.prototype,"cameraInfo",void 0),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"capabilities",void 0),e([ie("service","capabilities",["supportsAppend","supportsCoverageQuery","supportsExportClip","supportsExportFrameset","supportsMensuration","supportsPreviews","supportsUpdate"])],ve.prototype,"readCapabilitiesFromService",null),e([u({readOnly:!0})],ve.prototype,"codecs",void 0),e([u({readOnly:!0})],ve.prototype,"connectionInfo",void 0),e([ie("connectionInfo",["connectionUrl"])],ve.prototype,"readConnectionInfo",null),e([u()],ve.prototype,"controller",void 0),e([u({type:String})],ve.prototype,"copyright",void 0),e([u({readOnly:!0})],ve.prototype,"coverage",void 0),e([u({readOnly:!0,type:Date})],ve.prototype,"created",void 0),e([u({type:Number})],ve.prototype,"currentTime",null),e([u({json:{write:!1}})],ve.prototype,"customParameters",void 0),e([u({type:String})],ve.prototype,"description",void 0),e([u({type:Number})],ve.prototype,"duration",null),e([u({readOnly:!0})],ve.prototype,"elevationSource",void 0),e([u({type:Boolean})],ve.prototype,"ended",null),e([u({type:R})],ve.prototype,"frame",void 0),e([u(fe("drawingInfo.frameCenterSymbol",ee))],ve.prototype,"frameCenterSymbol",void 0),e([u({readOnly:!0,type:c})],ve.prototype,"frameCount",void 0),e([u(T)],ve.prototype,"frameEffect",void 0),e([u(E)],ve.prototype,"frameOpacity",void 0),e([u(fe("drawingInfo.frameOutlineSymbol",X))],ve.prototype,"frameOutlineSymbol",void 0),e([u({type:h})],ve.prototype,"fullExtent",void 0),e([u({readOnly:!0})],ve.prototype,"frameHorizonPoints",null),e([u({readOnly:!0,json:{read:{reader:W,source:"time"}},type:H})],ve.prototype,"fullTimeExtent",void 0),e([u({readOnly:!0})],ve.prototype,"groundControlPoints",null),e([u(M)],ve.prototype,"id",void 0),e([u({type:h})],ve.prototype,"initialExtent",void 0),e([u({readOnly:!0})],ve.prototype,"isLive",null),e([u({type:c,json:{read:!1,origins:{service:{read:{source:"id"}}}}})],ve.prototype,"layerId",void 0),e([u({readOnly:!0})],ve.prototype,"livestreamStatus",null),e([u({type:Boolean})],ve.prototype,"loop",null),e([u({readOnly:!0})],ve.prototype,"metadata",null),e([u({readOnly:!0})],ve.prototype,"mimeType",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"muted",null),e([u({type:["ArcGISVideoLayer"]})],ve.prototype,"operationalLayerType",void 0),e([u({readOnly:!0})],ve.prototype,"parsedUrl",null),e([u({type:k})],ve.prototype,"playbackInfo",void 0),e([u({type:Number})],ve.prototype,"playbackRate",null),e([u({readOnly:!0,type:String})],ve.prototype,"playerUrl",null),e([u({readOnly:!0})],ve.prototype,"playing",null),e([u({readOnly:!0,json:{read:{source:"poster"}}})],ve.prototype,"posterUrl",void 0),e([u({readOnly:!0})],ve.prototype,"qualities",void 0),e([u()],ve.prototype,"sensorSymbolOrientation",void 0),e([u(fe("drawingInfo.sensorPathSymbol",Y))],ve.prototype,"sensorPathSymbol",void 0),e([u(he)],ve.prototype,"sensorSymbol",void 0),e([u(fe("drawingInfo.sensorSightLineSymbol",Y))],ve.prototype,"sensorSightLineSymbol",void 0),e([u(fe("drawingInfo.sensorTrailSymbol",Y))],ve.prototype,"sensorTrailSymbol",void 0),e([u({readOnly:!0})],ve.prototype,"serviceItemId",void 0),e([u()],ve.prototype,"sourceJSON",void 0),e([u({readOnly:!0})],ve.prototype,"sourceQuality",void 0),e([u({readOnly:!0,json:{name:"serviceType"}})],ve.prototype,"sourceType",void 0),e([u({type:S})],ve.prototype,"spatialReference",void 0),e([u({json:{write:!0}})],ve.prototype,"start",void 0),e([u({readOnly:!0})],ve.prototype,"started",null),e([u({readOnly:!0,type:String})],ve.prototype,"state",null),e([u({readOnly:!0,type:F})],ve.prototype,"telemetry",null),e([u({type:V,nonNullable:!0,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"telemetryDisplay",void 0),e([ie("service","title",["name"])],ve.prototype,"readTitleFromService",null),e([ie("portal-item","title")],ve.prototype,"readTitleFromPortalItem",null),e([u({type:String})],ve.prototype,"sublayerTitleMode",void 0),e([u({readOnly:!0})],ve.prototype,"type",void 0),e([u(_())],ve.prototype,"url",void 0),e([u({readOnly:!0,type:Number,json:{read:{source:"currentVersion"}}})],ve.prototype,"version",void 0),e([u({readOnly:!0})],ve.prototype,"videoElement",null),e([u({readOnly:!0})],ve.prototype,"videoHeight",null),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"videoLayersInfo",void 0),e([ie("service","videoLayersInfo",["id","name","poster","serviceType","type"])],ve.prototype,"readLayerInfosFromService",null),e([u({type:H,readOnly:!0})],ve.prototype,"videoTimeExtent",null),e([u({readOnly:!0})],ve.prototype,"videoWidth",null),e([u()],ve.prototype,"volume",null),e([u({readOnly:!0})],ve.prototype,"waiting",null),ve=e([d("esri.layers.VideoLayer")],ve);const ge=ve;export{ge as default};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../Color.js";import r from"../request.js";import{deprecatedProperty as o}from"../core/deprecate.js";import i from"../core/Error.js";import s from"../core/Logger.js";import{clamp as l}from"../core/mathUtils.js";import{MultiOriginJSONSupportMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as p,initial as m,whenOnce as y}from"../core/reactiveUtils.js";import{property as u,subclass as d}from"../core/accessorSupport/decorators.js";import{Integer as c}from"../core/accessorSupport/ensureType.js";import h from"../geometry/Extent.js";import f from"../geometry/Point.js";import v from"../geometry/Polygon.js";import g from"../geometry/Polyline.js";import S from"../geometry/SpatialReference.js";import b from"./Layer.js";import{ArcGISService as O}from"./mixins/ArcGISService.js";import{BlendLayer as j,effectProperty as T}from"./mixins/BlendLayer.js";import{CustomParametersMixin as w}from"./mixins/CustomParametersMixin.js";import{OperationalLayer as P}from"./mixins/OperationalLayer.js";import{PortalLayer as I}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as C}from"./mixins/ScaleRangeLayer.js";import{parse as L,cleanTitle as x,titleFromUrlAndName as U}from"./support/arcgisLayerUrl.js";import{opacity as E,id as M}from"./support/commonProperties.js";import{normalizeParsedUrlObject as N,urlProperty as _}from"./support/multiLayerServiceUtils.js";import k from"./support/PlaybackInfo.js";import{getVideoLayerCapabilities as J}from"./support/serviceCapabilitiesUtils.js";import F from"./support/TelemetryData.js";import V from"./support/TelemetryDisplay.js";import R from"./support/VideoFrame.js";import H from"./support/VideoTimeExtent.js";import G from"./video/VideoController.js";import{getFrameHorizonPoints as q,getGroundControlPoints as z,getTelemetryData as A,getServiceLayersInfo as D,getStyledTelemetrySymbol as Z,getLineOfSight as B,getSensorTrailPoints as Q,readVideoTimeExtent as W}from"./video/videoUtils.js";import $ from"../symbols/CIMSymbol.js";import K from"../symbols/PictureMarkerSymbol.js";import X from"../symbols/SimpleFillSymbol.js";import Y from"../symbols/SimpleLineSymbol.js";import ee from"../symbols/SimpleMarkerSymbol.js";import te from"../symbols/Symbol.js";import{write as re}from"../symbols/support/jsonUtils.js";import{addLayerUnsupportedError as oe}from"../webdoc/support/unsupportedErrors.js";import{reader as ie}from"../core/accessorSupport/decorators/reader.js";function se(e,t){return{ignoreOrigin:this.originIdOf(t)<3}}const le=new t([255,127,0]),ne=new t([0,0,0,.05]),ae=new t([0,0,0]),pe=new ee({angle:0,color:le,size:10,style:"cross"}),me=new X({color:ne,outline:new Y({color:le,width:2})}),ye=new Y({color:ae,style:"dash",width:1}),ue=new Y({color:le,width:1}),de=new ee({angle:0,color:le,outline:{color:[255,255,255],width:1.33},size:10,style:"circle"}),ce=new Y({color:le,width:1}),he={types:{base:te,key:"type",typeMap:{"simple-marker":ee,"picture-marker":K,cim:$}},json:{name:"drawingInfo.sensorSymbol",write:{writer:re,overridePolicy:se}}};function fe(e,t){return{type:t,json:{name:e,write:{overridePolicy:se}}}}let ve=class extends(j(C(O(P(I(n(w(b)))))))){constructor(e){super(e),this._trailPoints=[],this.cameraInfo=null,this.capabilities=null,this.codecs=null,this.connectionInfo=null,this.controller=new G,this.copyright=null,this.coverage=null,this.created=null,this.customParameters=null,this.description=null,this.elevationSource=null,this.frame=null,this.frameCenterSymbol=pe.clone(),this.frameCount=null,this.frameEffect=null,this.frameOpacity=1,this.frameOutlineSymbol=me.clone(),this.fullExtent=null,this.fullTimeExtent=null,this.initialExtent=null,this.layerId=null,this.operationalLayerType="ArcGISVideoLayer",this.playbackInfo=null,this.posterUrl=null,this.qualities=null,this.sensorSymbolOrientation={source:"platformHeading",symbolOffset:0},this.sensorPathSymbol=ye.clone(),this.sensorSymbol=de.clone(),this.sensorSightLineSymbol=ue.clone(),this.sensorTrailSymbol=ce.clone(),this.serviceItemId=null,this.sourceJSON=null,this.sourceQuality=null,this.sourceType=null,this.spatialReference=S.WGS84,this.start=0,this.telemetryDisplay=new V,this.sublayerTitleMode="item-title",this.type="video",this.url=null,this.version=null,this.videoLayersInfo=null}initialize(){this.addHandles([p(()=>this.metadata,()=>{this.notifyChange("telemetry"),this.notifyChange("groundControlPoints"),this.notifyChange("frameHorizonPoints")}),p(()=>this.telemetry?.sensorLocation,e=>{this._setSensorPath(e),this._setSensorTrail(e)},m)]),y(()=>this.loaded&&"can-play"===this.state&&this.duration>0).then(()=>{this.start>=0&&this.start<=this.duration&&this.setCurrentTime(this.start)})}destroy(){this.removeAllHandles(),this.controller&&this.controller.destroy()}load(e){const t=null!=e?e.signal:null,r=this.loadFromPortal({supportedTypes:["Video Service"],supportsData:!0},e).catch(a).then(()=>this._fetchService(t)).then(()=>this._fetchCoverage(t));return this.addResolvingPromise(r),Promise.resolve(this)}get autoplay(){return this.controller?.autoplay??!1}set autoplay(e){this.controller.autoplay=e}get buffered(){return this.controller.buffered}readCapabilitiesFromService(e,t){return J(t)}readConnectionInfo(e,t){const r=Object.values(t.connectionUrl);return r?.length&&(this.controller.startMode="ondemand"===t.serviceType?"auto":"metadata",this.controller.playerUrl=r[0]),t.connectionUrl}get currentTime(){return this.controller.currentTime}get duration(){return this.controller.duration}get ended(){return this.controller.ended}get frameHorizonPoints(){return q(this.metadata)}get groundControlPoints(){return z(this.metadata)}get isLive(){return this.controller?.isLive??!1}get livestreamStatus(){return this.controller?.livestreamStatus}get loop(){return this.controller.loop}set loop(e){this.controller.loop=e}get metadata(){return this.controller?.currentMetadata}get mimeType(){return this.controller?.mimeType}get muted(){return this.controller.muted}set muted(e){this.controller.muted=e}get parsedUrl(){return N(this)}get playbackRate(){return this.controller.rate}set playbackRate(e){this.controller.rate=e}get playerUrl(){return this.controller.playerUrl}get playing(){return this.controller.playing}get started(){return this.controller?.started??!1}get state(){return this.controller.state}get telemetry(){return A(this.metadata)}readTitleFromService(e,t){const{url:r}=this,o=t.name||(r?L(r)?.title:void 0);switch(this.sublayerTitleMode){case"item-title":if(r)return U(r,o);break;case"item-title-and-service-name":{const e=this.portalItem?.title;if(e&&e!==o)return x(e)+(o?" - "+x(o):"");break}}return o?x(o):void 0}readTitleFromPortalItem(e){return"item-title"===this.sublayerTitleMode?e:void 0}get videoElement(){return this.controller?.element}get videoHeight(){return this.controller?.videoHeight}readLayerInfosFromService(e,t){return D(t)}get videoTimeExtent(){return o(s.getLogger(this),"videoTimeExtent",{replacement:"fullTimeExtent",version:"4.33",warnOnce:!0}),this.fullTimeExtent}get videoWidth(){return this.controller?.videoWidth}get volume(){return this.controller?.volume??0}set volume(e){this.controller.volume=e}get waiting(){return this.controller.waiting}play(){this.controller.play()}pause(){this.controller.pause()}reset(){this._trailPoints=[],this.controller.reset()}setCurrentTime(e){if(this.duration<0)return;const t=l(e,0,this.duration);this.controller.setCurrentTime(t)}toGround(e,t){return this.controller?.sensorModel?.metadataSupportsTransforms?this.controller.sensorModel.transformImageToGeo(e,t):null}toVideo(e){if(!this.controller?.sensorModel?.metadataSupportsTransforms)return null;const t=this.controller.sensorModel.transformGeoToImage(e.x,e.y,e.z);return{x:t[0],y:t[1]}}updateTelemetryColor(e,r){if(!e)return;const o=new t(e);r&&!r?.frameCenter||(this.frameCenterSymbol=Z(this.frameCenterSymbol,o)??pe),r&&!r?.frameOutline||(this.frameOutlineSymbol=Z(this.frameOutlineSymbol,o,ne)??me),r&&!r?.lineOfSight||(this.sensorSightLineSymbol=Z(this.sensorSightLineSymbol,o)??ue),r&&!r?.sensorLocation||(this.sensorSymbol=Z(this.sensorSymbol,o)??de),r&&!r?.sensorPath||(this.sensorPathSymbol=Z(this.sensorPathSymbol,o)??ye),r&&!r?.sensorTrail||(this.sensorTrailSymbol=Z(this.sensorTrailSymbol,o)??ce)}write(e,t){return null==this.layerId?(oe(t,this,"the ArcGIS server version must be greater than 11.2."),null):super.write(e,t)}async _fetchCoverage(e){if(!this.capabilities?.operations?.supportsCoverageQuery||"number"!=typeof this.layerId)return;const t=`${this.parsedUrl.path}/coverage`,{data:o}=await r(t,{query:{f:"json",...this.customParameters},signal:e}),{area:i=null,sensorPoints:s=null,telemetry:l=null}=o,n={area:null,path:null};if(i?.rings?.length&&(n.area=v.fromJSON(i)),s?.points?.length){const e=s.points;n.path=new g({hasM:!0,hasZ:!0,paths:[e]})}if(l?.start){const{frameCenter:e=null,frameOutline:t=null,sensor:r=null}=l?.start||{};if(t&&(this.telemetry.frameOutline=v.fromJSON(t)),r&&(this.telemetry.sensorLocation=f.fromJSON(r)),e&&(this.telemetry.frameCenter=f.fromJSON(e)),r&&e){const{sensorLocation:e,frameCenter:t}=this.telemetry;this.telemetry.lineOfSight=B(e,t)}}this._set("coverage",n)}async _fetchService(e){if(this.sourceJSON)return void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});const{data:t,ssl:o}=await r(this.url,{query:{f:"json",...this.parsedUrl.query,...this.customParameters},signal:e});if(o&&(this.url=this.url.replace(/^http:/i,"https:")),!t?.currentVersion)return t.currentVersion="11.2",this.sourceJSON=t,void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});if(this.layerId??=t.layers?.[0]?.id??null,null==this.layerId)throw new i("arcgis-layers:url-mismatch","The url is not a valid arcgis resource");const{data:s}=await r(this.parsedUrl.path,{query:{f:"json",...this.customParameters},signal:e});this.sourceJSON={...t,...s},this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl})}_setSensorTrail(e){if(!e)return;const t=Q(e,this._trailPoints);this._trailPoints=[...t];const r=this._trailPoints.map(e=>e.toArray()),o=new g({hasZ:e.hasZ,paths:[r]});this.telemetry.sensorTrail=o.clone()}_setSensorPath(e){if(!e||"polyline"!==this.coverage?.path?.type)return;const t=this.telemetry?.sensorPath??this.coverage.path.clone(),{spatialReference:r,hasZ:o,hasM:i,paths:s}=t;if(!i)return;const l=t.hasZ?3:2,n=1e3*this.currentTime,a=[];for(const p of s){let e=0;const t=p.length,r=n>500?n+1500:n;for(;e<t&&p[e][l]<=r;)e++;e<p.length&&a.push(...p.slice(e))}this.telemetry.sensorPath=new g({hasZ:o,hasM:i,paths:[a],spatialReference:r})}};e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"autoplay",null),e([u({readOnly:!0})],ve.prototype,"buffered",null),e([u({readOnly:!0})],ve.prototype,"cameraInfo",void 0),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"capabilities",void 0),e([ie("service","capabilities",["supportsAppend","supportsCoverageQuery","supportsExportClip","supportsExportFrameset","supportsMensuration","supportsPreviews","supportsUpdate"])],ve.prototype,"readCapabilitiesFromService",null),e([u({readOnly:!0})],ve.prototype,"codecs",void 0),e([u({readOnly:!0})],ve.prototype,"connectionInfo",void 0),e([ie("connectionInfo",["connectionUrl"])],ve.prototype,"readConnectionInfo",null),e([u()],ve.prototype,"controller",void 0),e([u({type:String})],ve.prototype,"copyright",void 0),e([u({readOnly:!0})],ve.prototype,"coverage",void 0),e([u({readOnly:!0,type:Date})],ve.prototype,"created",void 0),e([u({type:Number})],ve.prototype,"currentTime",null),e([u({json:{write:!1}})],ve.prototype,"customParameters",void 0),e([u({type:String})],ve.prototype,"description",void 0),e([u({type:Number})],ve.prototype,"duration",null),e([u({readOnly:!0})],ve.prototype,"elevationSource",void 0),e([u({type:Boolean})],ve.prototype,"ended",null),e([u({type:R})],ve.prototype,"frame",void 0),e([u(fe("drawingInfo.frameCenterSymbol",ee))],ve.prototype,"frameCenterSymbol",void 0),e([u({readOnly:!0,type:c})],ve.prototype,"frameCount",void 0),e([u(T)],ve.prototype,"frameEffect",void 0),e([u(E)],ve.prototype,"frameOpacity",void 0),e([u(fe("drawingInfo.frameOutlineSymbol",X))],ve.prototype,"frameOutlineSymbol",void 0),e([u({type:h})],ve.prototype,"fullExtent",void 0),e([u({readOnly:!0})],ve.prototype,"frameHorizonPoints",null),e([u({readOnly:!0,json:{read:{reader:W,source:"time"}},type:H})],ve.prototype,"fullTimeExtent",void 0),e([u({readOnly:!0})],ve.prototype,"groundControlPoints",null),e([u(M)],ve.prototype,"id",void 0),e([u({type:h})],ve.prototype,"initialExtent",void 0),e([u({readOnly:!0})],ve.prototype,"isLive",null),e([u({type:c,json:{read:!1,origins:{service:{read:{source:"id"}}}}})],ve.prototype,"layerId",void 0),e([u({readOnly:!0})],ve.prototype,"livestreamStatus",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"loop",null),e([u({readOnly:!0})],ve.prototype,"metadata",null),e([u({readOnly:!0})],ve.prototype,"mimeType",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"muted",null),e([u({type:["ArcGISVideoLayer"]})],ve.prototype,"operationalLayerType",void 0),e([u({readOnly:!0})],ve.prototype,"parsedUrl",null),e([u({type:k})],ve.prototype,"playbackInfo",void 0),e([u({type:Number,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"playbackRate",null),e([u({readOnly:!0,type:String})],ve.prototype,"playerUrl",null),e([u({readOnly:!0})],ve.prototype,"playing",null),e([u({readOnly:!0,json:{read:{source:"poster"}}})],ve.prototype,"posterUrl",void 0),e([u({readOnly:!0})],ve.prototype,"qualities",void 0),e([u()],ve.prototype,"sensorSymbolOrientation",void 0),e([u(fe("drawingInfo.sensorPathSymbol",Y))],ve.prototype,"sensorPathSymbol",void 0),e([u(he)],ve.prototype,"sensorSymbol",void 0),e([u(fe("drawingInfo.sensorSightLineSymbol",Y))],ve.prototype,"sensorSightLineSymbol",void 0),e([u(fe("drawingInfo.sensorTrailSymbol",Y))],ve.prototype,"sensorTrailSymbol",void 0),e([u({readOnly:!0})],ve.prototype,"serviceItemId",void 0),e([u()],ve.prototype,"sourceJSON",void 0),e([u({readOnly:!0})],ve.prototype,"sourceQuality",void 0),e([u({readOnly:!0,json:{name:"serviceType"}})],ve.prototype,"sourceType",void 0),e([u({type:S})],ve.prototype,"spatialReference",void 0),e([u({json:{write:!0}})],ve.prototype,"start",void 0),e([u({readOnly:!0})],ve.prototype,"started",null),e([u({readOnly:!0,type:String})],ve.prototype,"state",null),e([u({readOnly:!0,type:F})],ve.prototype,"telemetry",null),e([u({type:V,nonNullable:!0,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"telemetryDisplay",void 0),e([ie("service","title",["name"])],ve.prototype,"readTitleFromService",null),e([ie("portal-item","title")],ve.prototype,"readTitleFromPortalItem",null),e([u({type:String})],ve.prototype,"sublayerTitleMode",void 0),e([u({readOnly:!0})],ve.prototype,"type",void 0),e([u(_())],ve.prototype,"url",void 0),e([u({readOnly:!0,type:Number,json:{read:{source:"currentVersion"}}})],ve.prototype,"version",void 0),e([u({readOnly:!0})],ve.prototype,"videoElement",null),e([u({readOnly:!0})],ve.prototype,"videoHeight",null),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"videoLayersInfo",void 0),e([ie("service","videoLayersInfo",["id","name","poster","serviceType","type"])],ve.prototype,"readLayerInfosFromService",null),e([u({type:H,readOnly:!0})],ve.prototype,"videoTimeExtent",null),e([u({readOnly:!0})],ve.prototype,"videoWidth",null),e([u()],ve.prototype,"volume",null),e([u({readOnly:!0})],ve.prototype,"waiting",null),ve=e([d("esri.layers.VideoLayer")],ve);const ge=ve;export{ge as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import i from"../../core/Error.js";import n from"../../core/Logger.js";import{getOrCreateMapValue as o}from"../../core/MapUtils.js";import{createAbortError as s}from"../../core/promiseUtils.js";import{parseWhereClause as a}from"../../core/sql.js";import{property as r,subclass as p}from"../../core/accessorSupport/decorators.js";import d from"../../geometry/Extent.js";import m from"../../geometry/Polygon.js";import{initializeProjection as l,project as h}from"../../geometry/projectionUtils.js";import{wgs84 as c}from"../../geometry/support/spatialReferenceUtils.js";import{systemOidFieldName as y,systemOriginIdFieldName as u,systemDestinationIdFieldName as f,systemIsSpatialFieldName as g,systemLayoutGeometryFieldName as b}from"./constants.js";import{recursiveParseSqlToCypher as T,addAdditionalClausesToCypher as w}from"./cypherUtils.js";import I from"./SessionMemoryStorage.js";import{utilsExtentToInBoundsRings as M}from"./supportUtils.js";import{executeQueryStreaming as D}from"../../rest/knowledgeGraphService.js";import E from"../../rest/knowledgeGraph/GraphQueryStreaming.js";import N from"../../rest/support/Query.js";let k=class extends t{constructor(e){super(e),this._processingCacheUpdatesLookup=new Map,this.knowledgeGraph=null,this.inclusionModeDefinition={generateAllSublayers:!0,namedTypeDefinitions:new Map},this.entityTypeNames=new Set,this.relationshipTypeNames=new Set,this.geographicLookup=new Map,this.sublayerCaches=new Map,this.nodeConnectionsLookup=new Map,this.relationshipConnectionsLookup=new Map,this.memberIdTypeLookup=new Map;const t=new Map;e.knowledgeGraph.dataModel.entityTypes?.forEach(i=>{i.name&&(t.set(i.name,"entity"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.entityTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.knowledgeGraph.dataModel.relationshipTypes?.forEach(i=>{i.name&&(t.set(i.name,"relationship"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.relationshipTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{if("entity"===t.get(s))this.entityTypeNames.add(s);else{if("relationship"!==t.get(s))return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);this.relationshipTypeNames.add(s)}const a=new Map;i.members?.forEach(e=>{o(this.memberIdTypeLookup,e.id,()=>new Set).add(s)}),this.sublayerCaches.set(s,a)})}addToLayer(e){e.forEach(({typeName:e,id:t})=>{if(!this.inclusionModeDefinition)throw new i("knowledge-graph:layer-data-manager","You cannot add to a layer's exclusion list if it was not created with an exclusion list originally");if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){const i=this.inclusionModeDefinition.namedTypeDefinitions.get(e);i.members||(i.members=new Map),i.members.set(t,{id:t}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}}else{const i=new Map;i.set(t,{id:t}),this.inclusionModeDefinition.namedTypeDefinitions.set(e,{useAllData:!1,members:i}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}})}getById(e){return I.getInstance().readFromStoreById(e)}async getData(e,t,i){if(t.objectType.name&&this.inclusionModeDefinition?.namedTypeDefinitions&&this.inclusionModeDefinition.namedTypeDefinitions.size>0&&!this.inclusionModeDefinition.namedTypeDefinitions.has(t.objectType.name))return[];let n;if(n=e||new N({where:"1=1",outFields:["*"]}),"link-chart"===t.parentCompositeLayer.type){const e=t.parentCompositeLayer,i=this._processingCacheUpdatesLookup.get(t.objectType.name??""),o=n.outFields;o&&1===o.length&&o[0]===y&&"1=1"===n.where||await Promise.all(i??[]);const s=this.sublayerCaches.has(t.objectType.name??"")?Array.from(this.sublayerCaches.get(t.objectType.name)?.values()):[],a=[];return s.forEach(i=>{if(this.relationshipTypeNames.has(t.objectType.name)){i.geometry=e.relationshipLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.memberIdTypeLookup.get(i.attributes[u]),o=this.memberIdTypeLookup.get(i.attributes[f]),s=this._isEndEntitySpatial(n,i,u),a=this._isEndEntitySpatial(o,i,f);i.attributes[g]=Number(s&&a)}else{i.geometry=e.entityLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.geographicLookup.get(t.objectType.name);n&&i.attributes[n.name]?i.attributes[g]=1:i.attributes[g]=0}i.attributes[b]=i.geometry,a.push(i)}),a}return this.retrieveDataFromService(n,t,i)}async getConnectedRecordIds(e,t,i){const n=[];let o="";const s=this._getNamedTypeIdMapFromNodeIds(e);if(t&&0!==t?.length){for(const e of t)o=o+e+"|";o=o.slice(0,-1)}const a={},r=[];for(const[m,l]of s){const e=`${m}_ids`;a[e]=l,t&&0!==t?.length?r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r:${o}]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`):r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`)}if(!r.length)return n;const p=r.join(" UNION "),d=(await D(this.knowledgeGraph,new E({openCypherQuery:p,bindParameters:a}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];n.push({id:e[0],typeName:e[1]}),n.push({id:e[2],typeName:e[3]})}}return n}async getRelationshipsBetweenNodes(e,t,i){const n=this._getNamedTypeIdMapFromNodeIds(e);if(0===n.size)return[];const o={relationshipExclusionIds:t,possibleConnectionEntityIds:e},s=[];for(const[d,m]of n.entries()){const e=`${d}_ids`;o[e]=m,s.push(`MATCH (n:${d}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]->(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const a=s.join(" UNION "),r=[],p=(await D(this.knowledgeGraph,new E({openCypherQuery:a,bindParameters:o}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];r.push({id:e[0],typeName:e[1]})}}return r}async getRelationshipsFromNodes(e,t,i,n){const o=this._getNamedTypeIdMapFromNodeIds(e);if(0===o.size||0===t.length)return[];const s={relationshipExclusionIds:i,possibleConnectionEntityIds:t},a=[];for(const[l,h]of o.entries()){const e=`${l}_ids`;s[e]=h,a.push(`MATCH (n:${l}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const r=a.join(" UNION "),p=new Map,d=(await D(this.knowledgeGraph,new E({openCypherQuery:r,bindParameters:s}),{signal:n?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];let n=p.get(e[1]);n||(n=new Set,p.set(e[1],n)),n.add(e[0])}}const m=[];for(const[l,h]of p)for(const e of h)m.push({id:e,typeName:l});return m}async refreshCacheContent(e,t,n,a=!0,r){const p=I.getInstance(),d=[],m=new Map,l=new Map;this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),this.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),e||this.inclusionModeDefinition?e?e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const t of this.memberIdTypeLookup.get(e))m.has(t)?m.get(t)?.push(e):m.set(t,[e])}):this.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e.useAllData?m.set(t,null):e.members&&e.members.forEach(e=>{m.has(t)&&null!==m.get(t)?m.get(t)?.push(e.id):m.set(t,[e.id])})}):(this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}),this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}));for(const[s,h]of m){const e=new Set(h),m=new Promise((d,m)=>{const c=async()=>{const d=new Set,m=[];let c,u="",f=!1;if(t||l.get(s)?.properties?.forEach(e=>{e.name&&d.add(e.name)}),n&&this.geographicLookup.has(s)){const e=this.geographicLookup.get(s)?.name;e&&d.add(e)}if(this.entityTypeNames.has(s))u=`MATCH (n:${s}) ${h?"WHERE id(n) IN $ids ":""}return ID(n)`,d.forEach(e=>{u+=`, n.${e}`,m.push(e)});else{if(!this.relationshipTypeNames.has(s))throw new i("knowledge-graph:layer-data-manager",`The graph type of ${s} could not be determined. Was this type set in the KG data model and inclusion definition?`);f=!0,u=`MATCH ()-[n:${s}]->() ${h?"WHERE id(n) IN $ids ":""}return ID(n), id(startNode(n)), id(endNode(n))`,d.forEach(e=>{u+=`, n.${e}`,m.push(e)})}c=new E(h?{openCypherQuery:u,bindParameters:{ids:h}}:{openCypherQuery:u});const g=(await D(this.knowledgeGraph,c,{signal:r?.signal})).resultRowsStream.getReader();for(;;){const{done:t,value:i}=await g.read();if(t)break;const n=[];for(let s=0;s<i.length;s++){const t=i[s];let a=0,r=0;const p={properties:{}};for(p.id=t[a],a++,r++,f&&(p.originId=t[a],a++,r++,p.destinationId=t[a],a++,r++,o(this.nodeConnectionsLookup,p.originId,()=>new Set).add(p.id),o(this.nodeConnectionsLookup,p.destinationId,()=>new Set).add(p.id),o(this.relationshipConnectionsLookup,p.id,()=>[p.originId,p.destinationId]));a<t.length;a++)p.properties[m[a-r]]=t[a];e.delete(p.id),n.push(p)}const r=p.writeToStore(n,y,this.geographicLookup.get(s)?.name);this.sublayerCaches.has(s)||this.sublayerCaches.set(s,new Map),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.has(s)&&this.inclusionModeDefinition?.namedTypeDefinitions.set(s,{useAllData:!1,members:new Map}),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members&&(this.inclusionModeDefinition.namedTypeDefinitions.get(s).members=new Map);const d=this.sublayerCaches.get(s);r.forEach(e=>{d?.set(e.attributes[y],e),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.has(e.attributes[y])&&(this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.set(e.attributes[y],{id:e.attributes[y]}),o(this.memberIdTypeLookup,e.attributes[y],()=>new Set).add(s))})}const b=this.inclusionModeDefinition?.namedTypeDefinitions.get(s);if(b)for(const t of e)b.members?.delete(t)};c().then(()=>{d(null)}).catch(e=>{"AbortError"===e.name?d(null):m(e)})});d.push(m),this._processingCacheUpdatesLookup.get(s)?.push(m)}if(await Promise.all(d),r?.signal?.aborted)throw s()}removeFromLayer(e){const t=new Set,i=new Set(e.map(e=>e.id));for(const n of e)t.add(n.typeName),1===this.memberIdTypeLookup.get(n.id)?.size?this.memberIdTypeLookup.delete(n.id):this.memberIdTypeLookup.get(n.id)?.delete(n.typeName),this.inclusionModeDefinition?.namedTypeDefinitions.forEach((e,t)=>{t===n.typeName&&e.members?.has(n.id)&&e.members.delete(n.id)});t.forEach(e=>{this.sublayerCaches.get(e)?.forEach((t,n)=>{i.has(n)&&this.sublayerCaches.get(e)?.delete(n)})})}async retrieveDataFromService(e,t,n){const o=I.getInstance(),s=new Set,r=[];let p,u="",f=[];const g="relationship"===t.graphType,b=this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData,N=t.parentCompositeLayer.sublayerIdsCache.get(t.objectType.name);let k=!b&&N?Array.from(N).sort():null;if(this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData)this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData&&null!=e.objectIds&&(k=e.objectIds);else if(null!=e.objectIds&&k&&k.length>0){const t=e.objectIds;e.objectIds=k.filter(e=>t.includes(e))}else if(null!=e.objectIds)k=e.objectIds;else{if(this.inclusionModeDefinition?.namedTypeDefinitions.has(t.objectType.name)&&(!this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members||this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members?.size<1))return e.objectIds=[],[];e.objectIds=k}if(null!=e.outFields){const i=e.outFields;i.includes("*")?t.fields.forEach(e=>{s.add(e.name)}):i.forEach(e=>{e!==y&&e!==t.geometryFieldName&&s.add(e)})}if(null!=e.geometry){const n=e.geometry;let o;const y=t.parentCompositeLayer.dataManager.knowledgeGraph.serviceDefinition,f=y?.spatialReference,b=y?.serviceCapabilities?.geometryCapabilities;let T=b?.geometryMaxBoundingRectangleSizeX,w=b?.geometryMaxBoundingRectangleSizeY;if("point"===n.type){let e=n;e.spatialReference?.isWGS84||(await l(e.spatialReference,c),e=h(e,c)),o=new d({spatialReference:c,xmin:e.x-1e-4,ymin:e.y-1e-4,xmax:e.x+1e-4,ymax:e.y+1e-4})}else n?.extent?.spatialReference&&!n.spatialReference?.isWGS84?(await l(n.extent.spatialReference,c),o=h(n.extent,c)):o=n.extent;if(T&&w&&f){if(4326!==f.wkid){const e=new d({spatialReference:f,xmax:T,ymax:w}),t=h(e,c);T=t.xmax,w=t.ymax}if(o.xmax-o.xmin>T)throw new i("knowledge-graph:layer-data-manager",`Extent x bounds should be within ${T}° latitude, limit exceeded`);if(o.ymax-o.ymin>w)throw new i("knowledge-graph:layer-data-manager",`Extent y bounds should be within ${w}° longitude, limit exceeded`)}if(null!=e.where&&"1=1"!==e.where){const i=await a(e.where.toUpperCase(),t.fieldsIndex);t.fields.forEach(e=>{i.fieldNames.includes(e.name)&&s.add(e.name)})}u=g?`Match ()-[n:${t.objectType.name}]->() WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n), id(startNode(r)), id(endNode(r))`:`Match (n:${t.objectType.name}) WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n)`,t.geometryFieldName&&s.add(t.geometryFieldName),s.forEach(e=>{u+=`, n.${e}`,r.push(e)}),p=new E({openCypherQuery:u,bindParameters:{param_filter_geom:new m({rings:M(o)})}})}else{let i="";if(null!=e.where&&"1=1"!==e.where){const n=await a(e.where,t.fieldsIndex);t.fields.forEach(e=>{n.fieldNames.includes(e.name)&&s.add(e.name)});const o={systemOidFieldName:y,supportedSqlTypes:new Set(["column-reference","string","number","binary-expression"]),supportedSqlOperators:new Set(["=","<","<=","<>",">",">=","AND","OR","LIKE"]),unsupportedOperationFound:!1};i=T(n.parseTree,o),o.unsupportedOperationFound&&(i="")}let n="";n=g?`Match ()-[n:${t.objectType.name}]->()`:`Match (n:${t.objectType.name})`;let o=!1;k&&(o=!0,n+=" WHERE ID(n) IN $ids"),i&&(n+=o?" AND":" WHERE",n+=` ${i}`),n+=" return ID(n)",g&&(n+=", id(startNode(n)), id(endNode(n))"),e.returnGeometry&&t.geometryFieldName&&s.add(t.geometryFieldName),s.forEach(e=>{n+=`, n.${e}`,r.push(e)}),n=w(n,e),p=new E(k?{openCypherQuery:n,bindParameters:{ids:k}}:{openCypherQuery:n})}const C=(await D(t.parentCompositeLayer.dataManager.knowledgeGraph,p,n)).resultRowsStream.getReader();for(;;){const{done:e,value:i}=await C.read();if(e)break;const n=[];for(let t=0;t<i.length;t++){const e=i[t];let o=0,s=0;const a={properties:{}};for(a.id=e[o],o++,s++,g&&(a.originId=e[o],o++,s++,a.destinationId=e[o],o++,s++);o<e.length;o++)a.properties[r[o-s]]=e[o];n.push(a)}f=f.concat(o.writeToStore(n,y,t.parentCompositeLayer.dataManager.geographicLookup.get(t.objectType.name)?.name))}return f}_isEndEntitySpatial(e,t,i){for(const n of e??[])if(this.entityTypeNames.has(n)){const e=this.geographicLookup.get(n),o=e&&this.sublayerCaches.get(n)?.get(t.attributes[i]);if(e&&o?.attributes[e.name])return!0}return!1}_getNamedTypeIdMapFromNodeIds(e){const t=new Map;return e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const i of this.memberIdTypeLookup.get(e)){if(!this.entityTypeNames.has(i))return;t.has(i)?t.get(i)?.push(e):t.set(i,[e])}}),t}};e([r()],k.prototype,"knowledgeGraph",void 0),e([r()],k.prototype,"inclusionModeDefinition",void 0),e([r()],k.prototype,"entityTypeNames",void 0),e([r()],k.prototype,"relationshipTypeNames",void 0),e([r()],k.prototype,"geographicLookup",void 0),e([r()],k.prototype,"sublayerCaches",void 0),e([r()],k.prototype,"nodeConnectionsLookup",void 0),e([r()],k.prototype,"relationshipConnectionsLookup",void 0),e([r()],k.prototype,"memberIdTypeLookup",void 0),k=e([p("esri.layers.knowledgeGraph.KnowledgeGraphLayerDataManager")],k);export{k as KnowledgeGraphLayerDataManager};
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import i from"../../core/Error.js";import n from"../../core/Logger.js";import{getOrCreateMapValue as o}from"../../core/MapUtils.js";import{createAbortError as s}from"../../core/promiseUtils.js";import{parseWhereClause as a}from"../../core/sql.js";import{property as r,subclass as d}from"../../core/accessorSupport/decorators.js";import p from"../../geometry/Extent.js";import m from"../../geometry/Polygon.js";import{initializeProjection as l,project as h}from"../../geometry/projectionUtils.js";import{wgs84 as c}from"../../geometry/support/spatialReferenceUtils.js";import{systemOidFieldName as y,systemOriginIdFieldName as u,systemDestinationIdFieldName as f,systemIsSpatialFieldName as g,systemLayoutGeometryFieldName as b}from"./constants.js";import{recursiveParseSqlToCypher as T,addAdditionalClausesToCypher as w}from"./cypherUtils.js";import I from"./SessionMemoryStorage.js";import{utilsExtentToInBoundsRings as M}from"./supportUtils.js";import{executeQueryStreaming as D}from"../../rest/knowledgeGraphService.js";import E from"../../rest/knowledgeGraph/GraphQueryStreaming.js";import N from"../../rest/support/Query.js";let k=class extends t{constructor(e){super(e),this._processingCacheUpdatesLookup=new Map,this.knowledgeGraph=null,this.inclusionModeDefinition={generateAllSublayers:!0,namedTypeDefinitions:new Map},this.entityTypeNames=new Set,this.relationshipTypeNames=new Set,this.geographicLookup=new Map,this.sublayerCaches=new Map,this.nodeConnectionsLookup=new Map,this.relationshipConnectionsLookup=new Map,this.memberIdTypeLookup=new Map;const t=new Map;e.knowledgeGraph.dataModel.entityTypes?.forEach(i=>{i.name&&(t.set(i.name,"entity"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.entityTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.knowledgeGraph.dataModel.relationshipTypes?.forEach(i=>{i.name&&(t.set(i.name,"relationship"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.relationshipTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{if("entity"===t.get(s))this.entityTypeNames.add(s);else{if("relationship"!==t.get(s))return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);this.relationshipTypeNames.add(s)}const a=new Map;i.members?.forEach(e=>{o(this.memberIdTypeLookup,e.id,()=>new Set).add(s)}),this.sublayerCaches.set(s,a)})}addToLayer(e){e.forEach(({typeName:e,id:t})=>{if(!this.inclusionModeDefinition)throw new i("knowledge-graph:layer-data-manager","You cannot add to a layer's exclusion list if it was not created with an exclusion list originally");if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){const i=this.inclusionModeDefinition.namedTypeDefinitions.get(e);i.members||(i.members=new Map),i.members.set(t,{id:t}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}}else{const i=new Map;i.set(t,{id:t}),this.inclusionModeDefinition.namedTypeDefinitions.set(e,{useAllData:!1,members:i}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}})}getById(e){return I.getInstance().readFromStoreById(e)}async getData(e,t,i,n){if(t.objectType.name&&this.inclusionModeDefinition?.namedTypeDefinitions&&this.inclusionModeDefinition.namedTypeDefinitions.size>0&&!this.inclusionModeDefinition.namedTypeDefinitions.has(t.objectType.name))return[];let o;if(o=e||new N({where:"1=1",outFields:["*"]}),"link-chart"===i.type){const e=i,n=this._processingCacheUpdatesLookup.get(t.objectType.name??""),s=o.outFields;s&&1===s.length&&s[0]===y&&"1=1"===o.where||await Promise.all(n??[]);const a=this.sublayerCaches.has(t.objectType.name??"")?Array.from(this.sublayerCaches.get(t.objectType.name)?.values()):[],r=[];return a.forEach(i=>{if(this.relationshipTypeNames.has(t.objectType.name)){i.geometry=e.relationshipLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.memberIdTypeLookup.get(i.attributes[u]),o=this.memberIdTypeLookup.get(i.attributes[f]),s=this._isEndEntitySpatial(n,i,u),a=this._isEndEntitySpatial(o,i,f);i.attributes[g]=Number(s&&a)}else{i.geometry=e.entityLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.geographicLookup.get(t.objectType.name);n&&i.attributes[n.name]?i.attributes[g]=1:i.attributes[g]=0}i.attributes[b]=i.geometry,r.push(i)}),r}return this.retrieveDataFromService(o,t,i,n)}async getConnectedRecordIds(e,t,i){const n=[];let o="";const s=this._getNamedTypeIdMapFromNodeIds(e);if(t&&0!==t?.length){for(const e of t)o=o+e+"|";o=o.slice(0,-1)}const a={},r=[];for(const[m,l]of s){const e=`${m}_ids`;a[e]=l,t&&0!==t?.length?r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r:${o}]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`):r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`)}if(!r.length)return n;const d=r.join(" UNION "),p=(await D(this.knowledgeGraph,new E({openCypherQuery:d,bindParameters:a}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];n.push({id:e[0],typeName:e[1]}),n.push({id:e[2],typeName:e[3]})}}return n}async getRelationshipsBetweenNodes(e,t,i){const n=this._getNamedTypeIdMapFromNodeIds(e);if(0===n.size)return[];const o={relationshipExclusionIds:t,possibleConnectionEntityIds:e},s=[];for(const[p,m]of n.entries()){const e=`${p}_ids`;o[e]=m,s.push(`MATCH (n:${p}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]->(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const a=s.join(" UNION "),r=[],d=(await D(this.knowledgeGraph,new E({openCypherQuery:a,bindParameters:o}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];r.push({id:e[0],typeName:e[1]})}}return r}async getRelationshipsFromNodes(e,t,i,n){const o=this._getNamedTypeIdMapFromNodeIds(e);if(0===o.size||0===t.length)return[];const s={relationshipExclusionIds:i,possibleConnectionEntityIds:t},a=[];for(const[l,h]of o.entries()){const e=`${l}_ids`;s[e]=h,a.push(`MATCH (n:${l}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const r=a.join(" UNION "),d=new Map,p=(await D(this.knowledgeGraph,new E({openCypherQuery:r,bindParameters:s}),{signal:n?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];let n=d.get(e[1]);n||(n=new Set,d.set(e[1],n)),n.add(e[0])}}const m=[];for(const[l,h]of d)for(const e of h)m.push({id:e,typeName:l});return m}async refreshCacheContent(e,t,n,a=!0,r){const d=I.getInstance(),p=[],m=new Map,l=new Map;this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),this.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),e||this.inclusionModeDefinition?e?e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const t of this.memberIdTypeLookup.get(e))m.has(t)?m.get(t)?.push(e):m.set(t,[e])}):this.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e.useAllData?m.set(t,null):e.members&&e.members.forEach(e=>{m.has(t)&&null!==m.get(t)?m.get(t)?.push(e.id):m.set(t,[e.id])})}):(this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}),this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}));for(const[s,h]of m){const e=new Set(h),m=new Promise((p,m)=>{const c=async()=>{const p=new Set,m=[];let c,u="",f=!1;if(t||l.get(s)?.properties?.forEach(e=>{e.name&&p.add(e.name)}),n&&this.geographicLookup.has(s)){const e=this.geographicLookup.get(s)?.name;e&&p.add(e)}if(this.entityTypeNames.has(s))u=`MATCH (n:${s}) ${h?"WHERE id(n) IN $ids ":""}return ID(n)`,p.forEach(e=>{u+=`, n.${e}`,m.push(e)});else{if(!this.relationshipTypeNames.has(s))throw new i("knowledge-graph:layer-data-manager",`The graph type of ${s} could not be determined. Was this type set in the KG data model and inclusion definition?`);f=!0,u=`MATCH ()-[n:${s}]->() ${h?"WHERE id(n) IN $ids ":""}return ID(n), id(startNode(n)), id(endNode(n))`,p.forEach(e=>{u+=`, n.${e}`,m.push(e)})}c=new E(h?{openCypherQuery:u,bindParameters:{ids:h}}:{openCypherQuery:u});const g=(await D(this.knowledgeGraph,c,{signal:r?.signal})).resultRowsStream.getReader();for(;;){const{done:t,value:i}=await g.read();if(t)break;const n=[];for(let s=0;s<i.length;s++){const t=i[s];let a=0,r=0;const d={properties:{}};for(d.id=t[a],a++,r++,f&&(d.originId=t[a],a++,r++,d.destinationId=t[a],a++,r++,o(this.nodeConnectionsLookup,d.originId,()=>new Set).add(d.id),o(this.nodeConnectionsLookup,d.destinationId,()=>new Set).add(d.id),o(this.relationshipConnectionsLookup,d.id,()=>[d.originId,d.destinationId]));a<t.length;a++)d.properties[m[a-r]]=t[a];e.delete(d.id),n.push(d)}const r=d.writeToStore(n,y,this.geographicLookup.get(s)?.name);this.sublayerCaches.has(s)||this.sublayerCaches.set(s,new Map),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.has(s)&&this.inclusionModeDefinition?.namedTypeDefinitions.set(s,{useAllData:!1,members:new Map}),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members&&(this.inclusionModeDefinition.namedTypeDefinitions.get(s).members=new Map);const p=this.sublayerCaches.get(s);r.forEach(e=>{p?.set(e.attributes[y],e),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.has(e.attributes[y])&&(this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.set(e.attributes[y],{id:e.attributes[y]}),o(this.memberIdTypeLookup,e.attributes[y],()=>new Set).add(s))})}const b=this.inclusionModeDefinition?.namedTypeDefinitions.get(s);if(b)for(const t of e)b.members?.delete(t)};c().then(()=>{p(null)}).catch(e=>{"AbortError"===e.name?p(null):m(e)})});p.push(m),this._processingCacheUpdatesLookup.get(s)?.push(m)}if(await Promise.all(p),r?.signal?.aborted)throw s()}removeFromLayer(e){const t=new Set,i=new Set(e.map(e=>e.id));for(const n of e)t.add(n.typeName),1===this.memberIdTypeLookup.get(n.id)?.size?this.memberIdTypeLookup.delete(n.id):this.memberIdTypeLookup.get(n.id)?.delete(n.typeName),this.inclusionModeDefinition?.namedTypeDefinitions.forEach((e,t)=>{t===n.typeName&&e.members?.has(n.id)&&e.members.delete(n.id)});t.forEach(e=>{this.sublayerCaches.get(e)?.forEach((t,n)=>{i.has(n)&&this.sublayerCaches.get(e)?.delete(n)})})}async retrieveDataFromService(e,t,n,o){const s=I.getInstance(),r=new Set,d=[];let u,f="",g=[];const b="relationship"===t.graphType,N=this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData,k=n.sublayerIdsCache.get(t.objectType.name);let C=!N&&k?Array.from(k).sort():null;if(this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData)this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData&&null!=e.objectIds&&(C=e.objectIds);else if(null!=e.objectIds&&C&&C.length>0){const t=e.objectIds;e.objectIds=C.filter(e=>t.includes(e))}else if(null!=e.objectIds)C=e.objectIds;else{if(this.inclusionModeDefinition?.namedTypeDefinitions.has(t.objectType.name)&&(!this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members||this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members?.size<1))return e.objectIds=[],[];e.objectIds=C}if(null!=e.outFields){const i=e.outFields;i.includes("*")?t.fields.forEach(e=>{r.add(e.name)}):i.forEach(e=>{e!==y&&e!==t.geometryFieldName&&r.add(e)})}if(null!=e.geometry){const o=e.geometry;let s;const y=n.dataManager.knowledgeGraph.serviceDefinition,g=y?.spatialReference,T=y?.serviceCapabilities?.geometryCapabilities;let w=T?.geometryMaxBoundingRectangleSizeX,I=T?.geometryMaxBoundingRectangleSizeY;if("point"===o.type){let e=o;e.spatialReference?.isWGS84||(await l(e.spatialReference,c),e=h(e,c)),s=new p({spatialReference:c,xmin:e.x-1e-4,ymin:e.y-1e-4,xmax:e.x+1e-4,ymax:e.y+1e-4})}else o?.extent?.spatialReference&&!o.spatialReference?.isWGS84?(await l(o.extent.spatialReference,c),s=h(o.extent,c)):s=o.extent;if(w&&I&&g){if(4326!==g.wkid){const e=new p({spatialReference:g,xmax:w,ymax:I}),t=h(e,c);w=t.xmax,I=t.ymax}if(s.xmax-s.xmin>w)throw new i("knowledge-graph:layer-data-manager",`Extent x bounds should be within ${w}° latitude, limit exceeded`);if(s.ymax-s.ymin>I)throw new i("knowledge-graph:layer-data-manager",`Extent y bounds should be within ${I}° longitude, limit exceeded`)}if(null!=e.where&&"1=1"!==e.where){const i=await a(e.where.toUpperCase(),t.fieldsIndex);t.fields.forEach(e=>{i.fieldNames.includes(e.name)&&r.add(e.name)})}f=b?`Match ()-[n:${t.objectType.name}]->() WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n), id(startNode(r)), id(endNode(r))`:`Match (n:${t.objectType.name}) WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n)`,t.geometryFieldName&&r.add(t.geometryFieldName),r.forEach(e=>{f+=`, n.${e}`,d.push(e)}),u=new E({openCypherQuery:f,bindParameters:{param_filter_geom:new m({rings:M(s)})}})}else{let i="";if(null!=e.where&&"1=1"!==e.where){const n=await a(e.where,t.fieldsIndex);t.fields.forEach(e=>{n.fieldNames.includes(e.name)&&r.add(e.name)});const o={systemOidFieldName:y,supportedSqlTypes:new Set(["column-reference","string","number","binary-expression"]),supportedSqlOperators:new Set(["=","<","<=","<>",">",">=","AND","OR","LIKE"]),unsupportedOperationFound:!1};i=T(n.parseTree,o),o.unsupportedOperationFound&&(i="")}let n="";n=b?`Match ()-[n:${t.objectType.name}]->()`:`Match (n:${t.objectType.name})`;let o=!1;C&&(o=!0,n+=" WHERE ID(n) IN $ids"),i&&(n+=o?" AND":" WHERE",n+=` ${i}`),n+=" return ID(n)",b&&(n+=", id(startNode(n)), id(endNode(n))"),e.returnGeometry&&t.geometryFieldName&&r.add(t.geometryFieldName),r.forEach(e=>{n+=`, n.${e}`,d.push(e)}),n=w(n,e),u=new E(C?{openCypherQuery:n,bindParameters:{ids:C}}:{openCypherQuery:n})}const j=(await D(n.dataManager.knowledgeGraph,u,o)).resultRowsStream.getReader();for(;;){const{done:e,value:i}=await j.read();if(e)break;const o=[];for(let t=0;t<i.length;t++){const e=i[t];let n=0,s=0;const a={properties:{}};for(a.id=e[n],n++,s++,b&&(a.originId=e[n],n++,s++,a.destinationId=e[n],n++,s++);n<e.length;n++)a.properties[d[n-s]]=e[n];o.push(a)}g=g.concat(s.writeToStore(o,y,n.dataManager.geographicLookup.get(t.objectType.name)?.name))}return g}_isEndEntitySpatial(e,t,i){for(const n of e??[])if(this.entityTypeNames.has(n)){const e=this.geographicLookup.get(n),o=e&&this.sublayerCaches.get(n)?.get(t.attributes[i]);if(e&&o?.attributes[e.name])return!0}return!1}_getNamedTypeIdMapFromNodeIds(e){const t=new Map;return e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const i of this.memberIdTypeLookup.get(e)){if(!this.entityTypeNames.has(i))return;t.has(i)?t.get(i)?.push(e):t.set(i,[e])}}),t}};e([r()],k.prototype,"knowledgeGraph",void 0),e([r()],k.prototype,"inclusionModeDefinition",void 0),e([r()],k.prototype,"entityTypeNames",void 0),e([r()],k.prototype,"relationshipTypeNames",void 0),e([r()],k.prototype,"geographicLookup",void 0),e([r()],k.prototype,"sublayerCaches",void 0),e([r()],k.prototype,"nodeConnectionsLookup",void 0),e([r()],k.prototype,"relationshipConnectionsLookup",void 0),e([r()],k.prototype,"memberIdTypeLookup",void 0),k=e([d("esri.layers.knowledgeGraph.KnowledgeGraphLayerDataManager")],k);export{k as KnowledgeGraphLayerDataManager};
|
|
@@ -468,7 +468,7 @@ export default class KnowledgeGraphSublayer extends KnowledgeGraphSublayerSuperc
|
|
|
468
468
|
/** Outlines the [type](https://developers.arcgis.com/javascript/latest/references/core/rest/knowledgeGraph/GraphObjectType/) definition for the named type represented by the sublayer. */
|
|
469
469
|
accessor objectType: GraphObjectType;
|
|
470
470
|
/** The [KnowledgeGraphLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/) of which this is a sublayer for a specific entity or relationship type. */
|
|
471
|
-
accessor parentCompositeLayer: LinkChartLayer | KnowledgeGraphLayer;
|
|
471
|
+
accessor parentCompositeLayer: LinkChartLayer | KnowledgeGraphLayer | null | undefined;
|
|
472
472
|
/**
|
|
473
473
|
* Enable persistence of the layer in a [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/) or [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
|
|
474
474
|
*
|